From: vsr Date: Mon, 8 Oct 2012 11:13:10 +0000 (+0000) Subject: Merge from V6_main (04/10/2012) X-Git-Tag: V7_0_0~2 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=aeb48974ed761c5e30d44a83149330153dc13d85;p=modules%2Fmed.git Merge from V6_main (04/10/2012) --- diff --git a/CMakeLists.txt b/CMakeLists.txt index b8fbd59c3..a431ab0ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,12 +26,15 @@ ENDIF(COMMAND cmake_policy) ENABLE_TESTING() SET(VERSION "6.5.0") SET(VERSION_DEV "1") +SET(WITH_MEDMEMGUI "0") SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR}) -FILE(TO_CMAKE_PATH $ENV{KERNEL_ROOT_DIR} KERNEL_ROOT_DIR) - IF(KERNEL_ROOT_DIR) + FILE(TO_CMAKE_PATH $ENV{KERNEL_ROOT_DIR} KERNEL_ROOT_DIR) SET(MED_ENABLE_KERNEL ON) + + SET(SALOME_MACROS_DIR ${KERNEL_ROOT_DIR}/salome_adm/cmake_files) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindPLATFORM.cmake) INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindPYTHON.cmake) INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindMPI.cmake) @@ -43,17 +46,13 @@ IF(KERNEL_ROOT_DIR) INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSWIG.cmake) INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindCPPUNIT.cmake) INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindDOXYGEN.cmake) + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSPHINX.cmake) INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindLIBBATCH.cmake) INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindKERNEL.cmake) -ELSE(KERNEL_ROOT_DIR) - INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindPLATFORM.cmake) - INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindMPI.cmake) -ENDIF(KERNEL_ROOT_DIR) - -SET(GUI_ROOT_DIR $ENV{GUI_ROOT_DIR}) -FILE(TO_CMAKE_PATH $ENV{GUI_ROOT_DIR} GUI_ROOT_DIR) -IF(GUI_ROOT_DIR) + SET(GUI_ROOT_DIR $ENV{GUI_ROOT_DIR}) + FILE(TO_CMAKE_PATH $ENV{GUI_ROOT_DIR} GUI_ROOT_DIR) + IF(GUI_ROOT_DIR) SET(MED_ENABLE_GUI ON) INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindCAS.cmake) INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindQT4.cmake) @@ -62,7 +61,21 @@ IF(GUI_ROOT_DIR) INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindQWT.cmake) INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindSIPPYQT.cmake) INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindGUI.cmake) -ENDIF(GUI_ROOT_DIR) + ENDIF(GUI_ROOT_DIR) +ELSE(KERNEL_ROOT_DIR) + SET(SALOME_MACROS_DIR ${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files) + + INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindPLATFORM.cmake) + INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindMPI.cmake) + INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindBOOST.cmake) + INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindCPPUNIT.cmake) + INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindHDF5.cmake) + INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindPYTHON.cmake) + INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindLIBXML2.cmake) + INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindPTHREADS.cmake) + INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindSWIG.cmake) + +ENDIF(KERNEL_ROOT_DIR) INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindPARMETIS.cmake) INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindMETIS.cmake) @@ -112,6 +125,8 @@ SET(MED_admlocalcmake adm_local/cmake_files) IF(MED_ENABLE_KERNEL) ADD_SUBDIRECTORY(idl) +ELSE(MED_ENABLE_KERNEL) + ADD_SUBDIRECTORY(adm_local_without_kernel) ENDIF(MED_ENABLE_KERNEL) ADD_SUBDIRECTORY(adm_local) ADD_SUBDIRECTORY(src) diff --git a/adm_local/unix/make_common_starter.am b/adm_local/unix/make_common_starter.am index 2a414b3ae..6d704892b 100644 --- a/adm_local/unix/make_common_starter.am +++ b/adm_local/unix/make_common_starter.am @@ -26,8 +26,8 @@ if MED_ENABLE_KERNEL AM_CXXFLAGS = @KERNEL_CXXFLAGS@ -include SALOMEconfig.h AM_CPPFLAGS = @KERNEL_CXXFLAGS@ -include SALOMEconfig.h else !MED_ENABLE_KERNEL - AM_CXXFLAGS = -I$(top_builddir)/adm_local_without_kernel/unix -include SALOMEconfig.h - AM_CPPFLAGS = -I$(top_builddir)/adm_local_without_kernel/unix -include SALOMEconfig.h + AM_CXXFLAGS = -I$(top_builddir)/adm_local_without_kernel -include SALOMEconfig.h + AM_CPPFLAGS = -I$(top_builddir)/adm_local_without_kernel -include SALOMEconfig.h endif # ============================================================ @@ -66,22 +66,7 @@ sharedpkgpythondir = $(salomepythondir)/shared_modules # Documentation directory docdir = $(datadir)/doc/salome -# common rules - -# meta object implementation files generation (moc) -%_moc.cxx: %.h - $(MOC) $< -o $@ - -# translation (*.qm) files generation (lrelease) -%.qm: %.ts - $(LRELEASE) $< -qm $@ - -EXTRA_DIST = $(MOC_FILES:%_moc.cxx=%.h) $(nodist_salomeres_DATA:%.qm=%.ts) - -# customize clean operation -mostlyclean-local: - rm -f @builddir@/*_moc.cxx - rm -f @builddir@/*.qm +EXTRA_DIST = # tests tests: unittest diff --git a/adm_local_without_kernel/CMakeLists.txt b/adm_local_without_kernel/CMakeLists.txt new file mode 100755 index 000000000..1575c37e7 --- /dev/null +++ b/adm_local_without_kernel/CMakeLists.txt @@ -0,0 +1,24 @@ +# Copyright (C) 2007-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 +# + +SET(input ${CMAKE_CURRENT_SOURCE_DIR}/SALOMEconfig.h.in) +SET(output ${CMAKE_CURRENT_BINARY_DIR}/SALOMEconfig.h) +MESSAGE(STATUS "Creation of ${output}") +CONFIGURE_FILE(${input} ${output}) +INSTALL(FILES ${output} DESTINATION ${MED_salomeinclude_HEADERS}) diff --git a/adm_local_without_kernel/Makefile.am b/adm_local_without_kernel/Makefile.am index aa96c87ae..eb57b1686 100644 --- a/adm_local_without_kernel/Makefile.am +++ b/adm_local_without_kernel/Makefile.am @@ -21,4 +21,10 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am SUBDIRS = unix -EXTRA_DIST += cmake_files \ No newline at end of file +EXTRA_DIST += cmake_files + +EXTRA_DIST += SALOMEconfig.h.in + +if !MED_ENABLE_KERNEL + nodist_salomeinclude_HEADERS = SALOMEconfig.h +endif diff --git a/adm_local_without_kernel/SALOMEconfig.h.in b/adm_local_without_kernel/SALOMEconfig.h.in new file mode 100755 index 000000000..8db6100ef --- /dev/null +++ b/adm_local_without_kernel/SALOMEconfig.h.in @@ -0,0 +1,65 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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 +// + +/* Debug mode ??? */ +#ifndef DEBUG +# define DEBUG +#endif + +/* CORBA headers include rules */ +#ifndef CORBA_CLIENT_HEADER +# define QUOTE(x) #x +# define CORBA_CLIENT_HEADER(x) QUOTE(x@IDL_CLN_H@) +# define CORBA_SERVER_HEADER(x) QUOTE(x@IDL_SRV_H@) +#endif + +/* Platform definition */ +#ifndef @MACHINE@ + #define @MACHINE@ +#endif + +// This is only to suppress warning messages with defines redefined (cause of omniORB that exports these names) +#ifdef PACKAGE +#undef PACKAGE +#endif +#ifdef PACKAGE_BUGREPORT +#undef PACKAGE_BUGREPORT +#endif +#ifdef PACKAGE_NAME +#undef PACKAGE_NAME +#endif +#ifdef PACKAGE_STRING +#undef PACKAGE_STRING +#endif +#ifdef PACKAGE_TARNAME +#undef PACKAGE_TARNAME +#endif +#ifdef PACKAGE_VERSION +#undef PACKAGE_VERSION +#endif +#ifdef VERSION +#undef VERSION +#endif + +#ifdef _POSIX_C_SOURCE +#undef _POSIX_C_SOURCE +#endif diff --git a/adm_local_without_kernel/cmake_files/FindBOOST.cmake b/adm_local_without_kernel/cmake_files/FindBOOST.cmake new file mode 100755 index 000000000..bd9ec077f --- /dev/null +++ b/adm_local_without_kernel/cmake_files/FindBOOST.cmake @@ -0,0 +1,170 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# 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 +# + +# ------ + +MESSAGE(STATUS "Check for boost ...") + +# ------ + +IF(BOOST_IS_MANDATORY STREQUAL 0) + SET(BOOST_IS_MANDATORY 0) + SET(BOOST_IS_OPTIONAL 1) +ENDIF(BOOST_IS_MANDATORY STREQUAL 0) +IF(BOOST_IS_OPTIONAL STREQUAL 0) + SET(BOOST_IS_MANDATORY 1) + SET(BOOST_IS_OPTIONAL 0) +ENDIF(BOOST_IS_OPTIONAL STREQUAL 0) +IF(NOT BOOST_IS_MANDATORY AND NOT BOOST_IS_OPTIONAL) + SET(BOOST_IS_MANDATORY 1) + SET(BOOST_IS_OPTIONAL 0) +ENDIF(NOT BOOST_IS_MANDATORY AND NOT BOOST_IS_OPTIONAL) + +# ------ + +SET(BOOST_STATUS 1) +IF(WITHOUT_BOOST OR WITH_BOOST STREQUAL 0) + SET(BOOST_STATUS 0) + MESSAGE(STATUS "boost disabled from command line.") +ENDIF(WITHOUT_BOOST OR WITH_BOOST STREQUAL 0) + +# ------ + +IF(BOOST_STATUS) + IF(WITH_BOOST) + SET(BOOST_ROOT_USER ${WITH_BOOST}) + ELSE(WITH_BOOST) + SET(BOOST_ROOT_USER $ENV{BOOST_ROOT}) + IF(NOT BOOST_ROOT_USER) + SET(BOOST_ROOT_USER $ENV{BOOSTDIR}) + ENDIF(NOT BOOST_ROOT_USER) + ENDIF(WITH_BOOST) +ENDIF(BOOST_STATUS) + +# ----- + +IF(BOOST_STATUS) + IF(BOOST_ROOT_USER) + SET(BOOST_FIND_PATHS_OPTION NO_DEFAULT_PATH) + ELSE(BOOST_ROOT_USER) + SET(BOOST_FIND_PATHS_OPTION) + ENDIF(BOOST_ROOT_USER) +ENDIF(BOOST_STATUS) + +# ----- + +IF(BOOST_STATUS) + IF(BOOST_ROOT_USER) + SET(BOOST_INCLUDE_PATHS ${BOOST_ROOT_USER} ${BOOST_ROOT_USER}/include) + ELSE(BOOST_ROOT_USER) + SET(BOOST_INCLUDE_PATHS) + ENDIF(BOOST_ROOT_USER) + SET(BOOST_INCLUDE_TO_FIND boost/shared_ptr.hpp) + FIND_PATH(BOOST_INCLUDE_DIR ${BOOST_INCLUDE_TO_FIND} PATHS ${BOOST_INCLUDE_PATHS} ${BOOST_FIND_PATHS_OPTION}) + IF(BOOST_INCLUDE_DIR) + IF(BOOST_ROOT_USER) + SET(BOOST_CPPFLAGS -I${BOOST_INCLUDE_DIR})# to be removed + SET(BOOST_INCLUDE_DIRS ${BOOST_INCLUDE_DIR}) + ENDIF(BOOST_ROOT_USER) + MESSAGE(STATUS "${BOOST_INCLUDE_TO_FIND} found in ${BOOST_INCLUDE_DIR}") + ELSE(BOOST_INCLUDE_DIR) + SET(BOOST_STATUS 0) + IF(BOOST_ROOT_USER) + MESSAGE(STATUS "${BOOST_INCLUDE_TO_FIND} not found in ${BOOST_INCLUDE_PATHS}, check your BOOST installation.") + ELSE(BOOST_ROOT_USER) + MESSAGE(STATUS "${BOOST_INCLUDE_TO_FIND} not found on system, try to use WITH_BOOST option or BOOST_ROOT environment variable.") + ENDIF(BOOST_ROOT_USER) + ENDIF(BOOST_INCLUDE_DIR) +ENDIF(BOOST_STATUS) + +# ---- + +IF(BOOST_STATUS) + IF(BOOST_ROOT_USER) + SET(BOOST_LIB_PATHS ${BOOST_ROOT_USER}/lib) + ELSE(BOOST_ROOT_USER) + SET(BOOST_LIB_PATHS) + ENDIF(BOOST_ROOT_USER) +ENDIF(BOOST_STATUS) + +IF(WINDOWS) + SET(BOOST_ENABLE_DLL 1) +ELSE(WINDOWS) + SET(BOOST_ENABLE_DLL 0) +ENDIF(WINDOWS) + +IF(BOOST_STATUS) + SET(BOOST_LIBS) + FOREACH(name thread date_time signals filesystem system regex) + IF(WINDOWS) + IF(CMAKE_BUILD_TYPE STREQUAL Debug) + SET(EXTENSION -gd) + ELSE(CMAKE_BUILD_TYPE STREQUAL Debug) + SET(EXTENSION) + ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug) + SET(LIB_NAMES) + SET(STATIC_LIB_NAMES) + FOREACH(version 1_35 1_38 1_42 1_46_1 1_49) + SET(LIB_NAMES ${LIB_NAMES} boost_${name}-vc90-mt${EXTENSION}-${version}) + SET(STATIC_LIB_NAMES ${STATIC_LIB_NAMES} libboost_${name}-vc90-mt${EXTENSION}-${version}) + ENDFOREACH(version 1_35 1_38 1_42 1_46_1 1_49) + FIND_LIBRARY(BOOST_LIB_${name} NAMES ${LIB_NAMES} PATHS ${BOOST_LIB_PATHS} ${BOOST_FIND_PATHS_OPTION}) + SET(BOOST_LIB_${name}_FOUNDED ${BOOST_LIB_${name}}) + IF(NOT BOOST_LIB_${name}) + FIND_LIBRARY(STATIC_BOOST_LIB_${name} NAMES ${STATIC_LIB_NAMES} PATHS ${BOOST_LIB_PATHS} ${BOOST_FIND_PATHS_OPTION}) + SET(BOOST_LIB_${name}_FOUNDED ${STATIC_BOOST_LIB_${name}}) + SET(BOOST_ENABLE_DLL 0) + ENDIF(NOT BOOST_LIB_${name}) + ELSE(WINDOWS) + FIND_LIBRARY(BOOST_LIB_${name} NAMES boost_${name} boost_${name}-mt PATHS ${BOOST_LIB_PATHS} ${BOOST_FIND_PATHS_OPTION}) + SET(BOOST_LIB_${name}_FOUNDED ${BOOST_LIB_${name}}) + ENDIF(WINDOWS) + IF(NOT BOOST_LIB_${name}_FOUNDED) + MESSAGE(STATUS "boost lib ${name} not found") + SET(BOOST_STATUS 0) + ENDIF(NOT BOOST_LIB_${name}_FOUNDED) + STRING(TOUPPER ${name} upname) + SET(BOOST_LIB_${upname} ${BOOST_LIB_${name}_FOUNDED}) + SET(BOOST_LIBS ${BOOST_LIBS} ${BOOST_LIB_${name}_FOUNDED}) + ENDFOREACH(name thread date_time signals filesystem system) +ENDIF(BOOST_STATUS) + +# ------ + +IF(BOOST_STATUS) + IF(WINDOWS) + SET(BOOST_CPPFLAGS ${BOOST_CPPFLAGS} -DBOOST_DISABLE_ASSERTS)# to be removed + SET(BOOST_DEFINITIONS -DBOOST_DISABLE_ASSERTS) + IF(BOOST_ENABLE_DLL) + SET(BOOST_CPPFLAGS ${BOOST_CPPFLAGS} -DBOOST_ALL_DYN_LINK)# to be removed + SET(BOOST_DEFINITIONS "${BOOST_DEFINITIONS} -DBOOST_ALL_DYN_LINK") + ENDIF(BOOST_ENABLE_DLL) + ENDIF(WINDOWS) +ELSE(BOOST_STATUS) + IF(BOOST_IS_MANDATORY) + MESSAGE(FATAL_ERROR "boost not found ... mandatory ... abort") + ELSE(BOOST_IS_MANDATORY) + MESSAGE(STATUS "boost not found ... optional ... disabled") + ENDIF(BOOST_IS_MANDATORY) +ENDIF(BOOST_STATUS) + +# ------ diff --git a/adm_local_without_kernel/cmake_files/FindCPPUNIT.cmake b/adm_local_without_kernel/cmake_files/FindCPPUNIT.cmake new file mode 100755 index 000000000..4193644cd --- /dev/null +++ b/adm_local_without_kernel/cmake_files/FindCPPUNIT.cmake @@ -0,0 +1,151 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# 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 +# + +# ------ + +MESSAGE(STATUS "Check for cppunit ...") + +# ------ + +IF(CPPUNIT_IS_MANDATORY STREQUAL 0) + SET(CPPUNIT_IS_MANDATORY 0) + SET(CPPUNIT_IS_OPTIONAL 1) +ENDIF(CPPUNIT_IS_MANDATORY STREQUAL 0) +IF(CPPUNIT_IS_OPTIONAL STREQUAL 0) + SET(CPPUNIT_IS_MANDATORY 1) + SET(CPPUNIT_IS_OPTIONAL 0) +ENDIF(CPPUNIT_IS_OPTIONAL STREQUAL 0) +IF(NOT CPPUNIT_IS_MANDATORY AND NOT CPPUNIT_IS_OPTIONAL) + SET(CPPUNIT_IS_MANDATORY 0) + SET(CPPUNIT_IS_OPTIONAL 1) +ENDIF(NOT CPPUNIT_IS_MANDATORY AND NOT CPPUNIT_IS_OPTIONAL) + +# ------ + +SET(CPPUNIT_STATUS 1) +IF(WITHOUT_CPPUNIT OR WITH_CPPUNIT STREQUAL 0) + SET(CPPUNIT_STATUS 0) + MESSAGE(STATUS "cppunit disabled from command line.") +ENDIF(WITHOUT_CPPUNIT OR WITH_CPPUNIT STREQUAL 0) + +# ------ + +IF(CPPUNIT_STATUS) + IF(WITH_CPPUNIT) + SET(CPPUNIT_ROOT_USER ${WITH_CPPUNIT}) + ELSE(WITH_CPPUNIT) + SET(CPPUNIT_ROOT_USER $ENV{CPPUNIT_ROOT}) + ENDIF(WITH_CPPUNIT) +ENDIF(CPPUNIT_STATUS) + +# ----- + +IF(CPPUNIT_STATUS) + IF(CPPUNIT_ROOT_USER) + SET(CPPUNIT_FIND_PATHS_OPTION NO_DEFAULT_PATH) + ELSE(CPPUNIT_ROOT_USER) + SET(CPPUNIT_FIND_PATHS_OPTION) + ENDIF(CPPUNIT_ROOT_USER) +ENDIF(CPPUNIT_STATUS) + +# ----- + +IF(CPPUNIT_STATUS) + IF(CPPUNIT_ROOT_USER) + SET(CPPUNIT_INCLUDE_PATHS ${CPPUNIT_ROOT_USER} ${CPPUNIT_ROOT_USER}/include) + ELSE(CPPUNIT_ROOT_USER) + SET(CPPUNIT_INCLUDE_PATHS) + ENDIF(CPPUNIT_ROOT_USER) + SET(CPPUNIT_INCLUDE_TO_FIND cppunit/extensions/HelperMacros.h) + FIND_PATH(CPPUNIT_INCLUDE_DIR ${CPPUNIT_INCLUDE_TO_FIND} PATHS ${CPPUNIT_INCLUDE_PATHS} ${CPPUNIT_FIND_PATHS_OPTION}) + IF(CPPUNIT_INCLUDE_DIR) + IF(CPPUNIT_ROOT_USER) + SET(CPPUNIT_INCLUDES -I${CPPUNIT_INCLUDE_DIR})# to be removed + IF(${CPPUNIT_INCLUDE_DIR} STREQUAL /usr/include) + SET(CPPUNIT_INCLUDE_DIRS) + ELSE(${CPPUNIT_INCLUDE_DIR} STREQUAL /usr/include) + SET(CPPUNIT_INCLUDE_DIRS ${CPPUNIT_INCLUDE_DIR}) + ENDIF(${CPPUNIT_INCLUDE_DIR} STREQUAL /usr/include) + ENDIF(CPPUNIT_ROOT_USER) + MESSAGE(STATUS "${CPPUNIT_INCLUDE_TO_FIND} found in ${CPPUNIT_INCLUDE_DIR}") + ELSE(CPPUNIT_INCLUDE_DIR) + SET(CPPUNIT_STATUS 0) + IF(CPPUNIT_ROOT_USER) + MESSAGE(STATUS "${CPPUNIT_INCLUDE_TO_FIND} not found in ${CPPUNIT_INCLUDE_PATHS}, check your CPPUNIT installation.") + ELSE(CPPUNIT_ROOT_USER) + MESSAGE(STATUS "${CPPUNIT_INCLUDE_TO_FIND} not found on system, try to use WITH_CPPUNIT option or CPPUNIT_ROOT environment variable.") + ENDIF(CPPUNIT_ROOT_USER) + ENDIF(CPPUNIT_INCLUDE_DIR) +ENDIF(CPPUNIT_STATUS) + +# ---- + +IF(CPPUNIT_STATUS) + IF(CPPUNIT_ROOT_USER) + SET(CPPUNIT_LIB_PATHS ${CPPUNIT_ROOT_USER}/lib) + ELSE(CPPUNIT_ROOT_USER) + SET(CPPUNIT_LIB_PATHS) + ENDIF(CPPUNIT_ROOT_USER) +ENDIF(CPPUNIT_STATUS) + +IF(CPPUNIT_STATUS) + IF(WINDOWS) + IF(CMAKE_BUILD_TYPE STREQUAL Debug) + FIND_LIBRARY(CPPUNIT_LIB cppunitd_dll PATHS ${CPPUNIT_LIB_PATHS} ${CPPUNIT_FIND_PATHS_OPTION}) + ELSE(CMAKE_BUILD_TYPE STREQUAL Debug) + FIND_LIBRARY(CPPUNIT_LIB cppunit_dll PATHS ${CPPUNIT_LIB_PATHS} ${CPPUNIT_FIND_PATHS_OPTION}) + ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug) + ELSE(WINDOWS) + FIND_LIBRARY(CPPUNIT_LIB cppunit PATHS ${CPPUNIT_LIB_PATHS} ${CPPUNIT_FIND_PATHS_OPTION}) + ENDIF(WINDOWS) + SET(CPPUNIT_LIBS) + IF(CPPUNIT_LIB) + SET(CPPUNIT_LIBS ${CPPUNIT_LIBS} ${CPPUNIT_LIB}) + MESSAGE(STATUS "cppunit lib found: ${CPPUNIT_LIB}") + ELSE(CPPUNIT_LIB) + SET(CPPUNIT_STATUS 0) + IF(CPPUNIT_ROOT_USER) + MESSAGE(STATUS "cppunit lib not found in ${CPPUNIT_LIB_PATHS}, check your CPPUNIT installation.") + ELSE(CPPUNIT_ROOT_USER) + MESSAGE(STATUS "cppunit lib not found on system, try to use WITH_CPPUNIT option or CPPUNIT_ROOT environment variable.") + ENDIF(CPPUNIT_ROOT_USER) + ENDIF(CPPUNIT_LIB) +ENDIF(CPPUNIT_STATUS) + +# ---- + +IF(CPPUNIT_STATUS) + SET(CPPUNIT_IS_OK 1) + SET(CPPUNIT_DEFINITIONS) + IF(WINDOWS) + SET(CPPUNIT_INCLUDES ${CPPUNIT_INCLUDES} -DCPPUNIT_DLL) + SET(CPPUNIT_DEFINITIONS "-DCPPUNIT_DLL") + ENDIF(WINDOWS) +ELSE(CPPUNIT_STATUS) + IF(CPPUNIT_IS_MANDATORY) + MESSAGE(FATAL_ERROR "cppunit not found ... mandatory ... abort") + ELSE(CPPUNIT_IS_MANDATORY) + MESSAGE(STATUS "cppunit not found ... optional ... disabled") + ENDIF(CPPUNIT_IS_MANDATORY) +ENDIF(CPPUNIT_STATUS) + +# ------ diff --git a/adm_local_without_kernel/cmake_files/FindHDF5.cmake b/adm_local_without_kernel/cmake_files/FindHDF5.cmake new file mode 100755 index 000000000..1ecd8a497 --- /dev/null +++ b/adm_local_without_kernel/cmake_files/FindHDF5.cmake @@ -0,0 +1,211 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# 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 +# + +# ------ + +MESSAGE(STATUS "Check for hdf5 ...") + +# ------ + +IF(HDF5_IS_MANDATORY STREQUAL 0) + SET(HDF5_IS_MANDATORY 0) + SET(HDF5_IS_OPTIONAL 1) +ENDIF(HDF5_IS_MANDATORY STREQUAL 0) +IF(HDF5_IS_OPTIONAL STREQUAL 0) + SET(HDF5_IS_MANDATORY 1) + SET(HDF5_IS_OPTIONAL 0) +ENDIF(HDF5_IS_OPTIONAL STREQUAL 0) +IF(NOT HDF5_IS_MANDATORY AND NOT HDF5_IS_OPTIONAL) + SET(HDF5_IS_MANDATORY 1) + SET(HDF5_IS_OPTIONAL 0) +ENDIF(NOT HDF5_IS_MANDATORY AND NOT HDF5_IS_OPTIONAL) + +# ------ + +SET(HDF5_STATUS 1) +IF(WITHOUT_HDF5 OR WITH_HDF5 STREQUAL 0) + SET(HDF5_STATUS 0) + MESSAGE(STATUS "hdf5 disabled from command line.") +ENDIF(WITHOUT_HDF5 OR WITH_HDF5 STREQUAL 0) + +# ------ + +IF(HDF5_STATUS) + IF(WITH_HDF5) + SET(HDF5_ROOT_USER ${WITH_HDF5}) + ENDIF(WITH_HDF5) + IF(NOT HDF5_ROOT_USER) + SET(HDF5_ROOT_USER $ENV{HDF5_ROOT}) + ENDIF(NOT HDF5_ROOT_USER) + IF(NOT HDF5_ROOT_USER) + SET(HDF5_ROOT_USER $ENV{HDF5HOME}) + ENDIF(NOT HDF5_ROOT_USER) +ENDIF(HDF5_STATUS) + +# ------ + +IF(HDF5_STATUS) + IF(NOT HDF5_ROOT_USER) + FIND_PROGRAM(HDF5_DUMP h5dump) + IF(HDF5_DUMP) + MESSAGE(STATUS "h5dump found: ${HDF5_DUMP}") + IF(HDF5_DUMP STREQUAL /usr/bin/h5dump) + ELSE(HDF5_DUMP STREQUAL /usr/bin/h5dump) + SET(HDF5_ROOT_USER ${HDF5_DUMP}) + GET_FILENAME_COMPONENT(HDF5_ROOT_USER ${HDF5_ROOT_USER} PATH) + GET_FILENAME_COMPONENT(HDF5_ROOT_USER ${HDF5_ROOT_USER} PATH) + ENDIF(HDF5_DUMP STREQUAL /usr/bin/h5dump) + ELSE(HDF5_DUMP) + MESSAGE(STATUS "h5dump not found, try to use WITH_HDF5 option or HDF5_ROOT (or HDF5HOME) environment variable") + SET(HDF5_STATUS 0) + ENDIF(HDF5_DUMP) + ENDIF(NOT HDF5_ROOT_USER) +ENDIF(HDF5_STATUS) + +# ------ + +IF(HDF5_STATUS) + IF(HDF5_ROOT_USER) + SET(HDF5_FIND_PATHS_OPTION NO_DEFAULT_PATH) + ELSE(HDF5_ROOT_USER) + SET(HDF5_FIND_PATHS_OPTION) + ENDIF(HDF5_ROOT_USER) +ENDIF(HDF5_STATUS) + +# ------ + +IF(HDF5_STATUS) + IF(HDF5_ROOT_USER) + SET(HDF5_INCLUDE_PATHS ${HDF5_ROOT_USER}/include) + ELSE(HDF5_ROOT_USER) + SET(HDF5_INCLUDE_PATHS) + ENDIF(HDF5_ROOT_USER) + SET(HDF5_INCLUDE_TO_FIND H5public.h) + FIND_PATH(HDF5_INCLUDE_DIR ${HDF5_INCLUDE_TO_FIND} PATHS ${HDF5_INCLUDE_PATHS} ${HDF5_FIND_PATHS_OPTION}) + IF(HDF5_INCLUDE_DIR) + IF(HDF5_ROOT_USER) + SET(HDF5_INCLUDES -I${HDF5_INCLUDE_DIR})# to be removed + IF(${HDF5_INCLUDE_DIR} STREQUAL /usr/include) + SET(HDF5_INCLUDE_DIRS) + ELSE(${HDF5_INCLUDE_DIR} STREQUAL /usr/include) + SET(HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIR}) + ENDIF(${HDF5_INCLUDE_DIR} STREQUAL /usr/include) + ENDIF(HDF5_ROOT_USER) + SET(HDF5_DEFINITIONS "-DH5_USE_16_API -D_HDF5USEDLL_") + SET(HDF5_INCLUDES -DH5_USE_16_API -D_HDF5USEDLL_ ${HDF5_INCLUDES})# to be removed + MESSAGE(STATUS "${HDF5_INCLUDE_TO_FIND} found in ${HDF5_INCLUDE_DIR}") + ELSE(HDF5_INCLUDE_DIR) + SET(HDF5_STATUS 0) + IF(HDF5_ROOT_USER) + MESSAGE(STATUS "${HDF5_INCLUDE_TO_FIND} not found in ${HDF5_INCLUDE_PATHS}, check your HDF5 installation.") + ELSE(HDF5_ROOT_USER) + MESSAGE(STATUS "${HDF5_INCLUDE_TO_FIND} not found on system, try to use WITH_HDF5 option or HDF5_ROOT (or HDF5HOME) environment variable.") + ENDIF(HDF5_ROOT_USER) + ENDIF(HDF5_INCLUDE_DIR) +ENDIF(HDF5_STATUS) + +# ---- + +IF(HDF5_STATUS) + IF(HDF5_ROOT_USER) + IF(WINDOWS) + SET(HDF5_LIB_PATHS ${HDF5_ROOT_USER}/dll ${HDF5_ROOT_USER}/lib) + ELSE(WINDOWS) + SET(HDF5_LIB_PATHS ${HDF5_ROOT_USER}/lib) + ENDIF(WINDOWS) + ELSE(HDF5_ROOT_USER) + SET(HDF5_LIB_PATHS) + ENDIF(HDF5_ROOT_USER) + IF(WINDOWS) + IF(CMAKE_BUILD_TYPE STREQUAL Release) + FIND_LIBRARY(HDF5_LIB hdf5dll PATHS ${HDF5_LIB_PATHS} ${HDF5_FIND_PATHS_OPTION}) + ELSE(CMAKE_BUILD_TYPE STREQUAL Release) + FIND_LIBRARY(HDF5_LIB hdf5ddll PATHS ${HDF5_LIB_PATHS} ${HDF5_FIND_PATHS_OPTION}) + ENDIF(CMAKE_BUILD_TYPE STREQUAL Release) + ELSE(WINDOWS) + FIND_LIBRARY(HDF5_LIB hdf5 PATHS ${HDF5_LIB_PATHS} ${HDF5_FIND_PATHS_OPTION}) + ENDIF(WINDOWS) + SET(HDF5_LIBS) + IF(HDF5_LIB) + SET(HDF5_LIBS ${HDF5_LIBS} ${HDF5_LIB}) + MESSAGE(STATUS "hdf5 lib found: ${HDF5_LIB}") + ELSE(HDF5_LIB) + SET(HDF5_STATUS 0) + IF(HDF5_ROOT_USER) + MESSAGE(STATUS "hdf5 lib not found in ${HDF5_LIB_PATHS}, check your HDF5 installation.") + ELSE(HDF5_ROOT_USER) + MESSAGE(STATUS "hdf5 lib not found on system, try to use WITH_HDF5 option or HDF5_ROOT (or HDF5HOME) environment variable.") + ENDIF(HDF5_ROOT_USER) + ENDIF(HDF5_LIB) +ENDIF(HDF5_STATUS) + +IF(HDF5_STATUS) + FILE(TO_NATIVE_PATH "${HDF5_INCLUDE_DIR}/H5public.h" HDF5_H5PUBLIC_FILE) + EXECUTE_PROCESS( + COMMAND ${PYTHON_EXECUTABLE} -c "import re,sys ; f=file(sys.argv[1]) ; s=f.read() ; c=re.compile('^#[\\s]*include[\\s]*\\\"(?P[A-Za-z0-9\\-]+\\.h)\\\"',re.M) ; sys.stdout.write(c.search(s).group('nm'))" + ${HDF5_H5PUBLIC_FILE} + OUTPUT_VARIABLE HDF5_H5PUBLIC_DEFS_FILE + ) + FILE(TO_NATIVE_PATH "${HDF5_INCLUDE_DIR}/${HDF5_H5PUBLIC_DEFS_FILE}" HDF5_H5PUBLIC_DEFS_FILE) + EXECUTE_PROCESS( + COMMAND ${PYTHON_EXECUTABLE} -c "import re,sys ; f=file(sys.argv[1]) ; s=f.read() ; c=re.compile('^#[\\s]*define[\\s]+H5_HAVE_PARALLEL[\\s]+(?P[\\d]+)',re.M) ; m=c.search(s); exec('if m: sys.stdout.write(m.group(\\'nm\\'))') ; exec('if not m: sys.stdout.write(\\'0\\')')" + ${HDF5_H5PUBLIC_DEFS_FILE} + OUTPUT_VARIABLE HDF5_HAVE_PARALLEL + ) + IF(HDF5_HAVE_PARALLEL) + MESSAGE(STATUS "hdf5 is parallel") + SET(HDF5_INCLUDES ${HDF5_INCLUDES} -I${MPI_INCLUDE_DIRS}) # to remove after "cmakeization" + SET(HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIRS} ${MPI_INCLUDE_DIRS}) + SET(HDF5_DEFINITIONS "${HDF5_DEFINITIONS} ${MPI_DEFINITIONS}") + SET(HDF5_LIBS ${HDF5_LIBS} ${MPI_LIBS}) + ENDIF(HDF5_HAVE_PARALLEL) +ENDIF(HDF5_STATUS) + +# ---- + +IF(HDF5_STATUS) + SET(HDF5_CPPFLAGS ${HDF5_INCLUDES})# to be removed +ELSE(HDF5_STATUS) + IF(HDF5_IS_MANDATORY) + MESSAGE(FATAL_ERROR "hdf5 not found ... mandatory ... abort") + ELSE(HDF5_IS_MANDATORY) + MESSAGE(STATUS "hdf5 not found ... optional ... disabled") + ENDIF(HDF5_IS_MANDATORY) +ENDIF(HDF5_STATUS) + +# ------ + +#SET(ZLIB_ROOT $ENV{ZLIB_ROOT}) +#STRING(LENGTH "${ZLIB_ROOT}" NB) +#IF(${NB} GREATER 0) +# FIND_LIBRARY(ZLIB_LIBS zlib ${ZLIB_ROOT}/lib) +# SET(HDF5_LIBS ${HDF5_LIBS} ${ZLIB_LIBS}) +#ENDIF(${NB} GREATER 0) + +#SET(SZIP_ROOT $ENV{SZIP_ROOT}) +#STRING(LENGTH "${SZIP_ROOT}" NB) +#IF(${NB} GREATER 0) +# FIND_LIBRARY(SZIP_LIBS szlib ${SZIP_ROOT}/lib) +# SET(HDF5_LIBS ${HDF5_LIBS} ${SZIP_LIBS}) +#ENDIF(${NB} GREATER 0) + +# ------ diff --git a/adm_local_without_kernel/cmake_files/FindLIBXML2.cmake b/adm_local_without_kernel/cmake_files/FindLIBXML2.cmake new file mode 100755 index 000000000..5eafb937d --- /dev/null +++ b/adm_local_without_kernel/cmake_files/FindLIBXML2.cmake @@ -0,0 +1,158 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# 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 +# + +# ------ + +MESSAGE(STATUS "Check for libxml2 ...") + +# ------ + +IF(LIBXML2_IS_MANDATORY STREQUAL 0) + SET(LIBXML2_IS_MANDATORY 0) + SET(LIBXML2_IS_OPTIONAL 1) +ENDIF(LIBXML2_IS_MANDATORY STREQUAL 0) +IF(LIBXML2_IS_OPTIONAL STREQUAL 0) + SET(LIBXML2_IS_MANDATORY 1) + SET(LIBXML2_IS_OPTIONAL 0) +ENDIF(LIBXML2_IS_OPTIONAL STREQUAL 0) +IF(NOT LIBXML2_IS_MANDATORY AND NOT LIBXML2_IS_OPTIONAL) + SET(LIBXML2_IS_MANDATORY 1) + SET(LIBXML2_IS_OPTIONAL 0) +ENDIF(NOT LIBXML2_IS_MANDATORY AND NOT LIBXML2_IS_OPTIONAL) + +# ------ + +SET(LIBXML2_STATUS 1) +IF(WITHOUT_LIBXML2 OR WITH_LIBXML2 STREQUAL 0) + SET(LIBXML2_STATUS 0) + MESSAGE(STATUS "libxml2 disabled from command line.") +ENDIF(WITHOUT_LIBXML2 OR WITH_LIBXML2 STREQUAL 0) + +# ------ + +IF(LIBXML2_STATUS) + IF(WITH_LIBXML2) + SET(LIBXML2_ROOT_USER ${WITH_LIBXML2}) + ELSE(WITH_LIBXML2) + SET(LIBXML2_ROOT_USER $ENV{LIBXML2_ROOT}) + IF(NOT LIBXML2_ROOT_USER) + SET(LIBXML2_ROOT_USER $ENV{LIBXML_DIR}) + ENDIF(NOT LIBXML2_ROOT_USER) + ENDIF(WITH_LIBXML2) +ENDIF(LIBXML2_STATUS) + +# ----- + +IF(LIBXML2_STATUS) + IF(LIBXML2_ROOT_USER) + SET(LIBXML2_FIND_PATHS_OPTION NO_DEFAULT_PATH) + ELSE(LIBXML2_ROOT_USER) + SET(LIBXML2_FIND_PATHS_OPTION) + ENDIF(LIBXML2_ROOT_USER) +ENDIF(LIBXML2_STATUS) + +# ----- + +IF(LIBXML2_STATUS) + IF(LIBXML2_ROOT_USER) + IF(WINDOWS) + SET(LIBXML2_INCLUDE_PATHS ${LIBXML2_ROOT_USER}/include) + ELSE(WINDOWS) + SET(LIBXML2_INCLUDE_PATHS ${LIBXML2_ROOT_USER}/include/libxml2) + ENDIF(WINDOWS) + ELSE(LIBXML2_ROOT_USER) + SET(LIBXML2_INCLUDE_PATHS /usr/include/libxml2) + ENDIF(LIBXML2_ROOT_USER) + SET(LIBXML2_INCLUDE_TO_FIND libxml/parser.h) + FIND_PATH(LIBXML2_INCLUDE_DIR ${LIBXML2_INCLUDE_TO_FIND} PATHS ${LIBXML2_INCLUDE_PATHS} ${LIBXML2_FIND_PATHS_OPTION}) + IF(LIBXML2_INCLUDE_DIR) + SET(LIBXML2_INCLUDES -I${LIBXML2_INCLUDE_DIR})# to remove + SET(LIBXML_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR}) + MESSAGE(STATUS "${LIBXML2_INCLUDE_TO_FIND} found in ${LIBXML2_INCLUDE_DIR}") + ELSE(LIBXML2_INCLUDE_DIR) + SET(LIBXML2_STATUS 0) + IF(LIBXML2_ROOT_USER) + MESSAGE(STATUS "${LIBXML2_INCLUDE_TO_FIND} not found in ${LIBXML2_INCLUDE_PATHS}, check your LIBXML2 installation.") + ELSE(LIBXML2_ROOT_USER) + MESSAGE(STATUS "${LIBXML2_INCLUDE_TO_FIND} not found on system, try to use WITH_LIBXML2 option or LIBXML2_ROOT environment variable.") + ENDIF(LIBXML2_ROOT_USER) + ENDIF(LIBXML2_INCLUDE_DIR) +ENDIF(LIBXML2_STATUS) + +# ---- + +IF(LIBXML2_STATUS) + IF(LIBXML2_ROOT_USER) + SET(LIBXML2_LIB_PATHS ${LIBXML2_ROOT_USER}/lib) + ELSE(LIBXML2_ROOT_USER) + SET(LIBXML2_LIB_PATHS) + ENDIF(LIBXML2_ROOT_USER) +ENDIF(LIBXML2_STATUS) + +IF(LIBXML2_STATUS) + IF(WINDOWS) + FIND_LIBRARY(LIBXML2_LIB libxml2 PATHS ${LIBXML2_LIB_PATHS} ${LIBXML2_FIND_PATHS_OPTION}) + ELSE(WINDOWS) + FIND_LIBRARY(LIBXML2_LIB xml2 PATHS ${LIBXML2_LIB_PATHS} ${LIBXML2_FIND_PATHS_OPTION}) + ENDIF(WINDOWS) + SET(LIBXML2_LIBS) + IF(LIBXML2_LIB) + SET(LIBXML2_LIBS ${LIBXML2_LIBS} ${LIBXML2_LIB}) + MESSAGE(STATUS "libxml2 lib found: ${LIBXML2_LIB}") + ELSE(LIBXML2_LIB) + SET(LIBXML2_STATUS 0) + IF(LIBXML2_ROOT_USER) + MESSAGE(STATUS "libxml2 lib not found in ${LIBXML2_LIB_PATHS}, check your LIBXML2 installation.") + ELSE(LIBXML2_ROOT_USER) + MESSAGE(STATUS "libxml2 lib not found on system, try to use WITH_LIBXML2 option or LIBXML2_ROOT environment variable.") + ENDIF(LIBXML2_ROOT_USER) + ENDIF(LIBXML2_LIB) +ENDIF(LIBXML2_STATUS) + +# ---- + +IF(WINDOWS) + SET(ICONV_ROOT $ENV{ICONV_ROOT}) + IF(ICONV_ROOT) + FIND_PATH(ICONV_INCLUDE_DIR iconv.h ${ICONV_ROOT}/include) + FIND_LIBRARY(ICONV_LIBS iconv ${ICONV_ROOT}/lib) + SET(LIBXML2_INCLUDES ${LIBXML2_INCLUDES} -I${ICONV_INCLUDE_DIR})# to remove + SET(LIBXML_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIRS} ${ICONV_INCLUDE_DIR}) + SET(LIBXML2_LIBS ${LIBXML2_LIBS} ${ICONV_LIBS}) + ENDIF(ICONV_ROOT) +ENDIF(WINDOWS) + +# ------ +IF(LIBXML2_STATUS) + SET(LIBXML_INCLUDES ${LIBXML2_INCLUDES})# to remove + SET(LIBXML_CPPFLAGS ${LIBXML2_INCLUDES}) + SET(LIBXML_DEFINITIONS) + SET(LIBXML_LIBS ${LIBXML2_LIBS}) +ELSE(LIBXML2_STATUS) + IF(LIBXML2_IS_MANDATORY) + MESSAGE(FATAL_ERROR "libxml2 not found ... mandatory ... abort") + ELSE(LIBXML2_IS_MANDATORY) + MESSAGE(STATUS "libxml2 not found ... optional ... disabled") + ENDIF(LIBXML2_IS_MANDATORY) +ENDIF(LIBXML2_STATUS) + +# ------ diff --git a/adm_local_without_kernel/cmake_files/FindMPI.cmake b/adm_local_without_kernel/cmake_files/FindMPI.cmake index 27aabea54..8818c5fac 100644 --- a/adm_local_without_kernel/cmake_files/FindMPI.cmake +++ b/adm_local_without_kernel/cmake_files/FindMPI.cmake @@ -85,7 +85,8 @@ IF(MPI_STATUS) MESSAGE(STATUS "MPI include ${MPI_INCLUDE_TO_FIND} found in ${MPI_INCLUDES}") SET(MPI_INCLUDE_DIR ${MPI_INCLUDES}) - SET(MPI_INCLUDES -I${MPI_INCLUDES}) + SET(MPI_INCLUDE_DIRS ${MPI_INCLUDES}) + SET(MPI_INCLUDES -I${MPI_INCLUDES})# to remove # ------ @@ -93,27 +94,36 @@ IF(MPI_STATUS) FIND_LIBRARY(MPI_LIB_THREAD libboost_thread-vc90-mt-gd-1_35 ${MPI_ROOT}/lib) FIND_LIBRARY(MPI_LIB_DATE_TIME libboost_date_time-vc90-mt-gd-1_35 ${MPI_ROOT}/lib) ELSE(WINDOWS) + SET(MPI_LIB_FOUND 0) FOREACH(lib mpi_cxx mpi mpich) - FIND_LIBRARY(MPI_LIB ${lib} ${MPI_ROOT}/lib) - IF(MPI_LIB) - IF(lib STREQUAL mpi_cxx) - SET(MPI_INCLUDES ${MPI_INCLUDES} -DOMPI_IGNORE_CXX_SEEK) - ENDIF(lib STREQUAL mpi_cxx) - IF(lib STREQUAL mpich) - SET(MPI_INCLUDES ${MPI_INCLUDES} -DMPICH_IGNORE_CXX_SEEK) - ENDIF(lib STREQUAL mpich) - BREAK() - ENDIF(MPI_LIB) + FIND_LIBRARY(MPI_LIB_${lib} ${lib} ${MPI_ROOT}/lib) + IF(MPI_LIB_${lib}) + SET(MPI_LIB_FOUND 1) + ENDIF(MPI_LIB_${lib}) ENDFOREACH(lib mpi_cxx mpi mpich) - IF(NOT MPI_LIB) + IF(MPI_LIB_FOUND) + IF(MPI_LIB_mpi_cxx AND MPI_LIB_mpi) + SET(MPI_LIBS ${MPI_LIB_mpi_cxx} ${MPI_LIB_mpi}) + SET(MPI_INCLUDES ${MPI_INCLUDES} -DOMPI_IGNORE_CXX_SEEK)# to remove + SET(MPI_DEFINITIONS -DOMPI_IGNORE_CXX_SEEK) + ELSEIF(MPI_LIB_mpi_cxx) + SET(MPI_LIBS ${MPI_LIB_mpi_cxx}) + SET(MPI_INCLUDES ${MPI_INCLUDES} -DOMPI_IGNORE_CXX_SEEK)# to remove + SET(MPI_DEFINITIONS -DOMPI_IGNORE_CXX_SEEK) + ELSEIF(MPI_LIB_mpi) + SET(MPI_LIBS ${MPI_LIB_mpi}) + SET(MPI_INCLUDES ${MPI_INCLUDES} -DOMPI_IGNORE_CXX_SEEK)# to remove + SET(MPI_DEFINITIONS -DOMPI_IGNORE_CXX_SEEK) + ELSEIF(MPI_LIB_mpich) + SET(MPI_LIBS ${MPI_LIB_mpich}) + SET(MPI_INCLUDES ${MPI_INCLUDES} -DMPICH_IGNORE_CXX_SEEK)# to remove + SET(MPI_DEFINITIONS -DMPICH_IGNORE_CXX_SEEK) + ENDIF() + ELSE(MPI_LIB_FOUND) MESSAGE(STATUS "MPI lib not found, check your MPI installation.") SET(MPI_STATUS 0) - ENDIF(NOT MPI_LIB) - MESSAGE(STATUS "MPI lib : ${MPI_LIB}") + ENDIF(MPI_LIB_FOUND) ENDIF(WINDOWS) - - SET(MPI_LIBS ${MPI_LIB}) - MESSAGE(STATUS "MPI libs: ${MPI_LIBS}") ENDIF(MPI_STATUS) @@ -125,7 +135,8 @@ IF(MPI_STATUS) CHECK_SYMBOL_EXISTS(MPI_Publish_name ${MPI_INCLUDE_DIR}/mpi.h MPI2_IS_OK) IF(MPI2_IS_OK) MESSAGE(STATUS "Your mpi implemtentation is compatible with mpi2 ... adding -DHAVE_MPI2") - SET(MPI_INCLUDES ${MPI_INCLUDES} -DHAVE_MPI2) + SET(MPI_INCLUDES ${MPI_INCLUDES} -DHAVE_MPI2)# to remove + SET(MPI_DEFINITIONS "${MPI_DEFINITIONS} -DHAVE_MPI2") ENDIF(MPI2_IS_OK) ENDIF(MPI_STATUS) diff --git a/adm_local_without_kernel/cmake_files/FindPLATFORM.cmake b/adm_local_without_kernel/cmake_files/FindPLATFORM.cmake index b6a36caca..636ad92f1 100644 --- a/adm_local_without_kernel/cmake_files/FindPLATFORM.cmake +++ b/adm_local_without_kernel/cmake_files/FindPLATFORM.cmake @@ -79,29 +79,47 @@ IF(CMAKE_BUILD_TYPE) ENDIF(WINDOWS) ENDIF(CMAKE_BUILD_TYPE) -SET(PLATFORM_CPPFLAGS) -SET(PLATFORM_LDFLAGS) -SET(PLATFORM_LIBADD) +SET(PLATFORM_CPPFLAGS) # to be removed +SET(PLATFORM_LDFLAGS) # to be removed +SET(PLATFORM_LIBADD) # to be removed + +SET(PLATFORM_LIBS) +SET(PLATFORM_DEFINITIONS) + IF(WINDOWS) - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} /W0) - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_CRT_SECURE_NO_WARNINGS) # To disable windows warnings for strcpy, fopen, ... - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_SCL_SECURE_NO_WARNINGS) # To disable windows warnings std::copy, std::transform, ... - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -DWNT) - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -DPPRO_NT) # For medfile - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_USE_MATH_DEFINES) # At least for MEDMEM - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_WIN32_WINNT=0x0500) # Windows 2000 or later API is required - SET(PLATFORM_LIBADD ${PLATFORM_LIBADD} Ws2_32.lib) - SET(PLATFORM_LIBADD ${PLATFORM_LIBADD} Userenv.lib) # At least for GEOM suit + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} /W0) # to be removed + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_CRT_SECURE_NO_WARNINGS) # To disable windows warnings for strcpy, fopen, ... # to be removed + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_SCL_SECURE_NO_WARNINGS) # To disable windows warnings std::copy, std::transform, ... # to be removed + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -DWNT) # to be removed + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -DPPRO_NT) # For medfile # to be removed + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_USE_MATH_DEFINES) # At least for MEDMEM # to be removed + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_WIN32_WINNT=0x0500) # Windows 2000 or later API is required # to be removed + SET(PLATFORM_LIBADD ${PLATFORM_LIBADD} Ws2_32.lib) # to be removed + SET(PLATFORM_LIBADD ${PLATFORM_LIBADD} Userenv.lib) # At least for GEOM suit # to be removed + + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} /W0") + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -D_CRT_SECURE_NO_WARNINGS") # To disable windows warnings for strcpy, fopen, ... + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -D_SCL_SECURE_NO_WARNINGS") # To disable windows warnings std::copy, std::transform, ... + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -DWNT") + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -DPPRO_NT") # For medfile + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -D_USE_MATH_DEFINES") # At least for MEDMEM + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -D_WIN32_WINNT=0x0500") # Windows 2000 or later API is required + + SET(PLATFORM_LIBS ${PLATFORM_LIBS} Ws2_32.lib) + SET(PLATFORM_LIBS ${PLATFORM_LIBS} Userenv.lib) # At least for GEOM suit + ELSE(WINDOWS) # SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -Wparentheses) # SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -Wreturn-type) # SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -Wmissing-declarations) # SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -Wunused) # SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -Wall) - SET(PLATFORM_LIBADD ${PLATFORM_LIBADD} -ldl) + SET(PLATFORM_LIBADD ${PLATFORM_LIBADD} -ldl) # to be removed + SET(PLATFORM_LIBS ${PLATFORM_LIBS} -ldl) ENDIF(WINDOWS) -SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -DSIZEOF_FORTRAN_INTEGER=4 -DSIZEOF_LONG=${CMAKE_SIZEOF_VOID_P} -DSIZEOF_INT=4) +SET(PLATFORM_CPPFLAGS "${PLATFORM_CPPFLAGS} -DSIZEOF_FORTRAN_INTEGER=4 -DSIZEOF_LONG=${CMAKE_SIZEOF_VOID_P} -DSIZEOF_INT=4") # to be removed +SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -DSIZEOF_FORTRAN_INTEGER=4 -DSIZEOF_LONG=${CMAKE_SIZEOF_VOID_P} -DSIZEOF_INT=4") SET(COMPILATION_WITH_CMAKE ON) diff --git a/adm_local_without_kernel/cmake_files/FindPTHREADS.cmake b/adm_local_without_kernel/cmake_files/FindPTHREADS.cmake new file mode 100755 index 000000000..ce8231e4a --- /dev/null +++ b/adm_local_without_kernel/cmake_files/FindPTHREADS.cmake @@ -0,0 +1,139 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# 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 +# + +# ------ + +MESSAGE(STATUS "Check for pthreads ...") + +# ------ + +IF(PTHREADS_IS_MANDATORY STREQUAL 0) + SET(PTHREADS_IS_MANDATORY 0) + SET(PTHREADS_IS_OPTIONAL 1) +ENDIF(PTHREADS_IS_MANDATORY STREQUAL 0) +IF(PTHREADS_IS_OPTIONAL STREQUAL 0) + SET(PTHREADS_IS_MANDATORY 1) + SET(PTHREADS_IS_OPTIONAL 0) +ENDIF(PTHREADS_IS_OPTIONAL STREQUAL 0) +IF(NOT PTHREADS_IS_MANDATORY AND NOT PTHREADS_IS_OPTIONAL) + SET(PTHREADS_IS_MANDATORY 1) + SET(PTHREADS_IS_OPTIONAL 0) +ENDIF(NOT PTHREADS_IS_MANDATORY AND NOT PTHREADS_IS_OPTIONAL) + +# ------ + +SET(PTHREADS_STATUS 1) +IF(WITHOUT_PTHREADS OR WITH_PTHREADS STREQUAL 0) + SET(PTHREADS_STATUS 0) + MESSAGE(STATUS "pthreads disabled from command line.") +ENDIF(WITHOUT_PTHREADS OR WITH_PTHREADS STREQUAL 0) + +# ------ + +IF(PTHREADS_STATUS) + IF(WITH_PTHREADS) + SET(PTHREADS_ROOT_USER ${WITH_PTHREADS}) + ELSE(WITH_PTHREADS) + SET(PTHREADS_ROOT_USER $ENV{PTHREADS_ROOT}) + ENDIF(WITH_PTHREADS) +ENDIF(PTHREADS_STATUS) + +# ----- + +IF(PTHREADS_STATUS) + IF(PTHREADS_ROOT_USER) + SET(PTHREADS_FIND_PATHS_OPTION NO_DEFAULT_PATH) + ELSE(PTHREADS_ROOT_USER) + SET(PTHREADS_FIND_PATHS_OPTION) + ENDIF(PTHREADS_ROOT_USER) +ENDIF(PTHREADS_STATUS) + +# ----- + +IF(PTHREADS_STATUS) + IF(PTHREADS_ROOT_USER) + SET(PTHREADS_INCLUDE_PATHS ${PTHREADS_ROOT_USER}/include) + ELSE(PTHREADS_ROOT_USER) + SET(PTHREADS_INCLUDE_PATHS) + ENDIF(PTHREADS_ROOT_USER) + SET(PTHREADS_INCLUDE_TO_FIND pthread.h) + FIND_PATH(PTHREADS_INCLUDE_DIR ${PTHREADS_INCLUDE_TO_FIND} PATHS ${PTHREADS_INCLUDE_PATHS} ${PTHREADS_FIND_PATHS_OPTION}) + IF(PTHREADS_INCLUDE_DIR) + IF(PTHREADS_ROOT_USER) + SET(PTHREAD_CFLAGS -I${PTHREADS_INCLUDE_DIR}) # to remove + SET(PTHREAD_INCLUDE_DIRS ${PTHREADS_INCLUDE_DIR}) + ENDIF(PTHREADS_ROOT_USER) + MESSAGE(STATUS "${PTHREADS_INCLUDE_TO_FIND} found in ${PTHREADS_INCLUDE_DIR}") + ELSE(PTHREADS_INCLUDE_DIR) + SET(PTHREADS_STATUS 0) + IF(PTHREADS_ROOT_USER) + MESSAGE(STATUS "${PTHREADS_INCLUDE_TO_FIND} not found in ${PTHREADS_INCLUDE_PATHS}, check your PTHREADS installation.") + ELSE(PTHREADS_ROOT_USER) + MESSAGE(STATUS "${PTHREADS_INCLUDE_TO_FIND} not found on system, try to use WITH_PTHREADS option or PTHREADS_ROOT environment variable.") + ENDIF(PTHREADS_ROOT_USER) + ENDIF(PTHREADS_INCLUDE_DIR) +ENDIF(PTHREADS_STATUS) + +# ---- + +IF(PTHREADS_STATUS) + IF(PTHREADS_ROOT_USER) + SET(PTHREADS_LIB_PATHS ${PTHREADS_ROOT_USER}/lib) + ELSE(PTHREADS_ROOT_USER) + SET(PTHREADS_LIB_PATHS) + ENDIF(PTHREADS_ROOT_USER) +ENDIF(PTHREADS_STATUS) + +IF(PTHREADS_STATUS) + IF(WINDOWS) + IF(CMAKE_BUILD_TYPE STREQUAL Release) + FIND_LIBRARY(PTHREAD_LIB pthreadVSE2 pthreadVC2 PATHS ${PTHREADS_LIB_PATHS} ${PTHREADS_FIND_PATHS_OPTION}) + ELSE(CMAKE_BUILD_TYPE STREQUAL Release) + FIND_LIBRARY(PTHREAD_LIB pthreadVSE2d pthreadVC2d PATHS ${PTHREADS_LIB_PATHS} ${PTHREADS_FIND_PATHS_OPTION}) + ENDIF(CMAKE_BUILD_TYPE STREQUAL Release) + ELSE(WINDOWS) + FIND_LIBRARY(PTHREAD_LIB pthread PATHS ${PTHREADS_LIB_PATHS} ${PTHREADS_FIND_PATHS_OPTION}) + ENDIF(WINDOWS) + SET(PTHREAD_LIBS) + IF(PTHREAD_LIB) + SET(PTHREAD_LIBS ${PTHREAD_LIBS} ${PTHREAD_LIB}) + MESSAGE(STATUS "pthread lib found: ${PTHREAD_LIB}") + ELSE(PTHREAD_LIB) + SET(PTHREADS_STATUS 0) + IF(PTHREADS_ROOT_USER) + MESSAGE(STATUS "pthread lib not found in ${PTHREADS_LIB_PATHS}, check your PTHREADS installation.") + ELSE(PTHREADS_ROOT_USER) + MESSAGE(STATUS "pthread lib not found on system, try to use WITH_PTHREADS option or PTHREADS_ROOT environment variable.") + ENDIF(PTHREADS_ROOT_USER) + ENDIF(PTHREAD_LIB) +ENDIF(PTHREADS_STATUS) + +# ---- + +IF(PTHREADS_STATUS) +ELSE(PTHREADS_STATUS) + IF(PTHREADS_IS_MANDATORY) + MESSAGE(FATAL_ERROR "pthreads not found ... mandatory ... abort") + ELSE(PTHREADS_IS_MANDATORY) + MESSAGE(STATUS "pthreads not found ... optional ... disabled") + ENDIF(PTHREADS_IS_MANDATORY) +ENDIF(PTHREADS_STATUS) diff --git a/adm_local_without_kernel/cmake_files/FindPYTHON.cmake b/adm_local_without_kernel/cmake_files/FindPYTHON.cmake new file mode 100755 index 000000000..df658fba4 --- /dev/null +++ b/adm_local_without_kernel/cmake_files/FindPYTHON.cmake @@ -0,0 +1,236 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# 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 +# + +# ------ + +MESSAGE(STATUS "Check for python ...") + +# ------ + +IF(PYTHON_IS_MANDATORY STREQUAL 0) + SET(PYTHON_IS_MANDATORY 0) + SET(PYTHON_IS_OPTIONAL 1) +ENDIF(PYTHON_IS_MANDATORY STREQUAL 0) +IF(PYTHON_IS_OPTIONAL STREQUAL 0) + SET(PYTHON_IS_MANDATORY 1) + SET(PYTHON_IS_OPTIONAL 0) +ENDIF(PYTHON_IS_OPTIONAL STREQUAL 0) +IF(NOT PYTHON_IS_MANDATORY AND NOT PYTHON_IS_OPTIONAL) + SET(PYTHON_IS_MANDATORY 1) + SET(PYTHON_IS_OPTIONAL 0) +ENDIF(NOT PYTHON_IS_MANDATORY AND NOT PYTHON_IS_OPTIONAL) + +# ------ + +SET(PYTHON_STATUS 1) +IF(WITHOUT_PYTHON OR WITH_PYTHON STREQUAL 0) + SET(PYTHON_STATUS 0) + MESSAGE(STATUS "python disabled from command line.") +ENDIF(WITHOUT_PYTHON OR WITH_PYTHON STREQUAL 0) + +# ------ + +IF(PYTHON_STATUS) + IF(WITH_PYTHON) + SET(PYTHON_ROOT_USER ${WITH_PYTHON}) + ENDIF(WITH_PYTHON) + IF(NOT PYTHON_ROOT_USER) + SET(PYTHON_ROOT_USER $ENV{PYTHON_ROOT}) + ENDIF(NOT PYTHON_ROOT_USER) + IF(NOT PYTHON_ROOT_USER) + SET(PYTHON_ROOT_USER $ENV{PYTHONHOME}) + ENDIF(NOT PYTHON_ROOT_USER) +ENDIF(PYTHON_STATUS) + +# ------ + +IF(PYTHON_STATUS) + IF(PYTHON_ROOT_USER) + SET(PYTHON_FIND_PATHS_OPTION NO_DEFAULT_PATH) + ELSE(PYTHON_ROOT_USER) + SET(PYTHON_FIND_PATHS_OPTION) + ENDIF(PYTHON_ROOT_USER) +ENDIF(PYTHON_STATUS) + +# ------ + +IF(PYTHON_STATUS) + IF(WINDOWS) + IF(CMAKE_BUILD_TYPE STREQUAL Release) + SET(PYTHON_EXECUTABLE_TO_FIND python) + ELSE(CMAKE_BUILD_TYPE STREQUAL Release) + SET(PYTHON_EXECUTABLE_TO_FIND python_d) + ENDIF(CMAKE_BUILD_TYPE STREQUAL Release) + ELSE(WINDOWS) + SET(PYTHON_EXECUTABLE_TO_FIND python) + ENDIF(WINDOWS) + IF(NOT PYTHON_ROOT_USER) + SET(PYTHON_EXECUTABLE_PATHS) + ELSE(NOT PYTHON_ROOT_USER) + IF(WINDOWS) + SET(PYTHON_EXECUTABLE_PATHS ${PYTHON_ROOT_USER}) + ELSE(WINDOWS) + SET(PYTHON_EXECUTABLE_PATHS ${PYTHON_ROOT_USER}/bin) + ENDIF(WINDOWS) + ENDIF(NOT PYTHON_ROOT_USER) + FIND_PROGRAM(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE_TO_FIND} PATHS ${PYTHON_EXECUTABLE_PATHS} ${PYTHON_FIND_PATHS_OPTION}) + IF(PYTHON_EXECUTABLE) + MESSAGE(STATUS "python found: ${PYTHON_EXECUTABLE}") + IF(PYTHON_EXECUTABLE STREQUAL /usr/bin/python) + ELSE(PYTHON_EXECUTABLE STREQUAL /usr/bin/python) + SET(PYTHON_ROOT_USER ${PYTHON_EXECUTABLE}) + GET_FILENAME_COMPONENT(PYTHON_ROOT_USER ${PYTHON_ROOT_USER} PATH) + IF(NOT WINDOWS) + GET_FILENAME_COMPONENT(PYTHON_ROOT_USER ${PYTHON_ROOT_USER} PATH) + ENDIF(NOT WINDOWS) + ENDIF(PYTHON_EXECUTABLE STREQUAL /usr/bin/python) + ELSE(PYTHON_EXECUTABLE) + IF(PYTHON_ROOT_USER) + MESSAGE(STATUS "${PYTHON_EXECUTABLE_TO_FIND} not found in ${PYTHON_EXECUTABLE_PATHS}, check your PYTHON installation.") + ELSE(PYTHON_ROOT_USER) + MESSAGE(STATUS "${PYTHON_EXECUTABLE_TO_FIND} not found on system, try to use WITH_PYTHON option or PYTHON_ROOT environment variable.") + ENDIF(PYTHON_ROOT_USER) + SET(PYTHON_STATUS 0) + ENDIF(PYTHON_EXECUTABLE) +ENDIF(PYTHON_STATUS) + +# ------ + +IF(PYTHON_STATUS) + EXECUTE_PROCESS( + COMMAND ${PYTHON_EXECUTABLE} -c "import sys; sys.stdout.write(sys.version[:3])" + OUTPUT_VARIABLE PYTHON_VERSION + ) +ENDIF(PYTHON_STATUS) + +# ------ + +IF(PYTHON_STATUS) + IF(PYTHON_ROOT_USER) + SET(PYTHON_FIND_PATHS_OPTION NO_DEFAULT_PATH) + ELSE(PYTHON_ROOT_USER) + SET(PYTHON_FIND_PATHS_OPTION) + ENDIF(PYTHON_ROOT_USER) +ENDIF(PYTHON_STATUS) + +# ------ + +IF(PYTHON_STATUS) + IF(PYTHON_ROOT_USER) + SET(PYTHON_INCLUDE_PATHS ${PYTHON_ROOT_USER}/include ${PYTHON_ROOT_USER}/include/python${PYTHON_VERSION}) + ELSE(PYTHON_ROOT_USER) + SET(PYTHON_INCLUDE_PATHS /usr/include/python${PYTHON_VERSION}) + ENDIF(PYTHON_ROOT_USER) + SET(PYTHON_INCLUDE_TO_FIND Python.h) + FIND_PATH(PYTHON_INCLUDE_DIR ${PYTHON_INCLUDE_TO_FIND} PATHS ${PYTHON_INCLUDE_PATHS} ${PYTHON_FIND_PATHS_OPTION}) + SET(PYTHON_DEFINITIONS) + IF(PYTHON_INCLUDE_DIR) + SET(PYTHON_INCLUDES -I${PYTHON_INCLUDE_DIR})# to remove + SET(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR}) + IF(WINDOWS) + IF(CMAKE_BUILD_TYPE STREQUAL Release) + ELSE(CMAKE_BUILD_TYPE STREQUAL Release) + SET(PYTHON_INCLUDES ${PYTHON_INCLUDES} -DHAVE_DEBUG_PYTHON)# to remove + SET(PYTHON_DEFINITIONS "-DHAVE_DEBUG_PYTHON") + ENDIF(CMAKE_BUILD_TYPE STREQUAL Release) + ENDIF(WINDOWS) + MESSAGE(STATUS "${PYTHON_INCLUDE_TO_FIND} found in ${PYTHON_INCLUDE_DIR}") + ELSE(PYTHON_INCLUDE_DIR) + SET(PYTHON_STATUS 0) + IF(PYTHON_ROOT_USER) + MESSAGE(STATUS "${PYTHON_INCLUDE_TO_FIND} not found in ${PYTHON_INCLUDE_PATHS}, check your PYTHON installation.") + ELSE(PYTHON_ROOT_USER) + MESSAGE(STATUS "${PYTHON_INCLUDE_TO_FIND} not found on system, try to use WITH_PYTHON option or PYTHON_ROOT environment variable.") + ENDIF(PYTHON_ROOT_USER) + ENDIF(PYTHON_INCLUDE_DIR) +ENDIF(PYTHON_STATUS) + +# ---- + +IF(PYTHON_STATUS) + IF(PYTHON_ROOT_USER) + IF(WINDOWS) + SET(PYTHON_LIB_PATHS ${PYTHON_ROOT_USER}/libs) + ELSE(WINDOWS) + SET(PYTHON_LIB_PATHS ${PYTHON_ROOT_USER}/lib ${PYTHON_ROOT_USER}/lib/python${PYTHON_VERSION}/config) + ENDIF(WINDOWS) + ELSE(PYTHON_ROOT_USER) + SET(PYTHON_LIB_PATHS) + ENDIF(PYTHON_ROOT_USER) + IF(WINDOWS) + STRING(REPLACE "." "" PYTHON_VERSION_WITHOUT_DOT ${PYTHON_VERSION}) + IF(CMAKE_BUILD_TYPE STREQUAL Release) + FIND_LIBRARY(PYTHON_LIB python${PYTHON_VERSION_WITHOUT_DOT} PATHS ${PYTHON_LIB_PATHS} ${PYTHON_FIND_PATHS_OPTION}) + ELSE(CMAKE_BUILD_TYPE STREQUAL Release) + FIND_LIBRARY(PYTHON_LIB python${PYTHON_VERSION_WITHOUT_DOT}_d PATHS ${PYTHON_LIB_PATHS} ${PYTHON_FIND_PATHS_OPTION}) + ENDIF(CMAKE_BUILD_TYPE STREQUAL Release) + ELSE(WINDOWS) + FIND_LIBRARY(PYTHON_LIB python${PYTHON_VERSION} PATHS ${PYTHON_LIB_PATHS} ${PYTHON_FIND_PATHS_OPTION}) + ENDIF(WINDOWS) + SET(PYTHON_LIBS) + IF(PYTHON_LIB) + SET(PYTHON_LIBS ${PYTHON_LIBS} ${PYTHON_LIB}) + MESSAGE(STATUS "python lib found: ${PYTHON_LIB}") + ELSE(PYTHON_LIB) + SET(PYTHON_STATUS 0) + IF(PYTHON_ROOT_USER) + MESSAGE(STATUS "python lib not found in ${PYTHON_LIB_PATHS}, check your PYTHON installation.") + ELSE(PYTHON_ROOT_USER) + MESSAGE(STATUS "python lib not found on system, try to use WITH_PYTHON option or PYTHON_ROOT environment variable.") + ENDIF(PYTHON_ROOT_USER) + ENDIF(PYTHON_LIB) +ENDIF(PYTHON_STATUS) + +# ---- + +SET(NUMPY_STATUS 0) +IF(PYTHON_STATUS) + EXECUTE_PROCESS( + COMMAND ${PYTHON_EXECUTABLE} -c "import numpy ; import sys ; sys.stdout.write(numpy.get_include())" + OUTPUT_VARIABLE NUMPY_INCLUDE_DIR + ERROR_QUIET + ) + IF(NUMPY_INCLUDE_DIR) + SET(NUMPY_STATUS 1) + ENDIF(NUMPY_INCLUDE_DIR) + IF(NUMPY_STATUS) + SET(PYTHON_INCLUDES ${PYTHON_INCLUDES} -DWITH_NUMPY -I${NUMPY_INCLUDE_DIR})# to remove + SET(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR}) + SET(PYTHON_DEFINITIONS "${PYTHON_DEFINITIONS} -DWITH_NUMPY") + MESSAGE(STATUS "numpy found : ${NUMPY_INCLUDE_DIR}") + ELSE(NUMPY_STATUS) + MESSAGE(STATUS "numpy not found") + ENDIF(NUMPY_STATUS) +ENDIF(PYTHON_STATUS) + +# ---- + +IF(PYTHON_STATUS) + SET(PYTHON_CPPFLAGS ${PYTHON_INCLUDES})# to remove + SET(PYLOGLEVEL WARNING) +ELSE(PYTHON_STATUS) + IF(PYTHON_IS_MANDATORY) + MESSAGE(FATAL_ERROR "python not found ... mandatory ... abort") + ELSE(PYTHON_IS_MANDATORY) + MESSAGE(STATUS "python not found ... optional ... disabled") + ENDIF(PYTHON_IS_MANDATORY) +ENDIF(PYTHON_STATUS) diff --git a/adm_local_without_kernel/cmake_files/FindSWIG.cmake b/adm_local_without_kernel/cmake_files/FindSWIG.cmake new file mode 100755 index 000000000..ca6aa1ff2 --- /dev/null +++ b/adm_local_without_kernel/cmake_files/FindSWIG.cmake @@ -0,0 +1,99 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# 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 +# + +# ------ + +MESSAGE(STATUS "Check for swig ...") + +# ------ + +IF(SWIG_IS_MANDATORY STREQUAL 0) + SET(SWIG_IS_MANDATORY 0) + SET(SWIG_IS_OPTIONAL 1) +ENDIF(SWIG_IS_MANDATORY STREQUAL 0) +IF(SWIG_IS_OPTIONAL STREQUAL 0) + SET(SWIG_IS_MANDATORY 1) + SET(SWIG_IS_OPTIONAL 0) +ENDIF(SWIG_IS_OPTIONAL STREQUAL 0) +IF(NOT SWIG_IS_MANDATORY AND NOT SWIG_IS_OPTIONAL) + SET(SWIG_IS_MANDATORY 1) + SET(SWIG_IS_OPTIONAL 0) +ENDIF(NOT SWIG_IS_MANDATORY AND NOT SWIG_IS_OPTIONAL) + +# ------ + +SET(SWIG_STATUS 1) +IF(WITHOUT_SWIG OR WITH_SWIG STREQUAL 0) + SET(SWIG_STATUS 0) + MESSAGE(STATUS "swig disabled from command line.") +ENDIF(WITHOUT_SWIG OR WITH_SWIG STREQUAL 0) + +# ------ + +IF(SWIG_STATUS) + IF(WITH_SWIG) + SET(SWIG_ROOT_USER ${WITH_SWIG}) + ENDIF(WITH_SWIG) + IF(NOT SWIG_ROOT_USER) + SET(SWIG_ROOT_USER $ENV{SWIG_ROOT}) + ENDIF(NOT SWIG_ROOT_USER) + IF(NOT SWIG_ROOT_USER) + SET(SWIG_ROOT_USER $ENV{SWIGHOME}) + ENDIF(NOT SWIG_ROOT_USER) +ENDIF(SWIG_STATUS) + +# ------ + +IF(SWIG_STATUS) + SET(SWIG_EXECUTABLE_TO_FIND swig) + IF(SWIG_ROOT_USER) + FIND_PROGRAM(SWIG_EXECUTABLE ${SWIG_EXECUTABLE_TO_FIND} PATHS ${SWIG_ROOT_USER}/bin NO_DEFAULT_PATH) + ELSE(SWIG_ROOT_USER) + FIND_PROGRAM(SWIG_EXECUTABLE ${SWIG_EXECUTABLE_TO_FIND}) + ENDIF(SWIG_ROOT_USER) + IF(SWIG_EXECUTABLE) + MESSAGE(STATUS "${SWIG_EXECUTABLE_TO_FIND} found: ${SWIG_EXECUTABLE}") + ELSE(SWIG_EXECUTABLE) + MESSAGE(STATUS "${SWIG_EXECUTABLE_TO_FIND} not found, try to use WITH_SWIG option or SWIG_ROOT (or SWIGHOME) environment variable") + SET(SWIG_STATUS 0) + ENDIF(SWIG_EXECUTABLE) +ENDIF(SWIG_STATUS) + +# ---- + +IF(SWIG_STATUS) + SET(SWIG_FLAGS -c++ -python -shadow) +ELSE(SWIG_STATUS) + IF(SWIG_IS_MANDATORY) + MESSAGE(FATAL_ERROR "swig not found ... mandatory ... abort") + ELSE(SWIG_IS_MANDATORY) + MESSAGE(STATUS "swig not found ... optional ... disabled") + ENDIF(SWIG_IS_MANDATORY) +ENDIF(SWIG_STATUS) + +# ---- + +IF(NUMPY_STATUS) + SET(SWIG_FLAGS ${SWIG_FLAGS} -DWITH_NUMPY=WITH_NUMPY) +ENDIF(NUMPY_STATUS) + +# ---- diff --git a/adm_local_without_kernel/cmake_files/InstallAndCompilePythonFile.cmake b/adm_local_without_kernel/cmake_files/InstallAndCompilePythonFile.cmake new file mode 100755 index 000000000..8836d0019 --- /dev/null +++ b/adm_local_without_kernel/cmake_files/InstallAndCompilePythonFile.cmake @@ -0,0 +1,33 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# 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 +# + +MACRO(INSTALL_AND_COMPILE_PYTHON_FILE PYFILE2COMPINST PYFILELOC) + INSTALL(CODE "SET(PYTHON_FILE ${f})") + FOREACH(input ${PYFILE2COMPINST}) + GET_FILENAME_COMPONENT(inputname ${input} NAME) + INSTALL(FILES ${input} DESTINATION ${CMAKE_INSTALL_PREFIX}/${PYFILELOC}) + INSTALL(CODE "MESSAGE(STATUS \"py compiling ${CMAKE_INSTALL_PREFIX}/${PYFILELOC}/${inputname}\")") + INSTALL(CODE "SET(CMD \"import py_compile ; py_compile.compile('${CMAKE_INSTALL_PREFIX}/${PYFILELOC}/${inputname}')\")") + INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c \"\${CMD}\")") + INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -O -c \"\${CMD}\")") + ENDFOREACH(input ${PYFILE2COMPINST}) +ENDMACRO(INSTALL_AND_COMPILE_PYTHON_FILE PYFILE2COMPINST PYFILELOC) diff --git a/adm_local_without_kernel/unix/Makefile.am b/adm_local_without_kernel/unix/Makefile.am index efa32d7fc..0d5ee76b8 100644 --- a/adm_local_without_kernel/unix/Makefile.am +++ b/adm_local_without_kernel/unix/Makefile.am @@ -20,14 +20,3 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am SUBDIRS = config_files - -EXTRA_DIST += SALOMEconfig.h.in - -if !MED_ENABLE_KERNEL - nodist_salomeinclude_HEADERS = SALOMEconfig.h -endif - -################################## -# not-used (obsolete?) files -################################## -# depend.in make_module.in sstream.in \ No newline at end of file diff --git a/adm_local_without_kernel/unix/SALOMEconfig.h.in b/adm_local_without_kernel/unix/SALOMEconfig.h.in deleted file mode 100644 index 8db6100ef..000000000 --- a/adm_local_without_kernel/unix/SALOMEconfig.h.in +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// 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 -// - -/* Debug mode ??? */ -#ifndef DEBUG -# define DEBUG -#endif - -/* CORBA headers include rules */ -#ifndef CORBA_CLIENT_HEADER -# define QUOTE(x) #x -# define CORBA_CLIENT_HEADER(x) QUOTE(x@IDL_CLN_H@) -# define CORBA_SERVER_HEADER(x) QUOTE(x@IDL_SRV_H@) -#endif - -/* Platform definition */ -#ifndef @MACHINE@ - #define @MACHINE@ -#endif - -// This is only to suppress warning messages with defines redefined (cause of omniORB that exports these names) -#ifdef PACKAGE -#undef PACKAGE -#endif -#ifdef PACKAGE_BUGREPORT -#undef PACKAGE_BUGREPORT -#endif -#ifdef PACKAGE_NAME -#undef PACKAGE_NAME -#endif -#ifdef PACKAGE_STRING -#undef PACKAGE_STRING -#endif -#ifdef PACKAGE_TARNAME -#undef PACKAGE_TARNAME -#endif -#ifdef PACKAGE_VERSION -#undef PACKAGE_VERSION -#endif -#ifdef VERSION -#undef VERSION -#endif - -#ifdef _POSIX_C_SOURCE -#undef _POSIX_C_SOURCE -#endif diff --git a/adm_local_without_kernel/unix/config_files/check_sphinx.m4 b/adm_local_without_kernel/unix/config_files/check_sphinx.m4 new file mode 100644 index 000000000..4210243cc --- /dev/null +++ b/adm_local_without_kernel/unix/config_files/check_sphinx.m4 @@ -0,0 +1,35 @@ +dnl Copyright (C) 2006-2012 CEA/DEN, EDF R&D, OPEN CASCADE +dnl +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License. +dnl +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +dnl +dnl See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +dnl +AC_DEFUN([CHECK_SPHINX],[ + +AC_CHECKING(for sphinx doc generator) + +sphinx_ok=yes +dnl where is sphinx ? +AC_PATH_PROG(SPHINX,sphinx-build) +if test "x$SPHINX" = "x" +then + AC_MSG_WARN(sphinx not found) + sphinx_ok=no +fi + +AM_CONDITIONAL(SPHINX_IS_OK, [test x"$sphinx_ok" = xyes]) + +])dnl +dnl diff --git a/configure.ac b/configure.ac index 1f76990b7..842ab03bc 100644 --- a/configure.ac +++ b/configure.ac @@ -270,6 +270,7 @@ echo testing html generators echo --------------------------------------------- echo +CHECK_SPHINX CHECK_HTML_GENERATORS ### @@ -281,6 +282,15 @@ gui_ok=no WITHIHM="no" +# This flags should be used to switch between the MEDMEM GUI (defined +# in the MEDGUI package) and the MEDOP GUI (defined in the MEDOP +# package). In any case the module factory function is provided by the +# MEDOP GUI library (package MEDOP/gui) and this factory function +# creates weither a MedGUI instance or a MEDOPModule instance, +# depending on the value of this flags. The default is to use the new +# MEDOP GUI. +AM_CONDITIONAL(WITH_MEDMEMGUI,test "1" = "0") + ### # Other tests should be performed only in --with-interp-kernel-only=no mode ### @@ -564,6 +574,7 @@ else else # --with-interp-kernel-only=no mode obligatory_vars="$obligatory_vars python_ok boost_ok swig_ok hdf5_ok med3_ok $splitter_obligatory_vars" + optional_vars="$optional_vars $splitter_optional_vars $renumber_optional_vars" fi fi @@ -663,7 +674,7 @@ sed -i "s%\(\s*\)\(for searchdir in \$searchdirs; do\)%\1for sss in \$searchdirs ],[]) AC_OUTPUT([ \ - adm_local_without_kernel/unix/SALOMEconfig.h \ + adm_local_without_kernel/SALOMEconfig.h \ Makefile \ MED_version.h \ adm_local/unix/config_files/Makefile \ @@ -740,6 +751,21 @@ AC_OUTPUT([ \ src/MedClient/test/test1/Makefile \ src/MedClient/test/test2/Makefile \ src/MEDGUI/Makefile \ + src/MEDOP/Makefile \ + src/MEDOP/cmp/Makefile \ + src/MEDOP/tui/Makefile \ + src/MEDOP/tui/xmedpy/Makefile \ + src/MEDOP/res/Makefile \ + src/MEDOP/res/testfiles/Makefile \ + src/MEDOP/gui/dialogs/Makefile \ + src/MEDOP/gui/Makefile \ + src/MEDOP/exe/Makefile \ + src/MEDOP/exe/appligen/Makefile \ + src/MEDOP/exe/appligen/config_appli_model.xml \ + src/MEDOP/exe/appligen/appligen.sh \ + src/MEDOP/exe/image2med/Makefile \ + src/MEDOP/doc/sphinx/conf.py \ + src/MEDOP/doc/sphinx/Makefile \ doc/Makefile \ doc/MEDMEM/Makefile \ doc/MEDMEM/MEDMEM_Content.tex \ diff --git a/doc/doxygen/figures/medlayers.png b/doc/doxygen/figures/medlayers.png new file mode 100644 index 000000000..179ae0bcf Binary files /dev/null and b/doc/doxygen/figures/medlayers.png differ diff --git a/doc/doxygen/figures/medlayers_70pc.png b/doc/doxygen/figures/medlayers_70pc.png new file mode 100644 index 000000000..f31997693 Binary files /dev/null and b/doc/doxygen/figures/medlayers_70pc.png differ diff --git a/doc/doxygen/main.dox b/doc/doxygen/main.dox index a3d73913c..a8e64c5b0 100644 --- a/doc/doxygen/main.dox +++ b/doc/doxygen/main.dox @@ -1,25 +1,65 @@ /*!\mainpage MEDMEM user's guide -\image html MED_small.png -\image latex MED_small.eps -\anchor fig_MED_small - \section intro Introduction -This document constitutes the user guide of the %MEDMEM library and of its related tools. +This document is the user guide of the %MED SALOME module. The MED +module consists in: + +- \ref S1 to manipulate meshes and fields that conform + to the MED data model. This library can be used in C++ programs as + in python script for data processing on meshes and fields. +- \ref S2 that exhibits some useful functions of the + library for a graphical manipulation of data in standard use cases. +- \ref S3 that can be used to process MED data files + +\section S1 A library of functions for data processing + +The figure below represents the layer structure of the packages of the +library: + +\image html medlayers_70pc.png + +The fondamentals consists in three atomic libraries: + +- \ref medcoupling that describes DataStructures used for cross process exchange of meshes and fields. +- \ref medloader that provides I/O functions to the MED file format +- \ref interptools (INTERP_KERNEL + REMAPPER) that provides + mathematical structures and algorithms for interpolation and + localization. + +You should be warned that the MEDMEM library still exists in the MED +module but is considered as deprecated: + +- \ref medmem covers the %MEDMEM core library, i.e. the implementation + of meshes, supports and fields and the associated drivers (for + MED-file, VTK, GIBI). + +\section S2 A graphical interface for standard use cases + +The MED module in SALOME comes with a graphical interface that helps +you to deal with most standard use case of fields manipulation. The +user guide can be found here: + +- User guide of the MED Graphical Interface + +You could also be interested to read the software specifications and +requirements for this graphical module, and even the technical +considerations for development: + +- Software + specifications and requirements of the MED Graphical Interface +- Developer guide of the MED Graphical Interface + +\section S3 A set of tools for file manipulation -\section install Installation -The install procedure of the %MEDMEM library can handle a variety of configurations -to suit the needs of its user. Instructions for configuring and installing the library can be found in \ref medmem_install. - -\section outline Outline -This user guide contains five different chapters that cover the core %MEDMEM and MEDCoupling libraries, the interpolation library and the associated tools: -- Chapter \ref medcoupling describes DataStructures used for cross -process exchange of meshes and fields. -- Chapter \ref medloader describes API for I/O from or to a MED file -coming from a \ref medcoupling data structure. -- Chapter \ref interptools describes the interpolation and localization library. -- Chapter \ref medmem covers the %MEDMEM core library, i.e. the implementation of meshes, supports and fields and the associated drivers (for MED-file, VTK, GIBI). - Chapter \ref tools describes various tools based on MEDMEM that can be helpful for handling MED files (conversion tools and splitting tools). +\section install Installation +The install procedure of the %MED SALOME module can handle a variety of configurations +to suit the needs of its user. Instructions for configuring and +installing the module an be found in \ref medmem_install. + */ diff --git a/idl/CMakeLists.txt b/idl/CMakeLists.txt index 21696efb5..3556b4e15 100644 --- a/idl/CMakeLists.txt +++ b/idl/CMakeLists.txt @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/UseOMNIORB.cmake) @@ -23,7 +24,7 @@ INCLUDE_DIRECTORIES( ${OMNIORB_INCLUDE_DIRS} ${KERNEL_ROOT_DIR}/include/salome ${CMAKE_CURRENT_BINARY_DIR} - ) +) SET(SalomeIDLMED_IDLSOURCES MED.idl @@ -31,7 +32,11 @@ SET(SalomeIDLMED_IDLSOURCES Compo1Py.idl MEDCouplingCorbaServant.idl ParaMEDCouplingCorbaServant.idl - ) + MEDDataManager.idl + MEDCalculator.idl + MEDEventListener.idl + MEDOPFactory.idl +) IF(MPI_IS_OK) SET(SalomeIDLMED_IDLSOURCES ${SalomeIDLMED_IDLSOURCES} ParaMEDMEMComponent.idl) @@ -39,19 +44,26 @@ ENDIF(MPI_IS_OK) SET(SalomeIDLMEDTests_IDLSOURCES MEDCouplingCorbaServantTest.idl - ) +) SET(IDL_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${KERNEL_ROOT_DIR}/idl/salome - ) +) -OMNIORB_ADD_MODULE(SalomeIDLMED "${SalomeIDLMED_IDLSOURCES}" "${IDL_INCLUDE_DIRS}") +SET(TYPE) +IF(WINDOWS) + SET(TYPE STATIC) +ELSE(WINDOWS) + SET(TYPE SHARED) +ENDIF(WINDOWS +) +OMNIORB_ADD_MODULE(SalomeIDLMED "${SalomeIDLMED_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" ${TYPE}) TARGET_LINK_LIBRARIES(SalomeIDLMED ${CORBA_LIBS} ${KERNEL_LDFLAGS} ${SalomeIDLKernel}) -SET_TARGET_PROPERTIES(SalomeIDLMED PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}") +SET_TARGET_PROPERTIES(SalomeIDLMED PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") -OMNIORB_ADD_MODULE(SalomeIDLMEDTests "${SalomeIDLMEDTests_IDLSOURCES}" "${IDL_INCLUDE_DIRS}") -TARGET_LINK_LIBRARIES(SalomeIDLMEDTests ${CORBA_LIBS} ${KERNEL_LDFLAGS} ${SalomeIDLKernel}) -SET_TARGET_PROPERTIES(SalomeIDLMEDTests PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}") +OMNIORB_ADD_MODULE(SalomeIDLMEDTests "${SalomeIDLMEDTests_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" ${TYPE}) +TARGET_LINK_LIBRARIES(SalomeIDLMEDTests SalomeIDLMED) +SET_TARGET_PROPERTIES(SalomeIDLMEDTests PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") INSTALL(TARGETS SalomeIDLMED SalomeIDLMEDTests DESTINATION ${MED_salomelib_LIBS}) diff --git a/idl/MEDCalculator.idl b/idl/MEDCalculator.idl new file mode 100644 index 000000000..28dbcd7ea --- /dev/null +++ b/idl/MEDCalculator.idl @@ -0,0 +1,72 @@ +// Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +// +// 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 +// +// Authors : Guillaume Boulant (EDF) - 01/06/2011 + +#ifndef _MED_CALCULATOR_IDL_ +#define _MED_CALCULATOR_IDL_ + +#include "SALOME_GenericObj.idl" +#include "MEDDataManager.idl" + +module MEDOP +{ + + /*! + * This constants may be used for the value of an argument of a + * function of the interface to specify that the function must + * consider a default value. + */ + typedef long medopNumber; + const medopNumber NBCOMP_DEFAULT=-1; + + interface MEDCalculator: SALOME::GenericObj + { + /*! Addition of the fields f1 and f2 ( f1+f2) */ + FieldHandler add(in FieldHandler f1, in FieldHandler f2) + raises (SALOME::SALOME_Exception); + /*! Substraction of the fields f1 and f2 (f1-f2) */ + FieldHandler sub(in FieldHandler f1, in FieldHandler f2) + raises (SALOME::SALOME_Exception); + /*! Multiplication of the fields f1 by f2 (f1*f2) */ + FieldHandler mul(in FieldHandler f1, in FieldHandler f2) + raises (SALOME::SALOME_Exception); + /*! Division of the fields f1 by f2 (f1/f2) */ + FieldHandler div(in FieldHandler f1, in FieldHandler f2) + raises (SALOME::SALOME_Exception); + /*! Power of the field f (f^power) */ + FieldHandler pow(in FieldHandler f, in long power) + raises (SALOME::SALOME_Exception); + /*! Linear transformation of the field f (factor*f+offset) */ + FieldHandler lin(in FieldHandler f, in double factor, in double offset) + raises (SALOME::SALOME_Exception); + /*! Dublication of the field f */ + FieldHandler dup(in FieldHandler f) + raises (SALOME::SALOME_Exception); + + /*! Creation of a field whose values are initialized with the specified double */ + /* FieldHandler ini(in double value) raises (SALOME::SALOME_Exception); */ + + /*! Transformation of the field f using a custom function */ + FieldHandler fct(in FieldHandler f, in string function, in medopNumber nbResComponents) + raises (SALOME::SALOME_Exception); + + }; +}; + +#endif // _MED_CALCULATOR_IDL_ diff --git a/idl/MEDCouplingCorbaServant.idl b/idl/MEDCouplingCorbaServant.idl index 807c8aeca..e5ba3374d 100644 --- a/idl/MEDCouplingCorbaServant.idl +++ b/idl/MEDCouplingCorbaServant.idl @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGCORBASERVANT_IDL__ #define __MEDCOUPLINGCORBASERVANT_IDL__ diff --git a/idl/MEDCouplingCorbaServantTest.idl b/idl/MEDCouplingCorbaServantTest.idl index 678d727cd..dbff5009a 100644 --- a/idl/MEDCouplingCorbaServantTest.idl +++ b/idl/MEDCouplingCorbaServantTest.idl @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGCORBASERVANTTEST_IDL__ #define __MEDCOUPLINGCORBASERVANTTEST_IDL__ diff --git a/idl/MEDDataManager.idl b/idl/MEDDataManager.idl new file mode 100644 index 000000000..0eb0aa725 --- /dev/null +++ b/idl/MEDDataManager.idl @@ -0,0 +1,160 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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 +// + +// Authors : Guillaume Boulant (EDF) - 01/06/2011 + +#ifndef _MED_DATAMANAGER_IDL_ +#define _MED_DATAMANAGER_IDL_ + +#include "SALOME_GenericObj.idl" +#include "SALOME_Exception.idl" + +module MEDOP +{ + struct DatasourceHandler { + long id; + string name; + string uri; + // The source could be a filepath or the ior of a field servant + }; + + struct MeshHandler { + long id; + string name; + long sourceid; + }; + typedef sequence MeshHandlerList; + + /** + * The Fieldseries is a virtal object that does not exist in the MED + * data model (at least in the MEDCoupling data model). It is just a + * point that aggregate a list of fields that relie on the same mesh + * with the same type (the fields in a timeseries differ by their + * time step). + * + * Then you could have a field with no fieldseries associated but + * directly associated to a mesh. That is typically the case of + * fields created by MED operations: if you operate tow fields + * coming from 2 different timeseries (and relying on the same + * mesh), you obtain a field that can not be associate to the + * original timeseries. Then this new created field must be directly + * associated to its underlying mesh (as defined in the MEDCoupling + * data model). + * + * In conclusion, the fieldseries is a facilities for data + * management but must not be a structuration of the data model. The + * association is not: + * + * field->fieldseries->mesh + * + * but: + * + * field->fieldseries (optional) + * ->mesh (mandatory) + * + * and: + * + * fieldseries->mesh (mandatory) + */ + struct FieldseriesHandler { + long id; + string name; + long type; + long meshid; + long nbIter; + }; + typedef sequence FieldseriesHandlerList; + + // The FieldHandler structure is a lightweigth data structure that + // represents a single field (as understood in MEDCoupling model). + struct FieldHandler { + long id; + long fieldseriesId; + string fieldname; // @warn : if fieldseriesId then get from fieldseries->name + string meshname; // @deprecated: replace by meshid and get from mesh->name + long meshid; + long type; // @warn : if fieldseriesId then get from fieldseries->type + long iteration; + long order; + string source; // @deprecated : get from mesh->datasource->uri + }; + + typedef sequence FieldHandlerList; + typedef sequence FieldIdList; + + interface MEDDataManager: SALOME::GenericObj + { + + //========================================================== + // Datasource management + //========================================================== + DatasourceHandler addDatasource(in string filepath); + + //========================================================== + // Mesh data management + //========================================================== + + MeshHandler getMesh(in long meshId) raises (SALOME::SALOME_Exception); + MeshHandlerList getMeshList(in long datasourceId); + + //========================================================== + // Field data management + //========================================================== + FieldseriesHandlerList getFieldseriesListOnMesh(in long meshId); + FieldHandlerList getFieldListInFieldseries(in long fieldseriesId); + + FieldHandler getFieldHandler(in long fieldHandlerId); + FieldHandlerList getFieldHandlerList(); + // __GBO__ Maybe it could be usefull to define a getFieldHandlerList with a datasourceId in argument + string getFieldRepresentation(in long fieldHandlerId); + + // Persistency management + void saveFields(in string filepath, in FieldIdList list) + raises (SALOME::SALOME_Exception); + void markAsPersistent(in long fieldHandlerId, in boolean persistent); + void savePersistentFields(in string filepath) + raises (SALOME::SALOME_Exception); + + + void updateFieldMetadata(in long fieldHandlerId, + in string fieldname, + in long iteration, + in long order, + in string source); + + //void saveFields(in FieldHandlerList fieldHandlerList, in string filepath); + + void changeUnderlyingMesh(in long fieldHandlerId, in long meshHandlerId) + raises (SALOME::SALOME_Exception); + + //========================================================== + // General purpose data management + //========================================================== + void setEventListenerIOR(in string ior); + string getEventListenerIOR() raises (SALOME::SALOME_Exception); + + // Print out server data + void serverlog(); + }; +}; + +#endif // _MED_DATAMANAGER_IDL_ diff --git a/idl/MEDEventListener.idl b/idl/MEDEventListener.idl new file mode 100644 index 000000000..76ec949e7 --- /dev/null +++ b/idl/MEDEventListener.idl @@ -0,0 +1,47 @@ +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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 _MED_EVENTLISTENER_IDL_ +#define _MED_EVENTLISTENER_IDL_ + +#include "SALOME_GenericObj.idl" + +module MEDOP +{ + enum MedEventType { + EVENT_ADDNEW_FIELD, + EVENT_DELETE_FIELD, + EVENT_UPDATE_FIELD, + EVENT_UNKNOWN + }; + + struct MedEvent { + MedEventType type; + long fieldid; + }; + + interface MEDEventListener: SALOME::GenericObj { + void processMedEvent(in MedEvent event); + }; +}; + +#endif diff --git a/idl/MEDOPFactory.idl b/idl/MEDOPFactory.idl new file mode 100644 index 000000000..9d7fa14c7 --- /dev/null +++ b/idl/MEDOPFactory.idl @@ -0,0 +1,49 @@ +// Copyright (C) 2005 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 __MEDOPFactory_IDL_ +#define __MEDOPFactory_IDL_ + +#include "SALOME_Component.idl" +#include "SALOME_Exception.idl" +#include "MEDDataManager.idl" +#include "MEDCalculator.idl" + +/*! + * This module contains the interface required for starting with MED + * operations. It defines the factory methods to get the main SALOME + * MED components for MED field operations. + * + * WRN: This interface is an EngineComponent so that it could be retrieve + * in the CORBA context using the LifeCycleCorba registry. +*/ +module MEDOP +{ + interface MEDOPFactory : Engines::EngineComponent + { + + MEDOP::MEDDataManager getDataManager(); + MEDOP::MEDCalculator getCalculator(); + + }; +}; + +#endif + diff --git a/idl/Makefile.am b/idl/Makefile.am index 499091bf7..06c8e5725 100644 --- a/idl/Makefile.am +++ b/idl/Makefile.am @@ -26,7 +26,17 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am EXTRA_DIST += CMakeLists.txt -BASEIDL_FILES = MED.idl MED_Gen.idl Compo1Py.idl MEDCouplingCorbaServant.idl MEDCouplingCorbaServantTest.idl ParaMEDCouplingCorbaServant.idl +BASEIDL_FILES = \ + MED.idl MED_Gen.idl Compo1Py.idl \ + MEDCouplingCorbaServant.idl \ + MEDCouplingCorbaServantTest.idl \ + ParaMEDCouplingCorbaServant.idl + +MEDOPIDL_FILES = \ + MEDDataManager.idl \ + MEDCalculator.idl \ + MEDEventListener.idl \ + MEDOPFactory.idl MPIIDL_FILES = ParaMEDMEMComponent.idl @@ -34,6 +44,7 @@ IDL_FILES = $(BASEIDL_FILES) if MPI_IS_OK IDL_FILES += $(MPIIDL_FILES) endif +IDL_FILES += $(MEDOPIDL_FILES) IDL_FILES_PY=$(IDL_FILES:%.idl=%_idl.py) @@ -44,7 +55,16 @@ dist_salomeidl_DATA = $(IDL_FILES) lib_LTLIBRARIES = libSalomeIDLMED.la libSalomeIDLMEDTests.la # Sources built from idl files -BASEIDL_SOURCES = MEDSK.cc MED_GenSK.cc MEDCouplingCorbaServantSK.cc Compo1PySK.cc ParaMEDCouplingCorbaServantSK.cc +BASEIDL_SOURCES = \ + MEDSK.cc MED_GenSK.cc Compo1PySK.cc \ + MEDCouplingCorbaServantSK.cc \ + ParaMEDCouplingCorbaServantSK.cc + +MEDOPIDL_SOURCES = \ + MEDDataManagerSK.cc \ + MEDCalculatorSK.cc \ + MEDEventListenerSK.cc \ + MEDOPFactorySK.cc MPIIDL_SOURCES = ParaMEDMEMComponentSK.cc @@ -52,15 +72,27 @@ IDL_SOURCES = $(BASEIDL_SOURCES) if MPI_IS_OK IDL_SOURCES += $(MPIIDL_SOURCES) endif +IDL_SOURCES += $(MEDOPIDL_SOURCES) nodist_libSalomeIDLMED_la_SOURCES = $(IDL_SOURCES) # header files must be exported: other modules have to use this library -nodist_salomeinclude_HEADERS = MED.hh MED_Gen.hh MEDCouplingCorbaServant.hh Compo1Py.hh MEDCouplingCorbaServantTest.hh ParaMEDCouplingCorbaServant.hh +nodist_salomeinclude_HEADERS = \ + MED.hh MED_Gen.hh Compo1Py.hh \ + MEDCouplingCorbaServant.hh \ + MEDCouplingCorbaServantTest.hh \ + ParaMEDCouplingCorbaServant.hh + if MPI_IS_OK nodist_salomeinclude_HEADERS += ParaMEDMEMComponent.hh endif +nodist_salomeinclude_HEADERS += \ + MEDDataManager.hh \ + MEDCalculator.hh \ + MEDEventListener.hh \ + MEDOPFactory.hh + libSalomeIDLMED_la_CPPFLAGS = \ -I$(top_builddir)/idl \ @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ @KERNEL_CXXFLAGS@ @@ -78,33 +110,14 @@ OMNIORB_IDLPYFLAGS = @OMNIORB_IDLPYFLAGS@ -I$(top_builddir)/idl/salome -I$(KERN IDLCXXFLAGS = -bcxx @IDLCXXFLAGS@ -I$(top_builddir)/idl/salome -I$(KERNEL_ROOT_DIR)/idl/salome IDLPYFLAGS = @IDLPYFLAGS@ -I$(KERNEL_ROOT_DIR)/idl/salome -MEDSK.cc : MED.idl - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< -MED.hh : MEDSK.cc +SUFFIXES = .idl .hh SK.cc -MED_GenSK.cc : MED_Gen.idl +%SK.cc %.hh : %.idl $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< -MED_Gen.hh : MED_GenSK.cc -ParaMEDMEMComponentSK.cc : ParaMEDMEMComponent.idl - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< -ParaMEDMEMComponent.hh : ParaMEDMEMComponentSK.cc - -MEDCouplingCorbaServantSK.cc : MEDCouplingCorbaServant.idl - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< -MEDCouplingCorbaServant.hh : MEDCouplingCorbaServantSK.cc - -ParaMEDCouplingCorbaServantSK.cc : ParaMEDCouplingCorbaServant.idl - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< -ParaMEDCouplingCorbaServant.hh : ParaMEDCouplingCorbaServantSK.cc - -Compo1PySK.cc : Compo1Py.idl - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< -Compo1Py.hh : Compo1PySK.cc - -MEDCouplingCorbaServantTestSK.cc : MEDCouplingCorbaServantTest.idl - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< -MEDCouplingCorbaServantTest.hh : MEDCouplingCorbaServantTestSK.cc +# MEDSK.cc : MED.idl +# $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< +# MED.hh : MEDSK.cc install-exec-local: $(IDL_FILES:%=$(top_srcdir)/idl/%) $(INSTALL) -d $(DESTDIR)$(salomepythondir) @@ -114,7 +127,7 @@ install-exec-local: $(IDL_FILES:%=$(top_srcdir)/idl/%) # we want to remove only staff generated for IDL files and nothing more uninstall-local: - @for modulen in SALOME_MED SALOME_TEST Compo1Py_ORB ; do \ + @for modulen in SALOME_MED SALOME_TEST Compo1Py_ORB MEDOP ; do \ test -d $(DESTDIR)$(salomepythondir)/$${modulen} && echo "Removing $(DESTDIR)$(salomepythondir)/$${modulen}" && rm -rf $(DESTDIR)$(salomepythondir)/$${modulen} ; \ test -d $(DESTDIR)$(salomepythondir)/$${modulen}__POA && echo "Removing $(DESTDIR)$(salomepythondir)/$${modulen}__POA" && rm -rf $(DESTDIR)$(salomepythondir)/$${modulen}__POA ; \ done ; \ diff --git a/resources/MEDCatalog.xml.in b/resources/MEDCatalog.xml.in index 7549a07dd..c4a849568 100644 --- a/resources/MEDCatalog.xml.in +++ b/resources/MEDCatalog.xml.in @@ -78,6 +78,17 @@ + + + MEDOPFactory + MEDOP Factory + MED + Guillaume Boulant + @VERSION@ + Factory of SALOME components for MED Field operations + 0 + + MED diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index 747a70aa6..f737b8523 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -24,10 +24,10 @@
- - + + - +
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a041dbf10..d9ebfc851 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -74,7 +74,7 @@ IF(MED_ENABLE_KERNEL) SET(COMMON_SUBDIRS ${COMMON_SUBDIRS} ParaMEDCouplingCorba ParaMEDMEMComponent) ENDIF(MPI_IS_OK) IF(MED_ENABLE_MED3) - SET(COMMON_SUBDIRS ${COMMON_SUBDIRS} MEDCalculator) + SET(COMMON_SUBDIRS ${COMMON_SUBDIRS} MEDCalculator MEDOP) SET(OLD_COMMON_SUBDIRS ${OLD_COMMON_SUBDIRS} MEDMEM_I) ENDIF(MED_ENABLE_MED3) IF(MED_ENABLE_GUI) diff --git a/src/INTERP_KERNEL/Bases/InterpKernelAutoPtr.hxx b/src/INTERP_KERNEL/Bases/InterpKernelAutoPtr.hxx index 4100a4d05..27eeb5e37 100644 --- a/src/INTERP_KERNEL/Bases/InterpKernelAutoPtr.hxx +++ b/src/INTERP_KERNEL/Bases/InterpKernelAutoPtr.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELAUTOPTR_HXX__ #define __INTERPKERNELAUTOPTR_HXX__ diff --git a/src/INTERP_KERNEL/Bases/InterpKernelException.cxx b/src/INTERP_KERNEL/Bases/InterpKernelException.cxx index 35483a8cc..9f777b61f 100644 --- a/src/INTERP_KERNEL/Bases/InterpKernelException.cxx +++ b/src/INTERP_KERNEL/Bases/InterpKernelException.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelException.hxx" diff --git a/src/INTERP_KERNEL/Bases/InterpKernelException.hxx b/src/INTERP_KERNEL/Bases/InterpKernelException.hxx index c2aa9e32f..3b573c024 100644 --- a/src/INTERP_KERNEL/Bases/InterpKernelException.hxx +++ b/src/INTERP_KERNEL/Bases/InterpKernelException.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELEXCEPTION_HXX__ #define __INTERPKERNELEXCEPTION_HXX__ diff --git a/src/INTERP_KERNEL/Bases/NormalizedUnstructuredMesh.hxx b/src/INTERP_KERNEL/Bases/NormalizedUnstructuredMesh.hxx index 30c429ed7..3d43cb6d5 100644 --- a/src/INTERP_KERNEL/Bases/NormalizedUnstructuredMesh.hxx +++ b/src/INTERP_KERNEL/Bases/NormalizedUnstructuredMesh.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __NORMALIZEDUNSTRUCTUREDMESH_HXX__ #define __NORMALIZEDUNSTRUCTUREDMESH_HXX__ diff --git a/src/INTERP_KERNEL/CMakeLists.txt b/src/INTERP_KERNEL/CMakeLists.txt index b0b85bdc6..8d9d2463a 100644 --- a/src/INTERP_KERNEL/CMakeLists.txt +++ b/src/INTERP_KERNEL/CMakeLists.txt @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) SET(interpkernel_SOURCES TransformedTriangle.cxx @@ -65,7 +66,8 @@ INCLUDE_DIRECTORIES( ) ADD_LIBRARY(interpkernel SHARED ${interpkernel_SOURCES}) - +SET_TARGET_PROPERTIES(interpkernel PROPERTIES COMPILE_FLAGS "${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(interpkernel ${PLATFORM_LIBS}) INSTALL(TARGETS interpkernel DESTINATION ${MED_salomelib_LIBS}) FILE(GLOB_RECURSE interpkernel_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") diff --git a/src/INTERP_KERNEL/CellModel.cxx b/src/INTERP_KERNEL/CellModel.cxx index 626fef916..137810123 100644 --- a/src/INTERP_KERNEL/CellModel.cxx +++ b/src/INTERP_KERNEL/CellModel.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "CellModel.hxx" diff --git a/src/INTERP_KERNEL/CellModel.hxx b/src/INTERP_KERNEL/CellModel.hxx index f9d19c981..27ec69f05 100644 --- a/src/INTERP_KERNEL/CellModel.hxx +++ b/src/INTERP_KERNEL/CellModel.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CELLMODEL_INTERP_KERNEL_HXX__ #define __CELLMODEL_INTERP_KERNEL_HXX__ diff --git a/src/INTERP_KERNEL/ConvexIntersector.hxx b/src/INTERP_KERNEL/ConvexIntersector.hxx index 10755efa2..12fe453b9 100644 --- a/src/INTERP_KERNEL/ConvexIntersector.hxx +++ b/src/INTERP_KERNEL/ConvexIntersector.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CONVEXINTERSECTOR_HXX__ #define __CONVEXINTERSECTOR_HXX__ diff --git a/src/INTERP_KERNEL/ConvexIntersector.txx b/src/INTERP_KERNEL/ConvexIntersector.txx index 44836c639..a30c6a932 100644 --- a/src/INTERP_KERNEL/ConvexIntersector.txx +++ b/src/INTERP_KERNEL/ConvexIntersector.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CONVEXINTERSECTOR_TXX__ #define __CONVEXINTERSECTOR_TXX__ diff --git a/src/INTERP_KERNEL/CurveIntersector.hxx b/src/INTERP_KERNEL/CurveIntersector.hxx index 14035f13a..6a9ee27d5 100644 --- a/src/INTERP_KERNEL/CurveIntersector.hxx +++ b/src/INTERP_KERNEL/CurveIntersector.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CURVEINTERSECTOR_HXX__ #define __CURVEINTERSECTOR_HXX__ diff --git a/src/INTERP_KERNEL/CurveIntersector.txx b/src/INTERP_KERNEL/CurveIntersector.txx index 38dfa9920..3281d9929 100644 --- a/src/INTERP_KERNEL/CurveIntersector.txx +++ b/src/INTERP_KERNEL/CurveIntersector.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CURVEINTERSECTOR_TXX__ #define __CURVEINTERSECTOR_TXX__ diff --git a/src/INTERP_KERNEL/CurveIntersectorP0P0.hxx b/src/INTERP_KERNEL/CurveIntersectorP0P0.hxx index 761dc2dc3..26c58420c 100644 --- a/src/INTERP_KERNEL/CurveIntersectorP0P0.hxx +++ b/src/INTERP_KERNEL/CurveIntersectorP0P0.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CURVEINTERSECTORP0P0_HXX__ #define __CURVEINTERSECTORP0P0_HXX__ diff --git a/src/INTERP_KERNEL/CurveIntersectorP0P0.txx b/src/INTERP_KERNEL/CurveIntersectorP0P0.txx index 3981d1218..d82f4eb58 100644 --- a/src/INTERP_KERNEL/CurveIntersectorP0P0.txx +++ b/src/INTERP_KERNEL/CurveIntersectorP0P0.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CURVEINTERSECTORP0P0_TXX__ #define __CURVEINTERSECTORP0P0_TXX__ diff --git a/src/INTERP_KERNEL/CurveIntersectorP0P1.hxx b/src/INTERP_KERNEL/CurveIntersectorP0P1.hxx index 42dbd758b..fb42bf140 100644 --- a/src/INTERP_KERNEL/CurveIntersectorP0P1.hxx +++ b/src/INTERP_KERNEL/CurveIntersectorP0P1.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CURVEINTERSECTORP0P1_HXX__ #define __CURVEINTERSECTORP0P1_HXX__ diff --git a/src/INTERP_KERNEL/CurveIntersectorP0P1.txx b/src/INTERP_KERNEL/CurveIntersectorP0P1.txx index 91bb236d4..ff43da455 100644 --- a/src/INTERP_KERNEL/CurveIntersectorP0P1.txx +++ b/src/INTERP_KERNEL/CurveIntersectorP0P1.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CurveIntersectorP0P1_TXX__ #define __CurveIntersectorP0P1_TXX__ diff --git a/src/INTERP_KERNEL/CurveIntersectorP1P0.hxx b/src/INTERP_KERNEL/CurveIntersectorP1P0.hxx index 7a5d3d6cf..ba548b9e3 100644 --- a/src/INTERP_KERNEL/CurveIntersectorP1P0.hxx +++ b/src/INTERP_KERNEL/CurveIntersectorP1P0.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CURVEINTERSECTORP1P0_HXX__ #define __CURVEINTERSECTORP1P0_HXX__ diff --git a/src/INTERP_KERNEL/CurveIntersectorP1P0.txx b/src/INTERP_KERNEL/CurveIntersectorP1P0.txx index 2a41ee145..45c1eeb87 100644 --- a/src/INTERP_KERNEL/CurveIntersectorP1P0.txx +++ b/src/INTERP_KERNEL/CurveIntersectorP1P0.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CurveIntersectorP1P0_TXX__ #define __CurveIntersectorP1P0_TXX__ diff --git a/src/INTERP_KERNEL/CurveIntersectorP1P1.hxx b/src/INTERP_KERNEL/CurveIntersectorP1P1.hxx index f09e5143f..537fe9714 100644 --- a/src/INTERP_KERNEL/CurveIntersectorP1P1.hxx +++ b/src/INTERP_KERNEL/CurveIntersectorP1P1.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CURVEINTERSECTORP1P1_HXX__ #define __CURVEINTERSECTORP1P1_HXX__ diff --git a/src/INTERP_KERNEL/CurveIntersectorP1P1.txx b/src/INTERP_KERNEL/CurveIntersectorP1P1.txx index efd1f855a..1d3b93d73 100644 --- a/src/INTERP_KERNEL/CurveIntersectorP1P1.txx +++ b/src/INTERP_KERNEL/CurveIntersectorP1P1.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __CurveIntersectorP1P1_TXX__ #define __CurveIntersectorP1P1_TXX__ diff --git a/src/INTERP_KERNEL/ExprEval/InterpKernelAsmX86.cxx b/src/INTERP_KERNEL/ExprEval/InterpKernelAsmX86.cxx index db4496f72..695bbc160 100644 --- a/src/INTERP_KERNEL/ExprEval/InterpKernelAsmX86.cxx +++ b/src/INTERP_KERNEL/ExprEval/InterpKernelAsmX86.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelAsmX86.hxx" @@ -26,7 +27,7 @@ #ifdef _POSIX_MAPPED_FILES #include #else -#ifdef WNT +#ifdef WIN32 #include #endif #endif @@ -48,7 +49,7 @@ char *INTERP_KERNEL::AsmX86::copyToExecMemZone(const std::vector& ml, unsi #ifdef _POSIX_MAPPED_FILES ret=(char *)mmap(0,lgth,PROT_EXEC | PROT_WRITE,MAP_ANONYMOUS | MAP_PRIVATE,-1,0); #else -#ifdef WNT +#ifdef WIN32 HANDLE h=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_EXECUTE_READWRITE,0,lgth,NULL); ret=(char *)MapViewOfFile(h,FILE_MAP_EXECUTE | FILE_MAP_READ | FILE_MAP_WRITE,0,0,lgth); #endif diff --git a/src/INTERP_KERNEL/ExprEval/InterpKernelAsmX86.hxx b/src/INTERP_KERNEL/ExprEval/InterpKernelAsmX86.hxx index d305da4b8..3fa6f73e7 100644 --- a/src/INTERP_KERNEL/ExprEval/InterpKernelAsmX86.hxx +++ b/src/INTERP_KERNEL/ExprEval/InterpKernelAsmX86.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELASMX86_HXX__ #define __INTERPKERNELASMX86_HXX__ diff --git a/src/INTERP_KERNEL/ExprEval/InterpKernelExprParser.cxx b/src/INTERP_KERNEL/ExprEval/InterpKernelExprParser.cxx index 69dabca7a..e75a2e5f4 100644 --- a/src/INTERP_KERNEL/ExprEval/InterpKernelExprParser.cxx +++ b/src/INTERP_KERNEL/ExprEval/InterpKernelExprParser.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelExprParser.hxx" #include "InterpKernelValue.hxx" diff --git a/src/INTERP_KERNEL/ExprEval/InterpKernelExprParser.hxx b/src/INTERP_KERNEL/ExprEval/InterpKernelExprParser.hxx index a87f335a7..29c8c0d9c 100644 --- a/src/INTERP_KERNEL/ExprEval/InterpKernelExprParser.hxx +++ b/src/INTERP_KERNEL/ExprEval/InterpKernelExprParser.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELEXPRPARSER_HXX__ #define __INTERPKERNELEXPRPARSER_HXX__ diff --git a/src/INTERP_KERNEL/ExprEval/InterpKernelFunction.cxx b/src/INTERP_KERNEL/ExprEval/InterpKernelFunction.cxx index 4979adc05..c8e4d5b8d 100644 --- a/src/INTERP_KERNEL/ExprEval/InterpKernelFunction.cxx +++ b/src/INTERP_KERNEL/ExprEval/InterpKernelFunction.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelFunction.hxx" #include "InterpKernelValue.hxx" diff --git a/src/INTERP_KERNEL/ExprEval/InterpKernelFunction.hxx b/src/INTERP_KERNEL/ExprEval/InterpKernelFunction.hxx index cfd4bf692..f49c75943 100644 --- a/src/INTERP_KERNEL/ExprEval/InterpKernelFunction.hxx +++ b/src/INTERP_KERNEL/ExprEval/InterpKernelFunction.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELFUNCTION_HXX__ #define __INTERPKERNELFUNCTION_HXX__ diff --git a/src/INTERP_KERNEL/ExprEval/InterpKernelUnit.cxx b/src/INTERP_KERNEL/ExprEval/InterpKernelUnit.cxx index c719b5e73..e7e737cf4 100644 --- a/src/INTERP_KERNEL/ExprEval/InterpKernelUnit.cxx +++ b/src/INTERP_KERNEL/ExprEval/InterpKernelUnit.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelUnit.hxx" #include "InterpKernelExprParser.hxx" diff --git a/src/INTERP_KERNEL/ExprEval/InterpKernelUnit.hxx b/src/INTERP_KERNEL/ExprEval/InterpKernelUnit.hxx index a3f33b76a..688917adf 100644 --- a/src/INTERP_KERNEL/ExprEval/InterpKernelUnit.hxx +++ b/src/INTERP_KERNEL/ExprEval/InterpKernelUnit.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELUNIT_HXX__ #define __INTERPKERNELUNIT_HXX__ diff --git a/src/INTERP_KERNEL/ExprEval/InterpKernelValue.cxx b/src/INTERP_KERNEL/ExprEval/InterpKernelValue.cxx index 5a97db3dd..6564cfd25 100644 --- a/src/INTERP_KERNEL/ExprEval/InterpKernelValue.cxx +++ b/src/INTERP_KERNEL/ExprEval/InterpKernelValue.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelValue.hxx" #include "InterpKernelFunction.hxx" diff --git a/src/INTERP_KERNEL/ExprEval/InterpKernelValue.hxx b/src/INTERP_KERNEL/ExprEval/InterpKernelValue.hxx index 01581024d..71d5bf0f0 100644 --- a/src/INTERP_KERNEL/ExprEval/InterpKernelValue.hxx +++ b/src/INTERP_KERNEL/ExprEval/InterpKernelValue.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELVALUE_HXX__ #define __INTERPKERNELVALUE_HXX__ diff --git a/src/INTERP_KERNEL/GenMathFormulae.hxx b/src/INTERP_KERNEL/GenMathFormulae.hxx index 95c78f3d5..9b003ce1d 100644 --- a/src/INTERP_KERNEL/GenMathFormulae.hxx +++ b/src/INTERP_KERNEL/GenMathFormulae.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __GENMATHFORMULAE_HXX__ #define __GENMATHFORMULAE_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DAbstractEdge.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DAbstractEdge.cxx index 694ebd113..c30b1f698 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DAbstractEdge.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DAbstractEdge.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelGeo2DAbstractEdge.hxx" #include "InterpKernelGeo2DComposedEdge.hxx" diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DAbstractEdge.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DAbstractEdge.hxx index 37a3fb51d..b0c5b4e2b 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DAbstractEdge.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DAbstractEdge.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELGEO2DABSTRACTEDGE_HXX__ #define __INTERPKERNELGEO2DABSTRACTEDGE_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DBounds.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DBounds.cxx index e4c5f9187..8a9902f08 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DBounds.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DBounds.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelGeo2DBounds.hxx" #include "InterpKernelException.hxx" diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DBounds.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DBounds.hxx index 77e009543..8780aae35 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DBounds.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DBounds.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELGEO2DBOUNDS_HXX__ #define __INTERPKERNELGEO2DBOUNDS_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.cxx index c57210de9..ed800c1b8 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelGeo2DComposedEdge.hxx" #include "InterpKernelGeo2DElementaryEdge.hxx" diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx index 62b56d7fb..8fbf7bd2e 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELGEO2DCOMPOSEDNODE_HXX__ #define __INTERPKERNELGEO2DCOMPOSEDNODE_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.cxx index 257667df8..182fb2580 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelGeo2DEdge.hxx" #include "InterpKernelGeo2DEdgeLin.hxx" diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.hxx index bc8a1dcb7..36526ab17 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELGEO2DEDGE_HXX__ #define __INTERPKERNELGEO2DEDGE_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.txx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.txx index ed9dc5298..18502eb6a 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.txx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELGEO2DEDGE_TXX__ #define __INTERPKERNELGEO2DEDGE_TXX__ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.cxx index 551056cec..5c079b185 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelGeo2DEdgeArcCircle.hxx" #include "InterpKernelGeo2DEdgeLin.hxx" diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.hxx index 921723688..4faf2d5e4 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELGEO2DEDGEARCCIRCLE_HXX__ #define __INTERPKERNELGEO2DEDGEARCCIRCLE_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeInfLin.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeInfLin.cxx index dceb2addc..a1150cb96 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeInfLin.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeInfLin.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelGeo2DEdgeInfLin.hxx" diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeInfLin.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeInfLin.hxx index dffd43d4c..915914097 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeInfLin.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeInfLin.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELGEO2DEDGEINFLIN_HXX__ #define __INTERPKERNELGEO2DEDGEINFLIN_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeLin.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeLin.cxx index 1a7b3cc3b..dfe1f81d5 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeLin.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeLin.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelGeo2DEdgeLin.hxx" #include "InterpKernelGeo2DNode.hxx" diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeLin.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeLin.hxx index d5b212bcf..d8332e7d0 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeLin.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeLin.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELGEO2DEDGELIN_HXX__ #define __INTERPKERNELGEO2DEDGELIN_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DElementaryEdge.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DElementaryEdge.cxx index a2a222f70..dd1e0ab02 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DElementaryEdge.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DElementaryEdge.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelGeo2DElementaryEdge.hxx" #include "InterpKernelException.hxx" diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DElementaryEdge.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DElementaryEdge.hxx index 8611fe173..17b2459e9 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DElementaryEdge.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DElementaryEdge.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELGEO2DELEMENTARYEDGE_HXX__ #define __INTERPKERNELGEO2DELEMENTARYEDGE_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.cxx index 03c3445f9..e345cccf7 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelGeo2DNode.hxx" #include "InterpKernelGeo2DEdgeArcCircle.hxx" diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.hxx index 2d1a9d5e3..48ebe58e1 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DNode.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELGEO2DNODE_HXX__ #define __INTERPKERNELGEO2DNODE_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DPrecision.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DPrecision.cxx index e5e453f7f..c3edf2dc4 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DPrecision.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DPrecision.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelGeo2DPrecision.hxx" diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DPrecision.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DPrecision.hxx index 83504ea8b..a8313481f 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DPrecision.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DPrecision.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELGEO2DPRECISION_HXX__ #define __INTERPKERNELGEO2DPRECISION_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.cxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.cxx index c85d413c5..66e3a9b50 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.cxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelGeo2DQuadraticPolygon.hxx" #include "InterpKernelGeo2DElementaryEdge.hxx" diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.hxx index a7beda997..d98b20dcd 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELGEO2DQUADRATICPOLYGON_HXX__ #define __INTERPKERNELGEO2DQUADRATICPOLYGON_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2DIntersector.hxx b/src/INTERP_KERNEL/Geometric2DIntersector.hxx index 69879f51b..4f408f705 100644 --- a/src/INTERP_KERNEL/Geometric2DIntersector.hxx +++ b/src/INTERP_KERNEL/Geometric2DIntersector.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __GEOMETRIC2DINTERSECTOR_HXX__ #define __GEOMETRIC2DINTERSECTOR_HXX__ diff --git a/src/INTERP_KERNEL/Geometric2DIntersector.txx b/src/INTERP_KERNEL/Geometric2DIntersector.txx index a78d233dd..689501161 100644 --- a/src/INTERP_KERNEL/Geometric2DIntersector.txx +++ b/src/INTERP_KERNEL/Geometric2DIntersector.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __GEOMETRIC2DINTERSECTOR_TXX__ #define __GEOMETRIC2DINTERSECTOR_TXX__ diff --git a/src/INTERP_KERNEL/IntegralUniformIntersector.hxx b/src/INTERP_KERNEL/IntegralUniformIntersector.hxx index 71cfebb7d..c6701a78b 100644 --- a/src/INTERP_KERNEL/IntegralUniformIntersector.hxx +++ b/src/INTERP_KERNEL/IntegralUniformIntersector.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTEGRALUNIFORMINTERSECTOR_HXX__ #define __INTEGRALUNIFORMINTERSECTOR_HXX__ diff --git a/src/INTERP_KERNEL/IntegralUniformIntersector.txx b/src/INTERP_KERNEL/IntegralUniformIntersector.txx index 0d46d983e..efd74e62c 100644 --- a/src/INTERP_KERNEL/IntegralUniformIntersector.txx +++ b/src/INTERP_KERNEL/IntegralUniformIntersector.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTEGRALUNIFORMINTERSECTOR_TXX__ #define __INTEGRALUNIFORMINTERSECTOR_TXX__ diff --git a/src/INTERP_KERNEL/InterpKernelCellSimplify.cxx b/src/INTERP_KERNEL/InterpKernelCellSimplify.cxx index 1200fcf85..5ed816146 100644 --- a/src/INTERP_KERNEL/InterpKernelCellSimplify.cxx +++ b/src/INTERP_KERNEL/InterpKernelCellSimplify.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelCellSimplify.hxx" #include "CellModel.hxx" diff --git a/src/INTERP_KERNEL/InterpKernelCellSimplify.hxx b/src/INTERP_KERNEL/InterpKernelCellSimplify.hxx index 34585260e..0b8b2afa7 100644 --- a/src/INTERP_KERNEL/InterpKernelCellSimplify.hxx +++ b/src/INTERP_KERNEL/InterpKernelCellSimplify.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELCELLSIMPLIFY_HXX__ #define __INTERPKERNELCELLSIMPLIFY_HXX__ diff --git a/src/INTERP_KERNEL/InterpKernelMatrixTools.cxx b/src/INTERP_KERNEL/InterpKernelMatrixTools.cxx index 97ba6bff8..988f343ce 100644 --- a/src/INTERP_KERNEL/InterpKernelMatrixTools.cxx +++ b/src/INTERP_KERNEL/InterpKernelMatrixTools.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelMatrixTools.hxx" #include "InterpKernelAutoPtr.hxx" diff --git a/src/INTERP_KERNEL/InterpKernelMatrixTools.hxx b/src/INTERP_KERNEL/InterpKernelMatrixTools.hxx index 7f59ee993..68863a224 100644 --- a/src/INTERP_KERNEL/InterpKernelMatrixTools.hxx +++ b/src/INTERP_KERNEL/InterpKernelMatrixTools.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELMATRIXTOOLS_HXX__ #define __INTERPKERNELMATRIXTOOLS_HXX__ diff --git a/src/INTERP_KERNEL/InterpKernelMeshQuality.cxx b/src/INTERP_KERNEL/InterpKernelMeshQuality.cxx index c3f27f1ab..06f6d325d 100644 --- a/src/INTERP_KERNEL/InterpKernelMeshQuality.cxx +++ b/src/INTERP_KERNEL/InterpKernelMeshQuality.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpKernelMeshQuality.hxx" diff --git a/src/INTERP_KERNEL/InterpKernelMeshQuality.hxx b/src/INTERP_KERNEL/InterpKernelMeshQuality.hxx index 95e30f5c2..158d85193 100644 --- a/src/INTERP_KERNEL/InterpKernelMeshQuality.hxx +++ b/src/INTERP_KERNEL/InterpKernelMeshQuality.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPKERNELMESHQUALITY_HXX_ #define __INTERPKERNELMESHQUALITY_HXX__ diff --git a/src/INTERP_KERNEL/Interpolation.hxx b/src/INTERP_KERNEL/Interpolation.hxx index 38951463c..3c5eab131 100644 --- a/src/INTERP_KERNEL/Interpolation.hxx +++ b/src/INTERP_KERNEL/Interpolation.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATION_HXX__ #define __INTERPOLATION_HXX__ diff --git a/src/INTERP_KERNEL/Interpolation.txx b/src/INTERP_KERNEL/Interpolation.txx index 3ac70163f..201b44671 100644 --- a/src/INTERP_KERNEL/Interpolation.txx +++ b/src/INTERP_KERNEL/Interpolation.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATION_TXX__ #define __INTERPOLATION_TXX__ diff --git a/src/INTERP_KERNEL/Interpolation1D.hxx b/src/INTERP_KERNEL/Interpolation1D.hxx index 37e36de45..cbb72ba25 100755 --- a/src/INTERP_KERNEL/Interpolation1D.hxx +++ b/src/INTERP_KERNEL/Interpolation1D.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATION1D_HXX__ #define __INTERPOLATION1D_HXX__ diff --git a/src/INTERP_KERNEL/Interpolation1D.txx b/src/INTERP_KERNEL/Interpolation1D.txx index 174c18291..b7e40eff0 100644 --- a/src/INTERP_KERNEL/Interpolation1D.txx +++ b/src/INTERP_KERNEL/Interpolation1D.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATION1D_TXX__ #define __INTERPOLATION1D_TXX__ diff --git a/src/INTERP_KERNEL/Interpolation2D.hxx b/src/INTERP_KERNEL/Interpolation2D.hxx index 6551ebda4..849f3af9e 100755 --- a/src/INTERP_KERNEL/Interpolation2D.hxx +++ b/src/INTERP_KERNEL/Interpolation2D.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATION2D_HXX__ #define __INTERPOLATION2D_HXX__ diff --git a/src/INTERP_KERNEL/Interpolation2D.txx b/src/INTERP_KERNEL/Interpolation2D.txx index aa4410096..2555f4ada 100644 --- a/src/INTERP_KERNEL/Interpolation2D.txx +++ b/src/INTERP_KERNEL/Interpolation2D.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATION2D_TXX__ #define __INTERPOLATION2D_TXX__ diff --git a/src/INTERP_KERNEL/Interpolation2D1D.hxx b/src/INTERP_KERNEL/Interpolation2D1D.hxx index f1a0b76f4..64f0db9ed 100644 --- a/src/INTERP_KERNEL/Interpolation2D1D.hxx +++ b/src/INTERP_KERNEL/Interpolation2D1D.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATION2D1D_HXX__ #define __INTERPOLATION2D1D_HXX__ diff --git a/src/INTERP_KERNEL/Interpolation2D1D.txx b/src/INTERP_KERNEL/Interpolation2D1D.txx index e84d07dec..862c12077 100644 --- a/src/INTERP_KERNEL/Interpolation2D1D.txx +++ b/src/INTERP_KERNEL/Interpolation2D1D.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATION2D1D_TXX__ #define __INTERPOLATION2D1D_TXX__ diff --git a/src/INTERP_KERNEL/Interpolation2DCurve.cxx b/src/INTERP_KERNEL/Interpolation2DCurve.cxx index c1cfa381c..779b9bafe 100644 --- a/src/INTERP_KERNEL/Interpolation2DCurve.cxx +++ b/src/INTERP_KERNEL/Interpolation2DCurve.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "Interpolation2DCurve.hxx" #include "InterpolationCurve.txx" diff --git a/src/INTERP_KERNEL/Interpolation2DCurve.hxx b/src/INTERP_KERNEL/Interpolation2DCurve.hxx index d1c2f7653..1ddf9ed7c 100644 --- a/src/INTERP_KERNEL/Interpolation2DCurve.hxx +++ b/src/INTERP_KERNEL/Interpolation2DCurve.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATION2DCURVE_HXX__ #define __INTERPOLATION2DCURVE_HXX__ diff --git a/src/INTERP_KERNEL/Interpolation3D.cxx b/src/INTERP_KERNEL/Interpolation3D.cxx index d2401e3d1..edaad1408 100644 --- a/src/INTERP_KERNEL/Interpolation3D.cxx +++ b/src/INTERP_KERNEL/Interpolation3D.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "Interpolation3D.hxx" #include "Interpolation3D.txx" diff --git a/src/INTERP_KERNEL/Interpolation3D.hxx b/src/INTERP_KERNEL/Interpolation3D.hxx index 247ca14a2..128eedcfb 100644 --- a/src/INTERP_KERNEL/Interpolation3D.hxx +++ b/src/INTERP_KERNEL/Interpolation3D.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATION3D_HXX__ #define __INTERPOLATION3D_HXX__ diff --git a/src/INTERP_KERNEL/Interpolation3D.txx b/src/INTERP_KERNEL/Interpolation3D.txx index 248207e02..c293c745f 100644 --- a/src/INTERP_KERNEL/Interpolation3D.txx +++ b/src/INTERP_KERNEL/Interpolation3D.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATION3D_TXX__ #define __INTERPOLATION3D_TXX__ diff --git a/src/INTERP_KERNEL/Interpolation3DSurf.cxx b/src/INTERP_KERNEL/Interpolation3DSurf.cxx index 488ca2b85..8126ae823 100644 --- a/src/INTERP_KERNEL/Interpolation3DSurf.cxx +++ b/src/INTERP_KERNEL/Interpolation3DSurf.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "Interpolation3DSurf.hxx" #include "InterpolationPlanar.txx" diff --git a/src/INTERP_KERNEL/Interpolation3DSurf.hxx b/src/INTERP_KERNEL/Interpolation3DSurf.hxx index ede723162..68a05d12d 100644 --- a/src/INTERP_KERNEL/Interpolation3DSurf.hxx +++ b/src/INTERP_KERNEL/Interpolation3DSurf.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATION3DSURF_HXX__ #define __INTERPOLATION3DSURF_HXX__ diff --git a/src/INTERP_KERNEL/InterpolationCurve.hxx b/src/INTERP_KERNEL/InterpolationCurve.hxx index 35dbd6799..a88801482 100644 --- a/src/INTERP_KERNEL/InterpolationCurve.hxx +++ b/src/INTERP_KERNEL/InterpolationCurve.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATIONCURVE_HXX__ #define __INTERPOLATIONCURVE_HXX__ diff --git a/src/INTERP_KERNEL/InterpolationCurve.txx b/src/INTERP_KERNEL/InterpolationCurve.txx index 86ec61744..dc45b61ae 100644 --- a/src/INTERP_KERNEL/InterpolationCurve.txx +++ b/src/INTERP_KERNEL/InterpolationCurve.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATIONCURVE_TXX__ #define __INTERPOLATIONCURVE_TXX__ diff --git a/src/INTERP_KERNEL/InterpolationOptions.cxx b/src/INTERP_KERNEL/InterpolationOptions.cxx index 2e2e7def7..94ab498ff 100644 --- a/src/INTERP_KERNEL/InterpolationOptions.cxx +++ b/src/INTERP_KERNEL/InterpolationOptions.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "InterpolationOptions.hxx" diff --git a/src/INTERP_KERNEL/InterpolationOptions.hxx b/src/INTERP_KERNEL/InterpolationOptions.hxx index d9c51d70a..6ba269bb7 100644 --- a/src/INTERP_KERNEL/InterpolationOptions.hxx +++ b/src/INTERP_KERNEL/InterpolationOptions.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATIONOPTIONS_HXX__ #define __INTERPOLATIONOPTIONS_HXX__ diff --git a/src/INTERP_KERNEL/InterpolationPlanar.hxx b/src/INTERP_KERNEL/InterpolationPlanar.hxx index c30cd81f4..6d9cdd171 100755 --- a/src/INTERP_KERNEL/InterpolationPlanar.hxx +++ b/src/INTERP_KERNEL/InterpolationPlanar.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATIONPLANAR_HXX__ #define __INTERPOLATIONPLANAR_HXX__ diff --git a/src/INTERP_KERNEL/InterpolationPlanar.txx b/src/INTERP_KERNEL/InterpolationPlanar.txx index 2ba5aafe8..07fd4d5e9 100644 --- a/src/INTERP_KERNEL/InterpolationPlanar.txx +++ b/src/INTERP_KERNEL/InterpolationPlanar.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATIONPLANAR_TXX__ #define __INTERPOLATIONPLANAR_TXX__ diff --git a/src/INTERP_KERNEL/InterpolationUtils.hxx b/src/INTERP_KERNEL/InterpolationUtils.hxx index af7fdfcc9..80cdb8d72 100644 --- a/src/INTERP_KERNEL/InterpolationUtils.hxx +++ b/src/INTERP_KERNEL/InterpolationUtils.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERPOLATIONUTILS_HXX__ #define __INTERPOLATIONUTILS_HXX__ @@ -437,7 +438,7 @@ namespace INTERP_KERNEL T21 = n[0][_Y]-n[2][_Y], T22 = n[1][_Y]-n[2][_Y]; // matrix determinant double Tdet = T11*T22 - T12*T21; - if ( std::fabs( Tdet ) < std::numeric_limits::min() ) + if ( (std::fabs( Tdet) ) < (std::numeric_limits::min()) ) { bc[0]=1; bc[1]=bc[2]=0; // no solution return; diff --git a/src/INTERP_KERNEL/Intersector3D.hxx b/src/INTERP_KERNEL/Intersector3D.hxx index 9ab3f7b78..47e39122e 100644 --- a/src/INTERP_KERNEL/Intersector3D.hxx +++ b/src/INTERP_KERNEL/Intersector3D.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERSECTOR3D_HXX__ #define __INTERSECTOR3D_HXX__ diff --git a/src/INTERP_KERNEL/Intersector3D.txx b/src/INTERP_KERNEL/Intersector3D.txx index 05b5c9409..67ce5941b 100644 --- a/src/INTERP_KERNEL/Intersector3D.txx +++ b/src/INTERP_KERNEL/Intersector3D.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERSECTOR3D_TXX__ #define __INTERSECTOR3D_TXX__ diff --git a/src/INTERP_KERNEL/Intersector3DP0P0.hxx b/src/INTERP_KERNEL/Intersector3DP0P0.hxx index 243ce6ff4..7355f6eb1 100644 --- a/src/INTERP_KERNEL/Intersector3DP0P0.hxx +++ b/src/INTERP_KERNEL/Intersector3DP0P0.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERSECTOR3DP0P0_HXX__ #define __INTERSECTOR3DP0P0_HXX__ diff --git a/src/INTERP_KERNEL/Intersector3DP0P0.txx b/src/INTERP_KERNEL/Intersector3DP0P0.txx index 1ab4b5a44..5ad2fee71 100644 --- a/src/INTERP_KERNEL/Intersector3DP0P0.txx +++ b/src/INTERP_KERNEL/Intersector3DP0P0.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERSECTOR3DP0P0_TXX__ #define __INTERSECTOR3DP0P0_TXX__ diff --git a/src/INTERP_KERNEL/Intersector3DP0P1.hxx b/src/INTERP_KERNEL/Intersector3DP0P1.hxx index 98a247614..4b1dafab0 100644 --- a/src/INTERP_KERNEL/Intersector3DP0P1.hxx +++ b/src/INTERP_KERNEL/Intersector3DP0P1.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERSECTOR3DP0P1_HXX__ #define __INTERSECTOR3DP0P1_HXX__ diff --git a/src/INTERP_KERNEL/Intersector3DP0P1.txx b/src/INTERP_KERNEL/Intersector3DP0P1.txx index 50dc45eac..6abdb8828 100644 --- a/src/INTERP_KERNEL/Intersector3DP0P1.txx +++ b/src/INTERP_KERNEL/Intersector3DP0P1.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERSECTOR3DP0P1_TXX__ #define __INTERSECTOR3DP0P1_TXX__ diff --git a/src/INTERP_KERNEL/Intersector3DP1P0.hxx b/src/INTERP_KERNEL/Intersector3DP1P0.hxx index cc7f494c8..923b0145d 100644 --- a/src/INTERP_KERNEL/Intersector3DP1P0.hxx +++ b/src/INTERP_KERNEL/Intersector3DP1P0.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERSECTOR3DP1P0_HXX__ #define __INTERSECTOR3DP1P0_HXX__ diff --git a/src/INTERP_KERNEL/Intersector3DP1P0.txx b/src/INTERP_KERNEL/Intersector3DP1P0.txx index e302323f5..bda1c1931 100644 --- a/src/INTERP_KERNEL/Intersector3DP1P0.txx +++ b/src/INTERP_KERNEL/Intersector3DP1P0.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __INTERSECTOR3DP1P0_TXX__ #define __INTERSECTOR3DP1P0_TXX__ diff --git a/src/INTERP_KERNEL/Intersector3DP1P0Bary.hxx b/src/INTERP_KERNEL/Intersector3DP1P0Bary.hxx index a08948afe..5adbc1fe0 100644 --- a/src/INTERP_KERNEL/Intersector3DP1P0Bary.hxx +++ b/src/INTERP_KERNEL/Intersector3DP1P0Bary.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __Intersector3DP1P0Bary_HXX__ #define __Intersector3DP1P0Bary_HXX__ diff --git a/src/INTERP_KERNEL/Intersector3DP1P0Bary.txx b/src/INTERP_KERNEL/Intersector3DP1P0Bary.txx index de36ddd78..0328a0927 100644 --- a/src/INTERP_KERNEL/Intersector3DP1P0Bary.txx +++ b/src/INTERP_KERNEL/Intersector3DP1P0Bary.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __Intersector3DP1P0Bary_TXX__ #define __Intersector3DP1P0Bary_TXX__ diff --git a/src/INTERP_KERNEL/Intersector3DP1P1.hxx b/src/INTERP_KERNEL/Intersector3DP1P1.hxx index 13c495aef..a636a6392 100644 --- a/src/INTERP_KERNEL/Intersector3DP1P1.hxx +++ b/src/INTERP_KERNEL/Intersector3DP1P1.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __Intersector3DP1P1_HXX__ #define __Intersector3DP1P1_HXX__ diff --git a/src/INTERP_KERNEL/Intersector3DP1P1.txx b/src/INTERP_KERNEL/Intersector3DP1P1.txx index 03698f4d6..f62032267 100644 --- a/src/INTERP_KERNEL/Intersector3DP1P1.txx +++ b/src/INTERP_KERNEL/Intersector3DP1P1.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __Intersector3DP1P1_TXX__ #define __Intersector3DP1P1_TXX__ diff --git a/src/INTERP_KERNEL/Planar2D1DIntersectorP0P0.hxx b/src/INTERP_KERNEL/Planar2D1DIntersectorP0P0.hxx index b159689f2..9b89117b2 100644 --- a/src/INTERP_KERNEL/Planar2D1DIntersectorP0P0.hxx +++ b/src/INTERP_KERNEL/Planar2D1DIntersectorP0P0.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANAR2D1DINTERSECTORP0P0_HXX__ #define __PLANAR2D1DINTERSECTORP0P0_HXX__ diff --git a/src/INTERP_KERNEL/Planar2D1DIntersectorP0P0.txx b/src/INTERP_KERNEL/Planar2D1DIntersectorP0P0.txx index 758df4d55..0d4a9eb85 100644 --- a/src/INTERP_KERNEL/Planar2D1DIntersectorP0P0.txx +++ b/src/INTERP_KERNEL/Planar2D1DIntersectorP0P0.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANAR2D1DINTERSECTORP0P0_TXX__ #define __PLANAR2D1DINTERSECTORP0P0_TXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersector.hxx b/src/INTERP_KERNEL/PlanarIntersector.hxx index d25b81d4f..e1552c5cf 100644 --- a/src/INTERP_KERNEL/PlanarIntersector.hxx +++ b/src/INTERP_KERNEL/PlanarIntersector.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTOR_HXX__ #define __PLANARINTERSECTOR_HXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersector.txx b/src/INTERP_KERNEL/PlanarIntersector.txx index 5323eda43..ff351fb89 100644 --- a/src/INTERP_KERNEL/PlanarIntersector.txx +++ b/src/INTERP_KERNEL/PlanarIntersector.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTOR_TXX__ #define __PLANARINTERSECTOR_TXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP0P0.hxx b/src/INTERP_KERNEL/PlanarIntersectorP0P0.hxx index 9e5249d62..f0e96825c 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP0P0.hxx +++ b/src/INTERP_KERNEL/PlanarIntersectorP0P0.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP0P0_HXX__ #define __PLANARINTERSECTORP0P0_HXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP0P0.txx b/src/INTERP_KERNEL/PlanarIntersectorP0P0.txx index f698b984d..c62357b1a 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP0P0.txx +++ b/src/INTERP_KERNEL/PlanarIntersectorP0P0.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP0P0_TXX__ #define __PLANARINTERSECTORP0P0_TXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP0P1.hxx b/src/INTERP_KERNEL/PlanarIntersectorP0P1.hxx index c6083a228..5f1107b11 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP0P1.hxx +++ b/src/INTERP_KERNEL/PlanarIntersectorP0P1.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP0P1_HXX__ #define __PLANARINTERSECTORP0P1_HXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP0P1.txx b/src/INTERP_KERNEL/PlanarIntersectorP0P1.txx index 48343d92a..090929db6 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP0P1.txx +++ b/src/INTERP_KERNEL/PlanarIntersectorP0P1.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP0P1_TXX__ #define __PLANARINTERSECTORP0P1_TXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP0P1PL.hxx b/src/INTERP_KERNEL/PlanarIntersectorP0P1PL.hxx index 10b47cfc8..c5f22d409 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP0P1PL.hxx +++ b/src/INTERP_KERNEL/PlanarIntersectorP0P1PL.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP0P1PL_HXX__ #define __PLANARINTERSECTORP0P1PL_HXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP0P1PL.txx b/src/INTERP_KERNEL/PlanarIntersectorP0P1PL.txx index 6537c7bf4..902c86a22 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP0P1PL.txx +++ b/src/INTERP_KERNEL/PlanarIntersectorP0P1PL.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP0P1PL_TXX__ #define __PLANARINTERSECTORP0P1PL_TXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP1P0.hxx b/src/INTERP_KERNEL/PlanarIntersectorP1P0.hxx index 29459a510..50dc04987 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP1P0.hxx +++ b/src/INTERP_KERNEL/PlanarIntersectorP1P0.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP1P0_HXX__ #define __PLANARINTERSECTORP1P0_HXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP1P0.txx b/src/INTERP_KERNEL/PlanarIntersectorP1P0.txx index 27f598702..22ebb93a9 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP1P0.txx +++ b/src/INTERP_KERNEL/PlanarIntersectorP1P0.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP1P0_TXX__ #define __PLANARINTERSECTORP1P0_TXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP1P0Bary.hxx b/src/INTERP_KERNEL/PlanarIntersectorP1P0Bary.hxx index 1ea4f480f..2d3260316 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP1P0Bary.hxx +++ b/src/INTERP_KERNEL/PlanarIntersectorP1P0Bary.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PlanarIntersectorP1P0Bary_HXX__ #define __PlanarIntersectorP1P0Bary_HXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP1P0Bary.txx b/src/INTERP_KERNEL/PlanarIntersectorP1P0Bary.txx index a9079580b..a8bd8bc8e 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP1P0Bary.txx +++ b/src/INTERP_KERNEL/PlanarIntersectorP1P0Bary.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PlanarIntersectorP1P0Bary_TXX__ #define __PlanarIntersectorP1P0Bary_TXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP1P0PL.hxx b/src/INTERP_KERNEL/PlanarIntersectorP1P0PL.hxx index fe82a84e7..47def33d0 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP1P0PL.hxx +++ b/src/INTERP_KERNEL/PlanarIntersectorP1P0PL.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP1P0PL_HXX__ #define __PLANARINTERSECTORP1P0PL_HXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP1P0PL.txx b/src/INTERP_KERNEL/PlanarIntersectorP1P0PL.txx index 311c724de..0f0ab9582 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP1P0PL.txx +++ b/src/INTERP_KERNEL/PlanarIntersectorP1P0PL.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP1P0PL_TXX__ #define __PLANARINTERSECTORP1P0PL_TXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP1P1.hxx b/src/INTERP_KERNEL/PlanarIntersectorP1P1.hxx index 1168345d8..26f77918a 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP1P1.hxx +++ b/src/INTERP_KERNEL/PlanarIntersectorP1P1.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP1P1_HXX__ #define __PLANARINTERSECTORP1P1_HXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP1P1.txx b/src/INTERP_KERNEL/PlanarIntersectorP1P1.txx index 707cafeb2..9507a63b4 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP1P1.txx +++ b/src/INTERP_KERNEL/PlanarIntersectorP1P1.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP1P1_TXX__ #define __PLANARINTERSECTORP1P1_TXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP1P1PL.hxx b/src/INTERP_KERNEL/PlanarIntersectorP1P1PL.hxx index f2e9c6190..d43edaa58 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP1P1PL.hxx +++ b/src/INTERP_KERNEL/PlanarIntersectorP1P1PL.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP1P1PL_HXX__ #define __PLANARINTERSECTORP1P1PL_HXX__ diff --git a/src/INTERP_KERNEL/PlanarIntersectorP1P1PL.txx b/src/INTERP_KERNEL/PlanarIntersectorP1P1PL.txx index 353240def..61bdd13f1 100644 --- a/src/INTERP_KERNEL/PlanarIntersectorP1P1PL.txx +++ b/src/INTERP_KERNEL/PlanarIntersectorP1P1PL.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PLANARINTERSECTORP1P1PL_TXX__ #define __PLANARINTERSECTORP1P1PL_TXX__ diff --git a/src/INTERP_KERNEL/PointLocator2DIntersector.hxx b/src/INTERP_KERNEL/PointLocator2DIntersector.hxx index a45ee3685..8971dc9e7 100644 --- a/src/INTERP_KERNEL/PointLocator2DIntersector.hxx +++ b/src/INTERP_KERNEL/PointLocator2DIntersector.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POINTLOCATORINTERSECTOR_HXX__ #define __POINTLOCATORINTERSECTOR_HXX__ diff --git a/src/INTERP_KERNEL/PointLocator2DIntersector.txx b/src/INTERP_KERNEL/PointLocator2DIntersector.txx index 080dc9c4e..14429bb5e 100644 --- a/src/INTERP_KERNEL/PointLocator2DIntersector.txx +++ b/src/INTERP_KERNEL/PointLocator2DIntersector.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POINTLOCATORINTERSECTOR_TXX__ #define __POINTLOCATORINTERSECTOR_TXX__ diff --git a/src/INTERP_KERNEL/PointLocator3DIntersectorP0P0.hxx b/src/INTERP_KERNEL/PointLocator3DIntersectorP0P0.hxx index 1831ff908..3b4081ec2 100644 --- a/src/INTERP_KERNEL/PointLocator3DIntersectorP0P0.hxx +++ b/src/INTERP_KERNEL/PointLocator3DIntersectorP0P0.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POINTLOCATOR3DINTERSECTORP0P0_HXX__ #define __POINTLOCATOR3DINTERSECTORP0P0_HXX__ diff --git a/src/INTERP_KERNEL/PointLocator3DIntersectorP0P0.txx b/src/INTERP_KERNEL/PointLocator3DIntersectorP0P0.txx index 043df337e..5cfa1321c 100644 --- a/src/INTERP_KERNEL/PointLocator3DIntersectorP0P0.txx +++ b/src/INTERP_KERNEL/PointLocator3DIntersectorP0P0.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POINTLOCATOR3DINTERSECTORP0P0_TXX__ #define __POINTLOCATOR3DINTERSECTORP0P0_TXX__ diff --git a/src/INTERP_KERNEL/PointLocator3DIntersectorP0P1.hxx b/src/INTERP_KERNEL/PointLocator3DIntersectorP0P1.hxx index 13bc98cac..345bac944 100644 --- a/src/INTERP_KERNEL/PointLocator3DIntersectorP0P1.hxx +++ b/src/INTERP_KERNEL/PointLocator3DIntersectorP0P1.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POINTLOCATOR3DINTERSECTORP0P1_HXX__ #define __POINTLOCATOR3DINTERSECTORP0P1_HXX__ diff --git a/src/INTERP_KERNEL/PointLocator3DIntersectorP0P1.txx b/src/INTERP_KERNEL/PointLocator3DIntersectorP0P1.txx index 0ea7ddc80..33d9d6883 100644 --- a/src/INTERP_KERNEL/PointLocator3DIntersectorP0P1.txx +++ b/src/INTERP_KERNEL/PointLocator3DIntersectorP0P1.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POINTLOCATOR3DINTERSECTORP0P1_TXX__ #define __POINTLOCATOR3DINTERSECTORP0P1_TXX__ diff --git a/src/INTERP_KERNEL/PointLocator3DIntersectorP1P0.hxx b/src/INTERP_KERNEL/PointLocator3DIntersectorP1P0.hxx index 4dd3f26ca..dab5aa63c 100644 --- a/src/INTERP_KERNEL/PointLocator3DIntersectorP1P0.hxx +++ b/src/INTERP_KERNEL/PointLocator3DIntersectorP1P0.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POINTLOCATOR3DINTERSECTORP1P0_HXX__ #define __POINTLOCATOR3DINTERSECTORP1P0_HXX__ diff --git a/src/INTERP_KERNEL/PointLocator3DIntersectorP1P0.txx b/src/INTERP_KERNEL/PointLocator3DIntersectorP1P0.txx index 3a941337d..bad0d01cb 100644 --- a/src/INTERP_KERNEL/PointLocator3DIntersectorP1P0.txx +++ b/src/INTERP_KERNEL/PointLocator3DIntersectorP1P0.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POINTLOCATOR3DINTERSECTORP1P0_TXX__ #define __POINTLOCATOR3DINTERSECTORP1P0_TXX__ diff --git a/src/INTERP_KERNEL/PointLocator3DIntersectorP1P1.hxx b/src/INTERP_KERNEL/PointLocator3DIntersectorP1P1.hxx index 9951eea52..ec88c8274 100644 --- a/src/INTERP_KERNEL/PointLocator3DIntersectorP1P1.hxx +++ b/src/INTERP_KERNEL/PointLocator3DIntersectorP1P1.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POINTLOCATOR3DINTERSECTORP1P1_HXX__ #define __POINTLOCATOR3DINTERSECTORP1P1_HXX__ diff --git a/src/INTERP_KERNEL/PointLocator3DIntersectorP1P1.txx b/src/INTERP_KERNEL/PointLocator3DIntersectorP1P1.txx index 1cffba133..d6baf689f 100644 --- a/src/INTERP_KERNEL/PointLocator3DIntersectorP1P1.txx +++ b/src/INTERP_KERNEL/PointLocator3DIntersectorP1P1.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POINTLOCATOR3DINTERSECTORP1P1_TXX__ #define __POINTLOCATOR3DINTERSECTORP1P1_TXX__ diff --git a/src/INTERP_KERNEL/PointLocatorAlgos.txx b/src/INTERP_KERNEL/PointLocatorAlgos.txx index db6972d2a..0ac908044 100644 --- a/src/INTERP_KERNEL/PointLocatorAlgos.txx +++ b/src/INTERP_KERNEL/PointLocatorAlgos.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POINTLOCATORALGOS_TXX__ #define __POINTLOCATORALGOS_TXX__ diff --git a/src/INTERP_KERNEL/PolyhedronIntersectorP0P0.hxx b/src/INTERP_KERNEL/PolyhedronIntersectorP0P0.hxx index 6e746ef05..fd039593c 100644 --- a/src/INTERP_KERNEL/PolyhedronIntersectorP0P0.hxx +++ b/src/INTERP_KERNEL/PolyhedronIntersectorP0P0.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POLYHEDRONINTERSECTORP0P0_HXX__ #define __POLYHEDRONINTERSECTORP0P0_HXX__ diff --git a/src/INTERP_KERNEL/PolyhedronIntersectorP0P0.txx b/src/INTERP_KERNEL/PolyhedronIntersectorP0P0.txx index 61011e735..ba5ea83b8 100644 --- a/src/INTERP_KERNEL/PolyhedronIntersectorP0P0.txx +++ b/src/INTERP_KERNEL/PolyhedronIntersectorP0P0.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POLYHEDRONINTERSECTORP0P0_TXX__ #define __POLYHEDRONINTERSECTORP0P0_TXX__ diff --git a/src/INTERP_KERNEL/PolyhedronIntersectorP0P1.hxx b/src/INTERP_KERNEL/PolyhedronIntersectorP0P1.hxx index 024ce9b68..75ef149ba 100644 --- a/src/INTERP_KERNEL/PolyhedronIntersectorP0P1.hxx +++ b/src/INTERP_KERNEL/PolyhedronIntersectorP0P1.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POLYHEDRONINTERSECTORP0P1_HXX__ #define __POLYHEDRONINTERSECTORP0P1_HXX__ diff --git a/src/INTERP_KERNEL/PolyhedronIntersectorP0P1.txx b/src/INTERP_KERNEL/PolyhedronIntersectorP0P1.txx index 8786b3f76..f41bca07d 100644 --- a/src/INTERP_KERNEL/PolyhedronIntersectorP0P1.txx +++ b/src/INTERP_KERNEL/PolyhedronIntersectorP0P1.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POLYHEDRONINTERSECTORP0P1_TXX__ #define __POLYHEDRONINTERSECTORP0P1_TXX__ diff --git a/src/INTERP_KERNEL/PolyhedronIntersectorP1P0.hxx b/src/INTERP_KERNEL/PolyhedronIntersectorP1P0.hxx index c3e257d22..486f35394 100644 --- a/src/INTERP_KERNEL/PolyhedronIntersectorP1P0.hxx +++ b/src/INTERP_KERNEL/PolyhedronIntersectorP1P0.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POLYHEDRONINTERSECTORP1P0_HXX__ #define __POLYHEDRONINTERSECTORP1P0_HXX__ diff --git a/src/INTERP_KERNEL/PolyhedronIntersectorP1P0.txx b/src/INTERP_KERNEL/PolyhedronIntersectorP1P0.txx index 962fd76e5..7e56de719 100644 --- a/src/INTERP_KERNEL/PolyhedronIntersectorP1P0.txx +++ b/src/INTERP_KERNEL/PolyhedronIntersectorP1P0.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __POLYHEDRONINTERSECTORP1P0_TXX__ #define __POLYHEDRONINTERSECTORP1P0_TXX__ diff --git a/src/INTERP_KERNEL/PolyhedronIntersectorP1P0Bary.hxx b/src/INTERP_KERNEL/PolyhedronIntersectorP1P0Bary.hxx index b6d6f7c15..982586ecb 100644 --- a/src/INTERP_KERNEL/PolyhedronIntersectorP1P0Bary.hxx +++ b/src/INTERP_KERNEL/PolyhedronIntersectorP1P0Bary.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PolyhedronIntersectorP1P0Bary_HXX__ #define __PolyhedronIntersectorP1P0Bary_HXX__ diff --git a/src/INTERP_KERNEL/PolyhedronIntersectorP1P0Bary.txx b/src/INTERP_KERNEL/PolyhedronIntersectorP1P0Bary.txx index 884adf1fd..044e68acb 100644 --- a/src/INTERP_KERNEL/PolyhedronIntersectorP1P0Bary.txx +++ b/src/INTERP_KERNEL/PolyhedronIntersectorP1P0Bary.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PolyhedronIntersectorP1P0Bary_TXX__ #define __PolyhedronIntersectorP1P0Bary_TXX__ diff --git a/src/INTERP_KERNEL/PolyhedronIntersectorP1P1.hxx b/src/INTERP_KERNEL/PolyhedronIntersectorP1P1.hxx index fc65a7f10..346a14e33 100644 --- a/src/INTERP_KERNEL/PolyhedronIntersectorP1P1.hxx +++ b/src/INTERP_KERNEL/PolyhedronIntersectorP1P1.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PolyhedronIntersectorP1P1_HXX__ #define __PolyhedronIntersectorP1P1_HXX__ diff --git a/src/INTERP_KERNEL/PolyhedronIntersectorP1P1.txx b/src/INTERP_KERNEL/PolyhedronIntersectorP1P1.txx index 31a26e7df..3d3cfb88d 100644 --- a/src/INTERP_KERNEL/PolyhedronIntersectorP1P1.txx +++ b/src/INTERP_KERNEL/PolyhedronIntersectorP1P1.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PolyhedronIntersectorP1P1_TXX__ #define __PolyhedronIntersectorP1P1_TXX__ diff --git a/src/INTERP_KERNEL/TargetIntersector.hxx b/src/INTERP_KERNEL/TargetIntersector.hxx index 1023394af..c1a898a99 100644 --- a/src/INTERP_KERNEL/TargetIntersector.hxx +++ b/src/INTERP_KERNEL/TargetIntersector.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __TARGETINTERSECTOR__HXX__ #define __TARGETINTERSECTOR__HXX__ diff --git a/src/INTERP_KERNEL/TransformedTriangle.hxx b/src/INTERP_KERNEL/TransformedTriangle.hxx index d7f7a4e32..8372c4a38 100644 --- a/src/INTERP_KERNEL/TransformedTriangle.hxx +++ b/src/INTERP_KERNEL/TransformedTriangle.hxx @@ -33,7 +33,7 @@ #include "Log.hxx" -#ifdef WNT +#ifdef WIN32 #pragma warning(disable:4251) #endif diff --git a/src/INTERP_KERNEL/TriangulationIntersector.hxx b/src/INTERP_KERNEL/TriangulationIntersector.hxx index 99959cd2c..170a8f120 100644 --- a/src/INTERP_KERNEL/TriangulationIntersector.hxx +++ b/src/INTERP_KERNEL/TriangulationIntersector.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __TRIANGULATIONINTERSECTOR_HXX__ #define __TRIANGULATIONINTERSECTOR_HXX__ diff --git a/src/INTERP_KERNEL/TriangulationIntersector.txx b/src/INTERP_KERNEL/TriangulationIntersector.txx index 3cc53f66e..53363c96b 100644 --- a/src/INTERP_KERNEL/TriangulationIntersector.txx +++ b/src/INTERP_KERNEL/TriangulationIntersector.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __TRIANGULATIONINTERSECTOR_TXX__ #define __TRIANGULATIONINTERSECTOR_TXX__ diff --git a/src/INTERP_KERNEL/VTKNormalizedUnstructuredMesh.hxx b/src/INTERP_KERNEL/VTKNormalizedUnstructuredMesh.hxx index 49bf127f9..f533492df 100644 --- a/src/INTERP_KERNEL/VTKNormalizedUnstructuredMesh.hxx +++ b/src/INTERP_KERNEL/VTKNormalizedUnstructuredMesh.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __VTKNORMALIZEDUNSTRUCTUREDMESH_HXX__ #define __VTKNORMALIZEDUNSTRUCTUREDMESH_HXX__ diff --git a/src/INTERP_KERNEL/VTKNormalizedUnstructuredMesh.txx b/src/INTERP_KERNEL/VTKNormalizedUnstructuredMesh.txx index 3baae70f2..e326ec4ae 100644 --- a/src/INTERP_KERNEL/VTKNormalizedUnstructuredMesh.txx +++ b/src/INTERP_KERNEL/VTKNormalizedUnstructuredMesh.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __VTKNORMALIZEDUNSTRUCTUREDMESH_TXX__ #define __VTKNORMALIZEDUNSTRUCTUREDMESH_TXX__ diff --git a/src/INTERP_KERNEL/VolSurfFormulae.hxx b/src/INTERP_KERNEL/VolSurfFormulae.hxx index b1e815eff..b7ad4fdb5 100644 --- a/src/INTERP_KERNEL/VolSurfFormulae.hxx +++ b/src/INTERP_KERNEL/VolSurfFormulae.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __VOLSURFFORMULAE_HXX__ #define __VOLSURFFORMULAE_HXX__ diff --git a/src/INTERP_KERNEL/VolSurfUser.hxx b/src/INTERP_KERNEL/VolSurfUser.hxx index 09fe9967a..e6f877bf4 100644 --- a/src/INTERP_KERNEL/VolSurfUser.hxx +++ b/src/INTERP_KERNEL/VolSurfUser.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __VOLSURFUSER_HXX__ #define __VOLSURFUSER_HXX__ diff --git a/src/INTERP_KERNEL/VolSurfUser.txx b/src/INTERP_KERNEL/VolSurfUser.txx index 31988e3e0..5e4f6129d 100644 --- a/src/INTERP_KERNEL/VolSurfUser.txx +++ b/src/INTERP_KERNEL/VolSurfUser.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __VOLSURFUSER_TXX__ #define __VOLSURFUSER_TXX__ diff --git a/src/INTERP_KERNELTest/CMakeLists.txt b/src/INTERP_KERNELTest/CMakeLists.txt index b8cf746fb..658a3cee1 100644 --- a/src/INTERP_KERNELTest/CMakeLists.txt +++ b/src/INTERP_KERNELTest/CMakeLists.txt @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) INCLUDE_DIRECTORIES( ${CPPUNIT_INCLUDE_DIRS} @@ -67,17 +68,18 @@ IF(NOT MED_ENABLE_MICROMED) PerfTest.cxx ) ADD_EXECUTABLE(PerfTest ${PerfTest_SOURCES}) - SET_TARGET_PROPERTIES(PerfTest PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${CPPUNIT_DEFINITIONS}") - TARGET_LINK_LIBRARIES(PerfTest InterpKernelTest ${CPPUNIT_LIBS}) + SET_TARGET_PROPERTIES(PerfTest PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") + TARGET_LINK_LIBRARIES(PerfTest InterpKernelTest ${CPPUNIT_LIBS} ${PLATFORM_LIBS}) + INSTALL(TARGETS PerfTest DESTINATION ${MED_salomebin_BINS}) ENDIF(NOT MED_ENABLE_MICROMED) ADD_LIBRARY(InterpKernelTest SHARED ${InterpKernelTest_SOURCES}) -SET_TARGET_PROPERTIES(InterpKernelTest PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${CPPUNIT_DEFINITIONS}") -TARGET_LINK_LIBRARIES(InterpKernelTest medmem ${CPPUNIT_LIBS}) +SET_TARGET_PROPERTIES(InterpKernelTest PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(InterpKernelTest medmem interpkernel ${CPPUNIT_LIBS}) ADD_EXECUTABLE(TestINTERP_KERNEL ${TestINTERP_KERNEL_SOURCES}) -SET_TARGET_PROPERTIES(TestINTERP_KERNEL PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${CPPUNIT_DEFINITIONS}") -TARGET_LINK_LIBRARIES(TestINTERP_KERNEL InterpKernelTest ${CPPUNIT_LIBS}) +SET_TARGET_PROPERTIES(TestINTERP_KERNEL PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestINTERP_KERNEL InterpKernelTest ${CPPUNIT_LIBS} ${PLATFORM_LIBS}) ADD_TEST(TestINTERP_KERNEL TestINTERP_KERNEL) INSTALL(TARGETS TestINTERP_KERNEL DESTINATION ${MED_salomebin_BINS}) diff --git a/src/INTERP_KERNELTest/ExprEvalInterpTest.cxx b/src/INTERP_KERNELTest/ExprEvalInterpTest.cxx index 9178175fe..85192e313 100644 --- a/src/INTERP_KERNELTest/ExprEvalInterpTest.cxx +++ b/src/INTERP_KERNELTest/ExprEvalInterpTest.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "ExprEvalInterpTest.hxx" #include "InterpKernelExprParser.hxx" diff --git a/src/INTERP_KERNELTest/ExprEvalInterpTest.hxx b/src/INTERP_KERNELTest/ExprEvalInterpTest.hxx index f631cb250..88b7662b7 100644 --- a/src/INTERP_KERNELTest/ExprEvalInterpTest.hxx +++ b/src/INTERP_KERNELTest/ExprEvalInterpTest.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef _EXPREVALINTERPTEST_HXX_ #define _EXPREVALINTERPTEST_HXX_ diff --git a/src/INTERP_KERNELTest/InterpKernelTestExport.hxx b/src/INTERP_KERNELTest/InterpKernelTestExport.hxx index 93e49afbd..c936b224a 100644 --- a/src/INTERP_KERNELTest/InterpKernelTestExport.hxx +++ b/src/INTERP_KERNELTest/InterpKernelTestExport.hxx @@ -20,7 +20,7 @@ #ifndef _INTERPKERNELTESTEXPORT_HXX_ #define _INTERPKERNELTESTEXPORT_HXX_ -#ifdef WNT +#ifdef WIN32 # if defined InterpKernelTest_EXPORTS # define INTERPKERNELTEST_EXPORT __declspec( dllexport ) # else diff --git a/src/INTERP_KERNELTest/QuadraticPlanarInterpTest.cxx b/src/INTERP_KERNELTest/QuadraticPlanarInterpTest.cxx index a58f32b14..577887c6e 100644 --- a/src/INTERP_KERNELTest/QuadraticPlanarInterpTest.cxx +++ b/src/INTERP_KERNELTest/QuadraticPlanarInterpTest.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "QuadraticPlanarInterpTest.hxx" #include "InterpKernelGeo2DQuadraticPolygon.hxx" diff --git a/src/INTERP_KERNELTest/QuadraticPlanarInterpTest.hxx b/src/INTERP_KERNELTest/QuadraticPlanarInterpTest.hxx index 8024a21ac..b9d39e015 100644 --- a/src/INTERP_KERNELTest/QuadraticPlanarInterpTest.hxx +++ b/src/INTERP_KERNELTest/QuadraticPlanarInterpTest.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef _QUADRATICPLANARINTERPTEST_HXX_ #define _QUADRATICPLANARINTERPTEST_HXX_ diff --git a/src/INTERP_KERNELTest/QuadraticPlanarInterpTest2.cxx b/src/INTERP_KERNELTest/QuadraticPlanarInterpTest2.cxx index 8eae1b8a8..2781d503f 100644 --- a/src/INTERP_KERNELTest/QuadraticPlanarInterpTest2.cxx +++ b/src/INTERP_KERNELTest/QuadraticPlanarInterpTest2.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "QuadraticPlanarInterpTest.hxx" #include "InterpKernelGeo2DQuadraticPolygon.hxx" diff --git a/src/INTERP_KERNELTest/QuadraticPlanarInterpTest3.cxx b/src/INTERP_KERNELTest/QuadraticPlanarInterpTest3.cxx index a249d3a13..7b22ab2ae 100644 --- a/src/INTERP_KERNELTest/QuadraticPlanarInterpTest3.cxx +++ b/src/INTERP_KERNELTest/QuadraticPlanarInterpTest3.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "QuadraticPlanarInterpTest.hxx" #include "InterpKernelGeo2DQuadraticPolygon.hxx" diff --git a/src/INTERP_KERNELTest/QuadraticPlanarInterpTest4.cxx b/src/INTERP_KERNELTest/QuadraticPlanarInterpTest4.cxx index 9210694b4..5ab41b33e 100644 --- a/src/INTERP_KERNELTest/QuadraticPlanarInterpTest4.cxx +++ b/src/INTERP_KERNELTest/QuadraticPlanarInterpTest4.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "QuadraticPlanarInterpTest.hxx" #include "InterpKernelGeo2DQuadraticPolygon.hxx" diff --git a/src/INTERP_KERNELTest/QuadraticPlanarInterpTest5.cxx b/src/INTERP_KERNELTest/QuadraticPlanarInterpTest5.cxx index 329ce0f84..111b61aa3 100644 --- a/src/INTERP_KERNELTest/QuadraticPlanarInterpTest5.cxx +++ b/src/INTERP_KERNELTest/QuadraticPlanarInterpTest5.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "QuadraticPlanarInterpTest.hxx" #include "InterpKernelGeo2DQuadraticPolygon.hxx" diff --git a/src/MED/CMakeLists.txt b/src/MED/CMakeLists.txt index a6362e34c..0fdffb561 100644 --- a/src/MED/CMakeLists.txt +++ b/src/MED/CMakeLists.txt @@ -21,6 +21,7 @@ INCLUDE_DIRECTORIES( ${OMNIORB_INCLUDE_DIRS} ${HDF5_INCLUDE_DIRS} ${MED3_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} ${XDR_INCLUDE_DIRS} ${KERNEL_ROOT_DIR}/include/salome ${CMAKE_CURRENT_BINARY_DIR}/../../idl @@ -29,16 +30,23 @@ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL/Bases ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL/GaussPoints - ) +) SET(MEDEngine_SOURCES Med_Gen_i.cxx Med_Gen_Driver_i.cxx - ) +) + +SET(COMMON_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +IF(WINDOWS) + SET(COMMON_FLAGS "${COMMON_FLAGS} -DNOGDI") +ENDIF(WINDOWS +) ADD_LIBRARY(MEDEngine SHARED ${MEDEngine_SOURCES}) -SET_TARGET_PROPERTIES(MEDEngine PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS}") -TARGET_LINK_LIBRARIES(MEDEngine MEDMEMImpl SalomeIDLMED ${TOOLSDS} ${SalomeHDFPersist} ${SalomeContainer} ${SalomeCommunication} ${SalomeLifeCycleCORBA}) +SET_TARGET_PROPERTIES(MEDEngine PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(MEDEngine MEDMEMImpl SalomeIDLMED ${TOOLSDS} ${SalomeHDFPersist} + ${SalomeContainer} ${SalomeCommunication} ${SalomeLifeCycleCORBA} ${PLATFORM_LIBS}) INSTALL(TARGETS MEDEngine DESTINATION ${MED_salomelib_LIBS}) SET(MED_MED_salomescript_DATA diff --git a/src/MED/Med_Gen_i.hxx b/src/MED/Med_Gen_i.hxx index aaf2101a0..270863b81 100644 --- a/src/MED/Med_Gen_i.hxx +++ b/src/MED/Med_Gen_i.hxx @@ -45,7 +45,7 @@ namespace MEDMEM { class MED_i; } -#ifdef WNT +#ifdef WIN32 #if defined MED_EXPORTS || defined MEDEngine_EXPORTS #if defined WIN32 #define MED_EXPORT __declspec( dllexport ) diff --git a/src/MEDCalculator/CMakeLists.txt b/src/MEDCalculator/CMakeLists.txt index 9c9046e77..8b29aca91 100644 --- a/src/MEDCalculator/CMakeLists.txt +++ b/src/MEDCalculator/CMakeLists.txt @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) ADD_SUBDIRECTORY(Swig) ADD_SUBDIRECTORY(Test) @@ -24,6 +25,7 @@ INCLUDE_DIRECTORIES( ${MED3_INCLUDE_DIRS} ${HDF5_INCLUDE_DIRS} ${OMNIORB_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} ${KERNEL_ROOT_DIR}/include/salome ${CMAKE_CURRENT_BINARY_DIR}/../../idl ${CMAKE_CURRENT_SOURCE_DIR}/../MEDCouplingCorba @@ -47,8 +49,8 @@ SET(medcalculator_SOURCES ) ADD_LIBRARY(medcalculator SHARED ${medcalculator_SOURCES}) -SET_TARGET_PROPERTIES(medcalculator PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS}") -TARGET_LINK_LIBRARIES(medcalculator medloader medcouplingcorba ${KERNEL_LDFLAGS} ${SALOMELocalTrace} ${SalomeNS} ${OpUtil}) +SET_TARGET_PROPERTIES(medcalculator PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(medcalculator medloader medcouplingcorba ${KERNEL_LDFLAGS} ${SALOMELocalTrace} ${SalomeNS} ${OpUtil} ${OMNIORB_LIBS} ${PLATFORM_LIBS}) INSTALL(TARGETS medcalculator DESTINATION ${MED_salomelib_LIBS}) FILE(GLOB medcalculator_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") diff --git a/src/MEDCalculator/MEDCalculatorBrowserField.cxx b/src/MEDCalculator/MEDCalculatorBrowserField.cxx index 27eebc4f7..a11b7b488 100644 --- a/src/MEDCalculator/MEDCalculatorBrowserField.cxx +++ b/src/MEDCalculator/MEDCalculatorBrowserField.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCalculatorBrowserStep.hxx" #include "MEDCalculatorBrowserField.hxx" diff --git a/src/MEDCalculator/MEDCalculatorBrowserField.hxx b/src/MEDCalculator/MEDCalculatorBrowserField.hxx index 819497b32..60b2c0cb0 100644 --- a/src/MEDCalculator/MEDCalculatorBrowserField.hxx +++ b/src/MEDCalculator/MEDCalculatorBrowserField.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCALCULATORBROWSERFIELD_HXX__ #define __MEDCALCULATORBROWSERFIELD_HXX__ diff --git a/src/MEDCalculator/MEDCalculatorBrowserLiteStruct.cxx b/src/MEDCalculator/MEDCalculatorBrowserLiteStruct.cxx index c792e4dc3..c44ffc66f 100644 --- a/src/MEDCalculator/MEDCalculatorBrowserLiteStruct.cxx +++ b/src/MEDCalculator/MEDCalculatorBrowserLiteStruct.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCalculatorBrowserLiteStruct.hxx" #include "MEDCalculatorBrowserStep.hxx" diff --git a/src/MEDCalculator/MEDCalculatorBrowserLiteStruct.hxx b/src/MEDCalculator/MEDCalculatorBrowserLiteStruct.hxx index 6d14c2f6d..a72f08a5d 100644 --- a/src/MEDCalculator/MEDCalculatorBrowserLiteStruct.hxx +++ b/src/MEDCalculator/MEDCalculatorBrowserLiteStruct.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCALCULATORBROWSERLITESTRUCT_HXX__ #define __MEDCALCULATORBROWSERLITESTRUCT_HXX__ diff --git a/src/MEDCalculator/MEDCalculatorBrowserMesh.cxx b/src/MEDCalculator/MEDCalculatorBrowserMesh.cxx index e7a5f573d..6cc2ac8d7 100644 --- a/src/MEDCalculator/MEDCalculatorBrowserMesh.cxx +++ b/src/MEDCalculator/MEDCalculatorBrowserMesh.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCalculatorBrowserMesh.hxx" #include diff --git a/src/MEDCalculator/MEDCalculatorBrowserMesh.hxx b/src/MEDCalculator/MEDCalculatorBrowserMesh.hxx index 0872df214..97306ff1a 100644 --- a/src/MEDCalculator/MEDCalculatorBrowserMesh.hxx +++ b/src/MEDCalculator/MEDCalculatorBrowserMesh.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCALCULATORBROWSERMESH_HXX__ #define __MEDCALCULATORBROWSERMESH_HXX__ diff --git a/src/MEDCalculator/MEDCalculatorBrowserStep.cxx b/src/MEDCalculator/MEDCalculatorBrowserStep.cxx index 7f02dcfa0..14da25390 100644 --- a/src/MEDCalculator/MEDCalculatorBrowserStep.cxx +++ b/src/MEDCalculator/MEDCalculatorBrowserStep.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCalculatorBrowserStep.hxx" diff --git a/src/MEDCalculator/MEDCalculatorBrowserStep.hxx b/src/MEDCalculator/MEDCalculatorBrowserStep.hxx index 10512cf02..029ce6ae5 100644 --- a/src/MEDCalculator/MEDCalculatorBrowserStep.hxx +++ b/src/MEDCalculator/MEDCalculatorBrowserStep.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCALCULATORBROWSERSTEP_HXX__ #define __MEDCALCULATORBROWSERSTEP_HXX__ diff --git a/src/MEDCalculator/MEDCalculatorDBField.cxx b/src/MEDCalculator/MEDCalculatorDBField.cxx index 5293642e1..015603b85 100644 --- a/src/MEDCalculator/MEDCalculatorDBField.cxx +++ b/src/MEDCalculator/MEDCalculatorDBField.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCalculatorDBField.hxx" #include "MEDCalculatorBrowserField.hxx" diff --git a/src/MEDCalculator/MEDCalculatorDBField.hxx b/src/MEDCalculator/MEDCalculatorDBField.hxx index bf02bd983..a8eb1dc8d 100644 --- a/src/MEDCalculator/MEDCalculatorDBField.hxx +++ b/src/MEDCalculator/MEDCalculatorDBField.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCALCULATORDBFIELD_HXX__ #define __MEDCALCULATORDBFIELD_HXX__ diff --git a/src/MEDCalculator/MEDCalculatorDBRangeSelection.cxx b/src/MEDCalculator/MEDCalculatorDBRangeSelection.cxx index 06bdcd46b..799777dbb 100644 --- a/src/MEDCalculator/MEDCalculatorDBRangeSelection.cxx +++ b/src/MEDCalculator/MEDCalculatorDBRangeSelection.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCalculatorDBRangeSelection.hxx" diff --git a/src/MEDCalculator/MEDCalculatorDBRangeSelection.hxx b/src/MEDCalculator/MEDCalculatorDBRangeSelection.hxx index 2b0f0f823..889641b99 100644 --- a/src/MEDCalculator/MEDCalculatorDBRangeSelection.hxx +++ b/src/MEDCalculator/MEDCalculatorDBRangeSelection.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCALCULATORDBRANGESELECTION_HXX__ #define __MEDCALCULATORDBRANGESELECTION_HXX__ diff --git a/src/MEDCalculator/MEDCalculatorDBSliceField.cxx b/src/MEDCalculator/MEDCalculatorDBSliceField.cxx index aa1f11b66..e2d4abfe3 100644 --- a/src/MEDCalculator/MEDCalculatorDBSliceField.cxx +++ b/src/MEDCalculator/MEDCalculatorDBSliceField.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCalculatorDBSliceField.hxx" #include "MEDCalculatorDBRangeSelection.hxx" diff --git a/src/MEDCalculator/MEDCalculatorDBSliceField.hxx b/src/MEDCalculator/MEDCalculatorDBSliceField.hxx index 26cca6842..d4697b8c9 100644 --- a/src/MEDCalculator/MEDCalculatorDBSliceField.hxx +++ b/src/MEDCalculator/MEDCalculatorDBSliceField.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCALCULATORDBSLICEFIELD_HXX__ #define __MEDCALCULATORDBSLICEFIELD_HXX__ diff --git a/src/MEDCalculator/Makefile.am b/src/MEDCalculator/Makefile.am index 3ec811520..ccd04d166 100644 --- a/src/MEDCalculator/Makefile.am +++ b/src/MEDCalculator/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) include $(top_srcdir)/adm_local/unix/make_common_starter.am diff --git a/src/MEDCalculator/MedCalculatorDefines.hxx b/src/MEDCalculator/MedCalculatorDefines.hxx index 7a7f6d892..0f7fcd223 100755 --- a/src/MEDCalculator/MedCalculatorDefines.hxx +++ b/src/MEDCalculator/MedCalculatorDefines.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCALCULATORDEFINES_HXX__ #define __MEDCALCULATORDEFINES_HXX__ diff --git a/src/MEDCalculator/Swig/CMakeLists.txt b/src/MEDCalculator/Swig/CMakeLists.txt index eb2593a92..0ea866771 100644 --- a/src/MEDCalculator/Swig/CMakeLists.txt +++ b/src/MEDCalculator/Swig/CMakeLists.txt @@ -16,8 +16,9 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) -INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/InstallAndCompilePythonFile.cmake) +INCLUDE(${SALOME_MACROS_DIR}/InstallAndCompilePythonFile.cmake) FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) @@ -46,9 +47,13 @@ INSTALL(TARGETS medcalculatorspython DESTINATION ${MED_salomelib_LIBS}) SET_SOURCE_FILES_PROPERTIES(MEDCalculator.i PROPERTIES CPLUSPLUS ON) SET_SOURCE_FILES_PROPERTIES(MEDCalculator.i PROPERTIES SWIG_DEFINITIONS "-shadow") - SWIG_ADD_MODULE(MEDCalculator python MEDCalculator.i) -SWIG_LINK_LIBRARIES(MEDCalculator ${PYTHON_LIBRARIES} medcalculator) +SWIG_LINK_LIBRARIES(MEDCalculator ${PYTHON_LIBS} medcalculator) +SET_TARGET_PROPERTIES(_MEDCalculator PROPERTIES COMPILE_FLAGS "${PLATFORM_DEFINITIONS}") + +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_MEDCalculator PROPERTIES DEBUG_OUTPUT_NAME _MEDCalculator_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) FILE(GLOB medcalculatorspython_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") INSTALL(FILES ${medcalculatorspython_HEADERS_HXX} DESTINATION ${MED_salomeinclude_HEADERS}) diff --git a/src/MEDCalculator/Swig/MEDCalculator.i b/src/MEDCalculator/Swig/MEDCalculator.i index 4061b59ef..63e7b7416 100644 --- a/src/MEDCalculator/Swig/MEDCalculator.i +++ b/src/MEDCalculator/Swig/MEDCalculator.i @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) %module MEDCalculator diff --git a/src/MEDCalculator/Swig/MEDCalculatorBasicsTest.py b/src/MEDCalculator/Swig/MEDCalculatorBasicsTest.py index 74b5c6166..70a2b5ac8 100644 --- a/src/MEDCalculator/Swig/MEDCalculatorBasicsTest.py +++ b/src/MEDCalculator/Swig/MEDCalculatorBasicsTest.py @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) from MEDCalculator import * import unittest diff --git a/src/MEDCalculator/Swig/MEDCalculatorTypemaps.i b/src/MEDCalculator/Swig/MEDCalculatorTypemaps.i index 5a952f748..a527be4cd 100644 --- a/src/MEDCalculator/Swig/MEDCalculatorTypemaps.i +++ b/src/MEDCalculator/Swig/MEDCalculatorTypemaps.i @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include diff --git a/src/MEDCalculator/Swig/Makefile.am b/src/MEDCalculator/Swig/Makefile.am index 9416cec2f..a935106c3 100644 --- a/src/MEDCalculator/Swig/Makefile.am +++ b/src/MEDCalculator/Swig/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) # MED MEDMEM_SWIG : binding of C++ implementation and Python # diff --git a/src/MEDCalculator/Swig/MedCalculatorSPythonDefines.hxx b/src/MEDCalculator/Swig/MedCalculatorSPythonDefines.hxx index 13bbafce7..aa5178c9b 100755 --- a/src/MEDCalculator/Swig/MedCalculatorSPythonDefines.hxx +++ b/src/MEDCalculator/Swig/MedCalculatorSPythonDefines.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCALCULATORSPYTHONDEFINES_HXX__ #define __MEDCALCULATORSPYTHONDEFINES_HXX__ diff --git a/src/MEDCalculator/Swig/SPythonInterpreter.cxx b/src/MEDCalculator/Swig/SPythonInterpreter.cxx index ed7642abc..f80e6fb89 100644 --- a/src/MEDCalculator/Swig/SPythonInterpreter.cxx +++ b/src/MEDCalculator/Swig/SPythonInterpreter.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "SPythonInterpreter.hxx" #include "SPythonParser.hxx" diff --git a/src/MEDCalculator/Swig/SPythonInterpreter.hxx b/src/MEDCalculator/Swig/SPythonInterpreter.hxx index 27abd06a0..463576278 100644 --- a/src/MEDCalculator/Swig/SPythonInterpreter.hxx +++ b/src/MEDCalculator/Swig/SPythonInterpreter.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __SPYTHONINTERPRETER_HXX__ #define __SPYTHONINTERPRETER_HXX__ diff --git a/src/MEDCalculator/Swig/SPythonParser.cxx b/src/MEDCalculator/Swig/SPythonParser.cxx index 6eb82a7c6..4320c6b4d 100644 --- a/src/MEDCalculator/Swig/SPythonParser.cxx +++ b/src/MEDCalculator/Swig/SPythonParser.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "SPythonParser.hxx" diff --git a/src/MEDCalculator/Swig/SPythonParser.hxx b/src/MEDCalculator/Swig/SPythonParser.hxx index b11c4e08e..854a0d32b 100644 --- a/src/MEDCalculator/Swig/SPythonParser.hxx +++ b/src/MEDCalculator/Swig/SPythonParser.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __SPYTHONPARSER_HXX__ #define __SPYTHONPARSER_HXX__ diff --git a/src/MEDCalculator/Swig/spython.cxx b/src/MEDCalculator/Swig/spython.cxx index 87c64487e..d6e3e9d2b 100644 --- a/src/MEDCalculator/Swig/spython.cxx +++ b/src/MEDCalculator/Swig/spython.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "SPythonInterpreter.hxx" diff --git a/src/MEDCalculator/Swig/test.spy b/src/MEDCalculator/Swig/test.spy index a5dd9bef7..970b6f24b 100644 --- a/src/MEDCalculator/Swig/test.spy +++ b/src/MEDCalculator/Swig/test.spy @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) def f(i): diff --git a/src/MEDCalculator/Swig/test2.spy b/src/MEDCalculator/Swig/test2.spy index 6f90103f1..44b4f7c4a 100644 --- a/src/MEDCalculator/Swig/test2.spy +++ b/src/MEDCalculator/Swig/test2.spy @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) e=MEDCalculatorBrowserLiteStruct("hfile1.med") f=e.getField(0) diff --git a/src/MEDCalculator/Test/CMakeLists.txt b/src/MEDCalculator/Test/CMakeLists.txt index 5d320587b..7f28318b2 100644 --- a/src/MEDCalculator/Test/CMakeLists.txt +++ b/src/MEDCalculator/Test/CMakeLists.txt @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) INCLUDE_DIRECTORIES( ${PYTHON_INCLUDE_DIRS} @@ -37,8 +38,8 @@ SET(TestMEDCalculator_SOURCES ) ADD_EXECUTABLE(TestMEDCalculator ${TestMEDCalculator_SOURCES}) -SET_TARGET_PROPERTIES(TestMEDCalculator PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${CPPUNIT_DEFINITIONS}") -TARGET_LINK_LIBRARIES(TestMEDCalculator medcalculatorspython medcalculator ${CPPUNIT_LIBS}) +SET_TARGET_PROPERTIES(TestMEDCalculator PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestMEDCalculator medcalculatorspython medcalculator ${CPPUNIT_LIBS} ${PLATFORM_LIBS}) ADD_TEST(TestMEDCalculator TestMEDCalculator) INSTALL(TARGETS TestMEDCalculator DESTINATION ${MED_salomebin_BINS}) diff --git a/src/MEDCalculator/Test/MEDCalculatorBasicsTest.cxx b/src/MEDCalculator/Test/MEDCalculatorBasicsTest.cxx index 64824c699..a6f2c5fbc 100644 --- a/src/MEDCalculator/Test/MEDCalculatorBasicsTest.cxx +++ b/src/MEDCalculator/Test/MEDCalculatorBasicsTest.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCalculatorBasicsTest.hxx" #include "MEDCalculatorBrowserLiteStruct.hxx" diff --git a/src/MEDCalculator/Test/MEDCalculatorBasicsTest.hxx b/src/MEDCalculator/Test/MEDCalculatorBasicsTest.hxx index 24ac743d0..2d5c9fab1 100644 --- a/src/MEDCalculator/Test/MEDCalculatorBasicsTest.hxx +++ b/src/MEDCalculator/Test/MEDCalculatorBasicsTest.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCALCULATORBASICSTEST_HXX__ #define __MEDCALCULATORBASICSTEST_HXX__ diff --git a/src/MEDCalculator/Test/Makefile.am b/src/MEDCalculator/Test/Makefile.am index fcfb31b93..05159ce24 100644 --- a/src/MEDCalculator/Test/Makefile.am +++ b/src/MEDCalculator/Test/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) include $(top_srcdir)/adm_local/unix/make_common_starter.am diff --git a/src/MEDCalculator/Test/TestMEDCalculator.cxx b/src/MEDCalculator/Test/TestMEDCalculator.cxx index 3e53d15b3..0f283f424 100644 --- a/src/MEDCalculator/Test/TestMEDCalculator.cxx +++ b/src/MEDCalculator/Test/TestMEDCalculator.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "CppUnitTest.hxx" #include "MEDCalculatorBasicsTest.hxx" diff --git a/src/MEDCoupling/CMakeLists.txt b/src/MEDCoupling/CMakeLists.txt index 047589fa8..e2513eb99 100644 --- a/src/MEDCoupling/CMakeLists.txt +++ b/src/MEDCoupling/CMakeLists.txt @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) ADD_SUBDIRECTORY(Test) @@ -54,11 +55,13 @@ SET(medcouplingremapper_SOURCES ) ADD_LIBRARY(medcoupling SHARED ${medcoupling_SOURCES}) +SET_TARGET_PROPERTIES(medcoupling PROPERTIES COMPILE_FLAGS "${PLATFORM_DEFINITIONS}") TARGET_LINK_LIBRARIES(medcoupling interpkernel) INSTALL(TARGETS medcoupling DESTINATION ${MED_salomelib_LIBS}) ADD_LIBRARY(medcouplingremapper SHARED ${medcouplingremapper_SOURCES}) TARGET_LINK_LIBRARIES(medcouplingremapper medcoupling) +SET_TARGET_PROPERTIES(medcouplingremapper PROPERTIES COMPILE_FLAGS "${PLATFORM_DEFINITIONS}") INSTALL(TARGETS medcouplingremapper DESTINATION ${MED_salomelib_LIBS}) FILE(GLOB medcoupling_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") diff --git a/src/MEDCoupling/MEDCoupling.hxx b/src/MEDCoupling/MEDCoupling.hxx index d732798de..0ca61624b 100644 --- a/src/MEDCoupling/MEDCoupling.hxx +++ b/src/MEDCoupling/MEDCoupling.hxx @@ -16,11 +16,12 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef _MEDCOUPLING_HXX_ #define _MEDCOUPLING_HXX_ -#ifdef WNT +#ifdef WIN32 # if defined medcoupling_EXPORTS # define MEDCOUPLING_EXPORT __declspec( dllexport ) # else @@ -30,7 +31,7 @@ # define MEDCOUPLING_EXPORT #endif -#ifdef WNT +#ifdef WIN32 # if defined medcouplingremapper_EXPORTS # define MEDCOUPLINGREMAPPER_EXPORT __declspec( dllexport ) # else @@ -40,7 +41,7 @@ # define MEDCOUPLINGREMAPPER_EXPORT #endif -#ifdef WNT +#ifdef WIN32 #pragma warning( disable : 4290 ) #endif diff --git a/src/MEDCoupling/MEDCouplingAutoRefCountObjectPtr.hxx b/src/MEDCoupling/MEDCouplingAutoRefCountObjectPtr.hxx index f9dc0efe3..fc0c0f4e9 100644 --- a/src/MEDCoupling/MEDCouplingAutoRefCountObjectPtr.hxx +++ b/src/MEDCoupling/MEDCouplingAutoRefCountObjectPtr.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGAUTOREFCOUNTOBJECTPTR_HXX__ #define __PARAMEDMEM_MEDCOUPLINGAUTOREFCOUNTOBJECTPTR_HXX__ diff --git a/src/MEDCoupling/MEDCouplingCMesh.cxx b/src/MEDCoupling/MEDCouplingCMesh.cxx index 883b4c9ca..bd6233b93 100644 --- a/src/MEDCoupling/MEDCouplingCMesh.cxx +++ b/src/MEDCoupling/MEDCouplingCMesh.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingCMesh.hxx" #include "MEDCouplingUMesh.hxx" diff --git a/src/MEDCoupling/MEDCouplingCMesh.hxx b/src/MEDCoupling/MEDCouplingCMesh.hxx index d80a3e2a3..39407ebb6 100644 --- a/src/MEDCoupling/MEDCouplingCMesh.hxx +++ b/src/MEDCoupling/MEDCouplingCMesh.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGCMESH_HXX__ #define __PARAMEDMEM_MEDCOUPLINGCMESH_HXX__ diff --git a/src/MEDCoupling/MEDCouplingDefinitionTime.cxx b/src/MEDCoupling/MEDCouplingDefinitionTime.cxx index a43312d90..0d703ce73 100644 --- a/src/MEDCoupling/MEDCouplingDefinitionTime.cxx +++ b/src/MEDCoupling/MEDCouplingDefinitionTime.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingDefinitionTime.hxx" #include "MEDCouplingFieldDouble.hxx" diff --git a/src/MEDCoupling/MEDCouplingDefinitionTime.hxx b/src/MEDCoupling/MEDCouplingDefinitionTime.hxx index 26ef19667..2ef0464eb 100644 --- a/src/MEDCoupling/MEDCouplingDefinitionTime.hxx +++ b/src/MEDCoupling/MEDCouplingDefinitionTime.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGDEFINITIONTIME_HXX__ #define __PARAMEDMEM_MEDCOUPLINGDEFINITIONTIME_HXX__ diff --git a/src/MEDCoupling/MEDCouplingExtrudedMesh.cxx b/src/MEDCoupling/MEDCouplingExtrudedMesh.cxx index 71a7e65c8..663737af5 100644 --- a/src/MEDCoupling/MEDCouplingExtrudedMesh.cxx +++ b/src/MEDCoupling/MEDCouplingExtrudedMesh.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingExtrudedMesh.hxx" #include "MEDCouplingUMesh.hxx" diff --git a/src/MEDCoupling/MEDCouplingExtrudedMesh.hxx b/src/MEDCoupling/MEDCouplingExtrudedMesh.hxx index fa3a3e1d9..9dc8122ed 100644 --- a/src/MEDCoupling/MEDCouplingExtrudedMesh.hxx +++ b/src/MEDCoupling/MEDCouplingExtrudedMesh.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGEXTRUDEDMESH_HXX__ #define __PARAMEDMEM_MEDCOUPLINGEXTRUDEDMESH_HXX__ diff --git a/src/MEDCoupling/MEDCouplingField.cxx b/src/MEDCoupling/MEDCouplingField.cxx index 6c598c084..08eb6970b 100644 --- a/src/MEDCoupling/MEDCouplingField.cxx +++ b/src/MEDCoupling/MEDCouplingField.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingField.hxx" #include "MEDCouplingMesh.hxx" diff --git a/src/MEDCoupling/MEDCouplingField.hxx b/src/MEDCoupling/MEDCouplingField.hxx index 162a17834..439743ad5 100644 --- a/src/MEDCoupling/MEDCouplingField.hxx +++ b/src/MEDCoupling/MEDCouplingField.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGFIELD_HXX__ #define __PARAMEDMEM_MEDCOUPLINGFIELD_HXX__ diff --git a/src/MEDCoupling/MEDCouplingFieldDiscretization.cxx b/src/MEDCoupling/MEDCouplingFieldDiscretization.cxx index 54b2ad675..2739ca421 100644 --- a/src/MEDCoupling/MEDCouplingFieldDiscretization.cxx +++ b/src/MEDCoupling/MEDCouplingFieldDiscretization.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingFieldDiscretization.hxx" #include "MEDCouplingCMesh.hxx" diff --git a/src/MEDCoupling/MEDCouplingFieldDiscretization.hxx b/src/MEDCoupling/MEDCouplingFieldDiscretization.hxx index 0bd003461..df43d9527 100644 --- a/src/MEDCoupling/MEDCouplingFieldDiscretization.hxx +++ b/src/MEDCoupling/MEDCouplingFieldDiscretization.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGFIELDDISCRETIZATION_HXX__ #define __PARAMEDMEM_MEDCOUPLINGFIELDDISCRETIZATION_HXX__ diff --git a/src/MEDCoupling/MEDCouplingFieldDouble.cxx b/src/MEDCoupling/MEDCouplingFieldDouble.cxx index 5f208b5c6..170cf2ecb 100644 --- a/src/MEDCoupling/MEDCouplingFieldDouble.cxx +++ b/src/MEDCoupling/MEDCouplingFieldDouble.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingFieldDouble.hxx" #include "MEDCouplingFieldTemplate.hxx" diff --git a/src/MEDCoupling/MEDCouplingFieldDouble.hxx b/src/MEDCoupling/MEDCouplingFieldDouble.hxx index 4d86fd3f8..3eac19dce 100644 --- a/src/MEDCoupling/MEDCouplingFieldDouble.hxx +++ b/src/MEDCoupling/MEDCouplingFieldDouble.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGFIELDDOUBLE_HXX__ #define __PARAMEDMEM_MEDCOUPLINGFIELDDOUBLE_HXX__ diff --git a/src/MEDCoupling/MEDCouplingFieldOverTime.cxx b/src/MEDCoupling/MEDCouplingFieldOverTime.cxx index eed9db85b..280c69a2d 100644 --- a/src/MEDCoupling/MEDCouplingFieldOverTime.cxx +++ b/src/MEDCoupling/MEDCouplingFieldOverTime.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingFieldOverTime.hxx" #include "MEDCouplingMesh.hxx" diff --git a/src/MEDCoupling/MEDCouplingFieldOverTime.hxx b/src/MEDCoupling/MEDCouplingFieldOverTime.hxx index 4c353c8e6..f1daea33c 100644 --- a/src/MEDCoupling/MEDCouplingFieldOverTime.hxx +++ b/src/MEDCoupling/MEDCouplingFieldOverTime.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGFIELDOVERTIME_HXX__ #define __PARAMEDMEM_MEDCOUPLINGFIELDOVERTIME_HXX__ diff --git a/src/MEDCoupling/MEDCouplingFieldTemplate.cxx b/src/MEDCoupling/MEDCouplingFieldTemplate.cxx index 2a77f785f..628ee6b72 100644 --- a/src/MEDCoupling/MEDCouplingFieldTemplate.cxx +++ b/src/MEDCoupling/MEDCouplingFieldTemplate.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingFieldTemplate.hxx" #include "MEDCouplingMesh.hxx" diff --git a/src/MEDCoupling/MEDCouplingFieldTemplate.hxx b/src/MEDCoupling/MEDCouplingFieldTemplate.hxx index 7c731463e..d93411ecb 100644 --- a/src/MEDCoupling/MEDCouplingFieldTemplate.hxx +++ b/src/MEDCoupling/MEDCouplingFieldTemplate.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGFIELDTEMPLATE_HXX__ #define __PARAMEDMEM_MEDCOUPLINGFIELDTEMPLATE_HXX__ diff --git a/src/MEDCoupling/MEDCouplingGaussLocalization.cxx b/src/MEDCoupling/MEDCouplingGaussLocalization.cxx index eae9beab4..1b5df9b07 100644 --- a/src/MEDCoupling/MEDCouplingGaussLocalization.cxx +++ b/src/MEDCoupling/MEDCouplingGaussLocalization.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingGaussLocalization.hxx" #include "CellModel.hxx" diff --git a/src/MEDCoupling/MEDCouplingGaussLocalization.hxx b/src/MEDCoupling/MEDCouplingGaussLocalization.hxx index 2660f946e..49f843e7e 100644 --- a/src/MEDCoupling/MEDCouplingGaussLocalization.hxx +++ b/src/MEDCoupling/MEDCouplingGaussLocalization.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGGAUSSLOCALIZATION_HXX__ #define __PARAMEDMEM_MEDCOUPLINGGAUSSLOCALIZATION_HXX__ diff --git a/src/MEDCoupling/MEDCouplingMemArray.cxx b/src/MEDCoupling/MEDCouplingMemArray.cxx index 2dabb36d3..a112e3eda 100644 --- a/src/MEDCoupling/MEDCouplingMemArray.cxx +++ b/src/MEDCoupling/MEDCouplingMemArray.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMemArray.txx" #include "MEDCouplingAutoRefCountObjectPtr.hxx" @@ -686,7 +687,7 @@ std::string DataArrayDouble::reprZip() const void DataArrayDouble::writeVTK(std::ostream& ofs, int indent, const char *nameInFile) const throw(INTERP_KERNEL::Exception) { std::string idt(indent,' '); - ofs.precision(15); + ofs.precision(17); ofs << idt << "\n" << idt; std::copy(begin(),end(),std::ostream_iterator(ofs," ")); @@ -708,14 +709,14 @@ void DataArrayDouble::reprZipStream(std::ostream& stream) const void DataArrayDouble::reprWithoutNameStream(std::ostream& stream) const { DataArray::reprWithoutNameStream(stream); - stream.precision(15); + stream.precision(17); _mem.repr(getNumberOfComponents(),stream); } void DataArrayDouble::reprZipWithoutNameStream(std::ostream& stream) const { DataArray::reprWithoutNameStream(stream); - stream.precision(15); + stream.precision(17); _mem.reprZip(getNumberOfComponents(),stream); } @@ -1611,7 +1612,7 @@ void DataArrayDouble::SetArrayIn(DataArrayDouble *newArray, DataArrayDouble* &ar } } -void DataArrayDouble::useArray(const double *array, bool ownership, DeallocType type, int nbOfTuple, int nbOfCompo) +void DataArrayDouble::useArray(const double *array, bool ownership, DeallocType type, int nbOfTuple, int nbOfCompo) { _nb_of_tuples=nbOfTuple; _info_on_compo.resize(nbOfCompo); @@ -1619,6 +1620,14 @@ void DataArrayDouble::useArray(const double *array, bool ownership, DeallocType declareAsNew(); } +void DataArrayDouble::useExternalArrayWithRWAccess(const double *array, int nbOfTuple, int nbOfCompo) +{ + _nb_of_tuples=nbOfTuple; + _info_on_compo.resize(nbOfCompo); + _mem.useExternalArrayWithRWAccess(array,nbOfTuple*nbOfCompo); + declareAsNew(); +} + void DataArrayDouble::checkNoNullValues() const throw(INTERP_KERNEL::Exception) { const double *tmp=getConstPointer(); @@ -3299,7 +3308,7 @@ DataArrayDoubleTuple::DataArrayDoubleTuple(double *pt, int nbOfComp):_pt(pt),_nb std::string DataArrayDoubleTuple::repr() const { - std::ostringstream oss; oss.precision(15); oss << "("; + std::ostringstream oss; oss.precision(17); oss << "("; for(int i=0;i<_nb_of_compo-1;i++) oss << _pt[i] << ", "; oss << _pt[_nb_of_compo-1] << ")"; @@ -3324,7 +3333,7 @@ DataArrayDouble *DataArrayDoubleTuple::buildDADouble(int nbOfTuples, int nbOfCom if((_nb_of_compo==nbOfCompo && nbOfTuples==1) || (_nb_of_compo==nbOfTuples && nbOfCompo==1)) { DataArrayDouble *ret=DataArrayDouble::New(); - ret->useArray(_pt,false,CPP_DEALLOC,nbOfTuples,nbOfCompo); + ret->useExternalArrayWithRWAccess(_pt,nbOfTuples,nbOfCompo); return ret; } else @@ -3792,6 +3801,14 @@ void DataArrayInt::useArray(const int *array, bool ownership, DeallocType type, declareAsNew(); } +void DataArrayInt::useExternalArrayWithRWAccess(const int *array, int nbOfTuple, int nbOfCompo) +{ + _nb_of_tuples=nbOfTuple; + _info_on_compo.resize(nbOfCompo); + _mem.useExternalArrayWithRWAccess(array,nbOfTuple*nbOfCompo); + declareAsNew(); +} + DataArrayInt *DataArrayInt::fromNoInterlace() const throw(INTERP_KERNEL::Exception) { if(_mem.isNull()) @@ -6418,7 +6435,7 @@ DataArrayInt *DataArrayIntTuple::buildDAInt(int nbOfTuples, int nbOfCompo) const if((_nb_of_compo==nbOfCompo && nbOfTuples==1) || (_nb_of_compo==nbOfTuples && nbOfCompo==1)) { DataArrayInt *ret=DataArrayInt::New(); - ret->useArray(_pt,false,CPP_DEALLOC,nbOfTuples,nbOfCompo); + ret->useExternalArrayWithRWAccess(_pt,nbOfTuples,nbOfCompo); return ret; } else diff --git a/src/MEDCoupling/MEDCouplingMemArray.hxx b/src/MEDCoupling/MEDCouplingMemArray.hxx index 2fccfc1b6..675a563ec 100644 --- a/src/MEDCoupling/MEDCouplingMemArray.hxx +++ b/src/MEDCoupling/MEDCouplingMemArray.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGMEMARRAY_HXX__ #define __PARAMEDMEM_MEDCOUPLINGMEMARRAY_HXX__ @@ -74,6 +75,7 @@ namespace ParaMEDMEM void alloc(int nbOfElements) throw(INTERP_KERNEL::Exception); void reAlloc(int newNbOfElements) throw(INTERP_KERNEL::Exception); void useArray(const T *array, bool ownership, DeallocType type, int nbOfElem); + void useExternalArrayWithRWAccess(const T *array, int nbOfElem); void writeOnPlace(int id, T element0, const T *others, int sizeOfOthers); ~MemArray() { destroy(); } private: @@ -217,6 +219,7 @@ namespace ParaMEDMEM MEDCOUPLING_EXPORT const double *begin() const { return getConstPointer(); } MEDCOUPLING_EXPORT const double *end() const { return getConstPointer()+getNbOfElems(); } MEDCOUPLING_EXPORT void useArray(const double *array, bool ownership, DeallocType type, int nbOfTuple, int nbOfCompo); + MEDCOUPLING_EXPORT void useExternalArrayWithRWAccess(const double *array, int nbOfTuple, int nbOfCompo); MEDCOUPLING_EXPORT void writeOnPlace(int id, double element0, const double *others, int sizeOfOthers) { _mem.writeOnPlace(id,element0,others,sizeOfOthers); } MEDCOUPLING_EXPORT void checkNoNullValues() const throw(INTERP_KERNEL::Exception); MEDCOUPLING_EXPORT void getMinMaxPerComponent(double *bounds) const throw(INTERP_KERNEL::Exception); @@ -461,6 +464,7 @@ namespace ParaMEDMEM MEDCOUPLING_EXPORT DataArrayInt *duplicateEachTupleNTimes(int nbTimes) const throw(INTERP_KERNEL::Exception); MEDCOUPLING_EXPORT std::set getDifferentValues() const throw(INTERP_KERNEL::Exception); MEDCOUPLING_EXPORT void useArray(const int *array, bool ownership, DeallocType type, int nbOfTuple, int nbOfCompo); + MEDCOUPLING_EXPORT void useExternalArrayWithRWAccess(const int *array, int nbOfTuple, int nbOfCompo); MEDCOUPLING_EXPORT void writeOnPlace(int id, int element0, const int *others, int sizeOfOthers) { _mem.writeOnPlace(id,element0,others,sizeOfOthers); } MEDCOUPLING_EXPORT static DataArrayInt *Add(const DataArrayInt *a1, const DataArrayInt *a2) throw(INTERP_KERNEL::Exception); MEDCOUPLING_EXPORT void addEqual(const DataArrayInt *other) throw(INTERP_KERNEL::Exception); diff --git a/src/MEDCoupling/MEDCouplingMemArray.txx b/src/MEDCoupling/MEDCouplingMemArray.txx index 4c5339a8b..e569249d8 100644 --- a/src/MEDCoupling/MEDCouplingMemArray.txx +++ b/src/MEDCoupling/MEDCouplingMemArray.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGMEMARRAY_TXX__ #define __PARAMEDMEM_MEDCOUPLINGMEMARRAY_TXX__ @@ -67,6 +68,16 @@ namespace ParaMEDMEM _dealloc=type; } + template + void MemArray::useExternalArrayWithRWAccess(const T *array, int nbOfElem) + { + _nb_of_elem=nbOfElem; + destroy(); + _pointer.setInternal(const_cast(array)); + _ownership=false; + _dealloc=CPP_DEALLOC; + } + template void MemArray::writeOnPlace(int id, T element0, const T *others, int sizeOfOthers) { diff --git a/src/MEDCoupling/MEDCouplingMesh.cxx b/src/MEDCoupling/MEDCouplingMesh.cxx index be03bdd7d..d226fd90d 100644 --- a/src/MEDCoupling/MEDCouplingMesh.cxx +++ b/src/MEDCoupling/MEDCouplingMesh.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMesh.hxx" #include "MEDCouplingUMesh.hxx" diff --git a/src/MEDCoupling/MEDCouplingMesh.hxx b/src/MEDCoupling/MEDCouplingMesh.hxx index 4d8d69c14..988ab77e9 100644 --- a/src/MEDCoupling/MEDCouplingMesh.hxx +++ b/src/MEDCoupling/MEDCouplingMesh.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGMESH_HXX__ #define __PARAMEDMEM_MEDCOUPLINGMESH_HXX__ diff --git a/src/MEDCoupling/MEDCouplingMultiFields.cxx b/src/MEDCoupling/MEDCouplingMultiFields.cxx index 3586308b7..94856e43d 100644 --- a/src/MEDCoupling/MEDCouplingMultiFields.cxx +++ b/src/MEDCoupling/MEDCouplingMultiFields.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMultiFields.hxx" #include "MEDCouplingFieldTemplate.hxx" diff --git a/src/MEDCoupling/MEDCouplingMultiFields.hxx b/src/MEDCoupling/MEDCouplingMultiFields.hxx index 69445a724..16e25852c 100644 --- a/src/MEDCoupling/MEDCouplingMultiFields.hxx +++ b/src/MEDCoupling/MEDCouplingMultiFields.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGMULTIFIELDS_HXX__ #define __PARAMEDMEM_MEDCOUPLINGMULTIFIELDS_HXX__ diff --git a/src/MEDCoupling/MEDCouplingNatureOfField.cxx b/src/MEDCoupling/MEDCouplingNatureOfField.cxx index 8344d7588..818614ba0 100644 --- a/src/MEDCoupling/MEDCouplingNatureOfField.cxx +++ b/src/MEDCoupling/MEDCouplingNatureOfField.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingNatureOfField.hxx" diff --git a/src/MEDCoupling/MEDCouplingNatureOfField.hxx b/src/MEDCoupling/MEDCouplingNatureOfField.hxx index 314c62131..6bcf75abe 100644 --- a/src/MEDCoupling/MEDCouplingNatureOfField.hxx +++ b/src/MEDCoupling/MEDCouplingNatureOfField.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGNATUREOFFIELD_HXX__ #define __PARAMEDMEM_MEDCOUPLINGNATUREOFFIELD_HXX__ diff --git a/src/MEDCoupling/MEDCouplingNormalizedCartesianMesh.hxx b/src/MEDCoupling/MEDCouplingNormalizedCartesianMesh.hxx index 60cbfdb34..a0ef2a550 100644 --- a/src/MEDCoupling/MEDCouplingNormalizedCartesianMesh.hxx +++ b/src/MEDCoupling/MEDCouplingNormalizedCartesianMesh.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGNORMALIZEDCARTESIANMESH_HXX__ #define __PARAMEDMEM_MEDCOUPLINGNORMALIZEDCARTESIANMESH_HXX__ diff --git a/src/MEDCoupling/MEDCouplingNormalizedUnstructuredMesh.hxx b/src/MEDCoupling/MEDCouplingNormalizedUnstructuredMesh.hxx index cffd88a3a..4a2466b33 100644 --- a/src/MEDCoupling/MEDCouplingNormalizedUnstructuredMesh.hxx +++ b/src/MEDCoupling/MEDCouplingNormalizedUnstructuredMesh.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGNORMALIZEDUNSTRUCTUREDMESH_HXX__ #define __PARAMEDMEM_MEDCOUPLINGNORMALIZEDUNSTRUCTUREDMESH_HXX__ diff --git a/src/MEDCoupling/MEDCouplingNormalizedUnstructuredMesh.txx b/src/MEDCoupling/MEDCouplingNormalizedUnstructuredMesh.txx index 4ad2677b6..8a9da83cf 100644 --- a/src/MEDCoupling/MEDCouplingNormalizedUnstructuredMesh.txx +++ b/src/MEDCoupling/MEDCouplingNormalizedUnstructuredMesh.txx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGNORMALIZEDUNSTRUCTUREDMESH_TXX__ #define __MEDCOUPLINGNORMALIZEDUNSTRUCTUREDMESH_TXX__ diff --git a/src/MEDCoupling/MEDCouplingPointSet.cxx b/src/MEDCoupling/MEDCouplingPointSet.cxx index f4aedb6a5..f2acae753 100644 --- a/src/MEDCoupling/MEDCouplingPointSet.cxx +++ b/src/MEDCoupling/MEDCouplingPointSet.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingPointSet.hxx" #include "MEDCouplingAutoRefCountObjectPtr.hxx" diff --git a/src/MEDCoupling/MEDCouplingPointSet.hxx b/src/MEDCoupling/MEDCouplingPointSet.hxx index 88a0f3ecd..4e00e4770 100644 --- a/src/MEDCoupling/MEDCouplingPointSet.hxx +++ b/src/MEDCoupling/MEDCouplingPointSet.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGPOINTSET_HXX__ #define __PARAMEDMEM_MEDCOUPLINGPOINTSET_HXX__ diff --git a/src/MEDCoupling/MEDCouplingRefCountObject.cxx b/src/MEDCoupling/MEDCouplingRefCountObject.cxx index ab245084e..af387699b 100644 --- a/src/MEDCoupling/MEDCouplingRefCountObject.cxx +++ b/src/MEDCoupling/MEDCouplingRefCountObject.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingRefCountObject.hxx" diff --git a/src/MEDCoupling/MEDCouplingRefCountObject.hxx b/src/MEDCoupling/MEDCouplingRefCountObject.hxx index c466315b3..f9084503e 100644 --- a/src/MEDCoupling/MEDCouplingRefCountObject.hxx +++ b/src/MEDCoupling/MEDCouplingRefCountObject.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGREFCOUNTOBJECT_HXX__ #define __PARAMEDMEM_MEDCOUPLINGREFCOUNTOBJECT_HXX__ diff --git a/src/MEDCoupling/MEDCouplingRemapper.cxx b/src/MEDCoupling/MEDCouplingRemapper.cxx index 3c5fa11f2..0ef48eec7 100644 --- a/src/MEDCoupling/MEDCouplingRemapper.cxx +++ b/src/MEDCoupling/MEDCouplingRemapper.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingRemapper.hxx" #include "MEDCouplingMemArray.hxx" @@ -705,3 +706,74 @@ const std::vector >& MEDCouplingRemapper::getCrudeMatrix() { return _matrix; } + +/*! + * This method is supposed to be called , if needed, right after MEDCouplingRemapper::prepare or MEDCouplingRemapper::prepareEx. + * If not the behaviour is unpredictable. + * This method works on precomputed \a this->_matrix. All coefficients in the matrix is lower than \a maxValAbs this coefficient is + * set to 0. That is to say that its entry disappear from the map storing the corresponding row in the data storage of sparse crude matrix. + * This method is useful to correct at a high level some problems linked to precision. Indeed, with some \ref NatureOfField "natures of field" some threshold effect + * can occur. + * + * \param [in] maxValAbs is a limit behind which a coefficient is set to 0. \a maxValAbs is expected to be positive, if not this method do nothing. + * \return a positive value that tells the number of coefficients put to 0. The 0 returned value means that the matrix has remained unchanged. + * \sa MEDCouplingRemapper::nullifiedTinyCoeffInCrudeMatrix + */ +int MEDCouplingRemapper::nullifiedTinyCoeffInCrudeMatrixAbs(double maxValAbs) throw(INTERP_KERNEL::Exception) +{ + int ret=0; + std::vector > matrixNew(_matrix.size()); + int i=0; + for(std::vector >::const_iterator it1=_matrix.begin();it1!=_matrix.end();it1++,i++) + { + std::map& rowNew=matrixNew[i]; + for(std::map::const_iterator it2=(*it1).begin();it2!=(*it1).end();it2++) + { + if(fabs((*it2).second)>maxValAbs) + rowNew[(*it2).first]=(*it2).second; + else + ret++; + } + } + if(ret>0) + _matrix=matrixNew; + return ret; +} + +/*! + * This method is supposed to be called , if needed, right after MEDCouplingRemapper::prepare or MEDCouplingRemapper::prepareEx. + * If not the behaviour is unpredictable. + * This method works on precomputed \a this->_matrix. All coefficients in the matrix is lower than delta multiplied by \a scaleFactor this coefficient is + * set to 0. That is to say that its entry disappear from the map storing the corresponding row in the data storage of sparse crude matrix. + * delta is the value returned by MEDCouplingRemapper::getMaxValueInCrudeMatrix method. + * This method is useful to correct at a high level some problems linked to precision. Indeed, with some \ref NatureOfField "natures of field" some threshold effect + * can occur. + * + * \param [in] scaleFactor is the scale factor from which coefficients lower than \a scaleFactor times range width of coefficients are set to zero. + * \return a positive value that tells the number of coefficients put to 0. The 0 returned value means that the matrix has remained unchanged. If -1 is returned it means + * that all coefficients are null. + * \sa MEDCouplingRemapper::nullifiedTinyCoeffInCrudeMatrixAbs + */ +int MEDCouplingRemapper::nullifiedTinyCoeffInCrudeMatrix(double scaleFactor) throw(INTERP_KERNEL::Exception) +{ + double maxVal=getMaxValueInCrudeMatrix(); + if(maxVal==0.) + return -1; + return nullifiedTinyCoeffInCrudeMatrixAbs(scaleFactor*maxVal); +} + +/*! + * This method is supposed to be called , if needed, right after MEDCouplingRemapper::prepare or MEDCouplingRemapper::prepareEx. + * If not the behaviour is unpredictable. + * This method returns the maximum of the absolute values of coefficients into the sparse crude matrix. + * The returned value is positive. + */ +double MEDCouplingRemapper::getMaxValueInCrudeMatrix() const throw(INTERP_KERNEL::Exception) +{ + double ret=0.; + for(std::vector >::const_iterator it1=_matrix.begin();it1!=_matrix.end();it1++) + for(std::map::const_iterator it2=(*it1).begin();it2!=(*it1).end();it2++) + if(fabs((*it2).second)>ret) + ret=fabs((*it2).second); + return ret; +} diff --git a/src/MEDCoupling/MEDCouplingRemapper.hxx b/src/MEDCoupling/MEDCouplingRemapper.hxx index b09539ec4..c2005df8e 100644 --- a/src/MEDCoupling/MEDCouplingRemapper.hxx +++ b/src/MEDCoupling/MEDCouplingRemapper.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGREMAPPER_HXX__ #define __PARAMEDMEM_MEDCOUPLINGREMAPPER_HXX__ @@ -54,6 +55,10 @@ namespace ParaMEDMEM MEDCOUPLINGREMAPPER_EXPORT bool setOptionInt(const std::string& key, int value); MEDCOUPLINGREMAPPER_EXPORT bool setOptionDouble(const std::string& key, double value); MEDCOUPLINGREMAPPER_EXPORT bool setOptionString(const std::string& key, const std::string& value); + // + MEDCOUPLINGREMAPPER_EXPORT int nullifiedTinyCoeffInCrudeMatrixAbs(double maxValAbs) throw(INTERP_KERNEL::Exception); + MEDCOUPLINGREMAPPER_EXPORT int nullifiedTinyCoeffInCrudeMatrix(double scaleFactor) throw(INTERP_KERNEL::Exception); + MEDCOUPLINGREMAPPER_EXPORT double getMaxValueInCrudeMatrix() const throw(INTERP_KERNEL::Exception); public: MEDCOUPLINGREMAPPER_EXPORT const std::vector >& getCrudeMatrix() const; MEDCOUPLINGREMAPPER_EXPORT static void PrintMatrix(const std::vector >& m); diff --git a/src/MEDCoupling/MEDCouplingTimeDiscretization.cxx b/src/MEDCoupling/MEDCouplingTimeDiscretization.cxx index 1f4e1fef5..7712aa874 100644 --- a/src/MEDCoupling/MEDCouplingTimeDiscretization.cxx +++ b/src/MEDCoupling/MEDCouplingTimeDiscretization.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingTimeDiscretization.hxx" #include "MEDCouplingMemArray.hxx" diff --git a/src/MEDCoupling/MEDCouplingTimeDiscretization.hxx b/src/MEDCoupling/MEDCouplingTimeDiscretization.hxx index 6dab084c3..79d6fa07a 100644 --- a/src/MEDCoupling/MEDCouplingTimeDiscretization.hxx +++ b/src/MEDCoupling/MEDCouplingTimeDiscretization.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGTIMEDISCRETIZATION_HXX__ #define __PARAMEDMEM_MEDCOUPLINGTIMEDISCRETIZATION_HXX__ diff --git a/src/MEDCoupling/MEDCouplingTimeLabel.cxx b/src/MEDCoupling/MEDCouplingTimeLabel.cxx index e91f08a4e..9c2716c1e 100644 --- a/src/MEDCoupling/MEDCouplingTimeLabel.cxx +++ b/src/MEDCoupling/MEDCouplingTimeLabel.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingTimeLabel.hxx" diff --git a/src/MEDCoupling/MEDCouplingTimeLabel.hxx b/src/MEDCoupling/MEDCouplingTimeLabel.hxx index c334ffdbd..4755d2edd 100644 --- a/src/MEDCoupling/MEDCouplingTimeLabel.hxx +++ b/src/MEDCoupling/MEDCouplingTimeLabel.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_TIMELABEL_HXX__ #define __PARAMEDMEM_TIMELABEL_HXX__ diff --git a/src/MEDCoupling/MEDCouplingUMesh.cxx b/src/MEDCoupling/MEDCouplingUMesh.cxx index 24e0e52dd..d8f87ad56 100644 --- a/src/MEDCoupling/MEDCouplingUMesh.cxx +++ b/src/MEDCoupling/MEDCouplingUMesh.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingUMesh.hxx" #include "MEDCouplingMemArray.txx" diff --git a/src/MEDCoupling/MEDCouplingUMesh.hxx b/src/MEDCoupling/MEDCouplingUMesh.hxx index a03196d89..eb28c5a30 100644 --- a/src/MEDCoupling/MEDCouplingUMesh.hxx +++ b/src/MEDCoupling/MEDCouplingUMesh.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGUMESH_HXX__ #define __PARAMEDMEM_MEDCOUPLINGUMESH_HXX__ diff --git a/src/MEDCoupling/MEDCouplingUMeshDesc.cxx b/src/MEDCoupling/MEDCouplingUMeshDesc.cxx index 4807d075b..22905de85 100644 --- a/src/MEDCoupling/MEDCouplingUMeshDesc.cxx +++ b/src/MEDCoupling/MEDCouplingUMeshDesc.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingUMeshDesc.hxx" #include "CellModel.hxx" diff --git a/src/MEDCoupling/MEDCouplingUMeshDesc.hxx b/src/MEDCoupling/MEDCouplingUMeshDesc.hxx index 27216c8f3..37e27e1f3 100644 --- a/src/MEDCoupling/MEDCouplingUMeshDesc.hxx +++ b/src/MEDCoupling/MEDCouplingUMeshDesc.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDMEM_MEDCOUPLINGUMESHDESC_HXX__ #define __PARAMEDMEM_MEDCOUPLINGUMESHDESC_HXX__ diff --git a/src/MEDCoupling/Makefile.am b/src/MEDCoupling/Makefile.am index f293a7ca0..8f87532b8 100644 --- a/src/MEDCoupling/Makefile.am +++ b/src/MEDCoupling/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) include $(top_srcdir)/adm_local/unix/make_common_starter.am diff --git a/src/MEDCoupling/Test/CMakeLists.txt b/src/MEDCoupling/Test/CMakeLists.txt index c5b2385ee..f0c4138b3 100644 --- a/src/MEDCoupling/Test/CMakeLists.txt +++ b/src/MEDCoupling/Test/CMakeLists.txt @@ -16,9 +16,11 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) INCLUDE_DIRECTORIES( - $(CPPUNIT_INCLUDE_DIRS) + ${CPPUNIT_INCLUDE_DIRS} + ${PTHREADS_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/../../INTERP_KERNEL ${CMAKE_CURRENT_SOURCE_DIR}/../../INTERP_KERNEL/Bases @@ -51,18 +53,18 @@ SET(TestMEDCouplingExamples_SOURCES ) ADD_EXECUTABLE(TestMEDCoupling ${TestMEDCoupling_SOURCES}) -SET_TARGET_PROPERTIES(TestMEDCoupling PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS}") -TARGET_LINK_LIBRARIES(TestMEDCoupling medcoupling ${CPPUNIT_LIBS}) +SET_TARGET_PROPERTIES(TestMEDCoupling PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestMEDCoupling medcoupling ${CPPUNIT_LIBS} ${PLATFORM_LIBS}) ADD_TEST(TestMEDCoupling TestMEDCoupling) ADD_EXECUTABLE(TestMEDCouplingRemapper ${TestMEDCouplingRemapper_SOURCES}) -SET_TARGET_PROPERTIES(TestMEDCouplingRemapper PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS}") -TARGET_LINK_LIBRARIES(TestMEDCouplingRemapper medcouplingremapper ${CPPUNIT_LIBS}) +SET_TARGET_PROPERTIES(TestMEDCouplingRemapper PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestMEDCouplingRemapper medcouplingremapper ${CPPUNIT_LIBS} ${PLATFORM_LIBS}) ADD_TEST(TestMEDCouplingRemapper TestMEDCouplingRemapper) ADD_EXECUTABLE(TestMEDCouplingExamples ${TestMEDCouplingExamples_SOURCES}) -SET_TARGET_PROPERTIES(TestMEDCouplingExamples PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS}") -TARGET_LINK_LIBRARIES(TestMEDCouplingExamples medcoupling ${CPPUNIT_LIBS}) +SET_TARGET_PROPERTIES(TestMEDCouplingExamples PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestMEDCouplingExamples medcoupling ${CPPUNIT_LIBS} ${PLATFORM_LIBS}) ADD_TEST(TestMEDCouplingExamples TestMEDCouplingExamples) INSTALL(TARGETS TestMEDCoupling TestMEDCouplingRemapper DESTINATION ${MED_salomebin_BINS}) diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest.hxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest.hxx index 3e7a78448..12daa71e6 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTest.hxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTest.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGBASICSTEST_HXX__ #define __MEDCOUPLINGBASICSTEST_HXX__ diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest0.cxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest0.cxx index bcd2fc326..84624cf0b 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTest0.cxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTest0.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingBasicsTest.hxx" #include "MEDCouplingUMesh.hxx" diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest1.cxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest1.cxx index 12769a45c..b1b83ca9e 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTest1.cxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTest1.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingBasicsTest1.hxx" #include "MEDCouplingUMesh.hxx" diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest1.hxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest1.hxx index 6cea32d74..9e0082458 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTest1.hxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTest1.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGBASICSTEST1_HXX__ #define __MEDCOUPLINGBASICSTEST1_HXX__ diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest2.cxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest2.cxx index fd90286e8..89cf9818f 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTest2.cxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTest2.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingBasicsTest2.hxx" #include "MEDCouplingUMesh.hxx" diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest2.hxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest2.hxx index 4a8d58c45..ae2f56ddb 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTest2.hxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTest2.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGBASICSTEST2_HXX__ #define __MEDCOUPLINGBASICSTEST2_HXX__ diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest3.cxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest3.cxx index a02421060..ce2fc84ec 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTest3.cxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTest3.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingBasicsTest3.hxx" #include "MEDCouplingUMesh.hxx" diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest3.hxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest3.hxx index b6d04e3bc..1caa2c5bb 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTest3.hxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTest3.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGBASICSTEST3_HXX__ #define __MEDCOUPLINGBASICSTEST3_HXX__ diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest4.cxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest4.cxx index c867a699a..f781b061a 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTest4.cxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTest4.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingBasicsTest4.hxx" #include "MEDCouplingUMesh.hxx" diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest4.hxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest4.hxx index f1eb2c0c7..d3551bbcb 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTest4.hxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTest4.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGBASICSTEST4_HXX__ #define __MEDCOUPLINGBASICSTEST4_HXX__ diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest5.cxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest5.cxx index 25e9a5bb9..5e0d2a253 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTest5.cxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTest5.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingBasicsTest5.hxx" #include "MEDCouplingUMesh.hxx" diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTest5.hxx b/src/MEDCoupling/Test/MEDCouplingBasicsTest5.hxx index cd4b55646..0bc8432f6 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTest5.hxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTest5.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGBASICSTEST5_HXX__ #define __MEDCOUPLINGBASICSTEST5_HXX__ diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTestData1.hxx b/src/MEDCoupling/Test/MEDCouplingBasicsTestData1.hxx index 14541f4cf..2ec891bc1 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTestData1.hxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTestData1.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) int connITT[201]={0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000, 1029, 1058, 1087, 1116, 1145, 1174, 1203, 1232, 1261, 1290, 1319, 1348, 1377, 1406, 1435, 1464, 1493, 1522, 1551, 1580, 1609, 1638, 1667, 1696, 1725, 1754, 1783, 1812, 1841, 1870, 1899, diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTestInterp.cxx b/src/MEDCoupling/Test/MEDCouplingBasicsTestInterp.cxx index 33c4a793d..9d6e9a16d 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTestInterp.cxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTestInterp.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingBasicsTestInterp.hxx" #include "MEDCouplingUMesh.hxx" @@ -1524,7 +1525,7 @@ void MEDCouplingBasicsTestInterp::testInterpolationCC() { sum += s_v->second; double vvv; -#ifdef WNT +#ifdef WIN32 double vv = s_v->second / precis; if(vv>=0.0) { diff --git a/src/MEDCoupling/Test/MEDCouplingBasicsTestInterp.hxx b/src/MEDCoupling/Test/MEDCouplingBasicsTestInterp.hxx index 96a6781eb..af82f9d6b 100644 --- a/src/MEDCoupling/Test/MEDCouplingBasicsTestInterp.hxx +++ b/src/MEDCoupling/Test/MEDCouplingBasicsTestInterp.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGBASICSTESTINTERP_HXX__ #define __MEDCOUPLINGBASICSTESTINTERP_HXX__ diff --git a/src/MEDCoupling/Test/MEDCouplingExamplesTest.cxx b/src/MEDCoupling/Test/MEDCouplingExamplesTest.cxx index 1f89f7578..635f91789 100644 --- a/src/MEDCoupling/Test/MEDCouplingExamplesTest.cxx +++ b/src/MEDCoupling/Test/MEDCouplingExamplesTest.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingBasicsTest.hxx" #include "MEDCouplingUMesh.hxx" diff --git a/src/MEDCoupling/Test/MEDCouplingRemapperTest.cxx b/src/MEDCoupling/Test/MEDCouplingRemapperTest.cxx index e348d8e51..b5c4a2416 100644 --- a/src/MEDCoupling/Test/MEDCouplingRemapperTest.cxx +++ b/src/MEDCoupling/Test/MEDCouplingRemapperTest.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingRemapperTest.hxx" #include "MEDCouplingUMesh.hxx" diff --git a/src/MEDCoupling/Test/MEDCouplingRemapperTest.hxx b/src/MEDCoupling/Test/MEDCouplingRemapperTest.hxx index 44c4bc312..d7d161d6f 100644 --- a/src/MEDCoupling/Test/MEDCouplingRemapperTest.hxx +++ b/src/MEDCoupling/Test/MEDCouplingRemapperTest.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGREMAPPERTEST_HXX__ #define __MEDCOUPLINGREMAPPERTEST_HXX__ diff --git a/src/MEDCoupling/Test/Makefile.am b/src/MEDCoupling/Test/Makefile.am index 1e0cd1d0c..4eff0b4a3 100755 --- a/src/MEDCoupling/Test/Makefile.am +++ b/src/MEDCoupling/Test/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) include $(top_srcdir)/adm_local/unix/make_common_starter.am diff --git a/src/MEDCoupling/Test/TestMEDCoupling.cxx b/src/MEDCoupling/Test/TestMEDCoupling.cxx index 50ba03493..c192b27a4 100644 --- a/src/MEDCoupling/Test/TestMEDCoupling.cxx +++ b/src/MEDCoupling/Test/TestMEDCoupling.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingBasicsTest1.hxx" #include "MEDCouplingBasicsTest2.hxx" diff --git a/src/MEDCoupling/Test/TestMEDCouplingRemapper.cxx b/src/MEDCoupling/Test/TestMEDCouplingRemapper.cxx index 35ff00828..14e0c3b85 100644 --- a/src/MEDCoupling/Test/TestMEDCouplingRemapper.cxx +++ b/src/MEDCoupling/Test/TestMEDCouplingRemapper.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingRemapperTest.hxx" diff --git a/src/MEDCouplingCorba/CMakeLists.txt b/src/MEDCouplingCorba/CMakeLists.txt index e4d866dff..07af5fb49 100644 --- a/src/MEDCouplingCorba/CMakeLists.txt +++ b/src/MEDCouplingCorba/CMakeLists.txt @@ -16,9 +16,13 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) ADD_SUBDIRECTORY(Client) -ADD_SUBDIRECTORY(Test) + +IF (CPPUNIT_IS_OK) + ADD_SUBDIRECTORY(Test) +ENDIF (CPPUNIT_IS_OK) INCLUDE_DIRECTORIES( ${OMNIORB_INCLUDE_DIRS} @@ -47,8 +51,8 @@ SET(medcouplingcorba_SOURCES ) ADD_LIBRARY(medcouplingcorba SHARED ${medcouplingcorba_SOURCES}) -SET_TARGET_PROPERTIES(medcouplingcorba PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}") -TARGET_LINK_LIBRARIES(medcouplingcorba medcoupling SalomeIDLMED) +SET_TARGET_PROPERTIES(medcouplingcorba PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(medcouplingcorba medcoupling SalomeIDLMED ${PLATFORM_LIBS}) INSTALL(TARGETS medcouplingcorba DESTINATION ${MED_salomelib_LIBS}) FILE(GLOB medcouplingcorba_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") diff --git a/src/MEDCouplingCorba/Client/CMakeLists.txt b/src/MEDCouplingCorba/Client/CMakeLists.txt index f2fa96900..c7486da92 100644 --- a/src/MEDCouplingCorba/Client/CMakeLists.txt +++ b/src/MEDCouplingCorba/Client/CMakeLists.txt @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) INCLUDE_DIRECTORIES( ${OMNIORB_INCLUDE_DIRS} @@ -40,8 +41,8 @@ SET(medcouplingclient_SOURCES ) ADD_LIBRARY(medcouplingclient SHARED ${medcouplingclient_SOURCES}) -SET_TARGET_PROPERTIES(medcouplingclient PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}") -TARGET_LINK_LIBRARIES(medcouplingclient medcoupling SalomeIDLMED ${OMNIORB_LIBS}) +SET_TARGET_PROPERTIES(medcouplingclient PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(medcouplingclient medcoupling SalomeIDLMED ${OMNIORB_LIBS} ${PLATFORM_LIBS}) INSTALL(TARGETS medcouplingclient DESTINATION ${MED_salomelib_LIBS}) FILE(GLOB medcouplingclient_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") diff --git a/src/MEDCouplingCorba/Client/DataArrayDoubleClient.cxx b/src/MEDCouplingCorba/Client/DataArrayDoubleClient.cxx index 19132a091..d421000c8 100644 --- a/src/MEDCouplingCorba/Client/DataArrayDoubleClient.cxx +++ b/src/MEDCouplingCorba/Client/DataArrayDoubleClient.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "DataArrayDoubleClient.hxx" #include "MEDCouplingMemArray.hxx" diff --git a/src/MEDCouplingCorba/Client/DataArrayDoubleClient.hxx b/src/MEDCouplingCorba/Client/DataArrayDoubleClient.hxx index 7e6f2a97c..518b04f00 100644 --- a/src/MEDCouplingCorba/Client/DataArrayDoubleClient.hxx +++ b/src/MEDCouplingCorba/Client/DataArrayDoubleClient.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __DATAARRAYDOUBLECLIENT_HXX__ #define __DATAARRAYDOUBLECLIENT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/Client/DataArrayIntClient.cxx b/src/MEDCouplingCorba/Client/DataArrayIntClient.cxx index 7a36eb6ad..4691c9751 100644 --- a/src/MEDCouplingCorba/Client/DataArrayIntClient.cxx +++ b/src/MEDCouplingCorba/Client/DataArrayIntClient.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "DataArrayIntClient.hxx" #include "MEDCouplingMemArray.hxx" diff --git a/src/MEDCouplingCorba/Client/DataArrayIntClient.hxx b/src/MEDCouplingCorba/Client/DataArrayIntClient.hxx index bbf74eed3..b1ec80d23 100644 --- a/src/MEDCouplingCorba/Client/DataArrayIntClient.hxx +++ b/src/MEDCouplingCorba/Client/DataArrayIntClient.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __DATAARRAYINTCLIENT_HXX__ #define __DATAARRAYINTCLIENT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/Client/MEDCouplingCMeshClient.cxx b/src/MEDCouplingCorba/Client/MEDCouplingCMeshClient.cxx index 20305abf3..d6bb765b2 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingCMeshClient.cxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingCMeshClient.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingCMeshClient.hxx" #include "MEDCouplingMeshClient.hxx" diff --git a/src/MEDCouplingCorba/Client/MEDCouplingCMeshClient.hxx b/src/MEDCouplingCorba/Client/MEDCouplingCMeshClient.hxx index 778ba4c5f..79fa6fef4 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingCMeshClient.hxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingCMeshClient.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGCMESHCLIENT_HXX__ #define __MEDCOUPLINGCMESHCLIENT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/Client/MEDCouplingClient.hxx b/src/MEDCouplingCorba/Client/MEDCouplingClient.hxx index 64553bd06..9e7837a6e 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingClient.hxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingClient.hxx @@ -16,11 +16,12 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGCLIENT_HXX__ #define __MEDCOUPLINGCLIENT_HXX__ -#ifdef WNT +#ifdef WIN32 # if defined medcouplingclient_EXPORTS # define MEDCOUPLINGCLIENT_EXPORT __declspec( dllexport ) # else diff --git a/src/MEDCouplingCorba/Client/MEDCouplingExtrudedMeshClient.cxx b/src/MEDCouplingCorba/Client/MEDCouplingExtrudedMeshClient.cxx index 4f0657258..cd1768046 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingExtrudedMeshClient.cxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingExtrudedMeshClient.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingExtrudedMeshClient.hxx" #include "MEDCouplingMeshClient.hxx" diff --git a/src/MEDCouplingCorba/Client/MEDCouplingExtrudedMeshClient.hxx b/src/MEDCouplingCorba/Client/MEDCouplingExtrudedMeshClient.hxx index 1c938854f..4874c0697 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingExtrudedMeshClient.hxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingExtrudedMeshClient.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGEXTRUDEDMESHCLIENT_HXX__ #define __MEDCOUPLINGEXTRUDEDMESHCLIENT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/Client/MEDCouplingFieldDoubleClient.cxx b/src/MEDCouplingCorba/Client/MEDCouplingFieldDoubleClient.cxx index 0ca4da1f1..7cdcf9cb4 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingFieldDoubleClient.cxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingFieldDoubleClient.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingFieldDoubleClient.hxx" #include "MEDCouplingMeshClient.hxx" diff --git a/src/MEDCouplingCorba/Client/MEDCouplingFieldDoubleClient.hxx b/src/MEDCouplingCorba/Client/MEDCouplingFieldDoubleClient.hxx index 68c0b759f..e3496684a 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingFieldDoubleClient.hxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingFieldDoubleClient.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGFIELDDOUBLECLIENT_HXX__ #define __MEDCOUPLINGFIELDDOUBLECLIENT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/Client/MEDCouplingFieldOverTimeClient.cxx b/src/MEDCouplingCorba/Client/MEDCouplingFieldOverTimeClient.cxx index 6d807936d..b599fa573 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingFieldOverTimeClient.cxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingFieldOverTimeClient.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingFieldOverTimeClient.hxx" #include "MEDCouplingMultiFieldsClient.hxx" diff --git a/src/MEDCouplingCorba/Client/MEDCouplingFieldOverTimeClient.hxx b/src/MEDCouplingCorba/Client/MEDCouplingFieldOverTimeClient.hxx index ebb1b6ea3..0597cdf70 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingFieldOverTimeClient.hxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingFieldOverTimeClient.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGFIELDOVERTIMECLIENT_HXX__ #define __MEDCOUPLINGFIELDOVERTIMECLIENT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/Client/MEDCouplingFieldTemplateClient.cxx b/src/MEDCouplingCorba/Client/MEDCouplingFieldTemplateClient.cxx index a8cb1f967..4dd75818f 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingFieldTemplateClient.cxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingFieldTemplateClient.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingFieldTemplateClient.hxx" #include "MEDCouplingMeshClient.hxx" diff --git a/src/MEDCouplingCorba/Client/MEDCouplingFieldTemplateClient.hxx b/src/MEDCouplingCorba/Client/MEDCouplingFieldTemplateClient.hxx index e309860e8..46ce9378c 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingFieldTemplateClient.hxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingFieldTemplateClient.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGFIELDTEMPLATECLIENT_HXX__ #define __MEDCOUPLINGFIELDTEMPLATECLIENT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/Client/MEDCouplingMeshClient.cxx b/src/MEDCouplingCorba/Client/MEDCouplingMeshClient.cxx index 538520868..9f1c6e8df 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingMeshClient.cxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingMeshClient.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMeshClient.hxx" #include "MEDCouplingUMeshClient.hxx" diff --git a/src/MEDCouplingCorba/Client/MEDCouplingMeshClient.hxx b/src/MEDCouplingCorba/Client/MEDCouplingMeshClient.hxx index 6cf00775f..5ce8a6342 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingMeshClient.hxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingMeshClient.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGMESHCLIENT_HXX__ #define __MEDCOUPLINGMESHCLIENT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/Client/MEDCouplingMultiFieldsClient.cxx b/src/MEDCouplingCorba/Client/MEDCouplingMultiFieldsClient.cxx index 49cb1bca5..c2cade421 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingMultiFieldsClient.cxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingMultiFieldsClient.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMultiFieldsClient.hxx" #include "MEDCouplingFieldTemplate.hxx" diff --git a/src/MEDCouplingCorba/Client/MEDCouplingMultiFieldsClient.hxx b/src/MEDCouplingCorba/Client/MEDCouplingMultiFieldsClient.hxx index 0dce121db..e6c5a97f7 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingMultiFieldsClient.hxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingMultiFieldsClient.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGMULTIFIELDSCLIENT_HXX__ #define __MEDCOUPLINGMULTIFIELDSCLIENT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/Client/MEDCouplingUMeshClient.cxx b/src/MEDCouplingCorba/Client/MEDCouplingUMeshClient.cxx index 938856f56..ebb551c9b 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingUMeshClient.cxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingUMeshClient.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingUMeshClient.hxx" #include "MEDCouplingMeshClient.hxx" diff --git a/src/MEDCouplingCorba/Client/MEDCouplingUMeshClient.hxx b/src/MEDCouplingCorba/Client/MEDCouplingUMeshClient.hxx index 056a16956..6da12361e 100644 --- a/src/MEDCouplingCorba/Client/MEDCouplingUMeshClient.hxx +++ b/src/MEDCouplingCorba/Client/MEDCouplingUMeshClient.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGUMESHCLIENT_HXX__ #define __MEDCOUPLINGUMESHCLIENT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/Client/Makefile.am b/src/MEDCouplingCorba/Client/Makefile.am index c3cf1de8c..69c629574 100644 --- a/src/MEDCouplingCorba/Client/Makefile.am +++ b/src/MEDCouplingCorba/Client/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) include $(top_srcdir)/adm_local/unix/make_common_starter.am diff --git a/src/MEDCouplingCorba/DataArrayDoubleServant.cxx b/src/MEDCouplingCorba/DataArrayDoubleServant.cxx index 2c1f8d62d..e972a9aee 100644 --- a/src/MEDCouplingCorba/DataArrayDoubleServant.cxx +++ b/src/MEDCouplingCorba/DataArrayDoubleServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "DataArrayDoubleServant.hxx" #include "MEDCouplingMemArray.hxx" diff --git a/src/MEDCouplingCorba/DataArrayDoubleServant.hxx b/src/MEDCouplingCorba/DataArrayDoubleServant.hxx index 4117aae32..1e01a4e38 100644 --- a/src/MEDCouplingCorba/DataArrayDoubleServant.hxx +++ b/src/MEDCouplingCorba/DataArrayDoubleServant.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __DATAARRAYDOUBLESERVANT_HXX__ #define __DATAARRAYDOUBLESERVANT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/DataArrayIntServant.cxx b/src/MEDCouplingCorba/DataArrayIntServant.cxx index 32a5dbe89..77c5726af 100644 --- a/src/MEDCouplingCorba/DataArrayIntServant.cxx +++ b/src/MEDCouplingCorba/DataArrayIntServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "DataArrayIntServant.hxx" #include "MEDCouplingMemArray.hxx" diff --git a/src/MEDCouplingCorba/DataArrayIntServant.hxx b/src/MEDCouplingCorba/DataArrayIntServant.hxx index 9391c1010..e7c9853c5 100644 --- a/src/MEDCouplingCorba/DataArrayIntServant.hxx +++ b/src/MEDCouplingCorba/DataArrayIntServant.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __DATAARRAYINTSERVANT_HXX__ #define __DATAARRAYINTSERVANT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/DataArrayServant.cxx b/src/MEDCouplingCorba/DataArrayServant.cxx index 0887b2b0d..6464f8b96 100644 --- a/src/MEDCouplingCorba/DataArrayServant.cxx +++ b/src/MEDCouplingCorba/DataArrayServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "DataArrayServant.hxx" #include "MEDCouplingMemArray.hxx" diff --git a/src/MEDCouplingCorba/DataArrayServant.hxx b/src/MEDCouplingCorba/DataArrayServant.hxx index ec78f5a1d..25f6c39d6 100644 --- a/src/MEDCouplingCorba/DataArrayServant.hxx +++ b/src/MEDCouplingCorba/DataArrayServant.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __DATAARRAYSERVANT_HXX__ #define __DATAARRAYSERVANT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/MEDCouplingCMeshServant.cxx b/src/MEDCouplingCorba/MEDCouplingCMeshServant.cxx index bacc0b925..3c60be3d2 100644 --- a/src/MEDCouplingCorba/MEDCouplingCMeshServant.cxx +++ b/src/MEDCouplingCorba/MEDCouplingCMeshServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingCMeshServant.hxx" diff --git a/src/MEDCouplingCorba/MEDCouplingCMeshServant.hxx b/src/MEDCouplingCorba/MEDCouplingCMeshServant.hxx index bd53bda56..9b8fe0810 100644 --- a/src/MEDCouplingCorba/MEDCouplingCMeshServant.hxx +++ b/src/MEDCouplingCorba/MEDCouplingCMeshServant.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGCMESHSERVANT_HXX__ #define __MEDCOUPLINGCMESHSERVANT_HXX__ diff --git a/src/MEDCouplingCorba/MEDCouplingCorba.hxx b/src/MEDCouplingCorba/MEDCouplingCorba.hxx index 5e424ecab..e9c78a33e 100644 --- a/src/MEDCouplingCorba/MEDCouplingCorba.hxx +++ b/src/MEDCouplingCorba/MEDCouplingCorba.hxx @@ -16,11 +16,12 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGCORBA_HXX__ #define __MEDCOUPLINGCORBA_HXX__ -#ifdef WNT +#ifdef WIN32 # if defined medcouplingcorba_EXPORTS # define MEDCOUPLINGCORBA_EXPORT __declspec( dllexport ) # else diff --git a/src/MEDCouplingCorba/MEDCouplingExtrudedMeshServant.cxx b/src/MEDCouplingCorba/MEDCouplingExtrudedMeshServant.cxx index fea6cbc80..c014f42f7 100644 --- a/src/MEDCouplingCorba/MEDCouplingExtrudedMeshServant.cxx +++ b/src/MEDCouplingCorba/MEDCouplingExtrudedMeshServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingExtrudedMeshServant.hxx" diff --git a/src/MEDCouplingCorba/MEDCouplingExtrudedMeshServant.hxx b/src/MEDCouplingCorba/MEDCouplingExtrudedMeshServant.hxx index d6c533ed9..035b8495b 100644 --- a/src/MEDCouplingCorba/MEDCouplingExtrudedMeshServant.hxx +++ b/src/MEDCouplingCorba/MEDCouplingExtrudedMeshServant.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGEXTRUDEDMESHSERVANT_HXX__ #define __MEDCOUPLINGEXTRUDEDMESHSERVANT_HXX__ diff --git a/src/MEDCouplingCorba/MEDCouplingFieldDoubleServant.cxx b/src/MEDCouplingCorba/MEDCouplingFieldDoubleServant.cxx index 00e168517..96f3e4ea7 100644 --- a/src/MEDCouplingCorba/MEDCouplingFieldDoubleServant.cxx +++ b/src/MEDCouplingCorba/MEDCouplingFieldDoubleServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingFieldDoubleServant.hxx" #include "MEDCouplingFieldDouble.hxx" diff --git a/src/MEDCouplingCorba/MEDCouplingFieldDoubleServant.hxx b/src/MEDCouplingCorba/MEDCouplingFieldDoubleServant.hxx index 417959ef1..431011e99 100644 --- a/src/MEDCouplingCorba/MEDCouplingFieldDoubleServant.hxx +++ b/src/MEDCouplingCorba/MEDCouplingFieldDoubleServant.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGFIELDDOUBLESERVANT_HXX__ #define __MEDCOUPLINGFIELDDOUBLESERVANT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/MEDCouplingFieldOverTimeServant.cxx b/src/MEDCouplingCorba/MEDCouplingFieldOverTimeServant.cxx index fd9c93c68..0b2ddd922 100644 --- a/src/MEDCouplingCorba/MEDCouplingFieldOverTimeServant.cxx +++ b/src/MEDCouplingCorba/MEDCouplingFieldOverTimeServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingFieldOverTimeServant.hxx" #include "DataArrayDoubleServant.hxx" diff --git a/src/MEDCouplingCorba/MEDCouplingFieldOverTimeServant.hxx b/src/MEDCouplingCorba/MEDCouplingFieldOverTimeServant.hxx index 3324ec0b8..c1c6e801d 100644 --- a/src/MEDCouplingCorba/MEDCouplingFieldOverTimeServant.hxx +++ b/src/MEDCouplingCorba/MEDCouplingFieldOverTimeServant.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGFIELDOVERTIMESERVANT_HXX__ #define __MEDCOUPLINGFIELDOVERTIMESERVANT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/MEDCouplingFieldServant.cxx b/src/MEDCouplingCorba/MEDCouplingFieldServant.cxx index 71dc56abc..6437162ab 100644 --- a/src/MEDCouplingCorba/MEDCouplingFieldServant.cxx +++ b/src/MEDCouplingCorba/MEDCouplingFieldServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingFieldServant.hxx" #include "MEDCouplingMeshServant.hxx" diff --git a/src/MEDCouplingCorba/MEDCouplingFieldServant.hxx b/src/MEDCouplingCorba/MEDCouplingFieldServant.hxx index 209c45771..b9c7c495b 100644 --- a/src/MEDCouplingCorba/MEDCouplingFieldServant.hxx +++ b/src/MEDCouplingCorba/MEDCouplingFieldServant.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGFIELDSERVANT_HXX__ #define __MEDCOUPLINGFIELDSERVANT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/MEDCouplingFieldTemplateServant.cxx b/src/MEDCouplingCorba/MEDCouplingFieldTemplateServant.cxx index 61cc0a61e..20627138e 100644 --- a/src/MEDCouplingCorba/MEDCouplingFieldTemplateServant.cxx +++ b/src/MEDCouplingCorba/MEDCouplingFieldTemplateServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingFieldTemplateServant.hxx" #include "MEDCouplingFieldTemplate.hxx" diff --git a/src/MEDCouplingCorba/MEDCouplingFieldTemplateServant.hxx b/src/MEDCouplingCorba/MEDCouplingFieldTemplateServant.hxx index d5cf73b20..2bc7410ba 100644 --- a/src/MEDCouplingCorba/MEDCouplingFieldTemplateServant.hxx +++ b/src/MEDCouplingCorba/MEDCouplingFieldTemplateServant.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGFIELDTEMPLATESERVANT_HXX__ #define __MEDCOUPLINGFIELDTEMPLATESERVANT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/MEDCouplingMeshServant.cxx b/src/MEDCouplingCorba/MEDCouplingMeshServant.cxx index e03feb68b..4912eabe1 100644 --- a/src/MEDCouplingCorba/MEDCouplingMeshServant.cxx +++ b/src/MEDCouplingCorba/MEDCouplingMeshServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMeshServant.hxx" #include "InterpKernelException.hxx" diff --git a/src/MEDCouplingCorba/MEDCouplingMeshServant.hxx b/src/MEDCouplingCorba/MEDCouplingMeshServant.hxx index d55199c65..071c64709 100644 --- a/src/MEDCouplingCorba/MEDCouplingMeshServant.hxx +++ b/src/MEDCouplingCorba/MEDCouplingMeshServant.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGMESHSERVANT_HXX__ #define __MEDCOUPLINGMESHSERVANT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/MEDCouplingMultiFieldsServant.cxx b/src/MEDCouplingCorba/MEDCouplingMultiFieldsServant.cxx index e50afcbeb..df85f5acf 100644 --- a/src/MEDCouplingCorba/MEDCouplingMultiFieldsServant.cxx +++ b/src/MEDCouplingCorba/MEDCouplingMultiFieldsServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMultiFieldsServant.hxx" #include "DataArrayDoubleServant.hxx" diff --git a/src/MEDCouplingCorba/MEDCouplingMultiFieldsServant.hxx b/src/MEDCouplingCorba/MEDCouplingMultiFieldsServant.hxx index bae30cffc..b5f0862f4 100644 --- a/src/MEDCouplingCorba/MEDCouplingMultiFieldsServant.hxx +++ b/src/MEDCouplingCorba/MEDCouplingMultiFieldsServant.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGMULTIFIELDSSERVANT_HXX__ #define __MEDCOUPLINGMULTIFIELDSSERVANT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/MEDCouplingPointSetServant.cxx b/src/MEDCouplingCorba/MEDCouplingPointSetServant.cxx index 44bab4a45..60c1921d3 100644 --- a/src/MEDCouplingCorba/MEDCouplingPointSetServant.cxx +++ b/src/MEDCouplingCorba/MEDCouplingPointSetServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingPointSetServant.hxx" #include "MEDCouplingPointSet.hxx" diff --git a/src/MEDCouplingCorba/MEDCouplingPointSetServant.hxx b/src/MEDCouplingCorba/MEDCouplingPointSetServant.hxx index e19e33e16..d00147694 100644 --- a/src/MEDCouplingCorba/MEDCouplingPointSetServant.hxx +++ b/src/MEDCouplingCorba/MEDCouplingPointSetServant.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGPOINTSETSERVANT_HXX__ #define __MEDCOUPLINGPOINTSETSERVANT_HXX__ diff --git a/src/MEDCouplingCorba/MEDCouplingRefCountServant.cxx b/src/MEDCouplingCorba/MEDCouplingRefCountServant.cxx index 7f6606e63..b6322754a 100644 --- a/src/MEDCouplingCorba/MEDCouplingRefCountServant.cxx +++ b/src/MEDCouplingCorba/MEDCouplingRefCountServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingRefCountServant.hxx" #include "InterpKernelException.hxx" diff --git a/src/MEDCouplingCorba/MEDCouplingRefCountServant.hxx b/src/MEDCouplingCorba/MEDCouplingRefCountServant.hxx index ea30a34c9..119059281 100644 --- a/src/MEDCouplingCorba/MEDCouplingRefCountServant.hxx +++ b/src/MEDCouplingCorba/MEDCouplingRefCountServant.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGREFCOUNTSERVANT_HXX__ #define __MEDCOUPLINGREFCOUNTSERVANT_HXX__ diff --git a/src/MEDCouplingCorba/MEDCouplingUMeshServant.cxx b/src/MEDCouplingCorba/MEDCouplingUMeshServant.cxx index 018442993..86dcbe8e4 100644 --- a/src/MEDCouplingCorba/MEDCouplingUMeshServant.cxx +++ b/src/MEDCouplingCorba/MEDCouplingUMeshServant.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingUMeshServant.hxx" #include "MEDCouplingUMesh.hxx" diff --git a/src/MEDCouplingCorba/MEDCouplingUMeshServant.hxx b/src/MEDCouplingCorba/MEDCouplingUMeshServant.hxx index d6103f6b4..5dc3de0ec 100644 --- a/src/MEDCouplingCorba/MEDCouplingUMeshServant.hxx +++ b/src/MEDCouplingCorba/MEDCouplingUMeshServant.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGUMESHSERVANT_HXX__ #define __MEDCOUPLINGUMESHSERVANT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServant) diff --git a/src/MEDCouplingCorba/Makefile.am b/src/MEDCouplingCorba/Makefile.am index 2bf783344..4b0b2b373 100644 --- a/src/MEDCouplingCorba/Makefile.am +++ b/src/MEDCouplingCorba/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) include $(top_srcdir)/adm_local/unix/make_common_starter.am diff --git a/src/MEDCouplingCorba/Test/CMakeLists.txt b/src/MEDCouplingCorba/Test/CMakeLists.txt index f37612216..ef36e359d 100644 --- a/src/MEDCouplingCorba/Test/CMakeLists.txt +++ b/src/MEDCouplingCorba/Test/CMakeLists.txt @@ -16,9 +16,12 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) INCLUDE_DIRECTORIES( ${OMNIORB_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${CPPUNIT_INCLUDE_DIRS} ${KERNEL_ROOT_DIR}/include/salome ${CMAKE_CURRENT_BINARY_DIR}/../../../idl ${CMAKE_CURRENT_SOURCE_DIR}/.. @@ -35,8 +38,8 @@ SET(TestMEDCouplingCorbaServ_SOURCES ) ADD_EXECUTABLE(TestMEDCouplingCorbaServ ${TestMEDCouplingCorbaServ_SOURCES}) -SET_TARGET_PROPERTIES(TestMEDCouplingCorbaServ PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}") -TARGET_LINK_LIBRARIES(TestMEDCouplingCorbaServ medcouplingcorba SalomeIDLMEDTests ${OMNIORB_LIBS}) +SET_TARGET_PROPERTIES(TestMEDCouplingCorbaServ PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestMEDCouplingCorbaServ medcouplingcorba SalomeIDLMEDTests ${OMNIORB_LIBS} ${PLATFORM_LIBS}) SET(TestMEDCouplingCorbaClt_SOURCES TestMEDCouplingCorbaClt.cxx @@ -45,7 +48,7 @@ SET(TestMEDCouplingCorbaClt_SOURCES ) ADD_EXECUTABLE(TestMEDCouplingCorbaClt ${TestMEDCouplingCorbaClt_SOURCES}) -SET_TARGET_PROPERTIES(TestMEDCouplingCorbaClt PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${CPPUNIT_DEFINITIONS}") -TARGET_LINK_LIBRARIES(TestMEDCouplingCorbaClt medcouplingclient SalomeIDLMEDTests ${OMNIORB_LIBS} ${CPPUNIT_LIBS}) +SET_TARGET_PROPERTIES(TestMEDCouplingCorbaClt PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestMEDCouplingCorbaClt medcouplingclient SalomeIDLMEDTests ${OMNIORB_LIBS} ${CPPUNIT_LIBS} ${PLATFORM_LIBS} ${PTHREAD_LIBS}) INSTALL(TARGETS TestMEDCouplingCorbaServ TestMEDCouplingCorbaClt DESTINATION ${MED_salomebin_BINS}) diff --git a/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponent.cxx b/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponent.cxx index 98e86a763..584dee8a7 100644 --- a/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponent.cxx +++ b/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponent.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMeshFieldFactoryComponent.hxx" #include "MEDCouplingExtrudedMesh.hxx" diff --git a/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponent.hxx b/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponent.hxx index 52828bc8d..a5a5d91b0 100644 --- a/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponent.hxx +++ b/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponent.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGCORBAFIELDFACTORYCOMPONENT_HXX__ #define __MEDCOUPLINGCORBAFIELDFACTORYCOMPONENT_HXX__ diff --git a/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentClt.cxx b/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentClt.cxx index 68298047a..afac3db7b 100644 --- a/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentClt.cxx +++ b/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentClt.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMeshFieldFactoryComponentClt.hxx" #include "MEDCouplingMeshFieldFactoryComponent.hxx" diff --git a/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentClt.hxx b/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentClt.hxx index 9ea15384c..b977c8d93 100644 --- a/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentClt.hxx +++ b/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentClt.hxx @@ -16,12 +16,13 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGCORBAFIELDFACTORYCOMPONENTCLT_HXX__ #define __MEDCOUPLINGCORBAFIELDFACTORYCOMPONENTCLT_HXX__ #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_CLIENT_HEADER(MEDCouplingCorbaServantTest) diff --git a/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentServ.cxx b/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentServ.cxx index 4840941bb..40338a81c 100644 --- a/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentServ.cxx +++ b/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentServ.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMeshFieldFactoryComponentServ.hxx" #include "MEDCouplingMeshFieldFactoryComponent.hxx" diff --git a/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentServ.hxx b/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentServ.hxx index 7331fc7c8..13ec56c11 100644 --- a/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentServ.hxx +++ b/src/MEDCouplingCorba/Test/MEDCouplingMeshFieldFactoryComponentServ.hxx @@ -16,13 +16,14 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDCOUPLINGCORBAFIELDFACTORYCOMPONENTSERV_HXX__ #define __MEDCOUPLINGCORBAFIELDFACTORYCOMPONENTSERV_HXX__ #include #include "SALOMEconfig.h" -#ifdef WNT +#ifdef WIN32 #define NOMINMAX #endif #include CORBA_SERVER_HEADER(MEDCouplingCorbaServantTest) diff --git a/src/MEDCouplingCorba/Test/Makefile.am b/src/MEDCouplingCorba/Test/Makefile.am index de4dad982..a3d626e29 100755 --- a/src/MEDCouplingCorba/Test/Makefile.am +++ b/src/MEDCouplingCorba/Test/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) include $(top_srcdir)/adm_local/unix/make_common_starter.am diff --git a/src/MEDCouplingCorba/Test/TestMEDCouplingCorbaClt.cxx b/src/MEDCouplingCorba/Test/TestMEDCouplingCorbaClt.cxx index ad4c6d0f8..a37499ae4 100644 --- a/src/MEDCouplingCorba/Test/TestMEDCouplingCorbaClt.cxx +++ b/src/MEDCouplingCorba/Test/TestMEDCouplingCorbaClt.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMeshFieldFactoryComponentClt.hxx" #include "MEDCouplingMeshFieldFactoryComponent.hxx" diff --git a/src/MEDCouplingCorba/Test/TestMEDCouplingCorbaServ.cxx b/src/MEDCouplingCorba/Test/TestMEDCouplingCorbaServ.cxx index 11535f596..cca9a679f 100644 --- a/src/MEDCouplingCorba/Test/TestMEDCouplingCorbaServ.cxx +++ b/src/MEDCouplingCorba/Test/TestMEDCouplingCorbaServ.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDCouplingMeshFieldFactoryComponentServ.hxx" #include "MEDCouplingMeshFieldFactoryComponent.hxx" diff --git a/src/MEDCouplingCorba_Swig/CMakeLists.txt b/src/MEDCouplingCorba_Swig/CMakeLists.txt index 8a79fe154..78a20f1e0 100644 --- a/src/MEDCouplingCorba_Swig/CMakeLists.txt +++ b/src/MEDCouplingCorba_Swig/CMakeLists.txt @@ -16,10 +16,11 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) ADD_SUBDIRECTORY(Client) -INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/InstallAndCompilePythonFile.cmake) +INCLUDE(${SALOME_MACROS_DIR}/InstallAndCompilePythonFile.cmake) FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) @@ -40,8 +41,11 @@ INCLUDE_DIRECTORIES( ) SWIG_ADD_MODULE(MEDCouplingCorba python MEDCouplingCorba.i) -SWIG_LINK_LIBRARIES(MEDCouplingCorba ${PYTHON_LIBRARIES} medcouplingcorba) -SET_TARGET_PROPERTIES(_MEDCouplingCorba PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}") +SWIG_LINK_LIBRARIES(MEDCouplingCorba ${PYTHON_LIBS} medcouplingcorba ${PLATFORM_LIBS}) +SET_TARGET_PROPERTIES(_MEDCouplingCorba PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_MEDCouplingCorba PROPERTIES DEBUG_OUTPUT_NAME _MEDCouplingCorba_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) INSTALL(TARGETS _MEDCouplingCorba DESTINATION ${MED_salomepythondir}) INSTALL(FILES MEDCouplingCorba.i MEDCouplingCorbaTypemaps.i DESTINATION ${MED_salomeinclude_HEADERS}) diff --git a/src/MEDCouplingCorba_Swig/Client/CMakeLists.txt b/src/MEDCouplingCorba_Swig/Client/CMakeLists.txt index d7af2876d..e92b1fafe 100644 --- a/src/MEDCouplingCorba_Swig/Client/CMakeLists.txt +++ b/src/MEDCouplingCorba_Swig/Client/CMakeLists.txt @@ -16,8 +16,9 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) -INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/InstallAndCompilePythonFile.cmake) +INCLUDE(${SALOME_MACROS_DIR}/InstallAndCompilePythonFile.cmake) FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) @@ -38,8 +39,11 @@ INCLUDE_DIRECTORIES( ) SWIG_ADD_MODULE(MEDCouplingClient python MEDCouplingClient.i) -SWIG_LINK_LIBRARIES(MEDCouplingClient ${PYTHON_LIBRARIES} medcouplingclient) -SET_TARGET_PROPERTIES(_MEDCouplingClient PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}") +SWIG_LINK_LIBRARIES(MEDCouplingClient ${PYTHON_LIBS} medcouplingclient) +SET_TARGET_PROPERTIES(_MEDCouplingClient PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_MEDCouplingClient PROPERTIES DEBUG_OUTPUT_NAME _MEDCouplingClient_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) INSTALL(TARGETS _MEDCouplingClient DESTINATION ${MED_salomepythondir}) INSTALL(FILES MEDCouplingClient.i DESTINATION ${MED_salomeinclude_HEADERS}) diff --git a/src/MEDCouplingCorba_Swig/Client/MEDCouplingClient.i b/src/MEDCouplingCorba_Swig/Client/MEDCouplingClient.i index 4be1e789d..83736be8c 100644 --- a/src/MEDCouplingCorba_Swig/Client/MEDCouplingClient.i +++ b/src/MEDCouplingCorba_Swig/Client/MEDCouplingClient.i @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) %module MEDCouplingClient @@ -382,6 +383,33 @@ def ParaMEDMEMDataArrayIntIdiv(self,*args): def ParaMEDMEMDataArrayIntImod(self,*args): import _MEDCouplingClient return _MEDCouplingClient.DataArrayInt____imod___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIadd(self,*args): + import _MEDCouplingClient + return _MEDCouplingClient.DataArrayDoubleTuple____iadd___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIsub(self,*args): + import _MEDCouplingClient + return _MEDCouplingClient.DataArrayDoubleTuple____isub___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleImul(self,*args): + import _MEDCouplingClient + return _MEDCouplingClient.DataArrayDoubleTuple____imul___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIdiv(self,*args): + import _MEDCouplingClient + return _MEDCouplingClient.DataArrayDoubleTuple____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIadd(self,*args): + import _MEDCouplingClient + return _MEDCouplingClient.DataArrayIntTuple____iadd___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIsub(self,*args): + import _MEDCouplingClient + return _MEDCouplingClient.DataArrayIntTuple____isub___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleImul(self,*args): + import _MEDCouplingClient + return _MEDCouplingClient.DataArrayIntTuple____imul___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIdiv(self,*args): + import _MEDCouplingClient + return _MEDCouplingClient.DataArrayIntTuple____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleImod(self,*args): + import _MEDCouplingClient + return _MEDCouplingClient.DataArrayIntTuple____imod___(self, self, *args) %} %include "MEDCouplingFinalize.i" diff --git a/src/MEDCouplingCorba_Swig/Client/Makefile.am b/src/MEDCouplingCorba_Swig/Client/Makefile.am index 8974c8640..68f06238c 100644 --- a/src/MEDCouplingCorba_Swig/Client/Makefile.am +++ b/src/MEDCouplingCorba_Swig/Client/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) include $(top_srcdir)/adm_local/unix/make_common_starter.am diff --git a/src/MEDCouplingCorba_Swig/MEDCouplingCorba.i b/src/MEDCouplingCorba_Swig/MEDCouplingCorba.i index 0a5e5e0dc..517bf5acb 100644 --- a/src/MEDCouplingCorba_Swig/MEDCouplingCorba.i +++ b/src/MEDCouplingCorba_Swig/MEDCouplingCorba.i @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) %module MEDCouplingCorba @@ -187,6 +188,33 @@ def ParaMEDMEMDataArrayIntIdiv(self,*args): def ParaMEDMEMDataArrayIntImod(self,*args): import _MEDCouplingCorba return _MEDCouplingCorba.DataArrayInt____imod___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIadd(self,*args): + import _MEDCouplingCorba + return _MEDCouplingCorba.DataArrayDoubleTuple____iadd___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIsub(self,*args): + import _MEDCouplingCorba + return _MEDCouplingCorba.DataArrayDoubleTuple____isub___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleImul(self,*args): + import _MEDCouplingCorba + return _MEDCouplingCorba.DataArrayDoubleTuple____imul___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIdiv(self,*args): + import _MEDCouplingCorba + return _MEDCouplingCorba.DataArrayDoubleTuple____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIadd(self,*args): + import _MEDCouplingCorba + return _MEDCouplingCorba.DataArrayIntTuple____iadd___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIsub(self,*args): + import _MEDCouplingCorba + return _MEDCouplingCorba.DataArrayIntTuple____isub___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleImul(self,*args): + import _MEDCouplingCorba + return _MEDCouplingCorba.DataArrayIntTuple____imul___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIdiv(self,*args): + import _MEDCouplingCorba + return _MEDCouplingCorba.DataArrayIntTuple____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleImod(self,*args): + import _MEDCouplingCorba + return _MEDCouplingCorba.DataArrayIntTuple____imod___(self, self, *args) %} %include "MEDCouplingFinalize.i" diff --git a/src/MEDCouplingCorba_Swig/MEDCouplingCorbaSwigTest.py b/src/MEDCouplingCorba_Swig/MEDCouplingCorbaSwigTest.py index fbc49da8c..cdce36bbd 100644 --- a/src/MEDCouplingCorba_Swig/MEDCouplingCorbaSwigTest.py +++ b/src/MEDCouplingCorba_Swig/MEDCouplingCorbaSwigTest.py @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) from MEDCoupling import * import math diff --git a/src/MEDCouplingCorba_Swig/MEDCouplingCorbaSwigTestClt.py b/src/MEDCouplingCorba_Swig/MEDCouplingCorbaSwigTestClt.py index 3e0d0a027..5a1abe1a9 100644 --- a/src/MEDCouplingCorba_Swig/MEDCouplingCorbaSwigTestClt.py +++ b/src/MEDCouplingCorba_Swig/MEDCouplingCorbaSwigTestClt.py @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) import MEDCouplingCorbaSwigTest from MEDCouplingClient import * diff --git a/src/MEDCouplingCorba_Swig/MEDCouplingCorbaSwigTestServ.py b/src/MEDCouplingCorba_Swig/MEDCouplingCorbaSwigTestServ.py index 76d1f5bd4..0c51a8629 100644 --- a/src/MEDCouplingCorba_Swig/MEDCouplingCorbaSwigTestServ.py +++ b/src/MEDCouplingCorba_Swig/MEDCouplingCorbaSwigTestServ.py @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) import MEDCouplingCorbaSwigTest import MEDCouplingCorbaServantTest_idl diff --git a/src/MEDCouplingCorba_Swig/MEDCouplingCorbaTypemaps.i b/src/MEDCouplingCorba_Swig/MEDCouplingCorbaTypemaps.i index cc6ae3d19..d37a9586d 100644 --- a/src/MEDCouplingCorba_Swig/MEDCouplingCorbaTypemaps.i +++ b/src/MEDCouplingCorba_Swig/MEDCouplingCorbaTypemaps.i @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) template static PyObject *buildServantAndActivate(const typename TServant::CppType *pt) diff --git a/src/MEDCouplingCorba_Swig/Makefile.am b/src/MEDCouplingCorba_Swig/Makefile.am index e17bd1816..882fa3448 100644 --- a/src/MEDCouplingCorba_Swig/Makefile.am +++ b/src/MEDCouplingCorba_Swig/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) include $(top_srcdir)/adm_local/unix/make_common_starter.am diff --git a/src/MEDCouplingCorba_Swig/TestMEDCouplingCorbaClt.py b/src/MEDCouplingCorba_Swig/TestMEDCouplingCorbaClt.py index a9d7601e6..549ce453c 100644 --- a/src/MEDCouplingCorba_Swig/TestMEDCouplingCorbaClt.py +++ b/src/MEDCouplingCorba_Swig/TestMEDCouplingCorbaClt.py @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) import unittest import CORBA diff --git a/src/MEDCouplingCorba_Swig/TestMEDCouplingCorbaServ.py b/src/MEDCouplingCorba_Swig/TestMEDCouplingCorbaServ.py index 4978286bf..897cd6416 100644 --- a/src/MEDCouplingCorba_Swig/TestMEDCouplingCorbaServ.py +++ b/src/MEDCouplingCorba_Swig/TestMEDCouplingCorbaServ.py @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) import CORBA import MEDCouplingCorbaSwigTest diff --git a/src/MEDCoupling_Swig/CMakeLists.txt b/src/MEDCoupling_Swig/CMakeLists.txt index 8e47178ba..bbd5f1848 100644 --- a/src/MEDCoupling_Swig/CMakeLists.txt +++ b/src/MEDCoupling_Swig/CMakeLists.txt @@ -17,18 +17,20 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/InstallAndCompilePythonFile.cmake) +INCLUDE(${SALOME_MACROS_DIR}/InstallAndCompilePythonFile.cmake) FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) -#INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/UseSWIG.cmake) SET_SOURCE_FILES_PROPERTIES(MEDCoupling.i PROPERTIES CPLUSPLUS ON) SET_SOURCE_FILES_PROPERTIES(MEDCoupling.i PROPERTIES SWIG_DEFINITIONS "-shadow") INCLUDE_DIRECTORIES( ${PYTHON_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../MEDCoupling ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL/Bases @@ -38,19 +40,28 @@ INCLUDE_DIRECTORIES( ) SWIG_ADD_MODULE(MEDCoupling python MEDCoupling.i) -SWIG_LINK_LIBRARIES(MEDCoupling ${PYTHON_LIBRARIES} medcoupling) +SWIG_LINK_LIBRARIES(MEDCoupling ${PYTHON_LIBS} ${PLATFORM_LIBS} medcoupling) +SET_TARGET_PROPERTIES(_MEDCoupling PROPERTIES COMPILE_FLAGS "${PLATFORM_DEFINITIONS}") SET_SOURCE_FILES_PROPERTIES(MEDCouplingRemapper.i PROPERTIES CPLUSPLUS ON) SET_SOURCE_FILES_PROPERTIES(MEDCouplingRemapper.i PROPERTIES SWIG_DEFINITIONS "-shadow") SWIG_ADD_MODULE(MEDCouplingRemapper python MEDCouplingRemapper.i) -SWIG_LINK_LIBRARIES(MEDCouplingRemapper ${PYTHON_LIBRARIES} medcouplingremapper) +SWIG_LINK_LIBRARIES(MEDCouplingRemapper ${PYTHON_LIBS} medcouplingremapper) +SET_TARGET_PROPERTIES(_MEDCouplingRemapper PROPERTIES COMPILE_FLAGS "${PLATFORM_DEFINITIONS}") + +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_MEDCouplingRemapper PROPERTIES DEBUG_OUTPUT_NAME _MEDCouplingRemapper_d) + SET_TARGET_PROPERTIES(_MEDCoupling PROPERTIES DEBUG_OUTPUT_NAME _MEDCoupling_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) +INSTALL(TARGETS _MEDCoupling _MEDCouplingRemapper DESTINATION ${MED_salomelib_LIBS}) SET(PYFILES_TO_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/MEDCoupling.py ${CMAKE_CURRENT_BINARY_DIR}/MEDCouplingRemapper.py ${CMAKE_CURRENT_SOURCE_DIR}/libMEDCoupling_Swig.py) -INSTALL(TARGETS _MEDCoupling _MEDCouplingRemapper DESTINATION ${MED_salomepythondir}) -INSTALL(FILES MEDCoupling.i MEDCouplingCommon.i MEDCouplingFinalize.i MEDCouplingRemapper.i MEDCouplingTypemaps.i DESTINATION ${MED_salomeinclude_HEADERS}) INSTALL_AND_COMPILE_PYTHON_FILE("${PYFILES_TO_INSTALL}" ${MED_salomescript_PYTHON}) +INSTALL(FILES MEDCoupling.i MEDCouplingCommon.i MEDCouplingFinalize.i MEDCouplingRemapper.i MEDCouplingTypemaps.i DESTINATION ${MED_salomeinclude_HEADERS}) +INSTALL(FILES MEDCouplingBasicsTest.py MEDCouplingRemapperTest.py MEDCouplingDataForTest.py DESTINATION ${MED_salomescript_PYTHON}) + ADD_TEST(MEDCouplingBasicsTest ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/MEDCouplingBasicsTest.py) ADD_TEST(MEDCouplingExamplesTest ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/MEDCouplingExamplesTest.py) ADD_TEST(MEDCouplingRemapperTest ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/MEDCouplingRemapperTest.py) diff --git a/src/MEDCoupling_Swig/MEDCoupling.i b/src/MEDCoupling_Swig/MEDCoupling.i index ff905cc1a..04d497020 100644 --- a/src/MEDCoupling_Swig/MEDCoupling.i +++ b/src/MEDCoupling_Swig/MEDCoupling.i @@ -59,6 +59,33 @@ def ParaMEDMEMDataArrayIntIdiv(self,*args): def ParaMEDMEMDataArrayIntImod(self,*args): import _MEDCoupling return _MEDCoupling.DataArrayInt____imod___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIadd(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDoubleTuple____iadd___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIsub(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDoubleTuple____isub___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleImul(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDoubleTuple____imul___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIdiv(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDoubleTuple____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIadd(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayIntTuple____iadd___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIsub(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayIntTuple____isub___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleImul(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayIntTuple____imul___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIdiv(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayIntTuple____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleImod(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayIntTuple____imod___(self, self, *args) %} %include "MEDCouplingFinalize.i" diff --git a/src/MEDCoupling_Swig/MEDCouplingBasicsTest.py b/src/MEDCoupling_Swig/MEDCouplingBasicsTest.py index c635023fc..4f63e6fd3 100644 --- a/src/MEDCoupling_Swig/MEDCouplingBasicsTest.py +++ b/src/MEDCoupling_Swig/MEDCouplingBasicsTest.py @@ -10182,6 +10182,54 @@ class MEDCouplingBasicsTest(unittest.TestCase): pass pass + def testSwigDataTupleIOp1(self): + d=DataArrayDouble(10,1) + d.iota(7.) + for elt in d: + elt+=2. + pass + toTest=DataArrayDouble([9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0]) + self.assertTrue(toTest.isEqual(d,1e-12)) + for elt in d: + elt-=2. + pass + toTest=DataArrayDouble([7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0]) + self.assertTrue(toTest.isEqual(d,1e-12)) + for elt in d: + elt*=2. + pass + toTest=DataArrayDouble([14.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0,32.0]) + self.assertTrue(toTest.isEqual(d,1e-12)) + for elt in d: + elt/=2. + pass + toTest=DataArrayDouble([7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0]) + self.assertTrue(toTest.isEqual(d,1e-12)) + # + d=DataArrayInt(10,1) + d.iota(7) + for elt in d: + elt+=2 + pass + self.assertEqual(d.getValues(),[9,10,11,12,13,14,15,16,17,18]) + for elt in d: + elt-=2 + pass + self.assertEqual(d.getValues(),[7,8,9,10,11,12,13,14,15,16]) + for elt in d: + elt*=2 + pass + self.assertEqual(d.getValues(),[14,16,18,20,22,24,26,28,30,32]) + for elt in d: + elt/=2 + pass + self.assertEqual(d.getValues(),[7,8,9,10,11,12,13,14,15,16]) + for elt in d: + elt%=3 + pass + self.assertEqual(d.getValues(),[1,2,0,1,2,0,1,2,0,1]) + pass + def setUp(self): pass pass diff --git a/src/MEDCoupling_Swig/MEDCouplingCommon.i b/src/MEDCoupling_Swig/MEDCouplingCommon.i index b6e2d0b64..085293b0c 100644 --- a/src/MEDCoupling_Swig/MEDCouplingCommon.i +++ b/src/MEDCoupling_Swig/MEDCouplingCommon.i @@ -2444,7 +2444,39 @@ namespace ParaMEDMEM { return self->buildDADouble(1,self->getNumberOfCompo()); } + + PyObject *___iadd___(PyObject *trueSelf, PyObject *obj) throw(INTERP_KERNEL::Exception) + { + MEDCouplingAutoRefCountObjectPtr ret=self->buildDADouble(1,self->getNumberOfCompo()); + ParaMEDMEM_DataArrayDouble____iadd___(ret,0,obj); + Py_XINCREF(trueSelf); + return trueSelf; + } + PyObject *___isub___(PyObject *trueSelf, PyObject *obj) throw(INTERP_KERNEL::Exception) + { + MEDCouplingAutoRefCountObjectPtr ret=self->buildDADouble(1,self->getNumberOfCompo()); + ParaMEDMEM_DataArrayDouble____isub___(ret,0,obj); + Py_XINCREF(trueSelf); + return trueSelf; + } + + PyObject *___imul___(PyObject *trueSelf, PyObject *obj) throw(INTERP_KERNEL::Exception) + { + MEDCouplingAutoRefCountObjectPtr ret=self->buildDADouble(1,self->getNumberOfCompo()); + ParaMEDMEM_DataArrayDouble____imul___(ret,0,obj); + Py_XINCREF(trueSelf); + return trueSelf; + } + + PyObject *___idiv___(PyObject *trueSelf, PyObject *obj) throw(INTERP_KERNEL::Exception) + { + MEDCouplingAutoRefCountObjectPtr ret=self->buildDADouble(1,self->getNumberOfCompo()); + ParaMEDMEM_DataArrayDouble____idiv___(ret,0,obj); + Py_XINCREF(trueSelf); + return trueSelf; + } + PyObject *__getitem__(PyObject *obj) throw(INTERP_KERNEL::Exception) { int sw; @@ -4108,6 +4140,46 @@ namespace ParaMEDMEM { return self->buildDAInt(1,self->getNumberOfCompo()); } + + PyObject *___iadd___(PyObject *trueSelf, PyObject *obj) throw(INTERP_KERNEL::Exception) + { + MEDCouplingAutoRefCountObjectPtr ret=self->buildDAInt(1,self->getNumberOfCompo()); + ParaMEDMEM_DataArrayInt____iadd___(ret,0,obj); + Py_XINCREF(trueSelf); + return trueSelf; + } + + PyObject *___isub___(PyObject *trueSelf, PyObject *obj) throw(INTERP_KERNEL::Exception) + { + MEDCouplingAutoRefCountObjectPtr ret=self->buildDAInt(1,self->getNumberOfCompo()); + ParaMEDMEM_DataArrayInt____isub___(ret,0,obj); + Py_XINCREF(trueSelf); + return trueSelf; + } + + PyObject *___imul___(PyObject *trueSelf, PyObject *obj) throw(INTERP_KERNEL::Exception) + { + MEDCouplingAutoRefCountObjectPtr ret=self->buildDAInt(1,self->getNumberOfCompo()); + ParaMEDMEM_DataArrayInt____imul___(ret,0,obj); + Py_XINCREF(trueSelf); + return trueSelf; + } + + PyObject *___idiv___(PyObject *trueSelf, PyObject *obj) throw(INTERP_KERNEL::Exception) + { + MEDCouplingAutoRefCountObjectPtr ret=self->buildDAInt(1,self->getNumberOfCompo()); + ParaMEDMEM_DataArrayInt____idiv___(ret,0,obj); + Py_XINCREF(trueSelf); + return trueSelf; + } + + PyObject *___imod___(PyObject *trueSelf, PyObject *obj) throw(INTERP_KERNEL::Exception) + { + MEDCouplingAutoRefCountObjectPtr ret=self->buildDAInt(1,self->getNumberOfCompo()); + ParaMEDMEM_DataArrayInt____imod___(ret,0,obj); + Py_XINCREF(trueSelf); + return trueSelf; + } PyObject *__getitem__(PyObject *obj) throw(INTERP_KERNEL::Exception) { diff --git a/src/MEDCoupling_Swig/MEDCouplingFinalize.i b/src/MEDCoupling_Swig/MEDCouplingFinalize.i index 5f47296fa..909b4cf95 100644 --- a/src/MEDCoupling_Swig/MEDCouplingFinalize.i +++ b/src/MEDCoupling_Swig/MEDCouplingFinalize.i @@ -34,6 +34,17 @@ MEDCouplingFieldDouble.__isub__=ParaMEDMEMMEDCouplingFieldDoubleIsub MEDCouplingFieldDouble.__imul__=ParaMEDMEMMEDCouplingFieldDoubleImul MEDCouplingFieldDouble.__idiv__=ParaMEDMEMMEDCouplingFieldDoubleIdiv +DataArrayDoubleTuple.__iadd__=ParaMEDMEMDataArrayDoubleTupleIadd +DataArrayDoubleTuple.__isub__=ParaMEDMEMDataArrayDoubleTupleIsub +DataArrayDoubleTuple.__imul__=ParaMEDMEMDataArrayDoubleTupleImul +DataArrayDoubleTuple.__idiv__=ParaMEDMEMDataArrayDoubleTupleIdiv + +DataArrayIntTuple.__iadd__=ParaMEDMEMDataArrayIntTupleIadd +DataArrayIntTuple.__isub__=ParaMEDMEMDataArrayIntTupleIsub +DataArrayIntTuple.__imul__=ParaMEDMEMDataArrayIntTupleImul +DataArrayIntTuple.__idiv__=ParaMEDMEMDataArrayIntTupleIdiv +DataArrayIntTuple.__imod__=ParaMEDMEMDataArrayIntTupleImod + del ParaMEDMEMDataArrayDoubleIadd del ParaMEDMEMDataArrayDoubleIsub del ParaMEDMEMDataArrayDoubleImul @@ -47,4 +58,13 @@ del ParaMEDMEMDataArrayIntIsub del ParaMEDMEMDataArrayIntImul del ParaMEDMEMDataArrayIntIdiv del ParaMEDMEMDataArrayIntImod +del ParaMEDMEMDataArrayDoubleTupleIadd +del ParaMEDMEMDataArrayDoubleTupleIsub +del ParaMEDMEMDataArrayDoubleTupleImul +del ParaMEDMEMDataArrayDoubleTupleIdiv +del ParaMEDMEMDataArrayIntTupleIadd +del ParaMEDMEMDataArrayIntTupleIsub +del ParaMEDMEMDataArrayIntTupleImul +del ParaMEDMEMDataArrayIntTupleIdiv +del ParaMEDMEMDataArrayIntTupleImod %} diff --git a/src/MEDCoupling_Swig/MEDCouplingRemapper.i b/src/MEDCoupling_Swig/MEDCouplingRemapper.i index 9e43f6e36..3b2359a61 100644 --- a/src/MEDCoupling_Swig/MEDCouplingRemapper.i +++ b/src/MEDCoupling_Swig/MEDCouplingRemapper.i @@ -59,6 +59,10 @@ namespace ParaMEDMEM bool setOptionInt(const std::string& key, int value); bool setOptionDouble(const std::string& key, double value); bool setOptionString(const std::string& key, const std::string& value); + // + int nullifiedTinyCoeffInCrudeMatrixAbs(double maxValAbs) throw(INTERP_KERNEL::Exception); + int nullifiedTinyCoeffInCrudeMatrix(double scaleFactor) throw(INTERP_KERNEL::Exception); + double getMaxValueInCrudeMatrix() const throw(INTERP_KERNEL::Exception); %extend { PyObject *getCrudeMatrix() const @@ -120,6 +124,33 @@ def ParaMEDMEMDataArrayIntIdiv(self,*args): def ParaMEDMEMDataArrayIntImod(self,*args): import _MEDCouplingRemapper return _MEDCouplingRemapper.DataArrayInt____imod___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIadd(self,*args): + import _MEDCouplingRemapper + return _MEDCouplingRemapper.DataArrayDoubleTuple____iadd___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIsub(self,*args): + import _MEDCouplingRemapper + return _MEDCouplingRemapper.DataArrayDoubleTuple____isub___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleImul(self,*args): + import _MEDCouplingRemapper + return _MEDCouplingRemapper.DataArrayDoubleTuple____imul___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIdiv(self,*args): + import _MEDCouplingRemapper + return _MEDCouplingRemapper.DataArrayDoubleTuple____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIadd(self,*args): + import _MEDCouplingRemapper + return _MEDCouplingRemapper.DataArrayIntTuple____iadd___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIsub(self,*args): + import _MEDCouplingRemapper + return _MEDCouplingRemapper.DataArrayIntTuple____isub___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleImul(self,*args): + import _MEDCouplingRemapper + return _MEDCouplingRemapper.DataArrayIntTuple____imul___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIdiv(self,*args): + import _MEDCouplingRemapper + return _MEDCouplingRemapper.DataArrayIntTuple____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleImod(self,*args): + import _MEDCouplingRemapper + return _MEDCouplingRemapper.DataArrayIntTuple____imod___(self, self, *args) %} %include "MEDCouplingFinalize.i" diff --git a/src/MEDGUI/CMakeLists.txt b/src/MEDGUI/CMakeLists.txt index ca343368e..f6216e852 100644 --- a/src/MEDGUI/CMakeLists.txt +++ b/src/MEDGUI/CMakeLists.txt @@ -39,6 +39,7 @@ INCLUDE_DIRECTORIES( ${OMNIORB_INCLUDE_DIRS} ${CAS_INCLUDE_DIRS} ${BOOST_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} ${KERNEL_ROOT_DIR}/include/salome ${GUI_ROOT_DIR}/include/salome ${CMAKE_CURRENT_BINARY_DIR} @@ -55,10 +56,10 @@ SET(MEDGUITS_SOURCES MED_images.ts MED_msg_fr.ts MED_msg_en.ts - ) +) ADD_LIBRARY(MEDGUI SHARED ${MEDGUI_SOURCES} ${MEDGUI_HEADERS_MOC} ${MEDGUI_FORMS_HEADERS}) -SET_TARGET_PROPERTIES(MEDGUI PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${CAS_DEFINITIONS} ${BOOST_DEFINITIONS}") -TARGET_LINK_LIBRARIES(MEDGUI medcalculator ${QT_MT_LIBS} ${CAS_KERNEL} ${BOOST_LIBS} ${GUI_LDFLAGS} ${SalomeApp} ${CAM} ${LightApp} ${qtx} ${suit} ${SalomeObject}) +SET_TARGET_PROPERTIES(MEDGUI PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${CAS_DEFINITIONS} ${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS} ${OMNIORB_DEFINITIONS}") +TARGET_LINK_LIBRARIES(MEDGUI medcalculator ${QT_MT_LIBS} ${CAS_KERNEL} ${BOOST_LIBS} ${GUI_LDFLAGS} ${SalomeApp} ${CAM} ${LightApp} ${qtx} ${suit} ${SalomeObject} ${PLATFORM_LIBS} ${SalomeLifeCycleCORBA}) INSTALL(TARGETS MEDGUI DESTINATION ${MED_salomelib_LIBS}) QT4_INSTALL_TS_RESOURCES("${MEDGUITS_SOURCES}" "${MED_salomeres_DATA}") diff --git a/src/MEDGUI/Makefile.am b/src/MEDGUI/Makefile.am index c558ecf6e..1ba367927 100644 --- a/src/MEDGUI/Makefile.am +++ b/src/MEDGUI/Makefile.am @@ -37,20 +37,27 @@ dist_libMEDGUI_la_SOURCES = MEDGUIFileContentDial.h MEDGUISelection.hxx \ MOC_FILES= MEDGUI_moc.cxx MEDGUIFileContentDial_moc.cxx MEDGUISelectComponents_moc.cxx +# meta object implementation files generation (moc) +%_moc.cxx: %.h + $(MOC) $< -o $@ + +# translation (*.qm) files generation (lrelease) +%.qm: %.ts + $(LRELEASE) $< -qm $@ + +EXTRA_DIST += $(MOC_FILES:%_moc.cxx=%.h) $(nodist_salomeres_DATA:%.qm=%.ts) + ui_%.h: %.ui ${QTDIR}/bin/uic $< -o $@ .hxx_moc.cxx : ${QTDIR}/bin/moc -p . -o $@ $< -%_moc.cxx: %.hxx - ${QTDIR}/bin/moc $< -o $@ - .qrc_qrc.cxx : ${QTDIR}/bin/rcc -name $(*F) $< -o $@ clean-local-qt : - rm -f *_moc.cxx *_qrc.cxx ui_*.h + rm -f *_moc.cxx *_qrc.cxx ui_*.h *.qm clean-local: clean-local-qt @@ -64,12 +71,16 @@ libMEDGUI_la_CPPFLAGS= $(QT_INCLUDES) $(VTK_INCLUDES) @CAS_CPPFLAGS@ $(PYTHON_IN -I$(top_builddir) -I$(top_builddir)/idl -I$(srcdir)/../MEDCoupling -I$(srcdir)/../INTERP_KERNEL -I$(srcdir)/../INTERP_KERNEL/Bases \ -I$(srcdir)/../MEDCoupling -I$(srcdir)/../MEDLoader -I$(srcdir)/../MEDCalculator -libMEDGUI_la_LDFLAGS= \ +libMEDGUI_la_LDFLAGS = \ $(QT_MT_LIBS) $(CAS_KERNEL) $(BOOST_LIBS) \ - ../../idl/libSalomeIDLMED.la ../MEDCalculator/libmedcalculator.la \ $(KERNEL_LDFLAGS) -lSalomeLifeCycleCORBA -lOpUtil -lSALOMELocalTrace \ $(GUI_LDFLAGS) -lSalomeApp -lCAM -lLightApp -lqtx -lsuit -lSalomeObject +libMEDGUI_la_LIBADD = \ + $(top_builddir)/idl/libSalomeIDLMED.la \ + $(top_builddir)/src/MEDCalculator/libmedcalculator.la + + # .po files to transform in .qm nodist_salomeres_DATA= \ MED_images.qm \ diff --git a/src/MEDLoader/CMakeLists.txt b/src/MEDLoader/CMakeLists.txt index 5da47beab..0a812c71a 100644 --- a/src/MEDLoader/CMakeLists.txt +++ b/src/MEDLoader/CMakeLists.txt @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) ADD_SUBDIRECTORY(Swig) ADD_SUBDIRECTORY(Test) @@ -47,7 +48,7 @@ SET(medloader_SOURCES ) ADD_LIBRARY(medloader SHARED ${medloader_SOURCES}) -SET_TARGET_PROPERTIES(medloader PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS}") +SET_TARGET_PROPERTIES(medloader PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${PLATFORM_DEFINITIONS}") TARGET_LINK_LIBRARIES(medloader medcoupling ${MED3_LIBS_C_ONLY} ${HDF5_LIBS}) INSTALL(TARGETS medloader DESTINATION ${MED_salomelib_LIBS}) diff --git a/src/MEDLoader/MEDFileBasis.cxx b/src/MEDLoader/MEDFileBasis.cxx index aa856a492..cf361a4c3 100644 --- a/src/MEDLoader/MEDFileBasis.cxx +++ b/src/MEDLoader/MEDFileBasis.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDFileBasis.hxx" diff --git a/src/MEDLoader/MEDFileBasis.hxx b/src/MEDLoader/MEDFileBasis.hxx index 24de3909a..67702e68e 100644 --- a/src/MEDLoader/MEDFileBasis.hxx +++ b/src/MEDLoader/MEDFileBasis.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDFILEBASIS_HXX__ #define __MEDFILEBASIS_HXX__ diff --git a/src/MEDLoader/MEDFileData.cxx b/src/MEDLoader/MEDFileData.cxx index 8a97c3754..b18c3cb42 100644 --- a/src/MEDLoader/MEDFileData.cxx +++ b/src/MEDLoader/MEDFileData.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDFileData.hxx" diff --git a/src/MEDLoader/MEDFileData.hxx b/src/MEDLoader/MEDFileData.hxx index 6a9e40412..64b946ec0 100644 --- a/src/MEDLoader/MEDFileData.hxx +++ b/src/MEDLoader/MEDFileData.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDFILEDATA_HXX__ #define __MEDFILEDATA_HXX__ diff --git a/src/MEDLoader/MEDFileField.cxx b/src/MEDLoader/MEDFileField.cxx index cc166fa44..cf851c2e9 100644 --- a/src/MEDLoader/MEDFileField.cxx +++ b/src/MEDLoader/MEDFileField.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDFileField.hxx" #include "MEDFileMesh.hxx" diff --git a/src/MEDLoader/MEDFileField.hxx b/src/MEDLoader/MEDFileField.hxx index b099d369b..b6afd67a1 100644 --- a/src/MEDLoader/MEDFileField.hxx +++ b/src/MEDLoader/MEDFileField.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDFILEFIELD_HXX__ #define __MEDFILEFIELD_HXX__ @@ -535,14 +536,14 @@ namespace ParaMEDMEM void setProfileNameOnLeaf(const char *mName, INTERP_KERNEL::NormalizedCellType typ, int locId, const char *newPflName, bool forceRenameOnGlob=false) throw(INTERP_KERNEL::Exception); //! underground method see MEDFileField1TSWithoutSDA::setLocNameOnLeaf void setLocNameOnLeaf(const char *mName, INTERP_KERNEL::NormalizedCellType typ, int locId, const char *newLocName, bool forceRenameOnGlob=false) throw(INTERP_KERNEL::Exception); - private: - void writeLL(med_idt fid) const throw(INTERP_KERNEL::Exception); std::vector getPflsReallyUsed() const; std::vector getLocsReallyUsed() const; std::vector getPflsReallyUsedMulti() const; std::vector getLocsReallyUsedMulti() const; void changePflsRefsNamesGen(const std::vector< std::pair, std::string > >& mapOfModif) throw(INTERP_KERNEL::Exception); void changeLocsRefsNamesGen(const std::vector< std::pair, std::string > >& mapOfModif) throw(INTERP_KERNEL::Exception); + private: + void writeLL(med_idt fid) const throw(INTERP_KERNEL::Exception); MEDFileField1TS(const char *fileName, const char *fieldName, int iteration, int order) throw(INTERP_KERNEL::Exception); MEDFileField1TS(const MEDFileField1TSWithoutSDA& other, bool deepCpy); MEDFileField1TS(); @@ -715,7 +716,7 @@ std::vector< std::vector > getFieldSplitedByType2(int iterati void destroyFieldAtPos(int i) throw(INTERP_KERNEL::Exception); bool changeMeshNames(const std::vector< std::pair >& modifTab) throw(INTERP_KERNEL::Exception); bool renumberEntitiesLyingOnMesh(const char *meshName, const std::vector& oldCode, const std::vector& newCode, const DataArrayInt *renumO2N) throw(INTERP_KERNEL::Exception); - private: + public: int getPosFromFieldName(const char *fieldName) const throw(INTERP_KERNEL::Exception); std::vector getPflsReallyUsed() const; std::vector getLocsReallyUsed() const; diff --git a/src/MEDLoader/MEDFileMesh.cxx b/src/MEDLoader/MEDFileMesh.cxx index 009112b70..6f77ac217 100644 --- a/src/MEDLoader/MEDFileMesh.cxx +++ b/src/MEDLoader/MEDFileMesh.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDFileMesh.hxx" #include "MEDFileUtilities.hxx" diff --git a/src/MEDLoader/MEDFileMesh.hxx b/src/MEDLoader/MEDFileMesh.hxx index 563df0093..02df40ac6 100644 --- a/src/MEDLoader/MEDFileMesh.hxx +++ b/src/MEDLoader/MEDFileMesh.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDFILEMESH_HXX__ #define __MEDFILEMESH_HXX__ diff --git a/src/MEDLoader/MEDFileMeshElt.cxx b/src/MEDLoader/MEDFileMeshElt.cxx index 6a04fb2d2..33d14b9f3 100644 --- a/src/MEDLoader/MEDFileMeshElt.cxx +++ b/src/MEDLoader/MEDFileMeshElt.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDFileMeshElt.hxx" diff --git a/src/MEDLoader/MEDFileMeshElt.hxx b/src/MEDLoader/MEDFileMeshElt.hxx index 7cf22da69..e8bda6629 100644 --- a/src/MEDLoader/MEDFileMeshElt.hxx +++ b/src/MEDLoader/MEDFileMeshElt.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDFILEMESHELT_HXX__ #define __MEDFILEMESHELT_HXX__ diff --git a/src/MEDLoader/MEDFileMeshLL.cxx b/src/MEDLoader/MEDFileMeshLL.cxx index 7191c0bb8..2c3c77d9b 100644 --- a/src/MEDLoader/MEDFileMeshLL.cxx +++ b/src/MEDLoader/MEDFileMeshLL.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDFileMeshLL.hxx" #include "MEDFileMesh.hxx" diff --git a/src/MEDLoader/MEDFileMeshLL.hxx b/src/MEDLoader/MEDFileMeshLL.hxx index 16f3a446e..263f77d41 100644 --- a/src/MEDLoader/MEDFileMeshLL.hxx +++ b/src/MEDLoader/MEDFileMeshLL.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDFILEMESHLL_HXX__ #define __MEDFILEMESHLL_HXX__ diff --git a/src/MEDLoader/MEDFileUtilities.cxx b/src/MEDLoader/MEDFileUtilities.cxx index 6114e0ea7..89ddaa17a 100644 --- a/src/MEDLoader/MEDFileUtilities.cxx +++ b/src/MEDLoader/MEDFileUtilities.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDFileUtilities.hxx" #include "MEDLoaderBase.hxx" diff --git a/src/MEDLoader/MEDFileUtilities.hxx b/src/MEDLoader/MEDFileUtilities.hxx index b814c1282..42fbcd28c 100644 --- a/src/MEDLoader/MEDFileUtilities.hxx +++ b/src/MEDLoader/MEDFileUtilities.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDFILEUTILITIES_HXX__ #define __MEDFILEUTILITIES_HXX__ diff --git a/src/MEDLoader/MEDLoader.cxx b/src/MEDLoader/MEDLoader.cxx index 0d1d57ce0..60e8773ec 100644 --- a/src/MEDLoader/MEDLoader.cxx +++ b/src/MEDLoader/MEDLoader.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDLoader.hxx" #include "MEDLoaderBase.hxx" diff --git a/src/MEDLoader/MEDLoader.hxx b/src/MEDLoader/MEDLoader.hxx index 33907f219..61536db38 100644 --- a/src/MEDLoader/MEDLoader.hxx +++ b/src/MEDLoader/MEDLoader.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDLOADER_HXX__ #define __MEDLOADER_HXX__ diff --git a/src/MEDLoader/MEDLoaderBase.cxx b/src/MEDLoader/MEDLoaderBase.cxx index dd69727da..7284476eb 100644 --- a/src/MEDLoader/MEDLoaderBase.cxx +++ b/src/MEDLoader/MEDLoaderBase.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDLoaderBase.hxx" #include "InterpKernelException.hxx" diff --git a/src/MEDLoader/MEDLoaderBase.hxx b/src/MEDLoader/MEDLoaderBase.hxx index b31b8c6ad..504b4b0d3 100644 --- a/src/MEDLoader/MEDLoaderBase.hxx +++ b/src/MEDLoader/MEDLoaderBase.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDLOADERBASE_HXX__ #define __MEDLOADERBASE_HXX__ diff --git a/src/MEDLoader/MEDLoaderDefines.hxx b/src/MEDLoader/MEDLoaderDefines.hxx index f1a087457..c68fb07ef 100644 --- a/src/MEDLoader/MEDLoaderDefines.hxx +++ b/src/MEDLoader/MEDLoaderDefines.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDLOADERDEFINES_HXX__ #define __MEDLOADERDEFINES_HXX__ diff --git a/src/MEDLoader/Makefile.am b/src/MEDLoader/Makefile.am index 1edb2c85f..31bdf0ffa 100755 --- a/src/MEDLoader/Makefile.am +++ b/src/MEDLoader/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) include $(top_srcdir)/adm_local/unix/make_common_starter.am diff --git a/src/MEDLoader/SauvMedConvertor.cxx b/src/MEDLoader/SauvMedConvertor.cxx index 800c84ab1..75e1d0c13 100644 --- a/src/MEDLoader/SauvMedConvertor.cxx +++ b/src/MEDLoader/SauvMedConvertor.cxx @@ -39,11 +39,11 @@ #include #include -#ifdef WNT +#ifdef WIN32 #include #endif -#ifndef WNT +#ifndef WIN32 #define HAS_XDR #include #endif @@ -259,7 +259,8 @@ unsigned SauvUtilities::getDimension( INTERP_KERNEL::NormalizedCellType type ) //================================================================================ /*! - * \brief Returns interlace array to transform a quadratic GIBI element to a MED one + * \brief Returns interlace array to transform a quadratic GIBI element to a MED one. + * i-th array item gives node index in GIBI connectivity for i-th MED node */ //================================================================================ @@ -474,7 +475,7 @@ bool ASCIIReader::isASCII() const bool ASCIIReader::open() { -#ifdef WNT +#ifdef WIN32 _file = ::_open (_fileName.c_str(), _O_RDONLY|_O_BINARY); #else _file = ::open (_fileName.c_str(), O_RDONLY); @@ -772,9 +773,9 @@ double ASCIIReader::getDouble() const // 7.70000000000000-100 7.70000000000000+100 7.70000000000000+100 //0123456789012345678901234567890123456789012345678901234567890123456789 const size_t posE = 18; - if ( _curPos[posE] != 'E' && _curPos[posE] != 'e' ) + std::string aStr (_curPos); + if ( aStr.find('E') < 0 && aStr.find('e') < 0 ) { - std::string aStr (_curPos); if ( aStr.size() < posE+1 ) THROW_IK_EXCEPTION("No more doubles (line #" << lineNb() << ")"); aStr.insert( posE, "E", 1 ); diff --git a/src/MEDLoader/SauvWriter.cxx b/src/MEDLoader/SauvWriter.cxx index b86f34dfa..b4f44f554 100644 --- a/src/MEDLoader/SauvWriter.cxx +++ b/src/MEDLoader/SauvWriter.cxx @@ -572,7 +572,7 @@ void SauvWriter::write(const char* fileName) std::fstream fileStream; fileStream.open( fileName, ios::out); if -#ifdef WNT +#ifdef WIN32 ( !fileStream || !fileStream.is_open() ) #else ( !fileStream || !fileStream.rdbuf()->is_open() ) @@ -737,7 +737,7 @@ void SauvWriter::writeSubMeshes() if ( toMedConn ) { for ( unsigned j = 0; j < nbElemNodes; ++j ) - transformedConn[ j ] = cellConn[ toMedConn[ j ]]; + transformedConn[ toMedConn[ j ]] = cellConn[ j ]; cellConn.swap( transformedConn ); } for ( unsigned j = 0; j < nbElemNodes; ++j, fcount++ ) diff --git a/src/MEDLoader/Swig/CMakeLists.txt b/src/MEDLoader/Swig/CMakeLists.txt index 16da8eb57..dece3560b 100644 --- a/src/MEDLoader/Swig/CMakeLists.txt +++ b/src/MEDLoader/Swig/CMakeLists.txt @@ -16,8 +16,9 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) -INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/InstallAndCompilePythonFile.cmake) +INCLUDE(${SALOME_MACROS_DIR}/InstallAndCompilePythonFile.cmake) FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) @@ -27,32 +28,34 @@ SET_SOURCE_FILES_PROPERTIES(MEDLoader.i PROPERTIES SWIG_DEFINITIONS "-shadow") INCLUDE_DIRECTORIES( ${PYTHON_INCLUDE_DIRS} + ${MED3_INCLUDE_DIRS} + ${HDF5_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/../../MEDCoupling_Swig ${CMAKE_CURRENT_SOURCE_DIR}/../../MEDCoupling ${CMAKE_CURRENT_SOURCE_DIR}/../../INTERP_KERNEL ${CMAKE_CURRENT_SOURCE_DIR}/../../INTERP_KERNEL/Bases - ) - -SWIG_ADD_MODULE(MEDLoader python MEDLoader.i) - -SWIG_LINK_LIBRARIES(MEDLoader ${PYTHON_LIBRARIES} medloader) - -INCLUDE_DIRECTORIES( - ${MED3_INCLUDE_DIRS} - ${HDF5_INCLUDE_DIRS} - ${CMAKE_CURRENT_SOURCE_DIR}/.. - ${CMAKE_CURRENT_SOURCE_DIR}/../../MEDCoupling ${CMAKE_CURRENT_SOURCE_DIR}/../../INTERP_KERNEL/Geometric2D ${CMAKE_CURRENT_SOURCE_DIR}/../../INTERP_KERNEL/ExprEval ${CMAKE_CURRENT_SOURCE_DIR}/../../INTERP_KERNEL/GaussPoints - ) +) + +SWIG_ADD_MODULE(MEDLoader python MEDLoader.i) +SWIG_LINK_LIBRARIES(MEDLoader ${PYTHON_LIBS} ${PLATFORM_LIBS} medloader medcoupling) +SET_TARGET_PROPERTIES(_MEDLoader PROPERTIES COMPILE_FLAGS "${PLATFORM_DEFINITIONS}") +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_MEDLoader PROPERTIES DEBUG_OUTPUT_NAME _MEDLoader_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) +INSTALL(TARGETS _MEDLoader DESTINATION ${MED_salomelib_LIBS}) + +INSTALL(FILES MEDLoader.i MEDLoaderTypemaps.i MEDLoaderCommon.i DESTINATION ${MED_salomeinclude_HEADERS}) -INSTALL(TARGETS _MEDLoader DESTINATION ${MED_salomepythondir}) -INSTALL(FILES MEDLoader.i MEDLoaderCommon.i MEDLoaderTypemaps.i DESTINATION ${MED_salomeinclude_HEADERS}) SET(PYFILES_TO_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/MEDLoader.py ${CMAKE_CURRENT_SOURCE_DIR}/libMEDLoader_Swig.py) INSTALL_AND_COMPILE_PYTHON_FILE("${PYFILES_TO_INSTALL}" ${MED_salomescript_PYTHON}) +INSTALL(FILES MEDLoaderDataForTest.py MEDLoaderTest.py MEDLoaderTest2.py MEDLoaderTest3.py DESTINATION ${MED_salomescript_PYTHON}) + ADD_TEST(MEDLoaderTest ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/MEDLoaderTest.py) ADD_TEST(MEDLoaderTest2 ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/MEDLoaderTest2.py) ADD_TEST(MEDLoaderTest3 ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/MEDLoaderTest3.py) diff --git a/src/MEDLoader/Swig/MEDLoader.i b/src/MEDLoader/Swig/MEDLoader.i index 4ee736fac..1f4b743e0 100644 --- a/src/MEDLoader/Swig/MEDLoader.i +++ b/src/MEDLoader/Swig/MEDLoader.i @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) %include "MEDLoaderCommon.i" @@ -59,6 +60,33 @@ def ParaMEDMEMDataArrayIntIdiv(self,*args): def ParaMEDMEMDataArrayIntImod(self,*args): import _MEDLoader return _MEDLoader.DataArrayInt____imod___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIadd(self,*args): + import _MEDLoader + return _MEDLoader.DataArrayDoubleTuple____iadd___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIsub(self,*args): + import _MEDLoader + return _MEDLoader.DataArrayDoubleTuple____isub___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleImul(self,*args): + import _MEDLoader + return _MEDLoader.DataArrayDoubleTuple____imul___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIdiv(self,*args): + import _MEDLoader + return _MEDLoader.DataArrayDoubleTuple____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIadd(self,*args): + import _MEDLoader + return _MEDLoader.DataArrayIntTuple____iadd___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIsub(self,*args): + import _MEDLoader + return _MEDLoader.DataArrayIntTuple____isub___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleImul(self,*args): + import _MEDLoader + return _MEDLoader.DataArrayIntTuple____imul___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIdiv(self,*args): + import _MEDLoader + return _MEDLoader.DataArrayIntTuple____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleImod(self,*args): + import _MEDLoader + return _MEDLoader.DataArrayIntTuple____imod___(self, self, *args) %} %include "MEDCouplingFinalize.i" diff --git a/src/MEDLoader/Swig/MEDLoaderCommon.i b/src/MEDLoader/Swig/MEDLoaderCommon.i index 0ca52c382..f99f6635b 100644 --- a/src/MEDLoader/Swig/MEDLoaderCommon.i +++ b/src/MEDLoader/Swig/MEDLoaderCommon.i @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) %module MEDLoader diff --git a/src/MEDLoader/Swig/MEDLoaderDataForTest.py b/src/MEDLoader/Swig/MEDLoaderDataForTest.py index 26c949d78..104675b3e 100644 --- a/src/MEDLoader/Swig/MEDLoaderDataForTest.py +++ b/src/MEDLoader/Swig/MEDLoaderDataForTest.py @@ -17,6 +17,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) from MEDLoader import * from math import pi,e,sqrt diff --git a/src/MEDLoader/Swig/MEDLoaderExamplesTest.py b/src/MEDLoader/Swig/MEDLoaderExamplesTest.py index f9b265111..24ee31a8c 100644 --- a/src/MEDLoader/Swig/MEDLoaderExamplesTest.py +++ b/src/MEDLoader/Swig/MEDLoaderExamplesTest.py @@ -17,6 +17,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) from MEDLoader import * import unittest diff --git a/src/MEDLoader/Swig/MEDLoaderTest.py b/src/MEDLoader/Swig/MEDLoaderTest.py index 2e31afb65..42f11222e 100644 --- a/src/MEDLoader/Swig/MEDLoaderTest.py +++ b/src/MEDLoader/Swig/MEDLoaderTest.py @@ -17,6 +17,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) import MEDLoader import unittest diff --git a/src/MEDLoader/Swig/MEDLoaderTest2.py b/src/MEDLoader/Swig/MEDLoaderTest2.py index 4e7a94760..f7df16c88 100644 --- a/src/MEDLoader/Swig/MEDLoaderTest2.py +++ b/src/MEDLoader/Swig/MEDLoaderTest2.py @@ -17,6 +17,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) from MEDLoader import * import unittest diff --git a/src/MEDLoader/Swig/MEDLoaderTest3.py b/src/MEDLoader/Swig/MEDLoaderTest3.py index a50b516a6..1622b2980 100644 --- a/src/MEDLoader/Swig/MEDLoaderTest3.py +++ b/src/MEDLoader/Swig/MEDLoaderTest3.py @@ -17,6 +17,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) from MEDLoader import * import unittest diff --git a/src/MEDLoader/Swig/MEDLoaderTypemaps.i b/src/MEDLoader/Swig/MEDLoaderTypemaps.i index 05d60b726..111fd0e2b 100644 --- a/src/MEDLoader/Swig/MEDLoaderTypemaps.i +++ b/src/MEDLoader/Swig/MEDLoaderTypemaps.i @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include diff --git a/src/MEDLoader/Swig/Makefile.am b/src/MEDLoader/Swig/Makefile.am index 18194bb0e..bf514f6f6 100644 --- a/src/MEDLoader/Swig/Makefile.am +++ b/src/MEDLoader/Swig/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) # MED MEDMEM_SWIG : binding of C++ implementation and Python # diff --git a/src/MEDLoader/Swig/SauvLoaderTest.py b/src/MEDLoader/Swig/SauvLoaderTest.py index 6621b405b..88b33f85a 100644 --- a/src/MEDLoader/Swig/SauvLoaderTest.py +++ b/src/MEDLoader/Swig/SauvLoaderTest.py @@ -17,6 +17,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Edward AGAPOV (eap) from MEDLoader import * import unittest, os diff --git a/src/MEDLoader/Swig/libMEDLoader_Swig.py b/src/MEDLoader/Swig/libMEDLoader_Swig.py index 25e57944b..5bf7093d6 100644 --- a/src/MEDLoader/Swig/libMEDLoader_Swig.py +++ b/src/MEDLoader/Swig/libMEDLoader_Swig.py @@ -17,6 +17,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) print """ ********************************************************************** diff --git a/src/MEDLoader/Test/CMakeLists.txt b/src/MEDLoader/Test/CMakeLists.txt index 2865a6450..eb4f5fcd6 100644 --- a/src/MEDLoader/Test/CMakeLists.txt +++ b/src/MEDLoader/Test/CMakeLists.txt @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) INCLUDE_DIRECTORIES( ${CPPUNIT_INCLUDE_DIRS} @@ -39,13 +40,14 @@ SET(TestSauvLoader_SOURCES ) ADD_EXECUTABLE(TestMEDLoader ${TestMEDLoader_SOURCES}) -SET_TARGET_PROPERTIES(TestMEDLoader PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${CPPUNIT_DEFINITIONS}") -TARGET_LINK_LIBRARIES(TestMEDLoader medloader ${CPPUNIT_LIBS}) +SET_TARGET_PROPERTIES(TestMEDLoader PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestMEDLoader medloader ${CPPUNIT_LIBS} ${PLATFORM_LIBS}) ADD_TEST(TestMEDLoader TestMEDLoader) ADD_EXECUTABLE(TestSauvLoader ${TestSauvLoader_SOURCES}) -SET_TARGET_PROPERTIES(TestSauvLoader PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${CPPUNIT_DEFINITIONS}") -TARGET_LINK_LIBRARIES(TestSauvLoader medloader ${CPPUNIT_LIBS}) +SET_TARGET_PROPERTIES(TestSauvLoader PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") + +TARGET_LINK_LIBRARIES(TestSauvLoader medloader ${CPPUNIT_LIBS} ${PLATFORM_LIBS}) ADD_TEST(TestSauvLoader TestSauvLoader) INSTALL(TARGETS TestMEDLoader TestSauvLoader DESTINATION ${MED_salomebin_BINS}) diff --git a/src/MEDLoader/Test/MEDLoaderTest.cxx b/src/MEDLoader/Test/MEDLoaderTest.cxx index f4f7362fc..1a2528843 100644 --- a/src/MEDLoader/Test/MEDLoaderTest.cxx +++ b/src/MEDLoader/Test/MEDLoaderTest.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "MEDLoaderTest.hxx" #include "MEDLoader.hxx" diff --git a/src/MEDLoader/Test/MEDLoaderTest.hxx b/src/MEDLoader/Test/MEDLoaderTest.hxx index bdd7278d6..111f2c0b9 100644 --- a/src/MEDLoader/Test/MEDLoaderTest.hxx +++ b/src/MEDLoader/Test/MEDLoaderTest.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __MEDLOADERTEST_HXX__ #define __MEDLOADERTEST_HXX__ diff --git a/src/MEDLoader/Test/Makefile.am b/src/MEDLoader/Test/Makefile.am index aced95abd..c6d7be534 100755 --- a/src/MEDLoader/Test/Makefile.am +++ b/src/MEDLoader/Test/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) include $(top_srcdir)/adm_local/unix/make_common_starter.am diff --git a/src/MEDLoader/Test/SauvLoaderTest.cxx b/src/MEDLoader/Test/SauvLoaderTest.cxx index 249f19206..76df3f1ae 100644 --- a/src/MEDLoader/Test/SauvLoaderTest.cxx +++ b/src/MEDLoader/Test/SauvLoaderTest.cxx @@ -25,7 +25,7 @@ #include "MEDCouplingFieldDouble.hxx" #include "MEDCouplingMemArray.hxx" -#ifdef WNT +#ifdef WIN32 # include #else # include @@ -205,7 +205,7 @@ void SauvLoaderTest::tearDown() const char* fileToRemove[nbFilesToRemove] = { "allPillesTest.med", "pointe.sauv" }; for ( int i = 0; i < nbFilesToRemove; ++i ) { -#ifdef WNT +#ifdef WIN32 if (GetFileAttributes(fileToRemove[i]) != INVALID_FILE_ATTRIBUTES) #else if (access(fileToRemove[i], F_OK) == 0) @@ -229,7 +229,7 @@ std::string SauvLoaderTest::getResourceFile( const std::string& filename ) resourceFile += "/share/salome/resources/med/"; } resourceFile += filename; -#ifdef WNT +#ifdef WIN32 std::string fixedpath = resourceFile; for ( int i=0; i < fixedpath.length(); ++i ) if (fixedpath[i] == '/') diff --git a/src/MEDLoader/Test/TestMEDLoader.cxx b/src/MEDLoader/Test/TestMEDLoader.cxx index 9e9b6d872..c2fc70395 100644 --- a/src/MEDLoader/Test/TestMEDLoader.cxx +++ b/src/MEDLoader/Test/TestMEDLoader.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "CppUnitTest.hxx" #include "MEDLoaderTest.hxx" diff --git a/src/MEDMEM/CMakeLists.txt b/src/MEDMEM/CMakeLists.txt index 1484d97c8..983808522 100644 --- a/src/MEDMEM/CMakeLists.txt +++ b/src/MEDMEM/CMakeLists.txt @@ -71,8 +71,8 @@ SET(medmem_SOURCES ) ADD_LIBRARY(medmem SHARED ${medmem_SOURCES}) -SET_TARGET_PROPERTIES(medmem PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS}") -TARGET_LINK_LIBRARIES(medmem interpkernel ${MED3_LIBS_C_ONLY} ${HDF5_LIBS} ${XDR_LIBS}) +SET_TARGET_PROPERTIES(medmem PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(medmem interpkernel ${MED3_LIBS_C_ONLY} ${HDF5_LIBS} ${XDR_LIBS} ${PLATFORM_LIBS}) INSTALL(TARGETS medmem DESTINATION ${MED_salomelib_LIBS}) FILE(GLOB medmem_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") diff --git a/src/MEDMEM/MEDMEM.hxx b/src/MEDMEM/MEDMEM.hxx index b5da62b4a..fa1a97aae 100755 --- a/src/MEDMEM/MEDMEM.hxx +++ b/src/MEDMEM/MEDMEM.hxx @@ -27,7 +27,7 @@ #ifndef _MEDMEM_HXX_ #define _MEDMEM_HXX_ -#ifdef WNT +#ifdef WIN32 #if defined MEDMEM_EXPORTS || defined medmem_EXPORTS #if defined WIN32 #define MEDMEM_EXPORT __declspec( dllexport ) @@ -45,7 +45,7 @@ #define MEDMEM_EXPORT #endif -#ifdef WNT +#ifdef WIN32 #pragma warning(disable:4251) // Warning DLL Interface ... #pragma warning(disable:4290) // Warning Exception ... #endif diff --git a/src/MEDMEM/MEDMEM_Connectivity.hxx b/src/MEDMEM/MEDMEM_Connectivity.hxx index d74b0260f..95d86a414 100644 --- a/src/MEDMEM/MEDMEM_Connectivity.hxx +++ b/src/MEDMEM/MEDMEM_Connectivity.hxx @@ -64,7 +64,7 @@ class MEDMEM_EXPORT CONNECTIVITY sum+=key[i]*(i+key.size()); return sum; } -// #ifdef WNT +// #ifdef WIN32 // static const size_t bucket_size = 4; // static const size_t min_buckets = 8; // bool operator()(const vector& key1, const vector& key2) const diff --git a/src/MEDMEM/MEDMEM_DriverTools.hxx b/src/MEDMEM/MEDMEM_DriverTools.hxx index a429f0ffb..6bf33f896 100644 --- a/src/MEDMEM/MEDMEM_DriverTools.hxx +++ b/src/MEDMEM/MEDMEM_DriverTools.hxx @@ -141,7 +141,7 @@ struct MEDMEM_EXPORT _groupe */ const _maille& maille(int index) { return *mailles[index]; } bool empty() const { return mailles.empty() && groupes.empty(); } -#ifdef WNT +#ifdef WIN32 int size() const { return (mailles.size()>relocMap.size())?mailles.size():relocMap.size(); } #else int size() const { return std::max( mailles.size(), relocMap.size() ); } @@ -167,7 +167,7 @@ struct MEDMEM_EXPORT _fieldBase { std::string & compName( int i_comp ) { return _comp_names[ i_comp ]; } bool isValidNbGauss() const { return *std::max_element( _nb_gauss.begin(), _nb_gauss.end() ) == *std::min_element( _nb_gauss.begin(), _nb_gauss.end() ); } -#ifdef WNT +#ifdef WIN32 int nbGauss() const { return (1>_nb_gauss[0])?1:_nb_gauss[0]; } #else int nbGauss() const { return std::max( 1, _nb_gauss[0] ); } diff --git a/src/MEDMEM/MEDMEM_EnsightFieldDriver.cxx b/src/MEDMEM/MEDMEM_EnsightFieldDriver.cxx index 68e2c7d70..e56c11f1e 100644 --- a/src/MEDMEM/MEDMEM_EnsightFieldDriver.cxx +++ b/src/MEDMEM/MEDMEM_EnsightFieldDriver.cxx @@ -21,7 +21,7 @@ #include #include -#ifndef WNT +#ifndef WIN32 #include #endif @@ -738,7 +738,7 @@ void ENSIGHT_FIELD_RDONLY_DRIVER::read (void) { // Read values -#ifndef WNT +#ifndef WIN32 int curExcept = fedisableexcept( FE_ALL_EXCEPT ); //!< there may be nan values #endif @@ -765,7 +765,7 @@ void ENSIGHT_FIELD_RDONLY_DRIVER::read (void) } } -#ifndef WNT +#ifndef WIN32 feclearexcept( FE_ALL_EXCEPT ); if ( curExcept >= 0 ) feenableexcept( curExcept ); diff --git a/src/MEDMEM/MEDMEM_EnsightUtils.cxx b/src/MEDMEM/MEDMEM_EnsightUtils.cxx index cef49674b..b12520ecf 100644 --- a/src/MEDMEM/MEDMEM_EnsightUtils.cxx +++ b/src/MEDMEM/MEDMEM_EnsightUtils.cxx @@ -30,7 +30,7 @@ #include "MEDMEM_EnsightFieldDriver.hxx" #include "MEDMEM_DriverTools.hxx" -#ifdef WNT +#ifdef WIN32 #include #else #include @@ -112,7 +112,7 @@ namespace MEDMEM } } -#ifdef WNT +#ifdef WIN32 #define FILE_SEPARATOR '\\' #else #define FILE_SEPARATOR '/' @@ -1832,7 +1832,7 @@ void _CaseFileDriver_User::merge( const GENDRIVER& driver) bool _CaseFileDriver_User::isBinaryDataFile(const string& dataFileName) { -#ifdef WNT +#ifdef WIN32 int _file = ::_open (dataFileName.c_str(), _O_RDONLY|_O_BINARY); #else int _file = ::open (dataFileName.c_str(), O_RDONLY); @@ -2394,7 +2394,7 @@ std::ostream& operator << (std::ostream& os, const _SubPartDesc& desc) _ASCIIFileReader::_ASCIIFileReader(const string& fileName) throw (MEDEXCEPTION) { -#ifdef WNT +#ifdef WIN32 _file = ::_open (fileName.c_str(), _O_RDONLY|_O_BINARY); #else _file = ::open (fileName.c_str(), O_RDONLY); @@ -2779,7 +2779,7 @@ _ASCIIFileReader::~_ASCIIFileReader() _BinaryFileReader::_BinaryFileReader(const string& fileName) throw (MEDEXCEPTION) : _exception(STRING("Unexpected EOF ") << fileName), _mySwapBytes(false) { -#ifdef WNT +#ifdef WIN32 _file = ::_open (fileName.c_str(), _O_RDONLY|_O_BINARY); #else _file = ::open (fileName.c_str(), O_RDONLY); @@ -2877,7 +2877,7 @@ void _BinaryFileReader::skipTimeStepBeginning() throw (MEDEXCEPTION) _BinaryFileWriter::_BinaryFileWriter(const string& fileName) throw (MEDEXCEPTION) : _exception(STRING("Can't write into ") << fileName) { -#ifdef WNT +#ifdef WIN32 _file = ::_open (fileName.c_str(), _O_WRONLY|_O_BINARY|_O_TRUNC); #else _file = ::open (fileName.c_str(), O_WRONLY|O_TRUNC); //length shall be truncated to 0 diff --git a/src/MEDMEM/MEDMEM_EnsightUtils.hxx b/src/MEDMEM/MEDMEM_EnsightUtils.hxx index 749762e57..29b350b56 100644 --- a/src/MEDMEM/MEDMEM_EnsightUtils.hxx +++ b/src/MEDMEM/MEDMEM_EnsightUtils.hxx @@ -34,7 +34,7 @@ #include #include -#ifdef WNT +#ifdef WIN32 # define isnan _isnan #else # include @@ -610,7 +610,7 @@ public: } float getReal() throw (MEDEXCEPTION) { if ( eof() ) throw MEDEXCEPTION("Unexpected EOF"); -#ifdef WNT +#ifdef WIN32 #else return strtof(_ptr, &_ptr); #endif @@ -800,7 +800,7 @@ private: if ( int(bufSize) > _maxPos - _pos ) throw _exception; T* buf = new T[ nb ]; -#ifdef WNT +#ifdef WIN32 #else ssize_t nBytesRead = ::read (_file, buf, bufSize ); _pos += nBytesRead; @@ -878,7 +878,7 @@ private: template void add(const T* data, int nbValues) throw (MEDEXCEPTION) { -#ifdef WNT +#ifdef WIN32 #else ssize_t nbWritten = ::write( _file, (const void *) data, nbValues * sizeof(T)); if ( nbWritten < 0 ) throw _exception; diff --git a/src/MEDMEM/MEDMEM_GibiMeshDriver.cxx b/src/MEDMEM/MEDMEM_GibiMeshDriver.cxx index 6ed04e531..87312e66f 100644 --- a/src/MEDMEM/MEDMEM_GibiMeshDriver.cxx +++ b/src/MEDMEM/MEDMEM_GibiMeshDriver.cxx @@ -51,7 +51,7 @@ class FIELD_; #include #include -#ifdef WNT +#ifdef WIN32 #include #else #include @@ -1427,7 +1427,7 @@ GIBI_MESH_DRIVER::GIBI_MESH_DRIVER(const string & fileName, int pos=fileName.find(ext,0); int pos1=fileName.rfind('/'); if ( pos < 0 || pos >= (int)fileName.size() ) pos = fileName.size(); -#ifdef WNT +#ifdef WIN32 if ( pos1 < 0 || pos1 >= (int)fileName.size() ) pos1 = fileName.rfind('\\'); #endif if ( pos1 < 0 || pos1 >= (int)fileName.size() ) pos1 = -1; @@ -1518,7 +1518,7 @@ void GIBI_MESH_RDONLY_DRIVER::open() // if ( aMode != MED_EN::MED_LECT && aMode != MED_EN::MED_REMP ) // throw MEDEXCEPTION(LOCALIZED(STRING(LOC) << " Bad file mode access ! " << aMode)); -#ifdef WNT +#ifdef WIN32 _File = ::_open (_fileName.c_str(), _O_RDONLY|_O_BINARY); #else _File = ::open (_fileName.c_str(), O_RDONLY); @@ -1565,7 +1565,7 @@ void GIBI_MESH_RDONLY_DRIVER::open() xdr_destroy((XDR*)_xdrs); free((XDR*)_xdrs); fclose(_xdrs_file); -#ifdef WNT +#ifdef WIN32 _File = ::_open (_fileName.c_str(), _O_RDONLY|_O_BINARY); #else ::close (_File); // ? needed ? @@ -2606,7 +2606,7 @@ void GIBI_MESH_WRONLY_DRIVER::open() } //change for windows compilation if ( !_gibi || -#ifdef WNT +#ifdef WIN32 !_gibi.is_open() #else !_gibi.rdbuf()->is_open() diff --git a/src/MEDMEM/MEDMEM_GibiMeshDriver.hxx b/src/MEDMEM/MEDMEM_GibiMeshDriver.hxx index 68261325e..143469ca7 100644 --- a/src/MEDMEM/MEDMEM_GibiMeshDriver.hxx +++ b/src/MEDMEM/MEDMEM_GibiMeshDriver.hxx @@ -45,7 +45,7 @@ #include ///// -#ifdef WNT +#ifdef WIN32 #else #define HAS_XDR #endif diff --git a/src/MEDMEM/MEDMEM_Init.cxx b/src/MEDMEM/MEDMEM_Init.cxx index d8870d8cc..cf851f094 100644 --- a/src/MEDMEM/MEDMEM_Init.cxx +++ b/src/MEDMEM/MEDMEM_Init.cxx @@ -49,7 +49,7 @@ MEDMEM::INIT::INIT() if (traceKind == NULL) { -#ifndef WNT +#ifndef WIN32 setenv("SALOME_trace","local",1); #else _putenv("SALOME_trace=%TEMP%\\local"); diff --git a/src/MEDMEM/MEDMEM_PorflowMeshDriver.cxx b/src/MEDMEM/MEDMEM_PorflowMeshDriver.cxx index 3fc44e393..fc0474ced 100644 --- a/src/MEDMEM/MEDMEM_PorflowMeshDriver.cxx +++ b/src/MEDMEM/MEDMEM_PorflowMeshDriver.cxx @@ -101,7 +101,7 @@ PORFLOW_MESH_DRIVER::PORFLOW_MESH_DRIVER(const string & fileName, const string ext=".inp"; // expected extension string::size_type pos=fileName.find(ext,0); string::size_type pos1=fileName.rfind('/'); -#ifdef WNT +#ifdef WIN32 if (pos1 == string::npos ) pos1=fileName.rfind('\\'); #endif if (pos1 != string::npos ) @@ -386,7 +386,7 @@ void PORFLOW_MESH_RDONLY_DRIVER::read(void) // the directory name will be used to locate the files included in _fileName. string dirName; string::size_type pos=_fileName.rfind('/'); -#ifdef WNT +#ifdef WIN32 if (pos == string::npos ) pos=_fileName.rfind('\\'); #endif if (pos != string::npos ) diff --git a/src/MEDMEM/MEDMEM_VtkFieldDriver.hxx b/src/MEDMEM/MEDMEM_VtkFieldDriver.hxx index 6457d32cb..e914ec694 100644 --- a/src/MEDMEM/MEDMEM_VtkFieldDriver.hxx +++ b/src/MEDMEM/MEDMEM_VtkFieldDriver.hxx @@ -42,7 +42,7 @@ #include "MEDMEM_CellModel.hxx" #include "MEDMEM_VtkMeshDriver.hxx" -#ifdef WNT +#ifdef WIN32 #include #else #include @@ -378,14 +378,14 @@ template void VTK_FIELD_DRIVER::writeAppend(void) const // check if dataStr is already present in the file bool toWriteDataStr = true; -#ifdef WNT +#ifdef WIN32 int vtkFile = ::_open (_fileName.c_str(), _O_RDONLY|_O_BINARY); #else int vtkFile = ::open (_fileName.c_str(), O_RDONLY); #endif if ( vtkFile > 0 ) { -#ifdef WNT +#ifdef WIN32 ssize_t fileSize = ::_lseek( vtkFile, 0, SEEK_END); ::lseek( vtkFile, 0, SEEK_SET); char* buf = new char[ fileSize ]; ::_read (vtkFile, buf, fileSize ); @@ -398,7 +398,7 @@ template void VTK_FIELD_DRIVER::writeAppend(void) const while ( ++vtkData < vtkDataEnd && toWriteDataStr ) toWriteDataStr = ( strncmp( dataStr.data(), vtkData, dataStr.size()) != 0 ); delete [] buf; -#ifdef WNT +#ifdef WIN32 ::_close (vtkFile); #else ::close (vtkFile); diff --git a/src/MEDMEM/MEDMEM_VtkMeshDriver.cxx b/src/MEDMEM/MEDMEM_VtkMeshDriver.cxx index 335b21d27..256a6da79 100644 --- a/src/MEDMEM/MEDMEM_VtkMeshDriver.cxx +++ b/src/MEDMEM/MEDMEM_VtkMeshDriver.cxx @@ -521,7 +521,7 @@ bool _VTK_BinaryWriter::open(bool append) const // opening _VTK_BinaryWriter* mutableMe =(_VTK_BinaryWriter*) this; int append_flag = 0; -#ifdef WNT +#ifdef WIN32 if ( append ) append_flag = _O_APPEND; mutableMe->_binaryFile = ::_open (_fileName.c_str(), _O_WRONLY|_O_BINARY|append_flag); #else @@ -538,7 +538,7 @@ bool _VTK_BinaryWriter::close() const { if ( _binaryFile ) { -#ifdef WNT +#ifdef WIN32 ::_close (_binaryFile); #else ::close (_binaryFile); diff --git a/src/MEDMEM/MEDMEM_VtkMeshDriver.hxx b/src/MEDMEM/MEDMEM_VtkMeshDriver.hxx index ce13bb384..91e3c8bf7 100644 --- a/src/MEDMEM/MEDMEM_VtkMeshDriver.hxx +++ b/src/MEDMEM/MEDMEM_VtkMeshDriver.hxx @@ -143,7 +143,7 @@ public: while ( ++intBuf < bufEnd ) *intBuf = swapBytes( *intBuf ); } -#ifdef WNT +#ifdef WIN32 ssize_t nbWritten = ::_write( _binaryFile, toWrite, nbValues * sizeof(T)); #else ssize_t nbWritten = ::write( _binaryFile, toWrite, nbValues * sizeof(T)); diff --git a/src/MEDMEMBinTest/CMakeLists.txt b/src/MEDMEMBinTest/CMakeLists.txt index 2dc0288eb..12ffc1e54 100644 --- a/src/MEDMEMBinTest/CMakeLists.txt +++ b/src/MEDMEMBinTest/CMakeLists.txt @@ -131,6 +131,15 @@ SET(testAnalFile_SOURCES testAnalFile.cxx) SET(test_MEDMEM_MeshingFlica_SOURCES test_MEDMEM_MeshingFlica.cxx) SET(testConvertPolygon_SOURCES testConvertPolygon.cxx) +SET(create_mesh_SOURCES create_mesh.c) +SET(create_mesh_c2q4s2_SOURCES create_mesh_c2q4s2.c) +SET(create_mesh_c3h8q4_SOURCES create_mesh_c3h8q4.c) +SET(create_mesh_c3h8q4_wrong_SOURCES create_mesh_c3h8q4_wrong.c) +SET(create_mesh_c2q4s2_wrong_SOURCES create_mesh_c2q4s2_wrong.c) +SET(create_grid_SOURCES create_grid.c) +SET(create_mesh_c2q4_SOURCES create_mesh_c2q4.c) +SET(create_mesh_c3h8_SOURCES create_mesh_c3h8.c) +SET(create_poly3D_SOURCES create_poly3D.c) SET(ALLMEDMEMBIN_TESTS dumpInterpolation @@ -185,17 +194,27 @@ SET(ALLMEDMEMBIN_TESTS testAnalFile test_MEDMEM_MeshingFlica testConvertPolygon + create_mesh + create_mesh_c2q4s2 + create_mesh_c3h8q4 + create_mesh_c3h8q4_wrong + create_mesh_c2q4s2_wrong + create_grid + create_mesh_c2q4 + create_mesh_c3h8 + create_poly3D ) FOREACH(ALLMEDMEMBIN_TEST ${ALLMEDMEMBIN_TESTS}) ADD_EXECUTABLE(${ALLMEDMEMBIN_TEST} ${${ALLMEDMEMBIN_TEST}_SOURCES}) - SET_TARGET_PROPERTIES(${ALLMEDMEMBIN_TEST} PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS}") - TARGET_LINK_LIBRARIES(${ALLMEDMEMBIN_TEST} medmem) + SET_TARGET_PROPERTIES(${ALLMEDMEMBIN_TEST} PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${PLATFORM_DEFINITIONS}") + TARGET_LINK_LIBRARIES(${ALLMEDMEMBIN_TEST} medmem ${PLATFORM_LIBS}) ENDFOREACH(ALLMEDMEMBIN_TEST ${ALLMEDMEMBIN_TESTS}) INSTALL(TARGETS ${ALLMEDMEMBIN_TESTS} DESTINATION ${MED_salomebin_BINS}) SET(MEDMEMBINTEST_PYOPT_TEST -c"import sys;import os;import subprocess;os.putenv(\"srcdir\",sys.argv[1]);sys.exit(subprocess.call([\"sh\",sys.argv[2]]))") + ADD_TEST(check_convertToPoly ${PYTHON_EXECUTABLE} ${MEDMEMBINTEST_PYOPT_TEST} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/check_convertToPoly) ADD_TEST(check_duplicateMED ${PYTHON_EXECUTABLE} ${MEDMEMBINTEST_PYOPT_TEST} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/check_duplicateMED) ADD_TEST(check_ensight2med ${PYTHON_EXECUTABLE} ${MEDMEMBINTEST_PYOPT_TEST} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/check_ensight2med) diff --git a/src/MEDMEMBinTest/testConvertPolygon.cxx b/src/MEDMEMBinTest/testConvertPolygon.cxx index 1249429aa..df6669530 100644 --- a/src/MEDMEMBinTest/testConvertPolygon.cxx +++ b/src/MEDMEMBinTest/testConvertPolygon.cxx @@ -21,7 +21,7 @@ // #include "MEDMEM_Mesh.hxx" -#ifdef WNT +#ifdef WIN32 #include #define access _access #define W_OK 02 diff --git a/src/MEDMEMBinTest/test_MEDMEM_Meshing.cxx b/src/MEDMEMBinTest/test_MEDMEM_Meshing.cxx index 7ffc8869d..f25909c00 100644 --- a/src/MEDMEMBinTest/test_MEDMEM_Meshing.cxx +++ b/src/MEDMEMBinTest/test_MEDMEM_Meshing.cxx @@ -26,7 +26,7 @@ #include "MEDMEM_Meshing.hxx" #include "MEDMEM_Group.hxx" #include "MEDMEM_Field.hxx" -#ifdef WNT +#ifdef WIN32 #include #define access _access #define W_OK 02 diff --git a/src/MEDMEMBinTest/test_MEDMEM_MeshingFlica.cxx b/src/MEDMEMBinTest/test_MEDMEM_MeshingFlica.cxx index e82ee51a6..b1bf88a2f 100644 --- a/src/MEDMEMBinTest/test_MEDMEM_MeshingFlica.cxx +++ b/src/MEDMEMBinTest/test_MEDMEM_MeshingFlica.cxx @@ -22,7 +22,7 @@ #include "MEDMEM_Meshing.hxx" #include "MEDMEM_Group.hxx" -#ifdef WNT +#ifdef WIN32 #include #define access _access #define W_OK 02 diff --git a/src/MEDMEMBinTest/test_MEDMEM_Meshing_poly.cxx b/src/MEDMEMBinTest/test_MEDMEM_Meshing_poly.cxx index 2cc8a9cc9..622fce12c 100644 --- a/src/MEDMEMBinTest/test_MEDMEM_Meshing_poly.cxx +++ b/src/MEDMEMBinTest/test_MEDMEM_Meshing_poly.cxx @@ -21,7 +21,7 @@ // #include "MEDMEM_Meshing.hxx" #include "MEDMEM_DriverFactory.hxx" -#ifdef WNT +#ifdef WIN32 #include #define access _access #define W_OK 02 diff --git a/src/MEDMEMCppTest/CMakeLists.txt b/src/MEDMEMCppTest/CMakeLists.txt index d85cee87e..ad869500a 100644 --- a/src/MEDMEMCppTest/CMakeLists.txt +++ b/src/MEDMEMCppTest/CMakeLists.txt @@ -114,15 +114,17 @@ SET(MEDMEMTest_VtkMeshDriver_fault_SOURCES ) ADD_LIBRARY(MEDMEMCppTest SHARED ${MEDMEMCppTest_SOURCES}) -SET_TARGET_PROPERTIES(MEDMEMCppTest PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${CPPUNIT_DEFINITIONS}") +SET_TARGET_PROPERTIES(MEDMEMCppTest PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") TARGET_LINK_LIBRARIES(MEDMEMCppTest medmem ${CPPUNIT_LIBS}) SET(ALLMEDMEMCPP_TESTS TestMEDMEM MEDMEMTest_Array_fault MEDMEMTest_Connectivity_fault MEDMEMTest_Coordinate_fault MEDMEMTest_Family_fault MEDMEMTest_Field_fault MEDMEMTest_Grid_fault MEDMEMTest_MeshAndMeshing_fault MEDMEMTest_Support_fault MEDMEMTest_VtkFieldDriver_fault MEDMEMTest_VtkMeshDriver_fault) FOREACH(MEDMEMCPP_TEST ${ALLMEDMEMCPP_TESTS}) ADD_EXECUTABLE(${MEDMEMCPP_TEST} ${${MEDMEMCPP_TEST}_SOURCES}) - SET_TARGET_PROPERTIES(${MEDMEMCPP_TEST} PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS}") - TARGET_LINK_LIBRARIES(${MEDMEMCPP_TEST} MEDMEMCppTest) + SET_TARGET_PROPERTIES(${MEDMEMCPP_TEST} PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${PLATFORM_DEFINITIONS}") + TARGET_LINK_LIBRARIES(${MEDMEMCPP_TEST} MEDMEMCppTest ${PLATFORM_LIBS}) ENDFOREACH(MEDMEMCPP_TEST ${ALLMEDMEMCPP_TESTS}) INSTALL(TARGETS MEDMEMCppTest DESTINATION ${MED_salomelib_LIBS}) INSTALL(TARGETS ${ALLMEDMEMCPP_TESTS} DESTINATION ${MED_salomebin_BINS}) +INSTALL(FILES testMEDMEM.py DESTINATION ${MED_salomebin_BINS}) +INSTALL(FILES MEDMEMTest.hxx MEDMEMCppTestExport.hxx DESTINATION ${MED_salomeinclude_HEADERS}) diff --git a/src/MEDMEMCppTest/MEDMEMCppTestExport.hxx b/src/MEDMEMCppTest/MEDMEMCppTestExport.hxx index b230f2164..be9d30653 100644 --- a/src/MEDMEMCppTest/MEDMEMCppTestExport.hxx +++ b/src/MEDMEMCppTest/MEDMEMCppTestExport.hxx @@ -20,7 +20,7 @@ #ifndef _MEDMEMCPPTESTEXPORT_HXX_ #define _MEDMEMCPPTESTEXPORT_HXX_ -#ifdef WNT +#ifdef WIN32 # if defined MEDMEMCppTest_EXPORTS # define MEDMEMCPPTEST_EXPORT __declspec( dllexport ) # else diff --git a/src/MEDMEMCppTest/MEDMEMTest.cxx b/src/MEDMEMCppTest/MEDMEMTest.cxx index 0ee5d04a3..0e2c4d085 100644 --- a/src/MEDMEMCppTest/MEDMEMTest.cxx +++ b/src/MEDMEMCppTest/MEDMEMTest.cxx @@ -33,7 +33,7 @@ #include #include -#ifdef WNT +#ifdef WIN32 #include #endif @@ -654,7 +654,7 @@ MEDMEMTest_TmpFilesRemover::~MEDMEMTest_TmpFilesRemover() { set::iterator it = myTmpFiles.begin(); for (; it != myTmpFiles.end(); it++) { -#ifdef WNT +#ifdef WIN32 //if (GetFileAttributes((*it).data()) & FILE_ATTRIBUTE_NORMAL) if (GetFileAttributes((*it).data()) != INVALID_FILE_ATTRIBUTES) #else diff --git a/src/MEDMEMCppTest/MEDMEMTest_DesactivateFacesComputation.cxx b/src/MEDMEMCppTest/MEDMEMTest_DesactivateFacesComputation.cxx index 788e60770..87d92ff9a 100644 --- a/src/MEDMEMCppTest/MEDMEMTest_DesactivateFacesComputation.cxx +++ b/src/MEDMEMCppTest/MEDMEMTest_DesactivateFacesComputation.cxx @@ -28,7 +28,7 @@ #include #include -#ifdef WNT +#ifdef WIN32 #include #endif @@ -186,7 +186,7 @@ void MEDMEMTest::testDesactivateFacesComputation() MEDMEM::GIBI_MESH_WRONLY_DRIVER *gibidriver=new MEDMEM::GIBI_MESH_WRONLY_DRIVER(tmpGibiFile,mesh ); id=mesh->addDriver(*gibidriver); mesh->write(id); -#ifdef WNT +#ifdef WIN32 CPPUNIT_ASSERT( GetFileAttributes(tmpGibiFile.c_str()) != INVALID_FILE_ATTRIBUTES ); #else CPPUNIT_ASSERT( access(tmpGibiFile.c_str(), F_OK) == 0 ); diff --git a/src/MEDMEMCppTest/MEDMEMTest_MedFileBrowser.cxx b/src/MEDMEMCppTest/MEDMEMTest_MedFileBrowser.cxx index 446510c35..21e2e3bb8 100644 --- a/src/MEDMEMCppTest/MEDMEMTest_MedFileBrowser.cxx +++ b/src/MEDMEMCppTest/MEDMEMTest_MedFileBrowser.cxx @@ -25,7 +25,7 @@ // #include // #include -#ifdef WNT +#ifdef WIN32 #include #endif diff --git a/src/MEDMEMCppTest/MEDMEMTest_Utils.cxx b/src/MEDMEMCppTest/MEDMEMTest_Utils.cxx index b4a047834..b3d0df9c9 100644 --- a/src/MEDMEMCppTest/MEDMEMTest_Utils.cxx +++ b/src/MEDMEMCppTest/MEDMEMTest_Utils.cxx @@ -22,7 +22,7 @@ #include #include -#ifdef WNT +#ifdef WIN32 #include #else #include @@ -77,7 +77,7 @@ std::string getTmpDirectory() std::string tmpd = ""; for ( std::list::iterator dir = dirs.begin(); dir != dirs.end() && tmpd == "" ; ++dir ) { -#ifdef WNT +#ifdef WIN32 if ( GetFileAttributes(dir->data()) & FILE_ATTRIBUTE_DIRECTORY ) #else if ( access( dir->data(), W_OK ) == 0 ) @@ -106,7 +106,7 @@ std::string makeTmpFile( const std::string& tmpfile, const std::string& srcfile { std::string tmpf = fixSlashes( getTmpDirectory() + "/" + tmpfile ); if ( srcfile != "" ) { -#ifdef WNT +#ifdef WIN32 std::string cmd = "copy " + fixSlashes( srcfile ) + " " + tmpf; #else std::string cmd = "cp " + srcfile + " " + tmpf + " ; chmod +w " + tmpf; @@ -125,7 +125,7 @@ std::string makeTmpFile( const std::string& tmpfile, const std::string& srcfile std::string fixSlashes( const std::string& path) { -#ifdef WNT +#ifdef WIN32 std::string fixedpath = path; for ( int i=0; i < path.size(); ++i ) if (path[i] == '/') diff --git a/src/MEDMEM_I/CMakeLists.txt b/src/MEDMEM_I/CMakeLists.txt index edba2fed8..1a9b7e745 100644 --- a/src/MEDMEM_I/CMakeLists.txt +++ b/src/MEDMEM_I/CMakeLists.txt @@ -19,6 +19,7 @@ INCLUDE_DIRECTORIES( ${OMNIORB_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} ${MED3_INCLUDE_DIRS} ${HDF5_INCLUDE_DIRS} ${KERNEL_ROOT_DIR}/include/salome @@ -42,8 +43,9 @@ SET(MEDMEMImpl_SOURCES ) ADD_LIBRARY(MEDMEMImpl SHARED ${MEDMEMImpl_SOURCES}) -SET_TARGET_PROPERTIES(MEDMEMImpl PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS}") -TARGET_LINK_LIBRARIES(MEDMEMImpl medmem SalomeIDLMED) +SET_TARGET_PROPERTIES(MEDMEMImpl PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(MEDMEMImpl medmem SalomeIDLMED ${PLATFORM_LIBS} ${SalomeLifeCycleCORBA} ${SALOMELocalTrace} ${SalomeCommunication} ${SalomeGenericObj} ${SalomeNS} ${OpUtil}) + INSTALL(TARGETS MEDMEMImpl DESTINATION ${MED_salomelib_LIBS}) FILE(GLOB MEDMEMImpl_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") diff --git a/src/MEDMEM_I/MEDMEM_I.hxx b/src/MEDMEM_I/MEDMEM_I.hxx index 9d02f8c5f..5d4e18d62 100755 --- a/src/MEDMEM_I/MEDMEM_I.hxx +++ b/src/MEDMEM_I/MEDMEM_I.hxx @@ -27,7 +27,7 @@ #ifndef _MEDMEM_I_HXX_ #define _MEDMEM_I_HXX_ -#ifdef WNT +#ifdef WIN32 #if defined MEDMEM_I_EXPORTS || defined MEDMEMImpl_EXPORTS #if defined WIN32 #define MEDMEM_I_EXPORT __declspec( dllexport ) diff --git a/src/MEDMEM_SWIG/CMakeLists.txt b/src/MEDMEM_SWIG/CMakeLists.txt index c721f6fa0..42a42423a 100644 --- a/src/MEDMEM_SWIG/CMakeLists.txt +++ b/src/MEDMEM_SWIG/CMakeLists.txt @@ -22,7 +22,7 @@ INCLUDE(${SWIG_USE_FILE}) SET_SOURCE_FILES_PROPERTIES(libMEDMEM_Swig.i PROPERTIES CPLUSPLUS ON) SET_SOURCE_FILES_PROPERTIES(libMEDMEM_Swig.i PROPERTIES SWIG_DEFINITIONS "-shadow") -SET_SOURCE_FILES_PROPERTIES(libMEDMEM_SwigPYTHON_wrap.cxx PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS}") +SET_SOURCE_FILES_PROPERTIES(libMEDMEM_SwigPYTHON_wrap.cxx PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${PLATFORM_DEFINITIONS}") INCLUDE_DIRECTORIES( ${PYTHON_INCLUDE_DIRS} @@ -37,10 +37,42 @@ INCLUDE_DIRECTORIES( ) SWIG_ADD_MODULE(libMEDMEM_Swig python libMEDMEM_Swig.i) -SWIG_LINK_LIBRARIES(libMEDMEM_Swig ${PYTHON_LIBRARIES} medmem) +SWIG_LINK_LIBRARIES(libMEDMEM_Swig ${PYTHON_LIBS} medmem) +SET_TARGET_PROPERTIES(_libMEDMEM_Swig PROPERTIES COMPILE_FLAGS "${PLATFORM_DEFINITIONS}") +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_libMEDMEM_Swig PROPERTIES DEBUG_OUTPUT_NAME _libMEDMEM_Swig_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) INSTALL(TARGETS _libMEDMEM_Swig DESTINATION ${MED_salomepythondir}) + INSTALL(FILES libMEDMEM_Swig.i my_typemap.i MEDMEM_SWIG_Templates.hxx DESTINATION ${MED_salomeinclude_HEADERS}) -INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libMEDMEM_Swig.py DESTINATION ${MED_salomescript_PYTHON}) -INSTALL(FILES med2sauv sauv2med avs2med DESTINATION ${MED_salomescript_PYTHON} +INSTALL(FILES medutilities.py ${CMAKE_CURRENT_BINARY_DIR}/libMEDMEM_Swig.py DESTINATION ${MED_salomepythondir}) +SET(SCRIPTS + medmem.py + med_test1.py + med_test2.py + med_test3.py + med_test_grid.py + med_test_skin.py + medMeshing_test.py + med_field_anal.py + med_opfield_test.py + med_opsupp_test.py + test_gibi.py + test_porflow.py + testDriverAscii.py + testGaussLocalization.py + test_profil_MedFieldDriver.py + testWriteAndFam.py + testMedMemGeneral.py + testMedMemCxxTests.py + dumpMEDMEM.py + ensightMedEnsight_test.py + medEnsightMed_test.py + medNumPy_test.py + med2sauv + sauv2med + avs2med +) +INSTALL(FILES ${SCRIPTS} DESTINATION ${MED_salomescript_PYTHON} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) diff --git a/src/MEDOP/CMakeLists.txt b/src/MEDOP/CMakeLists.txt new file mode 100644 index 000000000..00a361e6a --- /dev/null +++ b/src/MEDOP/CMakeLists.txt @@ -0,0 +1,25 @@ +# Copyright (C) 2007-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 +# + +ADD_SUBDIRECTORY(cmp) +ADD_SUBDIRECTORY(tui) +ADD_SUBDIRECTORY(res) +ADD_SUBDIRECTORY(gui) +ADD_SUBDIRECTORY(exe) +ADD_SUBDIRECTORY(doc) diff --git a/src/MEDOP/Makefile.am b/src/MEDOP/Makefile.am new file mode 100644 index 000000000..c41773e7e --- /dev/null +++ b/src/MEDOP/Makefile.am @@ -0,0 +1,30 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# This folder contains the packages for the MED fields operations: +# - cmp: package containing the SALOME components +# - tui: package containing the python user interface +# - gui: package containing the graphical user interface (the GUI part of the MED module) +# - res: folder containing data files (resources) +# - exe: folder containing small executable programs for MED data processing +# - doc: folder containing the documentation of the MEDOP package + +SUBDIRS= cmp tui res gui exe doc/sphinx + +EXTRA_DIST = README.txt diff --git a/src/MEDOP/README.txt b/src/MEDOP/README.txt new file mode 100644 index 000000000..9a07aa615 --- /dev/null +++ b/src/MEDOP/README.txt @@ -0,0 +1,6 @@ +This folder contains the packages for the MED fields operations: +- cmp: package containing the SALOME components +- tui: package containing the python user interface +- gui: package containing the graphical user interface (the GUI part of the MED module) +- res: resources files associated to the MEDOP package (icons, config files, data files, ...) + diff --git a/src/MEDOP/cmp/CMakeLists.txt b/src/MEDOP/cmp/CMakeLists.txt new file mode 100644 index 000000000..165ca2d82 --- /dev/null +++ b/src/MEDOP/cmp/CMakeLists.txt @@ -0,0 +1,73 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${MED3_INCLUDE_DIRS} + ${HDF5_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${KERNEL_ROOT_DIR}/include/salome + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_BINARY_DIR}/idl + ${CMAKE_SOURCE_DIR}/src/MEDCoupling + ${CMAKE_SOURCE_DIR}/src/INTERP_KERNEL/Bases + ${CMAKE_SOURCE_DIR}/src/INTERP_KERNEL + ${CMAKE_SOURCE_DIR}/src/MEDLoader +) + +SET(MEDOPFactoryEngine_SOURCES + MEDDataManager_i.cxx + MEDCalculator_i.cxx + MEDOPFactory_i.cxx +) +SET(COMMON_LIBS + medloader + SalomeIDLMED + ${TOOLSDS} + ${SalomeHDFPersist} + ${SalomeContainer} + ${SalomeCommunication} + ${SalomeKernelHelpers} + ${SalomeLifeCycleCORBA} + ${SALOMELocalTrace} + ${SALOMEBasics} + ${SalomeGenericObj} + medcoupling + interpkernel + ${MED3_LIBS} + ${HDF5_LIBS} + ${OMNIORB_LIBS} + ${PLATFORM_LIBS} +) +SET(COMMON_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${PLATFORM_DEFINITIONS} ${OMNIORB_DEFINITIONS}") +# This undefines the macros MIN and MAX which are specified in the windows headers +IF(WINDOWS) + SET(COMMON_FLAGS "${COMMON_FLAGS} -DNOMINMAX") +ENDIF(WINDOWS) + +ADD_LIBRARY(MEDOPFactoryEngine SHARED ${MEDOPFactoryEngine_SOURCES}) +SET_TARGET_PROPERTIES(MEDOPFactoryEngine PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(MEDOPFactoryEngine SalomeIDLMED ${COMMON_LIBS}) + +INSTALL(TARGETS MEDOPFactoryEngine DESTINATION ${MED_salomelib_LIBS}) + +FILE(GLOB MEDOPFactoryEngine_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${MEDOPFactoryEngine_HEADERS_HXX} DESTINATION ${MED_salomeinclude_HEADERS}) + +INSTALL(FILES test_medop_components.py PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ DESTINATION ${MED_salomebin_BINS}/xmed) diff --git a/src/MEDOP/cmp/MEDCalculator_i.cxx b/src/MEDOP/cmp/MEDCalculator_i.cxx new file mode 100644 index 000000000..94ad60240 --- /dev/null +++ b/src/MEDOP/cmp/MEDCalculator_i.cxx @@ -0,0 +1,387 @@ +// Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +// +// 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 +// +// Authors : Guillaume Boulant (EDF) - 01/06/2011 + +#include "MEDCalculator_i.hxx" +#include "SALOME_KernelServices.hxx" +#include "Basics_Utils.hxx" +#include + +#include "MEDCouplingFieldDouble.hxx" +using namespace ParaMEDMEM; + +MEDCalculator_i * MEDCalculator_i::_instance = NULL; + +MEDCalculator_i * MEDCalculator_i::getInstance() { + if ( _instance == NULL ) { + _instance = new MEDCalculator_i(); + } + return _instance; +} + +MEDCalculator_i::MEDCalculator_i() +{ + LOG("Creating a MEDCalculator_i instance"); + _medDataManager = MEDDataManager_i::getInstance(); +} + +MEDCalculator_i::~MEDCalculator_i() +{ + LOG("Deleting MEDCalculator_i instance"); +} + +/*! + * This function realizes the addition of the MEDCoupling field + * objects identified by the FieldHandler objects passed in arguments. + * + * It returns a FieldHandler that identifies the resulting MEDCoupling + * field object. The resulting MEDCoupling field object is physically + * in the SALOME MED container and is automatically registered in the + * MEDDataManager. + */ +MEDOP::FieldHandler * MEDCalculator_i::add(const MEDOP::FieldHandler & f1_hdl, + const MEDOP::FieldHandler & f2_hdl) +{ + // We first check that both operandes share the same mesh id. Note + // that it's not strictly required because the MEDCoupling operation + // would raise an exception if the fields does not share the same + // mesh support. + if ( f1_hdl.meshid != f2_hdl.meshid ) { + std::string message = + std::string("ERROR: Mesh ids are different for the field operandes ") + + std::string(f1_hdl.fieldname) + std::string(" and ") + std::string(f2_hdl.fieldname); + throw KERNEL::createSalomeException(message.c_str()); + } + + MEDCouplingFieldDouble* f1 = _medDataManager->getFieldDouble(&f1_hdl); + MEDCouplingFieldDouble* f2 = _medDataManager->getFieldDouble(&f2_hdl); + + MEDCouplingFieldDouble* field_result; + // This operation could raise an INTERP_KERNEL exception, for + // example, if the fields are not defined on the same support. + try { + field_result = (*f1) + (*f2); + } + catch (INTERP_KERNEL::Exception &ex) { + throw KERNEL::createSalomeException(ex.what()); + } + + std::string name = std::string(f1->getName()) + "+" + std::string(f2->getName()); + field_result->setName(name.c_str()); + + // + // The field must be registered in the dataManager structure so + // that it could be reused in a future operation (in particular for + // a manipulation that combine several operation as "r = f1+f2+f3", + // the operator will try to make the addition f1+f2 and then + // resultof(f1+f2) + f3. This last operation will fail if the field + // resultof(f1+f2) is not in the dataManager structure). + // + // Note that we choose arbitrary the first field operande to get the + // meshid (both have the same meshid). + // + long meshHandlerId = f1_hdl.meshid; + MEDOP::FieldHandler * fieldResultHandler = _medDataManager->addField(field_result, + meshHandlerId); + + // >>>>>>>>> + // _GBO_ We should test here if the iteration and order of the input + // files are identical for both operandes. A convention has to be + // defined here. By default, we let the iteration and order be + // determined by the resulting MEDCouplingFieldDouble instance (see + // function addField of the data manager). + // <<<<<<<<< + + return fieldResultHandler; +} + +/*! + * This function realizes the substraction of the MEDCoupling field + * objects identified by the FieldHandler objects passed in arguments. + * + * It returns a FieldHandler that identifies the resulting MEDCoupling + * field object. The resulting MEDCoupling field object is physically + * in the SALOME MED container and is automatically registered in the + * MEDDataManager. + */ +MEDOP::FieldHandler * MEDCalculator_i::sub(const MEDOP::FieldHandler & f1_hdl, + const MEDOP::FieldHandler & f2_hdl) +{ + if ( f1_hdl.meshid != f2_hdl.meshid ) { + std::string message = + std::string("ERROR: Mesh ids are different for the field operandes ") + + std::string(f1_hdl.fieldname) + std::string(" and ") + std::string(f2_hdl.fieldname); + throw KERNEL::createSalomeException(message.c_str()); + } + + MEDCouplingFieldDouble* f1 = _medDataManager->getFieldDouble(&f1_hdl); + MEDCouplingFieldDouble* f2 = _medDataManager->getFieldDouble(&f2_hdl); + + MEDCouplingFieldDouble* field_result; + try { + field_result = (*f1) - (*f2); + } + catch (INTERP_KERNEL::Exception &ex) { + throw KERNEL::createSalomeException(ex.what()); + } + + std::string name = std::string(f1->getName()) + "-" + std::string(f2->getName()); + field_result->setName(name.c_str()); + + long meshHandlerId = f1_hdl.meshid; + MEDOP::FieldHandler * fieldResultHandler = _medDataManager->addField(field_result, + meshHandlerId); + return fieldResultHandler; +} + +/*! + * This function realizes the multiplication of the MEDCoupling field + * objects identified by the FieldHandler objects passed in arguments. + * + * It returns a FieldHandler that identifies the resulting MEDCoupling + * field object. The resulting MEDCoupling field object is physically + * in the SALOME MED container and is automatically registered in the + * MEDDataManager. + */ +MEDOP::FieldHandler * MEDCalculator_i::mul(const MEDOP::FieldHandler & f1_hdl, + const MEDOP::FieldHandler & f2_hdl) +{ + if ( f1_hdl.meshid != f2_hdl.meshid ) { + std::string message = + std::string("ERROR: Mesh ids are different for the field operandes ") + + std::string(f1_hdl.fieldname) + std::string(" and ") + std::string(f2_hdl.fieldname); + throw KERNEL::createSalomeException(message.c_str()); + } + + MEDCouplingFieldDouble* f1 = _medDataManager->getFieldDouble(&f1_hdl); + MEDCouplingFieldDouble* f2 = _medDataManager->getFieldDouble(&f2_hdl); + + MEDCouplingFieldDouble* field_result; + try { + field_result = (*f1) * (*f2); + } + catch (INTERP_KERNEL::Exception &ex) { + throw KERNEL::createSalomeException(ex.what()); + } + std::string name = std::string(f1->getName()) + "*" + std::string(f2->getName()); + field_result->setName(name.c_str()); + + long meshHandlerId = f1_hdl.meshid; + MEDOP::FieldHandler * fieldResultHandler = _medDataManager->addField(field_result, + meshHandlerId); + return fieldResultHandler; +} + +/*! + * This function realizes the division of the MEDCoupling field + * objects identified by the FieldHandler objects passed in arguments. + * + * It returns a FieldHandler that identifies the resulting MEDCoupling + * field object. The resulting MEDCoupling field object is physically + * in the SALOME MED container and is automatically registered in the + * MEDDataManager. + */ +MEDOP::FieldHandler * MEDCalculator_i::div(const MEDOP::FieldHandler & f1_hdl, + const MEDOP::FieldHandler & f2_hdl) +{ + if ( f1_hdl.meshid != f2_hdl.meshid ) { + std::string message = + std::string("ERROR: Mesh ids are different for the field operandes ") + + std::string(f1_hdl.fieldname) + std::string(" and ") + std::string(f2_hdl.fieldname); + throw KERNEL::createSalomeException(message.c_str()); + } + + MEDCouplingFieldDouble* f1 = _medDataManager->getFieldDouble(&f1_hdl); + MEDCouplingFieldDouble* f2 = _medDataManager->getFieldDouble(&f2_hdl); + + MEDCouplingFieldDouble* field_result; + try { + field_result = (*f1) / (*f2); + } + catch (INTERP_KERNEL::Exception &ex) { + throw KERNEL::createSalomeException(ex.what()); + } + + std::string name = std::string(f1->getName()) + "/" + std::string(f2->getName()); + field_result->setName(name.c_str()); + + long meshHandlerId = f1_hdl.meshid; + MEDOP::FieldHandler * fieldResultHandler = _medDataManager->addField(field_result, + meshHandlerId); + return fieldResultHandler; +} + +/*! + * This function realizes the power of the MEDCoupling field + * object identified by the FieldHandler object passed in argument. + * + * It returns a FieldHandler that identifies the resulting MEDCoupling + * field object. The resulting MEDCoupling field object is physically + * in the SALOME MED container and is automatically registered in the + * MEDDataManager. + */ +MEDOP::FieldHandler * MEDCalculator_i::pow(const MEDOP::FieldHandler & f_hdl, CORBA::Long power) +{ + MEDCouplingFieldDouble* field = _medDataManager->getFieldDouble(&f_hdl); + + // We use the applyFunc function to execute this operation. The + // applyFunc function modifies the original field (that is not what + // we want). So we have first to make a deep copy. + MEDCouplingFieldDouble* field_result; + try { + field_result = field->clone(true); + string functionToApply = "u^"+ToString(power); + field_result->applyFunc(functionToApply.c_str()); + } + catch (INTERP_KERNEL::Exception &ex) { + throw KERNEL::createSalomeException(ex.what()); + } + + // Set the name (the default is the same as the original field) + string name(field_result->getName()); + name.append("^"); + name.append(ToString(power)); + field_result->setName(name.c_str()); + + long meshHandlerId = f_hdl.meshid; + MEDOP::FieldHandler * fieldResultHandler = _medDataManager->addField(field_result, + meshHandlerId); + return fieldResultHandler; +} + +/*! + * This function creates a new field as the linear transformation of + * the field object identified by the FieldHandler in argument. The + * transformation is y= factor*x + offset. + * + * It returns a FieldHandler that identifies the resulting MEDCoupling + * field object. The resulting MEDCoupling field object is physically + * in the SALOME MED container and is automatically registered in the + * MEDDataManager. + */ +MEDOP::FieldHandler * MEDCalculator_i::lin(const MEDOP::FieldHandler & f_hdl, double factor, double offset) +{ + MEDCouplingFieldDouble* field = _medDataManager->getFieldDouble(&f_hdl); + + // We use the applyFunc function to execute this operation. The + // applyFunc function modifies the original field (that is not what + // we want). So we have first to make a deep copy. + MEDCouplingFieldDouble* field_result; + try { + field_result = field->clone(true); + string functionToApply = "u*"+ToString(factor)+"+"+ToString(offset); + field_result->applyFunc(functionToApply.c_str()); + } + catch (INTERP_KERNEL::Exception &ex) { + throw KERNEL::createSalomeException(ex.what()); + } + + // Set the name (the default is the same as the original field) + string name = string("lin("); + name.append(field->getName()); + name.append(",factor="); + name.append(ToString(factor)); + name.append(",offset="); + name.append(ToString(offset)); + name.append(")"); + field_result->setName(name.c_str()); + + long meshHandlerId = f_hdl.meshid; + MEDOP::FieldHandler * fieldResultHandler = _medDataManager->addField(field_result, + meshHandlerId); + return fieldResultHandler; + +} + +/*! + * This function creates a new field as the duplicate of the field + * object identified by the FieldHandler in argument. + * + * It returns a FieldHandler that identifies the resulting MEDCoupling + * field object. The resulting MEDCoupling field object is physically + * in the SALOME MED container and is automatically registered in the + * MEDDataManager. + */ +MEDOP::FieldHandler * MEDCalculator_i::dup(const MEDOP::FieldHandler & f_hdl) +{ + MEDCouplingFieldDouble* field = _medDataManager->getFieldDouble(&f_hdl); + + // We just make a deep copy of the input field + MEDCouplingFieldDouble* field_result; + try { + field_result = field->clone(true); + } + catch (INTERP_KERNEL::Exception &ex) { + throw KERNEL::createSalomeException(ex.what()); + } + + // Set the name (the default is the same as the original field) + string name = string("dup("); + name.append(field->getName()); + name.append(")"); + field_result->setName(name.c_str()); + + long meshHandlerId = f_hdl.meshid; + MEDOP::FieldHandler * fieldResultHandler = _medDataManager->addField(field_result, + meshHandlerId); + return fieldResultHandler; +} + +/*! + * This creates a new field by applying a function on the specified + * field. The function is defined by a string of characters + * (function), that specifies the litteral equation to apply, and an + * integer (nbcomponents), that specifies the number of components to + * consider in the resulting field. This is to mimic the interface of + * MEDCouplingFieldDouble::applyFunc. + * Note that if nbcomponents is not in the range 1..N where N is the + * number of components of the specified field, then the function is + * apply on the whole field (as if specified N=numberOfComponents). + */ +MEDOP::FieldHandler * MEDCalculator_i::fct(const MEDOP::FieldHandler & f_hdl, + const char * function, CORBA::Long nbResComponents) +{ + MEDCouplingFieldDouble* field = _medDataManager->getFieldDouble(&f_hdl); + + // We first make a deep copy of the input field + MEDCouplingFieldDouble* field_result; + try { + field_result = field->clone(true); + if ( (nbResComponents == MEDOP::NBCOMP_DEFAULT ) || + (nbResComponents < 1) || (nbResComponents > field_result->getNumberOfComponents()) ) { + field_result->applyFunc(function); + } + else { + field_result->applyFunc(nbResComponents,function); + } + } + catch (INTERP_KERNEL::Exception &ex) { + throw KERNEL::createSalomeException(ex.what()); + } + + string name = string("fct("); name.append(field->getName()); + name.append(",\""); name.append(function); + name.append(",\""); name.append(ToString(nbResComponents)); name.append("\")"); + field_result->setName(name.c_str()); + + long meshHandlerId = f_hdl.meshid; + MEDOP::FieldHandler * fieldResultHandler = _medDataManager->addField(field_result, + meshHandlerId); + return fieldResultHandler; +} diff --git a/src/MEDOP/cmp/MEDCalculator_i.hxx b/src/MEDOP/cmp/MEDCalculator_i.hxx new file mode 100644 index 000000000..4b95e611c --- /dev/null +++ b/src/MEDOP/cmp/MEDCalculator_i.hxx @@ -0,0 +1,75 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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 +// + +// Authors : Guillaume Boulant (EDF) - 01/06/2011 + +#ifndef _MED_CALCULATOR_I_HXX_ +#define _MED_CALCULATOR_I_HXX_ + +#include +#include CORBA_SERVER_HEADER(MEDDataManager) +#include CORBA_SERVER_HEADER(MEDCalculator) +#include "SALOME_GenericObj_i.hh" + +#include "MEDDataManager_i.hxx" + +#include "MEDOP.hxx" +class MEDOP_EXPORT MEDCalculator_i: public POA_MEDOP::MEDCalculator, + public SALOME::GenericObj_i +{ +public: + + // + // =========================================================== + // Functions specified in the IDL interface + // =========================================================== + // + MEDOP::FieldHandler * add(const MEDOP::FieldHandler & f1_hdl, const MEDOP::FieldHandler & f2_hdl); + MEDOP::FieldHandler * sub(const MEDOP::FieldHandler & f1_hdl, const MEDOP::FieldHandler & f2_hdl); + MEDOP::FieldHandler * mul(const MEDOP::FieldHandler & f1_hdl, const MEDOP::FieldHandler & f2_hdl); + MEDOP::FieldHandler * div(const MEDOP::FieldHandler & f1_hdl, const MEDOP::FieldHandler & f2_hdl); + MEDOP::FieldHandler * pow(const MEDOP::FieldHandler & f_hdl, CORBA::Long power); + MEDOP::FieldHandler * lin(const MEDOP::FieldHandler & f_hdl, double factor, double offset); + MEDOP::FieldHandler * dup(const MEDOP::FieldHandler & f_hdl); + + MEDOP::FieldHandler * fct(const MEDOP::FieldHandler & f_hdl, + const char * function, CORBA::Long nbResComponents); + + // + // =========================================================== + // Other public functions (non available via CORBA) + // =========================================================== + // + static MEDCalculator_i * getInstance(); + +private: + MEDCalculator_i(); + ~MEDCalculator_i(); + + // The MEDCalculator is a singleton, whose instance can be obtained + // using the getInstance static method. + static MEDCalculator_i * _instance; + + MEDDataManager_i * _medDataManager; +}; + +#endif // _MED_CALCULATOR_I_HXX_ diff --git a/src/MEDOP/cmp/MEDDataManager_i.cxx b/src/MEDOP/cmp/MEDDataManager_i.cxx new file mode 100644 index 000000000..b4b01e460 --- /dev/null +++ b/src/MEDOP/cmp/MEDDataManager_i.cxx @@ -0,0 +1,795 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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 +// + +// Authors : Guillaume Boulant (EDF) - 01/06/2011 + +#include "MEDDataManager_i.hxx" +#include "SALOME_KernelServices.hxx" +#include "Basics_DirUtils.hxx" +#include "Basics_Utils.hxx" + +#include "MEDLoader.hxx" +using namespace ParaMEDMEM; + +#include +#include +using namespace std; + +MEDDataManager_i * MEDDataManager_i::_instance = NULL; +long MEDDataManager_i::LONG_UNDEFINED = -1; + +MEDDataManager_i * MEDDataManager_i::getInstance() { + // _GBO_ we will certainly need to define one single DataManager per + // SALOME study and not one singleton for the whole session + if ( _instance == NULL ) { + _instance = new MEDDataManager_i(); + } + return _instance; +} + +#define IOR_UNDEF "IOR UNDEFINED" +MEDDataManager_i::MEDDataManager_i() +{ + LOG("Creating a MEDDataManager_i instance"); + _fieldLastId = 0; + _sourceLastId = 0; + _meshLastId = 0; + _fieldseriesLastId = 0; + _medEventListenerIOR = NULL; +} +MEDDataManager_i::~MEDDataManager_i() +{ + LOG("Deleting MEDDataManager_i instance"); +} + +const char * MEDDataManager_i::file_to_source(const char * filepath) +{ + string * source = new string("file://"); + source->append(filepath); + return source->c_str();; +} +const char * MEDDataManager_i::source_to_file(const char * source) +{ + string * filepath = new string(source); + filepath->replace(0,7,""); + return filepath->c_str(); +} + +/*! + * This function loads the meta-data from the specified med file and + * returns the associated datasource handler. The data source handler + * is a key to retrieve all informations concerning the data (meshes, + * fields). + */ +MEDOP::DatasourceHandler * MEDDataManager_i::addDatasource(const char *filepath) { + + // We first check that this datasource is not already registered + long sourceid = getDatasourceId(filepath); + if ( sourceid != LONG_UNDEFINED ) { + // The file is already registered under the identifier sourceid + LOG("WRN: The file "<length(_meshHandlerMap.size()); + + // Scan the map looking for meshes associated to the specified datasource + int itemIdx = 0; + MeshHandlerMapIterator meshIt; + for ( meshIt=_meshHandlerMap.begin(); meshIt != _meshHandlerMap.end(); meshIt++) { + if ( meshIt->second->sourceid == datasourceId ) { + meshHandlerList[itemIdx] = *(meshIt->second); + itemIdx++; + } + } + + // Adjust the length to the real number of elements + meshHandlerList->length(itemIdx); + return meshHandlerList._retn(); +} + +/*! + * This function returns the list of fieldseries defined on the + * specified mesh. + */ +MEDOP::FieldseriesHandlerList * MEDDataManager_i::getFieldseriesListOnMesh(CORBA::Long meshId) { + // We initiate a list with the maximum lentgh + MEDOP::FieldseriesHandlerList_var + fieldseriesHandlerList = new MEDOP::FieldseriesHandlerList(); + fieldseriesHandlerList->length(_fieldseriesHandlerMap.size()); + + // Scan the map looking for fieldseries defined on the specified mesh + int itemIdx = 0; + FieldseriesHandlerMapIterator it; + for ( it=_fieldseriesHandlerMap.begin(); it != _fieldseriesHandlerMap.end(); it++) { + if ( it->second->meshid == meshId ) { + fieldseriesHandlerList[itemIdx] = *(it->second); + itemIdx++; + } + } + + // Adjust the length to the real number of elements + fieldseriesHandlerList->length(itemIdx); + return fieldseriesHandlerList._retn(); +} + +/*! + * A fieldseries is a timeseries of fields. Then the list of fields is + * the different time iterations defined for the specified field id. + */ +MEDOP::FieldHandlerList * MEDDataManager_i::getFieldListInFieldseries(CORBA::Long fieldseriesId) { + + // We initiate a list with the maximum lentgh + MEDOP::FieldHandlerList_var fieldHandlerList = new MEDOP::FieldHandlerList(); + fieldHandlerList->length(_fieldHandlerMap.size()); + + // Scan the map looking for field defined on the specified mesh + int itemIdx = 0; + FieldHandlerMapIterator it; + for ( it=_fieldHandlerMap.begin(); it != _fieldHandlerMap.end(); it++) { + if ( it->second->fieldseriesId == fieldseriesId ) { + fieldHandlerList[itemIdx] = *(it->second); + itemIdx++; + } + } + + // Adjust the length to the real number of elements + fieldHandlerList->length(itemIdx); + return fieldHandlerList._retn(); +} + +/*! + * This returns the whole set of fields handlers for all datasource + * that have been loaded using addDatasource. + */ +MEDOP::FieldHandlerList * MEDDataManager_i::getFieldHandlerList() { + MEDOP::FieldHandlerList_var fieldHandlerSeq = new MEDOP::FieldHandlerList(); + fieldHandlerSeq->length(_fieldHandlerMap.size()); + + int sequenceId = 0; + FieldHandlerMapIterator fieldIt; + for ( fieldIt=_fieldHandlerMap.begin(); fieldIt != _fieldHandlerMap.end(); fieldIt++) { + fieldHandlerSeq[sequenceId] = *(fieldIt->second); + sequenceId++; + } + return fieldHandlerSeq._retn(); +} + +/*! + * This returns a copy of the fieldHandler associated to the specified id. + */ +MEDOP::FieldHandler * MEDDataManager_i::getFieldHandler(CORBA::Long fieldHandlerId) { + LOG("getFieldHandler: START") + + FieldHandlerMapIterator fieldIt = _fieldHandlerMap.find(fieldHandlerId); + if ( fieldIt != _fieldHandlerMap.end() ) { + // >>> WARNING: CORBA struct specification indicates that the + // assignement acts as a desctructor for the structure that is + // pointed to. The values of the fields are copy first in the new + // structure that receives the assignement and finally the initial + // structure is destroyed. In the present case, WE WANT to keep + // the initial fieldHandler in the map. We must then make a deep + // copy of the structure found in the map and return the copy. The + // CORBA struct specification indicates that a deep copy can be + // done using the copy constructor. <<< + return new MEDOP::FieldHandler(*(fieldIt->second)); + } + return NULL; +} + +/*! + * This returns a string representation of the field associated to the specified id. + */ +char * MEDDataManager_i::getFieldRepresentation(CORBA::Long fieldHandlerId) { + LOG("getFieldRepresentation: START") + MEDOP::FieldHandler * fieldHandler = getFieldHandler(fieldHandlerId); + MEDCouplingFieldDouble* fieldDouble = getFieldDouble(fieldHandler); + return CORBA::string_dup(fieldDouble->getArray()->repr().c_str()); +} + +void MEDDataManager_i::saveFields(const char * filepath, + const MEDOP::FieldIdList & fieldIdList) +{ + LOG("saveFields to : " << filepath); + + // We first have to check if the target filepath is writable + // (segmentation fault in med otherwise) + if (!Kernel_Utils::IsWritable(Kernel_Utils::GetDirName(std::string(filepath)))) { + std::string message = + std::string("The target filepath ") + + std::string(filepath) + + std::string(" is not writable"); + LOG(message); + throw KERNEL::createSalomeException(message.c_str()); + } + + if ( fieldIdList.length() == 0 ) { + throw KERNEL::createSalomeException("No fields to save"); + } + + // Consider the first field to initiate the med file + CORBA::Long fieldHandlerId = fieldIdList[0]; + MEDOP::FieldHandler * fieldHandler = getFieldHandler(fieldHandlerId); + MEDCouplingFieldDouble* fieldDouble = getFieldDouble(fieldHandler); + + try { + bool writeFromScratch = true; + MEDLoader::WriteField(filepath, fieldDouble, writeFromScratch); + + writeFromScratch = false; + for(CORBA::ULong i=1; i listId; + + FieldPersistencyMapIterator mapIt; + for ( mapIt = _fieldPersistencyMap.begin(); mapIt != _fieldPersistencyMap.end(); mapIt++) { + if ( mapIt->second == true ) { + listId.push_back(mapIt->first); + } + } + + MEDOP::FieldIdList fieldIdList; + fieldIdList.length(listId.size()); + for (int i=0; isaveFields(filepath, fieldIdList); + } + catch (const SALOME::SALOME_Exception & ex) { + throw ex; + } + catch (const std::exception& ex) { + std::string message = + std::string("Error when saving file ") + + std::string(filepath) + std::string(" : ") + ex.what(); + throw KERNEL::createSalomeException(message.c_str()); + } +} + +/*! + * This function is responsible for creating the FieldHandler + * instances. You must use this function because it manages + * automatically the identifier value (autoincrementation of a static + * variable) + */ +MEDOP::FieldHandler * MEDDataManager_i::newFieldHandler(const char * fieldname, + const char * meshname, + TypeOfField type, + long iteration, + long order, + const char * source) +{ + MEDOP::FieldHandler * fieldHandler = new MEDOP::FieldHandler(); + fieldHandler->id = _fieldLastId; _fieldLastId++; + fieldHandler->fieldname = fieldname; + fieldHandler->meshname = meshname; + fieldHandler->type = type; + fieldHandler->iteration = iteration; + fieldHandler->order = order; + fieldHandler->source = source; + return fieldHandler; +} + +/*! + * This updates the metadata of the field identified by its id with + * the data of the given field handler. Returns a copy of the updated + * handler (that should be identical to the given field handler for + * all data but not for the id that is an invariant for all session + * long). + * WARN: you should be warned that this function could leave the data + * model in a non-coherent state, by example if you change the mesh + * name while the mesh has not been updated. + */ +MEDOP::FieldHandler * MEDDataManager_i::updateFieldHandler(CORBA::Long fieldHandlerId, + const char * fieldname, + long iteration, + long order, + const char * source) { + FieldHandlerMapIterator fieldIt = _fieldHandlerMap.find(fieldHandlerId); + if ( fieldIt != _fieldHandlerMap.end() ) { + // Update the attributes + // >>> WARN: note that the id of a handler registered in the map + // SHOULD NEVER be modified because it is the identifier used in + // the whole application for this field all the session long. + // <<< + fieldIt->second->fieldname = fieldname; + fieldIt->second->iteration = iteration; + fieldIt->second->order = order; + fieldIt->second->source = source; + // Return a copy + return new MEDOP::FieldHandler(*fieldIt->second); + } + return NULL; +} + +MEDCouplingUMesh * MEDDataManager_i::getUMesh(long meshHandlerId) { + + LOG("getUMesh: START") + + MEDCouplingUMesh * myMesh = NULL; + if ( _meshMap.count(meshHandlerId) > 0 ) { + // The mesh has been found in the map + myMesh = _meshMap[meshHandlerId]; + } else { + // The mesh is not loaded yet ==> load it and register it in the map + LOG("getUMesh: the mesh must be loaded. meshid="<sourceid; + const char * filepath = source_to_file((_datasourceHandlerMap[sourceid])->uri); + const char * meshName = _meshHandlerMap[meshHandlerId]->name; + int meshDimRelToMax = 0; + myMesh = MEDLoader::ReadUMeshFromFile(filepath,meshName,meshDimRelToMax); + _meshMap[meshHandlerId] = myMesh; + } + return myMesh; +} + +/** + * Try to retrieve the id of the specified mesh, i.e. the key it is + * registered with in the internal meshes map. + */ +long MEDDataManager_i::getUMeshId(const MEDCouplingMesh * mesh) { + bool found = false; + MeshMapIterator it = _meshMap.begin(); + while ( it != _meshMap.end() ) { + found = (it->second == mesh); + if (found) { + return it->first; + } + ++it; + } + return LONG_UNDEFINED; +} + +/*! + * This method returns the physical data of the specified field, + * i.e. the MEDCoupling field associated to the specified field + * handler. If the field source is a file and the data ar not loaded + * yet, the this function load the data from the file in a MEDCoupling + * field instance. Otherwize, it just returns the MEDCoupling field + * instance. + */ +MEDCouplingFieldDouble * MEDDataManager_i::getFieldDouble(const MEDOP::FieldHandler * fieldHandler) +{ + + LOG("getFieldDouble: START with id="<id); + + if ( _fieldDoubleMap.count(fieldHandler->id) > 0 ) { + // The MEDCoupling field data are already loaded. Just return the + // reference of the MEDCouplingFieldDouble pointer + return _fieldDoubleMap[fieldHandler->id]; + } + + // The MEDCoupling field data are not loaded yet. Load the data and + // register the MEDCoupling field in our internal map an all the + // associated data if needed (i.e. the underlying mesh). + + // At this step, the mesh handler needs a meshid correctly + // set. Normally, we should arrive at this step only in the case + // where the field is loaded from a file ==> the meshid is defined + // (see the addDatasource function). + // + // >>>> __GBO__ TO BE CHECKED AND SERIOUSLY TESTED. There at least + // one case where we can arrive here with no previous call to + // addDataSource: for example the field handler list can be obtained + // from a call to addFieldsFromFile instead of addDataSource (see + // for exemple the getFieldRepresentation service of the + // dataManager, that comes here and then calls getUMesh where we + // need a map initialized only in addDataSource) <<<< + long meshid = fieldHandler->meshid; + + // We first have to check if the associated mesh is already loaded + // and to load it if needed. The loaded meshes are registered in a + // map whose key is the mesh handler id. This checking is + // automatically done by the function getUMesh. It's important to do + // it before the loading of field data to prevent from the case + // where the mesh would not have been loaded already (in the + // previous field loading). + MEDCouplingUMesh * myMesh =this->getUMesh(meshid); + + long sourceid = _meshHandlerMap[meshid]->sourceid; + + const char * filepath = source_to_file((_datasourceHandlerMap[sourceid])->uri); + const char * meshName = myMesh->getName(); + LOG("getFieldDouble: field "<fieldname<<" loaded from file "<type; + int meshDimRelToMax = 0; + MEDCouplingFieldDouble * myField = MEDLoader::ReadField(type, + filepath, + meshName, + meshDimRelToMax, + fieldHandler->fieldname, + fieldHandler->iteration, + fieldHandler->order); + myField->setMesh(myMesh); + _fieldDoubleMap[fieldHandler->id] = myField; + return myField; +} + +/*! + * This adds the specified MEDCoupling field in the collection managed + * by this DataManager. The associated FieldHandler is returned. This + * is typically used in a context where the MEDCoupling field is + * created from scratch, for example by operations in the + * MEDCalculator. + * @param[in] fieldDouble the MEDCouplingFieldDouble instance to add + * @param[in] meshHandlerId the id of the meshHandler this filed is associated to. + * @return a copy of the FieldHandler registered in the internal map for this field. + */ +MEDOP::FieldHandler * MEDDataManager_i::addField(MEDCouplingFieldDouble * fieldDouble, + long meshHandlerId) +{ + const char * fieldName = fieldDouble->getName(); + const char * meshName = fieldDouble->getMesh()->getName(); + TypeOfField type = fieldDouble->getTypeOfField(); + + int iteration, order; + // WARN: note that the variables "iteration" and "order" are passed + // by reference to the function getTime (see documentation of + // MEDCouplingField). As a consequence, the values of these + // variables are updated by this function call. This is the mean to + // retrieve the iteration and order of the field. + double timestamp = fieldDouble->getTime(iteration, order); + + // For the fields that are created in memory (by operations for + // example), the convention for the source attribute is to specify + // the fielddouble name, because this name describes the operation + // the field has been created with. + string * source = new string("mem://"); source->append(fieldName); + MEDOP::FieldHandler * fieldHandler = newFieldHandler(fieldName, + meshName, + type, + iteration, + order, + source->c_str()); + + if ( meshHandlerId == LONG_UNDEFINED ) { + // We have to gess the id of the underlying mesh to preserve data + // integrity (a fieldHandler must have an attribute that contains + // the id of its underlying mesh): + // + // WARNING: it's better to let the client code (the one who calls the + // function addField) to specify this meshid. This guess procedure is + // not reliable, it's just to have a second chance. + // + LOG("addField: The mesh id is not defined. Trying to guess from the mesh name "<getUMeshId(fieldDouble->getMesh()); + fieldHandler->meshid = meshid; + if ( meshid == LONG_UNDEFINED ) { + // No mesh has been found in the internal map + LOG("addField: The mesh id for the mesh "<meshid = meshHandlerId; + } + + _fieldHandlerMap[fieldHandler->id] = fieldHandler; + _fieldDoubleMap[fieldHandler->id] = fieldDouble; + // >>> WARNING: CORBA structure assignement specification ==> return + // >>> a deep copy to avoid the destruction of the fieldHandler + // >>> registered in the map (assignement acts as a destructor for + // >>> CORBA struct). + return new MEDOP::FieldHandler(*fieldHandler); +} + +/*! + * This function updates the meta-data "fieldname" associated to the + * specified field. + */ +void MEDDataManager_i::updateFieldMetadata(CORBA::Long fieldHandlerId, + const char * fieldname, + CORBA::Long iteration, + CORBA::Long order, + const char * source) +{ + // We have to update the field handler registered in the internal + // map AND the associated fieldDouble loaded in memory. + MEDOP::FieldHandler * fieldHandler = getFieldHandler(fieldHandlerId); + updateFieldHandler(fieldHandlerId,fieldname,iteration,order,source); + + MEDCouplingFieldDouble* fieldDouble = getFieldDouble(fieldHandler); + fieldDouble->setName(fieldname); + + // _GBO_ TO BE IMPLEMENTED: iteration and order +} + +/** + * This can be used to associate to the specified field another mesh + * support than its current one. This is typically needed to operate 2 + * fields defined on the same mesh but coming from different med + * files. In this case, the underlying meshes are different mesh + * objects (from the MEDCoupling point of view) and then no operation + * can be allowed by MEDCoupling. The operation of course fails if the + * new mesh is not identical to the old one. + */ +void MEDDataManager_i::changeUnderlyingMesh(CORBA::Long fieldHandlerId, CORBA::Long meshHandlerId) { + + MEDOP::FieldHandler * fieldHandler = getFieldHandler(fieldHandlerId); + MEDCouplingFieldDouble* fieldDouble = getFieldDouble(fieldHandler); + MEDCouplingMesh * newMesh = getUMesh(meshHandlerId); + + try { + fieldDouble->changeUnderlyingMesh(newMesh,10,1e-12); + } + catch (INTERP_KERNEL::Exception &ex) { + std::string * message = new std::string("Error when changing the underlying mesh : "); + message->append(ex.what()); + throw KERNEL::createSalomeException(message->c_str()); + } + + // The change of mesh is OK, then we can update the meta-data + _fieldHandlerMap[fieldHandlerId]->meshid = meshHandlerId; + _fieldHandlerMap[fieldHandlerId]->meshname = _meshHandlerMap[meshHandlerId]->name; + + + // WARN: if this field has already been request by the tui for + // manipulation (in a fieldproxy), then the data should be + // synchronized +} + + + +/*! + * This functions display the internal data of the MEDDataManager on + * the server side (data in the SALOME container). + */ +void MEDDataManager_i::serverlog() { + + LOG("==== Field Handler Map ===================================================="); + LOG("Size = "<<_fieldHandlerMap.size()); + FieldHandlerMapIterator fhmIt; + for ( fhmIt = _fieldHandlerMap.begin(); fhmIt != _fieldHandlerMap.end(); fhmIt++) { + long id = fhmIt->first; + LOG("------------------------------------- id = "< +#include CORBA_SERVER_HEADER(MEDDataManager) +#include "SALOME_GenericObj_i.hh" + +#include "MEDCouplingUMesh.hxx" +#include "MEDCouplingFieldDouble.hxx" +using namespace ParaMEDMEM; + +/*! This map is used for lifecycle management of fields used in this operator */ +#include +#include +using namespace std; + +typedef map DatasourceHandlerMap; +typedef map::iterator DatasourceHandlerMapIterator; + +typedef map MeshHandlerMap; +typedef map::iterator MeshHandlerMapIterator; + +typedef map FieldseriesHandlerMap; +typedef map::iterator FieldseriesHandlerMapIterator; + +typedef map FieldHandlerMap; +typedef map::iterator FieldHandlerMapIterator; +typedef map FieldPersistencyMap; +typedef map::iterator FieldPersistencyMapIterator; + +typedef map FieldDoubleMap; +typedef map::iterator FieldDoubleMapIterator; + +typedef map MeshMap; +typedef map::iterator MeshMapIterator; + +#include "MEDOP.hxx" +class MEDOP_EXPORT MEDDataManager_i: public POA_MEDOP::MEDDataManager, + public SALOME::GenericObj_i +{ +public: + + // + // =========================================================== + // Functions specified in the IDL interface + // =========================================================== + // + // ----------------------------------------------------------- + // Datasource management + MEDOP::DatasourceHandler * addDatasource(const char *filepath); + + // ----------------------------------------------------------- + // Mesh management + MEDOP::MeshHandlerList * getMeshList(CORBA::Long datasourceId); + MEDOP::MeshHandler * getMesh(CORBA::Long meshId); + + // ----------------------------------------------------------- + // Field management + MEDOP::FieldseriesHandlerList * getFieldseriesListOnMesh(CORBA::Long meshId); + MEDOP::FieldHandlerList * getFieldListInFieldseries(CORBA::Long fieldseriesId); + + MEDOP::FieldHandler * getFieldHandler(CORBA::Long fieldHandlerId); + char * getFieldRepresentation(CORBA::Long fieldHandlerId); + MEDOP::FieldHandlerList * getFieldHandlerList(); + + void saveFields(const char * filepath, + const MEDOP::FieldIdList & fieldIdList); + void markAsPersistent(CORBA::Long fieldHandlerId, bool persistent); + void savePersistentFields(const char * filepath); + + + void updateFieldMetadata(CORBA::Long fieldHandlerId, + const char * fieldname, + CORBA::Long iteration, + CORBA::Long order, + const char * source); + + void changeUnderlyingMesh(CORBA::Long fieldHandlerId, CORBA::Long meshHandlerId); + + void setEventListenerIOR(const char * ior); + char * getEventListenerIOR(); + + void serverlog(); + + // + // =========================================================== + // Other public functions (non available via CORBA) + // =========================================================== + // + static long LONG_UNDEFINED; + static MEDDataManager_i * getInstance(); + MEDCouplingFieldDouble * getFieldDouble(const MEDOP::FieldHandler * fieldHandler); + MEDOP::FieldHandler * addField(MEDCouplingFieldDouble * fieldDouble, + long meshHandlerId=LONG_UNDEFINED); + +private: + MEDDataManager_i(); + ~MEDDataManager_i(); + + // The MEDDataManager is a singleton, whose instance can be obtained + // using the getInstance static method. + static MEDDataManager_i * _instance; + + long _sourceLastId; + long _meshLastId; + long _fieldseriesLastId; + long _fieldLastId; + DatasourceHandlerMap _datasourceHandlerMap; + MeshHandlerMap _meshHandlerMap; + FieldseriesHandlerMap _fieldseriesHandlerMap; + FieldHandlerMap _fieldHandlerMap; + FieldDoubleMap _fieldDoubleMap; + MeshMap _meshMap; + FieldPersistencyMap _fieldPersistencyMap; + + char * _medEventListenerIOR; + + MEDOP::FieldHandler * newFieldHandler(const char * fieldname, + const char * meshname, + TypeOfField type, + long iteration, + long order, + const char * source); + + MEDOP::FieldHandler * updateFieldHandler(CORBA::Long fieldHandlerId, + const char * fieldname, + long iteration, + long order, + const char * source); + + const char * file_to_source(const char * filepath); + const char * source_to_file(const char * source); + long getDatasourceId(const char *filepath); + + MEDCouplingUMesh * getUMesh(long meshHandlerId); + long getUMeshId(const MEDCouplingMesh * mesh); +}; + +#endif // _MED_DATAMANAGER_I_HXX_ diff --git a/src/MEDOP/cmp/MEDOP.hxx b/src/MEDOP/cmp/MEDOP.hxx new file mode 100644 index 000000000..f7b3bc49c --- /dev/null +++ b/src/MEDOP/cmp/MEDOP.hxx @@ -0,0 +1,33 @@ +// Copyright (C) 2007-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 __MEDOP_HXX__ +#define __MEDOP_HXX__ + +#ifdef WIN32 +# if defined medop_EXPORTS || defined MEDOPFactoryEngine_EXPORTS || defined MEDOPFACTORYENGINE_EXPORTS +# define MEDOP_EXPORT __declspec( dllexport ) +# else +# define MEDOP_EXPORT __declspec( dllimport ) +# endif +#else +# define MEDOP_EXPORT +#endif + +#endif diff --git a/src/MEDOP/cmp/MEDOPFactory_i.cxx b/src/MEDOP/cmp/MEDOPFactory_i.cxx new file mode 100644 index 000000000..5a61cfed0 --- /dev/null +++ b/src/MEDOP/cmp/MEDOPFactory_i.cxx @@ -0,0 +1,85 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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 +// + +// Authors : Guillaume Boulant (EDF) - 01/06/2011 + +#include "MEDOPFactory_i.hxx" +#include "utilities.h" + +#include + +#include "MEDDataManager_i.hxx" +#include "MEDCalculator_i.hxx" + +using namespace std; + +//============================================================================= +/*! + * standard constructor + */ +//============================================================================= + +MEDOPFactory_i::MEDOPFactory_i(CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, + const char *interfaceName) : + Engines_Component_i(orb, poa, contId, instanceName, interfaceName) +{ + MESSAGE("activate object"); + _thisObj = this ; + _id = _poa->activate_object(_thisObj); +} + +MEDOPFactory_i::~MEDOPFactory_i() +{ +} + +MEDOP::MEDDataManager_ptr MEDOPFactory_i::getDataManager() { + MEDDataManager_i * medDataManager = MEDDataManager_i::getInstance(); + MEDOP::MEDDataManager_ptr medDataManagerPtr = medDataManager->_this(); + return medDataManagerPtr; +} + +MEDOP::MEDCalculator_ptr MEDOPFactory_i::getCalculator() { + MEDCalculator_i * medCalculator = MEDCalculator_i::getInstance(); + MEDOP::MEDCalculator_ptr medCalculatorPtr = medCalculator->_this(); + return medCalculatorPtr; +} + +extern "C" +{ + PortableServer::ObjectId * MEDOPFactoryEngine_factory( + CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, + const char *interfaceName) + { + MESSAGE("PortableServer::ObjectId * MEDOPEngine_factory()"); + SCRUTE(interfaceName); + MEDOPFactory_i * factory = new MEDOPFactory_i(orb, poa, contId, + instanceName, + interfaceName); + return factory->getId() ; + } +} diff --git a/src/MEDOP/cmp/MEDOPFactory_i.hxx b/src/MEDOP/cmp/MEDOPFactory_i.hxx new file mode 100644 index 000000000..84f3cca71 --- /dev/null +++ b/src/MEDOP/cmp/MEDOPFactory_i.hxx @@ -0,0 +1,61 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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 +// + +// Authors : Guillaume Boulant (EDF) - 01/06/2011 + +#ifndef _MEDOPFactory_HXX_ +#define _MEDOPFactory_HXX_ + +#include +#include CORBA_SERVER_HEADER(MEDOPFactory) +#include CORBA_SERVER_HEADER(MEDDataManager) +#include CORBA_SERVER_HEADER(MEDCalculator) +#include "SALOME_Component_i.hxx" + +#include "MEDOP.hxx" +class MEDOP_EXPORT MEDOPFactory_i: public POA_MEDOP::MEDOPFactory, + public Engines_Component_i +{ + +public: + MEDOPFactory_i(CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, + const char *interfaceName); + virtual ~MEDOPFactory_i(); + + /*! Returns the singleton instance of the data manager */ + MEDOP::MEDDataManager_ptr getDataManager(); + /*! Returns the singleton instance of the calculator */ + MEDOP::MEDCalculator_ptr getCalculator(); + +}; + +extern "C" +MEDOP_EXPORT PortableServer::ObjectId * MEDOPFactoryEngine_factory(CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId * contId, + const char *instanceName, + const char *interfaceName); + +#endif diff --git a/src/MEDOP/cmp/Makefile.am b/src/MEDOP/cmp/Makefile.am new file mode 100644 index 000000000..045a571e5 --- /dev/null +++ b/src/MEDOP/cmp/Makefile.am @@ -0,0 +1,64 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# author: Guillaume Boulant (EDF/R&D, 2012) + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +mypkgpythondir = $(salomescriptdir)/med +dist_mypkgpython_SCRIPTS = \ + test_medop_components.py + +salomeinclude_HEADERS = \ + MEDOP.hxx \ + MEDDataManager_i.hxx \ + MEDCalculator_i.hxx \ + MEDOPFactory_i.hxx + +lib_LTLIBRARIES = libMEDOPFactoryEngine.la +libMEDOPFactoryEngine_la_SOURCES = \ + MEDDataManager_i.cxx \ + MEDCalculator_i.cxx \ + MEDOPFactory_i.cxx + +libMEDOPFactoryEngine_la_LDFLAGS = -no-undefined -version-info=0:0:0 + +OMNIORB_CXXFLAGS=@CORBA_CXXFLAGS@ @CORBA_INCLUDES@ +OMNIORB_LIBS=@OMNIORB_LIBS@ + +libMEDOPFactoryEngine_la_CPPFLAGS = \ + -I$(top_builddir)/idl \ + -I$(top_srcdir)/src/MEDCoupling \ + -I$(top_srcdir)/src/INTERP_KERNEL/Bases \ + -I$(top_srcdir)/src/INTERP_KERNEL \ + -I$(top_srcdir)/src/MEDLoader \ + $(KERNEL_CXXFLAGS) \ + $(MED2_CXXFLAGS) \ + $(HDF5_CXXFLAGS) \ + $(OMNIORB_CXXFLAGS) + +libMEDOPFactoryEngine_la_LIBADD = \ + $(top_builddir)/idl/libSalomeIDLMED.la \ + $(KERNEL_LDFLAGS) -lSalomeKernelHelpers \ + $(top_builddir)/src/MEDCoupling/libmedcoupling.la \ + $(top_builddir)/src/MEDLoader/libmedloader.la \ + $(top_builddir)/src/INTERP_KERNEL/libinterpkernel.la \ + $(MED2_LIBS) \ + $(HDF5_LIBS) \ + $(OMNIORB_LIBS) diff --git a/src/MEDOP/cmp/test_medop_components.py b/src/MEDOP/cmp/test_medop_components.py new file mode 100644 index 000000000..adde7ad96 --- /dev/null +++ b/src/MEDOP/cmp/test_medop_components.py @@ -0,0 +1,383 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# This file is a set of basic use case to test (from the python +# context) the functions developped in the MEDOP engine and the +# associated MEDOP CORBA interface (MEDDataManager and +# MEDCalaculator). +# +# (gboulant - 16/6/2011) +# + +# WARN: this scripts is a unit tests runner for testing the SALOME +# MEDOP CORBA components and it should stay self-consistent. Then, +# it's on purpose that the script does not use the xmed python +# package. Conversely, some (small) parts of this code could be +# redundant with code from the xmed package. + +# +# =============================================================== +# Initializing some CORBA stuff +# =============================================================== +# + +# Remember SALOME definitions: +# --------------------------- +# +# componentName = Name of the component (a library libEngine +# should exist with a C function named Engine_factory, and the +# component should be registered in the catalog MEDCatalog.xml). +# +# corbaModule = Name of the corba module that contains the IDL +# specifications of the component (name as defined in the idl file) +# +# containerType = Name of the container factory +# +componentName = "MEDOPFactory" +corbaModule = "MEDOP" +containerType = "FactoryServer" + +import salome +if salome.lcc is None: + salome.salome_init() +__import__(corbaModule) +factory=salome.lcc.FindOrLoadComponent(containerType,componentName) +# This is not the main CORBA component of the SALOME module MED +# (i.e. the engine associated to the active study), but the CORBA +# entry point for MED fields operations (i.e. a CORBA component +# reachable throught the LifeCycleCORBA). This entry point is used to +# get the other SALOME CORBA components required for MED field +# operations, in particular the dataManager and the calculator + +# +# ================================================== +# Helper functions to localize tests files and get data +# ================================================== +# +import os + +try: + MED_ROOT_DIR=os.environ["MED_ROOT_DIR"] +except KeyError, e: + raise RuntimeError("MED_ROOT_DIR should be defined to load the test data") + +RESDIR=os.path.join(MED_ROOT_DIR,"share","salome","resources","med","medop_testfiles") + +def getFilePath(filename): + """ + Returns the absolute path for a given file base name. The base + name must match with a file contained in the test files directory. + """ + filepath = os.path.join(RESDIR,filename) + if not os.path.exists(filepath): + raise RuntimeError("The file %s does not exists"%filepath) + return filepath + +testFileName = "smallmesh_varfield.med" +testMeshName = "My2DMesh" +testFieldName= "testfield2" +testFieldIt = 1 +testFieldDt = 1 +testTypeOfField = 1 # On nodes +testFilePath = getFilePath(testFileName) + +# +# ================================================== +# Basic use cases of the MEDDataManager +# ================================================== +# +def TEST_getDataManager(): + dataManager = factory.getDataManager() + if "addDatasource" not in dir(dataManager): + return False + return True + +def TEST_addDatasource(): + dataManager = factory.getDataManager() + datasource = dataManager.addDatasource(testFilePath) + if datasource.name != testFileName: + print "ERR: datasource.name=%s (should be %s)"%(datasource.name,testFilePath) + return False + + # We try to load the file twice. It should not load twice and + # return the same datasource as previously registered (same id). + sourceid_ref = datasource.id + datasource = dataManager.addDatasource(testFilePath) + if datasource.id != sourceid_ref: + print "ERR: datasource.id=%s (should be %s)"%(datasource.id,sourceid_ref) + return False + + return True + +def TEST_getFieldHandlerList(): + dataManager = factory.getDataManager() + datasource = dataManager.addDatasource(testFilePath) + fieldHandlerList = dataManager.getFieldHandlerList() + if fieldHandlerList is None or len(fieldHandlerList) == 0: + return False + return True + +def TEST_getFieldRepresentation(): + dataManager = factory.getDataManager() + datasource = dataManager.addDatasource(testFilePath) + fieldHandlerList = dataManager.getFieldHandlerList() + fieldHandler0 = fieldHandlerList[0] + + print dataManager.getFieldRepresentation(fieldHandler0.id) + return True + +def TEST_updateFieldMetadata(): + dataManager = factory.getDataManager() + datasource = dataManager.addDatasource(testFilePath) + fieldHandlerList = dataManager.getFieldHandlerList() + fieldHandler0 = fieldHandlerList[0] + + fieldid = fieldHandler0.id + newname = fieldHandler0.fieldname + " modified" + + dataManager.updateFieldMetadata(fieldid, newname, + fieldHandler0.iteration, + fieldHandler0.order, + fieldHandler0.source) + + fieldHandlerModified = dataManager.getFieldHandler(fieldid) + print fieldHandlerModified + + if fieldHandlerModified.fieldname != newname: + print "ERR: the name is %s (should be %s)"%(fieldHandlerModified.fieldname,newname) + return False + return True + +def TEST_saveFields(): + dataManager = factory.getDataManager() + datasource = dataManager.addDatasource(testFilePath) + fieldHandlerList = dataManager.getFieldHandlerList() + fieldHandler0 = fieldHandlerList[0] + fieldIdList = [fieldHandler0.id] + filepath = "/tmp/test_xmed_saveFields.med" + + print "fieldIdList = %s"%fieldIdList + print "filepath = %s"%filepath + + dataManager.saveFields(filepath,fieldIdList) + # We just control that the file exists. But we should reload the + # contents to check the fields + import os + if not os.path.exists(filepath): + print "ERR: the file %s does not exist"%(filepath) + return False + return True + +# +# ================================================== +# Use cases of the MEDDataManager for data loading +# ================================================== +# +def TEST_MEDDataManager_getMeshList(): + dataManager = factory.getDataManager() + datasourceHandler = dataManager.addDatasource(testFilePath) + meshHandlerList = dataManager.getMeshList(datasourceHandler.id) + print meshHandlerList + + if len(meshHandlerList) == 0: + return False + return True + +def TEST_MEDDataManager_getMesh(): + dataManager = factory.getDataManager() + datasourceHandler = dataManager.addDatasource(testFilePath) + meshHandlerList = dataManager.getMeshList(datasourceHandler.id) + for mRef in meshHandlerList: + meshId = mRef.id + mRes = dataManager.getMesh(meshId) + print mRes + if ( mRes.name != mRef.name ) or ( mRes.sourceid != mRef.sourceid): + return False + return True + +def TEST_MEDDataManager_getFieldseriesListOnMesh(): + dataManager = factory.getDataManager() + datasourceHandler = dataManager.addDatasource(testFilePath) + + meshHandlerList = dataManager.getMeshList(datasourceHandler.id) + # We look for the fieldseries defined on the first mesh of the list + meshId = meshHandlerList[0].id + fieldseriesList = dataManager.getFieldseriesListOnMesh(meshId) + print fieldseriesList + + if len(fieldseriesList) == 0: + return False + return True + +def TEST_MEDDataManager_getFieldListInFieldseries(): + dataManager = factory.getDataManager() + testFilePath = os.path.join(RESDIR,testFileName) + + testFilePath = getFilePath("timeseries.med") + datasourceHandler = dataManager.addDatasource(testFilePath) + + meshHandlerList = dataManager.getMeshList(datasourceHandler.id) + # We look for the fieldseries defined on the first mesh of the list + meshId = meshHandlerList[0].id + fieldseriesList = dataManager.getFieldseriesListOnMesh(meshId) + # We look for the fields defined in the first fieldseries, + # i.e. the time steps for this field. + fieldseriesId = fieldseriesList[0].id + fieldList = dataManager.getFieldListInFieldseries(fieldseriesId) + print fieldList + + if len(fieldList) == 0: + return False + return True + +# +# ================================================== +# Use cases of the MEDCalculator +# ================================================== +# +def TEST_Calculator_basics(): + dataManager = factory.getDataManager() + datasource = dataManager.addDatasource(testFilePath) + fieldHandlerList = dataManager.getFieldHandlerList() + + # Try to operate on the two first fields + fieldHandler0 = fieldHandlerList[0] + fieldHandler1 = fieldHandlerList[1] + print fieldHandler0 + print fieldHandler1 + + calculator = factory.getCalculator() + add = calculator.add(fieldHandler0, fieldHandler1) + print add + sub = calculator.sub(fieldHandler0, fieldHandler1) + print sub + mul = calculator.mul(fieldHandler0, fieldHandler1) + print mul + div = calculator.div(fieldHandler0, fieldHandler1) + print div + #power = calculator.pow(fieldHandler0, 2) + #print power + linear = calculator.lin(fieldHandler0, 3,2) + print linear + + return True + +def TEST_Calculator_applyFunc(): + dataManager = factory.getDataManager() + datasource = dataManager.addDatasource(testFilePath) + fieldHandlerList = dataManager.getFieldHandlerList() + fieldHandler = fieldHandlerList[0] + + # In this example, "u" stands for the whole field + calculator = factory.getCalculator() + import MEDOP + nbResultingComponent = MEDOP.NBCOMP_DEFAULT + res = calculator.fct(fieldHandler,"abs(u)",nbResultingComponent); + print res + + # In this example, "a" stands for the first component + nbResultingComponent = 1 + res = calculator.fct(fieldHandler,"a+2",nbResultingComponent) + print res + + return True + +# +# ================================================== +# Use cases of the MEDDataManager that need MEDCalculator +# ================================================== +# +def TEST_markAsPersistent(): + dataManager = factory.getDataManager() + datasource = dataManager.addDatasource(testFilePath) + fieldHandlerList = dataManager.getFieldHandlerList() + fieldHandler0 = fieldHandlerList[0] + fieldHandler1 = fieldHandlerList[1] + + calculator = factory.getCalculator() + add = calculator.add(fieldHandler0, fieldHandler1) + + filepath = "/tmp/test_xmed_markAsPersistent.med" + dataManager.markAsPersistent(add.id, True) + dataManager.savePersistentFields(filepath) + import os + if not os.path.exists(filepath): + print "ERR: the file %s does not exist"%(filepath) + return False + return True + +# +# ============================================================= +# Unit tests runner +# ============================================================= +# +import unittest +from salome.kernel import pyunittester +class MyTestSuite(unittest.TestCase): + + # === MEDDataManager (core functions) + def test_getDataManager(self): + self.assertTrue(TEST_getDataManager()) + + def test_addDatasource(self): + self.assertTrue(TEST_addDatasource()) + + def test_getFieldHandlerList(self): + self.assertTrue(TEST_getFieldHandlerList()) + + def test_getFieldRepresentation(self): + self.assertTrue(TEST_getFieldRepresentation()) + + def test_updateFieldMetadata(self): + self.assertTrue(TEST_updateFieldMetadata()) + + def test_saveFields(self): + self.assertTrue(TEST_saveFields()) + + # === MEDDataManager (data request functions) + def test_MEDDataManager_getMeshList(self): + self.assertTrue(TEST_MEDDataManager_getMeshList()) + + def test_MEDDataManager_getMesh(self): + self.assertTrue(TEST_MEDDataManager_getMesh()) + + def test_MEDDataManager_getFieldseriesListOnMesh(self): + self.assertTrue(TEST_MEDDataManager_getFieldseriesListOnMesh()) + + def test_MEDDataManager_getFieldListInFieldseries(self): + self.assertTrue(TEST_MEDDataManager_getFieldListInFieldseries()) + + # === MEDCalculator (need MEDDataManager) + def test_Calculator_basics(self): + self.assertTrue(TEST_Calculator_basics()) + + def test_Calculator_applyFunc(self): + self.assertTrue(TEST_Calculator_applyFunc()) + + # === MEDDataManager (need MEDCalculator) + def test_markAsPersistent(self): + self.assertTrue(TEST_markAsPersistent()) + +def myunittests(): + pyunittester.run(MyTestSuite) + +if __name__ == "__main__": + myunittests() diff --git a/src/MEDOP/doc/CMakeLists.txt b/src/MEDOP/doc/CMakeLists.txt new file mode 100644 index 000000000..f06fcb699 --- /dev/null +++ b/src/MEDOP/doc/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright (C) 2007-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 +# + +ADD_SUBDIRECTORY(sphinx) diff --git a/src/MEDOP/doc/models/medop.xmi b/src/MEDOP/doc/models/medop.xmi new file mode 100644 index 000000000..01758265f --- /dev/null +++ b/src/MEDOP/doc/models/medop.xmi @@ -0,0 +1,318 @@ + + + + + umbrello uml modeller http://uml.sf.net + 1.5.8 + UnicodeUTF8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/MEDOP/doc/sphinx/CMakeLists.txt b/src/MEDOP/doc/sphinx/CMakeLists.txt new file mode 100644 index 000000000..54da68859 --- /dev/null +++ b/src/MEDOP/doc/sphinx/CMakeLists.txt @@ -0,0 +1,43 @@ +# Copyright (C) 2007-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 +# + +IF(SPHINX_STATUS) + SET(srcdir ${CMAKE_CURRENT_SOURCE_DIR}) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/conf.py.in ${CMAKE_CURRENT_BINARY_DIR}/conf.py @ONLY) + #FILE(GLOB MEDOP_DOC_RST "${CMAKE_CURRENT_SOURCE_DIR}/*.rst") + + #FOREACH(SRCFNAME ${MEDOP_DOC_RST}) + # GET_FILENAME_COMPONENT(FNAME ${SRCFNAME} NAME) + # CONFIGURE_FILE(${SRCFNAME} ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} COPY_ONLY) + #ENDFOREACH(FNAME ${MEDOP_DOC_RST}) + + #FILE(MAKE_DIRECTORY _static) + #CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/_static/xmed.css ${CMAKE_CURRENT_BINARY_DIR}/_static/xmed.css COPY_ONLY) + + #FILE(GLOB MEDOP_DOC_PNG_RST "${CMAKE_CURRENT_SOURCE_DIR}/images/*.png") + #FOREACH(SRCFNAME ${MEDOP_DOC_PNG_RST}) + # GET_FILENAME_COMPONENT(FNAME ${SRCFNAME} NAME) + # CONFIGURE_FILE(${SRCFNAME} ${CMAKE_CURRENT_BINARY_DIR}/images/${FNAME} COPY_ONLY) + #ENDFOREACH(FNAME ${MEDOP_DOC_RST}) + + INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${SPHINX_EXECUTABLE_TO_FIND} -c ${CMAKE_CURRENT_BINARY_DIR} -b html -d doctrees -D latex_paper_size=a4 ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/html)") + + INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/ DESTINATION share/doc/salome/dev/MED) + +ENDIF(SPHINX_STATUS) diff --git a/src/MEDOP/doc/sphinx/Makefile.am b/src/MEDOP/doc/sphinx/Makefile.am new file mode 100644 index 000000000..523111e66 --- /dev/null +++ b/src/MEDOP/doc/sphinx/Makefile.am @@ -0,0 +1,123 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# author: Guillaume Boulant (EDF/R&D, 2012) + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +tuidocdir = $(docdir)/tui/MED +devdocdir = $(docdir)/dev/MED +medopdocdir=$(devdocdir) + +.PHONY : latex + +if SPHINX_IS_OK + +medopdoc_DATA=html/index.html +html/index.html:$(RSTFILES) + make htm + +endif + +EXTRA_DIST += html + +SPHINXOPTS = +SOURCEDIR = $(srcdir) +SPHINXBUILD = sphinx-build +PAPEROPT_a4 = -D latex_paper_size=a4 +ALLSPHINXOPTS = -d doctrees $(PAPEROPT_a4) $(SPHINXOPTS) $(SOURCEDIR) +SPHINX_PYTHONPATH = $(prefix)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(KERNEL_ROOT_DIR)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(KERNEL_ROOT_DIR)/bin/salome:$(OMNIORB_ROOT)/lib/python$(PYTHON_VERSION)/site-packages + +CONF_PATH = $(top_builddir)/src/MEDOP/doc/sphinx + +SPHINX_LD_LIBRARY_PATH = $(OMNIORB_ROOT)/lib + +htm: + mkdir -p html doctrees + PYTHONPATH=$(SPHINX_PYTHONPATH):${PYTHONPATH}; \ + LD_LIBRARY_PATH=$(SPHINX_LD_LIBRARY_PATH):${LD_LIBRARY_PATH}; \ + $(SPHINXBUILD) -c $(CONF_PATH) -b html $(ALLSPHINXOPTS) html + @echo + @echo "Build finished. The HTML pages are in html." + +latex: + mkdir -p latex doctrees + PYTHONPATH=$(SPHINX_PYTHONPATH):${PYTHONPATH}; \ + LD_LIBRARY_PATH=$(SPHINX_LD_LIBRARY_PATH):${LD_LIBRARY_PATH}; \ + $(SPHINXBUILD) -c $(CONF_PATH) -b latex $(ALLSPHINXOPTS) latex + @echo + @echo "Build finished; the LaTeX files are in latex." + @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ + "run these through (pdf)latex." + +html: + mkdir -p $@ + +RSTFILES= \ + index.rst \ + xmed-specifications.rst \ + xmed-develguide.rst \ + xmed-userguide.rst + +# Files on the development of the prototype (version 2010) +RSTFILES+=\ + xmed-prototype-overview.rst \ + xmed-prototype-develguide.rst \ + xmed-prototype-medmem.rst + +# Files containing definitions and references +RSTFILES+=\ + xmed-definitions.rst \ + xmed-references.rst \ + xmed-workingnotes-2010.rst \ + xmed-workingnotes-2011.rst \ + xmed-workingnotes-2012.rst + +# Files on annexe topics +RSTFILES+=\ + salomedoc.rst + +EXTRA_DIST+= $(RSTFILES) + +EXTRA_DIST+= \ + conf.py + +install-data-local: + $(INSTALL) -d $(DESTDIR)$(medopdocdir) + if test -d "html"; then b=; else b="$(srcdir)/"; fi; \ + cp -rf $$b"html"/* $(DESTDIR)$(medopdocdir) ; \ + if test -f $$b"latex"/medopdoc.pdf; then cp -f $$b"latex"/medopdoc.pdf $(DESTDIR)$(medopdocdir) ; fi; + +uninstall-local: + chmod -R +w $(DESTDIR)$(medopdocdir) + rm -rf $(DESTDIR)$(medopdocdir)/* + +clean-local: + -rm -rf html latex doctrees + if test -d "html"; then rm -rf html ; fi + +pdf: latex + cd latex; make all-pdf + cp latex/*.pdf html/_static/documents/. + +WIKIRELATIVEPATH="pub/userdata/gboulant/data/salome/smodules/xmed/doc" +WIKIREMOTEPATH="nepal@nepal:/nepal/$(WIKIRELATIVEPATH)" +deploy: htm pdf + rsync -avz html/ $(WIKIREMOTEPATH) + @echo "The documentation can be read at URL : http://nepal.der.edf.fr/$(WIKIRELATIVEPATH)/index.html" diff --git a/src/MEDOP/doc/sphinx/_static/documents/20070105_CEA_VBERGEAUD_GuideutilisateurMEDMEMOIRE.pdf b/src/MEDOP/doc/sphinx/_static/documents/20070105_CEA_VBERGEAUD_GuideutilisateurMEDMEMOIRE.pdf new file mode 100755 index 000000000..405a2ccd0 Binary files /dev/null and b/src/MEDOP/doc/sphinx/_static/documents/20070105_CEA_VBERGEAUD_GuideutilisateurMEDMEMOIRE.pdf differ diff --git a/src/MEDOP/doc/sphinx/_static/documents/20091211_CEA_AGEAY_09-017-RT-A_Normalisation_des_champs_et_des_maillages_pour_le_couplage_de_codes.pdf b/src/MEDOP/doc/sphinx/_static/documents/20091211_CEA_AGEAY_09-017-RT-A_Normalisation_des_champs_et_des_maillages_pour_le_couplage_de_codes.pdf new file mode 100755 index 000000000..2357da079 Binary files /dev/null and b/src/MEDOP/doc/sphinx/_static/documents/20091211_CEA_AGEAY_09-017-RT-A_Normalisation_des_champs_et_des_maillages_pour_le_couplage_de_codes.pdf differ diff --git a/src/MEDOP/doc/sphinx/_static/documents/20091218_EDF_VCANO_H-I2C-2009-03595-FR.pdf b/src/MEDOP/doc/sphinx/_static/documents/20091218_EDF_VCANO_H-I2C-2009-03595-FR.pdf new file mode 100755 index 000000000..25a151e63 Binary files /dev/null and b/src/MEDOP/doc/sphinx/_static/documents/20091218_EDF_VCANO_H-I2C-2009-03595-FR.pdf differ diff --git a/src/MEDOP/doc/sphinx/_static/documents/20100129_MAN_seminaireEDF-CEA_all.pdf b/src/MEDOP/doc/sphinx/_static/documents/20100129_MAN_seminaireEDF-CEA_all.pdf new file mode 100755 index 000000000..8048e0bad Binary files /dev/null and b/src/MEDOP/doc/sphinx/_static/documents/20100129_MAN_seminaireEDF-CEA_all.pdf differ diff --git a/src/MEDOP/doc/sphinx/_static/documents/20101027_MAN_revueEDF-CEA.pdf b/src/MEDOP/doc/sphinx/_static/documents/20101027_MAN_revueEDF-CEA.pdf new file mode 100755 index 000000000..f5f91231f Binary files /dev/null and b/src/MEDOP/doc/sphinx/_static/documents/20101027_MAN_revueEDF-CEA.pdf differ diff --git a/src/MEDOP/doc/sphinx/_static/documents/20110309_XMED_scan_notes.pdf b/src/MEDOP/doc/sphinx/_static/documents/20110309_XMED_scan_notes.pdf new file mode 100644 index 000000000..aee46bf25 Binary files /dev/null and b/src/MEDOP/doc/sphinx/_static/documents/20110309_XMED_scan_notes.pdf differ diff --git a/src/MEDOP/doc/sphinx/_static/documents/20110309_XMED_scan_remarques_ELORENTZ.pdf b/src/MEDOP/doc/sphinx/_static/documents/20110309_XMED_scan_remarques_ELORENTZ.pdf new file mode 100644 index 000000000..dce10d93a Binary files /dev/null and b/src/MEDOP/doc/sphinx/_static/documents/20110309_XMED_scan_remarques_ELORENTZ.pdf differ diff --git a/src/MEDOP/doc/sphinx/_static/documents/20110310_seminaireEDF-CEA_maquetteXMED.pdf b/src/MEDOP/doc/sphinx/_static/documents/20110310_seminaireEDF-CEA_maquetteXMED.pdf new file mode 100755 index 000000000..2ea491817 Binary files /dev/null and b/src/MEDOP/doc/sphinx/_static/documents/20110310_seminaireEDF-CEA_maquetteXMED.pdf differ diff --git a/src/MEDOP/doc/sphinx/_static/presentations/20111115_JUS-2011/20111115_JUS2011_manipulation_de_champs.pdf b/src/MEDOP/doc/sphinx/_static/presentations/20111115_JUS-2011/20111115_JUS2011_manipulation_de_champs.pdf new file mode 100644 index 000000000..9a129300b Binary files /dev/null and b/src/MEDOP/doc/sphinx/_static/presentations/20111115_JUS-2011/20111115_JUS2011_manipulation_de_champs.pdf differ diff --git a/src/MEDOP/doc/sphinx/_static/presentations/20111115_JUS-2011/20111115_JUS2011_medop_exemple_1.ogv b/src/MEDOP/doc/sphinx/_static/presentations/20111115_JUS-2011/20111115_JUS2011_medop_exemple_1.ogv new file mode 100644 index 000000000..8339d6333 Binary files /dev/null and b/src/MEDOP/doc/sphinx/_static/presentations/20111115_JUS-2011/20111115_JUS2011_medop_exemple_1.ogv differ diff --git a/src/MEDOP/doc/sphinx/_static/presentations/20111115_JUS-2011/20111115_JUS2011_medop_exemple_3.ogv b/src/MEDOP/doc/sphinx/_static/presentations/20111115_JUS-2011/20111115_JUS2011_medop_exemple_3.ogv new file mode 100644 index 000000000..ec7c90a92 Binary files /dev/null and b/src/MEDOP/doc/sphinx/_static/presentations/20111115_JUS-2011/20111115_JUS2011_medop_exemple_3.ogv differ diff --git a/src/MEDOP/doc/sphinx/_static/presentations/20111115_JUS-2011/20111115_JUS2011_medop_exemple_4.ogv b/src/MEDOP/doc/sphinx/_static/presentations/20111115_JUS-2011/20111115_JUS2011_medop_exemple_4.ogv new file mode 100644 index 000000000..7398d19a9 Binary files /dev/null and b/src/MEDOP/doc/sphinx/_static/presentations/20111115_JUS-2011/20111115_JUS2011_medop_exemple_4.ogv differ diff --git a/src/MEDOP/doc/sphinx/_static/xmed.css b/src/MEDOP/doc/sphinx/_static/xmed.css new file mode 100644 index 000000000..150d01914 --- /dev/null +++ b/src/MEDOP/doc/sphinx/_static/xmed.css @@ -0,0 +1,115 @@ +@import url("default.css"); + +body { + font-family: {{ 'Liberation', sans-serif }}; + font-size: 82%; + color: #000; + background-color: #fff; + margin-left: 28px; +} + +ul { + margin: 0 0 0 0; +} + +div.related { + background-color: #444; +} + +a, +div.sphinxsidebar h3 a, +div.sphinxsidebar a, +div.footer a { + color: #444; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + color: #000; +} + +div.sphinxsidebar ul { + font-size: 94%; + color: #000; +} + +div.sphinxsidebar input { + border-color: #444; +} + +div.document { + background-color: #f5f8e4; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + color: #000; + background-color: transparent; + border-bottom: 1px solid #444; +} + +div.footer { + color: #000; +} + +li.toctree-l2 { + font-size: 100%; +} + +li.toctree-l3 { + font-size: 100%; +} + +div.sphinxsidebarwrapper ul { + list-style-type: disc; + margin-top: 1px; + padding-left: 6px; +} + +div.sphinxsidebarwrapper h3 { + font-size: 100%; + font-weight: bold; +} + +div.body h1 { + font-size: 200%; +} +div.body h2 { + font-size: 160%; +} +div.body h3, div.body h4 { + font-size: 125%; +} + +div.body p.topic-title { + margin-bottom: 2px; + font-size: 100%; +} + +div.sphinxsidebar p { + color: #444; +} + +#introduction p > em { + text-align: right; + float: right; +} + +#introduction p { + font-size: 90%; + margin-bottom: 3px; +} + +#introduction #id2.docutils.footnote { + font-size: 70%; + margin-top: 25px; +} + +#introduction table.docutils.footnote { + font-size: 70%; + margin-top: 5px; +} diff --git a/src/MEDOP/doc/sphinx/conf.py.in b/src/MEDOP/doc/sphinx/conf.py.in new file mode 100644 index 000000000..1127d1ba2 --- /dev/null +++ b/src/MEDOP/doc/sphinx/conf.py.in @@ -0,0 +1,209 @@ +# -*- coding: iso-8859-1 -*- +# +# yacs documentation build configuration file, created by +# sphinx-quickstart on Fri Aug 29 09:57:25 2008. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# The contents of this file are pickled, so don't put values in the namespace +# that aren't pickleable (module imports are okay, they're removed automatically). +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If your extensions are in another directory, add it here. If the directory +# is relative to the documentation root, use os.path.abspath to make it +# absolute, like shown here. +#sys.path.append(os.path.abspath('.')) + +# General configuration +# --------------------- + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc'] + +# Uncomment the following line to build the links with Python documentation +# (you might need to set http_proxy environment variable for this to work) +#extensions += ['sphinx.ext.intersphinx'] + +# Intersphinx mapping to add links to modules and objects in the Python +# standard library documentation +intersphinx_mapping = {'http://docs.python.org': None} + +# Add any paths that contain templates here, relative to this directory. +templates_path = [os.path.join('@srcdir@','_templates')] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +source_encoding = 'utf-8' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'MED, Manipulation de champs dans SALOME' +copyright = '2010 CEA/DEN, EDF R&D, OPEN CASCADE, G. Boulant, A. Geay' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '@SHORT_VERSION@' +# The full version, including alpha/beta/rc tags. +release = '@VERSION@' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +language = 'fr' + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of documents that shouldn't be included in the build. +#unused_docs = [] + +# List of directories, relative to source directory, that shouldn't be searched +# for source files. +exclude_trees = ['.build','ref','images','CVS','.svn'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# Options for HTML output +# ----------------------- + +# The theme to use for HTML and HTML Help pages. Major themes that come with +# Sphinx are currently 'default' and 'sphinxdoc'. +#html_theme = 'omadoc' +html_theme_options = { + "stickysidebar": "false", + "rightsidebar": "false", +} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = ['themes'] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + + +# The stylecheet file will be searched within the static path, while +# the layout.html file will be searched within the template path +# (Note that this parameter can't be used together with html_theme. Exclusive) +html_style = 'xmed.css' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = [os.path.join('@srcdir@','_static')] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +html_use_modindex = False + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, the reST sources are included in the HTML build as _sources/. +html_copy_source = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = '' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'xmeddoc' + + +# Options for LaTeX output +# ------------------------ + +# The paper size ('letter' or 'a4'). +latex_paper_size = 'a4' + +# The font size ('10pt', '11pt' or '12pt'). +latex_font_size = '10pt' + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, document class [howto/manual]). +latex_documents = [ + ('index', 'xmed-alldoc.tex', 'Documentation du module XMED', 'G. Boulant', 'manual'), + ('xmed-specifications', 'xmed-specifications.tex', 'Module XMED - Specifications', 'G. Boulant', 'manual'), + ('xmed-develguide', 'xmed-develguide.tex', 'Module XMED - Guide de developpement', 'G. Boulant', 'manual'), + ('xmed-userguide', 'xmed-userguide.tex', 'Module XMED - Guide d\'utilisation', 'G. Boulant', 'manual') +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# Additional stuff for the LaTeX preamble. +#latex_preamble = '' + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +latex_use_modindex = False diff --git a/src/MEDOP/doc/sphinx/images/champ_altitude_MAP.png b/src/MEDOP/doc/sphinx/images/champ_altitude_MAP.png new file mode 100644 index 000000000..0fbf2ba0d Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/champ_altitude_MAP.png differ diff --git a/src/MEDOP/doc/sphinx/images/convert.sh b/src/MEDOP/doc/sphinx/images/convert.sh new file mode 100755 index 000000000..289e7c377 --- /dev/null +++ b/src/MEDOP/doc/sphinx/images/convert.sh @@ -0,0 +1,16 @@ +#!/bin/sh +factor="50%" +listfiles="\ + medop-gui-aliasfield.png \ + medop-gui-result.png \ + medop-gui-selectfield.png \ + medop-gui-visufield.png" + +for file in $listfiles; do + echo "Processing file $file ..." + bn=$(basename $file .png) + outfile=$bn"_scale.png" + convert -scale $factor $file $outfile +done + + diff --git a/src/MEDOP/doc/sphinx/images/ico_datasource_add.png b/src/MEDOP/doc/sphinx/images/ico_datasource_add.png new file mode 100644 index 000000000..bcec3d6c7 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/ico_datasource_add.png differ diff --git a/src/MEDOP/doc/sphinx/images/ico_datasource_changeUnderlyingMesh.png b/src/MEDOP/doc/sphinx/images/ico_datasource_changeUnderlyingMesh.png new file mode 100644 index 000000000..fe6c8b6d3 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/ico_datasource_changeUnderlyingMesh.png differ diff --git a/src/MEDOP/doc/sphinx/images/ico_datasource_expandfield.png b/src/MEDOP/doc/sphinx/images/ico_datasource_expandfield.png new file mode 100644 index 000000000..07c8b0b10 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/ico_datasource_expandfield.png differ diff --git a/src/MEDOP/doc/sphinx/images/ico_datasource_use.png b/src/MEDOP/doc/sphinx/images/ico_datasource_use.png new file mode 100644 index 000000000..0d1ab6326 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/ico_datasource_use.png differ diff --git a/src/MEDOP/doc/sphinx/images/ico_datasource_view.png b/src/MEDOP/doc/sphinx/images/ico_datasource_view.png new file mode 100644 index 000000000..418914405 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/ico_datasource_view.png differ diff --git a/src/MEDOP/doc/sphinx/images/ico_imagesource.png b/src/MEDOP/doc/sphinx/images/ico_imagesource.png new file mode 100644 index 000000000..465b156e4 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/ico_imagesource.png differ diff --git a/src/MEDOP/doc/sphinx/images/ico_workspace_save.png b/src/MEDOP/doc/sphinx/images/ico_workspace_save.png new file mode 100644 index 000000000..268c8fb7b Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/ico_workspace_save.png differ diff --git a/src/MEDOP/doc/sphinx/images/ico_xmed.png b/src/MEDOP/doc/sphinx/images/ico_xmed.png new file mode 100644 index 000000000..4f09fe03d Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/ico_xmed.png differ diff --git a/src/MEDOP/doc/sphinx/images/med-uml-main.png b/src/MEDOP/doc/sphinx/images/med-uml-main.png new file mode 100755 index 000000000..1e7d458cc Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/med-uml-main.png differ diff --git a/src/MEDOP/doc/sphinx/images/med-uml-main_60pc.png b/src/MEDOP/doc/sphinx/images/med-uml-main_60pc.png new file mode 100644 index 000000000..f8f06cb55 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/med-uml-main_60pc.png differ diff --git a/src/MEDOP/doc/sphinx/images/medlayers.png b/src/MEDOP/doc/sphinx/images/medlayers.png new file mode 100644 index 000000000..179ae0bcf Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medlayers.png differ diff --git a/src/MEDOP/doc/sphinx/images/medmem-corba-layers.png b/src/MEDOP/doc/sphinx/images/medmem-corba-layers.png new file mode 100755 index 000000000..de355e983 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medmem-corba-layers.png differ diff --git a/src/MEDOP/doc/sphinx/images/medmem-layers.png b/src/MEDOP/doc/sphinx/images/medmem-layers.png new file mode 100644 index 000000000..d781003a6 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medmem-layers.png differ diff --git a/src/MEDOP/doc/sphinx/images/medop-gui-aliasfield.png b/src/MEDOP/doc/sphinx/images/medop-gui-aliasfield.png new file mode 100755 index 000000000..ad266f822 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medop-gui-aliasfield.png differ diff --git a/src/MEDOP/doc/sphinx/images/medop-gui-aliasfield_scale.png b/src/MEDOP/doc/sphinx/images/medop-gui-aliasfield_scale.png new file mode 100644 index 000000000..33a5caeb9 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medop-gui-aliasfield_scale.png differ diff --git a/src/MEDOP/doc/sphinx/images/medop-gui-result.png b/src/MEDOP/doc/sphinx/images/medop-gui-result.png new file mode 100755 index 000000000..54a41bfed Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medop-gui-result.png differ diff --git a/src/MEDOP/doc/sphinx/images/medop-gui-result_scale.png b/src/MEDOP/doc/sphinx/images/medop-gui-result_scale.png new file mode 100644 index 000000000..a53187bd4 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medop-gui-result_scale.png differ diff --git a/src/MEDOP/doc/sphinx/images/medop-gui-selectfield.png b/src/MEDOP/doc/sphinx/images/medop-gui-selectfield.png new file mode 100755 index 000000000..47d5d61a4 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medop-gui-selectfield.png differ diff --git a/src/MEDOP/doc/sphinx/images/medop-gui-selectfield_scale.png b/src/MEDOP/doc/sphinx/images/medop-gui-selectfield_scale.png new file mode 100644 index 000000000..e311926f6 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medop-gui-selectfield_scale.png differ diff --git a/src/MEDOP/doc/sphinx/images/medop-gui-visufield.png b/src/MEDOP/doc/sphinx/images/medop-gui-visufield.png new file mode 100755 index 000000000..fc4262722 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medop-gui-visufield.png differ diff --git a/src/MEDOP/doc/sphinx/images/medop-gui-visufield_scale.png b/src/MEDOP/doc/sphinx/images/medop-gui-visufield_scale.png new file mode 100644 index 000000000..6cbe393c9 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medop-gui-visufield_scale.png differ diff --git a/src/MEDOP/doc/sphinx/images/medop_exportparavis.png b/src/MEDOP/doc/sphinx/images/medop_exportparavis.png new file mode 100644 index 000000000..4205c6ba6 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medop_exportparavis.png differ diff --git a/src/MEDOP/doc/sphinx/images/medop_exportparavis_result.png b/src/MEDOP/doc/sphinx/images/medop_exportparavis_result.png new file mode 100644 index 000000000..56abc6ee3 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medop_exportparavis_result.png differ diff --git a/src/MEDOP/doc/sphinx/images/medop_image2med_dialog.png b/src/MEDOP/doc/sphinx/images/medop_image2med_dialog.png new file mode 100644 index 000000000..35cf57b39 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medop_image2med_dialog.png differ diff --git a/src/MEDOP/doc/sphinx/images/medop_image2med_tomographie.png b/src/MEDOP/doc/sphinx/images/medop_image2med_tomographie.png new file mode 100644 index 000000000..9f67fbc0c Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/medop_image2med_tomographie.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-architecture.png b/src/MEDOP/doc/sphinx/images/xmed-architecture.png new file mode 100755 index 000000000..143b674f7 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-architecture.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-exploremed.png b/src/MEDOP/doc/sphinx/images/xmed-exploremed.png new file mode 100644 index 000000000..c9e0283aa Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-exploremed.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-functions.png b/src/MEDOP/doc/sphinx/images/xmed-functions.png new file mode 100644 index 000000000..b0e67b8ef Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-functions.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-changeUnderlyingMesh.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-changeUnderlyingMesh.png new file mode 100644 index 000000000..c62da6a19 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-changeUnderlyingMesh.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-changeUnderlyingMesh_wsview.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-changeUnderlyingMesh_wsview.png new file mode 100644 index 000000000..bccd8c258 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-changeUnderlyingMesh_wsview.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-contextmenu.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-contextmenu.png new file mode 100644 index 000000000..a8df311ca Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-contextmenu.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-contextmenu_60pc.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-contextmenu_60pc.png new file mode 100644 index 000000000..5492fa1cc Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-contextmenu_60pc.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-contextmenu_70pc.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-contextmenu_70pc.png new file mode 100644 index 000000000..5db5a11d8 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-contextmenu_70pc.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-contextmenu_80pc.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-contextmenu_80pc.png new file mode 100644 index 000000000..48ed01162 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-contextmenu_80pc.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-expand-zoom.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-expand-zoom.png new file mode 100644 index 000000000..b4891fd84 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-expand-zoom.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-explore-zoom.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-explore-zoom.png new file mode 100644 index 000000000..2de39c77f Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-explore-zoom.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-explore.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-explore.png new file mode 100644 index 000000000..8bb9bbd68 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-explore.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-menucontextuel-zoom.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-menucontextuel-zoom.png new file mode 100644 index 000000000..85ea5d5cc Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-menucontextuel-zoom.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-selectfile.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-selectfile.png new file mode 100644 index 000000000..39da53302 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-selectfile.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace-alias.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace-alias.png new file mode 100644 index 000000000..f6eca45e0 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace-alias.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace-result.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace-result.png new file mode 100644 index 000000000..505e3d6ad Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace-result.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace-result_70pc.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace-result_70pc.png new file mode 100644 index 000000000..f942cd84b Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace-result_70pc.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace.png new file mode 100644 index 000000000..1f7109f63 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace_70pc.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace_70pc.png new file mode 100644 index 000000000..98e1f324c Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-useinworkspace_70pc.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize-result.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize-result.png new file mode 100644 index 000000000..b0f4243d4 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize-result.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize-result_50pc.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize-result_50pc.png new file mode 100644 index 000000000..f86b7b021 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize-result_50pc.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize-result_70pc.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize-result_70pc.png new file mode 100644 index 000000000..6bf6817a5 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize-result_70pc.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize-zoom.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize-zoom.png new file mode 100644 index 000000000..e556b1011 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize-zoom.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize.png new file mode 100644 index 000000000..94fa549d6 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize_50pc.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize_50pc.png new file mode 100644 index 000000000..a96aefc10 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize_50pc.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize_70pc.png b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize_70pc.png new file mode 100644 index 000000000..1f0599e77 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-datasource-visualize_70pc.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-start.png b/src/MEDOP/doc/sphinx/images/xmed-gui-start.png new file mode 100644 index 000000000..8a0a5931f Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-start.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-withframe.png b/src/MEDOP/doc/sphinx/images/xmed-gui-withframe.png new file mode 100644 index 000000000..532c285e6 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-withframe.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-workspace-view.png b/src/MEDOP/doc/sphinx/images/xmed-gui-workspace-view.png new file mode 100644 index 000000000..f501f6cf1 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-workspace-view.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui-workspace.png b/src/MEDOP/doc/sphinx/images/xmed-gui-workspace.png new file mode 100644 index 000000000..081b8333f Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui-workspace.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui.png b/src/MEDOP/doc/sphinx/images/xmed-gui.png new file mode 100644 index 000000000..0c9168374 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-gui_70pc.png b/src/MEDOP/doc/sphinx/images/xmed-gui_70pc.png new file mode 100644 index 000000000..6d1845c61 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-gui_70pc.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-implantation.png b/src/MEDOP/doc/sphinx/images/xmed-implantation.png new file mode 100644 index 000000000..0f17dcce4 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-implantation.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-irm-diff.png b/src/MEDOP/doc/sphinx/images/xmed-irm-diff.png new file mode 100644 index 000000000..44d557884 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-irm-diff.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-irm-field.png b/src/MEDOP/doc/sphinx/images/xmed-irm-field.png new file mode 100644 index 000000000..1012ab1ea Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-irm-field.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-irm.png b/src/MEDOP/doc/sphinx/images/xmed-irm.png new file mode 100644 index 000000000..5d20c7ed1 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-irm.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-userguide-example2-datasource.png b/src/MEDOP/doc/sphinx/images/xmed-userguide-example2-datasource.png new file mode 100644 index 000000000..4e67ab118 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-userguide-example2-datasource.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-userguide-example2-workspace-save.png b/src/MEDOP/doc/sphinx/images/xmed-userguide-example2-workspace-save.png new file mode 100644 index 000000000..9d10513c9 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-userguide-example2-workspace-save.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-userguide-example2-workspace.png b/src/MEDOP/doc/sphinx/images/xmed-userguide-example2-workspace.png new file mode 100644 index 000000000..3138f7a08 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-userguide-example2-workspace.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-visu-importtimestamps.png b/src/MEDOP/doc/sphinx/images/xmed-visu-importtimestamps.png new file mode 100644 index 000000000..b685eccbd Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-visu-importtimestamps.png differ diff --git a/src/MEDOP/doc/sphinx/images/xmed-visu-scalarmaptimestamps.png b/src/MEDOP/doc/sphinx/images/xmed-visu-scalarmaptimestamps.png new file mode 100644 index 000000000..1cda69ba4 Binary files /dev/null and b/src/MEDOP/doc/sphinx/images/xmed-visu-scalarmaptimestamps.png differ diff --git a/src/MEDOP/doc/sphinx/index.rst b/src/MEDOP/doc/sphinx/index.rst new file mode 100644 index 000000000..90fdc6b46 --- /dev/null +++ b/src/MEDOP/doc/sphinx/index.rst @@ -0,0 +1,44 @@ + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + Documentation du module XMED +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Le module SALOME nommé XMED (pour eXtension MED) est l'espace de +développement des fonctions de manipulation de champs dans SALOME. Le +contenu de ce module est amené à intégrer le module MED pour former la +future version en préparation pour la version SALOME 7 de 2012. + +Documentation principale +======================== + +.. toctree:: + :maxdepth: 1 + + xmed-specifications.rst + xmed-develguide.rst + xmed-userguide.rst + +Documentation du prototype 2010 +=============================== + +Cette section décrit le prototype mis au point en 2010 pour les +analyses de conception (maquette 2010 sur base MEDMEM) + +.. toctree:: + :maxdepth: 1 + + xmed-prototype-overview.rst + xmed-prototype-develguide.rst + xmed-prototype-medmem.rst + +Documentation annexe +==================== + +.. toctree:: + :maxdepth: 1 + + xmed-references.rst + xmed-workingnotes-2010.rst + xmed-workingnotes-2011.rst + xmed-workingnotes-2012.rst + salomedoc.rst diff --git a/src/MEDOP/doc/sphinx/salomedoc.rst b/src/MEDOP/doc/sphinx/salomedoc.rst new file mode 100644 index 000000000..fc2f1fdc8 --- /dev/null +++ b/src/MEDOP/doc/sphinx/salomedoc.rst @@ -0,0 +1,231 @@ +.. meta:: + :keywords: SALOME, development + :author: Guillaume Boulant + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Annexe : Règles de développement SALOME +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Cette annexe est un recueil de techniques de développement spécifiques +à l'environnement SALOME et utilisées pour la mise au point du module +XMED. Elles sont a priori utilisables pour d'autres contexte de +développement dans SALOME. + +.. TODO: récupérer les fonctions génériques de VisuGUI_Tools.cxx +.. TODO: récupérer les fonctions génériques de SMESGGUI_utils.cxx + +.. contents:: Sommaire + :local: + :backlinks: none + +Récupérer la sélection dans l'arbre d'étude +=========================================== + +Dans une classe dérivée de ``SalomeApp_Module``, on peut utiliser un +code de la forme suivante: + +.. code-block:: cpp + + #include + #include + #include + #include + + // ... + + // Get the selected object in the study (SObject) + LightApp_SelectionMgr* aSelectionMgr = this->getApp()->selectionMgr(); + SALOME_ListIO aListIO; + aSelectionMgr->selectedObjects(aListIO); + + // Analyse the selection. There can be more than one item. + SALOME_ListIteratorOfListIO It (aListIO); + for (; It.More(); It.Next()) { + Handle(SALOME_InteractiveObject) anIO = It.Value(); + SALOMEDS::SObject_var aSObject = aStudy->FindObjectID(anIO->getEntry()); + + // Check if the selected object is relevant for the operation + // ... + + // Process the SObject if it's relevant + // ... + + } + +On peut noter qu'une variable ``aStudy`` est requise. Elle représente +l'étude SALOME sur laquelle s'oppère la sélection. L'étude active +(impliquée dans la sélection) peut être obtenue au moyen du +gestionnaire d'étude (voir :ref:`ci-dessous `). + +Réglage du curseur graphique +============================ + +Dans le cas où le traitement est long, il peut être intéressant +d'encadrer l'opération par un vérouillage du curseur de sélection: + +.. code-block:: cpp + + QApplication::setOverrideCursor(Qt::WaitCursor); + + // Do the job + // ... + + QApplication::restoreOverrideCursor(); + + +Les variables pour la gestion de l'étude +======================================== + +Les variables CORBA +------------------- + +Les variables CORBA comme le serveur de noms (naming service) et le +gestionnaire de cycle de vie des objets (LifeCycleCRORBA) sont +fréquement utilisés. Dans le contexte d'une application (classe de +type ``SalomeApp_Module``), il est possible de récupérer simplement +des instances de ces variables par les commandes suivantes: + +.. code-block:: cpp + + #include + #include + + CORBA::ORB_var orb = SalomeApp_Application::orb(); + SALOMEDSClient_StudyManager* studyMgr = SalomeApp_Application::studyMgr(); + SALOME_NamingService* namingService = SalomeApp_Application::namingService(); + SALOME_LifeCycleCORBA* lcc = SalomeApp_Application::lcc(); + +Pour un usage en dehors de l'application graphique (par exemple au +niveau du container), l'orb peut être obtenu par les mécanismes +standard d'omniORB: + +.. code-block:: cpp + + CORBA::ORB_var orb = CORBA::ORB_init(0,0); + +L'orb est par exemple utile à récupérer pour la sérialisation des +objets CORBA et la manipulation des références sous forme de chaîne de +caractères: + +.. code-block:: cpp + + // We suppose here that we have a CORBA object reference (object of + // type *_ptr or *_var), for example a SALOME_MED::MED object. + SALOME_MED::MED_ptr medObj = ... // anything to get this object + QString medIOR = orb->object_to_string(medObj); + + SALOME_MED::MED_ptr anOtherRefToMedObj = orb->string_to_object(medIOR) + +.. note: this serialization can be used to communicate between a GUI + and a component in a container, or between the C++ context and the + python context. + +.. _salomedoc_getActiveStudy: + +Récupérer l'étude active +------------------------ + +Le concept d'étude active est un concept GUI. Il désigne l'étude en +cours d'usage au niveau de l'interface graphique. + +.. note: Pour rappel, l'étude est un objet CORBA de type + ``SALOMEDS::Study`` qui héberge physiquement les ``SObject`` + pointant vers les données. L'arbre d'étude ("Object browser") est + une représentation graphique de cet objet. + +L'étude active peut être obtenue au moyen du gestionnaire +d'étude. Dans le corps d'une classe de type ``SalomeApp_Module``, ceci +peut se faire par un code de la forme suivante: + +.. code-block:: cpp + + #include "SALOMEconfig.h" + #include CORBA_SERVER_HEADER(SALOMEDS) + #include + #include + + // ... + + // Get the study id of the active study + SalomeApp_Study* appStudy = dynamic_cast (this->getApp()->activeStudy()); + _PTR(Study) aCStudy = appStudy->studyDS(); + int aStudyID = aCStudy->StudyId(); + + // Then get the study manager + SALOME_NamingService *aNamingService = SalomeApp_Application::namingService(); + CORBA::Object_var anObject = aNamingService->Resolve("/myStudyManager"); + SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(anObject); + + // Finally, request the study manager for the study (SALOMEDS::Study) + SALOMEDS::Study_var aStudy = aStudyManager->GetStudyByID(aStudyID); + + +Communiquer avec la console python +================================== + +La console python désigne l'interpréteur embarqué dans l'interface +graphique de SALOME (GUI). Elle est également désignée comme +l'interface textuelle de SALOME (TUI) car elle permet de piloter +SALOME au moyen de commandes en syntaxe python. + +Le paragraphe montre comment communiquer avec cette interface texte +depuis le contexte C++ de l'interface graphique, en particulier pour +déclencher l'exécution de commandes. + +Le code se situe donc au sein d'une classe de type +``SalomeApp_Module`` (de laquelle hérite la partie graphique d'un +module SALOME, de nom ``GUI``). Cette classe possède une +méthode ``getApp()`` par laquelle on peut récupérer une instance de la +console python embarquée (this->getApp()->pythonConsole()). + +Le code suivant illustre l'envoie d'une commande python par ce +mécanisme. Dans cette exemple, on défini une variable ``id`` dans la +console python comme l'identifiant de l'étude active: + +.. code-block:: cpp + + #include + #include + #include + + PyConsole_Console * pyConsole = getApp()->pythonConsole(); + + QStringList commands; + commands+="import salome"; + commands+="id=salome.myStudyId"; + + QStringListIterator it(commands); + while (it.hasNext()) { + pyConsole->exec(it.next()); + } + +Dans ce deuxième exemple, on cherche à reconstituer dans le contexte +de la console python un pointer vers un objet med instancié dans le +contexte C++ de l'application graphique. Pour cela, on communique la +référence de l'objet sous la forme sérialisé (IOR pour un objet +CORBA): + +.. code-block:: cpp + + #include + #include + #include + #include + + // We suppose here that we have a CORBA object reference (object of + // type *_ptr or *_var), for example a SALOME_MED::MED object. + SALOME_MED::MED_ptr medObj = ... // anything to get this object + + // Get the IOR of this object + QString medIOR = SalomeApp_Application::orb()->object_to_string(medObj); + + PyConsole_Console * pyConsole = getApp()->pythonConsole(); + + QStringList commands; + commands+="import salome"; + commands+=QString("med=salome.orb.string_to_object(\"%1\")").arg(medIOR); + + QStringListIterator it(commands); + while (it.hasNext()) { + pyConsole->exec(it.next()); + } diff --git a/src/MEDOP/doc/sphinx/xmed-definitions.rst b/src/MEDOP/doc/sphinx/xmed-definitions.rst new file mode 100644 index 000000000..cfd0bc148 --- /dev/null +++ b/src/MEDOP/doc/sphinx/xmed-definitions.rst @@ -0,0 +1,88 @@ +.. AVERTISSEMENT: +.. Ce fichier contient les définitions globales à la documentation. Il +.. peut être inclu au moyen de la directive rst "include" pour +.. disposer des définitions dans le fichier qui fait l'inclusion. +.. Pour éviter de polluer les textes dans lequel ce fichier est inclu, +.. il est interdit de faire afficher du texte par ce document de +.. définition. + +.. REFERENCES DOCUMENTAIRES: +.. (les documents sont fournis dans le répertoire _static/documents) + +.. You can refer to this reference using the keyword: |REF_EDF_VCA_H-I2C-2009-03595-FR|_ +.. |REF_EDF_VCA_H-I2C-2009-03595-FR| replace:: H-I2C-2009-03595-FR: Manipulation de champs dans SALOME - Orientations générales +.. _REF_EDF_VCA_H-I2C-2009-03595-FR: _static/documents/20091218_EDF_VCANO_H-I2C-2009-03595-FR.pdf + +.. You can refer to this reference using the keyword: |REF_CEA_VBE_MEDMEM|_ +.. |REF_CEA_VBE_MEDMEM| replace:: Guide utilisateur de MED mémoire +.. _REF_CEA_VBE_MEDMEM: _static/documents/20070105_CEA_VBERGEAUD_GuideutilisateurMEDMEMOIRE.pdf + +.. You can refer to this reference using the keyword: |REF_EDF_GBO_WORKNOTE|_ +.. |REF_EDF_GBO_WORKNOTE| replace:: XMED: Notes de travail +.. _REF_EDF_GBO_WORKNOTE: _static/documents/20110309_XMED_scan_notes.pdf + +.. You can refer to this reference using the keyword: |REF_EDF_ELO_REM|_ +.. |REF_EDF_ELO_REM| replace:: XMED: Remarques E. Lorentz +.. _REF_EDF_ELO_REM: _static/documents/20110309_XMED_scan_remarques_ELORENTZ.pdf + +.. You can refer to this reference using the keyword: |REF_EDF_PRESMANIPCHP01|_ +.. |REF_EDF_PRESMANIPCHP01| replace:: Séminaire EDF-CEA de janvier 2010: manipulation de champs +.. _REF_EDF_PRESMANIPCHP01: _static/documents/20100129_MAN_seminaireEDF-CEA_all.pdf + +.. You can refer to this reference using the keyword: |REF_EDF_PRESMANIPCHP02|_ +.. |REF_EDF_PRESMANIPCHP02| replace:: Révue EDF-CEA: maquette de manipulation de champs +.. _REF_EDF_PRESMANIPCHP02: _static/documents/20101027_MAN_revueEDF-CEA.pdf + +.. You can refer to this reference using the keyword: |REF_EDF_PRESMANIPCHP03|_ +.. |REF_EDF_PRESMANIPCHP03| replace:: Séminaire EDF-CEA de mars 2011: manipulation de champs, maquette 2010 +.. _REF_EDF_PRESMANIPCHP03: _static/documents/20110310_seminaireEDF-CEA_maquetteXMED.pdf + +.. PRESENTATIONS: + +.. You can refer to this reference using the keyword: |REF_EDF_JUS2011_PDF|_ +.. |REF_EDF_JUS2011_PDF| replace:: JUS2011: outils de manipulation de champs +.. _REF_EDF_JUS2011_PDF: _static/presentations/20111115_JUS-2011/20111115_JUS2011_manipulation_de_champs.pdf + +.. You can refer to this reference using the keyword: |REF_EDF_JUS2011_OGV1|_ +.. |REF_EDF_JUS2011_OGV1| replace:: JUS2011: outils de manipulation de champs - Exemple 1 +.. _REF_EDF_JUS2011_OGV1: _static/presentations/20111115_JUS-2011/20111115_JUS2011_medop_exemple_1.ogv +.. You can refer to this reference using the keyword: |REF_EDF_JUS2011_OGV3|_ +.. |REF_EDF_JUS2011_OGV3| replace:: JUS2011: outils de manipulation de champs - Exemple 3 +.. _REF_EDF_JUS2011_OGV3: _static/presentations/20111115_JUS-2011/20111115_JUS2011_medop_exemple_3.ogv +.. You can refer to this reference using the keyword: |REF_EDF_JUS2011_OGV4|_ +.. |REF_EDF_JUS2011_OGV4| replace:: JUS2011: outils de manipulation de champs - Exemple 4 +.. _REF_EDF_JUS2011_OGV4: _static/presentations/20111115_JUS-2011/20111115_JUS2011_medop_exemple_4.ogv + + + +.. LIENS EXTERNES: +.. (l'accès nécessite le réseau intranet EDF et internet) + +.. You can refer to this reference using the keyword: |LINK_EDF_MEDDOC|_ +.. |LINK_EDF_MEDDOC| replace:: Modèle MED +.. _LINK_EDF_MEDDOC: http://med.der.edf.fr/logiciels/med-2.3.6/doc/html/modele_de_donnees.html + +.. You can refer to this reference using the keyword: |LINK_EDF_MEDFICHIERDOC|_ +.. |LINK_EDF_MEDFICHIERDOC| replace:: Documentation de MED fichier +.. _LINK_EDF_MEDFICHIERDOC: http://med.der.edf.fr/logiciels/med-2.3.6/doc + +.. You can refer to this reference using the keyword: |LINK_EDF_SALOME_MED__MED|_ +.. |LINK_EDF_SALOME_MED__MED| replace:: SALOME_MED::MED +.. _LINK_EDF_SALOME_MED__MED: http://nepal.der.edf.fr/pub/SALOME_userguide/MED5/doc/salome/tui/MED/interfaceSALOME__MED_1_1MED.html + +.. RENVOIES: + +.. You can refer to this reference using the keyword: |SEE_MEDMEM_CORBA| +.. |SEE_MEDMEM_CORBA| replace:: :ref:`L'interface CORBA SALOME_MED` + + +.. SNAPSHOTS: + +.. |XMED_SPECIFICATIONS_PDF| replace:: version pdf +.. _XMED_SPECIFICATIONS_PDF: _static/documents/xmed-specifications.pdf + +.. |XMED_DEVELGUIDE_PDF| replace:: version pdf +.. _XMED_DEVELGUIDE_PDF: _static/documents/xmed-develguide.pdf + +.. |XMED_USERGUIDE_PDF| replace:: version pdf +.. _XMED_USERGUIDE_PDF: _static/documents/xmed-userguide.pdf diff --git a/src/MEDOP/doc/sphinx/xmed-develguide.rst b/src/MEDOP/doc/sphinx/xmed-develguide.rst new file mode 100644 index 000000000..be5d72bab --- /dev/null +++ b/src/MEDOP/doc/sphinx/xmed-develguide.rst @@ -0,0 +1,239 @@ +.. meta:: + :keywords: maillage, champ, manipulation, med, développement + :author: Guillaume Boulant + +.. include:: xmed-definitions.rst + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Module XMED: Guide de développement +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +(|XMED_DEVELGUIDE_PDF|_) + +Ce document est la documentation technique du module XMED. Il fournit +les instructions à suivre pour installer le module en vue d'un travail +de développement, puis décrit les éléments de conception qui +structurent le module. + +.. contents:: Sommaire + :local: + :backlinks: none + +.. warning:: Ce document est en travaux. Tant que cet avis n'aura pas + disparu, veuillez en considérer le plan et le contenu encore + incomplets, temporaires et sujets à caution. + +Mise en place d'un espace de développement +========================================== + +Gestion de configuration du module XMED +--------------------------------------- + +Les sources du module (répertoire ``xmed``) sont archivés en dépôt de +configuration dans une base git du projet NEPAL. Ils peuvent être +récupérés au moyen de la commande:: + + $ git clone git@cli70rw.der.edf.fr:xom/xmed.git + +Cette commande installe un répertoire ``xmed`` contenant l'ensemble +des sources du module XMED. + +Le module XMED a pour pré-requis logiciel la plateforme SALOME: + +* SALOME version 6.1.3 (au moins) à télécharger à l'URL + http://pal.der.edf.fr/pal/projets/pal/releases/V6_1_3 +* On peut également utiliser une version dérivée comme SALOME-MECA 2010.1 +* Installer la plate-forme choisie selon les instructions fournies. + +Le module XMED utilise également une bibliothèque interne au projet +NEPAL, appelée XSALOME, et qui fournit une extension aux fonctions de +SALOME pour un usage de développement (XSALOME signifie eXtension +SALOME). Les sources de cette bibliothèque doivent être récupérés au +moyen de la commande:: + + $ git clone git@cli70rw.der.edf.fr:xom/xsalome.git + +Cette commande installe un répertoire ``xsalome`` contenant l'ensemble +des sources de la bibliothèque XSALOME. + +.. note:: La bibliothèque XSALOME n'est pas un module SALOME mais une + simple bibliothèque de fonctions qui complète ou rend plus facile + d'utilisation les fonctions de SALOME. Elle NE DOIT EN AUCUN CAS + être intégrée à d'autres projets que les projets internes NEPAL ou + MAILLAGE. Il s'agit en effet d'une bibliothèque de transition qui + héberge des développements destinés à être reversés dans la + plate-forme SALOME. Le contenu et les interfaces de XSALOME ne peut + donc être garanti sur le long terme. + +Installation et lancement de l'application +------------------------------------------ + +L'installation suppose qu'une version 6.1.3 de SALOME (ou plus) est +disponible et que le shell de travail est étendu avec l'environnement +de SALOME. En général, par des commandes de la forme:: + + $ . /where/is/salome/prerequis.sh + $ . /where/is/salome/envSalome.sh + +La compilation des modules xsalome et xmed suit le standard SALOME. La +bibliothèque xsalome est un prérequis à la compilation de xmed. Pour +cela, la variable d'environnement XSALOME_DIR doit être spécifiée pour +la configuration de la procédure de reconstruction de xmed:: + + $ export XSALOME_DIR= + +Aprés l'installation de xmed, il est possible de générer +automatiquement une application SALOME prête à l'emploi pour la +manipulation de champs:: + + $ /bin/salome/xmed/appligen/appligen.sh + +Cette commande génére un répertoire ``appli`` à l'emplacement où elle +est exécutée. Il reste à lancer l'application SALOME au moyen de la +commande:: + + $ ./appli/runAppli -k + +Exécution des tests unitaires +----------------------------- + +Les tests unitaires peuvent être exécutés au moyen de scripts python +lancés depuis une session shell SALOME. Dans un nouveau shell, taper:: + + $ ./appli/runSession + [NS=mars:2810]$ python appli/lib/python2.6/site-packages/salome/xmed/test_medoperation.py + +L'exécution imprime un rapport détaillant le résultat pour chaque +fonction de test:: + + test_addition (__main__.MyTestSuite) ... ok + test_arithmetics (__main__.MyTestSuite) ... ok + test_composition (__main__.MyTestSuite) ... FAIL + test_litteral_equation (__main__.MyTestSuite) ... ok + test_modification_of_attributes (__main__.MyTestSuite) ... ok + test_unary_operations (__main__.MyTestSuite) ... ok + test_update_metadata (__main__.MyTestSuite) ... ok + +Les scripts de test sont: + +* ``test_medoperation.py``: tests des operations de champs telles + qu'elles sont mises en oeuvre depuis l'interface textuelle. +* ``test_xmed.py``: tests des composants CORBA mis en oeuvre + (``MEDDataManager`` et ``MEDCalculator``) + +Architecture du module XMED +=========================== + +Le module MED pour la manipulation de champs est composé de: + +* une bibliothèque de fonctions pour le traitement de données sur des + maillages et des champs conformes au modèle MED (package + MEDCoupling, MEDLoader et REMAPPER); +* une interface graphique pour la mise en oeuvre des cas standard de + manipulation de champs; +* une ensemble d'outils pour intervenir sur des fichiers au format + MED. + +Une bibliothèque de fonctions pour le traitement de données +----------------------------------------------------------- + +La figure ci-dessous montre la structure des paquets logiciels qui +constituent la bibliothèque: + +.. image:: images/medlayers.png + :align: center + +Elle comprend en particulier les paquets suivants: + +* MEDCoupling: qui décrit les structures de données pour porter les + maillages et les champs +* MEDLoader: qui fournit les fonctions de persistence sous forme de + fichiers au format MED (lecture et écriture). +* REMAPPER: + +Il est important de noter que MEDCoupling n'a aucune dépendance +logicielle autre que la bibliothèque C++ standard. Ceci permet +d'envisager son implantation dans un code de calcul ou un outil de +traitement sans tirer l'ensemble pré-requis de SALOME. + +Une interface graphique pour l'exécution des cas standard +--------------------------------------------------------- + + +Un ensemble d'outils pour le traitement de fichiers +--------------------------------------------------- + + +Description des composants +========================== + +MEDDataManager - Le gestionnaire des données de session +------------------------------------------------------- + +Le composant MEDDataManager s'occupe de fournir les données MED sur +demande des interfaces clientes, en particulier pour module de +pilotage fieldproxy.py. Ces données peuvent avoir plusieurs sources, +en général elle proviennent d'un fichier au format med contenant des +champs définis sur des maillages. Les données sont identifiées à la +lecture des métadonnées de description dans le fichiers med, puis les +valeurs des champs et les maillages support sont chargés au besoin. + +Le chargement des métadonnées de description se fait par la méthode:: + + addDatasource(const char \*filepath) + + + +Eléments d'implémentation +========================= + +Ecrire un service CORBA qui retourne une sequence de FieldHandler: + +.. code-block:: cpp + + MEDOP::FieldHandlerList * MyFunction(...) { + vector fieldHandlerList; + ... + + fieldHandlerList.push_back(fieldHandler); + + // Map the resulting list to a CORBA sequence for return: + MEDOP::FieldHandlerList_var fieldHandlerSeq = new MEDOP::FieldHandlerList(); + int nbFieldHandler = fieldHandlerList.size(); + fieldHandlerSeq->length(nbFieldHandler); + for (int i=0; iid] = fieldHandler; + + // >>> WARNING: CORBA struct specification indicates that the + // assignement acts as a desctructor for the structure that is + // pointed to. The values of the fields are copy first in the new + // structure that receives the assignement and finally the initial + // structure is destroyed. In the present case, WE WANT to keep + // the initial fieldHandler in the map. We must then make a deep + // copy of the structure found in the map and return the copy. The + // CORBA struct specification indicates that a deep copy can be + // done using the copy constructor. <<< + return new MEDOP::FieldHandler(*fieldHandler); + + + +ANNEXE: Bug en cours +==================== + +TO FIX: + +* la composition d'opérations n'est pas possible (ex: 2*f1+f2) car + 2*f1 est indiqué comme non compatible (il semble qu'il n'ai pas la + reference correcte vers le maillage). +* le script de test test_medoperation.py plante si le module xmed n'a + pas été chargé avec des données chargées. diff --git a/src/MEDOP/doc/sphinx/xmed-prototype-develguide.rst b/src/MEDOP/doc/sphinx/xmed-prototype-develguide.rst new file mode 100644 index 000000000..de2387b74 --- /dev/null +++ b/src/MEDOP/doc/sphinx/xmed-prototype-develguide.rst @@ -0,0 +1,731 @@ +.. meta:: + :keywords: maillage, champ, manipulation, XMED + :author: Guillaume Boulant + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Démonstrateur XMED, documentation technique +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Cette note fait la synthèse des développements effectués pour le +maquettage des fonctions de manipulation de champs dans SALOME. Elle +présente les principes retenus en matière de conception, c'est-à-dire +concernant les mécanismes techniques sous-jacents, et en matière +d'ergonomie, c'est-à-dire concernant les modalités d'utilisation dans +l'environnement SALOME. + +Ces principes sont illustrés par des développements implantés dans le +module XMED, développé pour les besoins de l'analyse, et dans le +module MED distribué avec la plateforme SALOME. + +.. note:: la lecture de ce chapitre demande une connaissance de la + structure de classes du module MED, en particulier la distinction + entre les classes ``MEDMEM::*`` et les servants CORBA associés + (classe ``SALOME_MED::*``). + +.. contents:: Sommaire + :local: + :backlinks: none + +Principes directeurs +==================== + +Objectif et motivation +---------------------- + +L'objectif de maquettage est de trouver une architecture technique qui +permet d'exécuter le cas d'utilisation suivant: + +* Chargement d'un fichier med dans SALOME (a priori dans le module MED) +* Sélection graphique des champs de l'étude à mettre à disposition + dans la console utilisateur ("calculette" en mode texte qui + concraitement correspond à l'interface python de SALOME). +* Dans la calculette, exécution d'opérations algébriques (+,-,*,/) + entre champs avec possibilité d'utiliser des scalaires dans des + opérations de type transformation linéaire (y=ax+b ou y et x sont + des champs et a et b des scalaires). Opérations pow, sqrt. +* Possibilité de visualiser les champs produits avec VISU pour + contrôle des résultats. +* Possibilité d'exporter des champs produits dans un fichier med. + +Eléments de contexte +-------------------- + +Les opérations de manipulation de champs sont en grande partie +implémentées dans la bibliothèque MEDMEM. Pour illustration, le +fragment de code ci-dessous montre comment une addition de champ peut +être opérée en python: + +.. code-block:: python + + from libMEDMEM_Swig import MedDataManager + from xmed.helper import readMed, writeMed + + # Load the medmem data structure from a med file + med = readMed("/tmp/input.med") + # Then create a med data manager to deal with the fields data + dm = MedDataManager(med) + # Get the timestamps (dt,it)=(-1,-1) of the fields "testfield1" and "testfield2" + f1 = dm.getFieldDouble("testfield1",-1,-1) + f2 = dm.getFieldDouble("testfield2",-1,-1) + + # Create a new field as the sum of f1 and f2 + r = f1 + f2 + # And add this new field to the med data structure + med.addField(r) + + # Finally, write the whole data in an output med file + writeMed(med,"/tmp/output.med") + +Ceci montre que les champs peuvent être manipulés avec une interface +relativement ergonomique (une addition de deux champs f1 et f2 s'écrit +f1+f2) tant que l'on manoeuvre des objets MEDMEM purs (classes C++ du +package MEDMEM et wrapping python du package MEDMEM_SWIG). + +Par ailleurs, le fonctionnement actuel des modules SALOME qui +manoeuvrent des données MED est d'instancier les structures de données +MEDMEM au niveau de la partie serveur, c'est-à-dire au niveau des +servants CORBA hébergés dans le processus ``SALOME_Container``, et de +donner accés à ces données depuis l'étude SALOME au travers de +pointeurs CORBA. Ce choix d'architecture présente l'avantage de +centraliser au niveau serveur la gestion du cycle de vie des données +informatiques et de pouvoir distribuer des "poignées" pour manipuler +ces données depuis chaque point de l'application qui sait accéder au +bus CORBA, l'interface graphique en particulier. + + +Hypothèse de travail +-------------------- + +Compte-tenu de l'objectif de maquettage et des éléments de contexte +existant, on cherche une solution dans le cadre des hypothèses +de travail suivantes: + +* La manipulation des champs se fait dans l'environement graphique de + SALOME. +* Dans cet environnement, on souhaite pouvoir sélectionner + graphiquement les champs à considérer, puis manipuler ces champs + dans l'interface texte au moyen de variables python avec une syntaxe + aussi simple que celle définie dans le wrapping python de MEDMEM, + c'est-à-dire que pour faire l'addition de 2 champs f1 et f2, on veut + pouvoir écrire f1+f2. +* Les données MED sont physiquement dans la partie serveur de SALOME + et accessibles via des pointeurs CORBA (interface spécifiée dans + MED.idl). On exclu la recopie de données au niveau du client + graphique. + +Dans le cadre de ces hypothèses, la difficulté technique réside dans +la mise au point d'une interface de communication entre des variables +manipulées par l'utilisateur dans l'interface graphique (c'est-à-dire +dans le processus ``SALOME_SessionServer``) et des objets MEDMEM +instanciés dans le containeur des servants CORBA (c'est-à-dire dans le +processus ``SALOME_Container``). + + +Eléments de conception +====================== + + +Implantation technique +---------------------- + +Le diagramme ci-dessous représente l'organisation des principaux +paquets logiciels du module MED: + +.. image:: images/medmem-layers.png + :align: center + +Les cadres bleus représentent le lieu d'implantation des +développements effectués dans le module MED pour les besoins du +maquettage. On notera en particulier les interventions aux niveaux +suivants: + +* interfaces idl: ajout de l'interface MEDOP.idl +* package MEDMEM_I: ajout du servant SALOME_MED::MEDOP qui implémente + l'interface MEDOP.idl + +Architecture technique +---------------------- + +Les schéma ci-dessous représente les objets informatiques qui sont à +l'oeuvre pour la réalisation des opérations sur les champs: + +.. image:: /images/xmed-architecture.png + :align: center + :alt: Objets mis en oeuvre dans l'interface de manipulation de champs + +On distingue les objets suivants: + +* Une instance de ``MEDMEM::MED``, correspondant à la structure de donnée + MED chargée en mémoire. +* Des instances de ``MEDMEM::FIELD`` qui représentent les champs med + chargés en mémoire. +* Une instances de ``SALOME_MED::MED`` et des instances de + ``SALOME_MED::FIELD`` qui sont les servants CORBA respectivement de la + structure med et des champs qui lui sont associés et chargés en + mémoire. +* Une instance de ``SALOME_MED::MEDOP`` qui est le servant CORBA qui + centralise la mise en oeuvre des opérations de champs sur le serveur + ``SALOME_Container``. Le servant MEDOP détient en attribut une référence + sur la structure ``MEDMEM::MED``, ce qui lui permet d'accéder + directement aux champs ``MEDMEM::FIELD`` à partir de leur nom et du pas + de temps. +* Des instances de ``FieldProxy`` qui correspondent aux variables + manipulées au niveau de l'interface graphique et qui représentent + les champs. Une instance de FieldProxy possède détient les + références des servants ``SALOME_MED::MEDOP`` et + ``SALOME_MED::FIELD`` sous la forme de pointeurs CORBA de noms + ``medop_ptr`` et ``field_ptr`` respectivement. +* Il existe également une instance de ``MedProxy`` non représentée + dans ce diagramme. Cette instance correspond à une variable qui + permet de manipuler la structure med. + +.. note:: Les éléments apportés par la maquette sont les classes + ``SALOME_MED::MEDOP``, ``MedProxy`` et ``FieldProxy``. Les autres + éléments ont pu être modifiés légèrement pour les besoins de + l'intégration ou pour la correction de quelques bugs. + +Le cycle de vie de ces objets est le suivant. + +Pour ce qui concerne les instances de la structure ``MEDMEM::MED`` et +des champs ``MEDMEM::FIELD``, la création est faite au moment du +chargement du fichier med dans SALOME au moyen du module MED. A cette +occasion, les servants CORBA associés ``SALOME_MED::MED`` et +``SALOME_MED::FIELD`` sont créés et des références vers ces servants +sont publiés dans l'étude. Ils peuvent donc être sélectionnés par +l'utilisateur dans l'interface graphique. L'ensemble de ces données +préexiste à la manipulation de champs. + +Les objets ``SALOME_MED::MEDOP`` sont instanciés au sein du servant +``SALOME_MED::MED`` auquel ils sont associées. Le servant +``SALOME_MED::MED`` possède une référence sur la structure +``MEDMEM::MED`` et il la transmet à l'instance du servant +``SALOME_MED::MEDOP`` qu'il construit. L'opérateur MEDOP est donc +autonome par la suite pour manipuler les données MED, et les champs en +particulier. Le code python ci-dessous montre comment un opérateur med +``SALOME_MED::MEDOP`` peut être créé puis utilisé pour réaliser +l'addition de deux champs: + +.. code-block:: python + + import salome + salome.salome_init() + import SALOME_MED + + medComp = salome.lcc.FindOrLoadComponent("FactoryServer", "MED") + medObj = medComp.readStructFile("myfile.med",salome.myStudyName) + medOp = medObj.createMedOperator() + + f1 = medObj.getField("testfield1",-1,-1) + f2 = medObj.getField("testfield2",-1,-1) + + somme = medOp.add(f1,f2) + +Il est à noter qu'une instance de ``SALOME_MED::MEDOP`` est associé à +une instance unique de ``SALOME_MED::MED`` (et donc indirectement de +``MEDMED::MED``) pour toute la durée de son cycle de vie. Par contre, +un servant ``SALOME_MED::MED`` peut être associé à plusieurs servants +``SALOME_MED::MEDOP`` différents. Un servant ``SALOME_MED::MEDOP`` a +une référence directe sur la structure ``MEDMEM::MED`` et peut la +manoeuvrer pour demander des champs, faire des opérations avec ces +champs, ajouter le champs résultat à la structure et enfin retourner +un servant ``SALOME_MED::FIELD`` qui encapsule le champ résultat. + +Enfin, quelques éléments concernant la classe ``FieldProxy``. Une +instance de ``FieldProxy`` est un objet python qui peut être +manoeuvrée dans l'interpréteur SALOME et qui référence un champ MED +localisé sur le serveur ``SALOME_Container`` (par le mécanisme décrit +ci-dessus). C'est à ce niveau qu'on règle les détails d'ergonomie +d'usage (cf. paragraphe ci-après). La création d'un objet +``FieldProxy`` déclenche la création d'un opérateur med (instance de +``SALOME_MED::MEDOP``) qui lui est associé et dont il conserve la +référence CORBA en attribut (noté ``medop_ptr`` sur le diagramme). Cet +opérateur ``medop_ptr`` peut être requêter pour exécuter toutes les +opérations possibles sur ce champ, comme illustrer sur l'exemple +ci-dessus. + + +Rôle des objets proxy +--------------------- + +Dans le modèle d'architecture présenté ci-dessus, on introduit deux +types d'objets proxy: + +* Les objets de classe ``FieldProxy`` qui représentent des poignées de + manipulation des champs ``MEDMEM::FIELD`` physiquement instanciés + dans le container SALOME. +* Les objets de classe ``MedProxy`` qui représentent des poignées de + manipulation des structures ``MEDMEM::MED`` physiquement instanciées + dans le container SALOME. + +Elles sont instanciées dans l'interpréteur python SALOME pour +manipulation dans l'interface textuelle à partir de la donnée du +pointeur vers le servant ``SALOME_MED::MED`` et de l'identifiant du +champ (le nom du champ et le pas de temps défini par le numéro d'ordre +et le numéro d'iteration: + +.. code-block:: python + + import salome + salome.salome_init() + import SALOME_MED + + medComp = salome.lcc.FindOrLoadComponent("FactoryServer", "MED") + medObj = medComp.readStructFile("myfile.med",salome.myStudyName) + + from xmed import fieldproxy + from xmed import medproxy + + f1 = fieldproxy.getFieldFromMed(medObj, "testfield1", -1, -1) + f2 = fieldproxy.getFieldFromMed(medObj, "testfield2", -1, -1) + + field_somme = f1 + f2 + field_offset = f1 + 5.3 + +Dans cet exemple, les variables ``f1``, ``f2``, ``field_somme`` et +``field_offset`` sont des objets de classe ``FieldProxy``. Ils +correspondent aux variables physiquement manipulées par +l'utilisateur pour désigner les champs dans les opérations. + +Ces classes proxy sont conçues pour être le lieu d'implémentation de +l'interprétation des commandes utilisateur et donc de l'ergonomie +de manipulation des champs au niveau l'interface textuelle. Ce point +est développé :ref:`plus bas `. + +Programmation de l'interface textuelle +-------------------------------------- + +Dans le cadre de la maquette, l'interface de manipulation des champs +est l'interface textuelle python intégrée à SALOME. Dans la pratique, +l'utilisateur manipule des variables python qui correspondent à des +objets de classe ``FieldProxy`` équipées des fonctions requises et de +l'ergonomie nécessaire à la mise en oeuvre des opérations (voir +ci-dessus). + +Or, l'hypothèse de travail est que les données MED sont chargées dans +SALOME et publiées dans l'étude pour point d'accés depuis l'interface +graphique. L'utilisateur choisi un champs directement dans l'arbre +d'étude (ou dans une interface graphique dédiée) puis demande qu'il +soit mis à disposition dans l'interface python sous un nom de variable +à choisir. Les captures d'écran ci-dessous montre la séquence +graphique en images: + +.. |IMG_SELECT| image:: images/medop-gui-selectfield_scale.png +.. |IMG_ALIAS| image:: images/medop-gui-aliasfield_scale.png + ++---------------+---------------+ +| |IMG_SELECT| | |IMG_ALIAS| | ++---------------+---------------+ + +L'image de gauche montre la sélection du pas de temps, l'image de +droite la boîte de dialogue qui permet la saisie de l'alias avec +lequel le champs sera manipulé dans l'interface textuelle. La +validation de cette fenêtre doit mettre automatiquement le champ à +disposition dans l'interface python SALOME et sous le nom de variable +spécifié par l'alias saisi. + +Pour cela, il y a un couplage technique à programmer entre l'interface +graphique et l'interface textuelle python, avec en particulier la +transmission des pointeurs vers les servants CORBA mis en jeu dans la +sélection. + +Ce couplage est implanté au niveau de la classe MEDGUI.cxx du module +MED (où de la classe XMEDGUI.cxx du module XMED pour la maquette) qui +implémente l'interface graphique du module. Pour rappel, l'interface +graphique d'un module SALOME se présente sous la forme d'une classe +centrale de nom ``GUI`` et qui spécialise la classe +``SalomeApp_Module``. Cette classe possède une méthode ``getApp()`` +par laquelle on peut récupérer une instance de la console python +embarquée (this->getApp()->pythonConsole()). + +Le code suivant illustre l'envoie d'une commande python par ce +mécanisme. Dans cet example, on cherche à reconstituer dans le +contexte de la console python un pointer vers un objet med instancié +dans le contexte C++ de l'application graphique. Pour cela, on +communique la référence de l'objet sous la forme sérialisé (IOR pour +un objet CORBA): + +.. code-block:: cpp + + #include + #include + #include + #include + + // We suppose here that we have a CORBA object reference (object of + // type *_ptr or *_var), for example a SALOME_MED::MED object. + SALOME_MED::MED_ptr medObj = ... // anything to get this object + + // Get the IOR of this object + QString medIOR = SalomeApp_Application::orb()->object_to_string(medObj); + + PyConsole_Console * pyConsole = getApp()->pythonConsole(); + + QStringList commands; + commands+="import salome"; + commands+=QString("med=salome.orb.string_to_object(\"%1\")").arg(medIOR); + + QStringListIterator it(commands); + while (it.hasNext()) { + pyConsole->exec(it.next()); + } + +Le code réel de la maquette est basé sur ce principe et transmet à la +console python des lignes de commandes qui permettent de reconstruire: + +* un pointeur CORBA vers le servant ``SALOME_MED::MED`` associé au + champ sélectionné; +* une instance de ``FieldProxy`` qui correspond au champ sélectionné + et avec pour nom de variable la valeur de l'alias saisi dans + l'interface graphique. + +Au niveau du code C++ de la classe ``XMEDGUI.cxx``, cela se traduit +par la fabrication de la liste de commandes suivante pour envoie à la +console python par le mécanisme illustré plus haut: + +.. code-block:: cpp + + QStringList commands; + commands+="from xmed.fieldproxy import getFieldFromMed"; + commands+="from xmed.medproxy import getMedProxy"; + commands+=QString("if not dir().__contains__('med'): med = getMedProxy(\"%1\")").arg(medIOR); + commands+=QString("%1=getFieldFromMed(med,\"%3\",%4,%5)").arg(*alias).arg(fieldName).arg(orderIndex).arg(iterationIndex); + +Les variables ``medIOR``, ``fieldName``, ``orderIndex`` et +``iterationIndex`` sont construites à partir du champ sélectionné par +des techniques de programmation standard dans SALOME qu'on peut +examiner en détail dans la classe ``XMEDGUI`` (voir méthode +``XMEDGUI::LoadIntoPythonConsole()``). La variable ``alias`` est la +chaîne saisie par l'utilisateur dans la fenêtre de dialogue. + +Le point important à noter ici est que les données à transmettre +doivent être fournies sous forme de chaînes de caractères ou de types +simples. C'est pourquoi la référence au servant CORBA +``SALOME_MED::MED`` est transmise ici sous la forme de son IOR, +c'est-à-dire une chaîne de caractères qui permet l'identification de +l'objet au niveau du bus CORBA. + +Au niveau de la console python cela correspond à l'exécution des +commandes suivantes: + +.. code-block:: python + + from xmed.fieldproxy import getFieldFromMed + from xmed.medproxy import getMedProxy + + med = getMedProxy("IOR:010000001700000049444c3a53414c4f4d455f4d45442f4d45443a312e300000010000000000000064000000010102000e0000003133302e39382e37372e313733009e0a0e000000feadc4ca4c00003169000000001100000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100") + + f1=getFieldFromMed(med,"testfield1",-1,-1) + +Ce jeu d'instructions reconstitue un pointeur vers le servant CORBA +``SALOME_MED::MED`` à partir de son identifiant IOR (voir la fonction +``getMedProxy(...)``, puis crée une instance de ``FieldProxy`` +associée à ce servant (en fait associée au servant +``SALOME_MED::MEDOP`` créé sur demande par le servant +``SALOME_MED::MED``, voir la fonction ``getFieldFromMed(...)``). + +.. _develguide_execFieldOperation: + +Exécution des opérations sur le champs +-------------------------------------- + +Les variables définies dans l'interface textuelle pour désigner les +champs à manipuler sont des objets de classe ``FieldProxy``. + +Cette classe a une propriété remarquable, elle est construite sur un +design pattern de type "Proxy" qui pointe vers un servant +``SALOME_MED::FIELD``. Cela signifie que l'on ne peut pas accéder +directement au servant vers lequel il pointe, mais que l'on passe +systématiquement par une procédure de l'objet proxy qui fait "boîte +aux lettres": + +.. code-block:: python + + class FieldProxy: + + def __getattr__( self, name ): + """ + This method realizes the proxy pattern toward the servant + SALOME_MED::FIELD. + """ + return getattr( self.__field_ptr, name ) + +Ce pattern permet l'implémentation de pré-traitement et/ou de +post-traitement suivant le type d'accés que l'on cherche à faire. + +Il permet aussi et surtout de fournir un objet python qui présente +l'interface de ``SALOME_MED::FIELD`` dotée d'extentions adhoc pour les +operations de champs. Ici, python est ton ami, car il s'agit pour cela +d'équiper la classe ``FieldProxy`` des automatismes prévus nativement +par python pour les operations entre objets. En particulier, la +re-définition des fonctions internes ``__add__`` (opérateur addition), +``__sub__`` (opérateur soustraction), ``__mul__`` (opérateur +multiplication) et ``__div__`` (opérateur division) au sein de la +classe ``FieldProxy``, permet de prendre la main sur le comportement +des opérations algébriques et de définir une ergonomie sur mesure. Par +exemple, la méthode ``__add__`` peut gérer les variantes "f1+f2" +(ajout de deux variables de type FieldProxy) et "f1+5.3" (ajout d'un +réel à une variable de type FieldProxy): + +.. code-block:: python + + class FieldProxy: + + def __add__(self, operande): + """ + This can process the addition of two fields or the addition of + a scalar to a field. It depends weither the operande is a + FieldProxy or a simple scalar numerical value. + """ + if isinstance(operande, FieldProxy): + # The operande is an other field + otherField_ptr = operande.__field_ptr + rfield_ptr = self.__medOp_ptr.add(self.__field_ptr, otherField_ptr) + else: + # The operande is a scalar numerical value that must be + # considered as an offset in a linear transformation + factor = 1 + offset = operande + rfield_ptr = self.__medOp_ptr.lin(self.__field_ptr, factor, offset) + return FieldProxy(self.__med_ptr, rfield_ptr) + +Il est à noter que dans les deux cas de figure (opérande=champ ou +opérande=scalaire), la fonction délègue la réalisation concrète de +l'opération au servant ``SALOME_MED::MEDOP`` (identifié ici par +l'attribut ``self.__medOp_ptr`` et que l'on appelera l'*opérateur +MEDOP* dans la suite pour simplifier), mais n'appelle pas le même +service de calcul (l'addition entre champs dans le premier cas, +l'application d'une transformation linéaire de type y=factor*x+offset +dans le deuxième cas). + +Pour couvrir le cas des opérations algébriques, l'opérateur MEDOP +présentre l'interface suivante (cf. fichier ``MEDOP.idl`` qui définie +l'interface du servant ``SALOME_MED_MEDOP``): + +.. code-block:: cpp + + /*! Addition of the fields f1 and f2 ( f1+f2) */ + FIELD add(in FIELD f1, in FIELD f2) raises (SALOME::SALOME_Exception); + /*! Substraction of the fields f1 and f2 (f1-f2) */ + FIELD sub(in FIELD f1, in FIELD f2) raises (SALOME::SALOME_Exception); + /*! Multiplication of the fields f1 by f2 (f1*f2) */ + FIELD mul(in FIELD f1, in FIELD f2) raises (SALOME::SALOME_Exception); + /*! Division of the fields f1 by f2 (f1/f2) */ + FIELD div(in FIELD f1, in FIELD f2) raises (SALOME::SALOME_Exception); + /*! Power of the field f (f^power) */ + FIELD pow(in FIELD f, in long power) raises (SALOME::SALOME_Exception); + /*! Linear transformation of the field f (factor*f+offset) */ + FIELD lin(in FIELD f, in double factor, in double offset) raises (SALOME::SALOME_Exception); + /*! Dublication of the field f */ + FIELD dup(in FIELD f) raises (SALOME::SALOME_Exception); + +Cette interface est implémentée dans la classe C++ ``MEDOP_i`` du +module MED (voir fichier ``MEDMEM_MedOp_i.hxx`` du package +``MEDMEM_I``). C'est au sein des instances de cette classe que sont +réalisées les opérations et que sont produites physiquement les +données. Typiquement, les opérations présentées ici produisent un +champ ``MEDMEM::FIELD`` sur la base duquel elle fabrique un servant +``SALOME_MED::FIELD`` pour finalement retourner un pointeur CORBA sur +ce servant. + +Ce mécanisme global peut être étendu sans limitation à tout les types +d'opération qui sont envisagés dans les spécifications de manipulation +des champs dans SALOME. + + +Contrôle visuel des champs +-------------------------- + +Les illustrations ci-dessous montrent qu'une fonction de visalisation +est implémentée dans la maquette pour permettre le contrôle visuel +d'un champ au moyen d'une représentation 3D (une carte spatiale du +module du champ dans l'exemple implémenté par défaut): + +.. |IMG_VISU| image:: images/medop-gui-visufield_scale.png +.. |IMG_RESULT| image:: images/medop-gui-result_scale.png + ++---------------+---------------+ +| |IMG_VISU| | |IMG_RESULT| | ++---------------+---------------+ + +Cette fonction répond au besoin de contrôle interactif des résultats +produits par les opérations de manipulation de champs. + +Il s'agit là d'un usage classique de SALOME, dans lequel on demande au +module VISU de faire une représentation 3D d'un champ spécifié par la +donnée du servant ``SALOME_MED::FIELD`` qui lui est associé +(représenté par la variable ``field_ptr`` dans l'exemple ci-dessous): + +.. code-block:: python + + import salome + import VISU + + visuComp = salome.lcc.FindOrLoadComponent("FactoryServer", "VISU") + visuComp.SetCurrentStudy(salome.myStudy) + + # Then we can import the specified field in the VISU module. This + # creates an study entry in the VISU folder. + result = visuComp.ImportMedField(field_ptr) + + meshName = field_ptr.getSupport().getMesh().getName() + fieldName = field_ptr.getName() + iterNumber = field_ptr.getIterationNumber() + scalarmap = visuComp.ScalarMapOnField(result, + meshName, + visuEntityType, + fieldName, + iterNumber) + +Dans ce jeu d'instructions donné pour exemple (non fonctionnel, en +particulier à cause de la non définition de la variable +``visuEntityType``, voir remarque plus bas), le composant VISU +désigné ici par la variable ``visuComp`` va chercher les données du +champ en interrogeant le servant ``SALOME_MED::FIELD`` transmis en +argument de la fonction ``ImportMedField``, puis produit une +représentation de type "scalarmap". + +.. note:: Compte-tenu des propriétés de la classe FieldProxy décrites + plus haut conférées par le pattern "Proxy", on peut transmettre ici + aussi bien le servant CORBA que l'instance du proxy (la fonction + ``ImportMedField`` n'y verra que du feu). + +Le code complet et fonctionnel de la fonction d'affichage est dans le +corps du module python ``fieldproxy.py`` sous la forme d'une fonction +de nom ``visuField``. Il convient de noter que cette fonction doit +établir une correspondance entre le type des entités tel que défini +dans MED et dans VISU: + +.. code-block:: python + + medEntityType = field_ptr.getSupport().getEntity() + if (medEntityType == SALOME_MED.MED_CELL): + visuEntityType = VISU.CELL + elif (medEntityType == SALOME_MED.MED_NODE): + visuEntityType = VISU.NODE + + +Export des résultats de calcul +------------------------------ + +Tous les champs produits à l'occasion des opérations entre objets +``FieldProxy`` sont automatiquement ajoutés à la structure med à +laquelle is sont associés. Une convention d'attribution des noms est +implémentée de sorte que par défaut aucune précision n'est demandée à +l'utilisateur. + +La structure med peut être manipulée au moyen de la variable ``med`` +créée dans l'interface textuelle comme une instance de la classe +``MedProxy``. La classe ``MedProxy`` fournit un objet qui présente +l'interface du servant ``SALOME_MED::MED`` étendue de quelques +fonctions utilitaires pour la gestion et le contrôle des données. + +En particulier, la sauvegarde de la structure dans un fichier est +automatisée par la méthode ``save(medfilename)``: + +.. code-block:: python + + med = medproxy.MedProxy(medObj) + med.save("/tmp/output.med") + +Cette méthode s'occupe de définir un driver d'écriture et de procéder +à l'enregistrement des données de la structure med (les maillages, les +champs présents au départ et tous les champs produits depuis la +lecture initiale). + +Limitations +=========== + +L'implémentation de la maquette limite l'usage des opérations aux cas +de figure suivants: + +* Seules les operations entre champs qui partagent le même support med + sont possibles. Ceci est une contrainte imposé par la conception + actuelle de MEDMEM. +* Le résultat d'une opérations est calculé sur toutes les composantes + et tout le domaine de définition des champs en opérande. Cette + deuxième contrainte est juste parce que les usages plus fin, + notemment avec la notion de domaine de définition, n'a pas encore + été exéminée à ce jour. +* Le nom d'un champ produit par une opération ne correspond pas au nom + de la variable python par laquelle on le réceptionne et on le + manipule. Le nom est attribué par une convention (ceci n'est pas + vraiment une limitation mais une caractéristique à connaître). + +On note également les restriction techniques suivantes: + +* Les données MEDMEM sont supposées être chargées par le composant MED + puis référencées dans l'étude SALOME (comme c'est fait aujourd'hui + par le module MED). +* Dans certain cas, python n'est pas ton ami. Pour que les opérateur + de la classe ``FieldProxy`` soient pris en considération dans les + opérations sur les champs, il est indispensable que le premier + opérande d'une opération unitaire soit un champ (objet de classe + ``FieldProxy``). Par exemple: "field_offset = field + 5.3" + fonctionne alors que "field_offset = 5.3 + field" ne fonctionne pas + car python tente de traiter la situation au moyen de la fonction + ``__add__`` de la classe ``float`` (qui n'est pas modifiable). + + +Notice informatique +=================== + +Gestion de configuration +------------------------ + +Les développements décrits dans ce chapitre sont répartis entre les +modules MED et XMED (développé pour l'occasion). Cette séparation est +faite par soucis de clarté et d'efficacité de développement, mais les +éléménts du module XMED ont vocation à intégrer le module MED dans la +mesure où les propositions techniques sont retenues pour le +développement à venir. + +Le code source du module XMED peut être récupérés par la commande +suivante:: + + $ svn co svn://nepal.der.edf.fr/FIELD/XMED_SRC/trunk XMED_SRC + +Le pré-requis est la plate-forme SALOME version 5.1.4 (ou plus) +équipée au minimum des modules KERNEL, GUI, MED (branche BR_medop) et +VISU. Pour récupérer la branche BR_medop du module MED, taper la +commande:: + + $ cvs -d :pserver:anonymous@cvs.opencascade.com:2401/home/server/cvs/MED co -r BR_medop MED_SRC + +La configuration de référence est: + +* XMED: révision svn 41 +* MED: tag cvs BR_medop_20101025 + +Moyens de tests +--------------- + +Plusieurs types de tests unitaires sont définis (reste à les +automatiser proprement): + +* Test des servants et utilitaires de manipulation python: + + - Dans XMED, package xmed/tests, utiliser le script + ``test_medoperation.py`` dans un interpréteur python lancé dans + une session shell SALOME. Ce script prépare des variables de test + et fournit des fonctions de test unitaire (à exécuter ou pour s'en + inspirer). Après avoir lancé SALOME via une application virtuelle, + on peut taper:: + + $ /runSession + [NS=venus:2810] $ python -i test_medoperation.py + >>> + + - Ceci permet de tester en particulier l'interface ``MedOp`` et son + utilisation dans le module python ``fieldproxy.py``. + +* Test des classes MEDMEM: + + - Test de MEDMEM::MedDataManager dans ``MEDMEM_MedDataManager_test.cxx`` + +Un fichier de test basique (mais néanmoins suffisant) de nom +``tesfield.med`` est fourni avec les sources dans le répertoire +``/resources/datafiles`` et dans l'installation au niveau du +répertoire ``/share/salome/resources/xmed/datadir``. Il +contient deux champs ``testfield1`` et ``testfield2`` définis sur un +pas de temps unique (dt,it=-1,-1). Ces champs définissent des valeurs +par éléments (MED_CELL). diff --git a/src/MEDOP/doc/sphinx/xmed-prototype-medmem.rst b/src/MEDOP/doc/sphinx/xmed-prototype-medmem.rst new file mode 100644 index 000000000..da331c05e --- /dev/null +++ b/src/MEDOP/doc/sphinx/xmed-prototype-medmem.rst @@ -0,0 +1,513 @@ +.. meta:: + :keywords: maillage, champ, MED, MEDMEM + :author: Guillaume Boulant + +.. include:: xmed-definitions.rst + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Note de travail concernant l'utilisation de MEDMEM +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Le module MED de SALOME comporte plusieurs composants d'intérêt pour +la manipulation de champs: + +* la bibliothèque MEDMEM qui fournit une interface de programmation + pour manoeuvrer une structure MED +* le module CORBA SALOME_MED qui matérialise le composant SALOME + (serveur corba) du module MED +* l'interopérabilité avec le module VISU qui permet la visualisation + des champs manipulés dans MED + +Les sections ci-après donnent quelques éclairages techniques sur ces +différents aspects. Les sources de démonstration peuvent être +récupérés depuis le dépôt svn:: + + $ svn export svn://nepal.der.edf.fr/OM/manifield/trunk manifield + $ svn export svn://nepal.der.edf.fr/FIELD/demofield/trunk demofield + +.. contents:: Sommaire + :local: + :backlinks: none + +Présentation synthétique de MED +=============================== + +MED désigne un modèle conceptuel pour décrire des données de type +éléments finis (éléments finis, volumes finis et éléments +discrets). Dans l'usage courant, il permet la description et l'échange +des données de calcul de type maillages et champs. La documentation +complète peut être trouvée à l'URL suivantes: + +* |LINK_EDF_MEDDOC|_ (version 2.3). + +On distingue deux implémentations informatiques de ce modèle: + +* MED fichier: qui permet la lecture et l'écriture de données depuis + un fichier au format med. Les opérations de lecture/écriture sont + atomiques (pas de chargement de la structure de données globale). +* MED mémoire (noté MEDMEM): qui permet le chargement en mémoire d'une + image de la structure de données MED contenue dans un fichier au + format med. Les opérations peuvent être atomiques ou + globales. + +On notera simplement ici que MEDMEM utilise MED fichier pour les +opérations de lecture/écriture et que MED fichier est indépendant de +MED mémoire. La documentation complète de MED fichier peut être +trouvée à l'URL suivante: + +* |LINK_EDF_MEDFICHIERDOC|_ + +La bibliothèque MEDMEM +====================== + +Le modèle de classes MEDMEM est structuré autour des notions de MESH +(les maillages), de SUPPORT (le profil des entités) et de FIELD (les +champs). Ces notions reprennent en partie des concepts du modèle +MED. Le diagramme ci-dessous présente les classes principales: + +.. image:: images/med-uml-main_60pc.png + :align: center + +Le conteneur de plus haut niveau dans MEDMEM est la classe MED. La +figure ci-dessous indique qu'une instance MED peut être associée à +plusieurs maillage et plusieurs champs. Par contre un champ donné ne +peut être associé qu'à un seul maillage (par l'intermédiaire du +support). Plusieurs champs peuvent être associés au même maillage. La +forme la plus courante est d'ailleurs une instance composé d'un +maillage unique sur lequel sont définis plusieurs champs. + +On peut avoir également des configurations plus complexes, comme par +exemple un maillage unique, plusieurs champs définis sur ce maillage +mais avec des supports différents, par exemple parce que les valeurs +sont définies sur des entités de maillage différentes (les éléments +pour un champ, les noeuds pour un autre, ...):: + + field1->support1->mesh + field2->support2->mesh + field3->support3->mesh + +On observe: + +* 2 champs U et V doivent avoir le même support (au sens informatique + du terme) pour pouvoir être en argument d'une opération (sinon + exception). Il faudrait accepter qu'il soit informatiquement + différent et vérifier la conformité conceptuelle. +* Cette contrainte peut se comprendre car physiquement les données + sont stockées dans un vecteur qui couvre toutes les mailles. Le + support est le seul masque de lecture pour établir la correspondance + avec les positions dans le maillage et il est donc important qu'une + cohérence soit assurée. + +Les objets champs (FIELD) et maillage (MESH) +-------------------------------------------- + +Un objet MED permet d'accéder aux différentes informations concernant +les objets MESH, SUPPORT et FIELD, mais il ne permet pas d'accéder aux +données physiques associées à ces objets (les valeurs des composantes +pour les champs, les mailles et leur connectivité pour les +maillages). L'accès aux données physiques est du ressort des objets +spécifiques MESH, SUPPORT et FIELD. + +Un objet MED peut être créé intégralement en mémoire. L'usage plus +fréquent est de l'initialiser à partir de la donnée d'un fichier +med. Pour cela, l'objet MED doit être associé à un driver +d'entrée/sortie branché sur le fichier (``testfilename`` dans +l'exemple): + +.. code-block:: cpp + + MED *myMed = new MED; + MED_MED_RDONLY_DRIVER *driverIn = new MED_MED_RDONLY_DRIVER(testfilename, myMed); + driverIn->open(); + driverIn->readFileStruct(); + driverIn->close(); + +A l'occasion de la fonction readFileStruct, la structure interne de +l'objet MED est enrichie des informations concernant les objets MESH, +SUPPORT et FIELD contenu dans le fichier. En particulier un +dictionnaire des champs (variable map interne) est initialisé est +contient l'ensemble des objets ``FIELD_`` préchargés (i.e. avec les +méta-données uniquement). Chaque objet ``FIELD_`` ainsi préchargé est +autonome pour être chargé sur demande. On peut alors requêter l'objet +MED pour obtenir un champ particulier (spécifié par son nom +``fieldname`` dans l'exemple): + +.. code-block:: cpp + + FIELD *field = (FIELD *)myMed->getField(fieldname, dt, it); + +Puis le champ qui lui est associé doit être physiquement chargé pour +permettre la mise à jour du support: + +.. code-block:: cpp + + MESH * mesh = myMed->getMesh(field); + mesh->read(); + myMed->updateSupport(); + +Pour enfin charger les valeurs des composantes du champ: + +.. code-block:: cpp + + field->read(); + +La numérotation des éléments de maillage +---------------------------------------- + +Les éléments qui composent un maillage sont caractérisés par: + +* Le type d'entité de l'élément, à choisir dans la liste + ``MED_EN::medEntityMesh``, qui contient en particulier ``MED_NODE``, + ``MED_FACE``, ``MED_CELL``. +* Le type de géométrie de l'élément, à choisir dans la liste + ``MED_EN::medGeometryElement``, qui contient en particulier + ``MED_NONE``, ``MED_TRIA3``, ..., ``MED_ALL_ELEMENTS``. + +Les éléments sont numérotés par un indice relatif à la catégorie +géométrique à laquelle ils appartiennent. Ainsi, si le modèle est +composé de Na arrêtes et Nf faces de type géométrique MED_QUAD4, alors +ces faces sont numérotées de 1 à Nf dans le modèle MED (et de manière +persistente dans le fichier med). De même, les arrêtes sont numérotées +de 1 à Na. Une numérotion globale implicite existe sur les éléments, +elle consiste à parcourir l'ensemble des types géométriques dans +l'ordre de définition du modèle de données. Ainsi, si le modèle +contient uniquement les Na arrêtes et les Nf faces, alors l'indice +global de la première face est Na+1. + +.. note:: Des exemples de code sont disponibles dans le package ``demofield``, fichier ``python/pybasicfields/MEDMEM_tester.py``. + + +Binding python de MEDMEM +------------------------ + +Les classes du package ``MEDMEM`` (package du module ``MED`` qui +implémentent les structures de données C++ de MED mémoire) produisent +la bibliothèque ``libmedmem.so``. Cette ensemble de classes est en +partie mis à disposition de l'interface python grace à une couche de +liaison (binding Python-C++) générée par le logiciel SWIG à partir +d'un fichier de description d'interface ``libMEDMEM_Swig.i`` (dans le +package source ``MEDMEM_SWIG``). + +Ce fichier d'interface doit être mis à jour dés lors qu'une évolution +des interfaces publiques des classes C++ MEDMEM est faite ou qu'une +nouvelle classe est créée (du moins si l'on souhaite profiter de ces +évolutions dans l'interface python). + +Cette mise à jour nécessite de prendre soin au transfert des +structures de données entre les espaces python et C++. En particulier, +l'utilisation des template de classe pour décrire les champs typés en +C++ appelle une précaution de codage particulière de l'interface +SWIG. + +Pour exemple, le fragment de code ci-dessous, extrait du fichier +``libMEDMEM_Swig.i``, montre comment déclarer la nouvelle classe +``MedDataManager`` dans l'interface: + +.. code-block:: cpp + + #include "MEDMEM_MedDataManager.hxx" + + class MedDataManager + { + public: + ~MedDataManager(); + void printFieldDouble(FIELD * field); + + %extend { + MedDataManager(char * fileName) + { + return new MedDataManager(string(fileName)); + } + MedDataManager(MED * med) + { + return new MedDataManager(med); + } + + %newobject getFieldDouble(const char * fieldName, const int dt, const int it); + FIELD * getFieldDouble(const char * fieldName, const int dt, const int it) + { + return (FIELD *) self->getFieldDouble(string(fieldName), dt, it); + } + } + + }; + + +Utilisation de MEDMEM pour la manipulation de champs +---------------------------------------------------- + +Des opérations de manipulation de champs sont disponibles dans la +bibliothèque MEDMEM standard est peuvent être utilisées dans +l'interface python. Les quelques lignes suivantes illustrent l'usage +qu'on peut en faire pour exécuter l'addition de deux champs sur tout +leur espace de définition et pour un pas de temps donné: + +.. code-block:: python + + from libMEDMEM_Swig import MedDataManager + from xmed.helper import readMed, writeMed + + # Load the medmem data structure from a med file + med = readMed("/tmp/input.med") + # Then create a med data manager to deal with the fields data + dm = MedDataManager(med) + # Get the timestamps (dt,it)=(-1,-1) of the fields "testfield1" and "testfield2" + f1 = dm.getFieldDouble("testfield1",-1,-1) + f2 = dm.getFieldDouble("testfield2",-1,-1) + + # Create a new field as the sum of f1 and f2 + r = f1 + f2 + # And add this new field to the med data structure + med.addField(r) + + # Finally, write the whole data in an output med file + writeMed(med,"/tmp/output.med") + +.. note:: Cet exemple de code requiert les évolutions de MEDMEM + opérées dans la branche BR_medop (pour disposer de la classe + MedDataManager en particulier) et le package python ``xmed`` qui + fournit quelques fonctions utilitaires pour manoeuvrer les données + med (ce package est dans le module XMED et sera probablement à + terme intégré au module MED). + +Des limitations existent aujourd'hui pour ce type de manipulations: + +* les champs doivent partager le même support MED, c'est-à-dire être + décrit sur le même maillage et sur les mêmes entités de ce + maillage. +* ... + + +Remarque sur l'implémentation C++ +--------------------------------- + +A noter l'usage de plusieurs formes d'arguments pour les fonctions: + +* passage des arguments par valeur ``myfunction(A a);`` +* passage des arguments par référence ``myfunction(A& a);`` +* passage des arguments par pointeur ``myfunction(A* a);`` + +Le passage des arguments par référence est une facilité d'écriture +pour éviter de passer un pointeur tout en évitant la récopie des +données de la variable. + +.. _xmed-medmem_corbainterface: + +L'interface CORBA SALOME_MED +============================ + +Implémentation du composant MED et des servants SALOME_MED::\* +-------------------------------------------------------------- + +Le composant MED est un servant CORBA qui permet la manipulation de +données MEDMEM dans l'environnement SALOME. Le composant peut fournir +des pointeurs vers des instances de l'interface SALOME_MED (objets +SALOMEMED::MED, SALOME_MED_FIELD, ...). Ces instances sont des +servants CORBA qui résident dans le container et qui encapsulent les +données MEDMEM. + +Le schéma ci-dessous représente les éléments informatiques qui +composent l'architecture CORBA du module MED: + +.. image:: images/medmem-corba-layers.png + :align: center + +Les structures MEDMEM (données physiques) et SALOME_MED (wrapping +CORBA) fonctionnent différement en ce qui concerne le chargement des +données: + +* Dans MEDMEM, les données sont chargées à la demande (fonctions read + des objets) et aucune gestion n'est assurée. En particulier l'appel + à read alors que la donnée est déjà chargée conduit à une levée + d'exception. C'est à l'utilisateur de MEDMEM de prendre en charge ce + type de gestion. +* Dans SALOME_MED, les données sont chargées à la création de + l'instance SALOME_MED::MED. Les maillages ainsi que les champs et + leurs données sont chargés à ce moment là et gérés dans une table de + type HashMap au niveau de la structure SALOME_MED::MED. Cette + structure remplie dés lors des fonction de gestion. L'appel à + SALOME_MED::MED.getField(...) ne charge pas les données mais renvoie + un pointeur SALOME_MED::FIELD_ptr sur les données chargées à + l'initialisation (ATTENTION, cette fonction est bugguée dans la + branche principale -> Fix dans la branche BR_medop). + +Une gestion intermédiaire peut être envisagée: le chargement à la +demande géré dans une ou plusieurs tables de champs (une pour chaque +type de valeur numérique). Une implémentation de ce type de gestion +est illustré dans la classe ``MedDataManager`` du package MEDMEM qui prend +en charge ce comportement pour les structures de données MED (en +particulier les champs). + +Utilisation du composant MED +---------------------------- +Le module SALOME MED fournit un module CORBA appelé SALOME_MED. Les +interfaces de ce module CORBA sont spécifiées par les fichiers idl +suivants: + +* le fichier + [http://nepal.der.edf.fr/pub/SALOME_userguide/MED5/doc/salome/tui/MED/MED_8idl.html + ``MED.idl``] qui décrit les interfaces des objets manipulés par le + module SALOME_MED. On trouve en particulier les objets MESH, SUPPORT + et FIELD. +* le fichier + [http://nepal.der.edf.fr/pub/SALOME_userguide/MED5/doc/salome/tui/MED/MED__Gen_8idl.html + ``MED_Gen.idl``] qui décrit les interfaces du composant SALOME + (c'est-à-dire le composant chargé par la commande + ``FindOrLoadComponent("FactoryServer", "MED")`` du + lyfeCycleCorba). On trouve: + + - l'interface ``MED_Gen_Driver`` qui hérite de SALOMEDS::Driver + pour l'implémentation des services généraux des composants SALOME + (persistance hdf, dump) + - l'interface ``MED_Gen`` qui hérite des interfaces + ``Engines::Component`` et ``MED_Gen_Driver`` pour + l'implémentation des services spécifiques du composant MED. + +L'implémentation de ces interfaces est faites au niveau de différents +packages des sources du module MED: + +* Le package ``MEDMEM_I`` qui fournit l'implémentation C++ des + interfaces décrites par le fichier ``MED.idl``; +* Le package ``MED`` qui fournit l'implémentation C++ des interfaces + décrites par le fichier ``MED_Gen.idl``, et qui correspond à la + partie composant classique d'un module SALOME. +* Le package ``MedCorba_Swig`` qui fournit une interface swig + générée à partir de l'implémentation C++ de ``MEDMEM_I`` et + ``MED`` + +L'utilisation peut être illustrée au moyen d'exemples python (i.e. qui +utilise l'interface swig fournie par MedCorba_Swig). Après l'import +d'amorce systématique: + +.. code-block:: python + + import salome + salome.salome_init() + + import SALOME_MED + from libSALOME_Swig import * + +On peut charger le composant SALOME MED: + +.. code-block:: python + + medComp=salome.lcc.FindOrLoadComponent("FactoryServer", "MED") + +grâce auquel les services de chargement de la structure MED peuvent +être invoqués. Par exemple, les commandes suivantes chargent toute la +structure MED dans l'étude salome passée en argument: + +.. code-block:: python + + filePathName = "myfile.med" + medComp.readStructFileWithFieldType(filePathName,salome.myStudyName) + +Ce deuxième exemple charge la structure MED mais ne place pas le résultat dans l'étude: + +.. code-block:: python + + filePathName = "myfile.med" + medObj = medComp.readStructFile(filePathName,salome.myStudyName) + +On récupère à la place un objet de classe |LINK_EDF_SALOME_MED__MED|_ +qui permet une utilisation assez semblable (mais différente on le +verra plus bas) à MEDMEM: + +.. code-block:: python + + fieldIdx = 1 # WRN maybe there is no field of idx=1 + iterationIdx = 0 + fieldName = medObj.getFieldNames()[fieldIdx] + dtitfield = medObj.getFieldIteration(fieldName,iterationIdx) + it = dtitfield[0] + dt = dtitfield[1] + fieldObj = medObj.getField(fieldName,it,dt) + nbOfFields = medObj.getNumberOfFields() + fieldNames = medObj.getFieldNames() + + mesh = fieldObj.getSupport().getMesh() + +.. note:: + Observations en vrac: + + * Un FIELD_i possède un champ de type ``MEDMEM::FIELD_`` qui représente + le champ informatique réel (objet MEDMEM). + * FIELD_i::fieldMap variable static de type map qui semble gérer + les différentes instances de FIELD_i (~pattern factory). Cette + map peut être requétée au moyen d'un indice de type long appelé + corbaIndex. + * Quand on crée un FIELD_i par le constructeur d'argument + ``MEDMEM::FIELD_``, le ``MEDMEM::FIELD_`` est ajouté dans la map avec + incrément du corbaIndex + * La fonction FIELD_i::read(i) redirige vers la fonction read(i) du + ``MEDMEM::FIELD_`` associé + * A CONFIRMER: Il semble que les fonctions de chargement + ``readStructFile*()`` charge toutes les données du fichier med, + alors qu'en MEDMEM seules les meta-données sont chargées. + * A CONFIRMER: il semble que le chargement d'une structure MED + CORBA peut se faire sans passer par le composant (cf. l'interface + de MED) + +Interface avec le module VISU +============================= + +Des interactions sont possibles entre MED et VISU à partir du moment +où les données med sont gérées dans l'étude, c'est-à-dire sous la +forme d'objets SALOME_MED (voir ci-dessus) publiés dans l'étude. Les +deux conditions sont aujourd'hui nécessaires (objet corba + publié +dans l'étude) mais il semble que ce ne soit lié qu'à un choix +d'interface VISU (la fonction ``ImportMed`` en particulier) qui peut +a priori être modifié. A CONFIRMER. + +L'exemple de code ci-dessous (en python, mais il peut être transposé à +une implémentation C++) montre par exemple comment envoyer au module +VISU une requête de visualisation d'un champs hébergé par le module +MED (en fait, les données sont gérées au travers d'un objet corba +SALOME_MED "délocalisé" et qui a été référencé dans l'étude dans la +catégorie du composant MED). Les importations standard (salome, +SALOME_MED, ...) sont supposées avoir été faites au préalable (voir +les exemples précédents): + +.. code-block:: python + + # Load the med structure using MED + medComp=salome.lcc.FindOrLoadComponent("FactoryServer", "MED") + filePathName = "myfile.med" + medComp.readStructFileWithFieldType(filePathName,salome.myStudyName) + + # Get the VISU component + import VISU + visuComp = salome.lcc.FindOrLoadComponent("FactoryServer", "VISU") + visuComp.SetCurrentStudy(salome.myStudy) + + # Get the sobject associated to the med object named "Med" + aSObject = salome.myStudy.FindObject("Med") + isPresent, medSObj = aSObject.FindSubObject(1) + + # Finally, import the med sobject in VISU + result = visuComp.ImportMed(medSObj) + +Il est possible de d'aller plus loin et par exemple de déclencher +l'affichage d'une scalarmap d'un champ spécifique pour une itération +particulière (voir la fonction +``TEST_SALOMEMED_requestToVisu_scalarmap`` du fichier +``SALOMEMED_tester.py`` fourni dans les sources d'exemple). + +Liens complémentaires: + +* http://nepal.der.edf.fr/pub/SALOME_userguide/VISU_V5_1_3/doc/salome/gui/VISU La documentation utilisateur en ligne du module VISU + + +Notes en vrac +============= + +Questions: + +* Comment obtenir le nom du fichier med à partir d'une structure med? +* Peut-on imaginer un moyen de fournir l'objet MEDMEM::MED à partir de + la donnée de l'objet CORBA SALOME_MED::MED? + +Remarques: + +* A part, les opérations arithmétiques (+,-,*,/), aucune opération + n'est définie. diff --git a/src/MEDOP/doc/sphinx/xmed-prototype-overview.rst b/src/MEDOP/doc/sphinx/xmed-prototype-overview.rst new file mode 100644 index 000000000..c571c6e6f --- /dev/null +++ b/src/MEDOP/doc/sphinx/xmed-prototype-overview.rst @@ -0,0 +1,95 @@ +.. meta:: + :keywords: maillage, champ, manipulation, XMED + :author: Guillaume Boulant + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Démonstrateur XMED, vue d'ensemble +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Le module XMED est un espace d'expérimentation pour le développement +des opérations de manipulation de champs. Il complète des +développements intégrés directement dans le module MED et gérés dans +la branche CVS BR_medop. + +Une maquette est au point pour illustrer les propositions en matière +d'ergonomie d'utilisation et en matière d'architecture technique. La +maquette permet de réaliser des cas d'utilisation de la forme: + +* Chargement d'un fichier med dans le module MED (ou publication par + un code de calcul). +* Sélection graphique des champs de l'étude à mettre à disposition + dans la console utilisateur ("calculette" en mode texte qui + concraitement correspond à l'interface python de SALOME). +* Dans la calculette, exécution d'opérations algébriques (+,-,*,/) + entre champs avec possibilité d'utiliser des scalaires dans des + opérations de type transformation linéaire (y=ax+b ou y et x sont + des champs et a et b des scalaires). Egalement quelques fonctions + mathématiques standard applicables sur des champs (pow, sqrt). +* Possibilité de visualiser les champs produits avec VISU +* Possibilité d'exporter des champs produits dans un fichier med + +La figure ci-dessous montre le résultat d'une séquence d'utilisation +dans laquelle les champs "testfield1" et "testfield2" ont été +sélectionnés dans l'arbre d'étude pour être utilisés dans la console +textuelle sous les noms de variables f1 et f2. L'image montre le +contrôle visuel du résultat de l'opération f1+f2-(f1-f2)^2 tapée en +ligne de commande: + +.. image:: images/medop-gui-result.png + :align: center + +La séquence ci-après montre le cas d'utilisation complet en +images: + +1. Sélection d'un champs sur un pas de temps dans l'arbre d'étude +2. Saisie d'un nom de variable (alias) pour manipuler ce champ. Par + défaut, le nom du champ est proposé (``testfield1`` ici). Dans + l'exemple, l'utilisateur remplace par l'alias ``f1``. +3. Contrôle visuel du champ ``testfield1`` manipulé par sa variable + ``f1`` au moyen de la commande ``f1.visu()`` +4. Chargement du champ ``testfield2`` sous le nom ``f2``, exécution de + l'opération ``f1+f2-(f1-f2)^2`` et contrôle visuel du résultat, + récupéré ici dans une variable de nom ``result``. + +.. |IMG_SELECT| image:: images/medop-gui-selectfield_scale.png +.. |IMG_ALIAS| image:: images/medop-gui-aliasfield_scale.png +.. |IMG_VISU| image:: images/medop-gui-visufield_scale.png +.. |IMG_RESULT| image:: images/medop-gui-result_scale.png + ++---------------+---------------+ +| |IMG_SELECT| | |IMG_ALIAS| | ++---------------+---------------+ +| |IMG_VISU| | |IMG_RESULT| | ++---------------+---------------+ + +La solution technique est construite sur les principes suivants: + +* Les données MEDMEM sont physiquement chargées par le composant MED, + c'est-à-dire dans le processus ``Container`` de SALOME, et sont + référencées dans l'étude SALOME. +* Les opérations sont physiquement des opérations entre objets MEDMEM + purs qui ont lieu dans le composant MED. +* Les opérations sont pilotées par des objets proxy python instanciés + dans la console TUI puis manipulés par l'utilisateur. Ces objets + proxy savent accéder aux objets MEDMEM au travers de leur interface + CORBA. + +Ainsi, l'architecture technique est construite pour pouvoir travailler +sur des données MEDMEM pur en partant de pointeurs CORBA manoeuvrés +depuis des objets python dans l'interface textuelle de +SALOME. L'effort principal a donc porté sur la mise au point de +l'interface technique qui permet de lier des variables représentant +les champs au niveau du GUI (techniquement, la calculette est +l'interpréteur python embarqué dans le GUI, étendu de quelques +fonctions pour la manipulation de champs), alors que les données +MEDMEM sont physiquement disponibles uniquement au niveau des +composants CORBA (et les opérations implémentées dans MEDMEM +uniquement). + +Pour le moment, la maquette est limitée à des operations entre champs +qui partagent le même support med (contrainte de MEDMEM) et le +résultat est calculé sur toutes les composantes et tout le domaine de +définition du champs (cette deuxième contrainte est juste parce que +les extentions n'ont pas encore été examinées). Enfin, le support de +gestion des données est supposé être l'étude SALOME et la structure +MED qui y est publiée. diff --git a/src/MEDOP/doc/sphinx/xmed-references.rst b/src/MEDOP/doc/sphinx/xmed-references.rst new file mode 100644 index 000000000..30d66ec7f --- /dev/null +++ b/src/MEDOP/doc/sphinx/xmed-references.rst @@ -0,0 +1,28 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +ANNEXE: Références documentaires +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +.. include:: xmed-definitions.rst + +Documents de référence: + +* |REF_EDF_VCA_H-I2C-2009-03595-FR|_ - Valérie Cano - décembre 2009 +* |REF_CEA_VBE_MEDMEM|_ - Vincent Bergeaud - janvier 2007 +* |LINK_EDF_MEDDOC|_ - documentation en ligne (EDF) + +Présentations: + +* |REF_EDF_PRESMANIPCHP01|_ - Valérie Cano, Guillaume Boulant - janvier 2010 +* |REF_EDF_PRESMANIPCHP02|_ - Guillaume Boulant - octobre 2010 +* |REF_EDF_PRESMANIPCHP03|_ - Guillaume Boulant - mars 2011 +* Présentation à la Journée des Utilisateurs de SALOME de 2011 (JUS2011): + + - |REF_EDF_JUS2011_PDF|_ - Anthony Geay (CEA), Guillaume Boulant - novembre 2011 + - |REF_EDF_JUS2011_OGV1|_ + - |REF_EDF_JUS2011_OGV3|_ + - |REF_EDF_JUS2011_OGV4|_ + +Notes de travail: + +* |REF_EDF_GBO_WORKNOTE|_ - Guillaume Boulant - novembre 2010 +* |REF_EDF_ELO_REM|_ - Eric Lorentz - novembre 2010 diff --git a/src/MEDOP/doc/sphinx/xmed-specifications.rst b/src/MEDOP/doc/sphinx/xmed-specifications.rst new file mode 100644 index 000000000..1f8cdabaf --- /dev/null +++ b/src/MEDOP/doc/sphinx/xmed-specifications.rst @@ -0,0 +1,918 @@ +.. meta:: + :keywords: maillage, champ, manipulation, med + :author: Guillaume Boulant + +.. include:: xmed-definitions.rst + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Module XMED: Spécifications fonctionnelles et techniques +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +(|XMED_SPECIFICATIONS_PDF|_) + +Ce texte présente les spécifications informatiques pour le +développement d'un module de manipulation de champs qui répond à +l'expression de besoins formulée dans le cahier des charges +|REF_EDF_VCA_H-I2C-2009-03595-FR|_. + +.. contents:: Sommaire + :local: + :backlinks: none + +Description des cas d'application de référence +============================================== + +Plusieurs cas d'applications métier sont identifiés pour piloter le +développement du module de manipulation de champs: + +* **Analyser et post-traiter le résultat d'un calcul**. C'est l'usage + principal qui consiste typiquement à créer des champs comme le + résultat d'*opérations mathématiques* dont les opérandes sont des + champs et des scalaires. On compte également dans cette catégorie + les *opérations de restriction* qui permettent d'extraire puis + utiliser une partie d'un champs, c'est-à-dire de créer un champ + comme la restriction d'un autre champ à une partie de son domaine de + définition (certaines composantes, certains pas de temps, limitation + à un groupe de mailles). +* **Comparer des champs issus d'un calcul paramétrique**. Il s'agit + d'une variante du cas précédent qui consiste à mesurer et visualiser + les variations entre des champs issues de sources de données + différentes (différents fichiers med). +* **Préparer les conditions aux limites d'une calcul**. Il s'agit de + pouvoir initialiser un champ sur un maillage ou un groupe de + mailles, c'est-à-dire créer un champ de toute pièce sur un + support spatial donné, par exemple par la donnée d'une fonction + mathématique qui donne les valeurs des composantes en fonction des + coordonnées spatiales. +* **Gérer des données de calcul**. Il s'agit typiquement de pouvoir + rassembler au sein d'un même fichier med des champs et des maillages + issues de différentes sources de données, et/ou créés au travers des + cas d'application présentés ci-dessus. + +Modèle conceptuel des données +============================= + +On rappelle ici les concepts utilisés dans le module et les modalités +d'utilisation de ces concepts. Le point de vue est celui de +l'utilisateur du module de manipulation de champs. Il s'agit +essentiellement pour le moment d'éclaircir l'ergonomie d'usage sur le +plan conceptuel, avant d'aborder la déclinaison en spécifications +techniques pour lesquelles les particularités du modèle MED devront +être intégrées à la réflexion. + +Concept de champ +---------------- + +Le concept central est celui de *champ*, c'est-à-dire une grandeur +physique exprimée sur un domaine spatial D. La grandeur peut être de +type scalaire (une température), de type vectorielle (une vitesse) ou +de type tensorielle (les contraintes). En un point de l'espace, elle +se définie donc par la donnée d'une ou plusieurs valeurs numériques +appelées les *composantes* (1 pour un champ scalaire, 3 pour un champ +vectoriel 3D, 6 pour un champ tensoriel symétrique 3D). + +.. note:: Une pratique courante au niveau des codes est de stocker + plusieurs grandeurs physiques différentes dans un même champs med + (au sens informatique du terme). Par exemple, le champ + électromagnétique à 6 composantes, plus le champ de température + scalaire peuvent techniquement être stockés dans un même champs med + à 7 composantes. C'est pourquoi, le module de manipulation de + champs doit fournir des fonctions de restrictions qui permettent + d'extraire certaines composantes pour former la grandeur physique à + étudier. Dans la suite du document, on part du principe que l'on + peut se ramener dans tous les cas au cas d'un champ homogène tel + que défini plus haut. + +Dans le cadre d'un modèle numérique discret, les valeurs du champ sont +exprimées pour un nombre fini de positions, qui correspondent à des +lieux particuliers du maillage. Suivant la nature des modèles de +calcul, les valeurs peuvent être données par cellule, par face, par +noeud, aux points de gauss, ... + +Ainsi, un champ discret est un objet dont les valeurs peuvent être +lues selon les dimensions suivantes: + +* *La position p dans l'espace*, caractérisée par le type de l'élément + de maillage support et son numéro identifiant +* *La composante c*, caractérisée par son indice (jusqu'à 6 + composantes dans les modèles physiques envisagés) + +L'évolution d'un champ dans le temps peut être exprimée sous la forme +d'une série temporelle, c'est-à-dire une séquence de champs donnés +pour des instants discrets. Aussi, si l'on manipule un champ qui varie +dans le temps, l'accès aux valeurs introduit une dimension +supplémentaire: + +* *Le temps t*, caractérisé par un numéro de pas de temps + (correspondant en général à une étape du calcul qui a produit le champ). + +.. note:: Il s'agit là d'une représentation conceptuelle standard dont + le |LINK_EDF_MEDDOC|_ fait une expression détaillée. En + particulier, la position p est déterminée par la donnée du type + d'élément support (valeurs aux noeuds, aux mailles, aux noeuds par + éléments, aux points de gauss) et de l'indice de cet élément. En + général, le type d'éléments support est résolu à l'initialisation + et l'indice peut suffire au repérage dans les algorithmes. Le temps + t est déterminé par un numéro d'itération, qui peut éventuellement + être complété par un numéro d'ordre. Le cas des points de gauss + ajoute un cran de complexité dans la mesure où il faut repérer + l'entité géométrique (maille, face, arrête) puis le point de gauss + de cette entité. A noter que dans le modèle MED, le concept de + série temporelle de champ n'est pas explicitement définie et + l'accès à des valeurs à différents instants t1 et t2 nécessite le + chargement des champs ``F1=F(t1)`` et ``F2=F(t2)``. + +Par convention, on utilisera par la suite les notations: + +* **U(t,p,c)** pour désigner la valeur de la composante c d'un champ U + à la position p et prise à l'instant t; +* **U(t,p,:)** pour signifier que l'on manipule l'ensemble de toutes + les composantes; +* **U(t,:,c)** pour signifier que l'on manipule le domaine de + définition spatial complet. + +Dans une grande majorité des cas d'usage on travaille à temps t fixé +et sur un domaine spatiale prédéfini. Aussi on utilisera également la +notation à deux arguments ``U(:,:)`` ou tout simplement ``U`` (dès +lors qu'il n'y a pas ambiguïté) pour désigner un champ complet et Uc +pour désigner la composante c du champ avec c=1..6. + +Concept d'opération +------------------- +Le deuxième concept à préciser est la notion d'*opération*. Une +opération dans le présent contexte est l'application d'un opérateur +sur un ou plusieurs champs pour produire une grandeur de type champ ou +de type valeur numérique. + +Par exemple, la formule ``W=OP(U,V)`` indique que le champ W est formé +à partir des champs U et V en arguments d'une fonction OP. Dans le cas +d'une opération algébrique comme l'addition (cf. :ref:`Spécification +des opérations`, le résultat attendu par défaut +est que pour chaque instant t, chaque position p et chaque composante +c, on a ``W(t,p,c)=U(t,p,c)+V(t,p,c)`` (que l'on peut noter également +``W(:,:,:)=U(:,:,:)+V(:,:,:)`` compte-tenu de la convention présentée +plus haut). Ce n'est cependant pas une règle et l'utilisateur peut +très bien manoeuvrer les champs en détaillant et mixant les +composantes (par exemple ``W(:,:,3)=5+U(:,:,1)*V(:,:,2)``), ou encore +ne travailler que sur un domaine spatial et/ou temporel particulier +(cf. |REF_EDF_VCA_H-I2C-2009-03595-FR|_ §5.4.1). + +On formalise donc le concept d'opération par les propriétés suivantes: + +* L'opérateur peut produire un champ (par exemple la somme de deux + champs W=sum(U,V)=U+V), une valeur numérique (par exemple la moyenne + spatiale d'un champ m=smoy(U)) ou une valeur logique (par exemple le + test d'égalité de deux champs b=isequal(U,V)); +* L'opérateur peut être paramétré par la donnée de valeurs numériques + (par exemple, le changement d'unité peut être défini comme une + multiplication par un scalaire V=multiply(U,1000)=1000*U); +* L'opérateur est caractérisé par un domaine d'application qui + spécifie la portée de l'opération. Ce domaine comporte plusieurs + dimensions: + + - Un domaine temporel T qui spécifie les pas de temps sur lesquels + l'opération est appliquée; + - Un domaine spatial D qui spécifie la limite de portée de + l'opérateur et donc le domaine de définition du champ produit (qui + correspond dans ce cas à une restriction du domaine de définition + des champs en argument); + - Un domaine de composantes C qui spécifie les composantes sur + lesquelles l'opération est appliquée; + +.. note:: + Sur le plan informatique, l'opérateur aura également un paramètre + appelé *option* qui pourra indiquer par exemple dans une + opération unaire V=F(U) si le résultat V est une nouvelle instance + de champ ou la valeur modifiée du champ de départ U. Il pourra + également être amené à manoeuvrer des paramètres de type chaîne de + caractères, par exemple pour les opérations de changement de nom + des champs. + +De manière générale, on utilisera la notation +**(W|y)=OP[D,C,T](P,U,V,...)** pour désigner une opération OP: + +* **(V|y)**: V ou y désignent respectivement un résultat de type + champ ou de type valeur numérique ou logique; +* **[T,D,C]**: le domaine d'application de l'opérateur avec T le + domaine temporel, D le domaine spatial et C le domaine des + composantes; +* **P,U,V,...**: les paramètres numériques P (liste de valeurs + numériques) et les champs U,V,... en arguments de l'opérateur; + +On note également les particularités suivantes pour certaines +opérations: + +* Le domaine de définition du champ produit par une opération peut + être différent du domaine de définition des champs en argument. Par + exemple, dans le cas d'une opération de projection de champ, le + domaine spatial résultat peut être modifié par rapport au domaine de + définition initial, soit par la modification de la zone géométrique, + soit par modification des entités de maillage support. +* En dehors des opérations de type dérivée et intégrale, les valeurs + résultats sont déterminées de manière locale en chaque point du + domaine d'application. Par exemple, l'addition W=U+V consiste à + produire un champ W dont les valeurs en chaque point p sont la somme + des valeurs des composantes de U et V en ce point p: ``W=U+V <=> + W(:,p,:)=U(:,p,:)+V(:,p,:)`` pour tout point p du domaine + d'application D. + +Concept de domaine d'application +-------------------------------- + +Un domaine d'application est associé à une opération (et non pas à un +champ). Il a pour objectif de restreindre la portée de l'opération en +terme spatial, temporel, jeu des composantes. + +Pour ce qui concerne le domaine spatial D, plusieurs modalités de +définition sont envisagées: + +* la donnée d'un maillage ou d'un groupe d'éléments du maillage; +* un système de filtres qui peut combiner: + + - une zone géométrique définie indépendamment du maillage (boîte + limite par exemple), + - des critères conditionnant le calcul (par exemple U(t,p,c)=1 si + V(t,p,c)>> r=fa+fb + +* Effectuer les contrôles visuel et les diagnostics en ligne de + commandes python (cf. :ref:`Spécification des fonctions de + visualisation`):: + + >>> view(r) + +* Enregistrer les champs produits dans l'espace de travail sous forme + de fichier med. + +Sur cette base, on peut envisager une grande variété de cas d'utilisation: + +* La structure MED (champs, maillage et groupes de mailles) est + chargée dans le dataspace (l'étude SALOME techniquement) et peut + être explorée au niveau de l'arbre d'étude. L'arbre peut faire + apparaître: + + - les maillages et les groupes (qui peuvent être utilisés + éventuellement pour restreindre le domaine d'application) + - les champs dont on peut explorer les composantes et les itérations + +* On sélectionne plusieurs champs, éventuellement en sélectionnant les + pas de temps, les composantes et les domaines d'application spatiaux +* Menu contextuel --> Modifier un champ, Créer un champ, Prolonger un + champ, .... +* On choisi pour la suite "Créer un champ", une fenêtre de dialogue + s'affiche avec les saisies préremplies avec les données + sélectionnées. Il est possible de rajouter des éléments ou préciser + le domaine d'application +* Une partie de la boîte de dialogue est réservée à la saisie de la + ligne de commande python qui permet la création du nouveau champ. Le + nom dans l'étude pour le nouveau champ, ainsi que son nom python, + sont spécifié par l'utilisateur ({{H|un peu à la mode du module + system}}). +* L'opération est exécutée dans l'espace utilisateur (l'interface + python), de sorte que les variables soient projetées dans cet espace + et manipulables après l'opération au besoin. Par ailleurs, + l'utilisateur peut visualiser les ligne de commandes nécessaires à + taper pour exécuter sa requête. + +.. _specification_visualisation: + +Spécification des fonctions de visualisation +============================================ + +Dans le cadre du module MED, on appelle *fonction de visualisation* +une fonction qui permet d'avoir un aperçu graphique d'un champ, par +exemple au moyen d'une carte de champ construite sur une de ses +composante. Il s'agit là de vue de contrôle pour avoir une idée rapide +de la forme du champs. Pour créer des représentations spécifiques, on +préférera passer par les fonctions d'export vers le module PARAVIS. + +Les modules VISU et PARAVIS offre des interface de programmation C++ +et python qui permettent le pilotage depuis un module tiers comme le +module MED. On peut donc envisager une fonction de visualisation +intégrée au module de manipulation de champs, c'est-à-dire que l'on +déclenche sans sortir du module MED, et qui exploite les fonctions de +visualisation des modules VISU et/ou PARAVIS. + +Les captures d'écran ci-dessous illustrent la mise en oeuvre de la +fonction de visualisation: + +* Sélection d'un champ pour faire apparaitre le menu contextuel et + choisir l'option "Visualize": + +.. image:: images/xmed-gui-datasource-visualize_70pc.png + :align: center + +* Cette option déclenche l'affichage d'une carte de champ sur le cadre + d'affichage des viewers SALOME: + +.. image:: images/xmed-gui-datasource-visualize-result_70pc.png + :align: center + +Cette fonction est également disponible en ligne de commandes de +l'interface textuelle. Par exemple si ``f4`` désigne un champ de +l'espace de travail (importé des données source ou construit par les +opérations de champs), alors, on obtient une carte de champ par la +commande:: + + >>> view(f4) + +On peut remarquer d'ailleurs sur la capture d'écran de droite +ci-dessus que la demande de visualisation déclenche l'exécution de la +commande ``view`` dans la console de travail sur un champ identifié +par son numéro (3 dans l'exemple). + +.. note:: Tous les champs, qu'ils soient des champs chargés d'une + source de données ou construits par des opérations de champs sont + identifiés par un numéro unique et invariant tout au long de la + session de travail. + +Spécification des fonctions de persistance +========================================== + +On adopte le principe de fonctionnement suivant: + +* Le module n’assure pas la persistence au sens SALOME du terme, + c’est-à-dire qu’il ne permet pas la sauvegarde du travail dans une + étude au format hdf, ni le dump sous la forme de script python + SALOME. Le besoin n'est pas avéré et on peut même dire que ça n'a + pas de sens compte-tenu de l'usage envisagé pour le module MED. +* Par contre, le module fournit des fonctions de sauvegarde du travail + sous forme de fichiers med, l’export vers les modules VISU et + PARAVIZ, ou même la sauvegarde de l’historique de l’interface de + commandes. + +Ainsi donc, l'utilisateur aura une fonction (probablement graphique) +pour définir la sélection des champs de l'espace de travail à +sauvegarder. + +Spécification des fonctions d'export +==================================== + +.. warning:: EN TRAVAUX. + +Plusieurs export peuvent être proposés: + +* Export des champs vers le module PARAVIZ, dans l'objectif par + exemple d'en faire une analyse visuelle plus poussée qu'avec les + cartes de champs disponibles par défaut dans le module MED +* Export des données sous forme de tableau numpy, par exemple pour + permettre un travail algorithmique sur les valeurs des champs. + +Spécifications techniques +========================= + +Il s'agit d'exprimer ici les contraintes techniques applicables à la +conception et au développement du nouveau module MED. + +Implantation technique du module +-------------------------------- + +Il est convenu que le module MED existant dans la plate-forme SALOME +incarne le module de manipulation de champ. Dans la pratique, il +s'agit d'identifier clairement les parties à conserver, d'une part, +puis les parties à re-écrire, d'autre part. On peut partir sur les +hypothèses techniques suivantes: + +* Le noyau du module en charge des opérations de manipulation de + champs proprement dites est construit sur la base des paquets + logiciels MEDCoupling (lui-même basé sur le INTERP_KERNEL) et + MEDLoader. +* L'interface graphique du module MED est complétement re-écrite et + remplacée par une interface adaptée spécialement à la manipulation + des champs et la gestion des données associées +* Le contrôle visuel pourra être déclenché dans les visualisateurs + SALOME (servis par les modules VISU et/ou PARAVIZ); +* Le module n'assure pas la persistence au sens SALOME du terme, + c'est-à-dire qu'il ne permet pas la sauvegarde du travail dans une + étude au format hdf, ni le dump sous la forme de script python + SALOME. +* Par contre, il fournit des fonctions de sauvegarde du travail sous + forme de fichiers med, l'export vers les modules VISU et PARAVIZ, ou + même la sauvegarde de l'historique de l'interface de commandes. + +L'implantation technique des développements est représentée sur la +figure ci-dessous: + +.. image:: images/xmed-implantation.png + :align: center + +Le schéma représente les packages logiciels qui composent le module +MED (cf. |REF_CEA_VBE_MEDMEM|_): + +* La partie MEDMEM, représentées en blanc. Cette partie est conservée + pour compatibilité ascendante au niveau des applications métier qui + ont fait le choix historique de s'appuyer sur MEDMEM. Cette partie + du module MED aura tendance à disparaitre dans le futur au bénéfice + de MEDCoupling et MEDLoader. +* La partie MEDCoupling, représentée en orange et qui founrnit le + modèle MED mémoire de référence (composé de maillage et de champs) + et l'interface de programmation pour manipuler le modèle. Le paquet + MEDLoader est une extention dédiée à la persistence au format med + fichier (lecture et écriture de champs et de maillage dans des + fichiers med). +* La partie à développer pour la manipulation de champ, représentée en + bleu. + +.. note:: MEDCoupling peut être vu comme une structure de donnée + particulièrement adaptée à la manipulation des gros volumes de + données, en particulier par l'exploitation des possibilités de + parallélisation et la réduction de la tailles des structures de + données. En contrepartie, elle peut présenter un périmètre + fonctionnel moins large que MEDMEM. Pour cette raison, MEDMEM avait + été choisi comme socle de développement du prototype en 2010: + + * MEDCoupling ne permet pas de gérer des maillages composés de + plusieurs type de mailles et il est exclus de le faire évoluer + dans ce sens (c'est un choix fait pour les objectifs de + performances évoqués plus haut); + * MEDCoupling ne permet pas de gérer les supports qui expriment les + champs aux noeuds par élément ni aux points de gauss. Cette + seconde limitation a disparu en 2011. + + Aujourd'hui, on fait clairement le choix de MEDCoupling pour sa + qualité et sa robustesse, dans l'objectif d'une meilleure + maintenance à long terme. Par ailleurs, les différences + fonctionnelles avec MEDMEM, si elles existaient encore en 2012 pour + les besoins de la manipulation de champs, pourront être résorbées + dans un futur proche. + + diff --git a/src/MEDOP/doc/sphinx/xmed-userguide.rst b/src/MEDOP/doc/sphinx/xmed-userguide.rst new file mode 100644 index 000000000..f35266013 --- /dev/null +++ b/src/MEDOP/doc/sphinx/xmed-userguide.rst @@ -0,0 +1,749 @@ +.. meta:: + :keywords: maillage, champ, manipulation, guide utilisateur + :author: Guillaume Boulant + +.. include:: xmed-definitions.rst + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Module XMED: Guide d'utilisation +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +(|XMED_USERGUIDE_PDF|_) + +Ce document est un guide rapide pour l'utilisation du module MED. Il +montre comment utiliser le module sur la base de quelques exemples de +référence, inspirés des cas d'utilisation identifiés lors de l'analyse +des besoins en matière de manipulation de champs. + +.. warning:: Le document est autonome, mais il est vivement conseillé + de parcourir au préalable (ou en parallèle) :doc:`le document de + spécifications`, au moins pour fixer les + concepts et la terminologie. + +.. contents:: Sommaire + :local: + :backlinks: none + +Présentation générale du module XMED +==================================== + +L'ergonomie générale d'utilisation du module de manipulation de champs +est inspirée des logiciels comme octave ou scilab. Elle associe une +interface graphique, pour sélectionner et préparer les données, avec +une interface texte (la console python) pour le travail effectif sur +les données. + +Pour cela, le module propose deux espaces utilisateurs qui sont +symbolisés par les rectangles rouges et vert sur la capture d'écran +ci-dessous: + +* **l'espace des données** (*dataspace*), dans lequel l'utilisateur + définit les sources de données med (*datasource*), c'est-à-dire les + fichiers med dans lesquels sont lus les champs et maillages. Cet + espace permet l'exploration des maillages et des champs fournis par + les différentes sources de données. +* **l'espace de travail** (*workspace*), dans lequel l'utilisateur + peut déposer des champs sélectionnées dans l'espace source, pour + ensuite les travailler par exemple pour produire des nouveaux champs + au moyen des fonctions de manipulation fournies par l'interface + textuelle (console python TUI). + +.. image:: images/xmed-gui-withframe.png + :align: center + +L'utilisation type des fonctions de manipulation de champs suit un +processus de la forme suivante: + +1. Chargement d'un fichier med dans l'espace de données (dataspace) et + exploration du contenu, composé de maillages et de champs définis + sur ces maillages et pouvant contenir un ou plusieurs pas de temps. +2. Sélection (graphique) des champs à manipuler dans l'espace de + travail (workspace), avec la possibilité de préciser des + restrictions d'utilisation (pas de temps, composantes, groupe de + maille). +3. Création de nouveaux champs par l'exécution d'opérations + algébriques (+,-,*,/) entre champs, l'application de fonctions + mathématiques standard (pow, sqrt, abs), ou encore l'initialisation + "from scratch" sur un maillage support. +4. Contrôle visuel rapide des champs produits (avec les modules VISU + et/ou PARAVIS de SALOME, pilotés automatiquement depuis l'interface + utilisateur) +5. Enregistrement d'une partie des champs produits dans un fichier med + + +Tour rapide des fonctions du module XMED +======================================== + +Cette section présente des exemples d'utilisation du module XMED sous +la forme de "storyboard", et illustre au passage les fonctions mises à +disposition par le module. + +.. warning:: Cette section est en travaux. Tant que cet avis n'aura + pas disparu, veuillez en considérer le plan et le contenu encore + incomplets, temporaires et sujets à caution. + +Exemple 1: Explorer des sources de données +------------------------------------------ + +.. note:: Cet exemple présente les fonctions: + + * ajouter une source de données + * fonctions "Extends field series", "Visualize" + +.. |ICO_DATASOURCE_ADD| image:: images/ico_datasource_add.png + :height: 16px + +.. |ICO_XMED| image:: images/ico_xmed.png + :height: 16px + +.. |ICO_DATASOURCE_EXPAND| image:: images/ico_datasource_expandfield.png + :height: 16px + +.. |ICO_DATASOURCE_VIEW| image:: images/ico_datasource_view.png + :height: 16px + +Au démarrage, le module de manipulation de champs, identifié par +l'icône |ICO_XMED|, présente une interface vierge: + +.. image:: images/xmed-gui-start.png + :align: center + :width: 800px + +La première étape consiste à ajouter une ou plusieurs source de +données med dans le "dataspace". Pour cela, on clique sur l'icône "Add +datasource" |ICO_DATASOURCE_ADD| qui propose de sélectionner un +fichier med: + +.. image:: images/xmed-gui-datasource-selectfile.png + :align: center + :width: 800px + +L'opération ajoute une nouvelle entrée (datasource) dans l'espace de +données (dataspace). Le contenu peut être exploré en parcourant +l'arborescence. La figure ci-dessous (image de gauche) montre le +résultat du chargement du fichier ``timeseries.med`` contenant un +maillage de nom ``Grid_80x80`` sur lequel est défini un champ au noeud +de nom ``Pulse``. Par défaut, la composition du champs (en terme de +pas de temps et de composantes) n'est pas affichée pour éviter +l'encombrement visuel de l'arbre. On doit faire la demande explicite +au moyen de la commande "Expand field timeseries" +|ICO_DATASOURCE_EXPAND| disponible dans le menu contextuel associé aux +champs. Le résultat est affiché sur l'image centrale. La liste des +itérations du champ ``Pulse`` peut être consultée. + +.. |IMG_DATASOURCE_EXPLORE| image:: images/xmed-gui-datasource-explore-zoom.png + :height: 340px +.. |IMG_DATASOURCE_MENUCON| image:: images/xmed-gui-datasource-menucontextuel-zoom.png + :height: 340px +.. |IMG_DATASOURCE_EXPANDF| image:: images/xmed-gui-datasource-expand-zoom.png + :height: 340px + ++--------------------------+--------------------------+--------------------------+ +| |IMG_DATASOURCE_EXPLORE| | |IMG_DATASOURCE_MENUCON| | |IMG_DATASOURCE_EXPANDF| | ++--------------------------+--------------------------+--------------------------+ + +.. note:: En toute rigueur, le concept de *champ* dans le modèle MED + désigne une itération donnée. Un ensemble d'itérations est désigné + par le terme *série temporelle de champs*. Par abus de langage, et + s'il n'y a pas ambiguité, on utilisera le nom du champ pour + désigner à la fois le champs proprement dit ou la série temporelle + à laquelle il appartient. + +Enfin, il est possible au niveau du dataspace de visualiser la forme +générale du champ au moyen d'une carte scalaire affichée dans le +viewer de SALOME. Pour cela, on sélectionne le pas de temps à +visualiser et on utilise la commande "Visualize" |ICO_DATASOURCE_VIEW| +disponible dans le menu contextuel associé: + +.. image:: images/xmed-gui-datasource-visualize-zoom.png + :align: center + :width: 800px + +.. note:: Cette représentation graphique a pour objectif le contrôle + visuel rapide. Aussi, les fonctions du module VISU sont employées + par défaut, mais il est possible de faire l'affichage des cartes + scalaires au moyen du module PARAVIS (choix de préférence non + implémenté pour le moment, mais techniquement réalisable). + +Exemple 2: Rassembler des champs issus de différentes sources +------------------------------------------------------------- + +.. note:: Cet exemple présente les fonctions: + + * fonction "Use in workspace" + * fonction "Save" + +.. |ICO_DATASOURCE_USE| image:: images/ico_datasource_use.png + :height: 16px +.. |ICO_WORKSPACE_SAVE| image:: images/ico_workspace_save.png + :height: 16px + +L'objectif est de récupérer des données issues de différents fichiers +med, puis de les rassembler dans un même fichier en sortie. + +On commence par ajouter les sources de données med dans l'espace de +données (dataspace). Dans l'exemple ci-dessous, l'espace de données +contient deux sources de nom ``parametric_01.med`` et +``smallmesh_varfiled.med``. La première source contient le maillage +``Grid_80x80_01`` sur lequel est défini le champ ``StiffExp_01``. La +deuxième source contient le maillage ``My2DMesh`` sur lequel sont +définis deux champs de noms respectifs ``testfield1`` et +``testfield2``: + +.. image:: images/xmed-userguide-example2-datasource.png + :align: center + :width: 800px + +Pour l'exemple, on souhaite rassembler les champs ``StiffExp_01`` et +``testfield2`` dans un fichier de nom ``result.med``. La procédure +consiste à importer les deux champs dans l'espace de travail +(workspace), puis à sauvegarder l'espace de travail. Pour cela, on +sélectionne les champs et on utilise la commande "Use in workspace" +|ICO_DATASOURCE_USE| disponible dans le menu contextuel. Les deux +champs sélectionnés apparaissent dans l'arborescence de l'espace de +travail: + +.. image:: images/xmed-userguide-example2-workspace.png + :align: center + :width: 800px + +La sauvegarde de l'espace de travail est faite au moyen de la commande +"Save workspace" |ICO_WORKSPACE_SAVE| disponible dans la barre +d'outils du module. Une fenêtre de dialogue invite l'utilisateur à +spécifier le nom du fichier de sauvegarde: + +.. image:: images/xmed-userguide-example2-workspace-save.png + :align: center + :width: 800px + +Ce fichier ``result.med`` peut ensuite être rechargé dans le module +XMED (ou les modules VISU ou PARAVIS) pour vérifier la présence des +champs sauvegardés. + +.. BUG: plantage à l'utilsation dans XMED d'un fichier rechargé +.. (invalid mesh on field) + +.. _xmed.userguide.exemple3: + +Exemple 3: Appliquer une opération mathématique sur des champs +-------------------------------------------------------------- + +.. note:: Cet exemple présente les fonctions: + + * exécution d'opérations mathématiques dans la console TUI + * fonction "put" pour référencer un champ de travail dans la liste + des champs persistant. + * fonction "Visualize" depuis le TUI. + +L'usage le plus courant du module de manipulation de champs est +d'exécuter des opérations mathématiques dont les opérandes sont des +champs ou des composantes de ces champs. + +On se place dans une situation où les sources de données sont définies +dans le "dataspace" (dans l'exemple ci-après, une série temporelle de +nom ``Pulse``, contenant 10 pas de temps, définis sur un maillage de +nom ``Grid_80x80``, le tout issu du datasource ``timeseries.med``). + +Comme vu précedemment, pour manoeuvrer un champ dans l'espace de +travail, on sélectionne ce champ, puis on exécute la commande "Use in +workspace" |ICO_DATASOURCE_USE| du menu contextuel. Dans le cas +présent, un seul champ est sélectionné (contre deux dans l'exemple +précédent) et la commande ouvre alors une fenêtre de dialogue qui +permet de préciser les données sur lesquelles on souhaite +effectivement travailler et comment on veut les manoeuvrer: + +.. image:: images/xmed-gui-datasource-useinworkspace-alias.png + :align: center + :width: 800px + +.. note:: En l'état actuel du développement, l'interface propose + uniquement de définir le nom de la variable sous laquelle doit être + manoeuvré le champ dans la console de travail (TUI). Dans une + version ultérieure, il est prévue de pouvoir préciser la ou les + composante du champs à utiliser et un groupe de maille pour définir + une restriction géométrique. Inversement, il sera également + possible de choisir une série temporelle complète pour faire des + opérations globales sur l'ensemble des pas de temps. + +Aprés validation, le champ est placé dans l'arborescence du +"workspace" et une variable de nom ```` est créée +automatiquement dans la console de travail pour désigner le +champ. Dans cet exemple, ```` vaut ``f3``, positionné ainsi par +l'utilisateur pour rappeler que la variable correspond au pas de temps +n°3: + +.. image:: images/xmed-gui-workspace.png + :align: center + :width: 800px + +La manipulation peut commencer. Dans l'exemple ci-dessous, on crée le +champ ``r`` comme le résultat d'une transformation afine du champ +``f3`` (multiplication du champ par le facteur 2.7 auquel on ajoute +l'offset 5.2):: + + >>> r=2.7*f3+5.2 + +On peut poursuivre la manipulation du champs avec une variété +d'opérations qui sont détaillées dans les spécifications du module +(cf. :ref:`Spécification des opérations`): + + >>> r=f3/1000 # les valeurs de r sont celles du champ f3 réduites d'un facteur 1000 + >>> r=1/f3 # les valeurs de r sont les inverses des valeurs de f3 + >>> r=f3*f3 # les valeurs de r sont celles du champ f3 élevées au carré + >>> r=pow(f3,2) # même résultat + >>> r=abs(f3) # valeur absolue du champ f3 + >>> ... + +Les opérations peuvent utiliser plusieurs opérandes de type champs. Si +``f4`` désigne le pas de temps n°4 du champ ``Pulse``, alors on peut +calculer toute combinaison algébrique des deux champs:: + + >>> r=f3+f4 + >>> r=f3-f4 + >>> r=f3/f4 + >>> r=f3*f4 + +Avec au besoin l'utilisation de variables scalaires:: + + >>> r=4*f3-f4/1000 + >>> ... + +Dans ces exemples, la variable ``r`` désigne un champ de travail qui +contient le résultat de l'opération. Par défaut, ce champ de travail +n'est pas référencé dans l'arborescence du workspace. Si on souhaite +tout de même le référencer, par exemple pour qu'il soit pris en compte +dans la sauvegarde, alors on tape la commande:: + + >>> put(r) + +La fonction ``put`` a pour but de marquer le champ en argument comme +persistent, puis de le ranger dans l'arborescence du "workspace" afin +qu'il soit visible et sélectionnable. En effet, parmi tous les champs +qui pourront être créés dans la console pendant la session de travail, +tous n'ont pas besoin d'être sauvegardés. Certains sont même des +variables temporaires qui servent à la construction des champs +résultats finaux. C'est pourquoi, seuls les champs rangés dans +l'arborescence du workspace sont enregistrés lors de la demande de +sauvegarde du workspace. + +Les variables définies dans la console ont d'autres utilités. Tout +d'abord, elles permettent d'imprimer les informations concernant le +champ manoeuvré. Pour cela, on tape simplement le nom de la variable +puis retour:: + + >>> f3 + field name (id) = Pulse (3) + mesh name (id) = Grid_80x80 (0) + discretization = ON_NODES + (iter, order) = (3,-1) + data source = file:///home/gboulant/development/projets/salome/MEDOP/XMED/xmed/resources/datafiles/timeseries.med + +Elle peut également être utilisée comme argument des commandes de +gestion disponibles dans l'interface textuelle (dont la liste +détaillée est décrite à la section :ref:`Documentation de l'interface +textuelle`). Par exemple, la fonction ``view`` +permet d'afficher la carte scalaire du champ dans le viewer:: + + >>> view(f3) + +Donne: + +.. image:: images/xmed-gui-workspace-view.png + :align: center + :width: 800px + +.. note:: On remarquera ici qu'il est facile de comparer deux pas de + temps d'un champ, par exemple en calculant la différence ``f3-f4``, + puis en affichant un aperçu de la carte scalaire résultat au moyen + de la fonction ``view``:: + + >>> view(f3-f4) + +On peut enfin tout simplement afficher les données du champs par la +commande ``print``:: + + >>> print f3 + Data content : + Tuple #0 : -0.6 + Tuple #1 : -0.1 + Tuple #2 : 0.4 + Tuple #3 : -0.1 + Tuple #4 : 0.4 + ... + Tuple #6556 : 3.5 + Tuple #6557 : 3.3 + Tuple #6558 : 1.5 + Tuple #6559 : 0.3 + Tuple #6560 : 0.2 + +Il est important de noter que les opérations entre champs ne peuvent +être faites qu'entre champs définis sur le même maillage. Il s'agit là +d'une spécification du modèle MED qui interdit d'envisager les +opérations entre champs définis sur des maillages géométriquement +différents. Techniquement, cela se traduit par l'obligation pour les +objets informatique *champs* de partager le même objet informatique +*maillage*. + +Dans l'hypothèse où on souhaite utiliser des champs définis sur des +maillages différents, par exemple pour manoeuvrer les valeurs des +champs à l'interface de deux maillages partageant une zone géométrique +2D, il faut d'abord ramener tous les champs sur le même maillage de +surface par une opération de projection. + +.. note:: Même si ceci est techniquement possible avec la bibliothèque + MEDCoupling, cet type d'opération de projection n'est pas encore + disponible dans le module de manipulation de champs (prévu en + 2012). + +Un autre besoin plus classique est l'utilisation de champs définis sur +des maillages géométriquement identiques, mais techniquement +différents, par exemple lorsqu'ils sont chargés de fichiers med +différents. Pour traiter ce cas de figure, la bibliothèque MEDCoupling +prévoit une fonction de "Changement du maillage support", dont +l'utilisation au niveau du module de manipulation de champs est +illustrée dans :ref:`l'exemple 4` ci-après. + +.. _xmed.userguide.exemple4: + +Exemple 4: Comparer des champs issues de différentes sources +------------------------------------------------------------ + +.. note:: Cet exemple présente les fonctions: + + * Changement du maillage support "change underlying mesh" + +On se place ici dans le cas de figure où des champs ont été produits +sur le même maillage, au sens géométrique, mais enregistrés dans des +fichiers med différents. C'est le cas par exemple d'une étude +paramétrique où plusieurs calculs sont effectués avec des variantes +sur certains paramètres du modèle simulé, chaque calcul produisant un +fichier med. + +Soit ``parametric_01.med`` et ``parametric_02.med`` deux fichiers med +contenant les champs que l'on souhaite comparer, par exemple en +calculant la différence des valeurs et en visualisant le résultat. + +Aprés le chargement des sources de données dans le module XMED, +l'utilisateur se trouve en présence de deux maillages, au sens +technique du terme cette fois-ci, c'est-à-dire que les champs sont +associées à des objets informatiques maillage différents, bien que +géométriquement identiques. + +Or, les fonctions de manipulation de champs ne permettent pas les +opérations sur des champs dont les maillages supports sont différents +(voir la remarque à la fin de :ref:`l'exemple +3`). + +Pour résoudre ce cas de figure, le module de manipulation de champs +met à disposition la fonction "Change underlying mesh" qui permet de +remplacer le maillage support d'un champ par un autre à partir du +moment où les deux maillages sont géométriquement identiques, +c'est-à-dire que les noeuds ont les mêmes coordonnées spatiales. + +.. |ICO_DATASOURCE_CHG| image:: images/ico_datasource_changeUnderlyingMesh.png + :height: 16px + +Dans l'exemple proposé, l'utilisateur sélectionne le premier pas de +temps du champ ``StiffExp_01`` du "datasource" ``parametric_01.med``, +puis l'importe dans l'espace de travail au moyen de la commande "Use +in workspace" |ICO_DATASOURCE_USE|. Il sélectionne ensuite le premier +pas de temps du champs ``StiffExp_02`` du "datasource" +``parametric_02.med``, mais l'importe dans l'espace de travail au +moyen de la commande "Change underlying mesh" |ICO_DATASOURCE_CHG|. La +fenêtre de dialogue ci-dessous s'affiche et invite l'utilisateur à +choisir le nouveau maillage support par sélection dans l'arborescence +du "dataspace": + +.. image:: images/xmed-gui-datasource-changeUnderlyingMesh.png + :align: center + +Dans cet exemple, on sélectionne le maillage ``Grid_80x80_01`` support +du champ ``StiffExp_01``, avec lequel on souhaite faire la +comparaison. Après validation, l'arborescence du workspace contient le +champ ``StiffExp_02`` défini sur le maillage ``Grid_80x80_01``: + +.. image:: images/xmed-gui-datasource-changeUnderlyingMesh_wsview.png + :align: center + +.. note:: La fonction "Change underlying mesh" ne modifie pas le champ + sélectionné dans le "dataspace" (principe de base de fonctionnement + du dataspace), mais crée une copie du champ dans l'espace de travail + pour ensuite remplacer le maillage support. D'où le nom par défaut + pour le champ ``dup()`` (dup pour + "duplicate"). + +Il reste à associer une variable à ce champ pour le manipuler dans la +console. Ceci peut être fait au moyen de la commande "Use in console", +disponible dans le menu contextuel du workspace. + +En définitif, si ``f1`` désigne le champ issu du datasource +``parametric_01.med`` et ``f2`` le champ issu du datasource +``parametric_02.med`` par la procédure décrite ci-dessus, alors la +comparaison des deux grandeurs peut être faite comme pour le cas de +:ref:`l'exemple 3`:: + + >>> r=f1-f2 + >>> view(r) + +.. note:: En remarque générale sur cet exemple, il convient de noter + les points suivants: + + * l'égalité géométrique de deux maillages est établie à une marge + d'erreur prés qu'il est possible de définir techniquement, mais + qui n'est pas ajustable au niveau de l'interface du module de + manipulation de champs. Elle est fixée à une valeur standard qui + permet de traiter la plupart des cas utilisateur. On verra à + l'usage s'il est nécessaire de remonter ce paramètre au niveau de + l'interface. + * L'utilisateur doit faire la démande explicite de changer le + maillage support d'un champ, en prévision de la comparaison de + champs issus de datasource différentes. Il s'agit là d'un choix + fonctionnel délibéré pour que l'utilisateur garde trace des + modifications faites sur les données (pas de modification + automatiques à l'insu de l'utilisateur, même sous prétexte + d'amélioration de l'ergonomie). + + +Exemple 5: Créer un champ sur un domaine spatial +------------------------------------------------ + +.. note:: Cet exemple présente les fonctions: + + * initialisation par une fonction de la position spatiale + * initialisation sur un groupe de maille + +Le domaine géométrique de définition du champs à créer est spécifié +ici par la donnée d'un groupe de mailles. Ce cas d'usage est +typiquement prévu pour produire les conditions de chargement initial +d'une structure, par exemple en définissant un champ sur une surface +de la géométrie, identifiée par un nom de groupe de mailles. + +.. warning:: DEVELOPPEMENT EN COURS + +Exemple 6: Extraire une partie d'un champ +----------------------------------------- + +.. note:: Cet exemple présente les fonctions: + + * extraire une composante (ou un sous-ensemble des composantes) + * extraire un domaine géométrique (valeurs sur un groupe de maille) + * extraire un ou plusieurs pas de temps. + +.. warning:: DEVELOPPEMENT EN COURS + + On doit illustrer ici les fonctions de restriction, qui + permettraient de récupérer certaines composantes uniquement. Le + principe est qu'on crée un nouveau champ qui est une restriction du + champ argument à une liste de composantes à spécifier (utiliser la + fonction __call__ des fieldproxy). + +Pour l'extraction des pas de temps, on peut se ramener au cas de +l'exemple 2 avec une seule source de donnée. + +Exemple 7: Créer un champ à partir d'une image to[mp]ographique +--------------------------------------------------------------- + +.. note:: Cet exemple présente les fonctions: + + * Création d'un champ sans datasource (ni maillage, ni champs), à + partir d'un fichier image + +En tomographie ou en topographie, les appareils de mesure produisent +des images qui représentent une grandeur physique en niveaux de gris +sur un plan de coupe donné. L'image ci-dessous représente par exemple +une vue interne du corps humain faite par IRM: + +.. image:: images/xmed-irm.png + :align: center + :width: 600px + +Cette image est un ensemble de pixels organisés sur une grille +cartesienne. Elle peut donc être modélisée sous la forme d'un champ +scalaire dont les valeurs sont définies aux cellules d'un maillage +réglés de même taille que l'image (en nombre de pixels): + +.. image:: images/xmed-irm-field.png + :align: center + :width: 600px + +Le module de manipulation de champ fournit un utilitaire appelé +``image2med.py`` qui permet d'appliquer ce principe à la conversion +d'un fichier image en fichier med contenant la représentation de +l'image sous forme d'un champ scalaire (seul le niveau de gris est +conservé):: + + $ /bin/salome/xmed/image2med.py -i myimage.png -m myfield.med + +.. |ICO_IMAGESOURCE| image:: images/ico_imagesource.png + :height: 16px + +Cette opération de conversion peut être faite automatiquement dans +l'interface graphique du module au moyen de la commande "Add Image +Source" |ICO_IMAGESOURCE| disponible dans la barre d'outils. Cette +commande ouvre la fenêtre suivante pour inviter l'utilisateur à +choisir un fichier image: + +.. image:: images/medop_image2med_dialog.png + :align: center + +Le nom du fichier med résultat est proposé par défaut (changement de +l'extention en ``*.med``) mais il peut être modifié. Enfin, on peut +demander le chargement automatique du fichier med produit pour ajout +dans l'espace de donnée. Les champs peuvent alors être manipulés comme +dans les cas d'utilisation standard. + +Par exemple, l'image ci-dessous affiche le résultat de la différence +entre deux images, ajoutée à l'image de référence: si i1 et i2 +désignent les champs créés à partir des deux images, on représente ``r += i1 + 5*(i2-i1)`` où le facteur 5 est arbitraire et sert à amplifier +la zone d'intérêt (en haut de l'oeil gauche): + +.. image:: images/xmed-irm-diff.png + :align: center + :width: 600px + +L'exemple ci-dessous est le résultat du chargement d'une image +tomographique issue du projet MAP (Charles Toulemonde, +EDF/R&D/MMC). L'image tomographique: + +.. image:: images/champ_altitude_MAP.png + :align: center + :width: 600px + +Le résultat du chargement: + +.. image:: images/medop_image2med_tomographie.png + :align: center + :width: 800px + +Exemple 8: Continuer l'analyse dans PARAVIS +------------------------------------------- + +.. note:: Cet exemple présente les fonctions: + + * Export de champs vers le module PARAVIS. + +Les possibilités de représentation graphique des champs fournies par +le module MED ont pour seul objectif le contrôle visuel rapide. Par +défaut, le viewer de VISU est employé. + +Pour une analyse plus détaillées des champs, il est nécessaire de +poursuivre le travail dans PARAVIS. Le module de manipulation de +champs offre une fonction qui simplifie ce passage, en faisant le +chargement automatique dans PARAVIS et en proposant une visualisation +par défaut (carte de champs scalaire). + +Pour cela, il faut sélectionner dans l'espace de travail les champs à +exporter, puis déclencher la fonction d'export depuis le menu +contextuel associé: + +.. image:: images/medop_exportparavis.png + :align: center + +Les champs sélectionnés sont regroupés dans une entrée MED du +navigateur PARAVIS, et le premier champ est affiché sous forme de +carte de champ: + +.. image:: images/medop_exportparavis_result.png + :align: center + :width: 800px + +.. note:: La fonction d'export est une fonction de confort. La même + opération peut être faite manuellement en procédant d'abord à + l'enregistrement des champs sous forme de fichier MED, puis en + chargeant le fichier généré dans le module PARAVIS pour + visualisation. + +.. _xmed.userguide.tui: + +Utilisation de l'interface textuelle du moduel XMED (TUI) +========================================================= + +Toutes les opérations menées au moyen de l'interface graphique peuvent +être réalisées (avec plus ou moins de facilité) avec l'interface +textuelle. Le module de manipulation de champs peut même être utilisé +exclusivement en mode texte. Pour cela, on lance la commande:: + + $ /medop.sh + +Cette commande ouvre une console de commandes ``medop>``. Un fichier +med peut être chargé et travaillé, par exemple pour créer des champs à +partir des données du fichier. + +Que l'on soit en mode texte pur ou en mode graphique, un séquence de +travail type dans la console peut ressembler au jeu d'instructions +suivantes:: + + >>> load("/path/to/mydata.med") + >>> la + id=0 name = testfield1 + id=1 name = testfield2 + >>> f1=get(0) + >>> f2=get(1) + >>> ls + f1 (id=0, name=testfield1) + f2 (id=1, name=testfield2) + >>> r=f1+f2 + >>> ls + f1 (id=0, name=testfield1) + f2 (id=1, name=testfield2) + r (id=2, name=testfield1+testfield2) + >>> r.update(name="toto") + >>> ls + f1 (id=0, name=testfield1) + f2 (id=1, name=testfield2) + r (id=2, name=toto) + >>> put(r) + >>> save("result.med") + +Les commandes principales sont: + +* ``load``: charge un fichier med dans la base de données (utile + uniquement en mode texte pur):: + + >>> load("/path/to/datafile.med") + +* ``la``: affiche la liste de tous les champs chargés en base de données ("list all") +* ``get``: définit un champ dans l'espace de travail à partir de son + identifiant (utile plutôt en mode texte pur car l'interface + graphique permet de faire cette opération par sélection d'un champ + dans le dataspace):: + + >>> f=get(fieldId) + +* ``ls``: affiche la liste des champs présent dans l'espace de travail ("list") +* ``put``: met un champ en référence dans l'*espace de gestion*:: + + >>> put(f) + +* ``save``: sauvegarde tous les champs référencés dans l'espace de + gestion dans un fichier med:: + + >>> save("/path/to/resultfile.med") + +.. note:: On peut faire à ce stade plusieurs remarques: + + * la commande ``load`` charge uniquement les méta-informations + décrivant les maillage et les champs (noms, type de + discrétisation, liste des pas de temps). Les maillages et les + valeurs physiques des champs sont chargées ultérieurement (et + automatiquement) dés lors qu'elles sont requises par une + opération. Dans tous les cas, les données med (méta-informations + et valeurs) sont physiquement stockées au niveau de l'espace + *base de données*. + * la commande ``get`` définit en réalité un *manipulateur de champ* + dans l'espace de travail, c'est-à-dire une variable qui fait la + liaison avec le champ physique hébergé dans la base de + données. Les données physiques ne circulent jamais entre les + espaces, mais restent centralisées au niveau de la base de + données. + +Les commandes TUI suivantes nécessitent de travailler dans +l'environnement graphique: + +* ``visu``: afficher une carte de champ pour contrôle visuel rapide + (pas de paramettrage possible) + + >>> view(f) + + diff --git a/src/MEDOP/doc/sphinx/xmed-workingnotes-2010.rst b/src/MEDOP/doc/sphinx/xmed-workingnotes-2010.rst new file mode 100644 index 000000000..724c9a832 --- /dev/null +++ b/src/MEDOP/doc/sphinx/xmed-workingnotes-2010.rst @@ -0,0 +1,461 @@ +.. meta:: + :keywords: maillage, champ, manipulation + :author: Guillaume Boulant + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +ANNEXE: Note de travail concernant le chantier XMED 2010 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +.. contents:: Sommaire + :local: + :backlinks: none + +Principes directeurs du développement +===================================== + +En matière de développement: + +* On ne cherche pas d'emblée à s'inscrire dans la fabrication d'un + module SALOME diffusable dans la version d'exploitation 2010 (SALOME + 6). La raison est double: (i) on souhaite au moins pour 2010 ne pas + devoir tenir compte des contraintes de temps SALOME et (ii) le + produit envisagé fin 2010 est une maquette qui cherche à éprouver + l'ergonomie générale d'utilisation et en aucun cas on ne peut + garantir la réalisation d'un module SALOME compatible avec les + exigences de mise en exploitation. +* On ne cherche pas d'emblée à capturer tous les cas d'application, + mais à concevoir un développement qui acceptera les extensions de + périmètres dans des conditions raisonnables. Aussi, les + fonctionnalités développées seront celles qui sont nécessaires à la + réalisation des cas d'application de référence; + +En matière d'ergonomie: + +* L'interface utilisateur de référence (appelé espace de travail dans + le volet de spécifications fonctionnelles) est l'interpréteur + python. Les fonctionnalités doivent être pensées pour un usage + adapté à une interface textuelle (TUI) de ce type. +* La création d'une interface graphique (GUI) peut être envisagée en + complément et comme un moyen de manipuler graphiquement les + fonctionnalités développées pour l'interface textuelle et pour aider + la préparation des variables dans l'interface python. +* Le modèle d'un processus de manipulation de champs est: + + - Préparation du jeu de variables U, V, ... représentant les champs + à manipuler. C'est à ce stade que l'on résoud la question de + sélection des données (dans un champ publié dans l'arbre d'étude, + par un module de calcul ou par chargement d'un fichier med) + - Utilisation des variables avec une sémantique la plus proche + possible du modèle conceptuel et des spécifications + fonctionnelles; + - Création des variables qui représentent les résultats des + fonctions de manipulation; + - Persistence (fichier med), visualisation (SALOME) ou export (vers + une structure qui peut être directement utilisable en numpy) + +Sur le plan technique: + +* On souhaite spécifier clairement le conteneur SALOME des fonctions + de manipulation de champs. Pour discussion: + + - Il apparaît que les modules SALOME MED et VISU contiennent déjà + des fonctions qui peuvent faire partie des fonctions de + manipulations de champs (en particulier pour l'exploration des + structures MED, leur visualisation et la sélection des données à + manipuler). + - Dans la mesure où le module MED n'est pas utilisé à ce jour (en + tout cas pas sous sa forme de module SALOME) et compte-tenu du + caractère obsolescent du module VISU (amené à être remplacé sur le + plan fonctionnel par le module PARAVIS), on pourrait examiner la + création d'un module dédié à la manipulation des maillages et des + champs par l'agrégation technique au sein d'un même module des + fonctions des modules MED et VISU. + +Au moins dans un premier temps, on se donne les limites suivantes: + +* Une opération ne peut pas combiner des pas de temps différents. Dans + l'hypothèse où cette limite venait à être levée, on doit spécifier + le pas de temps de la donnée résultat; +* Le domaine d'application d'une opération pourra être défini + exclusivement par la donnée d'un maillage ou un groupe d'éléments du + maillage; +* On ne traite pas le cas des champs qui prennent leurs valeurs aux + points de gauss ou aux noeuds par élément. Une particularité de ces + types de support est que le repérage de la position implique deux + indices (par exemple l'indice de la maille, puis l'indice du point + de gauss). + +Eléments de conception +====================== + +Plan général +------------ + +On peut par exemple imaginer une maquette du genre: + +* En C++ dans MEDGUI, charger un fichier med et donner une vue de la + structure des maillages et des champs dans l'arbre d'étude. +* Sélectionner un élément (par exemple un pas de temps d'un champ) et + le menu contextuel permet d'exporter ce champ dans la console python + pour manipulation. Pour cela, s'inspirer de la fonction + ``XCADGUI::OnLoadScript()`` du XCADGUI pour manoeuvrer un objet + PythonConsole. +* L'élément est marqué comme ayant été exporté, on peut imaginer une + récupération ultérieure. +* Exporter un deuxième champ cohérent avec le premier (même pas de + temps et défini sur le même maillage avec le même support, on + s'arrange pour). +* Dans la console python, faire les opérations sur les champs +* Publication du champ résultat dans l'arbre d'étude pour sauvegarde + ultérieure. C'est a priori le gros morceau qui consiste à faire un + objet CORBA MED à partir d'un objet MED standard, en plus défini + dans la console python (sous forme d'objet python). + +Quand ce premier cas d'utilisation est au point, on peut envisager de +le compléter par les opérations suivantes + +* exporter le résultat med dans un fichier +* visualiser les champs produits + +Plan de développement: + +* Faire une maquette en MEDMEM pur d'abord, car quelque soit le choix + d'architecture, l'opération physique se déroulera en définitif au + niveau de MEDMEM pur. +* Prévoir une implémentation des opérations sous forme de fonctions + informatiques, même les opérations algébriques (+,-,*,/). Pour ces + dernières et dans certaines conditions (quand on manipule + directement les strutures MEDMEM et non pas les objets CORBA), + l'utilisation des formes A+B, A-B, ... peuvent être rendues + possibles. Dans ce cas, voir la possibilité de combiner plusieurs + opérations algébriques sur une seule ligne: A+B-C*0.3. +* On peut charger la structure MED sous forme d'objet CORBA publiable + dans l'étude, de sorte d'avoir accés aux méta-données et pouvoir par + exemple sélectionner les champs d'intérêt. De cet objet CORBA, on ne + récupère que les informations nécessaires au chargement d'un champs: + le nom du champs, le nom de son maillage associé, les identifiants + du pas de temps, au besoin une structure Field non chargée (par + exemple pour récupérer plus facilement le maillage). +* Un mécanisme (à développer à partir du PyConsole par exemple) + pourrait alors permettre le chargement des champs sélectionnés dans + la console python et sous un nom facile à manoeuvrer. Prendre + inspiration sur XCADGUI::LoadIntoPythonConsole(). +* A priori, les données sont physiquement chargée dans le GUI. Au + besoin, il semble possible (cf. MED_i::init) de fabriquer une objet + CORBA field à partir d'un field standard (à tester). + +Une autre idée est de récupérer le pointeur CORBA MED dans la console +python et de tirer les données à partir de là. Ajouter une couche de +wrapping python pur pour gérer les cas de simplification (surcharge +des opérations arithmétiques par exemple). + +Besoins complémentaires: + +* L'interpréteur doit contenir des éléments d'aide (par exemple un + help qui liste les opérations possibles sur les champs chargés) +* prévoir quelques fonctions de visu et de persistence. Cela commence + probablement par des fonctions de publication dans l'étude des + champs créés par les opérations de manipulation. Les champs sont + physiquement ajouté automatiquement à la structure med par le MedOp + mais il n'est pas obligatoirement publié => fournir un moyen de + publication. + +Limitations actuelles (liées à la conception de MEDMEM): + +* les champs doivent être gérés par la même structure MED car ils + doivent partager le même support. +* les opérations possibles dans MEDMEM sont entre champs pris sur un + pas de temps (Q: les pas de temps peuvent-ils être différents). + + +Développements +-------------- + +Développement de classes proxy: + +* FieldProxy, FieldTimeSeriesProxy +* Attention pour les éries temporelles, le SUPPORT med peut être + différent en chaque pas de temps (par exemple en cas d'extension + spatiale du champ au cours du temps). + +MEDMEM_MedDataManager: + +* FIX: test de l'implémentation C++ au travers de la fonction test() du + MedOperator ==> OK. Quand on fait la même opération depuis python + via l'interface SWIG ==> au deuxième appel de getFieldDouble, le + destructeur du champ semble être appelé. Pb de gestion des pointeurs? + + +Evolutions à prévoir +==================== + +Concernant MEDMEM: + +* FIX: SALOME_MED::MED::getField devrait pouvoir être appelée + plusieurs fois de suite puisqu'on recycle la référence si elle est + déjà chargée. +* IMP: MEDMEM::MED faire une gestion des chargements des champs (par + exemple avec un getField qui renvoie le champ s'il est déjà chargé + ou le charge et le renvoie sinon). +* IMP: Récupérer le nom du fichier med à partir de l'objet MED, en + passant a priori par le driver associé. Plusieurs driver peuvent + être associés à une structure MED car les données peuvent être + chargées en plusieurs fois et de plusieurs fichiers. Il faut donc + étendre la structure MED pour avoir accés à la liste des driver puis + de cette liste déduire les noms des fichiers. +* IMP: Opérations combinant des champs sur des support différents ne + peuvent pas être faites par l'API (une exception est levée en cas de + supports incompatibles), mais on peut imaginer le faire en + manoeuvrant les tableaux de données directement. +* INF: faire le point sur les fonctions utilitaires autour de MEDMEM + et de son interface SWIG (ex: dumpMEDMEM.py, med_opfield_test.py). +* IMP: dans MEDMEM::MED et SALOME_MED::MED, pouvoir enlever un champ + préalablement ajouté: une fonction removeField en complément de + addField. + +Concernant l'interface SALOME_MED: + +* IMP: Fonctions algébriques, qui seront implémentées au niveau de la + structure MED et requêtées au niveau des classes proxy en spécifiant + les identifiants des champs impliqués et les paramétres requis (pas + de temps en particulier). + +Concernant le module MED: + +* IMP: pourvoir exporter la structure med dans un fichier med (la + structure ayant pu être enrichie par la publication de champs créés + par les operations de champs. + + +Historique des travaux +====================== + +20100726 : mise au point du schéma de conception +------------------------------------------------ + +Choix entre MEDMEM et MEDCoupling: on reste sur MEDMEM pour plusieurs +raisons: + +* MED Coupling ne peut pas gérer des mailles de dimensions différentes + dans un même modèle (choix faits dans un soucis de performance dans + l'accès à une structure de donnée compact). On peut contourner le + problème en définissant deux champs pour traiter chacun des type de + mailles. +* Un champ repose sur un maillage complet (pas de notion de profil, + mais cela peut être émulé en créant deux maillages) +* Le concept de point de gauss n'existe pas (pas implémenté) + +TODO: + +* Idéalement, il conviendrait de faire un état des lieux du module + MED, en particulier des éléments MEDMEM (le coeur), les interfaces + CORBA associées (MED.idl implémenté dans le package source + MEDMEM_I), l'engine (composant SALOME d'interface MED_Gen.idl et + implémenté dans le package source MED) et le GUI (MedGUI.cxx + implémenté dans le package source MEDGUI). + +* Ergonomie TUI et modèle CORBA associé: + + 1. Charger un objet medmem (puis les objets métier mesh et field) + sur un domaine d'application donné. + 2. En faire des variables disponibles dans l'interface TUI et que + l'on peut manipuler dans des opérations algébriques. + 3. Pouvoir au besoin en faire des objets CORBA pour l'interface avec + les autres modules SALOME. + +* Compléter le diagramme de la structure informatique de MED (en + particulier l'implémentation des interface IDL). +* Préparer un module de travail XMED (organisation d'une bibliothèque) + +Tests à réaliser: + +* Est-il possible de faire des opérations algébriques à partir des + objets SALOMEMED (objects CORBA MED)? +* Création d'un objet MED_i à partir d'une objet MED pur préalablement + chargé en mémoire. + +A retenir: + +* Des opérations de champs sont possibles sur des champs à des pas de + temps fixés. Si l'opération doit être menée sur plusieurs pas de + temps, alors itérer sur chaque pas de temps. L'idée ici est + d'introduire le concept de série temporelle de champs en temps + qu'objet manipulable. +* Pour deux champs différents de la même structure MED, la données des + identifiants dt et it ne correspond pas forcément au même instant + absolu (en tout cas rien ne le garanti, même si c'est tout de même + une pratique courante). + +20101005 : première maquette de démonstration de l'ergonomie en MEDMEM pur +-------------------------------------------------------------------------- + +XMED: svn révision 16 +Travailler avec le fichier de donnée testfield.med joint. + + +20101007 : Vers une maquette CORBA +---------------------------------- + +Le contexte d'utilisation des opérations de champs est l'environnement +SALOME. Le support de gestion des données est donc l'étude SALOME. Au +plus bas niveau, les champs sont des objets MEDMEM instanciés dans une +session SALOME (soit par un code de calcul intégré, soit par +chargement des données à partir d'un fichier med). Ces objets sont en +général référencés dans l'étude SALOME sous la forme d'objets CORBA de +classe SALOMEMED::FIELD. Plus exactement, l'étude SALOME gère des +SObject (Study Object) dont un attribut est une référence vers un +objet CORBA de classe SALOMEMED::FIELD qui lui-même encapsule un objet +MEDMEM::Field. + +On peut donc envisager une solution dans laquelle on donne à +l'utilisateur des poignées de manipulation des objets +SALOMEMED::FIELD, par exemple au moyen d'un modèle informatique de +type proxy. Cela signifie que l'utilisateur ne manipule pas +directement des objets MEDMEM mais des objets python qui font +l'interface (à concevoir et implémenter, a priori avec un design +pattern de type proxy). + +L'utilisation directe des objets MEDMEM aurait pu être une solution +extremement pratique dans la mesure où ces objets en l'état peuvent +être combinés dans des opérations de champs (c'est déjà +implémenté). Par contre, ce procédé souffre de limitations importantes +dans la gestion et la circulation des données pour les différents cas +d'utilisation envisagés (visualisation, export, transfert à un autre +module SALOME). + +L'avantage de la solution proposée est multiple: + +* Elle permet de travailler sur une structure MED cohérente pour + intégrer les résultats des opérations de calculs et combiner des + champs cohérents entre eux. Tout passe par des classes proxy qui + pourront s'assurer de la cohérence des opérations demandées et + exécuter automatiquement les fonctions de pré-traitement ou + post-traitement requises pour ces opérations. On peut imaginer par + exemple que les requêtes d'opération soient envoyées par les classes + proxy à la structure MED à laquelle les champs sont associés pour + piloter l'opération en MEDMEM pur. +* Elle permet d'automatiser un certain nombre d'opérations + implicites. Par exemple si deux champs ne sont pas définis dans la + même unité, un changement d'unité peut être effectué automatiquement + par la classe proxy avant de commander l'opération au niveau + MEDMEM. +* Elle permet de laisser les données sur le container SALOME et de + réaliser des opérations sans rappatrier les données en local (qui + peuvent être en trés grand nombre). +* Elle permet d'étendre facilement l'ergonomie de manipulation des + champs, par exemple en définissant la notion de *série temporelle de + champs*, ou encore les concepts de *domaine de définition* évoqués + dans les spécifications fonctionnelles. +* Elle rend immédiat la circulation des données entre modules SALOME, + puisque les champs restent accessble par des objets CORBA, en + particulier pour la visualisation ou l'export des champs produits + par les opérations. + +Elle a cependant des inconvénients et/ou limitations: + +* Elle nécessite l'implémentation d'une classe proxy pour encapsuler tous + les appels aux objets SALOME_MED (et donc MEDMEM). Cette interface + se limite a priori aux opérations de champs (les opérations + algébriques dans un premier temps). +* Les champs à manipuler dans une opération donnée doivent être gérés + par la même structure MED. + +Il est à noter également que les interfaces de programmation de +SALOMEMED (interface CORBA pour MEDMEM) devront être étendues pour +permettre des requêtes de manipulations de champs (fonctions addition, +soustraction, multiplication, ...). Pas de contrainte ici sur +l'ergonomie puisque la manipulation par l'utilisateur se fera au +niveau des classes proxy uniquement. + + +Hypothèses: + +* On tente ici une maquette qui exploite dans la mesure du possible le + fonctionnement actuel du module MED, en particulier la gestion des + données dans l'étude. +* Dans une deuxième version, on pourra examiner sérieusement la + révision de la gestion des données dans le module, quitte à la + spécifier et maquetter dans XMED pour intégration ultérieure dans + MED. Exemple: + + - Pouvoir gérer plusieurs structures med dans l'étude. + +* Enfin, on exploite MEDMEM en l'état. Pour les besoins de la gestion + des données (gestion des chargements des champs en particulier, + références croisées pour retrouver le med à partir du champ par + exemple, ...), il pourra être nécessaire de faire évoluer MEDMEM. Il + faut pouvoir par ailleurs gérer indifféremment une structure med (et + les champs qui y sont associés) qu'elle soit créée en mémoire from + scratch ou chargée d'un fichier (donc attention avec les opérations + de lecture read(), sur les maillages comme sur les champs). La + structure med permet d'obtenir les méta données (meta-field par + exemple) mais ne permet pas de savoir si les données sont + physiquement chargées ou pas. + + +Révisions: + +* XMED svn revision 21 + tarball MED_SRC-20101014-15h26m.tgz. + Première version qui permet d'importer un champ dans la console + python sous la forme d'un FieldProxy. Ne permet pas encore de faire + des opérations. Introduction dans le module MED de l'interface MEDOP + pour prendre en charge les opérations sur les champs. + + +20101019 : Maquette de démonstration pour l'addition +---------------------------------------------------- + +Cette maquette implémente une solution technique de bout en bout (de +l'interface python aux objets MEDMEM, en passant par le fieldproxy +puis les servants CORBA pour les operations, ...) mais sur le +périmètre de l'addition de champs sur tout leur domaine de définition +et pour un pas de temps donné. + +Limitations: + +* gére l'addition de champs de type double uniquement (parceque le + reste n'est pas implémenté) + +Révisions: + +* XMED: svn révision 25 +* MED: cvs tag BR_medop_20101019 + + +20101020: Fonctions complémentaires +----------------------------------- + +Cette version test la faisabilité des fonctions complémentaires pour +accompagner la manipulation de champs. Cela comprend en particulier: + +* **la sauvegarde des champs produits** dans un fichier med (un champ ou + toute la structure med). Pour cela, on définit un med proxy comme + l'extention du SALOME_MED::MED (prévir plutôt d'implémenter ce type + de fonction au niveau C++ pour permettre un usage au niveau du GUI + C++?). +* **la visualisation d'un champ** au moyen du module VISU. +* **des fonctions d'aide interactives** pour assister l'utilisateur + dans la console de manipulation des champs. + + +Questions: + +* peut-on sauvegarder un champ unique? +* peut-on faire en sorte que ce soit l'affectation à une variable qui + provoque l'ajout du champ à la structure med (ou plus exactement qui + supprime tous les champs intermédiaires). + + +Révision: + +* XMED: svn revision 31 +* MED: cvs tag BR_medop_20101025 + + +20110606: commit avant transfert dans git +----------------------------------------- + +* XMED: svn revision 53 + +Les parties de MED utiles à MEDOP seront reversées dans XMED +dans une première étape, puis le tout dans MED 6 au final. diff --git a/src/MEDOP/doc/sphinx/xmed-workingnotes-2011.rst b/src/MEDOP/doc/sphinx/xmed-workingnotes-2011.rst new file mode 100644 index 000000000..8ba8b8068 --- /dev/null +++ b/src/MEDOP/doc/sphinx/xmed-workingnotes-2011.rst @@ -0,0 +1,473 @@ +.. meta:: + :keywords: maillage, champ, manipulation + :author: Guillaume Boulant + +.. include:: xmed-definitions.rst + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +ANNEXE: Note de travail concernant le chantier XMED 2011 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +.. contents:: Sommaire + :local: + :backlinks: none + +Cas d'utilisation métier +======================== + +On illustre par un exemple (Christophe Vallet, R&D/MMC, 1/7/2011):: + + J'ai souvent des fichiers med de résultats de calcul, et j'aimerais y + ajouter de nouveaux champs issus de champs existants. J'aimerais + aussi pouvoir créer de nouveaux meds plus petits par extraction de + certaines composantes de champs, certains groupes ou certains pas de + temps. + +On peut exprimer le besoin sous la forme des cas d'utilisation +suivants (use cases): + +* **UC1: combiner dans un même fichier med des champs issus de + plusieurs sources de données**. On peut par exemple charger un + premier fichier, puis ajouter à cette base des champs issus d'autre + fichiers ou générés par manipulation de champs, ou encore générés + par un module de calcul qui produirait directement du MEDCoupling. +* **UC2: créer un champ contenant certaines composantes d'un autre + champ**. On pense ici aux fonctions de restriction, qui permettraient + de récupérer certaines composantes uniquement. +* **UC3: créer un champ contenant certains pas de temps d'un autre + champ**. C'est un cas particulier des fonctions de restriction + évoquées ci-dessus. +* **UC4: créer un champ comme la limitation d'un autre champ à un + groupe de mailles**. C'est un cas particulier des fonctions de + restriction évoquées ci-dessus. Notion de domaine spatial. A + priori la notion de groupe est définie dans MEDLoader. + +On peut ajouter également les UC identifiés pour la maquette 2010: + +* **UC5: comparer des champs issus de source de données différentes**, + par exemple des champs chargés de deux fichiers med différents et + qui s'appuient sur le même maillage (au moins conceptuellement). Le + problème technique ici est de pouvoir changer le maillage d'un + champ, pour ramener tous les champs sur le même maillage (au sens + informatique). Ceci est une contrainte de MEDCoupling, les + opérations sur des champs A et B imposent que A et B soient définis + sur le même maillage, i.e. le même objet informatique. +* **UC6: créer un champ de toute pièce sur un maillage**, ou un groupe + de mailles. Ce cas d'usage est typiquement prévu pour produire les + conditions de chargement initial d'une structure. Il s'agit ici + d'initialiser un champ à partir de zéro sur une surface prédéfinie + de la géométrie (par exemple spécifiée par un nom de groupe de + mailles). + +Pour UC5: les sources de données sont référencées dans l'object +browser. On importe explicitement les données dans l'espace de +travail. On peut détecter que les maillages sont identiques et on +propose à l'utilisateur de transférer le champ sur le maillage déjà +présent. Sinon, les champs devront être référencés sur des maillages +distincts dans l'arbre de l'espace de travail. + +Analyses préliminaires pour le chantier 2011 +============================================ + +On fait le choix pour le chantier 2011 de travailler à partir de la +bibliothèque MEDCoupling (et non plus MEDMEM comme c'était le cas dans +le démonstrateur 2011). + +Analyse de MEDCoupling et MEDLoader +----------------------------------- + +MEDCoupling est l'implémentation du modèle de données MED (avec +recherche de minimisation des dépendances logicielles) et MEDLoader +fournit une ensemble de fonctions pour le chargement des structures +MEDCoupling depuis un fichier ou inversement leur sauvegarde sous +forme de fichiers. + +Dans l'implémentation MEDCoupling, un champ est l'ensemble des valeurs +d'une grandeur physique sur un maillage pour un pas de temps donné. Un +champ est caractérisé par: + +* un support spatial, le maillage +* un type de discrétisation spatial, défini par l'emplacement des + valeurs sur le maillage (sur les noeuds, sur les cellules, aux + points de gauss, ...) et le mode d'interpolation spatial (P0, P1, + etc) +* un pas de temps, défini par deux entiers (iteration, order) et un + réel (timestamps) + +Dans cette implémentation, il existe une association 1..n entre un +maillage et un champ (alors que dans MEDMEM, la structure +intermédiaire SUPPORT est implémentée). + +MEDCouplingCorba fournit un ensemble de servants CORBA pour manoeuvrer +des structures MEDCoupling au travers du bus CORBA. L'interface à ce +jour est délibérément réduite. Des classes dites "Cliente" sont +fournies pour piloter les servants CORBA depuis un contexte +client. Par exemple ``MEDCouplingFieldDoubleClient`` fournit une +fonction de création d'une structure MEDCoupling à partir d'un +pointeur vers un servant CORBA. La structure est créée localement +(dans le contexte client) avec duplication des données issue de la +structure encapsulée par le servant CORBA (récupération par la +fonction de sérialisation). + +Aucune interface CORBA n'est défini pour MEDLoader. + +Questions: + +* Voir comment sont créés les servants, et surtout comment ils sont + récupérés (via le lcc?) +* Comment peut-on définir un champ sur un groupe de mailles (et non + pas sur le maillage complet)? Comment peut-on extraire le champs + circoncit à une groupe de mailles pour des opérations. + + - R: méthode changeUnderlyingMesh + +* Comment manipuler deux champs chargées de fichiers différents mais + construit sur le même maillage (conceptuellement). On peut forcer la + réassociation d'un champ sur un autre maillage? +* Manipuler des champs de pas de temps différents? Différentes + composantes d'un ou plusieurs champs? +* Comment importer un MedCoupling dans PARAVIS? (dans VISU?)? + +* mapper sur une image + +Improvments: + +* MEDLoader::Write should raise an exception if the filepath is not writable +* MEDDataManager: développer une classe chapeau sur MEDCoupling et + MEDLoader pour aider au chargement et la gestion de données MED + (orienté manipulation de champs). Cette classe serait associée des + structures légères FieldHandler et MeshHandler et des listes + correspondantes pour la navigation dans les méta-données. +* Sur base du MEDDataManager, prévoir des ports med pour yacs par + lesquels pourrait transiter des handler. + +Nouveaux concepts à prendre en compte +------------------------------------- + +Au démarrage du chantier 2011, on observe que les concepts suivants +sont introduits dans le module MED: + +* Le conteneur MED n'existe plus, utiliser MEDFILEBROWSER pour charger + les fichiers med et obtenir les informations générales sur le + contenu. +* MEDFILEBROWSER: remplace le concept de driver et fournit les + fonctions précédemment fournies par la classe MED pour obtenir les + informations de structure. +* Concept d'Extractor pour une lecture sélective des données de champs + (suivant un critère d'extraction) +* Il n'est plus nécessaire d'appeler les méthodes read explicitement + sur les objets (MESH et FIELD) pour charger les données. Par + ailleurs, on peut définir deux fois le même champs (double + chargement a priori) sans lever d'exception). + + +Analyse de conception pour le chantier 2011 +=========================================== + +Composants SALOME (interfaces IDL) +---------------------------------- + +* MEDDataManager: défini une structure FIELD pour identifier un champ + dans les requêtes. Il s'occupe également de la récupération physique + des données, quelqu'en soit la source (fichier avec MEDLoader, autre + module SALOME comme PARAVIS avec une méthode à définir) +* MEDCalculator: s'occupe des requêtes de calcul dont les arguments sont + les structures FIELD du MEDDataManager. Reprendre l'interface de + MEDOP. + +Use case à réaliser depuis un client python: + +* UC01: ajouter un fichier d'entrée et accéder aux informations + concernant les champs. Ex: récupérer une structure champs par la + donnée des paramètres primaires (nom identifiant, dt, it, nom du + maillage). +* UC02: créer des champs et les ajouter au MEDDataManager +* UC03: mener des opérations basique sur les champs en console python + +Interface Utilisateur +--------------------- + +L'interface utilisateur est composée des parties suivantes: + +* une partie GUI (appelée par la suite MEDGUI) qui s'occupe de piloter + le chargement des données dans l'espace de travail, au moyen d'une + interface graphique; +* une partie TUI (appelée par la suite MEDTUI) qui s'occupe de piloter + la création de champs, au moyen de commandes exécutées dans la + console python. + +Le principe est que les champs sont préalablement chargés au niveau du +composant SALOME au moyen de l'interface graphique (MEDGUI), puis +manoeuvrés depuis l'application SALOME au moyen de variables proxy +définies dans la console python (MEDTUI). Au chargement, les champs +sont indéxés par le MEDDataManager, puis les index sont rendus +accessibles au niveau du GUI au moyen d'une représentation +arborescente de la structure MED. Les feuilles de l'arbre +correspondent à des champs qui peuvent être sélectionnés et dont +l'index peut être obtenu de la sélection. + +L'espace de travail est organisé autour du concept de +"workspace". L'étude SALOME liste les datasource (les fichiers source +des données med, mais peut-être aussi les référence vers des objets +MED déjà existants ou chargé dans PARAVIZ). Une vue complémentaire +permet de voir la structure fine d'une source de données. + +Concernant MEDGUI: + +* la représentation des données (les champs et les maillages associés) + doit permettre de récupérer par l'interface graphique les + identifiants des champs à manipuler (a priori les structures FIELD + définies par le composant MEDDataManager). Cela conduit à la mise en + place des composants suivants: + + - MedDataModel hérité de TreeData. Il est peuplé avec les + méta-données décrivant la structure MED explorée. + - MedGuiManager qui permet l'implantation du doc widget de + présentation + +TODO: + +* specifier le concept de workspace (qui a une entrée dans l'étude?) + en bijection avec un datamanager +* identifier des interlocuteur/utilisateur pour l'aspect ergonomie d'usage + +Concernant MEDTUI: + +* Il fournit les classes FieldProxy + +Questions: + +* Comment traiter le cas du travail sur des composantes ciblées, plus + généralement, comment introduire le concept de domaine + d'application? +* Prévoir des fonctions génériques (initialisation d'un champ sur un + maillage avec une fonction analytique de la position, sauvegarder + les champs créés dans un fichier med) + + +Tâches de développement +======================= + +T20110622.1: Gestion des données internes +----------------------------------------- + +**Status: terminé.** +Suite: fonction de sauvegarde au niveau graphique également + +On vise les cas d'utiliation suivants: + +* UC1: intégrer dans le datamodel du gui un champ créé dans la console + python (et donc présent dans le datamanager du composant). Définir + l'utilité? +* UC2: renommer un champ et plus généralement changer ses méta-données + (avec assurance de synchronisation entre toutes les données). +* UC3: sauvegarder une sélection de champs. La sélection peut se faire + dans l'arbre du datamodel gui. + +WARN: robustesse de fieldproxy + + + +T20110622.2: UC Initialisation/Création de champs +------------------------------------------------- + +**Status: à faire** + +Les cas implémentés à ce jour sont la création de champs à partir de +champs existants et chargés d'un fichier med. On souhaite ici réaliser +des cas 'utilisation autour de la création de champs "from scratch", +s'appuyant tout de même sur un maillage chargé. + +UC01: Sélection d'un groupe de maille dans SMESH pour initialiser un +champ (par exemple les conditions limites d'un problème de calcul). + +UC02: créer un champ avec des restrictions qui définissent le domaine +d'application des opération de champs. + +UC03: créer un champ à partir d'une image (codes rgb utilisé comme les +composantes du champs vectoriel ou niveaux de gris pour un champ +scalaire. Attention, pour ça, il faudra a priori fiare une projection +du maillage cartesien de l'image sur le maillage (quelconque) sur +lequel on souhaite définir le champ. + +UC04: créer un champ à partir d'un tableau numpy + +De manière générale, ce type de création sera assisté par le +MEDGUI. Au niveau MEDTUI, les fonctions pourraient être fastidieuses +pour l'utilisateur. + +Par exemple, prévoir un menu contextuel qui propose les opérations +possibles en fonction de la sélection (en plus de la fonction d'import +dans la console python). + +TODO: + +* développer les fonctions d'initialisation, par exemple au moyen + d'applyFunc et du mécanisme de callable? + +T20110622.3: documentation contextuel +------------------------------------- + +**Status: à faire** + +* Remettre toutes les commandes dans le même fichier (fusionner cmdtools + et fieldtools) +* Faire un modèle générique de command (classe de base +* Batir la doc des commandes sur cette base (lister toutes les + instances de type Command par exemple) + +T20110622.4: remontée des exception du composant MEDCalculator +-------------------------------------------------------------- + +**Status: en cours, compléter la couverture** + +Pour des messages contextuel sur les erreurs de calcul (ex: division +par 0) + +* Poursuivre le travail fait sur getMedEventListener +* Protéger tous les appels au composants effectués depuis la console + python (prendre example sur la commande save) + +T20110624.1: gestion des données GUI +------------------------------------ + +**Status: à faire** + + + +Le workspace a une entrée dans l'obrowser. Sur cette entrée on peut: + +* supprimer: supprime tout les champs associés +* sauvegarder. Dans ce cas, on rappelle l'ensemble des champs pour + cocher ceux qu'on veut sauvegarder. + +Le gui data model est réservé aux opérations sur les champs et à +piloter leur import dans la console python. + +TODO: + +* Spécifier les concepts de workspace, database, et datasource, espace + de gestion, ... et les associations. Simplifier avec l'appuie de use + cases. +* Mécanisme de mise à jour du TreeView de XSALOME (aujourd'hui, seul + l'ajout addChild est implémenté +* Clic droit sur objets de l'arbre: dans la notification TreeView -> + WorkspaceController, faire remonter l'évènement clic droit ainsi que la + liste des éléments sélectionné pour faire générer le menu contextuel + au niveau du WorkspaceController qui peut déterminer le contexte métier + (le TreeView ne le connaît pas). +* Définir des DataObject pour les maillages, les séries temporelles et + les champs + + +Spécification des espaces de données: + +* MEDDataManager dépend de l'étude (pour permettre la publication + d'information dans une étude SALOME). +* créer "sourcid = MEDDataManager::addDataSource(filename)", suivie de + requetes getFields(sourceid), getMeshes(sourceid) +* les espaces de données: dataspace, workspace. Un seul workspace par + étude, mais autand de datasources que l'on souhaite dans le + dataspace. Les datasources sont rangés dans l'étude (le dataspace) + et sont non modifiables après chargement (référence des sources de + données). + + +T20110628.1: extention à d'autres objets SALOME +----------------------------------------------- + +**Status: suspendu** + +On doit reposer la question de l'existance de l'arbre indépendant +(DockWidget), d'une part, et l'extention aux autres objets (GEOM et +SMESH en particulier) du principe de sélection graphique pour +utilisation dans la console python, d'autre part. + + +T20110628.2: visualisation d'un champ avec PARAVIS +-------------------------------------------------- + +**Status: terminé (pour une première version)** +Suite: de nombreux défauts subsistent + +Questions/remarques: + +* Pb au démarrage du module: VisTrails fails to start +* Peux-t-on piloter la vue 3D sans charger le module? (voir + myparavis.py) +* Comment donner un nom au MEDReader1 dans l'arbre Pipeline? +* Comment utiliser directement les objets MEDCouplingField? + + +T20110706.1: documentation du module +------------------------------------ + +**Status: en cours (10%)** + +Documenter les commandes TUI puis l'utilisation générale de +l'interafce graphique. Mentionner l'existance de la commande medop.sh +pour travailler exclusivement en mode texte (utile pour les tests +rapides). + +Documenter les modalités d'exécution des tests. + +T20110708.1: helper python pour MEDCoupling +------------------------------------------- + +**Status: en attente (pas urgent)** + +Faire un helper python dans le package xmed qui permet de faire du +medcoupling facilement (essentiellement pour simplifier le chargement, +puis la sélection des données). Cela demanderait de faire un +MedDataManager comme une class C++ pure (non CORBA). Cette classe +travaillerait par exemple uniquement avec des id et des liste d'id, et +fournirait des fonctions d'affichage (comme le ``ls`` et le ``la``) +pour obtenir des meta-information. + +Le servant MedDataManager pourrait être une surcouche de cette classe +c++ pure. + +T20110708.2: analyses et tests +------------------------------ + +TODO: + +* créer un fichier de test avec plusieurs pas de temps +* créer un fichier de test avec des groupes de mailles + + +T20110728.1: refactoring MEDDataManager +--------------------------------------- + +Refactoring pour une meilleur association entre FieldHandler et MeshHandler: + +* dans la mesure du possible utiliser les id plutôt que les handler en + arguments des fonctions d'appel des objets +* A chaque champ (FieldHandler), on doit associer un meshid (et de + manière optionnelle un fieldseriesId, si le champ peut être associé + à une serie temporelle. A priori faisable uniquement au chargement + du datasource). +* Pour cela, revoir les fonctions internes newFieldHandler et addField + ou prévoir de les compléter à chaque fois qu'elles sont appelée avec + les informations concernant le meshid. +* addField est utilisée par le MEDCalculator +* Attention au raffraichissement des données handler au niveau du + Workspace. Peut-être le mieux est que les fieldproxy contiennent + uniquement le fieldid, et qu'ils interroge le datamanager à chaque + fois qu'ils ont besoin d'une donnée. Voir aussi les notifications + via le MEDEventListener? **Le plus simple est de faire la mise à + jour lors de l'appel à la méthode __repr__ du fieldproxy, i.e. quand + on essaye d'afficher les données**. Parceque sinon il n'y a pas de + problème puisque que le calculateur travaille à partir des id. + + +Petites améliorations du DataspaceController: + +* Au OnUseInWorkspace, stocker (dans la mesure du possible) le nom de + l'alias python dans un attribut du sobject. +* Dans DlgChangeUnderLyingMesh, expliquer que le champs sera dupliquer + est posé dans le WS. On peut donc proposer en option de lui associer + un alias pour manipulation dans la console + + + diff --git a/src/MEDOP/doc/sphinx/xmed-workingnotes-2012.rst b/src/MEDOP/doc/sphinx/xmed-workingnotes-2012.rst new file mode 100644 index 000000000..011190ef4 --- /dev/null +++ b/src/MEDOP/doc/sphinx/xmed-workingnotes-2012.rst @@ -0,0 +1,84 @@ +.. meta:: + :keywords: maillage, champ, manipulation + :author: Guillaume Boulant + +.. include:: xmed-definitions.rst + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +ANNEXE: Note de travail concernant le chantier XMED 2012 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +.. contents:: Sommaire + :local: + :backlinks: none + + +Analyse preliminaire pour le chantier 2012 +========================================== + +La figure imposée pour le chantier 2012 est l'intégration du nouveau +module de manipulation de champs dans SALOME 6.6 (objectif CEA), en +préparation de la mise en exploitation dans SALOME 7 (objectif EDF). + +L'état actuel est: + +* Un module SALOME de nom MED intégrant les bibliothèques MEDCoupling, + MEDLoader, REMAPPER, mais aussi plusieurs packages logiciels + aujourd'hui obsolètes ou amener à disparaître pour l'échéance + SALOME7 +* Un module SALOME de nom XMED qui fournit les fonctions graphiques + pour la manipulation de champs. +* Ce module XMED utilise le module VISU pour les vue de contrôle. + +La cible est: + +* Un module unique (nom à définir, par exemple MEDOP) débarrassé des + packages logiciels obsolètes et intégrant les fonctions graphiques + (GUI et TUI). +* L'utilisation du module PARAVIS (au lieu de VISU) pour les vues de + contrôle. +* L'intégration de MEDCoupling avec YACS (port MED dans YACS par + exemple). + +A examiner: + +* voir les attendus concernant les ports MED dans YACS +* interface PARAVIS: utilisation du viewer (et de l'API python) sans chargement du GUI + +Tâches de développement +======================= + +20120904: Migrer XMED dans MED +------------------------------ + +Plan de travail: + +* Migration des composants + test + + + +20120904: Nettoyage de XSALOME +------------------------------ + +:status: en cours + +* Supprimer les vieilleries de XSALOME: + + - StdHelper -> Basic_Utils (KERNEL) + +20120829: mise en place du chantier 2012 +---------------------------------------- + +:status: terminé + +L'objectif de cette première étape est de reverser le prototype 2011 +(module XMED indépendant) dans la branche V6_main du module MED. On +peut procéder de la manière suivante: + +* update de XMED (et XSALOME utilisé par XMED) pour fonctionnement sur + V6_main +* Eliminer la dépendance à XSALOME +* Supprimer la gestion des multiversion SALOME5/6 au niveau de l'engine + +.. warning:: TODO: refaire le point sur les tâches initiées en 2011 + diff --git a/src/MEDOP/exe/CMakeLists.txt b/src/MEDOP/exe/CMakeLists.txt new file mode 100644 index 000000000..c02d8344d --- /dev/null +++ b/src/MEDOP/exe/CMakeLists.txt @@ -0,0 +1,21 @@ +# Copyright (C) 2007-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 +# + +ADD_SUBDIRECTORY(appligen) +ADD_SUBDIRECTORY(image2med) diff --git a/src/MEDOP/exe/Makefile.am b/src/MEDOP/exe/Makefile.am new file mode 100644 index 000000000..46d89fc8d --- /dev/null +++ b/src/MEDOP/exe/Makefile.am @@ -0,0 +1,20 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +SUBDIRS=appligen image2med diff --git a/src/MEDOP/exe/appligen/CMakeLists.txt b/src/MEDOP/exe/appligen/CMakeLists.txt new file mode 100644 index 000000000..c73f77fb5 --- /dev/null +++ b/src/MEDOP/exe/appligen/CMakeLists.txt @@ -0,0 +1,39 @@ +# Copyright (C) 2007-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 +# + +SET(MODULE_NAME med) +SET(prefix ${CMAKE_INSTALL_PREFIX}) + +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config_appli_model.xml.in ${CMAKE_CURRENT_BINARY_DIR}/config_appli_model.xml @ONLY) + +SET(MED_RESOURCES_FILES + ${CMAKE_CURRENT_BINARY_DIR}/config_appli_model.xml + appli-splashscreen.jpg + SalomeApp.xml + ) + +INSTALL(FILES ${MED_RESOURCES_FILES} DESTINATION ${MED_salomebin_BINS}/med/appligen) + +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/appligen.sh.in ${CMAKE_CURRENT_BINARY_DIR}/appligen.sh @ONLY) + +SET(MED_RESOURCES_FILES2 + ${CMAKE_CURRENT_BINARY_DIR}/appligen.sh + ) + +INSTALL(FILES ${MED_RESOURCES_FILES2} DESTINATION ${MED_salomebin_BINS}/med/appligen PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ) diff --git a/src/MEDOP/exe/appligen/Makefile.am b/src/MEDOP/exe/appligen/Makefile.am new file mode 100644 index 000000000..edb07c5d6 --- /dev/null +++ b/src/MEDOP/exe/appligen/Makefile.am @@ -0,0 +1,54 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# author: Guillaume Boulant (EDF/R&D, 2012) + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +appligenbindir = $(bindir)/@MODULE_NAME@/appligen + +appligenbin_DATA= \ + envappli.sh \ + config_appli.xml \ + appli-splashscreen.jpg \ + SalomeApp.xml + +appligenbin_SCRIPTS=\ + appligen.sh + +EXTRA_DIST += $(appligenbin_DATA) $(appligenbin_SCRIPTS) + +config_appli.xml: config_appli_model.xml + cat $< | sed \ + -e s~__GEOM_ROOT_DIR__~$(GEOM_ROOT_DIR)~g \ + -e s~__SMESH_ROOT_DIR__~$(SMESH_ROOT_DIR)~g \ + -e s~__BLSURFPLUGIN_ROOT_DIR__~$(BLSURFPLUGIN_ROOT_DIR)~g \ + -e s~__GHS3DPLUGIN_ROOT_DIR__~$(GHS3DPLUGIN_ROOT_DIR)~g \ + -e s~__NETGENPLUGIN_ROOT_DIR__~$(NETGENPLUGIN_ROOT_DIR)~g \ + -e s~__VISU_ROOT_DIR__~$(VISU_ROOT_DIR)~g \ + -e s~__YACS_ROOT_DIR__~$(YACS_ROOT_DIR)~g \ + -e s~__PARAVIS_ROOT_DIR__~$(PARAVIS_ROOT_DIR)~g \ + > tmp; mv tmp $@ + +envappli.sh: + $(srcdir)/genenv.sh envappli.sh + + +mostlyclean-local: + rm -f @builddir@/config_appli.xml @builddir@/envappli.sh diff --git a/src/MEDOP/exe/appligen/README.txt b/src/MEDOP/exe/appligen/README.txt new file mode 100644 index 000000000..133e250e1 --- /dev/null +++ b/src/MEDOP/exe/appligen/README.txt @@ -0,0 +1,25 @@ +This package contains a set of files that can be used to generate a +SALOME application embedding the XMED module (field manipulation). + +The files are created in the directory: + + /bin/salome//appligen + +Where is the installation directory of the XMED +module. + +To generate a SALOME application, just change directory to go +where you want to install the SALOME application and type the +following command in a standard shell (the SALOME environment +is not required, all paths are "hard" coded in the script): + + $ /bin/salome//appligen/appligen.sh + +This script generates an application in a directory ./appli. +Then type the following command to run a SALOME application +embedding your module: + + $ ./appli/runAppli -k + +You may used this appli to test the functions of XMED through the +usage of the GUI module. diff --git a/src/MEDOP/exe/appligen/SalomeApp.xml b/src/MEDOP/exe/appligen/SalomeApp.xml new file mode 100644 index 000000000..9ed9fcc7f --- /dev/null +++ b/src/MEDOP/exe/appligen/SalomeApp.xml @@ -0,0 +1,37 @@ + +
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
+
diff --git a/src/MEDOP/exe/appligen/appli-splashscreen.jpg b/src/MEDOP/exe/appligen/appli-splashscreen.jpg new file mode 100644 index 000000000..2e3387bae Binary files /dev/null and b/src/MEDOP/exe/appligen/appli-splashscreen.jpg differ diff --git a/src/MEDOP/exe/appligen/appligen.sh.in b/src/MEDOP/exe/appligen/appligen.sh.in new file mode 100755 index 000000000..10ad757c1 --- /dev/null +++ b/src/MEDOP/exe/appligen/appligen.sh.in @@ -0,0 +1,47 @@ +#!/bin/sh +# +# This script installs or updates a SALOME application for testing the +# XMED module. The application is installed in the +# directory ./appli. The configuration file is supposed to be adapted +# to your own environment (see config_appli.xml). +# +# To run this script, you should have first configure your +# shell with the SALOME environment, i.e. source the files +# prerequis.sh and envSalome.sh (or equivalent) that fit +# your configuration. You can alternatively customize the env.sh file +# to fit your SALOME environment and let the script do the job (see +# source below). +# +# (gboulant - 3/2/2011) +# + +here=$(dirname $0) + +# Finalize the configuration xml file + + +# +# Run the appli_gen.py +# +APPLIDIR="./appli" +@KERNEL_ROOT_DIR@/bin/salome/appli_gen.py --prefix=$APPLIDIR --config=$here/config_appli.xml + +# +# Copy customized configuration files in the application +# +cp $here/SalomeApp.xml $APPLIDIR/. + +# This write an executable program that run a medop text interface +# (could be usefull for most of the tests and sometimes for real +# works). +write_medop_exe() { + echo '#!/bin/sh' + echo 'appliroot=$(dirname $0)' + echo 'logfile="/tmp/medop.log"' + echo '$appliroot/runAppli -k -t 2>$logfile' + echo 'xterm -e tail -f $logfile &' + echo '$appliroot/runSession "python -i $appliroot/lib/python2.6/site-packages/salome/xmed/medop.py"' +} + +write_medop_exe > $APPLIDIR/medop.sh +chmod +x $APPLIDIR/medop.sh diff --git a/src/MEDOP/exe/appligen/config_appli_model.xml.in b/src/MEDOP/exe/appligen/config_appli_model.xml.in new file mode 100644 index 000000000..1d32ba9bb --- /dev/null +++ b/src/MEDOP/exe/appligen/config_appli_model.xml.in @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/MEDOP/exe/appligen/genenv.sh b/src/MEDOP/exe/appligen/genenv.sh new file mode 100755 index 000000000..0a77ddc16 --- /dev/null +++ b/src/MEDOP/exe/appligen/genenv.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# This script creates a source file that defines a SALOME shell +# environment. We assume here that the SALOME environment has been +# previously set, so that the env command get all environment +# variables required for building and executing SALOME. We talk +# about third party software programs and libraries. The environment +# variables defining SALOME module are exluded (i.e. *_ROOT_DIR) +# because they are automatically set when generating a SALOME application.. +# +# The argument is the filepath to be created. +# + +if [ $# == 1 ]; then + ENVAPPLI_SH=$1 +else + ENVAPPLI_SH=envappli.sh +fi + +function header { + echo "#" + echo "# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + echo "# THIS FILE IS GENERATED from the shell environment used to build the SALOME module." + echo "# IT SHOULD NOT BE EDITED, it is generated for the need of the SALOME application " + echo "# that embeds the module (for test purposes). " + echo "# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + echo "#" +} +header > $ENVAPPLI_SH +env | grep -v -e PWD -e SalomeAppConfig -e _ROOT_DIR | while read f; do + key=$(echo $f | cut -d"=" -f1) + value=$(echo $f | cut -d"=" -f2-) + + # if the key is a path (LD_LIBRARY_PATH, PATH and PYTHONPATH) then + # we must extends the variable. + if [ $key == "LD_LIBRARY_PATH" -o $key == "PATH" -o $key == "PYTHONPATH" ]; then + echo export $key=\"$value:\$$key\" + else + echo export $key=\"$value\" + fi +done >> $ENVAPPLI_SH diff --git a/src/MEDOP/exe/image2med/CMakeLists.txt b/src/MEDOP/exe/image2med/CMakeLists.txt new file mode 100644 index 000000000..c75e7477b --- /dev/null +++ b/src/MEDOP/exe/image2med/CMakeLists.txt @@ -0,0 +1,25 @@ +# Copyright (C) 2007-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 +# + +SET(MED_PYTHON_SCRIPTS + image2med.py + xmedimages.py + ) + +INSTALL(FILES ${MED_PYTHON_SCRIPTS} DESTINATION ${MED_salomebin_BINS}/med PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ) diff --git a/src/MEDOP/exe/image2med/Makefile.am b/src/MEDOP/exe/image2med/Makefile.am new file mode 100644 index 000000000..875dda1f7 --- /dev/null +++ b/src/MEDOP/exe/image2med/Makefile.am @@ -0,0 +1,28 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# author: Guillaume Boulant (EDF/R&D, 2012) + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +toolsbindir = $(bindir)/@MODULE_NAME@ + +dist_toolsbin_SCRIPTS=\ + image2med.py \ + xmedimages.py diff --git a/src/MEDOP/exe/image2med/image2med.py b/src/MEDOP/exe/image2med/image2med.py new file mode 100755 index 000000000..799b90a1c --- /dev/null +++ b/src/MEDOP/exe/image2med/image2med.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# +# Author : Guillaume Boulant (EDF) + +from optparse import OptionParser +parser = OptionParser() +parser.add_option("-i", "--imagefile", dest="imagefile", + help="image file to convert", metavar="FILE") +parser.add_option("-m", "--medfile", dest="medfile", default=None, + help="output med file", metavar="FILE") +(options, args) = parser.parse_args() + +import sys, os +if options.imagefile is None: + print "The image file must be specified" + sys.exit() +imagefile = options.imagefile +if not os.path.exists(imagefile): + print "The image file %s does not exists"%imagefile + sys.exit() + +if options.medfile is None: + basename = os.path.basename(imagefile) + medfile = basename[0:len(basename)-3] + "med" +else: + medfile = options.medfile + +print "Convert image file %s to a med field saved in %s"%(imagefile,medfile) +from xmedimages import FieldBuilder +builder = FieldBuilder() +builder.image2med(imagefile,medfile) diff --git a/src/MEDOP/exe/image2med/xmedimages.py b/src/MEDOP/exe/image2med/xmedimages.py new file mode 100644 index 000000000..ea434b2bd --- /dev/null +++ b/src/MEDOP/exe/image2med/xmedimages.py @@ -0,0 +1,148 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# Author : Guillaume Boulant (EDF) + +import MEDCoupling as MC +import MEDLoader as ML + +from PIL import Image +from PIL import ImageOps +import numpy + +class FieldBuilder: + + def image2med(self, imageFilepath, medFilepath=None): + + # Load the image file in a numpy array using PIL. + img=Image.open(imageFilepath) + imgbw=ImageOps.grayscale(img) + # WARN: We keep only the grayscale. Maybe, it could be usefull + # to get the RGB scales each on one component of the field. + + # Creating a cartesian mesh with a grid of the size of the image + # The sizes defined the number of pixel in a direction, then the + # number of cells to create in the mesh in that direction. + width,height=imgbw.size + mesh=self.createMesh("grid_%sx%s"%(width,height),width,height) + field=self.createField("imagefield",mesh,imgbw) + + # The MEDLoader can be used to save all the stuff in a med file. You + # just have to specify the field and the MEDLoader will save the + # underlying mesh. + createFromScratch=True + ML.MEDLoader.WriteField(medFilepath,field,createFromScratch) + + def createMesh(self, meshname, sizeX, sizeY): + """ + Creating a cartesian mesh with a grid of the size of the image. + sizeX and sizeY should be respectively the width and heigth of the + image. + """ + # >>> + # WARNING: remember the problem of tics and spaces. The data values + # are considered as values defined on cells. With size values in a + # direction, we have to create size+1 mesh nodes in that direction. + # <<< + + # The mesh is created using MEDCoupling + cmesh=MC.MEDCouplingCMesh.New(); + cmesh.setName(meshname) + + # We use an arbitrary step between cells (the value does not matter) + stepX = 0.1 + nbNodesX = sizeX+1 + arrX = [float(i * stepX) for i in range(nbNodesX)] + coordsX=MC.DataArrayDouble.New() + coordsX.setValues(arrX,nbNodesX,1) + + # For the Y dimension, we have to reverse the coordinates (the + # first pixel is at y=height and not at y=0). + stepY = 0.1 + nbNodesY = sizeY+1 + lengthY = sizeY*stepY + arrY=[float(lengthY - i * stepY) for i in range(nbNodesY)] + coordsY=MC.DataArrayDouble.New() + coordsY.setValues(arrY,nbNodesY,1) + + cmesh.setCoords(coordsX,coordsY) + print "Imagem mesh dimension: %d"%cmesh.getSpaceDimension() + + # WARN: In the current state of development of MEDLoader, only + # unstructured meshes are supported for writting function in med + # files. We just have to convert the cartesian mesh in an unstructured + # mesh before creating the field. + umesh=cmesh.buildUnstructured(); + umesh.setName(cmesh.getName()) + + return umesh + + def createField(self, fieldname, mesh, image): + """ + Creating a scalar field on the mesh using image data + """ + # Create the field using MEDCoupling + field = MC.MEDCouplingFieldDouble.New(MC.ON_CELLS,MC.ONE_TIME); + field.setName(fieldname); + field.setMesh(mesh); + # OPTIONAL: We set an arbitrary time step for test purpose + field.setIteration(0); + field.setOrder(0) + + imagedata=list(image.getdata()) + width,height=image.size + nbCells = width*height + dataArray=MC.DataArrayDouble.New(); + nbComponents=1 # For a scalar field + + dataArray.setValues(imagedata,nbCells,nbComponents) + field.setArray(dataArray); + + return field + +# +# =================================================================== +# use case functions +# =================================================================== +# + +def getTestImagePath(): + import os + MED_ROOT_DIR=os.environ["MED_ROOT_DIR"] + RESDIR=os.path.join(MED_ROOT_DIR, "share", "salome", "resources", "med", "medop_testfiles") + imgFileName="irm_test1.png" + imgFilePath=os.path.join(RESDIR,imgFileName) + return imgFilePath + +def TEST_pil(): + imgFilePath = getTestImagePath() + img=Image.open(imageFilepath) + imgbw=ImageOps.grayscale(img) + + +def TEST_image2med(): + imgFilePath = getTestImagePath() + builder = FieldBuilder() + builder.image2med(imgFilePath,"image.med") + +# =================================================================== +if __name__ == "__main__": + TEST_pil() + #TEST_image2med() diff --git a/src/MEDOP/gui/CMakeLists.txt b/src/MEDOP/gui/CMakeLists.txt new file mode 100644 index 000000000..bbc8a9a49 --- /dev/null +++ b/src/MEDOP/gui/CMakeLists.txt @@ -0,0 +1,99 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +ADD_SUBDIRECTORY(dialogs) + +INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/UseQT4EXT.cmake) + +SET(MEDOPGUI_SOURCES + MEDOPFactoryClient.cxx + XmedConsoleDriver.cxx + WorkspaceController.cxx + XmedDataModel.cxx + MEDEventListener_i.cxx + MEDOPModule.cxx + DatasourceController.cxx + factory.cxx +) + +SET(MEDOPGUI_HEADERS MEDOPModule.hxx MEDEventListener_i.hxx WorkspaceController.hxx DatasourceController.hxx) + +QT4_WRAP_CPP(MEDOPGUI_HEADERS_MOC ${MEDOPGUI_HEADERS}) + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${CAS_INCLUDE_DIRS} + ${BOOST_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${KERNEL_ROOT_DIR}/include/salome + ${GUI_ROOT_DIR}/include/salome + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/dialogs + ${CMAKE_CURRENT_BINARY_DIR}/dialogs + ${CMAKE_CURRENT_SOURCE_DIR}/../cmp + ${CMAKE_CURRENT_SOURCE_DIR}/../../MEDGUI + ${CMAKE_BINARY_DIR}/idl + ${CMAKE_BINARY_DIR} +) + +SET(MEDOPGUITS_SOURCES + MEDOP_msg_en.ts + MEDOP_msg_fr.ts +) +SET(COMMON_DEFINITIONS "${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${CAS_DEFINITIONS} ${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS} ${OMNIORB_DEFINITIONS}") +SET(COMMON_FLAGS + ${CAS_KERNEL} + ${QT_MT_LIBS} + ${OMNIORB_LIBS} + ${PLATFORM_LIBS} + ${BOOST_LIBS} + SalomeIDLMED + MEDOPGUI_dialogs + MEDOPFactoryEngine + ${qtx} + ${suit} + ${SalomeObject} + ${SalomeLifeCycleCORBA} + ${SalomeKernelHelpers} + ${SalomeApp} + ${SalomeGuiHelpers} + ${SalomeTreeData} + ${OpUtil} + ${CAM} + ${LightApp} + ${PyConsole} + ${SalomeGuiHelpers} +) + +#-D__WITH_MEDMEMGUI__ libMEDGUI.la +IF(WITH_MEDMEMGUI) + SET(COMMON_DEFINITIONS "${COMMON_DEFINITIONS} -D__WITH_MEDMEMGUI__") + SET(COMMON_FLAGS ${COMMON_FLAGS} MEDGUI) +ENDIF(WITH_MEDMEMGUI) + +ADD_LIBRARY(MEDOPGUI SHARED ${MEDOPGUI_SOURCES} ${MEDOPGUI_HEADERS_MOC}) +SET_TARGET_PROPERTIES(MEDOPGUI PROPERTIES COMPILE_FLAGS ${COMMON_DEFINITIONS}) +TARGET_LINK_LIBRARIES(MEDOPGUI ${COMMON_FLAGS}) + +INSTALL(TARGETS MEDOPGUI DESTINATION ${MED_salomelib_LIBS}) +QT4_INSTALL_TS_RESOURCES("${MEDOPGUITS_SOURCES}" "${MED_salomeres_DATA}") + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${MED_salomeinclude_HEADERS}) + diff --git a/src/MEDOP/gui/DatasourceConstants.hxx b/src/MEDOP/gui/DatasourceConstants.hxx new file mode 100644 index 000000000..77907f9ef --- /dev/null +++ b/src/MEDOP/gui/DatasourceConstants.hxx @@ -0,0 +1,5 @@ + +// This constant strings are used to specify an attribute name for +// AttributeParameter attributes associated to a SObject +#define OBJECT_ID "objectid" +#define OBJECT_IS_IN_WORKSPACE "isInWorkspace" diff --git a/src/MEDOP/gui/DatasourceController.cxx b/src/MEDOP/gui/DatasourceController.cxx new file mode 100644 index 000000000..59f5e1509 --- /dev/null +++ b/src/MEDOP/gui/DatasourceController.cxx @@ -0,0 +1,401 @@ + +// Author : Guillaume Boulant (EDF) + +#include "DatasourceController.hxx" +#include "DatasourceConstants.hxx" + +#include "MEDOPFactoryClient.hxx" +#include "QtHelper.hxx" + +#include CORBA_CLIENT_HEADER(SALOMEDS) +#include +#include + +#include +#include +#include + +#include "DlgAlias.hxx" + +// +// ============================================================== +// Datasource controller +// ============================================================== +// +DatasourceController::DatasourceController(StandardApp_Module * salomeModule) { + STDLOG("Creating a DatasourceController"); + _salomeModule = salomeModule; + _studyEditor = new SALOME_AppStudyEditor(_salomeModule->getApp()); + _dlgChangeUnderlyingMesh = new DlgChangeUnderlyingMesh(_studyEditor); + + connect(_dlgChangeUnderlyingMesh,SIGNAL(inputValidated()), + this, SLOT(OnChangeUnderlyingMeshInputValidated())); + +} + +DatasourceController::~DatasourceController() { + STDLOG("Deleting the DatasourceController"); + delete _studyEditor; +} + +void DatasourceController::createActions() { + // + // Main actions (toolbar and menubar) + // + QString label = QString("Add Data Source"); + QString tooltip = QString("Add a file data source (file providing med data)"); + QString icon = QString("datasource_add.png"); + int actionId; + actionId = _salomeModule->createStandardAction(label,this, SLOT(OnAddDatasource()),icon,tooltip); + _salomeModule->addActionInToolbar(actionId); + + label = QString("Add Image Source"); + tooltip = QString("Create a Data Source from an image file"); + icon = QString("image_add.png"); + actionId = _salomeModule->createStandardAction(label,this, SLOT(OnAddImagesource()),icon,tooltip); + _salomeModule->addActionInToolbar(actionId); + + // + // Actions for popup menu only + // + // Expand field timeseries + label = QString("Expand field timeseries"); + icon = QString("datasource_expandfield.png"); + actionId = _salomeModule->createStandardAction(label,this,SLOT(OnExpandField()),icon); + _salomeModule->addActionInPopupMenu(actionId); + + // Create a control view + label = QString("Visualize"); + icon = QString("datasource_view.png"); + actionId = _salomeModule->createStandardAction(label,this,SLOT(OnVisualize()),icon); + _salomeModule->addActionInPopupMenu(actionId); + + // Use in workspace + label = QString("Use in workspace"); + icon = QString("datasource_use.png"); + actionId = _salomeModule->createStandardAction(label,this,SLOT(OnUseInWorkspace()),icon); + _salomeModule->addActionInPopupMenu(actionId); + + // Change underlying mesh (note that this action creates a new field in + // the workspace that corresponds to a copy of the selected field + // modified by the change of the underlying mesh. + label = QString("Change underlying mesh"); + icon = QString("datasource_changeUnderlyingMesh.png"); + actionId = _salomeModule->createStandardAction(label,this,SLOT(OnChangeUnderlyingMesh()),icon); + _salomeModule->addActionInPopupMenu(actionId); +} + +/** + * This function adds the specified MED file as a datasource in the + * dataspace. Technically speaking, the engine loads the + * meta-information concerning med data from the file, gives this + * informations to the GUI, and the GUI creates a tree view of these + * data in the study object browser. + */ +MEDOP::DatasourceHandler * DatasourceController::addDatasource(const char * filename) { + + MEDOP::DatasourceHandler * datasourceHandler = + MEDOPFactoryClient::getDataManager()->addDatasource(filename); + + // We need a studyEditor updated on the active study + _studyEditor->updateActiveStudy(); + + // Create a datasource SObject as a father of the module root + SALOMEDS::SComponent_var root = _studyEditor->findRoot(QCHARSTAR(_salomeModule->moduleName())); + SALOMEDS::SObject_var soDatasource = _studyEditor->newObject(root); + _studyEditor->setName(soDatasource,datasourceHandler->name); + _studyEditor->setIcon(soDatasource,"datasource.png"); + _studyEditor->setParameterInt(soDatasource,OBJECT_ID,datasourceHandler->id); + + + // We can add the meshes as children of the datasource + MEDOP::MeshHandlerList * meshHandlerList = + MEDOPFactoryClient::getDataManager()->getMeshList(datasourceHandler->id); + + for(CORBA::ULong iMesh=0; iMeshlength(); iMesh++) { + MEDOP::MeshHandler meshHandler = (*meshHandlerList)[iMesh]; + SALOMEDS::SObject_var soMesh = _studyEditor->newObject(soDatasource); + _studyEditor->setName(soMesh,meshHandler.name); + _studyEditor->setIcon(soMesh,"datasource_mesh.png"); + _studyEditor->setParameterInt(soMesh,OBJECT_ID,meshHandler.id); + _studyEditor->setParameterBool(soMesh,OBJECT_IS_IN_WORKSPACE,false); + + + // We add the field timeseries defined on this mesh, as children + // of the mesh SObject + MEDOP::FieldseriesHandlerList * fieldseriesHandlerList = + MEDOPFactoryClient::getDataManager()->getFieldseriesListOnMesh(meshHandler.id); + + for(CORBA::ULong iFieldseries=0; iFieldserieslength(); iFieldseries++) { + MEDOP::FieldseriesHandler fieldseriesHandler = (*fieldseriesHandlerList)[iFieldseries]; + SALOMEDS::SObject_var soFieldseries = _studyEditor->newObject(soMesh); + + std::string label(fieldseriesHandler.name); + label +=" ("+std::string(XmedDataObject::mapTypeOfFieldLabel[fieldseriesHandler.type])+")"; + _studyEditor->setName(soFieldseries,label.c_str()); + + _studyEditor->setIcon(soFieldseries,"datasource_field.png"); + _studyEditor->setParameterInt(soFieldseries,OBJECT_ID,fieldseriesHandler.id); + _studyEditor->setParameterBool(soFieldseries,OBJECT_IS_IN_WORKSPACE,false); + } + } + + return datasourceHandler; +} + + +void DatasourceController::OnAddDatasource() +{ + // Dialog to get the filename where the input data are read from + QStringList filter; + filter.append(QObject::tr("MED files (*.med)")); + + QString filename = SUIT_FileDlg::getFileName(_salomeModule->getApp()->desktop(), + "", + filter, + QObject::tr("Import MED fields"), + true); + + if ( filename.isEmpty() ) return; + + this->addDatasource(QCHARSTAR(filename)); + _salomeModule->updateObjBrowser(true); +} + +#include "DlgImageToMed.hxx" +#include +#include +void DatasourceController::OnAddImagesource() +{ + + DlgImageToMed dialog; + dialog.setAutoLoaded(true); + int choice = dialog.exec(); + if ( choice == QDialog::Rejected ) { + // The user decides to cancel the operation + return; + } + + QString imageFilename = dialog.getImageFilepath(); + QString medFilename = dialog.getMedFilepath(); + bool autoLoad = dialog.isAutoLoaded(); + + std::string ROOT_DIR(getenv("MED_ROOT_DIR")); + std::string command(ROOT_DIR+"/bin/salome/med/image2med.py"); + command += " -i "+QS2S(imageFilename); + command += " -m "+QS2S(medFilename); + int error = system(command.c_str()); + if ( error != 0 ) { + QMessageBox::critical(_salomeModule->getApp()->desktop(), + tr("Operation failed"), + tr("The creation of med data from the image file failed")); + return; + } + + if ( autoLoad ) { + this->addDatasource(QCHARSTAR(medFilename)); + _salomeModule->updateObjBrowser(true); + } + +} + +void DatasourceController::OnExpandField() +{ + // We need a studyEditor updated on the active study + _studyEditor->updateActiveStudy(); + + // Get the selected objects in the study (SObject) + SALOME_StudyEditor::SObjectList * listOfSObject = _studyEditor->getSelectedObjects(); + for (int i=0; isize(); i++) { + SALOMEDS::SObject_var soFieldseries = listOfSObject->at(i); + + // First retrieve the fieldseries id associated to this study object + long fieldseriesId = _studyEditor->getParameterInt(soFieldseries,OBJECT_ID); + STDLOG("Expand the field timeseries "<getFieldListInFieldseries(fieldseriesId); + + // Finally, create an entry for each of the field + for(CORBA::ULong iField=0; iFieldlength(); iField++) { + MEDOP::FieldHandler fieldHandler = (*fieldHandlerList)[iField]; + SALOMEDS::SObject_var soField = _studyEditor->newObject(soFieldseries); + std::string label("it="); label += ToString(fieldHandler.iteration); + _studyEditor->setName(soField,label.c_str()); + _studyEditor->setParameterInt(soField, OBJECT_ID, fieldHandler.id); + _studyEditor->setParameterBool(soField,OBJECT_IS_IN_WORKSPACE,false); + } + } + _salomeModule->updateObjBrowser(true); +} + +void DatasourceController::OnVisualize() { + STDLOG("OnVisualize: To Be Implemented"); + + // We need a _studyEditor updated on the active study + _studyEditor->updateActiveStudy(); + + // Get the selected objects in the study (SObject) + SALOME_StudyEditor::SObjectList * listOfSObject = _studyEditor->getSelectedObjects(); + + // For each object, emit a signal to the workspace to request a + // visualisation using the tui command (so that the user can see how + // to make a view of an object from the tui console). + for (int i=0; isize(); i++) { + SALOMEDS::SObject_var soField = listOfSObject->at(i); + int fieldId = _studyEditor->getParameterInt(soField,OBJECT_ID); + MEDOP::FieldHandler * fieldHandler = MEDOPFactoryClient::getDataManager()->getFieldHandler(fieldId); + + DatasourceEvent * event = new DatasourceEvent(); + event->eventtype = DatasourceEvent::EVENT_VIEW_OBJECT; + XmedDataObject * dataObject = new XmedDataObject(); + dataObject->setFieldHandler(*fieldHandler); + event->objectdata = dataObject; + emit datasourceSignal(event); + } + +} + +void DatasourceController::OnUseInWorkspace() { + // We need a studyEditor updated on the active study + _studyEditor->updateActiveStudy(); + + // Get the selected objects in the study (SObject) + SALOME_StudyEditor::SObjectList * listOfSObject = _studyEditor->getSelectedObjects(); + if ( listOfSObject->size() == 1 ) { + // In this case we ask the name of the variable for the python + // console + + // >>> + // _GBO_ Note that it works only for a single field but the + // XmedDataObject will be improved to deal with mesh, timeseries + // and single field in a futur version. We suppose here that a + // single field has been selected. + // <<< + + SALOMEDS::SObject_var soField = listOfSObject->at(0); + + bool isInWorkspace = _studyEditor->getParameterBool(soField,OBJECT_IS_IN_WORKSPACE); + if ( isInWorkspace ) { + QMessageBox::warning(_salomeModule->getApp()->desktop(), + tr("Operation not allowed"), + tr("This field is already defined in the workspace")); + return; + } + + int fieldId = _studyEditor->getParameterInt(soField,OBJECT_ID); + MEDOP::FieldHandler * fieldHandler = + MEDOPFactoryClient::getDataManager()->getFieldHandler(fieldId); + + QString alias(fieldHandler->fieldname); + DlgAlias dialog; + dialog.setAlias(alias); + int choice = dialog.exec(); + if ( choice == QDialog::Rejected ) { + // The user decides to cancel the operation + return; + } + alias = dialog.getAlias(); + + DatasourceEvent * event = new DatasourceEvent(); + event->eventtype = DatasourceEvent::EVENT_USE_OBJECT; + XmedDataObject * dataObject = new XmedDataObject(); + dataObject->setFieldHandler(*fieldHandler); + event->objectdata = dataObject; + event->objectalias = alias; + emit datasourceSignal(event); + // Tag the item to prevent double import + _studyEditor->setParameterBool(soField,OBJECT_IS_IN_WORKSPACE,true); + // Tag the field as persistent on the server. It means that a + // saving of the workspace will save at least this field (maybe it + // should be an option?) + MEDOPFactoryClient::getDataManager()->markAsPersistent(fieldId, true); + } + else { + // In this case, we don't ask the user to specify an alias for + // each item, we just import the whole set of items. + for (int i=0; isize(); i++) { + SALOMEDS::SObject_var soField = listOfSObject->at(i); + + bool isInWorkspace = _studyEditor->getParameterBool(soField,OBJECT_IS_IN_WORKSPACE); + if ( !isInWorkspace ) { + int fieldId = _studyEditor->getParameterInt(soField,OBJECT_ID); + MEDOP::FieldHandler * fieldHandler = + MEDOPFactoryClient::getDataManager()->getFieldHandler(fieldId); + DatasourceEvent * event = new DatasourceEvent(); + event->eventtype = DatasourceEvent::EVENT_IMPORT_OBJECT; + XmedDataObject * dataObject = new XmedDataObject(); + dataObject->setFieldHandler(*fieldHandler); + event->objectdata = dataObject; + emit datasourceSignal(event); + // Note that this signal is processed by the WorkspaceController + + // Tag the item to prevent double import + _studyEditor->setParameterBool(soField,OBJECT_IS_IN_WORKSPACE,true); + // Tag the field as persistent on the server. It means that a + // saving of the workspace will save at least this field (maybe it + // should be an option?) + MEDOPFactoryClient::getDataManager()->markAsPersistent(fieldId, true); + } + else { + STDLOG("The field "<<_studyEditor->getName(soField)<< + " is already defined in the workspace"); + } + } + } +} + + +void DatasourceController::OnChangeUnderlyingMesh() { + // We need a studyEditor updated on the active study + _studyEditor->updateActiveStudy(); + + // Get the selected objects in the study (SObject). In cas of a + // multiple selection, we consider only the first item. At least one + // item must be selected. + SALOME_StudyEditor::SObjectList * listOfSObject = _studyEditor->getSelectedObjects(); + if ( listOfSObject->size() > 0 ) { + SALOMEDS::SObject_var soField = listOfSObject->at(0); + int fieldId = _studyEditor->getParameterInt(soField,OBJECT_ID); + // _GBO_ : the dialog should not be modal, so that we can choose a + // mesh in the browser. Then we have to emit a signal from the + // dialog.accept, connected to a slot of the DatasourceControler + _dlgChangeUnderlyingMesh->setFieldId(fieldId); + Qt::WindowFlags flags = _dlgChangeUnderlyingMesh->windowFlags(); + _dlgChangeUnderlyingMesh->setWindowFlags(flags | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint); + _dlgChangeUnderlyingMesh->open(); + } +} + +void DatasourceController::OnChangeUnderlyingMeshInputValidated() { + int meshId = _dlgChangeUnderlyingMesh->getMeshId(); + STDLOG("meshId = " << ToString(meshId)); + int fieldId = _dlgChangeUnderlyingMesh->getFieldId(); + MEDOP::FieldHandler * fieldHandler = + MEDOPFactoryClient::getDataManager()->getFieldHandler(fieldId); + + // We don't modify the original field but create first a duplicate + MEDOP::FieldHandler * duplicate = MEDOPFactoryClient::getCalculator()->dup(*fieldHandler); + MEDOPFactoryClient::getDataManager()->changeUnderlyingMesh(duplicate->id, meshId); + + // Request once more the duplicate to update the meta-data on this + // client side + duplicate = MEDOPFactoryClient::getDataManager()->getFieldHandler(duplicate->id); + + // >>> + // WARN: the following is a temporary code for test purpose + // Automatically add in ws + DatasourceEvent * event = new DatasourceEvent(); + event->eventtype = DatasourceEvent::EVENT_IMPORT_OBJECT; + XmedDataObject * dataObject = new XmedDataObject(); + dataObject->setFieldHandler(*duplicate); + event->objectdata = dataObject; + emit datasourceSignal(event); + // Note that this signal is processed by the WorkspaceController + + // Tag the item to prevent double import + //_studyEditor->setParameterBool(soField,OBJECT_IS_IN_WORKSPACE,true); + + +} diff --git a/src/MEDOP/gui/DatasourceController.hxx b/src/MEDOP/gui/DatasourceController.hxx new file mode 100644 index 000000000..2848c10f8 --- /dev/null +++ b/src/MEDOP/gui/DatasourceController.hxx @@ -0,0 +1,83 @@ + +// Author : Guillaume Boulant (EDF) + +#ifndef DATASOURCE_CONTROLLER_H +#define DATASOURCE_CONTROLLER_H + +#include +#include CORBA_CLIENT_HEADER(MEDDataManager) +#include +#include + +#include + +#include "XmedDataModel.hxx" +#include "DlgChangeUnderlyingMesh.hxx" +#include "MEDOPGUI.hxx" +// +// The DatasourceController defines data structures and classes to +// manage the usage of objects in the data space. The data space is +// technically the study, whose graphical representation is the +// objects browser. +// + +// A datasource event is used by the DatasourceController to notify a +// job to the Workspace controller (Qt signal/slot pattern connected +// by the main controller MEDOPModule). The setting of attributes and +// usage of these attributes in the WorkspaceController depends on the +// event type. For example, in the case of a IMPORT event, we just +// have to transmit the object, while in the USE event we have to +// transmit an object AND an alias. +typedef struct { + enum EventType { + // + EVENT_IMPORT_OBJECT, // Simply import the object in the workspace + EVENT_USE_OBJECT, // Import in the workspace AND define a proxy + // variable in the tui console to use it + EVENT_VIEW_OBJECT // View with a salome viewer (SMESH/VISU/PARAVIS) + }; + int eventtype; + XmedDataObject * objectdata; + QString objectalias; +} DatasourceEvent; + +// +// ============================================================== +// Datasource controller +// ============================================================== +// +class MEDOPGUI_EXPORT DatasourceController: public QObject { + Q_OBJECT + +public: + DatasourceController(StandardApp_Module * salomeModule); + ~DatasourceController(); + + void createActions(); + MEDOP::DatasourceHandler * addDatasource(const char * filename); + +public slots: + // Callback connected to dialog box validation signals + void OnChangeUnderlyingMeshInputValidated(); + +signals: + void datasourceSignal(const DatasourceEvent * event); + +protected slots: + void OnAddDatasource(); + void OnAddImagesource(); + void OnExpandField(); + void OnVisualize(); + void OnUseInWorkspace(); + void OnChangeUnderlyingMesh(); + + +private: + StandardApp_Module * _salomeModule; + SALOME_AppStudyEditor * _studyEditor; + + DlgChangeUnderlyingMesh * _dlgChangeUnderlyingMesh; + +}; + +#endif diff --git a/src/MEDOP/gui/MEDEventListener_i.cxx b/src/MEDOP/gui/MEDEventListener_i.cxx new file mode 100644 index 000000000..2d5d631c4 --- /dev/null +++ b/src/MEDOP/gui/MEDEventListener_i.cxx @@ -0,0 +1,59 @@ +// Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +// +// 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 +// +// Authors : Guillaume Boulant (EDF) - 01/06/2011 + +#include "MEDEventListener_i.hxx" +#include + +MEDEventListener_i * MEDEventListener_i::_instance = NULL; +MEDEventListener_i * MEDEventListener_i::getInstance() { + // _GBO_ we will certainly need to define one EventListener per + // DataManager or SALOME study and not one singleton for the whole + // session + if ( _instance == NULL ) { + _instance = new MEDEventListener_i(); + } + return _instance; +} + +void MEDEventListener_i::release() { + delete _instance; +} + +MEDEventListener_i::MEDEventListener_i() +{ + LOG("Creating a MEDEventListener_i instance"); +} +MEDEventListener_i::~MEDEventListener_i() +{ + LOG("Deleting MEDEventListener_i instance"); +} + +void MEDEventListener_i::processMedEvent(const MEDOP::MedEvent & event) { + LOG("Start processing event for field id="< +#include CORBA_SERVER_HEADER(MEDEventListener) +#include "SALOME_GenericObj_i.hh" + +#include "MEDOPGUI.hxx" + +#include + +// Multiple inheritance requires QObject to be first +class MEDOPGUI_EXPORT MEDEventListener_i: public QObject, + public POA_MEDOP::MEDEventListener, + public SALOME::GenericObj_i + +{ + Q_OBJECT + +public: + + // + // =========================================================== + // Functions specified in the IDL interface + // =========================================================== + // + void processMedEvent(const MEDOP::MedEvent & event); + + // + // =========================================================== + // Other public functions (non available via CORBA) + // =========================================================== + // + static MEDEventListener_i * getInstance(); + static void release(); + +signals: + //void medEventSignal(); + void medEventSignal(const MEDOP::MedEvent * event); + + +private: + MEDEventListener_i(); + ~MEDEventListener_i(); + + static MEDEventListener_i * _instance; + +}; + +#endif // _MED_EVENTLISTENER_I_HXX_ + diff --git a/src/MEDOP/gui/MEDOPFactoryClient.cxx b/src/MEDOP/gui/MEDOPFactoryClient.cxx new file mode 100644 index 000000000..bf20354ac --- /dev/null +++ b/src/MEDOP/gui/MEDOPFactoryClient.cxx @@ -0,0 +1,43 @@ + +// Author : Guillaume Boulant (EDF) + +#include "MEDOPFactoryClient.hxx" +#include "SALOME_KernelServices.hxx" + +namespace MEDOPFactoryClient { + + /*! + * This returns a singleton (static) instance of the XMED engine. + */ + MEDOP::MEDOPFactory_ptr getFactory() { + static MEDOP::MEDOPFactory_ptr engine; + if(CORBA::is_nil(engine)){ + Engines::EngineComponent_var component = + KERNEL::getLifeCycleCORBA()->FindOrLoad_Component( "FactoryServer","MEDOPFactory" ); + engine = MEDOP::MEDOPFactory::_narrow(component); + } + return engine; + } + + /*! + * This returns a singleton (static) instance of the XMED data manager. + */ + MEDOP::MEDDataManager_ptr getDataManager() { + static MEDOP::MEDDataManager_ptr dataManager; + if(CORBA::is_nil(dataManager)){ + dataManager = getFactory()->getDataManager(); + } + return dataManager; + } + + /*! + * This returns a singleton (static) instance of the XMED calculator. + */ + MEDOP::MEDCalculator_ptr getCalculator() { + static MEDOP::MEDCalculator_ptr calculator; + if(CORBA::is_nil(calculator)){ + calculator = getFactory()->getCalculator(); + } + return calculator; + } +} diff --git a/src/MEDOP/gui/MEDOPFactoryClient.hxx b/src/MEDOP/gui/MEDOPFactoryClient.hxx new file mode 100644 index 000000000..9d3f27308 --- /dev/null +++ b/src/MEDOP/gui/MEDOPFactoryClient.hxx @@ -0,0 +1,47 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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 +// + +// Author : Guillaume Boulant (EDF) + +#ifndef _MEDOPFACTORY_CLIENT_HXX_ +#define _MEDOPFACTORY_CLIENT_HXX_ + + +#include +#include CORBA_CLIENT_HEADER(MEDOPFactory) +#include CORBA_CLIENT_HEADER(MEDDataManager) +#include CORBA_CLIENT_HEADER(MEDCalculator) + +#include "MEDOPGUI.hxx" + +// This helper manages static variables binded on main objects of the +// XMED context, so that they could be initialized once and shared in +// the whole gui context. It prevents to defined an attribute in each +// class while this instance are singleton instances. + +namespace MEDOPFactoryClient { + MEDOPGUI_EXPORT MEDOP::MEDOPFactory_ptr getFactory(); + MEDOPGUI_EXPORT MEDOP::MEDDataManager_ptr getDataManager(); + MEDOPGUI_EXPORT MEDOP::MEDCalculator_ptr getCalculator(); +} + +#endif // _MEDOPFACTORY_CLIENT_HXX_ diff --git a/src/MEDOP/gui/MEDOPGUI.hxx b/src/MEDOP/gui/MEDOPGUI.hxx new file mode 100755 index 000000000..cf21f0780 --- /dev/null +++ b/src/MEDOP/gui/MEDOPGUI.hxx @@ -0,0 +1,33 @@ +// Copyright (C) 2007-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 MEDOPGUI_HXX_ +#define MEDOPGUI_HXX_ + +#ifdef WIN32 +# if defined MEDOPGUI_EXPORTS +# define MEDOPGUI_EXPORT __declspec( dllexport ) +# else +# define MEDOPGUI_EXPORT __declspec( dllimport ) +# endif +#else +# define MEDOPGUI_EXPORT +#endif + +#endif //MEDOPGUI_HXX_ diff --git a/src/MEDOP/gui/MEDOPModule.cxx b/src/MEDOP/gui/MEDOPModule.cxx new file mode 100644 index 000000000..1afb278e4 --- /dev/null +++ b/src/MEDOP/gui/MEDOPModule.cxx @@ -0,0 +1,112 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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 +// + +// Author : Guillaume Boulant (EDF) + +#include "MEDOPModule.hxx" +#include "QtHelper.hxx" + +#include +#include CORBA_CLIENT_HEADER(SALOMEDS) + +#include "MEDOPFactoryClient.hxx" + +MEDOPModule::MEDOPModule() : + StandardApp_Module(), + LightApp_Module("MED") +{ + // Note that the explicit call to the constructor of LightApp_Module + // is needed because the class LightApp_Module does not have + // canonical constructor (with no arguments). + + // Note also that we can't use the getApp() function here because + // the initialize(...) function has not been called yet. + + this->setModuleName("MED"); +} + +// +// ===================================================================== +// This part implements the mandatory interface +// ===================================================================== +// + +/*! + * Returns the engine of the XMED module, i.e. the SALOME component + * associated to the study root of the module. + */ +Engines::EngineComponent_ptr MEDOPModule::getEngine() const { + return MEDOPFactoryClient::getFactory(); +} + +/*! + * Returns the base file name of the image used for the icon's + * module. The file is supposed to be located in the resource + * directory of the module. + */ +QString MEDOPModule::studyIconName() { + return QString("MEDOP_small.png"); +} + +// +// ===================================================================== +// This part add custom widgets (a dockwidget containing a tree view +// in this example) and add special actions in the toolbox of the +// module. +// ===================================================================== +// + +/*! + * This function implements the interface StandardApp_Module. It + * creates the widgets specific for this module, in particular the + * workspace widget and the dataspace widget. + */ +void MEDOPModule::createModuleWidgets() { + _datasourceController = new DatasourceController(this); + _workspaceController = new WorkspaceController(this); + _xmedDataModel = new XmedDataModel(); + _workspaceController->setDataModel(_xmedDataModel); + + connect(_datasourceController, SIGNAL(datasourceSignal(const DatasourceEvent *)), + _workspaceController, SLOT(processDatasourceEvent(const DatasourceEvent *))); +} + +bool MEDOPModule::activateModule( SUIT_Study* theStudy ) +{ + bool bOk = StandardApp_Module::activateModule( theStudy ); + _workspaceController->showDockWidgets(true); + this->setDockLayout(StandardApp_Module::DOCKLAYOUT_LEFT_VLARGE); + return bOk; +} +bool MEDOPModule::deactivateModule( SUIT_Study* theStudy ) +{ + _workspaceController->showDockWidgets(false); + this->unsetDockLayout(); + return StandardApp_Module::deactivateModule( theStudy ); +} + +void MEDOPModule::createModuleActions() { + // Creating actions concerning the dataspace + _datasourceController->createActions(); + // Creating actions concerning the workspace + _workspaceController->createActions(); +} diff --git a/src/MEDOP/gui/MEDOPModule.hxx b/src/MEDOP/gui/MEDOPModule.hxx new file mode 100644 index 000000000..8de56bf97 --- /dev/null +++ b/src/MEDOP/gui/MEDOPModule.hxx @@ -0,0 +1,67 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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 +// + +// Author : Guillaume Boulant (EDF) + +#ifndef _MEDOP_MODULE_HXX_ +#define _MEDOP_MODULE_HXX_ + +#include "StandardApp_Module.hxx" + +#include "WorkspaceController.hxx" +#include "XmedDataModel.hxx" +#include "DatasourceController.hxx" + +#include +#include CORBA_SERVER_HEADER(SALOME_Component) + +#include "MEDOPGUI.hxx" + +/*! + * This class defines the gui of the MEDOP module. + */ +class MEDOPGUI_EXPORT MEDOPModule: public StandardApp_Module +{ + Q_OBJECT + + // =========================================================== + // This part implements the standard interface of a SALOME gui + // =========================================================== + +public: + MEDOPModule(); + +protected: + virtual Engines::EngineComponent_ptr getEngine() const; + virtual QString studyIconName(); + virtual void createModuleWidgets(); + virtual void createModuleActions(); + virtual bool activateModule( SUIT_Study* theStudy ); + virtual bool deactivateModule( SUIT_Study* theStudy ); + +private: + DatasourceController * _datasourceController; + WorkspaceController * _workspaceController; + XmedDataModel * _xmedDataModel; +}; + +#endif diff --git a/src/MEDOP/gui/MEDOP_msg_en.ts b/src/MEDOP/gui/MEDOP_msg_en.ts new file mode 100644 index 000000000..d7a01e60c --- /dev/null +++ b/src/MEDOP/gui/MEDOP_msg_en.ts @@ -0,0 +1,116 @@ + + + @default + + TOOL_XMED + XMED + + + TLT_MY_NEW_ITEM + My menu item + + + TLT_LOAD_DXF + Load DXF file + + + MEN_LOAD_DXF + Load DXF file + + + STS_LOAD_DXF + Load DXF file + + + TLT_GET_BANNER + Get XMED banner + + + STS_MY_NEW_ITEM + Call my menu item + + + MEN_FILE_XMED + Xmed + + + MEN_GET_BANNER + Get banner + + + MEN_FILE + &File + + + STS_GET_BANNER + Get XMED banner + + + TLT_BUILDER1 + Create base vectors Vx, Vy, Vz + + + TLT_BUILDER2 + Create connected edges (arcs and lines) + + + TLT_BUILDER3 + Load a python script + + + STS_BUILDER1 + Create base vectors Vx, Vy, Vz + + + STS_BUILDER2 + Create connected edges (arcs and lines) + + + STS_BUILDER3 + Load a python script + + + MEN_BUILDER1 + Create base vectors Vx, Vy, Vz + + + MEN_BUILDER2 + Create connected edges (arcs and lines) + + + MEN_BUILDER3 + Load a python script + + + MEN_XMED + XMED + + + MEN_MY_NEW_ITEM + My menu item + + + + XMEDGUI_maquette + + BUT_OK + OK + + + QUE_XMED_LABEL + Name Import + + + QUE_XMED_NAME + Please, Enter your name + + + INF_XMED_BANNER + XMED Information + + + INF_XMED_MENU + This is just a test + + + diff --git a/src/MEDOP/gui/MEDOP_msg_fr.ts b/src/MEDOP/gui/MEDOP_msg_fr.ts new file mode 100644 index 000000000..905d9fc6b --- /dev/null +++ b/src/MEDOP/gui/MEDOP_msg_fr.ts @@ -0,0 +1,92 @@ + + + @default + + TLT_MY_NEW_ITEM + My menu item + + + TLT_GET_BANNER + Get XMED banner + + + TOOL_XMED + XMED + + + STS_MY_NEW_ITEM + Call my menu item + + + MEN_FILE_XMED + Hello + + + MEN_GET_BANNER + Get banner + + + MEN_FILE + &File + + + STS_GET_BANNER + Get XMED banner + + + TLT_BUILDER1 + Create base vectors Vx, Vy, Vz + + + TLT_BUILDER2 + Create connected edges (arcs and lines) + + + STS_BUILDER1 + Create base vectors Vx, Vy, Vz + + + STS_BUILDER2 + Create connected edges (arcs and lines) + + + MEN_BUILDER1 + Create base vectors Vx, Vy, Vz + + + MEN_BUILDER2 + Create connected edges (arcs and lines) + + + MEN_XMED + XMED + + + MEN_MY_NEW_ITEM + My menu item + + + + XMEDGUI + + BUT_OK + OK + + + QUE_XMED_LABEL + Import Prénom + + + QUE_XMED_NAME + Entrez votre prénom, s'il vous plait + + + INF_XMED_BANNER + Information XMED + + + INF_XMED_MENU + Ceci est un simple test + + + diff --git a/src/MEDOP/gui/Makefile.am b/src/MEDOP/gui/Makefile.am new file mode 100644 index 000000000..0c6619963 --- /dev/null +++ b/src/MEDOP/gui/Makefile.am @@ -0,0 +1,125 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# author: Guillaume Boulant (EDF/R&D, 2012) + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SUBDIRS = dialogs + +# +# --------------------------------------------------------- +# Generation rules to create moc files from QObject headers +# and form source files from ui files +# --------------------------------------------------------- +# WRN: this rules could be integrated in the make_common_starter.am. +# For that, we first have to make the naming convention of Q_OBJECT +# files be the same between MEDGUI (old GUI) and MEDOP/gui (new GUI). +%_moc.cxx: %.hxx + $(MOC) $< -o $@ + +%.qm: %.ts + $(LRELEASE) $< -qm $@ + +EXTRA_DIST+=$(MOC_FILES:%_moc.cxx=%.hxx) $(nodist_salomeres_DATA:%.qm=%.ts) + +mostlyclean-local: + rm -f @builddir@/*_moc.cxx + rm -f @builddir@/*.qm + +# Libraries targets +lib_LTLIBRARIES = libMEDOPGUI.la + +salomeinclude_HEADERS = \ + MEDOPFactoryClient.hxx \ + XmedConsoleDriver.hxx \ + WorkspaceController.hxx \ + XmedDataModel.hxx \ + MEDEventListener_i.hxx \ + MEDOPModule.hxx \ + DatasourceController.hxx \ + DatasourceConstants.hxx \ + MEDOPGUI.hxx + +dist_libMEDOPGUI_la_SOURCES = \ + MEDOPFactoryClient.cxx \ + XmedConsoleDriver.cxx \ + WorkspaceController.cxx \ + XmedDataModel.cxx \ + MEDEventListener_i.cxx \ + MEDOPModule.cxx \ + DatasourceController.cxx \ + factory.cxx + +# MOC pre-processing +MOC_FILES = \ + MEDOPModule_moc.cxx \ + MEDEventListener_i_moc.cxx \ + WorkspaceController_moc.cxx \ + DatasourceController_moc.cxx + +nodist_libMEDOPGUI_la_SOURCES = $(MOC_FILES) + +OMNIORB_CXXFLAGS=@CORBA_CXXFLAGS@ @CORBA_INCLUDES@ +OMNIORB_LIBS=@OMNIORB_LIBS@ + +QT_CXXFLAGS = @QT_INCLUDES@ @QT_MT_INCLUDES@ +QT_LDFLAGS = $(QT_MT_LIBS) + +CAS_CXXFLAGS = @CAS_CPPFLAGS@ @CAS_CXXFLAGS@ + +BOOST_CXXFLAGS=@BOOST_CPPFLAGS@ + +libMEDOPGUI_la_CPPFLAGS = \ + $(QT_CXXFLAGS) \ + $(CAS_CXXFLAGS) \ + $(OMNIORB_CXXFLAGS) \ + $(BOOST_CXXFLAGS) \ + $(KERNEL_CXXFLAGS) \ + $(GUI_CXXFLAGS) \ + $(MED_CXXFLAGS) \ + -I$(srcdir)/dialogs \ + -Idialogs \ + -I$(srcdir)/../cmp \ + -I$(top_builddir)/idl \ + -I$(top_builddir) + +libMEDOPGUI_la_LDFLAGS = \ + -no-undefined -version-info=0:0:0 \ + $(KERNEL_LDFLAGS) -lSalomeLifeCycleCORBA -lSalomeKernelHelpers \ + $(GUI_LDFLAGS) -lSalomeApp -lSalomeGuiHelpers -lSalomeTreeData \ + $(QT_LDFLAGS) \ + $(BOOST_LIBS) \ + $(OMNIORB_LIBS) + +# Specify MED internal libraries to be linked in +libMEDOPGUI_la_LIBADD = \ + $(top_builddir)/idl/libSalomeIDLMED.la \ + dialogs/libMEDOPGUI_dialogs.la \ + ../cmp/libMEDOPFactoryEngine.la + +if WITH_MEDMEMGUI +libMEDOPGUI_la_CPPFLAGS += "-D__WITH_MEDMEMGUI__" -I$(top_srcdir)/src/MEDGUI +libMEDOPGUI_la_LIBADD += $(top_builddir)/src/MEDGUI/libMEDGUI.la +endif + +# resources files +nodist_salomeres_DATA = \ + MEDOP_msg_en.qm \ + MEDOP_msg_fr.qm diff --git a/src/MEDOP/gui/WorkspaceController.cxx b/src/MEDOP/gui/WorkspaceController.cxx new file mode 100644 index 000000000..ccca4b52e --- /dev/null +++ b/src/MEDOP/gui/WorkspaceController.cxx @@ -0,0 +1,441 @@ + +// Author : Guillaume Boulant (EDF) + +#include "WorkspaceController.hxx" +#include "QtHelper.hxx" +#include "MEDOPFactoryClient.hxx" +#include "XmedDataModel.hxx" +#include "DlgAlias.hxx" + +#include +#include CORBA_CLIENT_HEADER(MEDEventListener) + +#include +#include +#include +#include + +/*! + * This class defines a DockWidget plugged in the SALOME application, + * and containing a tree view for rendering a hierarchical data + * model. This datamodel contains the objects used in the workspace. + */ +WorkspaceController::WorkspaceController(StandardApp_Module * salomeModule) + : TreeGuiManager(salomeModule->getApp(), "Workspace") +{ + _salomeModule = salomeModule; + + this->tabifyDockWidgets(false); + + // ------------------------------------------------------------- + // Setup the MEDEventListener to manage notification from the + // python console. + + // We create a MEDEventListener CORBA object inside this GUI class + // with the role of listening events coming from the python console + // (or even the components if needed). The events arising in the + // python console are send as CORBA request to this CORBA + // servant. Then this object can process the event by notifying the + // GUI of something to update for example (using signals and slots + // of course). + _medEventListener = MEDEventListener_i::getInstance(); + MEDOP::MEDEventListener_ptr medEventListenerServant = _medEventListener->_this(); + + // We store the IOR inside the MEDDataManager to share this data + // with other parts of the application, in particular the python + // console that could retrieve this IOR using the + // getEventListenerIOR() function of the MEDDataManager. + SalomeApp_Application * salomeApp = salomeModule->getApp(); + const char * medEventListenerIOR = + salomeApp->orb()->object_to_string(medEventListenerServant); + MEDOPFactoryClient::getDataManager()->setEventListenerIOR(medEventListenerIOR); + + // Connect the signals emitted from the MEDEventListener to slot of + // this class. + connect(_medEventListener, SIGNAL(medEventSignal(const MEDOP::MedEvent*)), + this, SLOT(processMedEvent(const MEDOP::MedEvent*))); + // >>> WARN: + // Note that this class must be mocked (Q_OBJECT + moc file + // generated from header file) so that to be able to connect a + // signal to a slot of this class. + + // ------------------------------------------------------------- + // Customize the treeview rendering the datamodel with specific + // action for the popup menu + this->getDataTreeView()->clearActions(); + _actionIds.display = this->getDataTreeView()->addAction(QObject::tr("Visualiser (une carte scalaire)")); + _actionIds.useInTui = this->getDataTreeView()->addAction(QObject::tr("Utiliser (dans la console)")); + _actionIds.exportToPv = this->getDataTreeView()->addAction(QObject::tr("Exporter (vers PARAVIS)")); + _actionIds.save = this->getDataTreeView()->addAction(QObject::tr("Sauvegarder (dans un fichier med)")); + _actionIds.remove = this->getDataTreeView()->addAction(QObject::tr("Supprimer (de lespace de travail)")); + + // ------------------------------------------------------------- + // Initialize the python console. Note that this must be done at + // last because the setup will try to initiate a connection to the + // event listener. + _consoleDriver = new XmedConsoleDriver(salomeApp); + _consoleDriver->setup(); +} + +WorkspaceController::~WorkspaceController() { + MEDEventListener_i::release(); +} + +/** + * This creates the GUI actions for driving the Workspace. The + * WorkspaceController creates itself this actions and implements the + * connected slots. + */ +void WorkspaceController::createActions() { + + QString label = QString("Save workspace"); + QString tooltip = QString("Save the workspace (fields and meshes) in a med file"); + QString icon = QString("workspace_save.png"); + int actionId = _salomeModule->createStandardAction(label,this,SLOT(OnSaveWorkspace()),icon,tooltip); + _salomeModule->addActionInToolbar(actionId); + + label = QString("Clean workspace"); + tooltip = QString("Clean all data in the workspace"); + icon = QString("workspace_clean.png"); + actionId = _salomeModule->createStandardAction(label,this,SLOT(OnCleanWorkspace()),icon,tooltip); + _salomeModule->addActionInToolbar(actionId); +} + +/*! + * Implementation of the slot processItemList inherited from TreeGuiManager + */ +void WorkspaceController::processItemList(QStringList itemNameIdList, int actionId) { + if ( actionId == _actionIds.display ) { + STDLOG("WorkspaceController::processItemList: display"); + this->_viewItemList(itemNameIdList); + } + else if ( actionId == _actionIds.useInTui ) { + STDLOG("WorkspaceController::processItemList: use"); + this->_importItemList(itemNameIdList); + } + else if ( actionId == _actionIds.exportToPv ) { + STDLOG("WorkspaceController::processItemList: export"); + this->_exportItemList(itemNameIdList); + } + else if ( actionId == _actionIds.save ) { + STDLOG("WorkspaceController::processItemList: save"); + this->_saveItemList(itemNameIdList); + } + else if ( actionId == _actionIds.remove ) { + STDLOG("WorkspaceController::processItemList: remove"); + } + else { + STDLOG("WorkspaceController::processItemList: ERR : action unknown "); + } +} + +/*! + * This function import in the console all the fields associated to + * the model items of the specified list. "Import a fields" means + * "define a field proxy variable in the python context to manipulate + * the real field in the database". + */ +void WorkspaceController::_importItemList(QStringList itemNameIdList) { + LOG("WorkspaceController: signal received : display item list "<_importItem(itemNameId); + } +} + +/*! + * This function is the unit function used to import field in the + * console (see _importItemList). + */ +void WorkspaceController::_importItem(QString itemNameId) { + XmedDataModel * dataModel = (XmedDataModel *)this->getDataModel(); + if ( dataModel == NULL ) { + LOG("No data model associated to this tree view"); + return; + } + + // We can request the dataModel to obtain the dataObject associated + // to this item (iteNameId is a TreeView id, Qt stuff only). + XmedDataObject * dataObject = + (XmedDataObject *)dataModel->getDataObject(QS2S(itemNameId)); + + if ( dataObject == NULL ) { + LOG("WorkspaceController: WARN! No data object associated to the item "<getFieldHandler(); + STDLOG("Field: mesh="<meshname<<" name="<fieldname); + + // Finally, we can import the field + bool askForOptions = true; + _importFieldIntoConsole(fieldHandler, askForOptions); +} + +/** + * This function import the specified field into the tui console. This + * means to define a field proxy variable in the python context to + * manipulate the field. We can raise a gui to specify some import + * options or simply specify the alias (i.e. the name of the python + * variable). + */ +void WorkspaceController::_importFieldIntoConsole(MEDOP::FieldHandler * fieldHandler, + bool askForOptions, + const char * alias) +{ + STDLOG("alias="<fieldname); + } + else { + effectiveAlias = new QString(alias); + } + + // We can propose to the user to specify some additionnal + // informations concerning what must be imported. + // + // In this version, we just ask the alias the field will be + // manipulated with. The default alias is the field name. This alias + // should be asked to the user to get a short name to manipulate. + if ( askForOptions ) { + DlgAlias dialog; + dialog.setAlias(*effectiveAlias); + int choice = dialog.exec(); + if ( choice == QDialog::Rejected ) { + // The user decides to cancel the operation + return; + } + *effectiveAlias = dialog.getAlias(); + } + + // + // Then, the list of python commands can be written and executed to + // define the field in the console + // + QStringList commands; + commands+=QString("%1=xmed.fieldproxy.newFieldProxy(fieldHandlerId=%2)") + .arg(*effectiveAlias) + .arg(fieldHandler->id); + + _consoleDriver->exec(commands); +} + +/*! + * This function is a Qt slot connected to the signal medEventSignal + * emitted from the MEDEventListener. It processes events coming from + * the python console. + */ +void WorkspaceController::processMedEvent(const MEDOP::MedEvent * event) { + STDLOG("WorkspaceController::processMedEvent"); + STDLOG("fieldid :"<fieldid); + + XmedDataModel * dataModel = (XmedDataModel *)this->getDataModel(); + if ( dataModel == NULL ) { + STDLOG("No data model associated to this tree view"); + return; + } + + if ( event->type == MEDOP::EVENT_ADDNEW_FIELD ) { + STDLOG("add new field"); + MEDOP::FieldHandler * fieldHandler = + MEDOPFactoryClient::getDataManager()->getFieldHandler(event->fieldid); + + XmedDataObject * dataObject = (XmedDataObject *)dataModel->newDataObject(); + dataObject->setFieldHandler(*fieldHandler); + this->getDataTreeModel()->addData(dataObject); + } + +} + +/*! + * This function save a list of fields in a med file. The med file + * name is requested to the user using a file chooser dialog box + */ +void WorkspaceController::_saveItemList(QStringList itemNameIdList) { + XmedDataProcessor * dataProcessor = new XmedDataProcessor(this->getDataModel()); + dataProcessor->process(itemNameIdList); + MEDOP::FieldIdList_var fieldIdList = dataProcessor->getResultingFieldIdList(); + delete dataProcessor; + + QStringList filter; + filter.append(QObject::tr("MED files (*.med)")); + QString filename = SUIT_FileDlg::getFileName(_salomeModule->getApp()->desktop(), + "", + filter, + QObject::tr("Save selected fields"), + false); + + if ( filename.isEmpty() ) return; + + MEDOPFactoryClient::getDataManager()->saveFields(QCHARSTAR(filename), fieldIdList); +} + +/** + * This function export the list of specified field item to PARAVIS + * module. This consists in create a med file gathering the selected + * items, then to import this file in PARAVIS, and finally to create a + * scalar map of the first item to start the job. + */ +void WorkspaceController::_exportItemList(QStringList itemNameIdList) { + XmedDataProcessor * dataProcessor = new XmedDataProcessor(this->getDataModel()); + dataProcessor->process(itemNameIdList); + MEDOP::FieldIdList_var fieldIdList = dataProcessor->getResultingFieldIdList(); + delete dataProcessor; + + // _GBO_ We use a temporary file to proceed with this export to + // paravis. I'm sure it could be better in a futur version or when I + // will get a better understanding of paravis API. + const char * tmpfilename = "/tmp/medop_export2paravis.med"; + MEDOPFactoryClient::getDataManager()->saveFields(tmpfilename, fieldIdList); + + // We import the whole file but create a scalar map for the first + // selected field only (it's just an export to continue the job in + // paravis) + XmedDataModel * dataModel = (XmedDataModel *)this->getDataModel(); + if ( dataModel == NULL ) { + STDLOG("No data model associated to this tree view"); + return; + } + QString itemNameId = itemNameIdList[0]; + XmedDataObject * dataObject = (XmedDataObject *)dataModel->getDataObject(QS2S(itemNameId)); + if ( dataObject == NULL ) { + LOG("WorkspaceController: WARN! No data object associated to the item "<getFieldHandler(); + QStringList commands; + commands+=QString("from xmed.driver_pvis import pvis_scalarmap"); + commands+=QString("pvis_scalarmap('%1','%2','%3',%4,%5)") + .arg(tmpfilename) + .arg(QString(fieldHandler->meshname)) + .arg(QString(fieldHandler->fieldname)) + .arg(fieldHandler->type) + .arg(fieldHandler->iteration); + _consoleDriver->exec(commands); + +} + + +/*! + * This function sends a request to the SALOME data visualisation + * (module VISU or PARAVIS) for displaying a scalar map of the fields + * associated to the model items in the specified list. + * + */ +void WorkspaceController::_viewItemList(QStringList itemNameIdList) { + + // __GBO__: In this version, we consider only the first field in the selection + QString itemNameId = itemNameIdList[0]; + + XmedDataModel * dataModel = (XmedDataModel *)this->getDataModel(); + if ( dataModel == NULL ) { + LOG("No data model associated to this tree view"); + return; + } + + // We can request the dataModel to obtain the dataObject associated + // to this item (iteNameId is a TreeView id, Qt stuff only). + XmedDataObject * dataObject = + (XmedDataObject *)dataModel->getDataObject(QS2S(itemNameId)); + if ( dataObject == NULL ) { + LOG("WorkspaceController: WARN! No data object associated to the item "<getFieldHandler(); + + // And finally, we can create the set of medop instructions to + // generate the scalar map on this field. + QStringList commands; + commands+=QString("view(get(%1))").arg(fieldHandler->id); + _consoleDriver->exec(commands); +} + +/** + * This slot can process the event coming from the + * DatasourceController. The connection between the datasource signal + * and this slot is realized by the main class MEDOPModule. + */ +void WorkspaceController::processDatasourceEvent(const DatasourceEvent * event) { + XmedDataModel * dataModel = (XmedDataModel *)this->getDataModel(); + if ( dataModel == NULL ) { + STDLOG("No data model associated to this tree view"); + return; + } + + // >>> + // __GBO__ To know what to do we should test the type, because the + // object could be a mesh, a timeseries or a single field. We test + // here the case of a single field. Moreover, there could have + // options such that "change the underlying mesh". + // <<< + + XmedDataObject * dataObject = event->objectdata; + + if ( event->eventtype == DatasourceEvent::EVENT_IMPORT_OBJECT ) { + STDLOG("IMPORT object in workspace:\n"<toString()); + // _GBO_ QUESTION: tag automatically the object as a peristant object ?? + // We first add the data object to the internal data model + dataModel->addDataObject(dataObject); + // Then we request the tree view to consider this new object + this->getDataTreeModel()->addData(dataObject); + } + else if ( event->eventtype == DatasourceEvent::EVENT_USE_OBJECT ) { + STDLOG("USE object in workspace:\n"<toString()); + // We first add the data object to the internal data model + dataModel->addDataObject(dataObject); + // Then we request the tree view to consider this new object + this->getDataTreeModel()->addData(dataObject); + + // We define a proxy for this object in the tui console. + STDLOG("Define a proxy variable in the console with name : "<objectalias)); + bool askForOptions = false; + _importFieldIntoConsole(dataObject->getFieldHandler(), + askForOptions, + QCHARSTAR(event->objectalias)); + } + else if ( event->eventtype == DatasourceEvent::EVENT_VIEW_OBJECT ) { + QStringList commands; + commands+=QString("view(get(%1))").arg(dataObject->getFieldHandler()->id); + _consoleDriver->exec(commands); + } + else { + STDLOG("The event "<eventtype<<" is not implemented yet"); + } + +} + +void WorkspaceController::OnSaveWorkspace() { + + // Dialog to get the filename where the workspace must be saved into + QStringList filter; + filter.append(QObject::tr("MED files (*.med)")); + + QString filename = SUIT_FileDlg::getFileName(_salomeModule->getApp()->desktop(), + "", + filter, + QObject::tr("Save workspace data"), + false); + + if ( filename.isEmpty() ) return; + + STDLOG("OnWorkspaceSave: save the workspace in the file " << QCHARSTAR(filename)); + QStringList commands; + commands+=QString("save('%1')").arg(filename); + _consoleDriver->exec(commands); +} + +#include +void WorkspaceController::OnCleanWorkspace() { + QMessageBox::warning(_salomeModule->getApp()->desktop(), + tr("Not implemented yet"), + tr("This function is not implemented yet")); +} diff --git a/src/MEDOP/gui/WorkspaceController.hxx b/src/MEDOP/gui/WorkspaceController.hxx new file mode 100644 index 000000000..d30b9a999 --- /dev/null +++ b/src/MEDOP/gui/WorkspaceController.hxx @@ -0,0 +1,74 @@ + +// Author : Guillaume Boulant (EDF) + +#ifndef _WORKSPACE_CONTROLLER_HXX +#define _WORKSPACE_CONTROLLER_HXX + +#include "TreeGuiManager.hxx" +#include "MEDEventListener_i.hxx" +#include "XmedConsoleDriver.hxx" +#include "DatasourceController.hxx" +#include "MEDOPGUI.hxx" + +#include +#include CORBA_CLIENT_HEADER(MEDDataManager) +#include + +#include + +/*! + * This class defines a DockWidget plugged in the SALOME application, + * and containing a tree view for rendering a hierarchical data + * model. This datamodel contains the objects used in the workspace. + */ +class MEDOPGUI_EXPORT WorkspaceController: public TreeGuiManager { + + Q_OBJECT + +public: + WorkspaceController(StandardApp_Module * salomeModule); + ~WorkspaceController(); + + void createActions(); + +public slots: + // Slots overiding TreeGuiManager + void processItemList(QStringList itemNameIdList, int actionId); + + // Internal slots + void processMedEvent(const MEDOP::MedEvent * event); + void processDatasourceEvent(const DatasourceEvent * event); + void OnSaveWorkspace(); + void OnCleanWorkspace(); + +private: + XmedConsoleDriver * _consoleDriver; + StandardApp_Module * _salomeModule; + void _importItem(QString itemNameId); + void _importItemList(QStringList itemNameIdList); + void _importFieldIntoConsole(MEDOP::FieldHandler * fieldHandler, + bool askForOptions, + const char * alias=NULL); + + void _exportItemList(QStringList itemNameIdList); + void _saveItemList(QStringList itemNameIdList); + void _viewItemList(QStringList itemNameIdList); + + MEDEventListener_i * _medEventListener; + + // This structure is intended to memorized in a bundle the whole set + // of integers identifying the actions of the popup menu associated + // to the TreeView embedded in this TreeGuiManager + typedef struct { + int display; + int useInTui; + int exportToPv; + int remove; + int save; + } ActionIdentifiers; + + ActionIdentifiers _actionIds; + +}; + +#endif // _WORKSPACE_CONTROLLER_HXX diff --git a/src/MEDOP/gui/XmedConsoleDriver.cxx b/src/MEDOP/gui/XmedConsoleDriver.cxx new file mode 100644 index 000000000..29bc88dd0 --- /dev/null +++ b/src/MEDOP/gui/XmedConsoleDriver.cxx @@ -0,0 +1,66 @@ +// Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +// +// 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 +// +// Author : Guillaume Boulant (EDF) + +#include "XmedConsoleDriver.hxx" +#include "Utils_SALOME_Exception.hxx" + +XmedConsoleDriver::XmedConsoleDriver(SalomeApp_Application * application) { + _pyConsole = application->pythonConsole(); + if ( !_pyConsole ) { + const char * msg = "The python console can't be obtained from the SALOME application"; + throw SALOME_Exception(msg); + } + _importXmedDone = false; +} + +/*! + * This function sends instructions to the python console to setup the + * environment for med operations (in particular, it imports the medop + * commands). Even if the function is called twice, then the + * instructions are sent once. + */ +void XmedConsoleDriver::setup() { + + if ( !_importXmedDone ) { + QStringList commands; + // First import xmed to initialize the main objects, in particular + // the corba pointer to the event listener. + commands+="import xmed"; + // Set the globals dictionnary so that the fields tools work properly. + commands+="xmed.setConsoleGlobals(globals())"; + // Import the tools required for field operations + commands+="from xmed import load, get, put, dup, ls, la, save, view, doc, wipe"; + // A last one to clear the console screen + //commands+="wipe"; + + this->exec(commands); + _importXmedDone = true; + } +} + +/*! + * This function sends the specified list of commands to the console. + */ +void XmedConsoleDriver::exec(QStringList commands) { + QStringListIterator it(commands); + while (it.hasNext()) { + _pyConsole->exec(it.next()); + } +} diff --git a/src/MEDOP/gui/XmedConsoleDriver.hxx b/src/MEDOP/gui/XmedConsoleDriver.hxx new file mode 100644 index 000000000..bebc0ad65 --- /dev/null +++ b/src/MEDOP/gui/XmedConsoleDriver.hxx @@ -0,0 +1,44 @@ +// Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +// +// 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 +// +// Author : Guillaume Boulant (EDF) + +#ifndef XMEDCONSOLEDRIVER_HXX +#define XMEDCONSOLEDRIVER_HXX + +#include +#include + +#include + +#include "MEDOPGUI.hxx" + +class MEDOPGUI_EXPORT XmedConsoleDriver { + +public: + XmedConsoleDriver(SalomeApp_Application * application); + + void setup(); + void exec(QStringList commands); + +private: + PyConsole_Console * _pyConsole; + bool _importXmedDone; +}; + +#endif //XMEDCONSOLEDRIVER_HXX diff --git a/src/MEDOP/gui/XmedDataModel.cxx b/src/MEDOP/gui/XmedDataModel.cxx new file mode 100644 index 000000000..1b770b030 --- /dev/null +++ b/src/MEDOP/gui/XmedDataModel.cxx @@ -0,0 +1,116 @@ +#include "XmedDataModel.hxx" +#include + +// +// ================================================================= +// XmedDataObject implementation +// ================================================================= +// + +XmedDataObject::XmedDataObject() : DataObject() { +} + +/*! This function specified the localization of the object in the + * hierarchical organization + */ +string XmedDataObject::getPath() { + string path = + string(_fieldHandler.meshname) + pathsep + + _getTypedFieldLabel(); + return path; +} + +void XmedDataObject::setFieldHandler(MEDOP::FieldHandler fieldHandler) { + _fieldHandler = fieldHandler; + this->setLabel(string("it = ")+ToString(_fieldHandler.iteration)); +} +MEDOP::FieldHandler * XmedDataObject::getFieldHandler() { + return &_fieldHandler; +} + +const char * XmedDataObject::mapTypeOfFieldLabel[XmedDataObject::NB_TYPE_OF_FIELDS] = + {"ON_CELLS", "ON_NODES", "ON_GAUSS_PT", "ON_GAUSS_NE" }; +/*! + * This function implements the convention for displaying a fieldname + * characterized by its spatial discretisation type. + */ +string XmedDataObject::_getTypedFieldLabel() { + // A field name could identify several MEDCoupling fields, that + // differ by their spatial discretization on the mesh (values on + // cells, values on nodes, ...). This spatial discretization is + // specified by the TypeOfField that is an integer value in this + // list: + // 0 = ON_CELLS + // 1 = ON_NODES + // 2 = ON_GAUSS_PT + // 3 = ON_GAUSS_NE + if ( _fieldHandler.type < 0 || + _fieldHandler.type >= XmedDataObject::NB_TYPE_OF_FIELDS ) { + return string("UNKNOWN"); + } + string label(_fieldHandler.fieldname); + label +=" ("+string(mapTypeOfFieldLabel[_fieldHandler.type])+")"; + return label; +} + +// +// ================================================================= +// XmedDataModel implementation +// ================================================================= +// + +/*! + * This function creates a XmedDataObject instance of DataObject and + * add the newly created instance to the model. + */ +DataObject * XmedDataModel::newDataObject() { + XmedDataObject * dataObject = new XmedDataObject(); + this->addDataObject(dataObject); + return dataObject; +} + +// +// ================================================================= +// XmedDataProcessor implementation +// ================================================================= +// +void XmedDataProcessor::preprocess(QStringList itemNameIdList) { + int maxsize = itemNameIdList.size(); + _resultingFieldHandlerList = new MEDOP::FieldHandlerList(maxsize); + _resultingFieldIdList = new MEDOP::FieldIdList(maxsize); + _objectIndex = 0; +} + +MEDOP::FieldHandlerList * XmedDataProcessor::getResultingFieldHandlerList() { + return _resultingFieldHandlerList._retn(); +} + +MEDOP::FieldIdList * XmedDataProcessor::getResultingFieldIdList() { + return _resultingFieldIdList._retn(); +} + +void XmedDataProcessor::processDataObject(DataObject * dataObject) { + XmedDataObject * xmedDataObject = (XmedDataObject *)dataObject; + MEDOP::FieldHandler fieldHandler = *(xmedDataObject->getFieldHandler()); + int fieldId = fieldHandler.id; + + int newsize = _objectIndex+1; + _resultingFieldHandlerList->length(newsize); + _resultingFieldIdList->length(newsize); + + _resultingFieldHandlerList[_objectIndex] = fieldHandler; + _resultingFieldIdList[_objectIndex] = fieldId; + _objectIndex++; + + // >>>>> + // Example (if needed) for creating the list of id from the lsite of handler + /* + MEDOP::FieldIdList_var fieldIdList = new MEDOP::FieldIdList(); + fieldIdList->length(fieldHandlerList->length()); + for (int i=0; ilength(); i++) { + MEDOP::FieldHandler fieldHandler = (*fieldHandlerList)[i]; + fieldIdList[i] = fieldHandler.id; + } + */ + // <<<<< +} diff --git a/src/MEDOP/gui/XmedDataModel.hxx b/src/MEDOP/gui/XmedDataModel.hxx new file mode 100644 index 000000000..a9a70d60e --- /dev/null +++ b/src/MEDOP/gui/XmedDataModel.hxx @@ -0,0 +1,80 @@ +#ifndef _XMEDDATAMODEL_H_ +#define _XMEDDATAMODEL_H_ + +#include +#include CORBA_CLIENT_HEADER(MEDDataManager) + +#include "MEDOPGUI.hxx" + +// +// ================================================================= +// Definition of an atom in the data model as an implementation of +// the virtual class DataObject +// ================================================================= +// +#include "DataObject.hxx" +class MEDOPGUI_EXPORT XmedDataObject: public DataObject { +public: + XmedDataObject(); + virtual string getPath(); + + void setFieldHandler(MEDOP::FieldHandler fieldHandler); + MEDOP::FieldHandler * getFieldHandler(); + + static const int NB_TYPE_OF_FIELDS = 4; + static const char * mapTypeOfFieldLabel[NB_TYPE_OF_FIELDS]; + +private: + MEDOP::FieldHandler _fieldHandler; + string _getTypedFieldLabel(); +}; + +// +// ================================================================= +// Definition of the data model as an implementation of the virtual +// class DataModel. It implements the DataObject factory. +// ================================================================= +// +#include "DataModel.hxx" +class MEDOPGUI_EXPORT XmedDataModel: public DataModel { +public: + XmedDataModel():DataModel() {}; + virtual DataObject * newDataObject(); +}; + +// +// ================================================================= +// Base class for data processing +// ================================================================= +// Howto use it? +// +// 1) Create an instance, call the "process" function, +// then get the result you are interested in, using the corresponding +// "result*" function. +// +// 2) Alternativly, you can just call directly the suitable master +// "get*" function to process and get the result you are interested +// in. +// +#include "DataProcessor.hxx" + +class MEDOPGUI_EXPORT XmedDataProcessor : public DataProcessor { +public: + XmedDataProcessor(DataModel * dataModel):DataProcessor(dataModel) {}; + + MEDOP::FieldHandlerList * getResultingFieldHandlerList(); + MEDOP::FieldIdList * getResultingFieldIdList(); + +protected: + virtual void preprocess(QStringList itemNameIdList); + virtual void processDataObject(DataObject * dataObject); + +private: + MEDOP::FieldHandlerList_var _resultingFieldHandlerList; + MEDOP::FieldIdList_var _resultingFieldIdList; + int _objectIndex; + +}; + + +#endif // _XMEDDATAMODEL_H_ diff --git a/src/MEDOP/gui/dialogs/CMakeLists.txt b/src/MEDOP/gui/dialogs/CMakeLists.txt new file mode 100644 index 000000000..0a0ca592b --- /dev/null +++ b/src/MEDOP/gui/dialogs/CMakeLists.txt @@ -0,0 +1,91 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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(${GUI_ROOT_DIR}/adm_local/cmake_files/UseQT4EXT.cmake) + +MACRO (QT4_WRAP_UI_XX outfiles ) + QT4_EXTRACT_OPTIONS(ui_files ui_options ${ARGN}) + FOREACH (it ${ui_files}) + GET_FILENAME_COMPONENT(outfile ${it} NAME_WE) + GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) + SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.hxx) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_UIC_EXECUTABLE} + ARGS ${ui_options} -o ${outfile} ${infile} + MAIN_DEPENDENCY ${infile}) + SET(${outfiles} ${${outfiles}} ${outfile}) + ENDFOREACH (it) +ENDMACRO (QT4_WRAP_UI_XX) + +SET(MEDOPGUI_dialogs_FORMS + GenericDialog.ui + DlgAlias.ui + DlgUseInWorkspace.ui + DlgChangeUnderlyingMesh.ui + DlgImageToMed.ui +) +QT4_WRAP_UI_XX(MEDOPGUI_dialogs_FORMS_HEADERS ${MEDOPGUI_dialogs_FORMS}) + +SET(MEDOPGUI_dialogs_FILES + GenericDialog.hxx + DlgAlias.hxx + DlgUseInWorkspace.hxx + DlgChangeUnderlyingMesh.hxx + DlgImageToMed.hxx +) +QT4_WRAP_CPP(MEDOPGUI_dialogs_HEADERS_MOC ${MEDOPGUI_dialogs_FILES}) + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${CAS_INCLUDE_DIRS} + ${BOOST_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${CMAKE_CURRENT_BINARY_DIR} + ${KERNEL_ROOT_DIR}/include/salome + ${GUI_ROOT_DIR}/include/salome + ${CMAKE_CURRENT_SOURCE_DIR}/.. +) + +SET(MEDOPGUI_dialogs_SOURCES + GenericDialog.cxx + DlgAlias.cxx + DlgUseInWorkspace.cxx + DlgChangeUnderlyingMesh.cxx + DlgImageToMed.cxx +) + +ADD_LIBRARY(MEDOPGUI_dialogs SHARED ${MEDOPGUI_dialogs_SOURCES} ${MEDOPGUI_dialogs_HEADERS_MOC} ${MEDOPGUI_dialogs_FORMS_HEADERS}) +SET_TARGET_PROPERTIES(MEDOPGUI_dialogs PROPERTIES COMPILE_FLAGS "${CAS_DEFINITIONS} ${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS} ${OMNIORB_DEFINITIONS}") +TARGET_LINK_LIBRARIES(MEDOPGUI_dialogs ${CAS_KERNEL} ${QT_LIBS} ${SalomeIDLKernel} ${SalomeGuiHelpers} ${OMNIORB_LIBS} ${qtx} ${suit} ${PLATFORM_LIBS} ${SalomeLifeCycleCORBA} ${SalomeKernelHelpers} ${SalomeGuiHelpers}) +INSTALL(TARGETS MEDOPGUI_dialogs DESTINATION ${MED_salomelib_LIBS}) + +# +# --------------------------------------------------------- +# Unit test programs +# --------------------------------------------------------- +# +ADD_EXECUTABLE(dlgTester dlgTester.cxx) +SET_TARGET_PROPERTIES(dlgTester PROPERTIES COMPILE_FLAGS "${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(dlgTester MEDOPGUI_dialogs ${QT_LIBS} ${PLATFORM_LIBS}) +INSTALL(TARGETS dlgTester DESTINATION ${MED_salomebin_BINS}) +#ADD_TEST(dlgTester dlgTester) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${MED_salomeinclude_HEADERS}) + diff --git a/src/MEDOP/gui/dialogs/DlgAlias.cxx b/src/MEDOP/gui/dialogs/DlgAlias.cxx new file mode 100644 index 000000000..6551164b5 --- /dev/null +++ b/src/MEDOP/gui/dialogs/DlgAlias.cxx @@ -0,0 +1,41 @@ +#include "DlgAlias.hxx" + +#include +using std::cout; +using std::endl; +#define LOG(msg) cout << "[XMED - DlgAlias]::"<< msg << endl; + + +DlgAlias::DlgAlias(QDialog *parent) : QDialog(parent) +{ + ui.setupUi(this); // A faire en premier + + /* + Personnalisez vos widgets ici si nécessaire + Réalisez des connexions supplémentaires entre signaux et slots + */ + + // The slots accept() and reject() are already connected to the + // buttonbox (inherited features) +} + +void DlgAlias::accept() { + if ( this->getAlias().isEmpty() ) { + LOG("accept(): the alias can't be void"); + } + else { + QDialog::accept(); + } +} + +//void DlgAlias::reject() { +// LOG("reject() is not implemented yet"); +//} + +void DlgAlias::setAlias(QString alias) { + ui.txtAlias->setText(alias); +} + +QString DlgAlias::getAlias() { + return ui.txtAlias->text().trimmed(); +} diff --git a/src/MEDOP/gui/dialogs/DlgAlias.hxx b/src/MEDOP/gui/dialogs/DlgAlias.hxx new file mode 100644 index 000000000..81a3df028 --- /dev/null +++ b/src/MEDOP/gui/dialogs/DlgAlias.hxx @@ -0,0 +1,27 @@ +#ifndef DLGALIAS_H +#define DLGALIAS_H + +#include +#include "ui_DlgAlias.hxx" +#include "MEDOPGUIdialogs.hxx" + +class MEDOPGUI_DIALOGS_EXPORT DlgAlias : public QDialog +{ + Q_OBJECT + + public: + DlgAlias(QDialog *parent = 0); + + void setAlias(QString alias); + QString getAlias(); + + private slots: + void accept(); + //void reject(); + + private: + Ui_DlgAlias ui; // instance of the class defined in ui_DlgAlias.h +}; + + +#endif // DLGALIAS_H diff --git a/src/MEDOP/gui/dialogs/DlgAlias.ui b/src/MEDOP/gui/dialogs/DlgAlias.ui new file mode 100644 index 000000000..595c08e77 --- /dev/null +++ b/src/MEDOP/gui/dialogs/DlgAlias.ui @@ -0,0 +1,505 @@ + + + DlgAlias + + + + 0 + 0 + 477 + 241 + + + + Sélection d'un alias pour le champ + + + + 6 + + + 9 + + + + + 6 + + + 0 + + + + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + Sans Serif + true + + + + Vous pouvez définir un alias pour manipuler le champ dans la console: + + + true + + + + + + + 6 + + + 0 + + + + + Alias + + + + + + + + + + + + + true + + + + (cette operation définit une variable de nom <alias> dans la console TUI. Tapez "<alias>.help()" pour voir les fonctions à disposition, ou tou simplement "doc") + + + true + + + + + + + Qt::Vertical + + + + 402 + 71 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + DlgAlias + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DlgAlias + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/MEDOP/gui/dialogs/DlgChangeUnderlyingMesh.cxx b/src/MEDOP/gui/dialogs/DlgChangeUnderlyingMesh.cxx new file mode 100644 index 000000000..215dbf173 --- /dev/null +++ b/src/MEDOP/gui/dialogs/DlgChangeUnderlyingMesh.cxx @@ -0,0 +1,55 @@ +#include "DlgChangeUnderlyingMesh.hxx" +#include "DatasourceConstants.hxx" + +#include +#include + +DlgChangeUnderlyingMesh::DlgChangeUnderlyingMesh(SALOME_AppStudyEditor * studyEditor, + QDialog * parent) + : GenericDialog(parent) +{ + ui.setupUi(this->getPanel()); + _meshId=-1; + _studyEditor = studyEditor; + connect(this->ui.btnSelectMesh, SIGNAL(clicked()), this, SLOT(OnSelectMesh())); + this->setWindowTitle("Remplacement du maillage support"); +} + +/** This reset the dialog for a new selection */ +void DlgChangeUnderlyingMesh::setFieldId(int fieldId) { + _fieldId = fieldId; + _meshId=-1; + this->ui.txtMesh->setText(QString("")); +} +int DlgChangeUnderlyingMesh::getFieldId() { + return _fieldId; +} + +int DlgChangeUnderlyingMesh::getMeshId() { + return _meshId; +} + +void DlgChangeUnderlyingMesh::accept() { + if ( _meshId == -1 ) { + QMessageBox::warning(this, + tr("Data verification"), + tr("You must select a mesh in the explorer and clic the button Mesh")); + } + else { + GenericDialog::accept(); + emit inputValidated(); + } +} + +void DlgChangeUnderlyingMesh::OnSelectMesh() { + SALOME_StudyEditor::SObjectList * listOfSObject = _studyEditor->getSelectedObjects(); + if ( listOfSObject->size() > 0 ) { + SALOMEDS::SObject_var soMesh = listOfSObject->at(0); + // _GBO_ TODO: we should test here if it is a mesh (attribute in + // the sobject) + _meshId = _studyEditor->getParameterInt(soMesh,OBJECT_ID); + const char * meshname = _studyEditor->getName(soMesh); + this->ui.txtMesh->setText(QString(meshname)); + } + +} diff --git a/src/MEDOP/gui/dialogs/DlgChangeUnderlyingMesh.hxx b/src/MEDOP/gui/dialogs/DlgChangeUnderlyingMesh.hxx new file mode 100644 index 000000000..ab4bffb4e --- /dev/null +++ b/src/MEDOP/gui/dialogs/DlgChangeUnderlyingMesh.hxx @@ -0,0 +1,39 @@ +#ifndef _DlgChangeUnderlyingMesh_HXX +#define _DlgChangeUnderlyingMesh_HXX + +#include +#include "ui_DlgChangeUnderlyingMesh.hxx" +#include "GenericDialog.hxx" + +#include +#include "MEDOPGUIdialogs.hxx" + +class MEDOPGUI_DIALOGS_EXPORT DlgChangeUnderlyingMesh : public GenericDialog +{ + Q_OBJECT + +public: + DlgChangeUnderlyingMesh(SALOME_AppStudyEditor * studyEditor, QDialog *parent = 0); + + void setFieldId(int fieldId); + int getFieldId(); + int getMeshId(); + +signals: + void inputValidated(); + +protected slots: + void OnSelectMesh(); + + private: + void accept(); + int _meshId; + + SALOME_AppStudyEditor * _studyEditor; + int _fieldId; + + Ui_DlgChangeUnderlyingMesh ui; // instance of the class defined in ui_DlgChangeUnderlyingMesh.hxx +}; + + +#endif // _DlgChangeUnderlyingMesh_HXX diff --git a/src/MEDOP/gui/dialogs/DlgChangeUnderlyingMesh.ui b/src/MEDOP/gui/dialogs/DlgChangeUnderlyingMesh.ui new file mode 100644 index 000000000..2bd44ef51 --- /dev/null +++ b/src/MEDOP/gui/dialogs/DlgChangeUnderlyingMesh.ui @@ -0,0 +1,448 @@ + + + DlgChangeUnderlyingMesh + + + + 0 + 0 + 479 + 429 + + + + Form + + + + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + Sans Serif + true + + + + Sélectionnez un maillage dans l'explorateur: + + + true + + + + + + + + + Maillage -> + + + + + + + + + + + + + true + + + + (L'explorateur donne une vue des sources de données med (maillage et champs) référencés dans l'espace de données) + + + true + + + + + + + + + Qt::Vertical + + + + 20 + 121 + + + + + + + + + + + diff --git a/src/MEDOP/gui/dialogs/DlgImageToMed.cxx b/src/MEDOP/gui/dialogs/DlgImageToMed.cxx new file mode 100644 index 000000000..ba5880106 --- /dev/null +++ b/src/MEDOP/gui/dialogs/DlgImageToMed.cxx @@ -0,0 +1,83 @@ +#include "DlgImageToMed.hxx" +#include "SALOME_GuiServices.hxx" + +#include +#include + +#include +#include +#include +#include + +DlgImageToMed::DlgImageToMed(QDialog *parent) : GenericDialog(parent) +{ + ui.setupUi(this->getPanel()); + + QString moduleName = "MED"; + QPixmap aPixmap = GUI::getResourcesManager()->loadPixmap( moduleName, "folder.png" ); + QIcon icon(aPixmap); + ui.btnImageFileChooser->setIcon(icon); + ui.btnMedFileChooser->setIcon(icon); + + connect(ui.btnImageFileChooser,SIGNAL(clicked()), + this, SLOT(OnBtnImageFileChooser())); + connect(ui.btnMedFileChooser,SIGNAL(clicked()), + this, SLOT(OnBtnMedFileChooser())); + + this->setWindowTitle("Créer un champ à partir d'une image"); +} + +QString DlgImageToMed::getImageFilepath() { + return ui.txtImageFile->text().trimmed(); +} + +QString DlgImageToMed::getMedFilepath() { + return ui.txtMedFile->text().trimmed(); +} + +void DlgImageToMed::setAutoLoaded(bool autoloaded) { + if ( autoloaded ) { + ui.chkAutoLoad->setCheckState(Qt::Checked); + } + else { + ui.chkAutoLoad->setCheckState(Qt::Unchecked); + } +} + +bool DlgImageToMed::isAutoLoaded() { + Qt::CheckState state = ui.chkAutoLoad->checkState(); + if ( state == Qt::Checked ) { + return true; + } + return false; +} + +void DlgImageToMed::OnBtnImageFileChooser() { + QStringList filter; + filter.append(QObject::tr("Image files (*.png)")); + filter.append(QObject::tr("Image files (*.jpg)")); + filter.append(QObject::tr("Image files (*.pgm)")); + filter.append(QObject::tr("All files (*.*)")); + QString filename = SUIT_FileDlg::getFileName(ui.btnImageFileChooser, + "", + filter, + QObject::tr("Select image file"), + true); + if ( filename.isEmpty() ) return; + ui.txtImageFile->setText(filename); + + QString medFilename = (filename.remove(filename.size()-3,3))+"med"; + ui.txtMedFile->setText(medFilename); +} + +void DlgImageToMed::OnBtnMedFileChooser() { + QStringList filter; + filter.append(QObject::tr("MED files (*.med)")); + QString filename = SUIT_FileDlg::getFileName(ui.btnMedFileChooser, + "", + filter, + QObject::tr("Specify a MED file"), + true); + if ( filename.isEmpty() ) return; + ui.txtMedFile->setText(filename); +} diff --git a/src/MEDOP/gui/dialogs/DlgImageToMed.hxx b/src/MEDOP/gui/dialogs/DlgImageToMed.hxx new file mode 100644 index 000000000..7b396f038 --- /dev/null +++ b/src/MEDOP/gui/dialogs/DlgImageToMed.hxx @@ -0,0 +1,31 @@ +#ifndef _DlgImageToMed_HXX +#define _DlgImageToMed_HXX + +#include +#include "ui_DlgImageToMed.hxx" +#include "GenericDialog.hxx" + +#include "MEDOPGUIdialogs.hxx" + +class MEDOPGUI_DIALOGS_EXPORT DlgImageToMed : public GenericDialog +{ + Q_OBJECT + + public: + DlgImageToMed(QDialog *parent = 0); + + QString getImageFilepath(); + QString getMedFilepath(); + bool isAutoLoaded(); + void setAutoLoaded(bool autoloaded); + + protected slots: + void OnBtnImageFileChooser(); + void OnBtnMedFileChooser(); + + private: + Ui_DlgImageToMed ui; // instance of the class defined in ui_DlgImageToMed.hxx +}; + + +#endif // _DlgImageToMed_HXX diff --git a/src/MEDOP/gui/dialogs/DlgImageToMed.ui b/src/MEDOP/gui/dialogs/DlgImageToMed.ui new file mode 100644 index 000000000..490b5bd2e --- /dev/null +++ b/src/MEDOP/gui/dialogs/DlgImageToMed.ui @@ -0,0 +1,107 @@ + + + DlgImageToMed + + + + 0 + 0 + 690 + 439 + + + + Form + + + + + + + + + + + + + + Fichier Image: + + + + + + + Fichier MED: + + + + + + + + + + + + + + + + + + + + + + + + + ../../../../resources/XMED_load.png../../../../resources/XMED_load.png + + + + + + + + + + + ../../../../resources/XMED_load.png../../../../resources/XMED_load.png + + + + + + + + + + + Charger automatiquement + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + diff --git a/src/MEDOP/gui/dialogs/DlgUseInWorkspace.cxx b/src/MEDOP/gui/dialogs/DlgUseInWorkspace.cxx new file mode 100644 index 000000000..d988139bc --- /dev/null +++ b/src/MEDOP/gui/dialogs/DlgUseInWorkspace.cxx @@ -0,0 +1,6 @@ +#include "DlgUseInWorkspace.hxx" + +DlgUseInWorkspace::DlgUseInWorkspace(QDialog *parent) : GenericDialog(parent) +{ + ui.setupUi(this->getPanel()); +} diff --git a/src/MEDOP/gui/dialogs/DlgUseInWorkspace.hxx b/src/MEDOP/gui/dialogs/DlgUseInWorkspace.hxx new file mode 100644 index 000000000..0bf316064 --- /dev/null +++ b/src/MEDOP/gui/dialogs/DlgUseInWorkspace.hxx @@ -0,0 +1,20 @@ +#ifndef _DlgUseInWorkspace_HXX +#define _DlgUseInWorkspace_HXX + +#include +#include "ui_DlgUseInWorkspace.hxx" +#include "GenericDialog.hxx" + +class DlgUseInWorkspace : public GenericDialog +{ + Q_OBJECT + + public: + DlgUseInWorkspace(QDialog *parent = 0); + + private: + Ui_DlgUseInWorkspace ui; // instance of the class defined in ui_DlgUseInWorkspace.hxx +}; + + +#endif // _DlgUseInWorkspace_HXX diff --git a/src/MEDOP/gui/dialogs/DlgUseInWorkspace.ui b/src/MEDOP/gui/dialogs/DlgUseInWorkspace.ui new file mode 100644 index 000000000..73c22d49c --- /dev/null +++ b/src/MEDOP/gui/dialogs/DlgUseInWorkspace.ui @@ -0,0 +1,99 @@ + + DlgUseInWorkspace + + + + 0 + 0 + 340 + 300 + + + + Form + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + 0 + + + 6 + + + + + Pression : + + + + + + + Température : + + + + + + + + + 0 + + + 6 + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 121 + + + + + + + + + + + diff --git a/src/MEDOP/gui/dialogs/GenericDialog.cxx b/src/MEDOP/gui/dialogs/GenericDialog.cxx new file mode 100644 index 000000000..9b8456674 --- /dev/null +++ b/src/MEDOP/gui/dialogs/GenericDialog.cxx @@ -0,0 +1,29 @@ +#include "GenericDialog.hxx" + +GenericDialog::GenericDialog(QDialog *parent) : QDialog(parent) +{ + ui.setupUi(this); // A faire en premier + + /* + Personnalisez vos widgets ici si nécessaire + Réalisez des connexions supplémentaires entre signaux et slots + */ + + // The slots accept() and reject() are already connected to the + // buttonbox (inherited features) +} + +QFrame * GenericDialog::getPanel() { + return ui.centralPanel; +} + +QDialogButtonBox * GenericDialog::getButtonBox() { + return ui.buttonBox; +} + + +#include +void GenericDialog::accept() { + qDebug() << "accept() is not implemented yet"; + QDialog::accept(); +} diff --git a/src/MEDOP/gui/dialogs/GenericDialog.hxx b/src/MEDOP/gui/dialogs/GenericDialog.hxx new file mode 100644 index 000000000..ee946617d --- /dev/null +++ b/src/MEDOP/gui/dialogs/GenericDialog.hxx @@ -0,0 +1,27 @@ +#ifndef _GenericDialog_HXX +#define _GenericDialog_HXX + +#include +#include "ui_GenericDialog.hxx" + +class GenericDialog : public QDialog +{ + Q_OBJECT + +public: + GenericDialog(QDialog *parent = 0); + + protected: + QFrame * getPanel(); + QDialogButtonBox * getButtonBox(); + + protected slots: + void accept(); + //void reject(); + + private: + Ui_GenericDialog ui; // instance of the class defined in ui_GenericDialog.h +}; + + +#endif // _GenericDialog_HXX diff --git a/src/MEDOP/gui/dialogs/GenericDialog.ui b/src/MEDOP/gui/dialogs/GenericDialog.ui new file mode 100644 index 000000000..1fe7ae99e --- /dev/null +++ b/src/MEDOP/gui/dialogs/GenericDialog.ui @@ -0,0 +1,89 @@ + + GenericDialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + GenericDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + GenericDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/MEDOP/gui/dialogs/MEDOPGUIdialogs.hxx b/src/MEDOP/gui/dialogs/MEDOPGUIdialogs.hxx new file mode 100755 index 000000000..ef2bec2b1 --- /dev/null +++ b/src/MEDOP/gui/dialogs/MEDOPGUIdialogs.hxx @@ -0,0 +1,33 @@ +// Copyright (C) 2007-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 MEDOPGUIDIALOGS_HXX_ +#define MEDOPGUIDIALOGS_HXX_ + +#ifdef WIN32 +# if defined MEDOPGUI_DIALOGS_EXPORTS || defined MEDOPGUI_dialogs_EXPORTS +# define MEDOPGUI_DIALOGS_EXPORT __declspec( dllexport ) +# else +# define MEDOPGUI_DIALOGS_EXPORT __declspec( dllimport ) +# endif +#else +# define MEDOPGUI_DIALOGS_EXPORT +#endif + +#endif //MEDOPGUIDIALOGS_HXX_ diff --git a/src/MEDOP/gui/dialogs/Makefile.am b/src/MEDOP/gui/dialogs/Makefile.am new file mode 100644 index 000000000..991c193cb --- /dev/null +++ b/src/MEDOP/gui/dialogs/Makefile.am @@ -0,0 +1,140 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# author: Guillaume Boulant (EDF/R&D, 2012) + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +# +# --------------------------------------------------------- +# Generation rules to create moc files from QObject headers +# and form source files from ui files +# --------------------------------------------------------- +# +%_moc.cxx: %.hxx + $(MOC) $< -o $@ + +ui_%.hxx: %.ui + $(UIC) -o $@ $< + +QT_CXXFLAGS = @QT_INCLUDES@ @QT_MT_INCLUDES@ +CAS_CXXFLAGS = @CAS_CPPFLAGS@ @CAS_CXXFLAGS@ +OMNIORB_CXXFLAGS = @CORBA_INCLUDES@ @CORBA_CXXFLAGS@ +BOOST_CXXFLAGS=@BOOST_CPPFLAGS@ + +QT_LDFLAGS = $(QT_MT_LIBS) +OMNIORB_LIBS=@OMNIORB_LIBS@ + +# +# --------------------------------------------------------- +# Declaration of form files generated by UIC and MOC files +# as BUILT_SOURCES to be used in the building process. +# --------------------------------------------------------- +# +UIC_FILES = \ + ui_GenericDialog.hxx \ + ui_DlgAlias.hxx \ + ui_DlgUseInWorkspace.hxx \ + ui_DlgChangeUnderlyingMesh.hxx \ + ui_DlgImageToMed.hxx +# +MOC_FILES = \ + GenericDialog_moc.cxx \ + DlgAlias_moc.cxx \ + DlgUseInWorkspace_moc.cxx \ + DlgChangeUnderlyingMesh_moc.cxx \ + DlgImageToMed_moc.cxx + +BUILT_SOURCES = $(UIC_FILES) + +# +# --------------------------------------------------------- +# Declaration of sources files to the building process +# --------------------------------------------------------- +# MOC files and UIC files should be added to the list of undistributed +# source files with something like (where should be +# replaced by the name of the product declared by the directive +# lib_LTLIBRARIES): +# +lib_LTLIBRARIES = libMEDOPGUI_dialogs.la + +nodist_libMEDOPGUI_dialogs_la_SOURCES = $(MOC_FILES) $(UIC_FILES) + +dist_libMEDOPGUI_dialogs_la_SOURCES = \ + GenericDialog.cxx \ + DlgAlias.cxx \ + DlgUseInWorkspace.cxx \ + DlgChangeUnderlyingMesh.cxx \ + DlgImageToMed.cxx + +libMEDOPGUI_dialogs_la_CPPFLAGS = \ + $(QT_CXXFLAGS) \ + $(CAS_CXXFLAGS) \ + $(OMNIORB_CXXFLAGS) \ + $(BOOST_CXXFLAGS) \ + $(KERNEL_CXXFLAGS) \ + $(GUI_CXXFLAGS) \ + -I$(srcdir)/.. + +libMEDOPGUI_dialogs_la_LDFLAGS = \ + -no-undefined -version-info=0:0:0 \ + $(QT_LDFLAGS) \ + $(GUI_LDFLAGS) -lSalomeGuiHelpers \ + $(OMNIORB_LIBS) + +salomeinclude_HEADERS = \ + GenericDialog.hxx \ + DlgAlias.hxx \ + DlgUseInWorkspace.hxx \ + DlgChangeUnderlyingMesh.hxx \ + DlgImageToMed.hxx \ + MEDOPGUIdialogs.hxx + +# +# --------------------------------------------------------- +# Unit test programs +# --------------------------------------------------------- +# + +bin_PROGRAMS = dlgTester + +dlgTester_SOURCES = \ + dlgTester.cxx + +#nodist_dlgTester_SOURCES = $(UIC_FILES) + +dlgTester_CPPFLAGS = \ + $(QT_CXXFLAGS) + +# WARN: for the building of binary executable programs, you must use +# the LDADD option instead of the LDFLAGS used for library. The impact +# is in the expression of dependencies between the executable program +# and the library it relies on. In parallel construction (e.g. make +# -j8), the makefile try to generate the program while the library +# (file .la) is not generated. + +dlgTester_LDADD = \ + libMEDOPGUI_dialogs.la \ + $(QT_LIBS) + + +mostlyclean-local: + rm -f @builddir@/*_moc.cxx @builddir@/ui_*.hxx + +EXTRA_DIST += $(UIC_FILES:ui_%.hxx=%.ui) diff --git a/src/MEDOP/gui/dialogs/dlgTester.cxx b/src/MEDOP/gui/dialogs/dlgTester.cxx new file mode 100644 index 000000000..72f5b6492 --- /dev/null +++ b/src/MEDOP/gui/dialogs/dlgTester.cxx @@ -0,0 +1,53 @@ +// +// This program can be used for unit test of dialog box. +// You just have to include the interface file (*.h) and +// use the dialog class as illustrated in the functions TEST_*. +// (gboulant - 12/10/2010) +// +#include +#include + +#include "DlgAlias.hxx" + +#include +using std::cout; +using std::endl; +#define LOG(msg) cout << "[XMED - dlgTester]::"<< msg << endl; + + + +void TEST_dlgAlias_show(int argc, char *argv[]) { + QApplication app(argc,argv); + + DlgAlias dialog; + dialog.setAlias("vitesse"); + dialog.show(); + + app.exec(); +} + +void TEST_dlgAlias_exec(int argc, char *argv[]) { + QApplication app(argc,argv); + + DlgAlias dialog; + QString alias = "vitesse"; + dialog.setAlias(alias); + int choice = dialog.exec(); + if ( choice == QDialog::Accepted ) { + LOG("Clic on OK"); + } + else { + LOG("Clic on Cancel"); + } + + //app.exec(); +} + + +int main(int argc, char *argv[]) +{ + + //TEST_dlgAlias_show(argc, argv); + TEST_dlgAlias_exec(argc, argv); + +} diff --git a/src/MEDOP/gui/factory.cxx b/src/MEDOP/gui/factory.cxx new file mode 100644 index 000000000..40c29e248 --- /dev/null +++ b/src/MEDOP/gui/factory.cxx @@ -0,0 +1,68 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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 +// + +// Author : Guillaume Boulant (EDF) + +/*! + * IMPORTANT NOTE: this file implements the factory interface required + * to specify the SALOME GUI part of a module. + * + * The GUI part of a module is an implementation of the generic class + * CAM_Module and must be returned here by a factory function called + * createModule(). + * + * The function createModule can be designed to switch between several + * configurations, but generally the configuration is statically + * defined (at build step). The default configuration could be DefaultGui. The + * configuration below is MEDOPModule. + */ + +#include +#include "MEDOPModule.hxx" +#include "MEDOPGUI.hxx" + +#ifdef __WITH_MEDMEMGUI__ +#include "MEDGUI.h" +#endif + +extern "C" { + + /*! This function is the factory for the GUI Module */ + MEDOPGUI_EXPORT CAM_Module* createModule() + { + CAM_Module * medModule; + +#ifdef __WITH_MEDMEMGUI__ + medModule = new MedGUI(); +#else + medModule = new MEDOPModule(); +#endif + + return medModule; + } + + /*! This function specifies the version of the module to be displayed in the about dialog box */ + MEDOPGUI_EXPORT char* getModuleVersion() { + return (char*)MED_VERSION_STR; + } + +} diff --git a/src/MEDOP/gui/test/README.txt b/src/MEDOP/gui/test/README.txt new file mode 100644 index 000000000..751cbf465 --- /dev/null +++ b/src/MEDOP/gui/test/README.txt @@ -0,0 +1,12 @@ + +This is a simple Qt framework to test the dialog widgets. + +To build the project: +* specify the sources files in the .pro file +* run qmake, then make +* run guiTester + +To clean the project: +* run "make clean" +* remove binary and Makefile + $ rm guiTester Makefile diff --git a/src/MEDOP/gui/test/guiTester.pro b/src/MEDOP/gui/test/guiTester.pro new file mode 100644 index 000000000..51f1f87fd --- /dev/null +++ b/src/MEDOP/gui/test/guiTester.pro @@ -0,0 +1,13 @@ +###################################################################### +# Automatically generated by qmake (2.01a) mer. oct. 6 14:46:48 2010 +###################################################################### + +TEMPLATE = app +TARGET = +DEPENDPATH += . +INCLUDEPATH += . ../dialogs + +# Input +HEADERS += ../dialogs/DlgAlias.h +FORMS += ../dialogs/dlgAlias.ui +SOURCES += ../dialogs/DlgAlias.cxx ../dialogs/dlgTester.cxx diff --git a/src/MEDOP/res/CMakeLists.txt b/src/MEDOP/res/CMakeLists.txt new file mode 100644 index 000000000..aecdf9478 --- /dev/null +++ b/src/MEDOP/res/CMakeLists.txt @@ -0,0 +1,39 @@ +# Copyright (C) 2007-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 +# + +ADD_SUBDIRECTORY(testfiles) + +IF(MED_ENABLE_GUI) + SET(MED_RESOURCES_FILES + MEDOP.png + MEDOP_small.png + datasource_add.png + datasource.png + datasource_mesh.png + datasource_field.png + datasource_expandfield.png + datasource_view.png + datasource_use.png + datasource_changeUnderlyingMesh.png + image_add.png + workspace_save.png + workspace_clean.png + ) + INSTALL(FILES ${MED_RESOURCES_FILES} DESTINATION ${MED_salomeres_DATA}) +ENDIF(MED_ENABLE_GUI) diff --git a/src/MEDOP/res/MEDOP.png b/src/MEDOP/res/MEDOP.png new file mode 100644 index 000000000..85079c10f Binary files /dev/null and b/src/MEDOP/res/MEDOP.png differ diff --git a/src/MEDOP/res/MEDOP_small.png b/src/MEDOP/res/MEDOP_small.png new file mode 100644 index 000000000..1c367d6c4 Binary files /dev/null and b/src/MEDOP/res/MEDOP_small.png differ diff --git a/src/MEDOP/res/Makefile.am b/src/MEDOP/res/Makefile.am new file mode 100644 index 000000000..ee1be10a7 --- /dev/null +++ b/src/MEDOP/res/Makefile.am @@ -0,0 +1,39 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# Author : Guillaume Boulant (EDF) + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +SUBDIRS = testfiles +dist_salomeres_DATA= \ + MEDOP.png \ + MEDOP_small.png \ + datasource_add.png \ + datasource.png \ + datasource_mesh.png \ + datasource_field.png \ + datasource_expandfield.png \ + datasource_view.png \ + datasource_use.png \ + datasource_changeUnderlyingMesh.png \ + image_add.png \ + workspace_save.png \ + workspace_clean.png \ + folder.png diff --git a/src/MEDOP/res/datasource.png b/src/MEDOP/res/datasource.png new file mode 100644 index 000000000..d503fef9f Binary files /dev/null and b/src/MEDOP/res/datasource.png differ diff --git a/src/MEDOP/res/datasource_add.png b/src/MEDOP/res/datasource_add.png new file mode 100644 index 000000000..75f90c7de Binary files /dev/null and b/src/MEDOP/res/datasource_add.png differ diff --git a/src/MEDOP/res/datasource_changeUnderlyingMesh.png b/src/MEDOP/res/datasource_changeUnderlyingMesh.png new file mode 100644 index 000000000..fe6c8b6d3 Binary files /dev/null and b/src/MEDOP/res/datasource_changeUnderlyingMesh.png differ diff --git a/src/MEDOP/res/datasource_expandfield.png b/src/MEDOP/res/datasource_expandfield.png new file mode 100644 index 000000000..07c8b0b10 Binary files /dev/null and b/src/MEDOP/res/datasource_expandfield.png differ diff --git a/src/MEDOP/res/datasource_field.png b/src/MEDOP/res/datasource_field.png new file mode 100644 index 000000000..af3f6f51d Binary files /dev/null and b/src/MEDOP/res/datasource_field.png differ diff --git a/src/MEDOP/res/datasource_mesh.png b/src/MEDOP/res/datasource_mesh.png new file mode 100644 index 000000000..93401f4ce Binary files /dev/null and b/src/MEDOP/res/datasource_mesh.png differ diff --git a/src/MEDOP/res/datasource_use.png b/src/MEDOP/res/datasource_use.png new file mode 100644 index 000000000..0d1ab6326 Binary files /dev/null and b/src/MEDOP/res/datasource_use.png differ diff --git a/src/MEDOP/res/datasource_view.png b/src/MEDOP/res/datasource_view.png new file mode 100644 index 000000000..418914405 Binary files /dev/null and b/src/MEDOP/res/datasource_view.png differ diff --git a/src/MEDOP/res/folder.png b/src/MEDOP/res/folder.png new file mode 100644 index 000000000..a0b8dc933 Binary files /dev/null and b/src/MEDOP/res/folder.png differ diff --git a/src/MEDOP/res/image_add.png b/src/MEDOP/res/image_add.png new file mode 100644 index 000000000..8e221bfb2 Binary files /dev/null and b/src/MEDOP/res/image_add.png differ diff --git a/src/MEDOP/res/testfiles/CMakeLists.txt b/src/MEDOP/res/testfiles/CMakeLists.txt new file mode 100644 index 000000000..c546f833c --- /dev/null +++ b/src/MEDOP/res/testfiles/CMakeLists.txt @@ -0,0 +1,45 @@ +# Copyright (C) 2007-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 +# + +SET(MED_FILES + testfield.med + smallmesh_varfield.med + smallmesh_constfield.med + bigmesh.med + fieldlena.med + timeseries.med + parametric_01.med + parametric_02.med + enceinte-axis-E500000.med + enceinte-axis-E600000.med + entaille.med + padderoutput.med + ) + +INSTALL(FILES ${MED_FILES} DESTINATION ${MED_salomeres_DATA}/medop_testfiles) + +SET(MED_IMG_FILES + irm_test1.png + irm_test2.png + # extra + README.txt + champ_altitude_MAP.pgm + ) + +INSTALL(FILES ${MED_IMG_FILES} DESTINATION ${MED_salomeres_DATA}/medop_testfiles) diff --git a/src/MEDOP/res/testfiles/Makefile.am b/src/MEDOP/res/testfiles/Makefile.am new file mode 100644 index 000000000..f05e2ffdb --- /dev/null +++ b/src/MEDOP/res/testfiles/Makefile.am @@ -0,0 +1,48 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# Author : Guillaume Boulant (EDF) + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +mysalomeresdir = $(salomeresdir)/medop_testfiles + +dist_mysalomeres_DATA= \ + $(medfiles) \ + $(imgfiles) + +medfiles=\ + testfield.med \ + smallmesh_varfield.med \ + smallmesh_constfield.med \ + bigmesh.med \ + fieldlena.med \ + timeseries.med \ + parametric_01.med \ + parametric_02.med \ + enceinte-axis-E500000.med \ + enceinte-axis-E600000.med \ + entaille.med \ + padderoutput.med + +imgfiles=\ + irm_test1.png \ + irm_test2.png + +EXTRA_DIST += README.txt champ_altitude_MAP.pgm diff --git a/src/MEDOP/res/testfiles/README.txt b/src/MEDOP/res/testfiles/README.txt new file mode 100644 index 000000000..b9db2b87f --- /dev/null +++ b/src/MEDOP/res/testfiles/README.txt @@ -0,0 +1 @@ +This folder contains data files for testing the MEDOP functions diff --git a/src/MEDOP/res/testfiles/bigmesh.med b/src/MEDOP/res/testfiles/bigmesh.med new file mode 100644 index 000000000..2fb93b1c2 Binary files /dev/null and b/src/MEDOP/res/testfiles/bigmesh.med differ diff --git a/src/MEDOP/res/testfiles/champ_altitude_MAP.pgm b/src/MEDOP/res/testfiles/champ_altitude_MAP.pgm new file mode 100644 index 000000000..000975e6d --- /dev/null +++ b/src/MEDOP/res/testfiles/champ_altitude_MAP.pgm @@ -0,0 +1,251 @@ +P5 +#image written by MAP/c_image_3d_altitude_thickness +800 471 +255 +~~~~……‹ˆ……~ztwzz~……~zwtmfiffimimmmpmptwtw~~~~……‹’–   §££   œ™––™–’’‹’‹ˆˆˆˆ……ˆ……ˆ’™’–’’’–œœ£ª´±»Âž¾Â»¸¸´±±´´´±­±±±±±±­­ªª§ª§§£££§£œ™œ   £ £    œ™–™™œœ    œ    œ™™™–––™œ™ œœ–™’’‹‹‹ˆˆ…ˆ‹…‹ˆˆˆˆ‹‹‹‹‹’’’‹‹~~pmiff\_XXXURRNDDAA===:==:=:ADDDKUGfifpmt~–’–™ œ–’‹…~~zzttif_ccf£œ§ª§§ ££   œœœ£ £££§ªª­ª­­­§§£ œ™™œ œœ œœ œ™™–––‹‹ˆ‹…~~pif__\XXXUXRRRNNNNNRRKRNRRKDD:==6300,,,,),,306,,66060300000,,,,,))06:=6:::A=A:=:AAGDDGGKKKGGNNRRNKGD,%%)=GGGNKNR–‹‹‹ˆˆ~~zwwwmmfimiipmimii\\\X\_\\\X\X\X\UURUKNRNURKRXXNX\\_\iiffipimiimff_c_\_X\__c\cffffcfcfifcfc__\X\RRKKDDA:630",,""%"%%%,%,%%%%,,",,RNXX\RX\XXUUXRUKKRGGD:== +: +,%%"""")"6A +====ADA==KNGDKNRNNRRUX\\\X\_XXURNN££K£GN££NGKAG…’’–’–££–XUNRNNNRXXXUURRNNKKKDAAAA===:630303::=DKRiippttwwz~~~~z~zzttttpt~~……ˆˆzwptwz~~~~~zwwpicicfmiimmmppppwwz~zzzˆ’œœ ££   £œ–––™’’‹’’’ˆ‹ˆ……ˆˆ‹’–’–’’’’™œ §­´´¾ÂÅž¾¾¸¸´±±±±´±±­­±±±±­ª­§§ª§§§££££ œ™œœœœ££   œœ™™™œœœ œœ  ™œ œœ™™––––––™™œ œ’––’ˆ‹‹‹ˆˆˆ‹ˆˆ…ˆˆˆ‹‹‹‹‹ˆ‹’‹‹ˆ…zztpfccX\UUURNNKAA==:==:==::=AADDGRDcfittz–––œœ™–’’‹ˆ……~z~zwpii_ccf c£§ªª£§§£     ££££§§ª­­­­­±§ª§  ™œœœ œ  œœ™™––––’‹ˆˆ‹……~mfc_c_UXURUURRRRRRNRRNURRRGDD6=:360,00,,),)003),3633,000000,,0,00,36==:AA=A=A:AADGKDGGKGGKGGKRNRNKDD0)"""%:DKGKKKN–‹ˆˆˆˆ~wwwmmiiiiimiiifiX__\\_\\\\_\\\\URNRNKNRRRGNUXRX\\_Xiffiipmifimff_f\\_\__\c_ccccfccfcffcc__\\XXRNKKGAA=300),,%%")%"%"%"))"))""),)%0"))),NR\X_X\\XXXXXUUNGNGDA6A=666333300333333333333:A6::=:DAAA=KKKGGKNRNRRXUXX\\\\\XUURN  N DN  NGKDGˆ’’’’– ’UURRRR\UXX\UUUUNKKNGDAAA===:6:630,36=:DG_mmptttzz~~~z~ztttptpz~~……………~~wtmptw~z~~~~zztwmfcffiiiiimimmpttwwzzz~~ˆ™™œ£  ££ œ™™–™’’’‹’’’‹‹‹‹ˆ……ˆ‹’–’–’’––™œ£§­´¸¾Åž¾¸¸¸±´±±±±±ª­±±±­­ªª§ª§§§££§££ ™œ™™™œ  œ £œœ™™œ™™œ ™œ œ™œ œ™™™’’’–’’–™™œ™–™’…ˆˆˆˆˆ……‹ˆˆˆˆˆˆˆˆ‹‹‹ˆˆˆ‹’’‹ˆ…~wtmc__UXXUR=KKG==::==::=:::==AAGDNARcRpw~–™–œ™™–’’‹………~~zttmicccf£c§£ªª§ª§££££££§§§£§§ªª­­ª­­ªª§£ œœ      œœ™™’––’’‹‹ˆ…ˆ…ˆif_\_\RXUNUURUUUUXUUURXURRGGD6=6360)00,,%,)000%,36300,,0000)),0333::=DADDDAGGADDNKNKKGKGKKGGKNRNNKAA3,"")6DKGKNNN–‹ˆˆˆ‹…~zztwpmmiiiiiiifcfX___\c_____\_\\XRNRKNNRNNDKUXUXX__Xfciiimmiffiic_fX_____\_cfc_cc__f_fccc_c\_XUNRNKDDD:33,,),))%)"%%""%%)%,)%"))%)0%,,,0KUXX_\\X\XXXXUURNRKKKA=DA=6666633666666666666:D::::=ADAA=KNKGKKNRRUUUXXX\\___\\XUUœœNœNUœœRKGAN~‹‹X’–fRURRRU_\\\_UXXURKKNKGAAD==::3:63,,36==DDcpptwwtz~~~~~~~~wtpppmz~……zzwppmww~wzzzzwwttmffcffffffiiimpptzwzzzz~~…‹’––™ œ££§£ œ™™–’’‹–’‹ˆ……ˆ‹’–’–––™œ£§±´»¾Å¾»»¸¸±±±±±­­­­­­±­­ªª§§§£§££££  ™œ–™œœ£   £œœœ™™™™œ ™œœœ™™ ™™–––’–™œ™–––‹…ˆˆ…ˆ…ˆˆ‹‹‹ˆˆˆˆˆˆ‹‹‹‹ˆˆ‹‹’ˆˆ…~ppi_\XRUURG=6=D3666=::::::====ADDGDK6Npz–––™––––‹………~zwwmffccf_c§§§­£§££§§£££§£££§£ª§­ªª­ªªªª£  ™  œœœ œœ™™’’–’’ˆ‹ˆ…ˆ…ˆ…~ic___\UUUNXUUUXXX\\XXUUUURKKDA=6633,00))")),,)"0360300,000,)),36:==AAGDGGGRKKUUNXNRNKGKKKKGKKNNNKGAD3,""):AGGKNRK–ˆˆ‹ˆˆ~~wtwpmpmifiiiifcf\_\_\c___c_cc\\XURRKKNRNNGNRUXUX__\cfiimmiiiiiifcf\\c\_\_c_fc_cf\\c_f_c___\\XURRNNDGD=6600,,,)%))"""")%%,,)%%),),)0003GRX\c__\\X\XXUUURUNNNKGGDD=====66:::::::::::::A::::A=AAAANKKGGKRNUUUXX\\\\ccc__\XX™™N™R\™™\NKAf‹‹U‹_UURRRXc____X\UURNKKKGAAD===:36:3,,36:=ADfttwzzwz~~~~ztptpm~~~~~~~zwwtpmttzwwwwwwtttmffccccccfffmmpppwwwzwwz…ˆ’’–œ– ££££ ™œ’’’’‹’’’’’’’’’…………‹‹’’’’–––™œ §­±»Âž¾»¸¸­±­´±±­­­­­­ªªª§£§§§§££££££™œ–™™œ£   £ œœœ™™™œœ™œœ™œœœ™œ™–’’’‹–’™™–’’’‹‹‹……ˆ…ˆˆˆ…ˆˆ‹‹‹ˆ‹ˆ‹ˆ‹‹ˆˆ…ˆ‹ˆ‹……zmmU_UKNDKAA:666336:=::6:6::::=AAADD=:DK~…’–’™œ™––’‹………~zwtmfff_c_cc§§ª££ £§§£££§£££££ªªª­­ª­ª§ª§  œ  œœœ œœ™–––’’’‹ˆ……………zf_\_c\XRXRXXXX\\\__\\XURUUNGGD=:630,00%%"%),))%,03,0,00,000,),0:=DADDKGKURiimfic\RURGKGNKGGKKKNNKGAA3)%"",6DGKKNUX–ˆˆˆˆ…~zwwppppiiimiiccc___cf_c_cfcfc_\\XRUNKRRNRKRRRURX\c_cfffiiiimimmfcf__c_c_cc_c_ccc\\c_ccc\\\\XXXUURNDDDA::3,,)))),")%%%%,)%0,,)),0)0,A336:N\_c__\_X\XXUUUURRRRNKKGGDDAAA::=:::::::::::=D::====D=ADNKNGKKRRRRU\\___\fff_c_c\™™U™U_™™zRNNi…‹‹N‹‹\UUUUU\fccc_\\\XURNKNGDAD==A:66:330366:=Ditwz~z~z……~…~~wwpttp~~~z~ztwtmmptwttwwtttppmcf___c__cffiipptttwwwzz…ˆ‹’’™– £££  œœ–––’’–’’–’’’––’ˆˆ…ˆˆ‹–’’–’’–œœª±´¸Â¾¾¸¸´±±±±±±­­­­ªªªªª§£§§§§£££££ œœ™œœ ££    œœœœ™™œœœ ™œœœœœœ™–ˆ’–––’ˆˆˆ……ˆˆˆˆ…‹‹‹‹‹‹‹‹ˆˆˆˆ………‹‹‹‹‹ˆ~wifU\UKKA=:3666663:::::6:::6:::AAAAA=:=D…ˆ–––œ™–’’‹………~zzwppffc___cc§£§££ ££££££££ ££§ªª­ªªªªª§§£       œœœ™™™’’’’’‹ˆˆ……ˆmc_cc_X\UXXX\\\___cc__c\XUUNKKD==:00,0,""%,))))00,003300,30,33:DGGGKKNK__mmpimf_UXUKKDNNGGKKNNKNG==3%)"""%%)6DKNNRU’’‹‹ˆˆ………~z~zwptmpmmipmiccc\_ccicfffffif_\XXRURNNRNNNNNNRUXXN_cffff_ffifiiccc_c_cf_cccc\f__\X___fc_X\_XXXRRRNGAAA::0,0,))%)%%%%%))),0,,),,3,0,D36::K\\__\__\\XXUUUURRRRRNNKKGGDDD==A==::::::::::G=====AAA=AKKRKNNNUNUUX__\_cfcc_fcf_™™X™Xc™™™\URm…‹ˆNˆ\URUUU\ccfcc___\XURNNGDDDAAA=6:=66336::=Dmpwz~…z~~……~~zwmttt~~~~…~zzwwttpmmttpwtttttmppcc_\\c__cffffmmpttwwwzz……ˆˆ‹’’––œ    œ ™™––’’’–’’–––’–’’‹‹…‹…‹‹’’’’’™™œª±¸¸Â¾Â¾¾¾»´±±­­­­­­ª­­ªªªª§§§§£§£ £££   œœœœ£   ££ œœœœœ™œ œ œ œ™œœœ™–‹’‹–’‹‹‹‹‹ˆ………………ˆ…ˆ‹‹‹‹‹‹‹‹‹ˆˆ…………ˆ‹ˆˆ‹ˆ‹…tzifcRNUN=66:633633366:::6:663:=:AADA==::Aˆ‹’–––œ–’’‹……~zztmmfc___ci§ª££ £ £££ £§£££££§ªª­ªªªª§£§£     œ ™ œ™™™’’’’‹‹ˆ………ˆ~mXffc_\_X\\\_\_cccffccf_\XURNNGAA630,,""))%),3)0333003336066=GNKRNNR\cimpmmmicXURNKGKNKGKKKNNKKA=6)%"%"%%)%3DKNRUf’‹‹ˆ‹………~~zz~tttptmpmpmifcf\ccfmfiiiiifccXUURUURKNNKKNKKNXXRNc_ccc__ffmfffcfc\fcfccccc__c\c\X_\_c_c\X\UXURUUNRDDA::0,0,,)))""%)%))%0,00,0,003,G36==GX\____\\\XXUUUURRRRNNNNNKKGGGAAAAA=====:::=:K:A::=====AGGNKKNRRRXU\\\\cfcff_ffic™™\™Ucc™™™cX‹ˆ‹‹‹ˆ‹R……XUUURXX__c_f__c_\XURKKGDDADA=:=A::6===Dmmmpw~~ˆ~………~~~zzpwwwz~~…~zwtwtpmiippmtptttppmpcc___c__ccfifipptttttzzˆ‹‹–’–™œœ  œœ™™™™’’’––’–––’–––………‹ˆ‹‹’’’’–’’–œ §´¸»Â¾¾»¸±´±±­±­­­ª­­ªª­­ª§§££§ ££ £££œœ   £   §  œœœœœ–œ ™    œœœœ™–‹’ˆ’ˆ……ˆˆ…~…ˆˆˆ‹‹‹‹ˆˆ……………‹ˆˆˆ‹ˆwwicUURRK::3:363663363:=:6:6666::AAD=:==6=‹––––™–’’ˆ……~zwztmifc__\fm§§£    £ ££££§§§£££­­­ª§ª§§£§£œœœ  œœ™œœ™œ––’–’‹‹ˆ…ˆˆi\micc_cc\__\\\cffcfffic_\\UNRKAA630))%%%,03,06663636::0::AKRNUUXccfmipimifcXUNNKDKKNKKKNNNKGDA6,)"%)%))),3DGRUX‹‹…ˆ……~~zzpwttpmpptpmifi_ccimimmmmmifcUURRRURNKKG=KKKGUURKc\_c_cccfiificfc_c_c_cc_c_c_\cXX_\__\_XUXRUUUURXUGGD:6303,,,),""%%%%),303003,0006D6:A=DU\\\\\_\XXUUUUURRRRNNNNKKKKKGDDDAA=========:N:A:=:::::=DGKNNNNURUUX___fifiiffiiiww_™Xcc™™™i™™ˆ‹ˆ‹‹UˆˆURURUUUX\_\c____\\XUNGGDGDGAA==DD=:ADKfppmpwzˆˆˆ……~~wwtzwz~~~…~wwtppiffmmippptppmmmc___\cc_cfcifimmpptttwzˆˆ’’’’™™œ   œ™™™––––™–™––’–™–’ˆ‹ˆˆ‹ˆ’’’––’––œ£ª±´¸¾Â¾¾Â¾¾´´±´­±±­­­­ª­ªª­­ªª§§££££££ ££ œ œ   œ £££   œ  ™™ œ£œœ œ œœ™™’‹‹‹………~z~~~~~~……ˆ‹‹‹‹‹‹ˆˆ………‹ˆ‹ˆ‹…zwpi\XXNDG::360633636:6:=:::6666::A=A=:=:3:‹’–™–’––‹ˆ…twtwtpifc\__c££££œœ   ££ £§££££§§­±­­ª§§§§§£ œœœ œ™œ™™œœ––’’ˆ…………~…iipmccccf_cc\__fifcfiiifcf_\RRND=:0,%"%"),0303:::6:3==A:=AKNUU\X_ffimimfifc_UURNGGKKNKNNRNKKDDA30)""%),%),)0:DNRX\‹‹‹ˆˆ…ˆ~z~zwtwwtpmtpttpmficffimmmppmmffcUXURNRNKNAK=KGKDGRRK_X\_c_cccfffffifcc\_cc___\cX\_\\\X_\X\UUUNURUXN\XXKG=3003,,,),""%)%),0333330,033:A:=A=AXX___\\\XXUUUURRRRNNNNNKKKKGGGDDDAA======::=N:A=::=:::=ADGKNRRUUUUX___iiimmifiimtpc™\fc™™™m™‹ˆˆ…ˆ…ˆU‹RRRRRURXURU_\\\_\XXURKGDGDKGDAGGGR=Xiiipmmpww~………ˆˆ…~…zwwtzzz~~~…~zzptmfcciiipmptmmmii_\\_\___cfciiimmppptptz…‹…’–’–’–™œœ  œœ™™’–™™™™™––™™™™’‹‹‹‹’’–™–™™œ§­±´¸¾Â¾»»¾»¾´´±´­±­­±±­ª­§ªª­§§§§££££      ™œ™œœœœ   £     œ™œ     £œ  œ™–’’‹ˆ‹……ˆ~~zzwzwzzz~z~ˆ‹ˆ‹ˆ‹ˆˆ………~…ˆ‹‹ˆ’ˆˆ~tmX\\UNDD6=333333636::::==::66:::==A==A:6=’’™’’––’‹‹ˆˆ……ttptppifc___f§££ œ™ œ £§£§§£££§§ªª­­ªª§ª§§§£ œœœœœ–œ™™œ™–’’’’’‹ˆˆˆ~…wz…iifcicf___ccficfimfffic_RRKG=:,)%""""%%)03300:====AAAGGGNNRUX__cfiimmmfff_\RRURKKKNKKNNNRNKDDA03%%"%%"%)"0,,003GRUU_‹ˆˆ‹ˆ…zzzzztwtwppwtwwtpiicfcmimmpmimfc_XXRUKNKGNAG=GDGAGRRG\UX\_\c__cciiificc_\c__\c\cXX\XXXU\XU\RRRRRRRXU_\\GKA3330,,,),""%%)),336336,,0666D6A=AAUXc__X\\\XUUUURRRRNNNNKKKKKGGGGGDDAA=====::AR:D:=::::::DAGKKRRRRXUU_ccmimppmfifppX_i\ccpp™p~ˆ……~ˆˆ‹R’RNUUXXU\XRUUXXX\X\XUUNKGGGGKGDNK\Ucfmmmpmpptwz………‹ˆ…~~wwztz~~…~~zzzmppcc_cffppppmmmfc\X\\\__ccfcfiiimpmptttz‹ˆ’’––’‹’–’™œœ œ œœ–™œœ™œ™™™œœ™œ–’’’’’–™™œ™ ­­´¸»¾¾¾¾»»»¾¸¸±±±­­±±±­­­§ªªª§§§££§£ £  œœœœœ™œ™™™ œ   œœœœ™œ  £££££  œœ™–’‹‹ˆ‹ˆ…z~ztwttmtpwzt~z…ˆˆˆ…ˆˆ‹………ˆ‹ˆˆˆ–……zpiX\\UKAA6:36300360666:=:==:6:6=:=A=:A==:A–––’’’’’ˆ‹……tpitmmfcc__\f§£  œ™   £§££§§§§ªª­­­­­ª§ª§£§£ œœœ™™–™œ™™™–’–’’’ˆ‹ˆˆˆ…~…z~ˆ…mmifmficccffffcciiciiiccRRGGA=3)%%%%%%%,3000:==AAADDDKKNRURU_ccfiiiiiifffc\URRRKKNRKKNKRNNGDAA33%))%%",,%30003:KUX_’‹‹ˆˆˆˆ…zzzwzwttwtttwwwtpmmcffiimmmiiicc\XUNRKKDAKDG:DAGAGNRDRU\UU_f_f_\mficiccc\c\_\_\c\XXXUUNRXRXNNNRNNNUXc___KD6363,0,),%%)))))33:3630033::A:AGDDR\_\_UXXXXUUUURRRNNNNKKKKKGGGGDDDDAAA===:::DR=G=:::666:G=DKKNRRRURU\cfifpmtpimcmm\_fXc__f~_p~ˆˆN™NNUX\_Xc\_RRRUU\XX\UXRNNNKRUNGfmmffimmmpppttww~…ˆˆˆ~zztww~~~…~~zwwwmmmccc_fcmppmiiicc\\_\\\cccccfimmmpmpppt~…‹‹‹’’’’ˆ’’–™™™œ œœœ™™ œ™œœœœœ œ ™’––’–’’’™™œœ£±±¸»»¾¾¾¾»»»¾’´´±±±±´±´±±±ª­ªª§§§£ ££   œ œœ™œ™™™™–œ™œ  ™ œ œ   ££££££œœœ–’‹‹ˆ…ˆ…~wwwpmppimmmfmzw……ˆ……‹‹……ˆ…‹‹ˆ‹–wicX\\RKD=:63300366366::=:==::=6A==DA:A=A==’™™–’’’–’’ˆ‹……~wtmfpimfffcc_i£ œœœ™œœ £££§£§§ª­­­±±­ª§ªª§£§  œ™™™––™™––™–’’’‹…‹ˆ…ˆˆ~…‹…pzmipfifcccffc__fffmifccRRGGD:6))%)"%))%%,3,06=AADGGGGGNNRUXUXcfffifififcff_\XUNUNNRNNKKNNKKGDD=66,%0,),000)63666DU\‹‹‹ˆˆˆˆ…~…z~zwwwttttpttztwtmpfffffmmiiff__XXRGNGAGDGDD6A=DADARDRXXUN\c_i__iifcic_cX___\\\_\\XURUNRUNNKNNNNKRU\___\KD:36300,),%%)),,,66=3:03366:=A:=KDGRX\\\R\XXXUUUURRRNNNNKKKKGGGGGDDDADAA===:::AR=G:::::666GAGGKNNRURUX\cffimmpmfi_if\_cUcN\ft_mUtt~ˆˆ‹K™RUXXctcmcfXRNRRXXXXX\XUUURUXXimppiimppmpppttwzz~…………~zzwzz~~~z~wwttpfifcc_ccmmppiff__X\_\_\__ccfffmmmppptwzˆ‹’’’ˆ’’––œ™ œœœ™™£œœ œ      œ–™™’‹’’’–™™œ §´´¸»¾¾¾¾¾»»»»¸±¸´­±±´±´±±±­ª­­§§§£ £ œœ ™œœ™™™™™™œ–™–œ  ™œ  œ ££££ §££  œ™‹‹‹‹……z~tttmmmmfcfifipt~…ˆˆ…ˆ‹ˆˆ’‹‹ˆˆ’~ztc_X\XUND6:333330666::::=:===:=:==ADA=D=DA=–™™–––––’’‹‹…zwtmfpiiffffcci œ™™œ™œœ ££££§ªª­±­±±±­­ª§ª£££œœ™––––––’’–’‹ˆ…‹…ˆˆ……~ˆˆt~mmmcfc_c_ccc__cffimff_RNGGG::)))),))))%%0000=DGDGKKKKKNRUX\X\fifcicicffcfc_\\XRURRURRKNKNNGDAA=6:0)3%0,03330:3:::UX‹ˆˆˆˆ………~~~~zwwtttptpttwtwtmpifc_cimifc_\\XUNDNKDKAADA::=D=GANGRUUXNXccmcimmcffc__\\_\\X\\XXXRNRKRRKKGKKKRKRRX__\\GG=630,,,),%)))0,06:=3=33636:AA=ANDDUUXX\U\XUURURURRNNNNNKKKGGGGDDDDAAAAA===:::=R:D66=:=:36KDKKKNRRRUXXXccciiimicf_f____\_NUfp__Rpwz‹…K™U_iiˆzwztt\UNRNUUX\\_\XXcXfmmmpttmmppmppppptwwz~~…ˆ…~~~~wz~~~~~zzttppmfiiccccciimpicc_\\\_______cfffiipppttz~…ˆ‹‹’’’‹‹’’–œ™œ   œ™   £ £ £ ££œ™œœ’’’’––œœ ª±´¸¸¾»Â¾»»»¾¸¸´´´±±±±±´±­±±ªªªª§§£££ œ œ™™œœ™––™–™––’™œ œ     £ §§£§£§£  ™‹‹‹ˆ~~wzpppimficccfffmpt~…ˆˆˆˆ‹‹‹‹‹…ˆzwwf_\\_UURA::336333663::=:=::::=:===AD=AD=DA:™™™–™–––’’‹‹…~~wtmimmmifffpp™œ™™™™–™œœ £ §§ªª­­±±±­­­ª§ª£’’™™’’––’–’’’‹‹‹‹‹ˆˆ‹……ˆˆˆ……‹ˆt~pmiccf__\_____\fcfici_URGKG=:6,),30,,),3003:GGKKGNNNNNRUX\\\_fff_fcffccffc__\\RRUUUURNNKNNDDAAA6:3,60,030363=:===‹‹‹ˆˆˆ‹……~~~~zzwwpttmpmppwtwwptmfcffiiicc\U\URNDNKDG=AAA==AD=DDNGRRR\RXcfmfmmicfcccc_\\\\UXXUUUNKNGNNGDGGGGNKUNX\\XXDG=36000,),%)),,,036=3A66:6:=D=AAKGGXRXU\XXXUURRURNNNKKKKKKGGGGGDDDDAAAA====:::6N6A66===:63KGNGKRRUNUUU\_c_iffif_\\cc\c\__RXfm_\Npt~’N’™cimw‹‹z~zt_RRRUUX_\c_\_ffmppptttpmpppptpppwww~~……ˆ…~~~z~~……z~~zzwztppmiiiiccccfiiimfcc_\_\___c__cccfiimmpttz~ˆˆ‹‹’–’‹‹‹‹––™œ™ œ œœ£œ  £§££££ œœ œ–’’’’–™ £ª­´´¸»¾¾»»¾¾»¸¸´±¸±±±´´´±­±­­­­­§§§£   œœœœ™œ™™–––––™–™œœœ  ££ §£§£§§£§§œ –’‹ˆ…~wwtppmimff_cc_ccimpz……‹‹‹‹‹‹ˆ‹ˆ…wttc\\\_UUN=:6636306666:::6=:6=6=:::==AADDDG==™œœ™™–’’ˆˆ~zwtpipmpifii’––’––™™™™œœœ£££ªª­­­±±´±±­ªª§£’’’’‹’–’––’‹ˆ…ˆˆˆˆˆˆ…‹ˆ…ˆ…ˆ‹‹ˆt~mpmc_c_\R_\\\_\cciiff_XUNGG=::0)0630030:30:GKKNNKRNNNRNX\X_\cfcc\cccf__ccfcc__UUXXUXRRRKRKAADA=::66:360663:6AADGU’ˆ‹‹ˆˆ‹‹‹……~~~zzzzwwptpmmmppwttttwpificifi\c_UXRKNDNGAD:AD===AA=GGKGRRNXU\_fiimifcccf_c\\XXXRKRXRRKGKAKDDDDDGDKGRNU_\UNDD=03030,,,%),,,0333=6A::D:=AAAAAKKKURXXXUUXUURRUUNNNKKKKGGGGGDDDDDDAAA=====:::6N:A:6:=A=66GGKDKNRRNRUUX\_\f_cf__\_____\c\UUc_\UKmwN‹~XR™™fmp’ˆ~~…zz\UX_XXiiif_mptptttttptpmppptpptwwz~~…ˆ…~~~z~…~~~~zzwwtpmiffifccfcfiiiiicc__c____c_c__cffmimttt~…ˆˆ‹ˆ’’’‹ˆ‹‹‹’––œœœ   œ ™ £ §£  §œ™  ™’’’’–™ £§§±´¸»»»¾»¾»»¸´´´´´±±´´´±±±­±­­­§§§£    ™ ™™™™–’––™’––™œœœ ££££§£§§£§£££££’’’‹ˆ~wwtpmmiicfcc__ccfmmz~……‹‹‹‹‹ˆ’…~tmf_X\X\RRK6666363333666666=:::3=6===ADAADGK=K™™œ™–’’’‹……~zwwtpmpppimmi’––’’–––™™œœ £§§ª±±­±±±­±­­­ª£–’‹‹–’’’’’‹ˆ………ˆ…ˆˆˆˆˆ……‹ˆ‹ˆ‹tpmmc___\U_UXX\___fiiicUURGKG===36:63063D:DGNNNNRNRRNNRNU\X__ccc_\___c\__cifc__XXXXXXRNRNRNDDDA==:::=6=6::==:DDN…ˆˆˆ‹‹‹‹ˆ…ˆ…~z~~wttpppmimppttttwzpmfmffff__\UURNNDNGAD==D=A===AGGNGRNKURX_cffmmfc_cc\_\XUUUNKNURKGGGAGAADDDDDGDGRU\XRGDG:0030,,,0),,,00636=:=:=G=AADDAAGNKRRXXNUUXUURURUNNNKKKKGGGDDDDADAAA=A====:::66K6=63:AAA::GDGGGNNNKNRRUX\_c__c\\\\\___\_XXRf\\RGizKKNUNfcipt…~ˆ~~t\fip_pmttpptwtwtpttptmppptttmpww~~~~………~zz~~~~~~~zwwtppiifffi_cfcfimfif____ccc__c\_\_ccciimwtz…ˆ‹‹‹‹‹‹ˆˆ‹‹’’™œœ  œœ ™££ £ £œ£œœ œ–’’’’’’’™œ ££ª­±¸»¸¸»¾»¸»¸¸¸´´±´±´´´­­­±­ª­ª§££££   ™ ™™™™––™–––™–™ œœ £££££££§§§§£§§§ ’‹…wttppmiiffcf\\c_cmmw~~…ˆ‹’‹‹’…~zp_AUAXDXA6::36666030663363:::663=6:A=DDAAGKNDN––™™–’’‹ˆ…~zzwwttmpppmpt™’’’’’––™–™™ £§§§­­­±±­­­ª­ªª ––’‹’’’’’’ˆ………ˆ…ˆˆˆ…‹ˆ…ˆ‹ˆ‹ˆˆ…~pimc__c\X_UXUX\X_cfif_RRUKKKAAA=:A6:=DGGGNRRRRRURRRRRRNRXX_\_c__X___cXc_cffc__\UXUUURRRRNKGDAAAA6=6=:A:=AAA:GKR…ˆ‹‹’‹‹‹‹‹…‹……~z~~tttpppiimppttttwwppimiiicccXXXRRKDNDAA=AA:D:::DDGKGNNNUNU\_cci\fc_c_X__URKRKKKRNGAGGAD=DGAADAGGDUXX\NDAD:3000,0,0),,000636==::AKADDGAAAGRNURXUNRXXRRNXRRRRKNKNGGGGDDDDAAAA=====:::::66G33666=AA:6KGKGKKKNKKNNUUX\X\\\\XXXX\_\X\\\UcXXADANDGDKKNXfmw‹‹z~~…zzttttttwwttwzwwtpwwmpmpmptttmpwwz~~~~…~~zzz~z~~~~zwwtpmffffffcffffmiiff\\\\_cf__c\_\__ccimpzwˆ‹‹‹‹‹‹ˆˆ‹‹‹–œœœ œ œœœ£ œ œ£œ£œ™œ™––’’–––––™œœ  §ª­´¸»¸»»¸¸»»¸´´¸´´´´´´±±ª±±ª­­ª£§££ œœœœ™™™–––™––’™™™   ££§§££§££§§£§§ª££ –’‹…~zwppppmmif_c__cccmpwz…‹‹–‹‹…zpiR=6=6,30006633663303333336:63:6:6:==ADAAGKRNN––™–’’‹……zzwwtpppptptw™’–’’’’–––™™œ £§ªª­±­­­­±­ªª§œ’’‹’ˆ’’’’’’’ˆˆˆ…ˆˆˆˆˆ…ˆˆˆˆ‹ˆ‹‹…ˆzmfic___\\\XUUUXU\_cfc\RURNNNDDDA=DAAANNRRRUUUURURRNRNNNNXU\\____\____X_\ccccc_\XUXRRNNNNKNKG=DD=:A:==D=ADDADKNUˆ‹‹‹‹‹‹‹‹ˆ‹……zzztttpppmmmppttwtwwmpmpmfi_c_\XXUUNGRG===DA=A=::AAGGKRNRRNRK\_DfXc_\__R\\RRKNGGGKKDADDAAADGDDDDGKGUXRXKAD3:63000,)0,0,003366:===DGAGGKDDAGRNRNURNUUUUURUNUNNNRNNGKDDDDDAAAAA===:::::6666D633:6:=D:3KDKDKGGKGDGKRRRRUXXXXRNURX\XXUX\RNUN=)00"%,AKUXitwˆw~~~~wwwwwwzzwtzzztttwwppmpmptttptwwz~z…~~~~~zzz~~~~~zwtpmffiffccfffifiic\X\_ccfc_c____cccimp~wˆ…‹’‹‹ˆ‹ˆ‹ˆ‹–™œ     ™œ œœ™œ  £™œ™™–’’–––™––™™™  £§­´¸»¸»»»»»»´¸¸´´´´´´´±±­­±­­ª­§§££  œœœœ™™™––™–™–œœœ££££§§§££§£§£££ªª§§§£ ™‹ˆ……ztttppmmffccc_cccitz~…ˆ’’’‹‹ˆwmRA6300%,0,,3666330000300363:36:366::=AAAADNU\––™™–’’‹………~wtwtmmpmptz’™’’’‹’’’–’–™œ £§ª­ª­­±±­±­ªª‹‹ˆ‹’’––’––‹ˆˆˆˆˆ‹ˆˆˆˆˆˆˆˆˆˆ‹ˆ……wpicfc\\\\XXXRURRXXXcc_XUURRRNGGGDDGDDKRRUUUXXURNRNNKNNKNNUR\\\\_\X__c\X____cc__XURUNNKKNKNKNKAGD===6:ADAAGGDGNR\…‹ˆ‹‹‹ˆˆ‹……~zwpttpppmpipmtptttwmppmmcfc_\\XURRNGNDAA=DA==:=:=AGKKRNNNKNGXRDDR_\X\_UXXNUKGGDDGAA=GD=6AAGADGDGKKRURUKDA36600000,000,03366::=A=DGAGKGGGNKRRRRUNRRXUUXRXRUKKNURRKNDDDDAAAAA====::::66633D330:36=A63GDGDGDDGKDDNNNKKRUUNUDKRNXXUUUUXNKK)))%%")3RKfpttt~~…zzzwzzz~wtzwztwtwttpmmpptwttwwwz~~~~~zzw~~………ˆ…zztpifffcccfcfiiffc\X_\ffffcc__\\_cciipˆ‹’‹‹ˆ‹ˆ‹‹‹–œœœ œ œœ™œœœ™™œœ œœ™™––’™–™œ™™™™–œœ §­´¸¸¸»¸»¾»»¸´¸´´´´´´´±±­­­­ªªª§£££  œœœœ™™–––™–––™™ £§§£§ª§£§££ª£££§­ª§§§£œ™‹ˆ…~zwttpmpfifffcccfmtz~……ˆ’’’’ˆ……p=A=300"%),)0,33330,,0)0,00336366366:::===AAKU_™–™œ––’‹‹ˆ…wttpiimppt‹’–’’’’’’™™  §§ªª­­­±±­­ª§‹‹‹ˆ‹‹‹––––’–ˆˆˆˆˆ‹ˆˆ‹…ˆˆˆˆ‹ˆˆˆ…tpfcc_\\X\UXXRURUUUU__\UURNNRNKKKGGKGGNUUUXX\XUNNRKKKKNGKNURXXXX_\\\\_\X_\\_c__\XUKRKKGGKKKKKKDGDGA===DDD=GGNKX\……ˆ‹‹‹‹‹‹‹‹‹ˆ…ˆ…zzppwppmpmpimipppttwmmmmiffc\\X\UUUNGRADAAD=======DGKNNNKNGKDNNDDRXUXX\URUNRKGDDDKAD:DA:6=ADAAKAKKNURRXKD=33330300,0,0000336::AD=DGDGKGKKRGRRRRXNRNXXR\UUUXNGRUUNNKGAAAA=====:::::6666633A630=03:=30DAGADA=DGAAKKK=GGGGDNDAGKURRRRRU=G,%%%")3DADDRNpz~…~~zzzzz~ztwwzwwwzwtpmmpptwtwwwwz~~~~~~z~z~~…ˆˆˆ‹ˆ………wwiffifffffffifcc\X__ffffcc__\\\ccimp‹’’’’–’’’’‹‹‹ˆ–™™œœ œ™ ™œ™œ–™™™œœœ–™–––™–œœœ™œ™–™œœ§­¸´¸¸»¸»»»»»´´´±´´´´±­±­­­­­­ª££  £œ  œœœ™–™––––’–œ££§£§§ª§£§££§£§§§ª§ªªª§ œ–ˆˆ~zwwpppmiiiiffffmtzz~…’’~\~KN:6:30,%)))),,03000,),)0,0033:3363366:::::A=GU%œ  ™™–’ˆ…wppmffimtt’’’‹‹‹‹––œ£§§ª­±ª­±­ª­§–‹‹‹‹‹‹‹––™™––’‹‹‹‹‹‹ˆ…‹…ˆˆˆ…ˆ‹ˆˆzpmcc_\\\XXR\XXXUURRN\XXRRNNNNNNKGKKNKKRRRRUXXURKKNDGKGKDKNRUXXXX_\__\__X\\\___\XXXNKGKDDKGKNNNGDGKDAAAGAG:KKRU……ˆˆˆ‹ˆ‹’‹‹ˆ‹‹ˆ……wwpttmmppmpmmimmmpptiiimfffc\\\\XUUNKNDADDD=AA==A=ADGKNKKKDKAGGGDNKRXXXURNRRKGADAK=D6A=3:ADDAAKANKNUNRXGA:36330000,000330336::=GADGDKKGGNRGRNUUURRNXUNXXXXXKGUURRNGDAAAA====:::::66666333A303:,6630,A=D=A==AD=AGAD:==DADAA=DGRNNNN=G:0)%""",0036=AKmwz~~ˆ~~~zzw~ztzwzzwwzwwmmppptwwwwwwz~~~~zz…‹‹‹‹ˆˆ…ˆ~zmifiiffcfccfc___\__cfiic__\_\_c_ipt––––’’’’’–’’‹‹‹ˆ‹–™œœœœœ™œ–™™œ™œ™™™ œ–™–––™–œ™œ–™™’–œœ£±¸¸¸»»¸¾»»»»¸¸±±¸´´´±­±­±­­±ªª§££     œ œœ–™’’–™’™™££§£££§§£§§§ª§§§§ª£ªªªª£ ™’‹ˆ…~z~wttpmipiimiippwz~ˆ‹‹‹KKNA:3360,,))%),)),0,,,)),,,,000360360033:666:=:,t% ££™œ–’’’‹……~wtpifffitz’–’–‹‹‹ˆ’™œ££§ªª­­­­ªªª™’’‹‹‹‹‹ˆ’––™™––’‹‹‹‹…‹ˆ………ˆ……~zmi_ccX\\\XU\\\XUXURNUNNNNKNNKKKGDKNKKKNNNNGUURNGGKDDGGGDKKRRUXXX_\\_\__\X\\\\\XUUUNKAKADGDGNNNGGGNDDDDDDK:GKU\…ˆˆˆˆ…ˆ‹ˆˆ‹‹‹‹‹…ˆ~wwtptmmppmmimiiimptwiiimfcf_\X_\XXRKKRADDDDAAD=AAADADKKKKG=GADDDADKRUUNUNRRNKG:D=GAD6==6:DADDAGKNGKRRNUD=663330000,33366366:::AKAAGGKGDGRUKUNXUUUUR\RR\\XXUNDXUNRKKAAA===:=:::66663333363D3006033,),A=A==::=::=:=A6::A=A===:GNKKGG:A3,)%%),033:=G_twzz…~…~~zzzzzwzwzwwwwttmmppptwwtwwz~~…~~…~z……ˆˆ‹‹ˆ‹~mmimfifcfccf___\_c_ffifcc_\___ccmtz––™™™™––’–’™–’’–™™™œ™™™œ™™™™™™™™–œœ™™–––™™œ–™–™–’™œ ­´»»»¸¾»»»»»´¸´±´´´±±­±­±­­­ªª§££ £      ™™™–’–’™™  ££  £§£§ªªª§ª§ªª§­ªª§§£œ–ˆ…~zwwtpptmmpmmtttwz~…‹ˆ‹NKD==30300))))%,)%%),,%)%))),),,3363330,0063336360p"££§™œ–’’–ˆ…wpmccc_ft~’–’’’‹‹‹ˆ’™ £§ª§ª­­ª­ª§§™’’‹‹‹‹‹’’–™™–’’‹…ˆ…~…zwmf\__U\__XX\\_UUUXRNRNKGGDNKKKGDDKKGNKKKGKGRRKDDGDDADGDDGKNNRXXX_\_____XX\\X\_URURKGAG=DDAGNNNKKKKNGGGGGK:GRXzˆ‹‹ˆˆ…‹‹ˆ‹ˆ‹‹‹‹ˆ……~wwpmtpmppmmimmimppttmimiifc__X\\\\NGGNDGGGAAAD:DD=GDGKGGGDADAA=DADGRRRKRKRNNND:DAGDD66=:6DAGGDGNNKNUURRAA6333300000303336636==DKDDDKNKGDNXNURXUXUUUXNUXXXUXRGURKNKKA====:::::666633333660G603:,0,,,)=:=:::==:6:6:66:6:6=6:::DGDD==6:6,,""%),006:D\mtwz~~…~~wwzwzwzwzzwtttpmmppptttpwwz~~…………………………ˆ‹‹’’‹‹…~mmmpiicfcccc\\__cccffifcc____ccfit~™™œœœœ™™–™–™™’’’’’’’’™–™œœ™™™œ™™™œ–™œ™–œ™™™™™™™œ™––––’’’–™ ­´¸»»»»»¾»»»´¸¸±´´´´±­­±­±±­ªª§££££  œ£  ™–™–’’™™œœ £ ££§§ª­§ªª­§ª­ª­ªª§ª£ ™–’‹ˆ……~zwwttwpptppttwww~zˆ…‹zNGA::3030,%%)))))%%%))%%"%%),)),00300000,,30303330p§§£§  ™’–™’’ˆ~wpicc__cw’’’’‹‹ˆ–™ ££ªª­ª­ªªª£ œ–’‹‹‹‹–––™–’’’’ˆ……~~zz~twtmi\c___cc\X__\UXUXURNNGDGDKGKGGGDKKGKGDDDDDKKGDAD=A=ADAAKKNNNUU\_\\\_\\\XXXXX\XURKGGDGADDAGKKKNNNNRKKKGKKKRU_~‹‹‹ˆ‹ˆˆ‹‹‹‹‹‹‹‹ˆˆ…w~~zwpptppppmmmmiimppttiimfifcc_X\_X\NDKNAGGDDDDD=DGDKDGGGKDAA:A=ADDDG=KKNRNRRNNG:KDGGA:::==DDKKGKNNKNXXNND=:333300003303063666==DKDGGKNKKGKUKUU\XXXXU\RXXUURXRDRNANGGA==:::6:6663633303066,D630:),,))):666:=::66636:363:3666:6AAA6=:0,3))%"%),0,,33=X\ptzzz~zwwwwwzz~zwtptpmmpppptttwzz~~ˆ…ˆ…ˆ……………ˆ……ˆ‹‹’‹‹‹…pppmmicf_ccf__cccccfiffff_c__cffmzœœœ   œ™™œ™™™–––’’’––’––™œ™œ–™œœ–œœ™™œœ–™™™œ™™™œ™–––’–’’™™£­´¸»»»»»¾¾»»±¸¸´´´´´´±­±±±­­­ª§££££œ œ œ ™™™–’’––™™ œ  £ £§§ª­§ªª­§ª­ªªªª§ª§£œ™–ˆ……~~zwwzttptmpptttzz~~U_KDA63300,))%,)))))%"))%%"""%))),,,00,,,,))0,00030,£Kª§§££™–™œ–‹~ztmf__\c_zˆ‹’’’‹‹‹‹™™œ£§§§ªª­­­ª£ ™™’’‹ˆ‹‹’’’’–™––’ˆ~~ztwwwwmpmimcccccff____\X\XXURGKDDDDGGKGGDDGGGGGDAAAADD=A=AAA=AADAGKKNNUUX_\\\\\X\X\XXUXXURNKKGKDDGDDKGGNNRRRNGNGKGNUXc~‹‹ˆˆ‹ˆˆ‹ˆ‹‹‹‹‹‹ˆˆ…wzzwwtttppppmmimimpppttifmfffc_c\\\\XKDGRGGDGDDADADGGGDGGGGD:A6===ADAG=GKKNNRURRKDNGGD=:::=AADGKGNKKGKUUKKD:6333330000330063366==DGAGKKKNKKKRGUX\\\UUUXRUURRUUNDA=AKDGAA:::66666333300303360D6636)))%%%63336:6636600:6636333063=A=6:03,3,%%"")),,,,033GXipww~z~~~~zwwwwwzwzwwtpppmmppmpttwwz~~~…ˆ………ˆ…ˆˆˆˆ‹ˆˆˆ‹‹‹ˆ‹ˆ…tptimicfc_ccccffcffffifiicfcccffp™ œœ £ œœœœœ™œ™™–’’–––’–™™™œ™–œœ™™ œ™œ™ ™–œ–œ™––™–’––’’’™œ£±¸¸»¾¾»»»¾»»±¸´±´¸´´´´±±±±­±­ª££££       ™–––’’’’™™œœ œ  £££§­ª­ª­ªªª§ªªª§§§£ œ™’’‹ˆ‹…zz~~wttpmpmppmpwfm_N\GA=3300%,))%,,,,)%%%%%%""%)%%))),,)),,%%,)%,)0,)£Nªªª§£œ™–™’ˆ~pifc\__\z‹’’’’‹‹‹‹’–™œ££§ªª§ªªª§§ œ––’’‹‹‹’’’’’–––’’’‹…~~zzwttttpmmmiifcfffcicc__\X\XXURGGDGDDGGGDGADGGGDDA=A===A:=:===:=ADDGKNRRRRX\\\XX\XXX\XXXRURRNKNDKGDGGGGDDNNURRRKRDNNRX\f~ˆ‹…ˆˆ‹ˆˆˆ‹‹‹‹ˆ…wzzwwttttpppmmipmpptpptmcmfif_\_XXXXUNGGNKGGKGGAGAADKGDDKDDA==::A:AAAD=AGGKNURUUNGRGDDA:::ADDDGGDNKGGGURDGD66333333303300,3636::=GKADKNNRKGNNKUXXX\UUUURRRNRRRKA==AGDDD==:663:3333300360003,D333,)%%""%300030330333363303033033:=:3600,00%)"",)0,,,303DX_mttzz~~zzzwwwwtwwwttppmmmipmmpttttzzz…~…………ˆˆ……ˆˆ‹‹ˆˆ‹ˆ‹…ˆˆˆ‹‹ˆˆ…~tppfifccf_ffcciffiiifmimififfffit’™  œ£££  œ  œ œ™––’–’––––™œœ™™™œœ™œ ™ œœœ™œ’™––’™’’–’’’’–œ ´¸¸»»¾»»»»»¸´´±´´´´¸±´´´´±±±­ª£  £££    œ™™’’’’’™™™   œ £§£ªª­­ª­ªªªªªªª§§£  œ™––ˆ………~zzwwpimiiiiicci_NUGA=330,%)%)%)),,,)%)%"%%"%"")%%,)%%))""))%,)%0)§ªªªªª£ œ–––…~~tff___\Uz’’’–’’’‹‹‹‹’’–œ  £§§§§§§ªª§ œ’–’‹‹‹‹’’’™™™––’‹…wzpptppmpiiiiffifiiiffffcc\\\UUURKDGKDDGGKAGDGDDDAAA===:3:6:::=::=AAADKKRNRRXX\X\XXXXX\UXXUXUUNRRNNKGGDKKGGKRRRRRKRGNRUU\czˆ‹ˆˆˆˆˆˆˆ‹‹‹‹ˆˆ…wzzwtwtwtttppmipppttpptmfmiic__\X\XXUNKKNNKKKKKAGADDGGGDGAAA=:66=:=A=:AAKGGRRRUXRKRKAGA=:=DGGDGDDKNDDDUNGKA:663333330033300:33=:=GGAAGNRNKKRNKXX\\\XRRKURNKNNKK=::DGDGG=:66336300000033,,,0)A000%%%""3,,%0,00,000336303000366:::66,000,)%"0,0000333=U\fipwwz~zzzwtwwwttwtppmmmiiippmpptptwwz~……ˆˆˆˆˆ…ˆ‹‹‹ˆˆ‹ˆˆ……ˆ‹ˆˆ……~ztpmiiffcfcfffiiiiiiifimimiffifmm–œœ   £ ££ ££  œ–––’––––™™™™ ™œ™  œœœœœœœ œ™–™’’–’’’’’’œ±¸¸¸»¾»»¸¸¾»»´´±´´±´¸±´´±±±±­­ª£œœ  ££    œ™’’––™™œœœ£œ£§§§ª­ª­ª­ªªª§§ªª§§ £ ™œ––’‹’ˆˆˆ……wzwtmfifcfffc_c\NRD=A330,))%))%),,0,))%%%""%"")%""%%"%%%))%0,ª§ªª§ª§  ™–’‹…~~pffc___X‹_’’–––’’’‹’™œœ  ££ª£§§§­§ œ’’’‹‹ˆˆ‹‹’™™––’’’ˆitimmmmfiifffiifiimiiiffcfcX\\XXURKKGKDGGKN=DDGDDDA===:::66::6::::=ADADKGNNRUXUXX\\UXXUXUU\\XXXRURRRKKKDKGKKKNRNNNKRKNUXX\_wˆˆ……ˆ‹‹ˆ‹‹‹‹ˆˆ………zzzwtwtztpwtmmmmttpttptmimficc_\X\UUXNGKNNKKGNGADDAADDDDDA==:666A::A=3A=GDDRNUUUUNRK=D=ADAGKKGGDANNAAARKDK=:663333330330000:63=6:GGDDGNNKGNNKR\\_\XUUNGRNKGKKGG:=6ADGDDA=6300630,0,,,00,)),%D),%""""0)))%,,,)0,06:6333033666:6360,03,%"""",03033333AR\_fiptwzzzzwtttttttpmmfiiiimpmpptppptzz~…ˆˆ‹‹‹ˆˆˆ‹‹ˆˆ‹ˆˆ~~…ˆ……~zzwtpmmfffffcffimmmmiiiimmmpiimmmp……–  œ£££££££££££ ™™––’––’–™™œ œ ™£œ    ™œœ œ™™œ’’’’’’– ´¸¸¸»¾»»¸¸´¸¸´±´´´±´¸±´±±­±­ªª§£  œ     ££œ–’’‹’–™™ œœ  §§§§ªªªª§ª§§§§§ª§§£ £œ™œ’’’‹‹‹‹ˆ…twtp_c_c_ccc_\XGKGA:=630,,))))),,,,,),))"""""%"""""")%%%),0ªªªª£§£œœ–’ˆzmiifcc_Xc’––––’’‹‹‹‹’–™™œœ£ §£§§ªª§ ™ˆ‹‹…ˆˆ‹‹‹‹’–––––––‹iifcfiifcffcfiifmmmiimiific\\\\XXRRNRNDKGKKADAGDDAA:==6=6:6=66:666=AAAGGKNRNRUXXXXXUUXRUUX__\\UUXRUUNNNDNKKNKRRNNRNNKKUUUX_c…………ˆˆ…ˆˆ‹‹‹…ˆ…~zzzwzwztpttpmmmttpttpwmimfffc_\\\XXUNGGNKKGDKD=AD=6=6AAA=::63:6=::A:6A:DDARKRUXRKRK6DADGDGGGGDADNKGADNGDK:666333333003,,,,6:6A66GKGGGKKKGNKGUXX\XXRRGGGKGK:GD:6:6=DDGA=A:333660,,,,),,))%%"A%%",%)"))),,036::66666666::6033033,)""""%,3636666:ADX\cffptwwwwwwtttttpmifffifiipmmptppttzzzˆˆ‹‹ˆˆ‹‹‹ˆˆˆˆzw~zz~zwttwttmmifffccffmppppmmimpmptmmppzz’™ £  §£££ £££§££œ™™™’––––œ™œ   œ§ ££ œœœ œœœœ™’’’’’’’™ª´¸¸¸»»»¸»¸¸¸´¸±´±´±±¸±´­´±­­ª§§£œ œœ  œ ££ ™’’–™œ œœ ££££§§ª§§§§§§££ªª§£££  ™™––ˆ‹…~ptp_\_\_\\__\XRGGD=::63000,,))),,),),)))"""%%"%),0ª§§ª£££œ™’ˆzpmmiffpt’’’™™™–’‹‹‹’’––™™  §§§ª­§§œ–‹‹ˆˆˆ………ˆ‹‹‹’’––––––’ˆi_\_c_cc_cccffifimmimifmiff\\__X\UURURNNGNGDADDADA====6:3:6::36363:A==GDKKNNRUUUXXXRRURRU\cc_\\XXRUURRRDNNKRNNRKRUNNKKRRRX\_……ˆ……ˆ…ˆ‹‹…ˆ……~zzzzwwwwtttppmppttttpwiimfffcc___XXURKGNGGD=GA:=A:6:33==0666366=66A6:A6ADDRKURURNRR:ADGDGGGKKGAGNGNAANDAG:6::333333003)),,3=:D36DNKKGGKNGNNNXUX\UXRUGKGGGG::=:66:6DAGDAA:63663,)),))%)%%""=""%%%)0006:6=:===6666:6:6033360,,%"%")06:66:6:=DGUU_cfmptttwwwtttppmmmffiiciimppptttwww~~………‹‹‹‹ˆ‹ˆˆˆ…ˆˆwtwwtptwtttttpmmfffcfcfippttppmmptttttptw~ˆ’–œ £££§££££§§§§§§ œ–™–œ–™™œœ   œ §£§££   œ™ ™™–’’’’’’–œ­±´´´»»¸»»¸»¸±´±¸´´´´´±±­±­ªªª££ œœ ™  œ   œ–’‹––™™ œœœ    £§§££££££ §ª§§££  œ–™™™’‹’‹‹…zppiXX\XX\\\\RUNGDA:66:600,00,)),,)),,))%%""%%),00ª§§§££ ™–’ˆ~~ztppiiitw’’™œ–––‹‹‹‹–––™  £§£ªª££™’‹‹ˆ…ˆ………ˆˆ’’––’’–‹zf_\X\___\c__ciifmimimmiiiic_X\\\\UXUUURRKNGGDAGADAA===::3::::36333:AA=DDGKKNURRRXXXUUUNRU\ccc__\\RUXURRANRNRNRRNRRNNNNNNUU\\z…~………ˆˆˆˆ…ˆˆ…~~zwzzwtzwtptpimmtptpptiiiffccccccUURUNKRDD3:G:66633000,6,,3336::::=:6A36ADNNRUUNNRU:DGGGKGKNGRNNRURADRDAD=666633333003,,000A=D6:AKGGDDKNKKRRXUUXXURRGNGDDD::6663:3G=DD=A=:6360,%%)%%""""3"")))030:=6A=AAAA:6:::::633:3300%%"%)%,036:6::=ADKXU\_cimptttttpttppmmicfiifiiiptpwtwwzz~………‹‹‹‹ˆ‹‹ˆˆˆ……ˆtpmimpmpmtttttpmicfcfcimtttwttptttwwtwww~ˆ‹–™   £££££§§ª§§ªªª££œ ™ ™œ™  £££  ££§§   œœ™œ™™––’’’’‹–™ ­­±±±¸¸´¸¸¸»¸´´±¸¸´´´´±­±±ªªª§   œ™œ™œ œœ œ™’–‹’––™œœœœœ œœœ™££   £ £££§ª§§££ œ™™™––’‹ˆpmf_XU\\X\XXUNNGD=::66:60,)0,,)),),),)))%"%"%),:3ªª§§£  œ–‹ˆz~~wwppmmmtw’’–™œ™–’’‹‹‹––™™  £§§§§  ˆ‹‹‹‹………………ˆ‹’–’’ˆ…mc\\X\\\\\_\_ciffiimimiimimf_X\\\\X\XXUURNKKGGAGDDDA:A=::6:=::66663:AA=DGGKNRRRUR\XXXRRRNXX_ffcc_\XX\URRRNRRRRRNRRRRRKNNRUR\Xf~~ˆ~………ˆ……ˆ…~zzzzwwttppmiimpptpppfffffcc_fcc\UUXNKN=A63D:3:3,0,)),),,0336:6:=0=6AG:=DNRNXURRUXGUKKKNGKNKURRUXUDGUAAD:::6333333003,0000=DD36=GD=ADGNGGUUXRXXXUNNDKGAAA=:666663GAAD:A==303,)%"%"") + + + +"%,,,036=:AADDDDA==:===::6=:633)))))),036::66==GKUXX\ccimptpppmtpppmmiccifimmmptpwwwz~~……ˆˆˆ‹‹‹‹‹ˆ‹‹‹‹ˆˆ……tmiimmifmpppptpmiffcffmptwzztwtwwwzzzzz~…‹–œ œ      ££§§§­­­§§ £ £™ œ££§££ £§£§§ £œœœ™™–––’’’’’‹’™£ª­±­­´´´¸¸»¸¸»´´¸´´¸¸´±­­­ª§§§ œ ™–™œ™  œœœ™––’™™œœœœœ™œ™™œ™  œ œ œ £ £§££§§ œ™œœ–’’‹ˆ…~ticXUUXXXX\XUKKKG=::666300,,0,),,)),,)))%""%),,=GA§§££œœ™’‹‹ˆ…z~~zwttppmtw––’–™™–‹‹‹‹‹–’™™œ£ §ª§£œ–‹ˆ‹ˆ‹ˆ………ˆˆˆ‹‹‹‹’’…icX\UX\XXX_\__fcfiiiiimimimic_\\_\\X\XXXUNKKGKADGGG=:A=666::=66::63==D=DGGKKNNUUU\\\UNNUN\Xcifff_\\XXXRRURURUUUKUUNNRKNNRRRXX\tzz…ˆ……………~~zwwwttptmmfimpmppmmccfiif_ccc__XXXRGR==66A606,,,,,))),0,333666:0=3DK:GGRUNXRURUUUXKKKRGRRRXUUX\XX\XAAG6==663333333603300=GG336AD:=AGKGGXX\RUUURKADAD==::::63::6D=DA6A=:630,%""% + + +%%)00006A=ADDGGGDAA=A:A==:A=:66,,0,),,36:6636:=KNU\\\_cfmmpmppptmppppifciimppptttwwz~~……ˆˆ‹ˆ‹‹‹ˆˆ‹‹ˆˆ…ˆˆpfffiimfmmmmpppmmiiiiittzz~~…~zzz~~~z~ˆ‹’–œœœ  £œœœ  £§§ªª­ªª£§£§ £ §§§ § §£££§££œœ™œ™’’’’’’’‹’‹‹’– §ª±­­´±´´»»¸¸¸´¸¸´¸´´´±­­ª§§£§œœœ–™™œ™   œœ™’’’’’–œ™œ™ ™–™™œ™™™œœœ™œœœ   £  §§  œ ™™––’’ˆ…~tpf\UXUXXX\XUUKGGD:=66663300,0,),,,))),)%%"%))0,:DAª§  ™–’’…ˆ…~zztttttptt‹’z’’–––ˆˆ‹–™™   §§§ œ–’‹ˆ‹‹ˆ…ˆ…ˆ‹…ˆˆˆ‹’‹‹f__X\UU\XXU\\_\c_fffiffmfimpmccc_\\_\_XXURKNKKKAGDGDA:==6:6===:6==:6=AD=DDDGNKNXUX_\_\RUUR\\cffffc\_\XXUUXUXUUUUNUXRRRKRRRUUUX\mww~~………ˆ……~~~~zwwttpppmifiimimmim_\fificc_c_c\\\RKR=63::30,,,),))%)),,000,3360:0DK6KGUXRUUUUUUXURKNUNURU\XX\X\XXXDAD6A::66663333600030:KD336=A:A=DGGGXU\UURRNGAAAAA=::6:666::::A=3=:6600)" + +™™"%)0333:D=ADGKKKGDAAA=A=A:=D=::003000036:36366=KRX\X\\_cmimmmpppmmpptiifmmmtptwwwzzz~~……ˆˆˆˆ‹‹‹‹‹ˆˆˆ‹…ˆ…ˆ…mffcffiimmmmmmpmmmmmmmww–ˆ…‹ˆ~~~~~…‹‹–™   œ£   œœ £§ª­­ª­§ª§££§ §§ª£§£ª§£§£§£œœ™™–’–’’’‹‹‹‹’œ §­­­±±´´»¸¸»¸´´¸´¸¸´´±ªª£§§§£  ™–œœœ™   œ™–’–’’™™œœœœ™™––™™–œ™œœœ™œ™œ  œ™££££œœœ™™™™–‹~zpm_XUUUXX\XXRRNGGA:=6:6633,000,,,,,,,%)))"%),,06A\­§  ™––’ˆˆˆzwwwttpttt…cz’–‹‹‹‹ˆ‹ˆ‹–’–™  £§££ ™––‹‹ˆ‹ˆˆˆˆ…ˆˆ‹‹ˆ…c\\\UXXUXXXUX\_\c\cffffcicfppmiif_\____\\URNNKKKDGAGDA:==:=:=AA::===:=AD:DADDKGNXX\____UXUUX\_ccfc_\_XXXUX\U\UUUXUXXURUNRURXUUX_fttz~………ˆ…wzzzzwwtptmmmiffififiifi\_cfcfffc_c__\\UGN:60663,,,0),))),))),,,,003360AN3NNUXUXRUUXXURUNRURXUX\X\\XX\XUGAG6A:=66663333633033=GD3366==DAAGGGUUXURNGGDAAADD=:::66366636=:0:633,,%™™™™™"%))0633:A=DGGNNNKDDAAADAA=GGA==3:6333366603033=\X\_\\__ciiiimpppmipmtmiimppwwtwzwzzz…ˆˆˆˆ‹‹‹ˆˆ‹…ˆ‹‹…………mfififiimmippptmmpppmm~œ…™™™’……~…ˆ‹’™œœœ    œ œ   §ª­±­­ªª§§§ª£§ªª§ª§§§§£§££ ™™œ–’–‹‹‹ˆ‹‹…œ££ª­­±±±´»»»»»¸´¸¸´¸¸±­­§£§§§£  ™™œœœœœœ ™œ–’’’’–™™œ™œœœ™–™™™™œ™™™™™œ™œœœœ™ £§£  œœœœ–’ˆztm_XUURUXX\XXURNGGA:=6:6:33,,0,,,0,,0,))%%"),,,3AR­§  œ–’‹‹ˆ…~~zzwwtttttpmfw‹’‹–’‹ˆ‹‹‹ˆ––™œœ£§§£§£œ–™’’’‹‹‹ˆˆˆ………~ˆˆ…~_\XXXUXUXXXU\X\X__ccccccfcfptpmmi__c___\XXURKGGKGDADDA=:A:==ADA=:AA=:==A:A=DAGGN\\__ccc\\XX\X\\_cc_\_\\\X\\X\XXX\XUUXRURRXUUUXXcfptz~~~………~wwwzwttpmpimiffcffcccccf\\_fcfffc_fcc\_RGN::3::3,,,,),))%)))),,,,0033:3=N3RRXXX\UUR\XUUXRUXXXXX_\X\XXX\RGDK6=6A66633333606633=DG3366::AAADGKDUURRKGDAADDAA=:::6:333363:3,0300%,% +™™™™™")%006366=AAKKNNNNGGDDDDADAKNDNA6D:6663:6633036Afccc___cfiiiimpppmmpmppmipttwzzz~z~~z~~…ˆˆ‹ˆ‹ˆ‹ˆˆ‹…ˆˆˆ………miififimmmmppttppmptpw… œœœœœ–ˆˆ……ˆ’–™™œ   £œœœœ  §ª­±±­­ªª§§ª§ª­ªªª§§ª££§£ œ––™–’’‹‹‹‹ˆ‹ˆˆ…ˆˆœ££§ª­´±´¸»¸»¸¸¸¸¸´´¸´±±­§ª§§£§£ œœœ œœœœ œœ™’–’’–™™œ™œœ™™™™™™™™™–™™–™–™™œœ™ ££££ œœ™™’‹~wpXXURRUUUU\X\XUNKKA=A6:::06,0,0,),00,,),%%"%,0,,=Nª§  œ™–‹‹ˆzzzwwwttttpmmitˆ’‹‹ˆ‹‹’’™™ œ£§§§ª£ ™œ’–’’’’‹‹‹‹…~~pp_XXXUUURUUXU\U\X__c_ccccccfpwtppmccfcc\_XXXRKGGGGDAAD==:A=A=DD=A=DDA:AAA6=:A=DDK\___ccf__\XXXUX\c___\__\\\_\_\XX\\RUXUURU\XXXXUcfpwz~~z~~~wwwwwppmmmfifccccfccc___XXUccffcfcffc_\NKR:=66:0,,,0),))%%)))),,,0336=63K3RU\\\_XUN\UXUURU\\X\\_XU_XXXXKDDK:::=66663333633:63A=G666:66=AADDKDRRNNADGAAAAA==:::6:33003,0 +),0,%")% + + +™™™™™%,)33:6::==ANNRRNRGGDGAAAADRR\XA:_=::66:66666:3Aiifffcc_ffiffmmmmpmppptpmttwz~~~~~~zz~~……ˆ‹…‹‹‹‹‹…ˆˆˆ……pimiiimmmppmmttttmw~w™ £   œ ™ˆ…………ˆ…ˆ’’–™œœ £ £§ œœœœ£§­­´±±­ªªªªªª­±­­­ªªª£§ª œ™’’–’‹ˆˆˆˆ…ˆˆ…………‹œ£§§ª­±´¸¸»´»¸¸¸¸»¸¸¸±´±ªª­§§£ª££ œœœœ œ™   ™’™–’–––œ™œœ™™––™™–™™’™–’––––œ™™œ £ £ œ™™–ˆ…ˆzc_RRRNNRRURXXXUURNKAAA:::63303,0,,,00,0%)%"""),,0:Dª§£ œœ™’’‹ˆ‹~~wztttttppmiipˆ’‹‹‹ˆ’’–™™  £££§ª§£ œ––––’–’’‹‹ˆˆ…~zzzzmc\UUUUURURRUXXXXX_\__c_c_cfimtpppmffccf_c\\\UNKGGGAAAD=A=A=DAGDADADDA==A=6::=:AAGX_ccfficcXXUURUX_\\___________\X_\URUUXUX\U\\\\cipw~~~~~~~~wtwwwmppiicf__c__cc__\\_KUU_ciccfcccccXKGN::6660,,,,,,))%%)))),00363:A63G3UX\X\_XUNXRURGRUX_\\X_\X\XXXUDAGK==6:63366666:63=36D:D6:6:66:==DDGANKKKAADAAAAA=====:666330,) +% +)" + +™™™™™)006666:===AKKNNNRDDGD====AUX\\\\f:=:::GAA::D=Appmmiifc_fiicfiimmpmpptttpwwwzz~~zz~~……ˆ‹ˆ‹‹ˆ‹ˆˆˆ…~~tmmiimmppppppttwttz™œ  ££ œ œ–‹ˆˆ…ˆ‹…ˆ‹–™œœ££££§£    £§­±´´±­­­­­ª­­±±±ª­ª§ §§œ™–’‹ˆ………………………~ˆ £ªª­­±±¸»»¸¾¸»»´»´¸´´´±­­±§§§ª£££™œœ  œœœ£ œ™™–––™–™™œœ™–––™™™™™––’’’’––™–™™œ   œ™––…~ip\\NNKKKRNURUXUUURNNDAD=:=:33033300,,0),%%%,)036A­§§  œ™’’ˆ‹zzwtpptpppmmm‹’‹‹‹‹ˆ–’’–™œ ££§§§ªª££œ™™™™–––’ˆˆˆˆ~~ztipcXXURRRRNUNUUUXXUX\\\___c_ccimpppmmicfff___\_URNKDDADAAAAADADDKDDDDGDA==A:636:6=:GK\__cff__UURRNRU\XX\________c\\\\\UNUUUUXXX\\__ffpw~~~~~zwptttimmfccc\__\\__\\X\\KUUc_f_cfcfc__XGKR=:36630,,,0,),)%%),,0,,360=A60K0X\\\_\XXNXRRNKRUU\XXX\XX\XXXRDADK==33:3666666:63=3:D6G666666::=AGDAKGGADAAAA====A=:==::6630,, +% + + + +™™™™™%33::::6AA==GGNKKNAADA::::=X\____ifA=:=iifiimppttppmmiccfiiffiiiimmptwwwtwzz~z~~~z~~ˆˆ‹ˆ‹‹‹‹ˆ………~~~…wpmmmmmpppttttwwwz–’™œœœ££ œœ™™‹‹ˆˆˆˆˆ‹‹–™œ §§§§§§  £££ª­´´´±­±­­­­±­­´±­­§£œ££™–’‹~zz~z~~z… §§­±­´´»»¾¾¾»»»´»´¸´´´´±ª´ªªª­£££œ  œœœ  £  œœ–™–™–™™œœœ–™™œ™™™™–’’–––––œœ  œ™–’ˆ…mz_fXNKNGKKNRURRXURRRNNGDDA==:63636630,00,)%%%)",066­§£  ™™’’‹ˆ~zwzttmpptpptwˆ’‹‹ˆ‹’™–™™œ £££§§§­­§§§œœœ™–™™–’ˆ‹ˆ…~ztim_URRNRNNKRRUXRXUUXXXX__\_\cciimpmimffiff_c_\_XURNGDADA=ADAGDGGGGGDDDDA=:=633366==DGN_\_fc\\URRNNRNXXXX\\\__c___\_X\\UURURRXX\\\_ciitz~~…~…zzwptptiiifc_\_\\XX\\X\X\\KXXc_cccc_f_\UUGKN==3363,,,,0,))%%%))),,,0:3:=:3N0UX\X_\XURXURKNNRRRXU\\XXXXXURGDDG=:6366666666::6A3=G6D:66666=:=AKDAGDDAA=DAA=A=AA=::::63330,,)) + + + +™™™™™"36==:==DD==ADKGG6,":33030=Xffcccmimmmmmmimmptttwttppmicfiififiiimpmttzwwwz~z…~~~zˆˆ‹‹‹‹‹ˆˆˆ…~~wptppmppptwtttwzz~––™™   ££ œœœ’‹ˆˆ‹ˆˆˆ‹‹–™™œ§ª§ªªª££§§§ª±´±´±­±±­­±±±±´­±ª£ ™–’’‹‹……ttwzttw~zw~z~~~zœª­±´±´¸¾»¾¾¾»»¸»¸´´¸´¸´±ª´ªª§­§ £œœœ œ   £££ œ™™–––™–™™œ™™™œ™™™™™–’’’™––™™œ  œ™–’‹…zmf_XUNKKGKKNRUURURRRRNNKGDAADD66:::6630300)"%""%%),60­§£££œœ––ˆ…~zwtwptmwptzˆ‹‹‹‹’––™œ™ £§§£§ªª±±ªªª  œ™™œ™™‹‹‹…~z~wtfi\URRNRKKGRNRUNUXUXXUX\\\\\__ffmmififiiifcf___\UURGGDGD=DDGGGKGGKKGGDDD=6:303636==DKN\X\c_XXUNNKKNNNUXR\\X_\_\\\\_X\\XXRUNNUXX__c_imtz~……~zwwttppfffcc\X_\XUUX\UXX_XGU\c_fc__\c\URRDGR:=00600,0,,,,,)))),)0,,3=6=:66K6XXXX\\URNXRUGKKGKRURX\XUUUXRRKGDD=66663666666::6D6AG6:=6666:::=DGGD=A=A=AA=AA===A:=::6633300,,) + + +™™™™3::A=AADG:=:==A,0)"%%,,%3=_iifiippppppppmpmptwtwwwtppmfiiififffimpptt~zzz~~~~~~~~……ˆˆ‹‹ˆ……ˆ…~~z~zwwttttwttwwwzz~ˆ™™™œ™œ  £ œ™œœ–‹ˆˆˆ‹ˆ‹‹’–™ £§ªª§ª §§§ª­±´´´±­±±ª±±±´´´­­§ œ–’ˆ‹ˆ~ptmtwtpttwwwwzzzwz ª±±´´¸¾¾¾»»»»¸¸´´´¸¸¸¸´­§±§§ªª£  ™™œœœ   §§   –™–™™™–™œ™œœ™™–™™œœ–––’–™™™™–™œœ™’‹ˆˆmic\XUNKKKKNUUXXUUURRRRRNKGGDGGA:==:=:63630)%%""")))3)­ª££§ œ–™’‹…~zwwtppttw…‹’’’’–™™œ œ£§ªª­ª­ª­­­­ª£  œœœ™–’‹‹…~wttpc_XUUURNKGDNKNRNXUXXXXXX\X\X__cciifcfcfffccfc__XUUUGKAGDKGGKKKKKKNNKGDAD::6603366:ADKRXUX_\XURNKGGKNRRURXX\\\\XXXX\\\_X\RRRNRXU_cfcmpwz~~………~wttppmfcc__X\\XUXUUXUUX\\KU\__fc\\\XGRRAADN::30300,,0,,,,),,),,0,06=:=A66GXXUUUXXRUNUNRDGGGNNUUUXURURUKNGDDD=3::66666666=66D6AKD6A6:6::::=ADDA=D==AAD==DA===::::6663300,,, +%% + + +™™™™06:==ADAD6:6:63)))"%%%))3Kippmppttpttptpppmttwtwwtwtppiiiiciffffiptww~zz~~~~~~~~~~………ˆˆ‹‹‹‹ˆ…………~~z~~zzwzwtzwzzzz~ˆ‹œœ™œ™     œœœ™–’‹ˆ‹‹ˆˆ‹‹–™œ£§ª§£§£§£ª­­­±±±±­±­­±­±±±±­ª£œ’’ˆ‹…~…tmpmptpmpptttptzwwwœª´´¸±¸¸»¾»¸»¸¸¸´´´´´´¸±ªª­§§ª§££ œ™™œ™   §£  œ™™™™™™™œœ™™œœ™––™œ ™–™––™™™™™™™™–‹‹ˆ…wmf_XXURKKNNNXXXXXRUURRRURNKKGKKD=AAAA=:3:30%)%""""),%3,­ª££££œ™™’……~ztwwtttwz’’’‹‹’’–™œ œ §ªªª±­­­­­ªªª£  ™œ™–’’‹‹…ztmpm__XUXUNKGGGKKNKNXUUUUXXX\U\\_\ccffccf_fffccc__c\UXUKKAGDNKNNNKNNNKKGDA=A::3603366=DGGNURX\XXNNNKGGKNUNRUUXXXXURUUUXXX_\_URURUXU\_ffptw~~………ˆ~wttmpic_\\_XXXXUURUURUUX\GU\\_c_XX\UGRNDDAN::0033,,0,,,,,,)0,),,,33A6AG=3GXURRRXURRRURRDDKGNNRURURRRRRKKDDAD:0=:666:3666:::G6=GG:A:=:=:::=AAAA=A====A==DA:===:::66633300,,))%%" + +™™™™,36::=DAA36363,,))"""%),6Nmttptttwpptttttppppttwwwwwtpmiimffifiiipttzzzw~~~~~z~~zzz~~…ˆˆ‹ˆ‹ˆˆ……………~zz~~~~zz~~~~z~…ˆ™™œœ™£   œœ™™™’‹‹‹ˆ‹‹ˆ’–™ §§§§£§£§§ªª­±­±±­±­­­­­­±­ª§ ™’’…ˆ~zppppptpppmpttppwttz~ª´¸¸´¸¸¾¸»»»¸´´´´±´±±´±§§§§ª§£  œ™––™œœœ §£££ ™™™™œ™™œœœœœ™œ™™™™œœ™™–––™––––––’‹ˆ…zti\\XXURKNNNU\\\\\XXXURRURNKNKNNNDDGDD=:6630%)""%%",0)6,ªª§££§ œ™–’’ˆˆ…~~wzzttwww’–’’–’‹––œ   £§­­­±±­ª±­ª§§ œ ™™™–’’‹‹‹…wpimi__XUXUNNDGGGNNKKUUXUUXU\XRX\_\c__c__c_ccfcfcc__\XXUNKGKKRNRRNNNRNKKGD=:=:636333::=AGGNRRUURXRRKGKGKKURNRRUUNUURRRUUXX_X_XUXRUUX\_fftwz~~……………~zwtpimfc__X\X\UURRNRUNUUX_DX\_\_\UXXRGRNGDAN:630330,,,),)),,0,,,,,33DAGKA3KURNKNURURNURRDGGGKNNUURKNRRNKGDD=D63=:33666666:::GGADG=====::::=AA==:=====AA=A====A:::666633000,,))%% + +™™™™™),336:A==,3)300)%)"%%",0=mpwwtwwtwtpwppttpmppttwzzzwtppimmiimmiiipttwwzwzzz~zzw~~~zww~~…ˆˆˆˆ……………~zzz~………~~……ˆ…‹‹’’––™œ– œœœ™™–––’‹ˆˆˆ‹ˆ‹‹’™œœ£££§£££££ªªª­­±­±±­­±­­­±­§£––‹……~zzmtppmtpmmmpppttttwzª±¸´´¸´¸´¸¸¸´´±±±­´±­±­§ª§§§£ œœ™–’’–™™™œ££££ œ™™œ™œ™œœ œ™œ™™™™™™™™–™–––™’’’–’ˆ…wpf_XUUUURRUXX_____\\UUUUURRNNNRRRKGKGGA=6630))%"""")),0,,:Dªª§£§§  œ––’‹‹ˆ~~zzzwwwwz–™––™–’’’––œœ  §ª­±±±±±­­­ª££œœ ™™––’’‹ˆˆmmfff_\XXXRNNGGGKKRGKUX\XUXXXXRXX\\_\__\\c___c_c____XX\XRKKNNRRUURRRRNNKGD=:::636363::AAGKRKNRUNURRKKNGNNUUGNRURNUURNRRRXX_X_\X\UXX\\\iiwzz~…………z~zwppfifcc_XXUXUUURNNRNRRU\DU\cXRXUXURKRNGAAN:360303,,,,0,)00000,AA06GDKNU3NRKR=KRKRRNRNNGKGKNNNUUNNKUNKGDAD=D60:63366::66:=:GKAAD=:AA==:::=====:::==:ADAA:A===::::666333000,,))%"" +™™™™™%)0"33=:,"))%,,,))%,))3=mmtwwwwwtzwttptptppttttwzzzzwptptpmmppmmmpppttwtwwwzwwtzzzwttzz~~……ˆˆ……~~zz~ˆˆˆ…………ˆ…ˆ‹––––™™™œœ™œ––’’’‹ˆˆˆ…ˆˆˆ‹™™œ   £ £ £§§ªªªª­­­­ª­­±­­­ª£œ–™‹ˆzwwmptpmpmimppmmppwwt~ª±¸¸´´´´±»´¸´±±­±­±±±±­ª§£££œ ™™–’’–––™ £££ œœ™œœ œ™œœœ–œ™–™™™œ™™™––™’–ˆ’‹…~tcc_\XXUUURX_\_ccc\_\UUUUUUNRNRURUNNNNKA=3:60,)%"""""""",)030,:Dª§§£§§££ –™’ˆ~~~zwwtw~™œ–™œœ–’’–’’œ™  £§­±±±±´±±­§œ ™™œ™™™––’ˆˆ~~ifccc_\XXXRNKGGDGNRKNXX_\XXX\XUX\\\\\\XX\_\\\_\___\_\X\XUNNNRNRRXURRNRRKDAA:=::6:36:=:DDKKRNNNURUNRNKNNRRRRKNRURRRRRRRRUU\_\c_\_X\\\\_imz~~~……wzwtpmificc_X\XUURURRKNRRRU\GU_cURURURUKNNGA=N:63030600,,,,,,0,33DDD0KNURRXUNNNRANRGRRRRRNKGKNNKRRRRKKUKGGGAA=A:06:3336:=66:A:DGA:D:===:::=:=====:::::=DADA=A=:=666:663333300,,,))%%" + +™™™™™"%%),"""%%,)),))0,,:pmmttwwwtwwwwwttmppmtwtwwz~z~ztwtwtppttppmppppptptttwpttwwwwptwwz~~………~~~~‹‹ˆˆˆˆ‹ˆ‹ˆ‹’’’™–––™––™™–™–’’‹’‹‹ˆˆ…ˆˆˆ–™™œ  £  £ ªªªªª­­­­­ª­­­ªªª§£œ’™‹ˆ~~wwwpptpmpmipmpppmptwz’ª±´´±±´´±¸´´´´±±±­±±±±­§£   ™œ––’‹‹––’™œ £ £œœ™œœœœ™œœœ–œ™–™™™™™––’’–’ˆ‹ˆ‹pptmc_\\XXUXXUccccfcf\c\\XUXUURRRUXUURRRRNN=06:,)%)""%"%%"""%,03336:=Dª£§§§£££œ™œ’’‹‹…~~zwttzzœ™ œ ––‹’’’™™œœ £ª­­´±±±­ª£ œ––™––™–’……~zf____\\\XXRNGKGGKRNNRUX__\X\\UXUX\XXXXXX\\X\\X\___\_\X\XURRNRNNRXURRRRNGG=D==:::::==AAGGNNNKNNURRRRNKURURUNNNRURRNNRRUXXX\c_c__c\____cmpz~~~~…~~wwtpmmmfffc\\\XXUUURNNNRNNRXDUc_XRUNRNUKNNDD:N=66330:,0,)0,003336GDG0NRXUUURKNKNDNNKRRRUNRNKNNNKRRRRNKRNGGGAD=A=366666:6A66=A:DGD:D====:==::=====::::=ADAD=AA=:=66666333330000,,,,)%%"" + + +™™™™"%"")),,,),300=mmpttzwwtwtwtwpppppptwtwzzzz~zwzwzwttttpppmmmmpppptmtpppttttptttw~……~~~z~~‹‹‹‹‹‹‹’–––™––™™’’––––’‹’‹‹‹‹ˆˆˆ‹‹’’–™™œ  ££££§§ª­­­­­­ªªªªªª§§ª ™–™‹~~~wwwpptppppmppmmpptpw~…–§­±±±±±´±¸±´´´±±±­±­­­ª£ ™œ™–™’’‹‹ˆ’’–™œ   œœœ™œ™œœœœ™–œ––––™™––’’‹ˆ…ˆz~pipic_\\\\XXXXffffififc_c_U\\XUUUXXXUUUUUURN36:0,%)%%""""""""))%%"%)036==:=AGª££ª££££œœœ–’‹ˆ~zwppww œ£ £™™‹‹’–™™œ §ªª±±±±­­§ œ‹–’’–’’‹~…~__X\\_X\\XXRNKNKGKURRUXX__\\\XXXUX\\XUUU\\XU\_X\_\\\\\\\\XUURRRRRUUURRNNGGAD=====:=DDDDKGNRNGNRUNUURXUXUXUUNNRUUURKRUUX\\\\ccfccc_ccccfmmwz~…~zzwtpmmiifcf_X\\XXXXRRRRRNNNNXAX_\\UURRKUKNKDA:NA6:033=00000,30066:KGGURUXXUUNNKGKGKNNRNNXNURNRNRNNRNNRKRKKGGAGA==3:3::::3D::==:AGG=D=A:==:=::==:==:::=:AAAAAAD=:=66666333330000,,,,)))%% + + + +™™™™™)%,,,,)336mpmtttzwwtwpwttpppptttwtzzzz~zzzzzzwwwtttpmmiiimmmmpmmmmmppppptttwz~~…~~~~~~~zz~‹’’–’™™–––––’–’’’’‹‹‹‹‹‹‹ˆˆˆ‹‹’’–™™ œ£ £§§ªªª±­±­ªªªª§§­§§£ª ™’–’ˆzzwwtptppptppmpppmtttzˆ–ª±±±±±±´´¸´¸´´±­±­´±ªª§ ™––™–’‹‹‹‹’’–™™œœœœœ™™™–™™™œ™’™–’™’––’’‹‹‹ˆ‹…~zzpimifc_\\\\\\_iiifiimiicfc_c_\X\X\X\XUXXUXUN6::3),,,)%%%"""""""%%%,))%)0,:ADAADAGG§££§£££§œ™™–’ˆ……zwtpttw §£ –™‹‹–™œœ££ª§­­±­ªª œ‹ˆ’’’’’‹…~_\U\X\\\XXURRNNNGNUUUXXX\\\\X\UUUUXXXRXUX\XU\\\\c\\X\X\X\UURRNRRRUUUUURNKDADAAA=DAGKGRRNRRURNRUUNXUU\X\X\XURRRUUXRUUXXX_\_ccfffffccfffipmz~~~~z~ptpmiiffc_c\UX\XXXUURRRRRRRRUDX_XXXURNNUNNKGD=ND::336=:6330)033:::NKNXUXUURRKKGA:GGKKNK=UKURNNRURNNRNNNNKNGDADA=:::6:66:6A6=:::=GGAD=A::A=::=A:=A====A:=D==DAD:::66666633330000,,,,))))%" +% +™™™™™ +)),)),,03:ptppttwwwwztwtptpptwptwwzzzz~~z~w~zwzztwttmmiiiiiimmmiiimmmpmppttwz~z~~~z~~zz~zw~’‹’’––’––™–’’’’’‹ˆ…‹‹ˆ‹‹‹‹ˆˆ‹‹‹’’’œœœ £££§§ªª­±±±­­ªªª§§ª§§§§œ™––’‹…wztwtpppmptpttptptwww~…‹–­±±±±±±´´¸´´´±±­±­´­§§£œ––’–’‹‹ˆˆ‹‹’–™™™™™™™™™’––™™–’–––’’’‹ˆˆ‹……zzzwtmimiff___X__ciifmffmpmmfmiimmc\_\\\_\XX\X\URNG:33000,,))%%"%%)%))%,))0,3:=DGDKGARD£  £§§§£œœ™–’’‹ˆ…wwwpwww£§ £–™’’–™™œ£ §§ªª­ª§§™™‹‹ˆ‹’’’’ˆˆ~_XX\XX\\XXXUUNKKGRRXXX\XXXXXX_RRRRUUUNXXUXXU____c_\XXXXXXUUNRRNRRUURUURNKGAAADDAGDNNRUXRUUXURRUXU\UX\\_\\X\UURUXUUXX\Xf\_ciifiiiiffiiimppw~z~~~~zztiffff_c_\XXRUXUXXUURUUNRRRRXDU\XUXXURRUNNNGGAND=:3=:==:66,,300=66NKRXX\RRNRGG=D=GDKGK==RGRRNRRURNRRNKRKKNDGAA====66::363A6=::=ADDDDAAA:DA==:=:AA:AAAA=AA:=AAA:=::66666333330000,,,))))%%"" +) +™™™™™ + + +)%)))),06Dptpptpttttwttwmtppwwtwww~~z~zzzzz~zzwwwtppmiiffiifiiiffiifimmmmpttw~~z~…~~zz~zwzzzw~‹‹’’’’’’–’’–’–’’‹‹ˆ……ˆˆ…‹ˆˆ‹ˆ‹‹‹’’–™œœœ ££§£§­±±±±­­­ª§§§ª£§£§œœ––’ˆz~twttptptttwwtttwwzz‹–­±±´±­´¸´¸´´´±±±´­±ª££ ™’’’’’‹‹ˆˆˆˆ‹‹’’–––™––––––’’––’’’’‹‹‹…ˆ…ˆ~wwttppipiiicc_\ccfmmiiiimpippppttwmicccc_\\\\\\XURRDA6363300,%)))),,,0),,330D=DGGKNNA\G  £££§§   œ––’‹ˆ……~wwwtzz£§ª£ ™™‹‹’–™™™ £§ªª­ª§££‹…ˆ’–’’‹ˆf\X\\_\\XXXURKNKKRUUUXXUXUUU\\NRNRRRURXXUUXU_cccc\_XXXX\URRRNNNRNUUUUUURNKDDADGKKGUXU\\UXXXUURU\XXX\\\c__X_XXUR\XX\Xc\mimimmpmmmmiimmipptz~~~……zzzwwtiffc_\_XXUUNRURUUUURUURRRNR\GXX\XXXUURUNNNGKDNGAD:DADA==::,333=:3KGUUUXRNKNDD:DADDKDD==NGNUNURRRNUNRNNNKKAG=AAA=A:666333A:=::=ADAKADAD6AAA=:A===:AAADAD==:AD==:::666666333330000,,,))))%%%""" +, + +™™™™ + + +"%)%))))03Nmtpmttpptptpttppppwtwwzz~~~~wzwzzzzwttpmpiffffffcfffcfffffiiimmptwzzz~~~~zzzwwzwwz~‹’’’’’’’’’‹‹‹‹‹‹ˆˆ…………ˆˆ…ˆˆˆ‹’’’’–œ™œœ  £§§ª­±´´´±­­ªª§ª§ §§£œœ™’–‹~tttptptttwwzwwwzwz~…‹’±±±´±±¸¸´¸´´´±±´±­­§  œ’’‹ˆˆˆ…‹ˆ‹’’––––™’–’’’’’’–’’’‹‹‹‹ˆ……~~ztppmmmfmmiicfc_ffimpmmimmmmptttwwzwptfifc__\___\URUND:=::::6330,,00=03,3A:G3GDKKNRRR\ K£ £££££  œœ––’‹ˆˆ……wzwtw~§§­§£™™’™™™œœ£§ª§­££œ’ˆ‹‹‹…ˆ‹’–’ˆ……X_c_c\\X\XXRKNNKRUURXXUURRRXXRNKURRURXXUR\U_cc__\_XXXXXURRRNNNNNRURXXXNNKGGDGKNU\c\___X\\XXUUX\___\_cfcc\c\X\\_X\cXfipmptpptppppmmppmpttzzz…~~wtwwffcc\XXURNNRNNNRRURRRRURUNR_D\X\XUUURRRRNNKGDNKDGKGDGD=A:=6663=:AGKURRURNGK:A=ADGDGGDAAKGNUKUNNNRUKRRNKGG=GAAAD:A==66306A6AA==DDDNGGAG6AAA::=:=:==DDADG6=6AGDA==:66666633333300000,,,,))%%%""% +0™™™ +""%)))%)%,3ppppmptptpptttptttpwtww~~~~~~zwwwwwwtttpmpiffffcfcffc_fccfffffimmptzw~~~~~zzwzwtwwz‹‹‹‹’‹’‹ˆˆ‹ˆ~ˆˆ……~…ˆˆˆˆˆ‹’–’’’™œœœœ£ §ªª­­­´´´±­­­§£§££££   ™––…wwpttwttwwzzzzzz~~…‹±±±±±´´»¸¸´±±±±´±ªª£ ™–’‹’‹‹ˆ………ˆˆ‹’’’’–’’–’‹’’’–’’‹‹‹‹ˆ‹‹…~~zzztttpmmmiipmmffcciimmpmimmpppttwwzz~ztwmmifc_\c___XUURNGADDAAA=6:0:KAA660GNGNDNGNURU§£        ££ œ™œ––’ˆˆ………zzwtw~§§ª££™–’’–™œœœ£§§§ª ™™ˆˆˆˆ…ˆ‹ˆ’‹‹‹‹ˆ…zpmcf__\\\XUNRRKRUUNUURUNNNXUURKRUNUR\URUXX_f_____XXXUURNURRNNKNRRRU\UNNKGGGKNX\cfccc_\__\\\U\_ccc_cfifc_c_\__cc_ffmmtptwtttttppmmtpptww~~z~~~wwwzff__XUUNNNKNNNNNNUNNNRRRRRU_A\\\XXUURRRNRNNKDRKGKNKGKGGD=A:::3:6DDNUNGRNKDG6D:DDDADDDA=KGNRKRNRRRUNRRNGGGAG=A=D:A=A6330:=:ADA:DGDRKKDK6KAD:6==A:=DGGGGG6A:AKGDA==63666663333300000,,,,,)))%%%%""3™™™ +"%)%%"%%03mppppptptttpttpptttwwww~z~~ztwttwttppmmmiffff_fcffc_fccfccfffmmmtwt~~zwzzzwtwwz‹ˆ‹‹’‹‹‹‹‹ˆ………z…~…ˆˆˆ‹‹‹’’–––™™™    £§ªª­ª±´±±­ªªª§££££ œ£œ–––’’ˆ……zzwwtwwttw~~~~~z~z~ˆ‹­±±´±´´»¸¸¸±´±±±­§§ œ™–’ˆ‹ˆ……ˆ…ˆˆ’’’’––’’’’–’–’’’‹‹‹‹ˆˆzz~zwwwwpppmmmimmmiifcfffiipmmpippttwzz~~~~wzppmifccf_c_XXUUUKGGKGDDGGDGDNRRXUUURURGRNRXiX££œœœœœœ    œœ–™–’‹………~wwwwwz§ª§§£––’’–––™œœ  £ªª§œ–‹ˆ…ˆˆˆ……ˆˆ‹‹‹‹ˆ‹……~tpfic_\\\XURNRNRRRKRRRUGRK\RURNRURXU\UUU\\_fcccc_XXXUUUNRNRNNDKNRRRXXRNKRKKNU\cfffcfc_cc_____cfffcfiifcccc_ccffimmppwttwtwtttptppttptwz~~~z~wwtwif\_XKRNKKKKNNKNNRNKKNNRNRU\DXX_\XXUUUUDURNNGNNKNNNGKKKGAA=====ADAKRKGNKKDG6D:ADDAAADD=NGNNNRKRRRRRNRRDGGADAD=A:==D660:6==AGD=GKDRN6GK6NAD:6AAD==GKKKGGGD6ANKG=::633633333333300000,,,,))))))%%%"0™"""""""%"%%%)0pmpppmptptttttttppwwwwwz~z~~~zwtpptpptpmimiffffficffc_ccccccccfmmpttwz~~wwzzwwtttwˆˆˆˆ‹‹ˆˆ‹ˆ‹ˆ‹ˆ~~~~~……ˆˆ‹‹‹’’’–™™œœœœ  £§§ªª­±´±±ª­­§ª££££    ™™–’’ˆzz~wzwtwtwz~~~~~z~z~……­±´´´´´¸¸»´±±­±­ª££ ™™––…………~…ˆˆ’––™–’’’’’–’’’’‹ˆ‹ˆz~zzwwwwttmmpiiimiiifcfffiipimmmpmtttzz~~~zw~ttpmiffffcc\\XXXURKNKURNKURNX\___\X\XURURU\m   ™œœ–™œœœ  œ™–™’‹ˆ……~zwtwtw§ª§£§––’’–’™™œœ œ§§ª£™ˆ…………ˆ…ˆˆˆ‹‹ˆˆ…‹…~wtiifc\\\XXRNRNRNNGNRNRGUN\RURRRRU\X\X\XX_ccfccc_X\UUUURNNRNKGGKNNNUXUNXUNXN__fififfffcfcccfcfiifffiffffcfccfiimppttzwtttttttpptttttwwz~~w~ztptfcX\UNNNKKNNNKNNNNNKKKKRRNUXGX\__X\UXUXDXURNGRXKRRNGNGNKDAAAAA=DGDKNAKNNGDD:DDDDD==DGGANDNNNRKNRNURNNNDKDADDG=D=:=A360=6AAAKAAKKGRR3KG33DGKDDGKAAKGKRKKUK6G6NKA=663333333330000000000,,,,))))%)%%3 +%%"""%%%%"%%"%%,0ppppmpptppttttwttpzwwzw~~~~~ttppppppmififcfcmpmcfff_cffc_c_cfimttwzz~~~~~wzwztwtttwˆ…ˆˆˆˆ‹‹ˆˆˆˆˆ…ˆ…~~~~z…~……ˆˆ‹‹‹’’––™œœ™œœ  ££§§ªª­±­­§ªª§ª§§£§ ££œœ™™–’’’‹…z~wwwwwzz~~~~~~z~……­­´´´¸´»¸»¸±±­±­§§  œ–™–ˆ‹…………~……ˆ‹–™––’’‹‹’’’’™–’’‹’’‹‹ˆ~zzzwwtwtppmifiifffffcccimpimmmmptpwwzz~~zzzwttmmiiiicf__\_\X\cRU_cU\_\c__ffc___\XUXUU_p  œ™™™––œœœœœ™™–––…~zztttpt£ª£££™–’’’–’™™™œœœ£§§ ‹…………ˆ………ˆ‹ˆ………ˆ…~zwpmif___\\XRRRKNKNKNRNRKUR\XURUURX\\_\_\\cfficcc_\_UUUXUNNRNKKKKKKNNUUX\U__ccfimimifiiiiiffiffmmiccffcccfifcfmmpttttzwtttttpppptptwtwz~~w~zpppc_U\RKNRKNNNNNNNNNNKKKKNRKR\GX\\_U\XXRXDXUUNKU\NURNUNNNGGADDD=:GDDNRGNKNKAG=DGAGGADGGGDKGNNNRKNNRRRNNNGKDAADGAG==:D6:0AD=DDKA=GGKNR3GD60AKNGGKNADNRUUX\XU=K6NG==:66633333330000000000,,,,,,))))%%0"""%)0%%"%%)%))%%)%"))0mmpmmpptttttwwwtttzwwzz~~…~~~~twptptmmiifff_cfptpcmif_ccfc_cccffitwwz~z~zzzwwwwtwttww……………ˆˆ‹ˆˆˆˆ………z~z~z~…………ˆˆ‹‹‹ˆ’–––™™œœ   ££§£§§§­±­­ª§§§§§ª§§£§  œœ™™–––ˆ…~wzwwwwzz~~~zz~ˆª­±´´¸´»¸¸»´±­­ªª££ œ–––‹‹……………ˆˆ’–’’’’‹–––™™––’’’’‹‹‹…~zzwwwwwppmffffcccffcffiimiimmpppttwzw~~zzzwpwppmmmmii__cc_\cfmipmifmimtwztmccc_\X\\fm  œœ™œ™™’™™™œœ™™–™–ˆ……~~zwtptpt£§   –™’’’–™™–™  £££–‹ˆ……ˆˆˆ……ˆ…ˆˆ……~wwppic__\\\XURUKKNNKNNKRNUUX\RRUXUUX\c_c\\_fcifcc\_\XUUXRNNNKKGKGGGKNRX\c_ccffimmmiifmmmmpiimffpmiccccf_cfiimipttwwttwtttpttmppptpwwttzz~…z~ztpmc_UXRKNNNNNNNNNNNNNKKKKNRNR\KXX\\UXXXRUNUUUUNX_RX_UXURRKKADGDAADGGKNKNGNKDDAADGKKDGGKDGNGNNNRKNRNNRRNNKKGAAGGAG:A:A660AG=GGG=:D6GKN3DA30=NKKGNR=RNUX\\_\XXN6RD=A::6333333330000000000,,,,,,,)))))0%%%"""%%0,3,))),,),,%,%))%)immpppmttwwwwzzztwwzwzz~~~……~~zwztpmtmiiifcc\_ctwtmpfc\__ffcc__cfipwwz~z~~~ztttzwtttww~………ˆ……ˆˆ…………~zzzz~…………ˆ‹‹‹ˆ‹’’–™œœœ   ££££§£§­±­ªª£ª§§ªª§§§ª££  œœ™––’’‹ˆ…~~zzwzzzz~~~~‹§ªª±¸±¸¸»¸¸¸¸­­ª­§ §  –’’‹‹…ˆ………‹’’’’’–™œ™™’––’’’’…ˆ~~wwwtwttiicffc_cfccfcfmiiipmtptttwzwz~~z~wtwtpppppmiffffffftwwwwpppzww~~~tpmc__\__ipœ  œ™œ–™–™™œœ™™™™™–‹…~~wttpptt£§ œœ–™’’––™œ–™œ    ’‹‹ˆ…ˆ…ˆˆ…ˆ‹ˆˆˆ~~~…~zwtmifc_\\\XURRKKRNKNNNNNUUU_UUXXXXX_c_c\Xcicfcfc\\_\XXXRRKKGGDGDDGKNU\_ffffiimmmmimimpppttipmmmiicc\cfcciippmzwtzwtwwptppptimmpttwwwwzz~~~wtpf_X\RNNNNNNNNNNNNNNKKKKNNNR\NXUX\UUUURURXXUXRXc_\cX\XURNNGGGGADGGKKNNNGKGDGAGGKGNDNKNGGNGRRKRNNRRKNNNNGKKDAGGDG=D=A3:6AGGGDG=6A6DDD36A30=RKKDKN:URX\__c_\XK6NA=DA=:030003330000000000,,,,,,,))))),%%%%""",%",3636633,03),,)0%30cffimmppptwwzzw~zzwzwzzzz~ˆ………~zzttmtmiiifc_\X_pwtptcXX\\cfccc_cfiptzw~~~zzztwwzwpptww…z~~~z…………ˆ………~wzzzz~……‹‹‹ˆ‹’–œœœœ£  £   £ §ª­ªªª§§§§§§§§ª§§§£  œ™™™––‹…ˆz~zwzzz~~~~ˆ§­­±´´¸¸»»»´»±±§­ª § £–’ˆˆˆ…~~~ˆ‹‹‹‹’–’™™œœœ–™™™–™–’’………zzwwtpwtwif_ccc_cccffcfiimmpitttwttwwz~~z~zwtwtttttpppiimmmiwzzzzww~………~i_ccf’™œ œœ™™–™–™™œœœ™™œ–™’‹…~wttppptwt œ ™––’’–™™™™–   œ‹‹‹‹ˆ‹‹ˆˆ‹‹………~~~~~~zwtpmfcc_\XXXRRNNRNKKRNRRURR_XU\U\\\_fcc_\ffci_fc___XXXXRNKKGDDDAAGKRU_ciiiimimmmmimmipttwwtpppmii_c\_cccipttp~zwzwpwtmpmmmpimiptwwzwww~…z~~ztti_X\RNNNNNNRNNNNNNNKKKNNNRR_RXXX\UUKRRRUU\X\\cfcffc_\URRNKGGKDGKGNGKKNKNDAKKKKNKRRRNRKKNKRRNRRNNRKNNKNDKGGAKDGG=AAD:=:DDKDA0:6::3AA63=30:N:G0:R6UU\\ccccXUG6K:AGD=6030000000000000000,,,,,,,,,)))0))%%%%"""0)3:6:::A663:630,)3,6:cccimmppttwz~zz~~zwwwwz~~~…………………~ztwppmiiic_\\XX\\wtwXRURU_c__ccffmpwwzz~~~zwtwzwtpptwz…z~zzwzz~……ˆ……wzzz~~~~~……‹‹‹‹‹’–™œœ    ££  œ£££§ª§­§£§§£§§§§§§§§ œ  œœ™™™’ˆ‹…z~zz~~ˆ£ª­±±±´¸¸»»»´»±´ª­§££œ£–’‹ˆˆ……~~zz~~………ˆ‹‹‹‹‹‹–’’™™   ™œœ œœ™––zwzttpmtttmicfcc_cccccfifmmimitttwttwww~~zz~zwztwwwwtttmipwptz~~~~~z‹…ˆˆ………ˆˆˆˆpmf’’œœ ™™™œ–™–™™œœœ™™™–™–’‹~zwptmpmptpœœœ™–™––™™™™–™   –‹ˆ‹‹ˆ‹…ˆ‹‹………~~~~~~zzwtpmfc__XUXRRNNRNKKNKNURNR\\XXUX\\cfccf_ffcfcfcc\_\XXXRNKGGDGAAAGNNX_fimmmmimmmiiimiptwwwwpttmifcc\_c_cmtztz~zzwwpwpmmiiipimmptwzzwwz~…z~zwppic\\UNRNNRRRNNNNNNNKKNNNRUU_NXUUXRRKNRRUR\\__fffiffc\XUUNNGDKKKNKNGKGNNRKGKNNKNNNUURUNGRNNRRRURRRKNNGNGGGDKNGGD:DDADA=AAGA63:3363:=63:300A0D36N6RX\\____UUA6G==DG:6300000000000,,,,,,,,,,,,,,,)))0))))%%"%""336=:===D:=:==636306:__ccmimppwwz~~zz~zzzwwzz~~z~ˆ……ˆ…~wwwppmfffcc\\XX\X\\\XRRRU\_\_cciippwwz~~~~~twtwwttptzzzwzttwzz~~~…ˆˆ…~zw~zz~~~~~…ˆ‹‹‹‹’’™™™ ££ ££ œ    £ª§ª§££§£§§§§§§§§£œ£œ œ™™™–’ˆ……~~zz…ˆ‹’§§­±´´´¸»¾¾»¸»´´­­£££  ’’ˆˆ‹…~~~wwzz…ˆ‹ˆ’––––œœ £   £  ™™–~wwtwpimippppiff_ccffcffcifmmmpippttttwttzzz~~zzzwttzwwwwtwwzwz~ˆ…‹‹‹ˆˆˆ‹‹‹‹i–™œ œœœœ–™–––œœœ™™™™–’’‹zwtmpimipmt™œœ™™™’’™™œ™–œœ  ‹‹‹‹‹‹ˆˆˆ‹ˆˆˆ…~~~~~wzttpifcc_\\UURNNRNKNKNRRNNXXXUR\XXcffficfc_fffcc___XXUURGGGAGADDGNKX\cfiimiiiiimmfiimpwztztttmmiff\\ffcpw~w~~~zttptiimifimfmmttww~wz~…………~~zpmic_\XRURRRRRNNNNNNNKKNRRUXX_K\RRXUNKNRURNX__ciiiifif\\UURNNKKNNRNRDGGNRNNKRRNNNRKRXUUNKURRRUUURRRKKKGKDDGDNKKKA6DGDGAAA=D=636003366636000=3A06K6N\XX\\_\RR:6==:AD::600,,0000000,,,,,,,,,,,,,,,))),)))))%%%%"66:AANDAKDG=AA:6===__c__fmimpptwz~~z~z~wwwzzz~z~…ˆ………ˆzttmpiffcc_\\X\\X\X\XURRURU\ccfmitpzwz~z~~~wwpwwttttwz…~wztttwzzz~~………~~w~zzz~~z~………‹‹‹‹‹’™œœ £ ££   œ £ £ªª§£§££ £££§£§£££  œœ™™™™™’‹…ˆ…ˆ~~~~…………‹’œ§§±±¸´¸¸»¾¸»»»´±­ª£ £ œ’’ˆ…ˆ…z~ztwwwz~~…ˆ‹’’–’––œœ£§£££§££œœ’zzwwtmiimimmpmiififiicifffipmppimptttwtttwzzzzzwzwwtzzwzzwzz~z~…‹‹’’–’’‹‹‹‹‹’––œœœ œœ–™–––™œ™™–™œ–’’ˆ~~wtppmimmppœœœœ™––––œ™™œ™œœ  ‹‹ˆˆ‹‹‹‹‹‹‹ˆ~~z~~zwzwwtifcfc__XUURRRRNRNNRRKKUUURRXUX_cfimfcf_ffccc___\\XURGGGADDGGGNGXX_cffmffiiiiiiimmptwtwwwwppmii_cfmttzz~~zttptcfiifiifmmttwwzwz~……ˆ…………z~ppmcc\URRRRRRRNNNNNNNKKNUUX\X_N\RRXRKNKNUNNU_cfiiiiifc_\UXRRRNNRRNNUGDKNRKRNUUURRNNUURRNNURUUURRRRRNGKGNA=GDKNNK=:NKKKAA,:A:333,,0003333003:0=0633KXUUXX\UGN6:==6=A=:6303,,,,,,00,,,,,,,,,,,)))))))))))))%%%%%3:=DDUG_c\_RDD=A\D\c___cimmitpww~z~~z~z~wwzz~wz~ˆ…ˆˆ…~ttpmicffc___\\_X\RXUURRRRRX_ffpmttzzzzz~~zwwpttwtwwwz…zwwtttwwwwz~…~zzzzzz~z…………ˆˆ‹‹–™œ™ £ £     œ  £§ª§§££ ££  £ §£ £œœ™™™––––’ˆ‹ˆ……ˆ…ˆœ §ª±±¸¸¸»»»¸¾»¸¸­ª§§  œ –ˆ……………~z~tttttzz~~~…ˆ’–™’™™œœ£§§§§ª££  wwttpiiiiimitpmiimiiiiiiffimptpmppttpttttwwzzwwtwwwwzzzz~z~~~~ˆ’––™––’ˆ‹‹‹’’–œ   ™œ™œ™–™™œ™–™–™–’’…~tppmmmmpmpœ ™œ™–––™œ™™œœ™   –’‹‹‹‹‹‹‹ˆˆ~~w~z~zzzwztmffifcc\XUUUURNURNRNNNNRRRNUR\\cfmifcfcfc_cc\____XUNGKKAGDGDKKGU\__fciciififiimmmmpttwwtwtmiiifmmpww~…z~~~zwtttmimicfiipmttwwzzz…………ˆ……zztpic__XRRRRRRRRNNNNNNKKRUX\X\\R\RRURNKNNRNNU_cffmiiii_c_XUURURRUURKRGAKRRNRKXUXURRRRRNNRKRNUUXRRRNNNKNGNDAGDKKRGK=RNNNAA,:6600)0),,0003000000:0333ANRNUU_RDG:6:=3:::63036,,,,,,,,,,),,,,,,,,))))))),)))))%%%%%36=GGX_cf_c_\\X__U_c__\cfmmittww~zz~z~wzwwzz~z~~~……ˆˆ………ˆztwpmmfficcc____\\UXXXRNURNU\fitpwwwzwwwz~zwtpttzwwwwz…zwwtptwzwzw~~z~zz~~~~ˆ………ˆ‹‹‹‹’––œ™  £ £ œ œ  ££§§§§££££ œœ œ££  œ™™™––™––’’‹ˆˆˆ…………ˆˆˆˆ– £ª­±´¸¸»¾¾»»¸¸´´ª§££œ£œœ™’ˆˆ……~ztttttww~~…‹’’’™–™–œœ§ªªª§ª§§£ …wtpppimiifiipmmmmpiimmimfimppptpttpttwtptttwwttptwwtwzz~~ˆ‹’’–™™œ™™–’’–™œ  œ™œ™œ™’–œ™œ–™––’’’ˆ…~zwpmmippmwœœ™œ™™––™™™™œ™œ œœ™’’’‹‹‹‹ˆ~~zzz~zwwtwtpiiiicc_\XXXURRURKNKKKNNNNKRNXXcfpifffcfc_cf\__c_XURNRNNKGKKKKGU\__ccfcfififfimmpmiptwwttwpmiiipptzzz~~~zzpwtpmmiffimpmtttwzz~~~ˆ…ˆˆˆ……~~wzttfc_\XRUUURRRNNNNNNNKNUX\\\\\R\RRRRNKNKRKRR__cfmmiiicfc\URRURUXURNRGDGNNKRNXX\XNUUNNRGNNNNRUURNUANKKNKKADGDKGRKNRRRRN==,)33,0),,,,,,000300,,60000AKNKRN\NG=:6:=60666000:,,,,)),,)))))))),))))))))))))))%%%%%%6:=KG\cficfccc\c\Xcc_c_cfmmitwzwz~w~z~wzwtzzz~~~……ˆ‹ˆˆ……ˆztwpppmiifcc_____XXXXUURURRRXfmptwwwztzz~~wwttwwwwwtwz…~wwwptwzwwzz…~~~~zzz~~~………ˆ…‹‹‹‹’’–––œœ   œ£ œ œ  £ §§§££§  œ™™     œ™™––––™––’’’‹ˆ‹ˆˆˆ…ˆˆˆœ££ª±±´¸¸¸»¾¾»´´´±§§  œ œ™–ˆˆ…~~wtptpttw~~…’’’–––™™œ §ª­§§§£££œ…wptmmiifffmmpptpptppppmmmmpppppppppptttppppttppiptttzz~~~~……ˆ‹––™™™™œœ–’’’’’’–™  œ œœœœ™––œœ™––––––’‹ˆ~zpppmpmtœœ ™™–™’––œœœœ™  œœœ––’’’’‹‹‹ˆ…~~zzzzwtptppmmiiff__XXXXRUURGRKGGKDKKKRRUXccmffffccfccc___c_\XURUNURKRNNNRU\___ccccfffifmmmpmimttttpttpmmmttwz~~~~~zwmwttpmiiimmpptttwzzz……ˆˆˆˆ…zztzppcf_XUUXXXUURRNNNNNKGRUX\\_\\R_RRRRKKNKRNUU__cfiifim_cf_XUUXUXXUURRKGKKKGRRUXXXRUUKRND=NKNRURRKR:NAGKGG=DGAGDNNRURUNK::,)00,,)),)))),,,3,0,,30000=GKGNKXKD==6:=60366)3,60)))%%)))))))))))))))))))))))))%%%%%%66:G\_fiffifff___\cccccciimmwwzww~z~z~wzwwzzw~~~………ˆˆ……ˆ…~twttppmiifc__c__\\XXUXRUURNUippttwwzwwzz~wwwwwwwwztwwzzwzpwwzwzzz~…~~~zzz~~~ˆˆ…ˆ…ˆˆ‹‹’’’–™œœœ     œœ œ  £§££  ££œœ™œœ££ œœ™™––––™––––’‹‹ˆ‹…‹ˆ‹– §§­´±¸¸»»»¾¾»´±´­§£  œœ™’’ˆ‹……~~~wtptttwwz……ˆ’–’™™–œ™œ££ª­ª££   ™ˆˆwpimmfiiiimttwttwtwttpmppptpttpptptpttpptpppifiippw~~~……ˆ‹’™™œ™™œœ™™’–’’’’’––––™   œœ™œœœ™™œ ™™–––––’‹ˆ…~ttpt~  œœ™™™™’–™œœœœ™œ œ ™™––’–’’‹’‹ˆ…~~zzztpppmpiiiiif__\\XXUXUUKNGDDGGAAGRRUX__mifff__fccc\___\\\\UXNXUUURRRUX__c\____fiiiimmmpmppttwtpttpmppwwz~…~~~wwpwwwtpiimpptttwwz~zzˆ…ˆˆˆ…~~wwmmfc_XUUX\\XXURRNNNNKGNU\\_c\_U_RRRRGKKKRRXX___fficfi\cf\XXXXXXXUURUGGNNNGNUUUKXURRKUKGAKKKNRNNGN=KAGKGGAAD=D:DKNRNRK6:6)),)))))))),),,,00,,,03000:DGDKGG=A:=:::303:3)6330))%%%%%%%%%%%%%%%%%%))%%%))))%%%%%%)33:DK_cfccfcii__c____cccffmpwtwzw~zzz~zzwwwzz~~~…………ˆ…~twwwttpmifcccc_c_\\\XXNUUURXmpmpwtwwwtwzzwwwwwwttwpwt…~zwwtwwwwz~~~…~~z~~~ˆˆ…ˆˆˆˆ‹’–’––œ™™œ œœ œœœœ  §§£££   œ œ™œ    ™™–™––™™––––’’’‹ˆˆ‹‹’™£ª­±´´¸»¸»»¾¾»¸­±§£ £œ™™™–’’‹ˆˆ…~ztwpwwwzz~…ˆˆ‹‹’––œœ™œœ  §§ª§  ™œœ™‹‹zptpiiiifiptwzzzzwzwwtptpptttttttttttpptppmpiciiptw~~~…ˆ‹’–’–œœœœœœ œ™–’–’’’’––––™™œ£ £œ œ œœ™œœœ™™––™’™’’‹‹ˆzwtt£  ™œ™œ™™––™™œœ™œœ œœ™™–™’–’–’‹’‹ˆ~~zppmmmmiifffcc_XXXUUURRGKD=DDD=ADNRXX__mifcccccccf\___\\\_Xc_cXXX\UXX\c_cX_\__cmmimmppppttttttpwppmptzwz~z~zzwtwwwttmimttwwwzwz~~~~ˆˆˆˆˆ……~~wtmff__XXXX\_\\XUUNRNKKGKR\__c__U_RRRRGKGKRRU\\_\ffffffXccX\\XXXUXURRUKKRNRGKRXRGUXNRNRKKDNKKNNKKGKAGDGKGGD=A:A:DGKNKNG)63))%))%),)))))),,,,,,,,0,,,666AGDD::6=666633:0%3603%)%%%%%%%"%%%""%%"""%%%%%%%%%%%%%%%%006AG\_c_fccff_c_c__cc_ciimtttwww~z~z~zzwwwzzz~~~…………~ˆ…~twzzwtpiiicfcccc_\\\\\RUUXU\ipppttwtztwwzwwtwwwptwpttˆ~zzzwwwwzz~~……~~zz~…………ˆˆ…ˆˆˆ‹‹‹’––™–™œ™™œ™œœœœœœœ ££§££ £ œ ™œ £   œ––™––™–™™™–––’’’‹‹‹‹–œ§­±´´¸¸»»¾»¾¾»¸ª­§£  œœ™™–’–‹‹…wwwpzzz~~ˆ‹ˆ‹’’–œ œ œ  ££§£™™™™™™ˆpwpmmmmimptz~~~~z~zzwtpptpttwttpttwtttttpmmi_iimpwz……ˆ–™™–™œ œ œœœœ™™–––’’’–™–™œœ ££§ £   œœ œœœ™––––––’’‹…~z£ £œœœœœœ™™’–œ™œœœ™  œœ™™™™–––––’’’’’‹‹……z~ztpimimfffff__\XUURRRNNDKA=DAD=DDKNXU__iifcccffccc__\c_\\c\mcfcf__U_\_c__X__c_ciimmmpmppwtwtwwtwtwppwzz~~~~~zzwwzwwtptptwzwzwzz~~~ˆˆˆˆˆ…~zwppfi\_\\\X\_\\XXXRUNKKKKR\__cccUcNRRRGNKNRNR\X\_ffffc\U_f_\_\\XXXURRRNNUNRGDRURKRUGNNNNKGKGGNNGDDG=DDGGDDD==6==D0AAAK=),,%%%%%),,)),))),,,,0,,,0,,,3000::A:6::66333363%3:06))""""""""""""""""""""""""""""""""%0333DX\c\f_cccccc_c_cccciimtwtwwz~~~w~zzwzwzz~~~……~…~……~zw~~wttimmfffcccc_\\\\UXX\\fmmpmppttztzwwwwtwwttptptt…z~~zzzwzz~……z~~~~………ˆ…ˆˆ……ˆ‹‹‹‹–™™–™™™™™œœœœœœœ ££§£§  £   œœ  £  œ™–™–’–––™––––’–’’’’™™§­±´´¸¸»¸»¾»¾¾»´­ª§££ œœ™œ’––‹……~twttzzz…‹‹‹’––™ œ  œœ œœ ™’™™™–‹‹~zzmmmmmmtwz~~wtwpptpttttttttwwtttppmiicffimtz~……ˆ–œœœ™œœ œœœ œœœ™™––’–––™–™   §§§£££ £   œ œœ™™–™––’’’‹…z£ £œœœœ™œ™™–™™œœœœ™    œ™™™™™–––––’’’’’‹ˆ………~~wpmimiiffccc\\XURRNGDGKAG:=D=AADAGKXX_ciiifffiicccc___c_\_fpfiiifffc_cc__\\___ciipmppitpttwwwzwztzttwz~~z~zw~ztttwtwzzz~zzzz~~ˆ……ˆ……zwppim__\\\\\__\XX\RUNKKKNUX\c_cfXcKRRRKNNRRRUX\__ccfc_\X\ic_c_\XUUUURRNRXRRKGNXRKRRNNKKNKGKKDNKDDAD:AADDADA:666AD0:==::),%%))%)%,,,))))),,,,,,,,0,,,0003063666:663063:3)0603,)""""""""""0003ARX_Xcc___c__ccccccfimppttww~~~z~z~wwwzzz~~~~…~~wz~zwtpmmiifccf____\\U\\__immpptpttzwwwtwtpttttppptw~~~~z~zzz~~……z~~~~~………………ˆ……ˆˆˆ‹‹‹’™™™™™™œ™œœœœœœœ  §£§§§£œ£ œœ   £§££œ™™–––’’–™™–™–’––’’’–œœª±±±´¸¸»¾¾¾¾¾¾¸¸±­ª§§  ™œœ–––’ˆ…~zwwtw~z…ˆ‹’–––  œ  œœ™–™–’––––‹z~ppmmmptz~~……~wwtttppppppttwtwwtttpmmifcfiimpz~…‹œ   œ    œœœœ™ œ™™™––™™™™   £§§§§£§£§   œ£œœ™™™œ™–’’‹~w£ œœ™œ™™™™–™–œœœœœœ œ œœœ™™™™™™™–’–’’–‹ˆ……zwpmiififc___UXURNNKDAD:=D=AD==AGDGNXXccimfcfiiiccccc_c_c\_itpmmmpiiffffc_\\__cfmmppppmtptwwzwzzzw~tw~~…………~~zw~wwtwzww~zz~~~~~z~~ˆ……ˆˆ……zzpmmmc\____\_\\\\UURNKNNRX\ccffXcNUUNNNNNRRUU\__ccfc__\Xff_c_\XXUUXRNXUXUURKKUNKUURNKKKGDNKDKN:D=A:=AAD=AA:666=A0:=::0),%%))%%"),,),))),,,,,,0,0,,,,030003336:660)3060,36,0)%"",,,3ANU\X_______\cccccfcfmmmptzt~~~z~z~wzzzzzz~~~~~zz~zwwtppififcc_\c\\\XX\_cmmmppttttwwwttttppttpppppt…~z~~z~~~………~~~……………ˆˆ……ˆ‹‹‹‹’™œœœ™™™™™™œœœ œ £§§ª§£    ™™ œœ ££ ™œ–’–––’™–™–™™–™––’’–™ §­´±±´´¸¸¾¾¾¾¾»¸¸±±­§§££™ œ™––’‹…ˆzzwwwz~………ˆ‹’’’’’–™œœ™   œ–––’’’–’‹‹…~~tppmippwz~…~z~wtptppmmmmmppwwwttpttpmiicimmppwz~……… ££    £œ œ™œœœ œœœ™™œ™œœ£££§§§§§§££§ œœœ ™œ™™œœ™™–’‹‹ˆztt~ œœ™™™™™™–™™œ™œ™™™œ™œ œ œ™™œ™œ™–’’’‹’’‹ˆ…wtpmiiffc_\\\NNRNDGGA:A3===AAAADDADKUUf_fifffiffcfc_c_c_c\_mptppptmmmiifcc____cfmpppppmpptwz~z~~~w~zˆ…………~zz~zwww~zz~~~~z~~z~ˆ…ˆ…ˆ……~~tpmppfmffc\c\_\\XXURNNRR\\ifii\cRXURNRRNURXX__cfffccc\Xifccc_\XURXRc_\\\\\RKRRGXXURGKKDAKKGKK=A======A===6666==0::::)))%%%)")%))),)))),,,,,,,,000,,0000033336660,033,,33))%%")%)6=KUUU\____\_\c_cccfffmimptwwz~~z~~~w~z~z~zz~~~~~z~~~~~zzzwttmficcc_\_\\\XX_cfmimmptwttttttpppppppppppppˆ……~z~~z…ˆ…~~~~~……ˆˆˆ‹‹……ˆ‹’–™™œ™œ–™œ™™  œ  £§§§ª£§£ œ œ™ ™œ  £ ™œ™––™–’–––––™–™™™–––œ£ª­´±±´´»»¾¾¾¾¾»´¸±±­ªª££œœ –’–’‹ˆ…wwwzz~ˆˆˆ‹‹‹–’’–’–™œ™™œœœœ™’’’’’’ˆˆ…~~tttmmpptwz~z~wzzwmpmmiiiiipttttwwttpmpmifmppttwz~…ˆ£££§£££££  œ™œœ œœ œœœ œ  §££§§ª§§§£££œ™™œœ–™––™™––’ˆˆ…ttt~œ™™™™™–™–––™œ™™œœœœœ £  ™™™™œœœ™’’‹‹ˆ……ttmmfffcc\\XXKKGG==D=:=3:A:===DDAAGKURc\cfifficfcfc_c___c\ciptmtpwpppmifcc_c_cfimpptpppttwwz~z…ˆ…………ˆ……ˆ………~wz~~wzw~~~~~~~~~~…………ˆ………~ˆzzwttmpiimfc\\\\XUXUNNRU__mimp\fX\UURUURURX\_ccffffcccXffffc_\\RU\cfc_\c__\NRRKUXRUGGKGAKKDKGAA===::3===:6636:6066:6,)%%%%)%)))))))))),,,,,,,,03,,,0330000363360)00,)000%%""%%%3=NUXUX\\_____c\cccccimipppwwzz~~~~z~~z~zw~zz~~z~~~z~~…zzzzwtmiffccc\__\XX\_fimfmmptttppptpppptptpppmpmp‹………ˆ……~z~~………ˆ…~~~………ˆˆ‹‹ˆˆ‹’’’’™œ™œ™œ™–œ™œ   ££§ª§ª§§£  œœœœœ–™œ   œœœ–––––™’––™™™™™™––™ §ªª´´±´¸»»¾¾¾¾»»´´±±±­ª§£   ™–’ˆ…~wzz~~…ˆˆ‹’’’––™™™™™™™™™–‹‹ˆˆˆzztptppppttw~~zzwtwtmmmmifficmpppttwtptppmiippmttwz~~ˆ§§§§§§£§££ œœœœœœœ     œ £§§£ª§ª§§££  ™––™™’–’–––’’‹ˆ…~www~’–™––™–™’–’–™œ™œœœ  ££££œœ™œœœ™–’‹‹‹‹ˆ…~~wtmiccfc_\XUUKKGA:=A=6:6===A=AAAADKNXUc_cimiiififcfcfc_cc\fipwtwtwtttpmfffcffffiptttpptwtzwz~~ˆ‹…ˆˆ…ˆ………ˆˆ…ˆ~zz~zzzwzz~~~~z………ˆ………~ˆ……~~zzwttptpif_X\\UXXURNRX\cpmmt\i\\XXUXUNXNX__ccffiifffccciff___UU_fiffffcc___UKXXUXKKKKDKKDGG==::::66:::33663663:66:))))%"%)%%)))))))),,,,,,,,000,,3000000063330),,%)0,,""%0:RXXXXX\_\\\c__f_ccfimmmmpwzz~~zz~~~zzz~z~zwzzzzzw~~zzz~…z~z~wtpmiifcc\_\\UUXcfipmmpptttmtptmpmmpptpptppmpˆˆˆ…‹ˆˆ~~……ˆˆ…~………ˆˆˆ‹‹–’––™œœ œœœ™œœ  ££§§§§ªªª§£œœ œœ™™’–™ œ    ™™™™™™–’–™™™™–™–™œ£§ª­´´´´»¾»»¾¾¾¾»¸´±±´±­ªª £ œ–’‹~w~zw~~~~…‹‹‹’’’––’’––™™–™™™––™’‹‹‹‹‹ˆ………wwtttmmmmpptzwwwwttppmmifc_fcifmmppwwttpmmiimtpttwzzz…’ªªª§§ª§£§  œœœœœ  œ     £§£££§§§§£ £ œ–’’––’’’’’‹…~~wwz~ˆ™––––’™’’–––™™™œœ œ£§§£  ™œ™™–’‹ˆˆ…ˆ…~~~ztpmiffc_\XURUKKDA=A=::=::=A=AA=AADGNXXccciiiiiimicicfcccc\immzwzwwwtttmpiiimifcmptttpttwwzz~~‹‹ˆ‹…‹………ˆ…ˆˆ~~~~~zzzwzz~~~~~~z~~…ˆ…ˆˆ…ˆ………~~zwwtwtmic\\_UUXUUNRX\_mppwXi_\_XX\XNUK\c_c_fffiiiifXfifi_cfUUciiiiiiffcccXK\XXUNKNKGKKDKG===:::6:::660333360633:,)%)"""%"")))))))),,,,,,,,00,,,0030300333330)0,%),""" +",6RX\\\X\_\X\c_cccfccfmpppttwz~zzzz~zzz~z~zzzzzzwwz~zwwzz~zzz~zwtmmiicc__\XXUX_cimpmpmtppptmppmmmmpppppppppˆ‹ˆ…‹‹‹…………ˆˆˆˆ……………ˆ‹‹ˆ’––™™œ  œ œœœ   £§ªª§ª­§ª£§ ™ ™™œ––™™ œ  £ œœœœ™™™–™™™™™™–™œ £§ª­´¸¸¸¾¾»¾¾¾¾¾¾´´´±±±±ª­§££™–…zwzzz~~…ˆˆˆ–’’–™–’’™™™––œ––’™‹‹‹‹ˆˆ‹ˆ…ttpppiimimmpwtttwwptmmmmif_c_ff\fmmttwtpmmmmppppwzzz~ˆªªª­§§ª§§£     œ œœ   ££ ££   ££££ œ œ™’’’‹‹‹‹ˆ…~wwz~ˆ™–™’–––’’–’’™™™™œ  ££§£  œ œ™’‹‹……~zzzwtmiiffc\XXRNRGGA=A=:::==6=D=AA=D=AGKUXccfiimmmmpifmffcccfimmpzzwzzzwwtmtmmmpmmmmpttwpwttzz~…ˆ’‹ˆˆ…~~…ˆˆ~~~~zzwwwwzzz~~~~zzˆ………ˆˆ‹…ˆ………~zzwztpif_\\URURRRRUX\iptzXm_\c\\\\NRK__cfccffiiiic\ffim__iiRcmmmmmmiicff\\_UUURNRNDKKDGGA:::::6:::33003033036060%))%"")))))))),,,,,,,,0,,,,000300003633,,,)%%)"" +™%0UU\\\\\\\\\\ccfffffcfmppptwtwzzwzz~~z~z~z~zzzzwzwwzzwwwww~zwzwzzztmmmifccc_\XU\_cimtppppppmpppmmmmmpptpppppp‹‹ˆ…‹ˆ‹ˆ……ˆˆˆˆˆˆ…~……ˆ…ˆ‹‹’’–––™œ  œœœ œœ£ £§ªª­ª­­ªª§§£™œ™™œ’–™œ £  §§£  œœ™œ™œœ™™™™–™  ££­­´¸¸»¾¾»¾¾¾»¸»±¸¸´´±±­±ª£§œ–‹…wzz~z~~………‹‹‹’––’––’–––™™–™–’–‹‹ˆˆ……ˆ~~zwwmmmifiiiifppiptttpppiiiicc_cc_cfipptwpppippptttzz~§ªª­ª§§§§§££   œ £  £  §£ £ œœœ  œ œ™œ™–‹ˆ‹‹‹ˆ‹ˆ‹ˆ‹………~~wwzˆ–––––––’’’’––™™œœ ££§£££  ™–ˆˆ~z~~wzzwppmmicccXUURNNDDA=A=::===:AAAAAAA=AGKRU_ciiimppmpiimiiffimmpmp~zzzz~wwttwtpptpppptwwwpttw~~…ˆ‹’’–ˆˆ…~~~~~……ˆ…~~wzwwpwwwz~~z~~~~ˆ…ˆˆˆˆ‹ˆ…‹…ˆˆ…~~~zwwtmc_X\RRRRRNRUURftwzXmc_f__\XRR\__ff_ffiiimff_ffiii\mmmfipmpppmifcc___UXXUNRNDNKDDDD::6:=3:6630300030036,30%))"")))))))),,,,,,,,0,,0,000030033333,,,)%""" +™–"3XX\\X\\\\\____fcccccfimpptwwwzzzwzzz~zz~z~zzzzwzwwwzzwtwtzwtwtwzztppiiffcc__XX_cfmptpttpptmmmpiiimmmmtpmpmmp‹ˆˆ‹‹ˆ‹…ˆˆˆˆ‹ˆ…………………ˆˆ‹‹’’–––™™œ  œœ œ    £ªªª­­ª­ªª§§§œ ™œ™–™™œ£§§ª§ªª§ £œœœœœœœœœ™™™œœ  ª­´¸¸¸¸»»¾¾¾¾¸¸´¸´´´´±­­­§£™’ˆzz~~~………‹‹’’’’––––™––™™’™––‹ˆˆ……~~z~zzwttmiifcffficmifmfpttppifmfc__cc_cfipptttpmmpttttz~~ª§­§­§§£££§§£  £  ££ §££§  £œ™™™œœœœ™–––‹‹ˆˆ…‹‹ˆ‹‹ˆˆ‹ˆˆ…~zww~…ˆ’––™™––’’’’–™œœ  £§§£§   –’‹……~~~wzzwwwtpmmifcc_UXRNNG=DA===::A:=:A=D=DAA=DDKNR\_ffimtmptmmmmmimmpppmp~~~z~wwwwwwzwwtttttwwwttzzˆ‹–––’‹ˆ……~~~……ˆˆ…~zwwwwptwww~zzzz~z~ˆ…ˆˆˆˆˆ‹ˆ‹ˆˆˆˆ~~~wztm__UXRRRRRRRRUUcwtzXifcfcc\XUU\\cfccifiiimcfcfffimcmpmiipppmppiiffcc\X\XXXRKDNNGDDA:66::663300300000066,00)%%"")))))))),,,,,,,,0,,,,,000000033330))))""" +œœ™™"3X\\\\X\\__c__cc_c_ccfiimppwzzzzwwzzzzww~z~zwzwwzztwzzwttwwtpwpwzwwttmmif_c__\Xcffptttwtpptmmmmimmmmmippmmmmm’ˆ‹‹‹ˆˆˆ‹ˆˆ…ˆˆ……………~………ˆ‹‹’’’–’–™™œœ   œ   ££ §­ª­±­­±­ªªª£ £™™œ™™œ£§ªª­ª­­ª§§£  œœœœœœ™™™œœ £§­±´¸¸¸»¾¾¾¾¾¸¸´»±´´±­­­ª£ ™ˆ~z~~……ˆˆˆ‹‹‹’–’’––’––’–––’–’’’ˆ…………~z~zzwzwpppffcccccf_iccffmptptmipiccc_cc_fimptwwtpptwtwz­­­§ª§ª§£ §£££££££  ££ £§§§£  œœ–™™™™™–’’ˆˆ…ˆ…ˆ‹ˆˆˆˆ‹‹………~~zwtw~ˆˆ–™™––’–‹’–™œœ£ £§§§£  œ’ˆˆ~~zzztwwtttttmmff_c_XUUKKDAD==::===AA==AAADAAADAKKR\\fcfipipppppppmpptptpt~~z~zwzz~z~zzwwwwwwzzzz~…ˆ‹’™™––‹‹……~z……ˆ…~zwztwtpwwtzz~~z~~ˆˆˆ…ˆ‹‹‹‹ˆ‹‹ˆ……ztzpi_\XURRRRRRRRUX\Uwz\fifcc_\UUX___c__fffif\ffciiffmfmpiiimXpmmpffff_c\\_X\\UNDNKKDDA:::::66603030,,,00630,3%%%""")))))))),,,,,,,,0,,,,,,,0000063330)%%%"" +œœ™™XXX_\\\_\c_c_ccfcccffiiiippwzzzwzwzzzwzz~z~zwzzwzztwzzwwwwwtptttwwwttppmf_cc__\ciiptttwtttpmmmmiimmmmmpmmipmp–‹‹‹‹‹ˆ‹‹…ˆ…ˆˆ…………………‹’’’’––™™œœœ  œœœœœ£§£ª­­­±±±±±´­­ª§§   œœ §ª­­±­±±­ªª§££œ œ  œœ™œœœ £§ª±´¸»¸¾¾¾¾»»¸»´¸±´´­­­ªª œ–…~z~~ˆˆˆˆˆˆ‹‹’’’–™–’’’’–’’’’–’–ˆ…ˆ~zzwzwwtppmif_c\__c_fcc_citwttpmpifffcffccimppwtttttzzz~ˆ±±­ª§ª£§£ œ£  £  ££ ££££ £££  œ™™–™–––’‹…ˆ‹…ˆ…ˆˆ……ˆ‹ˆˆˆzwwzww~ˆ‹‹™––’™–’‹’–    §££§£ œ ˆzzwwwptttpmppiifcc_\\UUGNDAD:=::==ADAAADDDD=ADDDKGNXXc_cfmftmptpmmmttttwtp~~z~~z~~~~~zzzzzzz~~~……ˆ‹’–™™–™’‹……z~………z~~ztwttpmttpzw~~~~~…ˆ‹ˆˆ‹‹ˆ‹ˆ‹‹‹……z~pwff_XURRRRRRRRRRUUUwz_iifc_c_RXX_\\c\_fccff\ifcfffiiiimmfmi\mmimcccc__\_\U\XXKDRKKGDA=::::6::33300,,,30:00,0%%%%%""")))))))),,,,,,,,0,,,,,,,,00003333,))%%""" + œ™™XX\X_\_\_\c_c_cffffffiiimiptwzzwwzwwzzwzz~z~~tzzwzwwzz~zzzwwwttppttwttpmiicfccc_fmmtwwwwwwwtppmpmiimmmptmmmppt–‹‹‹ˆ‹‹…ˆ……………………ˆˆ’’’–’’’––™œ™œ £  œ   §ª§§­ª­±±´´´¸±­­ªª£££  §ª­­­±±±­ª­­ª£§ £ œ  ™™œœœ £§ª±´¸»»¾¾¾¾¾»»¸´´­±±ªªª§§œ™’‹…~~~ˆˆ‹ˆˆˆ‹’––––––––––’–’–‹–………~~zzwzwwtwpmifc___c________cptwtpppmiifffffcimppwtwww~…±­±­ªª§ £ œœ         ££ £££££œœ™™™’–’…………~~………ˆˆ‹ˆ…ˆ~zzw~zw~ˆˆ’–’–’––’’–™  œ££ ££§œ™œ‹ˆ~wwttpptptpmmpiffcc_\_URKKDAA=:==:=DGGDDDDDD:ADDGKKKUURURciftmppmmmpppttztp~…~…~~z~~z~…ˆ…‹’–––™–™–’ˆ………~…~~wzz~wwtptpppptwtzzzz~…ˆˆˆˆ‹‹‹ˆ‹‹ˆˆ~~tiicc\XXRRRURRRRUUUXUtw_mfff_f_N\U\\\c__f__cc_fffffiiifmRifm_\\ifK___f_c\\_U\XUKDUNNKG=A:6=::6:36300,0,30600),)%))%""")))))))),,,,,,,,0,,,,,,,,000033330,,))%"" +œ™™"UXUX\___\__ccccffiiifffimmippwwzzwzwwzwwwwzw~~wzzzzwwz~~zzwzwwtpptptttppmicifffcipptzzwwwzttppmmmimmiiptpmpttw–’’‹ˆˆ‹ˆ……………………ˆ‹‹–’’’’’’––™™™ œ      £§§ªª±­±´´¸´¸»´±±­­§ª§££ª­±±­±´±­­±±ª§§£§£œœ£™™œœ £§§ª±±¸¸»¾»¾¾¾¾»´±±­­­§§§ £™ˆˆ………ˆ‹‹ˆ‹‹’––™™–’’–’’’’’’‹–……zzzwwwzwwtmpfi_c_c___\\\__\cfpttppppiifiiiifmmmtwtwz~£´’ˆ±±­ªª§£  ™ œœœœ œœœœ  ££ ££  œ™–––’ˆ‹…wzwz……ˆ‹ˆˆ…~~w~zw…‹‹–––™’–’’’’™–œ       £™’™ˆ…~wtmppppppmmmmfffcc__\URKGDA==:=:=ADGKGGDDGG=DGDGGKGNGNRRR\cpmpmmmpptptpwwz~…ˆ……………ˆ………~z~~……ˆ‹ˆ’’–’™–™–’ˆˆˆ…………~~ztwzzttptpmmmmptpwzwz~ˆˆ……ˆ‹‹‹‹‹…‹~ziicc\XXXUUUURRRUUUU\Upt_iccf_f_R\R\_\f_\c_\cf_cfccffiifmRfci\\XRcG\__c_c_X_X\\XKGUNRNGAA=::6::63633300033300,,,))%%""")))))))),,,,,,,,0,,,,,,,,00000333,,,)))%""" +œ™œUUXRX__c__cccffffiimiiifimmmppwwwzwwzzzzwwzzz~~zzwz~zzz~z~wwwtpttmttwtppifiiiffmtttz~wwwzttttmmimmmmmmppptwwz™––’‹ˆ‹‹ˆ…………………‹–’–’–’’’’–™œœ œ£££  £§§ª§­­±´±´¸¸»»¸´´±±ª­§§ª­­´­±­±­±­­­ª£§§§  œ£œœœœœ ££§±±¸¸»¾»¾¾»¾»´±­ª§§£ £œ–’‹‹………ˆ‹’’‹‹‹’’’––™–’–’’’’’–’–~wzwwzzzzwtptiicccf_\\\_\\\U_cmpppppmmmimiiiimmptttzz §±­­­­ªª§§§  œœ™™™™œœœœ™œ    £ œœ™–’’’‹‹ˆ……wtwtwtt~~……ˆ…ˆ…z~z~zz‹’™––™’’’‹–’––™œœœ œœœ –‹~zztmmpmmpmmimmiffffc_c_URKKDA======DGKNGGGGDGADGDDGGDKGKKNRXX\immmmmpttwmtz~……ˆˆˆˆ…ˆ…ˆˆ…………~~…ˆˆ‹‹––’’™–™––ˆ‹ˆ………………~~~wptztptipmimimcpmtwwzz~…ˆ……ˆ‹‹‹‹‹…ˆ…zwfmfc\\XXUUUURRUUUUX\Xipcf_cc_c_U\U\__fcXc\Rff_cc_ffciffiU__UXXXRRAX\\_\__X_UX\\NKRKRRKDD:==:::666630033333,3,,0)))%""")))))))),,,,,,,,0,,,,,,,,00000003,,,)))%%%"" +œ™œURUUU_\__cccfifiiimmmmiimmmmpttwzzzzzwzzwwzzz~zzzzwz~z~…~…~…~wtpttpttwtptmiimiiimtwwzzwwwzttwpmmimmmmpmppttwzzœ™™–’ˆ‹ˆˆ…………ˆˆˆ‹’’–’–––––’––– ™œ   £ £££ª­§­±±±­±¸¸¸»»¸´±±­±ªª­±±±­±­±­­ª­­§ ££§ œ    œœœ §£ª­±¸¸¸¾»¾¾»¾»±­ª§££  œ™’’‹ˆ‹………ˆ’–’’’’–’––™–’’’’‹’~~~zzwzzzwwtptwmmffccc_\\_XX\U\\fcmmmpmmmmmiimimmmtww~~…£ª±ª­­ª­§££££ ™™––™™™™œ™œœœœœ  œ ™–’‹…ˆˆ…~wttptppzz~~ˆ…………z~~~~––™’™’’’––™––œ ™œ™œ™–’‹…zzzpmmpiimiifiifffiff__\URKKDDA=:===DGNNKKKGDGDGDDADGADDGDKNUUXfiimimmtttmwz……ˆ……ˆ……ˆ…ˆˆˆ………~……ˆˆ‹‹’–––™––’–‹ˆˆ…ˆ…………zzwtpwpttfppmmmmfmitttww~…ˆ…ˆˆˆ‹‹ˆ‹‹…ˆ…zwfmif_\\\UUUURUUUUUX_\ipcf\cccc_XXX___fc\cXRfc_ffciififc_R_\UUNUNNDKXXX\\\\\RXX:RGNGURNGGAA=:=::::6000666663360,,%))%"")))))))),,,,0,,,0))),,,,,00000000,,,)))%%%%"" +œœ RRUXX\_\___ffiiimmpmmimmpmmptttwww~zwwzzwzwwz~zz~zz~~~ˆ…ˆ…ˆwzttppptwtttpmmiiimptwz~wwzzwtpwpmmimpmmpptttwzzz –™™–’‹‹ˆ…~……ˆˆˆ‹’’––––™–––’–™œœœ  £§£§§§§­ª­­­´±´¸¸»¾¸¸´´´­±­­±±´±±­­­ªª§­ª££  £ ™ œœœœœ  §§ª±±´¸¸»»»¾»¾¸­ª§  ™™œ’’ˆ…ˆˆˆ’’’–™––’’’’–’’––––‹’’ˆ‹ˆzzzzzw~zzzzwttwpmmiffcc\\\XXXU\\_\ciimpmmiiiipmmppwwz~…§ª±§­­­ª£££  œ™––’––––™™œ™œœ™œ œœ–’…ˆ………~~wttpptptz~z~~~~…z…~~’’™™™’–’–’’––’’™œ–™–™–’‹…z~ztpmmffiffcffiffffc_\XRRKGDD=:=:==ADNKKGGDDDADAAAADAAADDKKKRUcfimfpmttpmwz…ˆˆˆ……………ˆ…………………ˆ~………ˆˆˆ‹’’––’’’’‹ˆˆˆ‹……………~~zwtpwtttmmpimmifmipttzw~…ˆ…‹‹‹‹ˆˆ‹’‹……zzimmic\\\XXUXUUXUUXX__fm_i_cc__\\\X\\_cc_cXRc_ccfcmfiifc_N_\RRNRKDDNURUXUXXXNUN:NDKDURNKGDAA:A=6:::30:666:663:300%)%%""%)))))))))),,,,,,0,)))),,,00000000,,,))))%%%%"" + + +œœ RRUX\__\__cifiimmptppmmmppmptwwtww~zwwwzwztzz~~z~~~~……ˆ‹ˆ‹ˆ…wwttpmpwtwttpimmmmpwwwzzzzzwtttmppiptmptttwttzzzœ–™™–’‹‹ˆˆ~……ˆ…ˆ‹‹‹’–’’–––™™––––™œ     ££ª§ªªªª­­­±´´¸»¸¾»¸¸´±±±±±±´´­±±­­§§ ª§££œœ œ™ ™œœœœ  §§ª­±´¸»»»¸»¸»´ª   œ™–™’’‹‹ˆˆ‹’–––™œ™™’’’’’–’’’‹‹‹…~zz~zzzzzwwtwwtppiifcc_\_\\UU\XUX\c_immmmmmmpppptzz~…™§ª­ªªªª§    œ™™’–’––’’––™™œ™™™œ™™‹‹……~~~zwtppmpptwzwzzzz~~~wˆ…––œ™œ––––’‹‹’’’™–’’‹’–’‹…z~zztpmmific__ffmfcffc_\URRNKDGD=A==A=AKGGDDAAD=A====AAA=DGGKKNN_iimfmiptimzzˆ‹ˆˆ………………………ˆ…………ˆ‹‹’’’’–’ˆ‹ˆ‹ˆˆ………z~zwwtwtptpmpmmifciimppzzz………‹‹‹‹ˆ‹‹……zwiimfc_\\\XX\XXUUXXX\_fi\fccc__\_X\X__c__c\UcXc_c_icffc__X_XRRNNGGGRGRRUUXUUKGG:KA:GRUNKDGDDAAAA=:=3:=:::=::6=030))%%%"%)))),)))))0)00,,0,)))))),00000000,,,))))%%%%"""œœ RRXX\c__ccfifiimiptpppimttptttwtwwzzwwzzwwwz~z~~~~ˆˆˆˆ™ˆˆ…ˆztwtmpttwttpfmmmptwtwzz~zzwwwtpppmttpttttwwtzzz ™™–’‹ˆˆ‹……ˆ‹ˆ‹‹’–––™™–œ™–™™–™œœ œ £ §ª£­­ª­ª±­±±¸¸»¸»¸´´±´­´´±±±±ª­­ªª§§ §£  œœ™œ™ ™™œœ  £§§ª­±´¸¸¸¸´´´±±§  œœœ’’’’’ˆˆ’’–™™™œœ™––‹‹’’‹‹‹‹‹ˆ…z~~~~zztzwwttttmmiifc__\\RUXXXXX\\ciiiimmmpmttw~zˆ™§§§­­§ªª§ œœ ™œ™–’–’’’’’––™™™–™™‹ˆ‹…~~z~zwwtmpmppttwwwwzw~~zz~zt~ˆˆ…’™œœ™™™–––’‹’‹’–‹’ˆˆ’ˆzzwwtpppmff___cficcccc\XUURRKKKGA====:=GADA===A:=:::=6=AAADGGGNK_fiifmfmwfm~w‹ˆ…~…~~z~ˆ……………ˆ…ˆ…ˆˆ‹‹’’’–‹‹‹‹ˆ………~zwwwwwmptmpmiffcffimpzzz………‹‹‹‹‹ˆ‹‹………zwiimcc_\\\\\\UUUUUUX\\cf\cccc__G_U\U__cc_c_UcX__cci_ccccc\\URNNRGGGRKNNRRURRADA:DA6GNRNKGGDDDDADA==:=A:=:A6::=,60,%)))%))))),,,),,0)3,003))))),,,0,,00000,,,,,)))%%%"""" +™œ NNUXXc_cffffimimiptpptmppttwwtwwzzzwwwwwwwt~~~~~~…ˆˆˆ‹™™™™ˆ‹wwzptttwptpfpiipwwwwzz~~zzwtttppmtttwtwwzwwzzz ––’‹ˆ‹…‹………ˆ‹‹‹’–™™™™–œ™™™œ™œœœœœ  £§§§ª­ªª§­­­´´»¸¸»»¸±±´±±±±­±±ªªªª­§£ £   ™œ™œœœ™™™  ££§ª­­±±¸¸´´±´±­ª£ œœœ™’–’–’’’––™œ™œ™™–’’‹‹‹‹‹‹‹‹ˆ‹‹‹‹‹ˆ~~~…~~~wwwwwwttppimifc__\UXU\XUXXX\_ffimpppttwz…‹œª§ªª­ªªª£œœ™£œœ–’’‹’’’’–œœ’’–‹ˆˆ…~zzzztwpmppmpppttztzzzzwwzttz……ˆœ œœ™™–––’‹‹‹‹ˆˆˆˆ‹‹‹…~zwwwpppiifc___cfc____XURRRRNNKKAAAA:::D3==:6:=6:6:6:6:A=ADDGGNK_cffiiffcct…‹‹‹~~~~~~~zzˆ…ˆ…ˆ……ˆ……ˆ‹’’’’’’‹…ˆˆ…~wwzwzpptimiiffficimmwz~ˆˆˆ‹ˆ‹‹‹ˆˆ‹‹‹……ztmtmffc___\\\XUUUXXX\_cf_c_cc__G\XXU\__c_c_RcX\_c_i\f\c___XRUKNRGGGRKKKNNRND=AA=A=:GKNNGDDDDGDDGDA=AADAA=D6:=A)3,,)))))))))),,,,,003633000,,))0,0,,3,00300,,,)))))%%%%""" + + +™œœRURU\ccfiffimmimiptpppppttwwwwwwzwwwwwwzwwt~………………ˆ‹™™™™™…ˆz~tttptppmfmiipwwzwz~z~zwtttpppptptwwzwzwwzzzœ’’’‹ˆ‹ˆˆˆˆ……ˆˆ‹’’’’–™–œ™œ™œœœœ œ ™œ™œ   £§§§­ªª£­ªª±±¸´»¸¸´­±´±±±­±±­ª§ªªª££££ œ œ™œœœœœ™œ ££§§­­±´±¸´±±±±±ªª£ ™œœ™’–––’’–’–™––œ–™––’’’ˆ‹‹ˆ‹‹‹‹‹ˆˆˆ…ˆˆˆˆˆ…~z~~~…z~ztzttzwttttmpmifc__XXXXXXXURR\_cfipptwwzz……… §ª§­ª­ª§§  œœ œ™–’‹ˆ‹’™™’’ˆˆˆ…~zzwzttpimmimmmppwtwzwwptwttww‹ £  ™™™’–’ˆ‹ˆˆ…‹ˆ………‹‹…ˆ…~~zwwwpptmmffc_\_cc_\\\XRURRRNRNKDAA=66:=36:66366636663:A=DDAKKRNccfcmfXf_fw…ˆ‹ˆˆz~~~~~z~w~w…………ˆˆ………ˆˆˆ’’’’’’’’’‹‹ˆ~wwwtwpppfiiffcffcimitz~ˆ…ˆ‹‹ˆ‹‹ˆˆ……~wpwpiif_c\\\\XUUXX\\\ccf_c_____G\XXU\__c_fcRcX\cc_i\i____\XUUNNNGKGNGGKDGDAA:==:=::KDGKKAGGDGGGKGDNNGKNN=G=DDD)60,),,)),))),,,,,0036:6633300),,03)06,333030,,))))))%%%%""" + +™œ™UXUX_cfiifimmimmmptmppmptwzzwztwwtwwtwwzwww~…………………ˆ…‹ˆ™™™™™‹ˆ‹~wtwpppmmiiimmtzzwzzzzzwttttptttttwwzzzzzwzzœ‹ˆˆˆ………ˆ…ˆ‹‹‹’’’–™™™ ™ œ     œœœœ™œœœ ££§ªªªª§ªª­±ª¸´¸´´±±­´±­´­±±­ªªª§ª§£££œ œ ™œœ™œ œ  £§ªª±±´´´¸´±±±­­§§£ œ™™™’’’–’–––™–––™––’–ˆˆˆˆ‹‹ˆˆˆˆ~………~…………~z~~~~z~wtztwwtpptpmppiifc_\\\\XUXXUNUNXcfpppzzzzˆˆœ§ªªªªª­ªª§£œ œ ™––’‹‹ˆ‹’––’‹‹…ˆ~zwwwttpiimmifmmptptwptmtpptpmww…œ   –œ–’’’‹…ˆ……ˆˆˆ……~~~zwwpptmmifcc__c_\UUXURUNRRRURNGDDA33600,633333)033:06=ADDDKNUR_fc\icXf\czˆ‹‹‹ˆ~zzzzwzwzz…ˆˆ…………ˆ…‹’’’’’–’’’’’ˆ……twwwwppmfficcffccii_pzˆˆˆ‹ˆˆ‹……zwtwtmmfcc\_X\XXXXX\__ccf_c_\__\G\\XU_c_ccicRfUXc_\f\icc_c\URRNKKGKKKKGGDDD:::=:::66KGGGKDDGDGDKNKGRRUNRRKKAGGD6:3))0,)),,),,,,,,003::::66603),003,3:0360003,0,,)))))%%%%%"" + +™™™X\XX_cfiifimmmmmmmpppmppptwwwwtwwwwtpttztww~~……………………ˆ…ˆˆ™™™™™‹ˆzwztppmmmifmmtzzwzzzzwwwwttpwwwwtwzzzzzwwzz™‹‹‹ˆˆˆ………ˆˆˆ‹–’––œœœ œ  £££œ£  œœœœ   ££§ª§ª§£ªª­­ª´±¸´±­­ª±±­±­­­ªªª§£§££ §  ™œœœ œœ   £§ª­­±±´´¸»´­±±­ª§§£œœ™™œ––––––––™™–’–’’’‹‹ˆ……ˆ‹‹ˆˆ…zz~~~z…~z~…zz~~zzpwpttptmpmpmmifffc\__\\XUURKNNNR\\ptwz~z…‹§ªª­­­­±ª­£§™  œ–’–‹‹ˆˆ‹‹‹’’’’’’‹ˆˆ…~wzwtwtpmmpffmipmpptppmtpppmittp_£ œ™™–’’’‹ˆ~z~~~z~………~~~zwwpppmmiiff_\_\XRRRURRRRRUURRKDDA60,,,,0,0000),33636=AADKNNXR_ccX_XXfcc~‹‹ˆwzwzzwwwz~~~…ˆˆ………ˆˆˆ’’’––’’’’’’’’’’‹ˆ……~tzwzwppiicif_ffccif_pw~ˆˆ‹‹‹‹‹‹‹ˆ‹ˆˆ~~zwzwpmifc__\\\\XXU_cfcciccc\__\_\_X\c_cffifUiUXcc\f\f_f__XRNNNKGKKKDGDGAAA:::=:=:::GGGKGGDGDGAKNNGRRXRUUNNDKKG::3),3,,,00,,,,000003:=::3:636,03363663360,00,0,,)))))%%%%%""""" + + +™™™\_\\_cfiiiiiimimimmpppmtttwwttpttwtptttzwwwz~………………ˆˆˆˆˆ™™™––‹ˆ……zzwwtpmmifiiiwzzwzzzzwzwzttpwwwwwwzzzzzwz~z–ˆ‹‹ˆˆ…………ˆ‹ˆ‹‹’–’™™œœœœ   £ £ §££  œœ    ££§§­§£§ªª­­´±´´­­ª§­­­­­ªªªª§§££§££§ œœœœœ œœ £££§ª±­±±¸¸¸¸´­­­ª§§££ œ™™™––––™’™––™–’’’‹ˆ…………ˆˆ……~~ztptwtzwz~~~z~zzwwmtmpimpimipiifcfcf___\\URRNGKNNNU\mtwwzz‹­­­±±­­±­ªª§  œ™’–‹ˆ‹ˆ‹‹‹’’’‹‹ˆ……z~~wzzwtpmmifmmppppppppppmmicpim_  œ–™’’‹ˆ~~zwwzzwz~zzwtppppmmmii_\\URRRRRRNURUUXRRNAA=3),)),,,,,0)))0366:=ADGNKUXU__cX_UXff‹‹‹…~wwtwwwztz~~~‹ˆ……~……ˆˆ’’’’–––’’’’’’’‹ˆ…~wzwwtpmmfciccfcfcifcpz~ˆ…ˆ‹‹‹‹ˆˆ…ˆˆˆ……~z~zptmfff___\XX__imiiimcc__c__\_cc_ccffifiXfUU_c\ificc__UNNNKKGKGGDDGD===::::::::=GDDKGGDDDGAGNKKRNURRUNNGKNK==6,,600000,0,,,30306==::6::660336666:0363,300,,,)),))))%%%%%""" + + +™œ™__\_cffffififmfmimmpppmpppwtptpppttppttwwwwz~……………‹‹ˆ‹–™™’’‹‹ˆ…zzzzwpmmfimmmt~zzzzzzzzwzwwtwzzzzwzzzzzz~~z–…ˆ‹ˆ‹ˆ………ˆˆ‹‹’–™™™  ££££ £££§£££  œ œ   £§ªª§§ªª­­±´­´´ª­§£ªªªª­§§§§£££££ £§œœœœœ £ œ £££§ª­­­±¸¸¸´´­­­ª§££  œœ™œ™™–™––™™–––’’’’‹‹‹……………~zztptttwwzz~z~~~~zwwtt6D\_DRKfifmcfc_fcfcc_\XRNNKGGKNGR\Xttz~~­±­±´´´±­­ª­§££ œ’‹‹‹ˆ‹ˆ‹’‹‹’‹‹ˆˆˆ~~zzwwppifmimmppppppppmiccicp_œt™––’ˆ‹…~~zzwtwtttww~~~~zwwwptpppppmif___URNRNRNKRUUXXRRK==:0))%)),)",,))),06:6=ADKRUX\X\_cX_XXci‹‹ˆˆ…~~wwwtwwztz~z~‹ˆ……………ˆ‹’’’––’’’’’’’’’‹ˆ…ztwttppmmificffccfiiptz~ˆ…ˆ‹‹‹‹ˆˆ………………~~~twtiiiifc\\\cimpmmmpfc\ccc___cfc_ffiiii\iUU_f_miifc__URRKKGGKGGDAD:::::::::::::DDAGGDAGADDKKNNNNRNNRKKDGNGAA6,063030,)0),00,33:AA==:::6633333:363333,0,0,,,,)))))))%%%%%%"""" + + +™™œ\\\cfffffffiiiiifmmpmpmmmpwptpmpmptptwtwwtwzz……………ˆ‹–™™’’……zzzzztpmiimppwzzzzzzzzzzzzzwwz~~zwz~zzzzzzz’‹ˆ‹‹‹ˆˆˆ……ˆ‹‹’’’’™™œœ££§££££ ££§§§£  œ£  œ £ª§ªª§ªª­±±´±´´­ª§£§ª§§­££££££££££ £   œœ  œ   £§ªª­­­±´´´­±±­­ª§§£££  œ™œœ™™™™œ™™–’’’ˆˆ…~…~~wwppppttwzz~z~~zzzwtR3=3=3A=ADKNDi____cccfc__XURNKDGGKGN\\pw~’±´±´´´¸´´±±±ª§£œ™’’‹ˆˆ‹‹ˆ‹’’’’‹‹‹ˆˆ………~~zzttpimimimmtmttpmifc__cm_ˆt–™’‹‹…ˆzzzwpptpppttwz~z~zwwwttppptpmif__\URRRNRRKUUXXXNNG::6,))%%%)%"),%))),6=3DDKNUX\\XX\c\c\XXfˆˆ…~~~wwwttwwwwzz~…ˆˆ…………ˆ‹’––’–’–’’–‹ˆ……~wptppmmiiffififcciiittzˆˆˆ‹ˆ‹‹……ˆ………~~wzwwmpwifftttwttppptfc\_cc____cf\fciffffmUmcf_piii_\\XRNKKGGKDGAAA::::::::::===AADDGD=GAAANGKNNKNKKNGGADKD==:0333063))0),,0006=A==A=66336360060600030,)0))),,,,))))))%%%%%""""" + +œœ ____cffffffiimmiimmpmpmmmptptpmmmpppptwwttzzz…………………ˆ’‹–™™–’‹‹…zwzwzttmmmptttwzzzzzzz~~~z~zz~~~~zz~z~zzzwz–‹‹‹‹‹ˆˆ………ˆ’’’–™œœ §§ª§§§£œ£ ££§££œœ    £§ª§ª§ªª­ª­±´´±´­§§§§§££ª£ £  £ £ £ ££      œ£ £££ªª±­­±´±´­±±±­­ª§££££  œ  œœœœœœ™™’–’’’‹ˆ~~~~~~ztpptptwwwwzz~z~wwwfR=0603036=AGGDGU\\\c__c_\\UURKGDGGKKG\ctzˆ‹–´´´¸¸¸»¸¸´´±­§£œœ’–ˆ‹ˆ‹‹‹ˆ‹’‹’‹’‹‹‹‹‹ˆˆˆ……~~wttmpmpmimtpttmpmff___i_it’™ˆˆ……zzzwtmitpmpmptz~z~~wzzwtttptpmmfc_\URRRKNRNUXXXUKKA:30)%)"%")""))")%))3:=GGNRX\\\U\X___\cXf‹’…ˆ…~~~zwtwtwwtwtwwzˆˆˆ……ˆ……ˆˆ’––™–––’’’’‹‹‹‹‹ˆ……~~wppmmfimiicffifffiiipw~ˆˆˆ‹…‹ˆˆ……~……~~z~zzzzzw~wwwwzwwwpttff_c_c__\\_c\c_icccimXpcffpiffc\XUNNKKGGGGGADD=:::::========ADDGDAD==DKGGKRGKAGKDDAA::::63306,30))0,),,0,6:=::=:66066030,3,3,,000,),)))))))))))))))%%%%%%""" + + +œ™œ_\__ffcfffcifiimimpppmpmmppppmimmpmmpptwtww~~……ˆ………ˆ‹‹‹’–’’ˆ~…zwwwztwptptttpwwwzz~~z~~z~z~~~z~zzzzzwz’‹‹‹‹ˆˆ……ˆ‹–––™œ ££ªªª§ª££  œ  £££ œ  £££§ªª­ª­ªª­±´¸±´´±ªª££§£§§££§œ £££££££           ££§§­­­­´±±­±±±­±ª§£§§§ £  £      œœ––’–‹ˆ~~~~~~ztttttpwtwtwwzwzttUA::00,3006:=DADGGNUX_\__\XXRRNKGDGDGGG\wt~…‹–¸¸¸´¸»¸»»¸¸±±­£œ –™’‹ˆ‹‹‹‹‹‹’’’‹’‹ˆˆˆ‹ˆ………z~wzwptmmpiptttpmpiic_ccfcmt––‹ˆ……zwwwtpipmmpmppw~wzzzwwwttwptpmmic\XXRUUNRUNRXXXUK=:600))%"%%%%%"%%%%06AKGRU\__\X\X\__\…Xf‹…ˆ…zz~zwtwtwwtwtwzw……………ˆ…ˆ‹‹’–’––’–’’‹ˆˆˆˆ…~~wtpmmifmficiiffiiipttzzˆ…ˆˆˆ‹ˆˆ…~~~~~z~…~~~~~~zzzzzzzwztttiicf_c__\U\__c\fc__imfmfiimmiff_XUNNKKGGGDGAADA=============ADADDDDAADGDAGNAK=6DAA==::66630,3,00),,0),,,,36:66:6:6)66300,,00),,0,)))))))))))))))))))))%%%%%"""" + + +œ™™\X\ccffccffiiffmiipptpmppppppiiimpfmmppttww~……ˆˆ…………ˆ‹‹ˆ‹’’’ˆ~~twtwtwtwttttptttzz~~z~~~~~……~z~z~zwz‹ˆˆ……ˆ‹‹–™™œ £§§ª§ª§§ £ œœ   £ £ £££§§§ªª­ªª­­±´´¸±¸´­­ª§§£££££££    ££      £    œ£ £ §§­­ª­±­­­±±­±­ª§§ªª§£££££££££££  ™–––’ˆ‹……~~zwttwtttptppmwpppmR:6300)0,066:AAAGGNRU\X\UXXURRNNGGGDGGR_tw‹±´¸»¸»»¸»¸´¸´´±§  ™–’ˆ‹‹‹‹’’’’’’‹‹‹ˆ‹‹ˆ……~z~wttpppiptwttppmfc\__fcmp’–ˆ…wtwzttimmppimptzwwzzwztwpwptppiic_\\RUUNUXUUX\XXG:63,0),%"%""%%"%")%%%06DKKUXX_c_\_X\__\ˆXc‹‹ˆ…~zzwwpwptwtttzzzˆˆ…………ˆˆ––’–––’’‹‹‹…………~~~zttmimmiiffcimiiimitwtzz……ˆˆˆˆ……~~~~~zz…~~~~~z~zz~z~wtwiiff___\\U\\__Xc_\ciiiiimmmiffi_\URNNKGGGDGA=A===============AADDDDAAA6DADK=GA:====:6:63303,0,,0,),,))00033636:366,3333,0),,),),)))))))))))))))))))))))))%%""""" +™–™\UX__cfccffiiiimmmmpwtpppppmmimfipimpppttww~……ˆˆˆˆˆ……ˆˆˆ…‹ˆ’–’ˆ~wzwzwwtzzwtwttwwzw~z~~~~~…………~zzzzzwz‹‹‹‹ˆˆ……‹‹™œ™ £§ªª­ªª§§  œ ™ œ£ ££ §§£§ªª§­­­ª±­­´¸»´»¸±­ªª§£ ££    œœ  £œ œ     œ  œ    §§ªªªª­­­­±±±±­­±ª­ªª§§§§§§§§§§§££œœ–––’’‹‹ˆˆ……~…~zwtwwttpppmmmppm=A30,00),,036:ADADGKKNRURRNURRRNKKKGDKKUcpz…–’´±¸¸´¸»¸»»´»´±´ª££™––‹‹’‹’’’–’’’’‹‹‹ˆ‹‹‹ˆˆ~wwttttpptwwwmmicc\_\cfmp’‹ˆˆ……twzwwpmmmppimmpwwtwwtwwwpttttpmmf__\XXXRUXXX\\UUG=6300,,)%)%)%")%)%),3:GNRXXX_c_\__\ccp‹Xˆ…~zzzttptptttttwz~~……~……ˆ‹’’’–––––’’’‹‹ˆˆ…w~zzppmmmmmmiifimimimmwwwwz~…ˆ……ˆ……~~~z~z~z~zz~~~zzwzz~~~~zwwmiif__\XXXX\__X_\\_fiifiiimifcf__RNKKKGGDDDD==================DAADDA=D:A==A=DA6=::=06:6,0,0,,000,)00,)0333,,03606300)00,,),)%)%)))%%%%%))))))))))))))))))%%%%%%%"""""––\X\_ccfcciiimmimppptttptppmmmfiimmimmppttwt~~……ˆ…ˆˆˆˆ…ˆˆ…………’––‹ˆ…~~z~zzzzw~~zwwwwwzzw~w~~~~~~~………~~z~zzzzw~‹‹’‹‹‹‹ˆ…ˆ–œœ££§§ª­­ªª£    œœœ£ £ ££§§§ªªªª­­­±±±¸¸¸¸¸»±­­§§££  œœ  œœ œ£™  œœœœœœœœœœœœ ££§ªªª­ª­­­­­­­±´­±ªª§§§§ª§§§ªªª§§  ™™™’–‹‹ˆ………ˆ~wwztttmpmmpimmi:0),,,,,),,33:=DADGGGDKNKKKURRRNKKKGGKNUctw’™£´´´¸¸¸»»¾»¸¾¸´´­§§  ™–’’‹’’ˆ–™’–––’‹‹‹‹‹ˆ‹……zztwwtttwztwpif\___U_fmp’‹‹‹‹ˆ…wwwwwtppmpmimipttpttpttttwttttpmic\\\\XUXU\\\\URD=33000)))%"%))")%)%)066KNU\_cccc_cc_ic…‹\’‹‹…z~zwppptpptpttwzzz…~~……ˆ‹’–’’––’–’’ˆˆˆ~~z~wzpmmpmpmmmmiiimmmmpwwwwwz…………~z~wzwzw~zz~~~~~~~~~z~zwz~~~~zzwmiicc_XUUXU\_\\\U\\cffciffiffccccXKNKGGGDDDDAAAA=============AAAAAAA=A===:::=A3:=6:3363,)0,,,,,0))00,,030000,03030,,),,,)%)%"%""%%%%%%%%))))),,,,))))))))))%%%%%"""""–X\\\cccfcfiimpiptttwwtppmmimififmpmpmpmtttwz~……ˆˆˆˆ…‹…ˆˆ……––’ˆˆˆ~~~~zzzzz~zwzzzzzwzw~~~~~~…~~zz~zzwww~ˆ‹‹‹‹ˆˆ’œ  ££§§ª­ªªª££œ   œœ œ œ §§§§ªªª­­­±±´´¸¸»´¸»´­ªª§££œ      œœ™ –œ œœœ™™™œ™œ™™™œ  £§ªª­ªª­ª­­­ª­±­­ªªªªª§ª§ª§§ª§ªª££œœ™–™’‹‹‹…………‹ˆ‹…zzzwtwptmpmimif60,)),,))),006:A=AGDGGGDDGGRRRNNKKKGGKNU_tt~œª´¸¸¸´¸¸¾»¾»¾»´´ªª§££œ™’–’’’’ˆ™––™–’™–’‹’‹‹‹‹ˆ……~ztwzwwtz~wttfc\__\X_cmp‹‹ˆˆ…zzwztwpppmiimmpppmppmpppptttwtpmif_____X\X_\\\UND=3300,),)"%))%0)))),3:ANNX_cffffiff_tcˆˆ\’‹‹ˆˆz~wttpmtppttwttwzz~~~……‹ˆ’’’––––––’‹…ˆ…~~…~~~~wztimpmpmimmmmmmmpmttwwwtz~…z~zzzwwzwwzzzzzz~zzwzzzzz~~~~~zwiii_c_XXXXXX\XXXU\\Rcfcfcc\cc___f\KRGGKKGDDDDDDAA===AAAAA=====ADAA=AAA==:=:::=%::666333),,,,),,,)),00)300030,,,030),))0)%"%%"%%%%%))))))))),,,,,,,)),,,)))))%%%%"""""X\X__cfffffiptmpttwtwwtmmmfiififmpmpmpptptwz~…ˆˆ……ˆ……‹…~~‹’–ˆˆ…~zz~~z~~w~z~zzw~w~~~~z~~~~zzwzwwtzw‹‹‹‹ˆ‹’– £ §£§£§ª§ª§§§   œ œ   œ£ª£££§§ª­­­´´¸¸»¸»¸»¸´­­§ª££œ    œœ™™œœ™œœœœ™–™œœ–™––œ™œ £§ªªªªªª§ªª­­­­­­­ªªªªª§§ª£§§ªªª££  œ™™’ˆ‹‹ˆˆˆ‹‹……~~zwwtpmpmiifA3,,,)))%%%,0,36=:DDDDDADDGDNRRNNKKKKKNRX\pm~… ­¸¸»¸¸¸»»¸¾»»¸¸±§ªª§£ œ–™–––‹‹––™™™–œ–’–‹’‹’‹‹ˆˆzwwwzzw~~zppf___\_X_cmz‹‹‹ˆˆˆ~~~zzwwtpppiimmppmfmmimmmmpppwttpmiccccc\_\_\\\UKG:66030,,,%)0,%3),,,,3=DKU\ffmtmmifczw‹ˆ_‹‹ˆˆ~~tpwtmtppttwwttzz~~…ˆ‹ˆ––’’’–’‹ˆˆ…~…z~~~zwwmptptpmpmppppppptpttwpw~…~~w~zzzztzttwwtwwwzwzwzzzzz~~~zwziffc_\UXUX\\\XX\X\_N_ccc__\c__U\f_NUGGNNGDDGDDAAAAAAAAAAA===A==AAA=AA=AA:A==::0::6,3030),),,))),),0,,,6,0,03,,,,0,%)%),%"""""""%%)))))))),,,,,,,,,000,,,,,)))))"""""X\X\__cfffiitpptttwwwtpipmffiimimpptppppptwz~ˆ………………~~~ˆ™‹ˆˆ……~z~~~~~z~~~zzwzw~z~~zzz~~~~zwztwtttzz‹‹’ˆ–™£§ £££§£ª§ª§§§£ œ œ ££  £§§§§£§ªª±±´¸¸»»»¾¸»´¸±­ªª   œœœœ  œ™œœ™™œœ™œ™–œ™––––™™œ ££§§§ª§§§§§­­ªª­±­ª­ª­ªªªª§ªª§§ª£  œ™œ–’‹‹ˆ‹ˆ‹’’’‹‹zwwwpmpmiif60,)))%%"""),)0006AADDAAAADAKNNNKKKNKKNRXXmpz…£±¸¸¾¸»»»¸»»¸»´´­£§ª£££œ™œ™™’‹‹ˆˆ‹’’–™™œ™œ™––’’‹‹‹……~zwzzzz~~wpmi__\_\Xc_m~ˆˆ‹ˆˆ…~~zzwtttpmiimmmfciffifiiffmtpttpmcffcf\\__\\XUKD=6:333,003,3003,0,03:AGG\_iip……ˆ‹‹‹‹‹‹‹’‹‹……~~wtwtpttpttwwwtwzz……ˆ‹‹‹–’’’–’‹ˆˆ…~z~~zztwppwpptppmppmttppwtwttpw~~~~zz~wzzzt~tpwwttwtwwww~wwzzz~~wtwfccc_\UUX\\XXXX\U__NX_cc\XX_X\U\c\KXKKKNKGAGADDAAAAAAAAAA===AAAAADAAAADA:A==:0366300,0,)))))))),),,0,,600,00,,,,0)%%"%)""""%%%%))))),,,,,,,,,,,00000000,,,,,)))))"""""X\\X_c_fcifitptwtwtwtwmimmiimmpmptttpmppttwz~~~……………ˆ‹……‹’‹‹…ˆ~~~z~~~…z~~zzzwwzwz~zzz~~zzwwwwtttzz‹ˆ–œ££ ££ ££ªªªª§£££œ£  £££££§§§§§§ªª±­±´¸¾»¾»»»¸´±±­ª£  œ  œ  œœœœ™œœ™–™™–™––––’œœœœ £§£§§§§§§§ª­§­ª±±­­­­­ª§­§ª§§§§  œ™–™’‹‹…ˆˆ’–’––……zzwttppmifc0,))%)"%)%,,,3=:AA=AAAADGKKKNKKKKGRRX\fmz´´¸»¾»»»»»¸¾¸¸±±ª££§   ™œ™œ–ˆˆ‹ˆˆ’’–™œœœ ™™™’’–’‹ˆˆˆˆ…~zz~z~~wpmm___c_\fpm‹…ˆˆ…………~~zwwttmiimiic_fcU_cc__cfpmpptpfiffc_\_\X\XUNDA:=3:60:3:0:03363,06ADKGcim…ˆˆˆ‹‹…‹‹ˆ‹…~~zttpptppwtwwttt~z…ˆˆˆ‹’’’’’ˆ……zz~~zwwwpptttwptpppmtttptttppmt~~~~~~~wz~z~zwwztpttpptttwww~wtzwz~zztwtc____XUKUX\X\XU_U\_UX\c_\XX\\_UXXXNUNNNRGDDDDDADADAAAAAAA===DDDDDDDADAA==A::=066603,),,))))))),,)))0,,330,000,,,0))%""%""%%%%)))),,,,,000000000000000000,,,00)))))"\XX\_c_iffimptptwwwwttmmpmiipmppttttpppttptz~~z…………ˆˆ…~……ˆˆ‹ˆˆ……~~~~~…z~~~zzwtwww~zz~zzzwwttttpttzz~’‹‹‹– £§ §§  £§§§ª£  £ £££§§££££§§§§§ª­±ª´´¸»»¾¸»¸»¸´­­ª§££     £™œ œ™ œ™™™––––––––œœœœ££££§££££§§§ª§ªª­±±±±­­ªªª§§§£§£œœ™–’–‹‹ˆˆ……‹––™™’’ˆ~~zwwpmmi63,,%%"%"%")),,:6==:A=ADDGKKGKKNKNGRNX_cmz…±´»¸¾»¾»»»¸»¸­­­§£ £œœœ–™–™’‹……ˆˆ…’–™™œœœ™œ™’’–’’’’’‹ˆ‹‹………~~~zpim_cccc_itm‹ˆ……ˆˆˆ………wzwwpmiiif_\\_XRU\\X\\_cimmpmimfccc__\X\URNGD==3=:3=:=0=363:630ADGURfpmˆ…‹‹‹’’‹ˆ‹‹‹‹‹~~zwpttmpptwtwtttpzzˆˆ‹‹‹‹‹‹’‹ˆ……~~zzzwzttttwwtttppmppppmpptmpitzzz~zz~zzz~~zwwtpppmppptwwtzttzwzzzwttp_c\_\UXKUU\XXXX\XX_XU___\XU\X\UXXURRKNRNKGADADDDADAAAAAAA==ADDAADAAAAAA::=:::3333,3)))),))))))),)),00,033,,,00,,0)%%%" + + + +"""%%%%))),,,,,0000033303333333330003300000)\X\\__cfffmppttpwttttpmimpmmpptptwwtptptwtt~~~ˆˆ…ˆ…………ˆˆ……………~~~~~~z~zwwwwwwzwwzzwzwwtptppttwzz‹’ˆ‹’™ ££ §£ £§§§§§£œ £ £££££§£§£§£§£ªªª­­´´´¸»»¸»¸»´±­ª§ª§§£ ££ £œœœ™™œ™œœ™™–™™–––™™œœœ    £££  £§£§§ª­±´´±±±­­­­ª§§££ ™™’’‹ˆˆˆ…~ˆ‹’–™™’’‹…~wtpiif60,)%%%%"""%)))06:::=AADDGGKGKKNNNNRRX_fmw´´´¸»»¸¾¾¾»¸¸´ª§ªœ œœ™™™’–’–ˆ………‹’’––œœœœœ™–––––™––’‹‹ˆˆ…………~zpimfcfffcfw…~…………ˆˆˆ…ˆ…wzzwpmfffc\XRUURRNUUXUU\c_imififc__c\\XXXRNGGDDAA==A=A:A6:6=66GKRUXUiw~‹ˆ––’ˆ‹‹‹’~~zwmttpmpwttwttwtz~ˆ…‹‹‹‹‹‹‹‹ˆ‹ˆ……~…~zzwz~wwwwwwtpttmmpmmmmmmpipipzzwzw~~~~z~~zwtpmpmppppttwwwttwzzzztppi_c\_XUUUXU\X\X\\\U_\X_\_\UXX\XUUXRNNNNNNKKKGDKRDDAAAAAAAA===DAAAD==A=A==:==666000)0,))))))%%))%,))00,00000,,00000))%"" +"""""%%%)))),,,000003333336663666636666366660\\\_\_cfcimpptttttttppmmpppppmpptwwpttpptww~…………~…ˆ…ˆ……ˆˆ…………………~~~~~~~~~zzzzzwwwzwzwwwtwztpmtpppttwz‹‹‹‹‹‹ˆ‹–œ £ £££  £££§££  £ §££§£££§§£§§§ªª­±­±´±´¸¸´¸¸¸´´­­ªª§ª££££££ ™œœ–™–™™––––™–’™™™œ™œ œ     œ £§££§ª­´´´±±±­­­ª§££  ™–’‹ˆ………~zz~’––‹~~tpmi=G630,))%""""%%%,363:=ADDGGDKKKNNRNRUUX_fmw¸¸´»»¸»»»»»»¸±§£ ™œ™’–’’’‹ˆ~~~…ˆ’™ œœœ œ™––™™œ™–’–’’‹‹ˆˆ…ˆ…wtipifipfmmz~~…………ˆˆˆ…ˆˆ~zztpicccXXUUURRRNRRRRURU\Xifcffc\__\\\\\URNDGGGAKADAA=A==6A6DRNU\fz‹’’’™––‹ˆ‹‹‹’’~~zwpwwtpttttwttwwz‹ˆ‹‹‹‹’‹’’‹ˆˆˆ……~…z~zw~wwwwtzwtttmimmmiiiipimipwwzzzz~~~~~~~zwtpmpppppttttwwptwwwwzpmii_c_\XURX\U_\_X__\X__\__\XXXUXXRRXRNKRNKKGNNKRNUKDKAADDAAA===A=DAD=A==A=A:::633,,)),))%%,)%%))%%,%,3,,,0,,0,,00003))%"" + +"""%%%%)))),,,0003333366666:6::::6:::=6:===D\__\__cfffmmttttwpttppmpptptpptttwttwtpttwz~…………~…ˆ…ˆˆˆ‹…………~~~~~…~~zzzzzzzwwtwztwwwtttwpmmpppmtptwˆ‹‹‹‹‹’™ £§ ££    £££££  £ £££££ §£££§§£§ª­´±´´±±¸´´´¸»´´±­­§£§§§£££  œ™œ––™™™–™’––’’™™™œ™œœœœœ£ œœœ ££ §­±´±´±±±­­­§£  œ™–’‹ˆ………~~~zwwztwwtw‹‹ˆ~~~zpmif::3300)%)"""""%)033:=AAGGDGKKKKNUXUXX__fm´¸¸±¸»¸»»»¸¸¸´­£œœ’‹’ˆˆ…~zwz~…‹‹‹™œ œœ œ™™™™œ œ™–™–’–’‹‹‹ˆˆ……zwtppimttttz~zz~………‹ˆˆˆzzpmf__XXXRRRRNNNKKRNURRXX_\_cc_\___\\\\XRUURXKUNDGAAA=AA=ADKUUXmˆ’’’’’’–™––‹‹‹–’…~~zttwtpwtwtwtwwwz……‹‹‹‹‹‹’‹‹‹ˆˆˆˆˆ……~~~~z~wzwwpwtpppmfiiiifcfpfpmpwwwwzz~~~~z~wttmimpppmpttptwpttwtwwmiim\c__XUR\_U__\\c__\\_\__\\X\XUURRUNNGNKGKKNRNURXNKNDDGAAAA===A=DDDAAAA=A=:66300))%)),))%,)))))%))),0)),,,,,,000003))%%" + + +""%%%)))),,,,00033366666:::::===:===A==AAAG\\_\___ifimpwwwtwtttppmmtppppptptwtwtwtwtwz~…………………ˆ~………ˆˆ…~~~~~~~~~~~zwwzwwwwttwwwwwtttttpiimppipppt…‹ˆˆ‹’’–™  § ££  œ™£££££££  £££££ £§§£ªª§ª­±´±´´´´´´´´¸¸´±­­ªª§ª£££  £œ ™™––––™––’––––™œœœœ™ œ™œ œœœœ  §££­­±­±±±­±ªª£ ™–‹–’……~zzzzwttpmpppptt…z~zwfffA:=3300,%,"""%,)306=AAGGGGGKNNR\\X__fft­´´´±´¸¸»¸¸¸´ª±ª œ™’‹‹ˆˆ‹‹ˆ……zttpp~~ˆ‹‹–™ œœœœœœ™™ œ œ™œ™–––’‹ˆˆ…~zwttwpwwwwzz~w~~~~ˆˆˆˆ……zwmic\UXUUNNURNNNKKRNRRUXX\\XX_\\___\\\\XUXXU\\XRKKGGGDDDAGU_XXwp‹–’–’’’’’™’–ˆ’’–’’…ˆ~~~wwzwtwwwttptzw~ˆˆ‹‹‹’’‹‹ˆˆˆ‹‹…~~zzztwptpppmicffffcfcmcpppwttwwzzz~zzztpppimpppmmptptwtttwpwtmifi\___\XN__X__\_c___X_X\\X\XXXURRRGNNKKGDGGNNRRUXRNRGGKDDAA==DD=DDDD=AA=D=:6600,)%"%%)%)))))),)%,,,,,%%),,,,,,00003))%%" +"%%%)),,,,00003336666:::::=====AAADAADDDK\X_X_\_icimmttwtwttppmmipmpptptttttttwwwwwzz~……………………‹‹~~~zzzz~~~z~~wwtwtttttpttttttpttppifimmimmmmˆˆ…ˆˆ’’–™œ££§  £  œœ  ££§££   £ ££££§§§ªªª§ª±´´´¸´´¸±¸´´´´±­­­ª§§§£££££™œ™™––––––’’––’–™œœ™œœœœœ™œ œœœ ££££ª±­ª±­­±­§ªœœ‹’‹‹‹…~~~zwwwwpiiifffmmppwwzmiccAD=:6300)))""),336:=DGGGKKNRRU_c\cfip­±±±´´±¸¸¸´´´­§£ œœ–ˆ…ˆˆ‹…ˆ…wwimmmtz…ˆˆ’’œœ™™œœœ™œ ™ œœ™™–™–’’’’‹‹…~~zwwztzzzz~wztzwzw~~………ˆ~wtifcUUUURKRRRNNNNKRRRUUXUXXXXXX\___\\\_\X\\X__\_NXK_KURNfK\cz~…–’–’’’–’™––‹’‹’–––‹ˆ‹~zzzwwzwztwtpzz…‹‹‹’‹‹–’’‹…ˆˆˆˆˆzzzptppppmifccfffffficmmmtttzw~z~z~zzwptmpiipmpmpptptwtwtwtwpmiciX____\\__\_cX\___\X\\XXXXUXUXRRRKKNGDDDDDKKNRUXURRKKNGGDDD=GG=GGDD=AA=A=:6600,)%"""%%),%%,,,%)0),)0%))),,,,,00003))%%%" + +""%%%)),,,00033336666::::====AAAAADDDDGGN\X_\__cfcimmpttttttmpiifmppptppptwttttwwwwwwz~~~~~~……ˆˆ~~~zzwtww~z~~zwwtwttpppmtpppttptppmfcfiiffUfiˆ………’’–™™ £ ££ £   œ  §£££ œ   £££§§§§ªª­­ª­´´´¸´¸´¸­´±±±´­­­ªªª§£ £ £ œœ™–’–™–––––––––™œœœœœœœœ™ œœœœœ£££§ª­­§­ªª­ª£§™’‹‹ˆ‹ˆˆz~zwtttpff_fccciimmfmmiiDADDA:6300,)%"%%,636:ADGGKKKRUXXimfitw§±´±±´´±¸¸´±±± £ ™™™’‹…………ˆ…~~ppfiiipwt……™™™–™™™–œœ–œ™™™™™™–’’’––’‹zz~~z~~z~zwwwwwwwzz…~z~wpfccRUURRNURRRRNNNNRUUUURUXXXXU\\\\\\_\_X\_\ccfc___cc\\XiN_f~…ˆ‹’’–’’–’–––™’‹ˆˆ–––‹ˆ‹z~~zzzzzztzwtzz‹‹‹‹’’’’’‹‹ˆˆˆ……ˆ…………~zwppmpmmifc_cfccfffifmpittwwwz~w~z~wwtttppimppmmpttttwtwwwttpmici\___cX_\_\\_U\__\XX\XUX\UR\U\RNRKGNDDGDAAKDKNUXURNNNNKKDAGDKKGGGAD:A=AD==6300,)%"""%%%))%,,))%,,)%,%)%),)),,00003,)%%%"" + +""%))),,00003336666::::===AAAAADDDDDGKN\\\\\__ffmmmmttpptpimmifmpmmpptpttptttwwwtttw~zz~zz~zz……~~~~…~~zzzwttttzz~~~~zwwwtppmppptpmppppppmmcccfcX\RUXˆ…………‹’–™™™œ œ££££ œ  ££§£§£œœœœ §£§ªª§ªª§ª­­±¸´´»¸´´´±±­­­±­ªª­ªª§£     ™™™–––™––™––––––™™™œ œ œ™™œ™™™œœ£§£§­ªª§ª§§ª ™™–‹ˆ‹ˆˆ……~~zzwwpppfc_____cfficfcfffGDAA=:6300,)%""%),33:==DDDKNNUU\fmpptwˆª±¸´±´´´´´±­±ª œ™––……~wwwpifffcmtpzz‹––™’––––™™’™––––™™––––––’’’……~~~zzzwtwtwpwwtzz~zzzzwpc_cXXXURNRUNRURRNRNUUUURUXXUXXXX\\___\_\\___ficcccff__\mfc~……ˆ‹––’’–––––™–ˆ‹‹‹™–™‹‹……~~~~~w~zw~wwzz~ˆˆ‹‹‹‹’’’’‹‹ˆˆˆ…ˆ‹…ˆ………~~zwpfimiicc_\_cc_cccifmmitwzww~z~zzwztwppmimmmmmpttttwwtwttttifcfX_\__\\__XX\UX\\XUX\XU\\XUXUXURRNDNDGKGADKGDNRXXURRRNNNGDKGNNKGGDAAAAADA:6300,)%%""%%%),),,%%%))%%))%%)))),,,0003))%%%"""%))),,000333666:::=====AAAADDDGGGGKNX\\XX\_ccimmpptppptipiifipmppptmtpttttwwttpttzwzzzzzwzz~~wz~zzzwtppptzz~z~~~~wwtppmmmmppmipmmmmpiicc_c\UNNNUˆ……ˆ‹’–™™–™œ ££££   £§§ª£§£™ œœ £§§ªªªªªª§±±´´¸´¸¸¸±´±­­±­­­­ªª§§££     ™–™–––™–™™––––––™™™™œœ œ™™™––™™œ££§ªªª§§£££§™–’’‹…ˆ……~~~zwwtimfcc\___\_ccfccfcffGDD==::63,,)%"""%%)0366==ADGKKRU__mpttw’ª­­´´´±´±´±±ª­  œ™–’‹~~z~~wwttmcc_icimmzw‹‹‹’–’…’––’’’––––––™–––’–’ˆ……………~zzwwptptptptptwtwwwtmf\c\\XURNRUURURRNUNXXXURXUXXUXXUX\\_\\\_\\__cifffccccccmmp~……ˆ’’–’–––™–––’ˆ‹™™™’ˆ…~~~z~~zzzwzz~…‹ˆ‹‹‹’’‹‹‹‹ˆˆˆ…ˆˆ………~wzmiiifffcc\__c\_ccifpmmwwwzz~~wzwwwztwpppmmmimmptttwzwtwtpppiiffX___G\\\_U\URX\XUXU\XUXXUXXXXUUUNGKDGKDGGKKDNNUXUURUNNRKGKKNKNKKG=D==AAA:6300,)%%""%%%%),0)""""%""%%%%)))),,,,003,,)%%""" +"%))),,00033666:::====AAAAADDDGGGGKK\X\\\_\c_fiippptpppmpimffpmppptptttttttwppmtpwtwtwwwtw~~~wzzwwz~z~zzwtpttwz~~~~~zztppmmiiimmmimiimimff___XRKGKNR…………ˆ‹’’™™™™™œ §£§§££££§§ª§£ œœ™ ££§ªªªª­­ªª±­±¸´¸¸´´±±­ª­­­ªªªªª£§§£œ £ œœ™™™––™™™™–™––™™™™™œ œœœ™œ™™–™œœ£££ªªª§£  ™™™ˆ……~z~zttpmmfc_X\__\\_____cccf_GD=:=:63),)"""%%,0366=ADGGKNU\ccpptw ­±­´´´­±±±­­ªªœœœ–’’…~~zzzzzptmpic_cfcfipwwˆˆ‹’‹‹‹…ˆ‹‹‹’’’–––™––’–––ˆˆˆˆˆ……zwwtwpppttppppppptttpmf__c\\XRURXXUUURRUNXXXUUXX\XUXXUX\\\\\_\X\\\_fffccffccfmpt~……ˆ‹’’–‹’––’––––’’’‹’™™™–‹ˆ……~~~~~~zzzzzz~~…ˆ…‹‹’‹‹…‹‹‹‹ˆˆˆ…ˆ……~~~~~zzpmiififc_\\____ffiimppwzwzw~zwwwwwztwptpmmpmmmpttwzzzwwpppmmiif\___G_\\_R\XU\_UUUU\XXUXRUXXXRURRKKGGKGKKGGNNRUUURRURRNKDKNNKNKNKDGA=D=A:6300,)%%""%%%%%,,%""%"%"%%%%%)))),,,,0030,)))%"""%%)),,,00333666:::==AAADDDDDGGGGGKKX\\\X\\c_ffipppppmpmmiiffmmmppptpttttwttpmppmpptttttttzzzwwwtz~~zz~zwppptzz~~~zwwppipifmmmmfifficicc\_\UNGDGKKˆˆˆˆ‹’––™™–™œ££§§§§§§§§§§££œ  ™œ §§§ªªª­ª­ª±­±´¸¸¸±±­­ª­­ªªªªª§§££££  £œ ™œ™™™–™™œ™–™™™™™œœœœœœ œ™™™™–œ  £§£§ªªª œ––––‹ˆˆˆ…………~zzwwtppmc_\\_\_\\___\\___c\KDD:A::3,,%""""%),36:6AADGGKNU_ffttwz…£­±±¸¸´±­­­ªª§ ™œ™–‹…~zzzwwmpiiffcff_cfpwzˆˆˆ‹ˆˆ‹ˆ…‹…ˆˆ‹ˆ‹‹’’’–––’–’’‹‹‹‹ˆ……wttpttptppmtmmmmmptppmiccf_\\RXRX\XUXUUXU\X\XXXX\UXUXUU\\X\X_\X\X\_cccc_fcc_iitw~…ˆ‹‹’’–’’’––’–’––œ™–‹ˆˆˆ……~z~~~zzw~~w~……ˆ‹‹‹‹‹‹…ˆ‹ˆˆ…ˆˆ~…zzwtzz~zwtpiffif__\\___cffmmmtpwzzzwzwttttwwtwtwpmmpppmttwwzzzwttpmpmiii_c_NG\\\_R_\X\\RXUUXX\XXURXUUNRRUNNKDNGNNKRRNRRURUUURRKNKNNNNNKNKGKDAD:=66330,)%%""%%)%)))"%%"""%%%%%)))),,,,003,,,))%%"""""%%))),,,0033366:::===AAADDDGGGKKKNK\\_XX\\cccffmmpmpmmmmffiipmppmppttpttttwpmmppppttppttpttttttwz~~wwttptwzz~~zztwppipffimmmiffcfcc__X\XRKDDDKK…ˆˆ‹‹‹’’–™™™™ §§ªªªªª§ªª§§§£ œœ™œ £§ª§§§ª§ª§­­±´¸´´´­±­ª­­­ª­§ªªª§£ £œ£   œ œœœ™œœœ™–œ™œ™œœ™œœœœ œœ™œœ™œ ££§£ªª§§œ–’–’’ˆˆˆ…………~wzwwpmmi_\\X___\\\_\_X\\X_XNDG:A660),""%%%),,36::AADDGNNUcfitttwˆ§­­±´´±±ªª­§§££–œ–’ˆ‹ˆ~~wzwwwpfiicffcccffmtw……ˆ‹‹…ˆ……ˆ……‹‹…ˆˆ‹‹’’’’–’–’‹ˆ‹ˆ~tpppppttptmpmmiiiipmmimific_\\\XX\\X\UX\\_\\\\XXXXUUURRXXX\X__X\\X__c__cccfcimtz~…‹‹‹’–’–’’–’’™œ–’ˆˆˆzzz~~~zw~~z~~~……‹ˆ‹‹ˆˆˆ‹ˆ…ˆ…………~zz~zwwtwwzwtttmiiifccX___\_iipmpwtwwwwtwtptptzwtwwttpppppptwwzz~zzwttmtpficc\NK\\D_R_\XXXRXURU\XXXUKURRKRRXNRKANKNRUUURRNXRUXXRUNNNRNNNNKNNKGAAA::33300,)%%""%%)%,,)%%"""%%%%)))),,0,003,,,)))%%""""%%%)))),,,00033366:::==AAADDDGGGKKKNNX\\\\__f_fccimmppimmiiffmpmmpmmpttptttttpppptmptttmppmmmmpptwzzzwwtwwzz~~~ztwtmmmfiimiiicc\c__\\UXUKGDADKKˆ‹ˆ‹’–™™™™ £ª­ª­­­§§ª§§£  œ™™™  §§§§§ª£§£ªª­´¸¸´´ª±­­ª­­ªª§ª§§§£œ£œ œ   £   ™ œœ™™œ™™™™™™™œœœ  œœœœœ  §£§§§§££™–’…ˆˆ……~zzzwtpmmic\XX\\_\\\_\\XXXXXUKDK==330),""""%),,036::DDDDKRRXcimpppt…ª±±­´±±­­§ªªª£ ™™–’ˆˆˆ~~~wzwwtmfmffffc__fimttˆˆˆˆ………ˆˆˆ‹ˆ……ˆ‹ˆ‹’’’’–’‹‹‹…~~zpmmmmpttttppmmffimmppimmiffc\__\_\_\_X\_____\_\\XXXUUUUUUUX\\\XXXU\____cccffmmw~ˆ‹ˆ‹‹‹‹‹‹’’’–’’––’–œ ’‹ˆˆ…~wzzz~~zz~~~~z~…ˆ……ˆ…‹…‹…~ˆ…~zzw~wwwttppwwwtptmmimifc\c\cX_imtptwwwzwttttptptwztwtttppttptwzw~~~zzzwwttpimfcXNN_\D_N\_X\UUXXNUXXUXRGRRRKNRXRRGDUNRUXXURURUUUU\UURRRNKRNNNRKKDD==66,0000,))%""%%%))),%""""%%%%)))),,,,003,,))))%%%"""""%%%))),,,,000033366:::===AADDDGGGKKKNN\\X\\_cfccccmipmmimiiiffmppppmmpttttttppppppppppppppmiiimimptz~~~~zzzwzwz~~~~~ttpmmpiimmmif__X\UXXXRNNKGAADGK‹‹ˆ‹’’’–™™œ §­­­±ªªª§§££  œœ™™œ  ££§££§§££§ª­´´´´´­±ª­ªª­­ªª§§§§  £    £££££ œ œœœœœœœ™œ™œ™™œœ œœ œœœ  §£ª§£££œ–’‹‹……ˆ………ˆzwzwpppifc_X\\\__\\\\\\UXXXNGGG==000%)%%""%),,06:6:DDGGKUUU_iimpmp…´±±±±­­ª §§§£œ––’………~~zzzwzpififffccccfimpp~………ˆˆ……ˆˆ…ˆˆ………ˆˆˆ‹‹’’’–’‹ˆwzicfiiipptttptmiifimmmmmppmffc_c__c___\___c_c_\__\\XUURURRRRX_\\X\XUX\_\__fccimtz…ˆˆˆ‹ˆ‹ˆ‹‹’™’––––’™œ‹ˆ…………~~~zww~z~~~~~~z…………ˆˆˆ…ˆz……~~zttwmttttttmttwwtptppiiifc___c\cippppttwwwttwtpptttwtttttttttttzzz~~zzwwwtmpcfXNX_\\\KX_\\UXUUKUUXUXNKRNNGNUUUNDAXUUX\\XUURURRR\XURUUNKRRRNNKKDD==3),,,,,))%""%%),,%,"""""""%%%%)))),,,,003,,))))%%%%"""""""%%))),,,,0000333666:::===AADDDGGGKKKNN\\\X\c_icccfmmmiiimimiiiptpppmmppttptttppptptppmmpmmiffiifmptwzz~~~~~zzz~z~~~~~zppppmpmfmimic\UXURRRRNKGKKADDGK‹ˆ‹’’’–’–™œ£ª±±±±­­­ªª££  œ™œ™œ   ££  ££ £§ªª´´±´´­­­­­ªªª§§££££ £ œ   £££§§£ £ œ œœœœ™™œœ–œœœ ™œ  œ   §§§§£  ™’ˆˆˆˆ……………ˆwtwtpppii__X_\___\X\XXXUUUXNGGD=:00,)%%%""")),)3::6=DDKGNUXX_fmmppmwwˆ±±±­­­§ §££ ™–‹……zwztwpifficfccc_cfmmpw…ˆˆˆˆ…ˆ……………ˆˆ‹…ˆ‹‹’’–’’’–‹ˆ…~wwfccfffmmpppmpmmiiippimmppmifccf_cfccc_cccfcfc__\_\\XRRRRNNNX\__XXXUX\\_\_c__fmw~………ˆ…ˆ‹‹ˆ‹ˆˆ‹‹ˆ’™–™™–––™™‹…ˆ……~zzwzwz~~~~~~~~………ˆˆ………………~…zzwtftmpmppppmpwttwttttmmmifcccc_fmptptttwwttpwtppppttttttttwwwtwz~~z~zzzwwptcf\_\_\X\KU\\\R\UXKXUUXUKNRNKKKXURKAA\XX\\\XUURRNNRXUUUUURNRUUNKKGDA=:)))))))%%"%%%0)",%"%"%""%%%%)))),,,,00300,)))%%%%""""""%""""%%%))),,00033336666:::===AAGDDDGGKKKNN_X\\Xccfcffimmmmifmimiiipppppimpptpmppppppppppmmmmmififfffimtwwwzz~~~~z~~~~z~z~zmmmmmpmimiif_XUXUNNRNKGGGGADDGG‹‹’’–––™£ª±­±±­ª­ªª£££ œœœœœ œ    œ £œ £ªª±±±±±ª­±ªªª§ªª§§£ ££ œ  £ £ §ª§££ £  œœœ œœ œ™œœœœ     £££§§§£§œœ™‹…ˆˆ…ˆˆ…ˆzttttpmmic____c\\\\\UUUUURUKDG=A:00,,%%""""%")),,3::6AADGKRXX\_ciippmttt±­±ªªª£ £  œ–’‹‹ˆ…~zwzwwtmiiificcccfcimppz…ˆ…ˆ………………ˆˆˆ…‹ˆ‹ˆˆ’––’–––ˆˆwttc_\_cciimmpmpmmmimpmimmpmiiffcfcfffcccfcffffcc___\_\UURRNKNX\\_\\XXU\\__cc__fpzˆ…………ˆˆ‹~…ˆ……ˆˆ…’––™™™™™–’ˆ……~~zwwtwwzz~~~~~~……ˆ‹‹ˆ………~~zztpfmmmmmmmmmmwttzwtwpmpmmicccccfipptttpwwtptttppmmtwttttttwzwwzz~~~~~z~~~~zwttff__\c\X\KRX_\N\UXKXRUXRGNRKKNNXRNGDA_\\\_\UUURNKGNURRRRURRUUUKNGDDA:6%%)))%%)%%))3)%,)%)""%""%%%%)))),,,,003000,,)%%%%""""""""%"%%%%%))),,,000336666:::====AAKDDDGGKKKNN_X_\\cccfffimimmmimiiimimptppmmmppmmmppptpppmpimmmmiffffffmmptwpwtzz~zz~z~z~zzwmmiiipiiiiic\XRXRKKNKKDGDDDAADD‹‹‹‹’––™™£ª±±±­ªªªªª£££   œ   œœ  œ   œ §ª­±±±±­ª­­§ªª£§§§£    œ œ  œ ££ª§£§££   œ œœœ œœœœ  ££  ££§£§§§§£œ™–ˆˆˆ………ˆˆ~……zwttwpppmfcc_c___X\\URRRURRKDGAD:30)0%%""""")),06:=:ADGKNNXU\__fimmimfmm±­§§§ œ œ™–…………zzzzwwwpmmificfffcfippw~………ˆ…ˆˆ…ˆ…ˆˆˆˆˆ‹‹ˆˆ‹–––™–§™ˆ…~zcc_\U\_XXfifmimpmmmmmmmmmmiffffcfffffffffffcffcfccc_\\XUURRKRX\_\\\\XU\\\___\cftz…ˆ………ˆ~……ˆ…’’–œœœœœ–~zzttptwzzzzz~…ˆ‹‹‹ˆ…~~zwpmfimimimimiptppwwtztppmmiicfccfipppttmtwwpttpmppmptttwtttwzzzzz~~z~~~~~~~zwtpfc\____\_NNUc_N_UXG\RX\RKKNKNNNUUNDADc__X\XRRRNKGDKKKNNNRRUUXRNKDDA=6%%%%%)%),)0%),,%)""%""%%%%)))),,,,003000,,,)%%%"""""%")%%),,%))),,,,00333666:::===AAANDGGGGKKKNN\X\\_c_fccfiifimmmmmfiimptpppmmmppmmmtttppppmpiiimifcccffcmimptmmptwzwzzw~~~wwtmmfiimiiiii_\XRUNKNNGGDGDADA=ADˆˆˆˆ‹’’’–– §­±­­­ªª§ª£££  œ    œœ œ™œ    §ª­±±´±±­­ª£§§§£§£ œœ  œ œœœœœ££§§§££§  œœœ™œœ     ££§§££§ § ££§£ ™™–’‹ˆˆˆ…………~zwttwtpppiff_c___XXXURRRRNKGDD=D=63)0)"%"""%%)006==:AGKNRRXX_ccffmifccfct±£££œ™œ™–‹‹z~~~~~zwwwztwtmmmiifffffimptz~………………ˆˆˆˆˆ‹‹ˆˆ‹‹‹‹‹–™™œ™ªœ‹zzcc_XXUXUUX_ccfimmimmmmiiiifffffcfcfciificfcffcfccccc__\XUURRRX__\_\\XX\\X\c__fctw…~~~~z~…w’–™œœœ ™’‹w~~~zwwtppwwzwwwz……………‹‹‹‹……~~~wtmicmmimimfmimtmmwwwzwttppmmfffccipmpptitttppppmpmmpptptwtwwzzzzz~~z~~~~~~tpmfc\_\_\\cKNU__N_U\G\RUXRKKRNRRKRURAAD_\\UXUUNNKDD:DAGKKKNRRUURNKGA==""%%%%),,)0),,0%)%%)""%%%%)))),,,,0033330,,,)%%"""")%,)0,00),)),,,,00033366::::==AAANDDGGGKKKNR\X\\___f_ccffcimimmiiimpptmtppmppmmmppttttppmpmmiifccccfffiimppmimptwtwzz~zttpiififiifffi_\XRUNGKKGDADD=A===Aˆˆˆ…ˆ‹‹––œ£­­­­­§§ªª££££      ™œœ™–œ  œœ§§ª±±±±´­­§§ª§ª§§£ ™™œœ™œ™™œœ   £§£§§£œ œ™™™œœ£££££§§ª§§§ª£§£§£§ œ™™’’‹ˆ…ˆˆ…~~~zwwwwtttpmifc_c_\\XURRNRRKKGDAAD:60,0%%%%%%))006::=AGKNRU\\\ffcfif_ccc\f±t£œ–––‹‹…~~wz~~~zzwwttwwwppppiiiffifmmpt~~……………………‹‹‹ˆ‹‹’‹’™™œœœÅª~zwf_\UURURUX\\__fiiiimpmmfffffiffffff_iiifffccccffccifccc\XURUX\c___\\XX\XX\___cftz~~~~~z~~…~zzz––™œ™ œ–ˆzz~~tzztwttmwtwtzwwˆˆˆˆ‹‹…ˆˆ…z~tmifciiimimimiipifzzz~zwtppppiifffipmpppittpmpptppmpmptptttwwzzzzz~zzz~~~~~pmmf_\_X\X\_KNU\_R_X_K\UXXUNNNRRRGNRRAAA\XXRURRKNGGA:AADGDDKNNRRRRNGD%"""""%,))3%,0,),%%)%"%%%%)))),,,,00333330,,))%%"""%")03636)6,),,,,000333666:::===AARDGGKKKNKNN\\\\\__fX__cf_fiimmimimmppmtptppmpppptpptpptmppiiif_cccfffiimmmmimpttttwz~~~wppiifcfc\fcfcf_\URRKKGGDAAADA=A===…………ˆˆ‹‹‹’–œ ªªª­ªªª§ª§§ £ £ œ££œ  œ™œœ   §ªª­±´±´­±ªª­§§§££œœ™™™œ™™–™œœœœ ££§§£ œ™™œ™œ £§£§§ªªª§§ªª§£§£ £œ’™–ˆ…ˆ……~~~~~zzwwtwpmifcc__\\XURNNNNKKKDADD=60,0)%%%""%%),,36:=ADGNNRU\__cccfff__c_\cfp œ’……~wzww~zzwtwttttwttptpmiiiiiiimpwzzˆˆ…ˆˆ………‹‹‹’’‹’™–œÌœÉŒ~wtc\\URRRNRUUR\\cfimmmpimcccfffififfc\ififccfcffffcimmmff_\c_\\\c_c_\\XX_\X\__\_iw~…~~~~z~…zzz~~’™™œ–œœ’…w~zztwztwttmtmtwzww~‹‹ˆ‹ˆˆˆˆ…~~zztmmfffmimfmmiifpii~~~~~wwpttmmmiiimpmmptfttppmtppppmmptttwttwzz~z~~z~~~~~~~~tmmc\\\XR\_\KNRXcc_X\KXX\UXRRRRRNKKNNDADXKKKRNNKNDD::A=DADAGKKNNRRKKD"""""%)%%0%,00)))),%%))))))),,,,,0033333300,,))%"""",36A==0:3,),,,000333666::::===DRDDGGGKNNNNXXXXX\\cX\\_cccffimmmmmiptptppppptppttpttpmtptpiifcccccffiiimmmiimpptttww~~~ztmmiffcc\\c_c_c_XRNNGKGGD=AAA==A===………………‹ˆ‹–œ §§ªª§§ªª§§§££  £ ££ £ œ™™œ ££§§­±±¸´±­±­ªªªª§§£œ™œœ™™––™™œ™   £ ££  œœœ™™  §§§§§ª­ªªªª­§£££œ ™–™’’‹…ˆ…………~~~~……~zzwpiic_c__\\XXRRKKNNGGDADDA6000)%)%"""%%,,036==AGKNRUX\_cffficf_c_\\_cmp™‹~zwwttzwwwwttpttwpwtwtpimmmifiptw~~…ˆ‹ˆˆ‹ˆˆˆ‹‹’’’™’œÌÌÌɏzif_XXRNRRNNRUR\\\_fmmimficfcfcffficfc_ffifcccfiiifmmpptpmmcic__cc_c_\_X\_\\X__c_mz~…~~z~zz~~zzzz~’™™œ™ œ‹~~tzzwwwwttttptmttwwz~…‹‹‹‹‹ˆˆˆˆ…~~~ztppfifmmiiiificpif~zztttpmpmimimmimtftttpmppppmppttttwwwww~z~~~~z~~z~tmm__\\XRX\XKNR\___UXGX\\UXNNRRRNNNNAAAGRNKKNNKGKAD6:=:AADDDGGKKNNGGD"""%%%%0%),3,))),)),,,),),,,,,,006666333300))%%""06:DAA:=:0,,,,000333666::::===ANDDDDKKKKNNXXUUUXXUUX\___cfimmmmmmmttptppttttptpwtttpppmttffc_c_ccciifiimmfiimmpppwt~zzwtiiffc__X\\XU\\\XNNKGKDGDA=AA:==A=A……………ˆ‹ˆ‹’™œ£§§ªª§§ª§§§£ œ  œ    £ œœ  £§§§­±´´±±­±±­ª§§£§£œ–œ™–––’™™™™œœœ œ££    œ™œ £§§§§ªª­­ªªªª££  ™™™––’’ˆ………~z…ˆ………~~ttmfc____\\\URRNNKKGKGDDDA:330,)))%%"""%,,03:==DGNRUXX\_ccfffcc__\XX\_im–‹…~zzwtpppwttttptpptttwwzwtppppimptwz~……‹‹‹‹‹‹‹’‹’––™ÉÌÌ̋wc\\RNNKNRRRNUU\\X_ciificf_ccc_ccfffcc_ccfc_ccfmmimpptwwwppmpmifffcc_\\\X\\\Xc_fmtw…~zzzwz~zw~z~z…~–™–œ– œ‹zwpwzttwtptppptmttww~~ˆˆ‹ˆ‹………………~~ztppimfimmifffifpifz~~~~wwtwtpmpimfmmfitftptpppppppttttwptwzww~z~z…z~zztmm\\XXURUXXUKRX\U\UUGXXXRXKRNURRKKNAAAKRNGNKKDDG=A36::==AADDAGA=KDDA""""%%%%3)%030,,),)),,0,0,00,000006:66663330,,))%""3:=GDD=A=3,,03303033366:::====ANADDDGGKKNNXUUURUNURUX\\ccfimmmmmmmpwtttttttwttmtttttttmppcf__c_cffifcfiimfiiimmmpww~zztpiifc_\\U\XUNUURUNKGGGGDAD=A===:=A=……………‹ˆ‹–™œ§ª£§ª§£§£££    œœ    £ œ £ £§ª§±´´¸´´±±­ª­§§§£  ™™™’–’–™™œœ™ ™œ  ££œ££œœ £§ªª§ªª§ªª§§­§  œœœ™™’–’………~~~z~~…………ˆ‹ˆˆˆ…wwmf_c\\_\\_XUURRKNRNKDGG=:6330),,)%"%"%%%,0336=ADKNUUX\__f_ccc__\_\\\__imˆ…zwwptmppppppppppppttwzzzttwtppptwzwz…ˆˆ‹‹‹‹’’’’‹’‹’––™§\Ì̈p_XDNKKGKNRRRUXXXU\_ff_c_c\___\_cccc_ccccf__ccfmppppw~~~wzttpmiiifcc\\\X\\__cfipww…~~zzzt~~zz~zz…~™™™™™ ™ˆ~tttwtttpptppptpttww~ˆ‹’‹ˆ…ˆ………………zwppmmiiiifffcfcmffwzzz~ztwwppmmiiiiicftittppppptppttwtwtww~wz~zz…………z~~wwtii\XUNURU\UXRRXXURRNGUXXRXGNNRNNNKKD==GNKKKD:GDDA=63666:AAA:AD==A===""%%),)6%0,0,)0)0,,00000033033333G=::::663300,,%%""%0ADKGDADA0),06306033366::===A=ANDDDDDGGGKKUURRNRRRRRU\X_cfiimppmmmtttttptttwppptttttppmmm_c_\__cffifffiiiiiifmmppwz~wwtpmfcc_\\R\URNNKKRNKDGDGDDDAA=====AA…………………‹‹’™ §ª§£§£§£££ £œ œœœœœ     œ£ ££ªª±±´´´±±±­­ªª£§§£ ™œœ––’™™œ œœ œœœœ££  £  ££§ª­ªªª§ªª§ª­§£œ™™œ™–’‹ˆ…z~~zzz~……ˆˆ‹‹‹‹ˆ…zwpf\c\\\\\\\XUURNNUNNGKDA::6630,0))%)%%))00336=ADKNUX\\ccfc_____X_X__c_fmz~wwtptmpppppmpppmppppww~wwwzttttwwzw~ˆ‹‹‹‹‹’’–’’‹’–’™£ÅÉɈ\UGDKAGAGKNRRUUUXRXUX\X_\_X\\XU\_c__cc___fcccfiwtwzz……z~wwtpmmii_c___X__\ccimtzw…~~zzwzz~~w~…~‹™œœ™œœ™‹itwttwptptmmtpttttwz…ˆ‹’‹‹ˆ……ˆ……ˆ………~zztpmiifmifficc_i\fpwww~~wptwmmiiffififitmptppmpptpttwwwwwzz~z~~~~~……………~zz~wwtmiX\RNRNU\UXUUXXUNUNGUU6RUGKKRNNNNNGAADKGGGA6DD=A::36666A==:=A::=:3%"""%,0,6%6,,))0,,0030303333366666KDGA=:::66330,))%"%):RGKKGDDD,)0,:60303333:==A=AA==NDDDDDGGGKKURNNRNURNRRXX__ffmpmmmmmtptttptpptmmpppttttmifi__\\__cciiiffiffifiipmptww~zwppmf_c_\\UXNNKKKKNKKDDDGGDDAAAA==AAA………ˆ……ˆˆ‹‹’œ £§£ £ ££££  ™œ™œ™™œœ  œ œ£  £§ª­­´±´´±­­­ª§§§§§ œœ™™–––™œœ œ œœ™™  £ £ £§£§ªªªªª§§§§ª­£ –™–™™’‹ˆ……~~~z~~z~…ˆ…‹ˆ‹‹ˆ……~zwpfX_X\X\\\_\XXURRURNKKKD=:6:6330,,),))))00036=DDKRU\___cc_\_\_\X\\_\_cfmmwztttpppppmmmmmppmpmmttzzzzz~wwwwzwwz~…‹‹‹‹‹’’’’‹‹‹‹’–’™ Âű_RNDADD==DGKNRRRRURURUXUNNRKKXUNX\___c__c_fff_mmztz……ˆˆ……~~zzwppmiicc__c__c_ffmpt~w…~~z~wzz~~t~…w’™œ™œœ™™…ittpptptptmmtppptww~…ˆ‹‹ˆ……ˆˆ…ˆ……z~zzwpmimfiiiff___f\icttwzzwmttiiicicicifmtptpmmippppwtzzwzz~~~~~~~……~wzzzwpiiX\RNNRUXUXXUUXUKRNGUU6NADKGNRKKKKDDAAGDDD=3AA=A::33666A=:=::36300%""%%03,3%:,)))3003363633366666:6ANGKDA=:=::6666,,)3%,=UKKNK0G))),,6:3633663:===:A=AAKDDADDGGGKKRRRNNRURRRUX\c_cfipppmimptwttmpmmpimppmtpppif___\\\__ffmmmcfffcffimtptwzz~zwppii__\\\UUNKGKKGKGGDGDGGGDDDDAA=AAA……ˆˆˆ‹ˆ’’–™ £§§        œ™œ–™™–œ  £™œ™ £ §§ª­±±±´¸±±±­ªªªª§§   œ™™™––œœ œœœ™™œ  ££ £ §§ªª§ª§­£§££§ª œ––’––‹‹ˆ……~~zz~z…ˆ…ˆˆ…‹zzwtmf__XX\X\__X\XXUUXUUNNNGA=D=66630,,0,),,,0336=DDNUU\\__c___\X\XXXX\__cfimtttptppmpppimppmmmpimptww~~~~zwwzwzw~~…ˆ‹‹‹’‹‹ˆˆ‹ˆ‹–’œ§~c–UDGA=DA:AAGGKNRNRRNRNRNGK:G=GANKRX\\\__ccciifftˆ…ˆˆˆˆ‹ˆˆ…~~zwtpmmmf_ccccccciippwz…~…zwzzzwz~~ˆˆw–œœœœœ™–’ˆmttttwtwptppttpmtwz~ˆ…ˆ‹ˆˆ…ˆˆ…ˆˆ…~zzwzpmmmfiifcf___\\fctptwwtipp\ficificmcmtptpmmmpppptwz~z~~~~~~~~~zw~wtpfi\XRNNRUUUX\XXXUKRNKRR6KAAKKKRGGGGAG==66:A:,====6633636=:6:666300))""")%36=0:=))3,033336666666:6:::DNNKNGD==A==::::66,,6KKKUGNNN%G))),,666633366:=:=:D:ADKAAAADGGGKKNURRNRRRRRUX\_cfiippppmmpttttmmmimimmppppmmf\_\\X\\\cfmipmfifffffipptwz~~~~zptmi__\_\UNNKGGKGGGGDGDDGGGDDGDA=AAA……ˆ‹‹‹‹’’’™œ£££§£££ £  œ™™™–––™œœœ œœœ  œ£§ªª±­±±´±±­­­­­­§££ £œ™œœ™™   œœœ™œ   £££ £ª§ª­§§§ª £  £§™™’’’’‹ˆˆ…~z~z~w~~……~wtwtppfc_XU\X\\_X_\XXX\\XRUUKDDGG=::633000,,,00366:DDNX\_\cc___\\XXXUXX\ccfffmpptptppmtppmmppmmmmfpppttz~zz~zzz~ˆˆ‹‹‹‹‹‹‹‹ˆ…ˆ…ˆ‹––œÂc_XKDD=:A====DDGKNKNNKNKGD:A63:A=D6NRX\\\\ccfmiimw…‹ˆ‹‹‹ˆˆ‹…~~~wtpppiffffcffffmiptzz……ˆ…ˆzz~z~…‹’™™  œ™™––ˆ~pwwwttwpttpttptpt~~……ˆ‹‹‹ˆˆˆˆˆ…ˆ‹…zwwwpimmiiiccc____\cfppwmwpimm_fffificicptpttmimpmpptw~~~~~~~zz~w~tppii\XURNRRUUXXXXXRNNNNNN3KAAGNGNDDA=:D:663==30::A:6306606:6363330,,,%""""%%,%36A0:A6,6,300666666:6::::==GRNNNKGAGD====A=::6K=GNNNUD0%K%D)))0,33:3066::6=6:=DAAAKADADDDDDGKNRRNRURUUUXXX_cfimpmpmimpppppiiifffiipmpmiic__XXU\__ffppppimffiifmpttwzz~z~zppifc_\\\RRKKKDKGGGDDDDDDGGDDGDAA=AA…‹‹’’–’œ £§£££      œ™–™™™–œœœœ œ™œ    £§ª­­­±±±´±±±±±±§§§ £™œœœ™œœ  œ™™œœœœ ££§££§ªªª£££§œ œ™œ™–’‹‹ˆˆ‹ˆ………~~~~~wzwt~ptmp~ttwptpff_UUX\XX\X\\\\\\_\XXXRKKKKAA==6630000000336=AGR__c_ccc\\XXUUURUX\__cffmimtppptpttppppmmiiicmpmpm~w~~~~z~z~~ˆ‹‹ˆ‹‹‹ˆ‹ˆˆ……~…ˆ–’ª¾mNUDDA==A==:=AAA==A0)G%6),0,6:33GNRXXXX_fimmtˆ‹’’‹‹ˆ~~~wwtppiiiiffiiiimmpw~~ˆˆˆˆ……~ˆˆ…ˆ…’––™ œœœ–™–‹ztwwwtwpwttwttwzz~ˆˆˆ‹‹……………ˆ~ˆˆˆ…~~zwwmimiiiiccf\__\Xccpptmtpiiicccffiificmwmttmiimmpmpt~~z~……~~~~zzzwztmpmiXXXURNRXXUUUXUNKNRKND3KAAKR,KDD==:A6330:03,:6==63336033303,00,0)))%"""""""))))03=,:=:0:,6,0666::::::::===KUKKNGKDKGAADKDAKAGNNKNRKU6,%N)A))),,036636366::::=DDDAK=AAADGGDGGRNRRUUUUUXUX\_cffimmmifimmmmmfcfccffimipmfif__\\X\_cfitttpmmfiimfptwtww~zwzwmpffc_\XXRNKKGDGGDKGGGGGGGGADDAAA=AD‹‹’’’––™  §££   œœœ œ™––™––œœ   ™™œœœœœ£§ªª­ª±±±±´±±­±±§ª££ œœœœœ™™œœœœ™ ™™™œ£ §££§ª§§§£££™œ™–’–’‹ˆ‹ˆ……ˆ………ˆ……~zz~zwmppmfcimmpttpmcc\XUXXXX\\X\____c_\\\UNNKUDGAA6:6033000033:AAG\ccfc_c_XXUNRNRNRU\\_cffmipppppttwttttpppificmmimmptz~~zz~~…~…‹ˆ‹ˆ‹ˆ‹ˆ‹ˆˆ…~~~~~’–c¾¾NGDDA:=======36))",0"%%),30)6GNUUUU_fiptw…’––’––’ˆˆ~~zwwtpmmmmiiiimmmptwˆ‹‹ˆˆˆ……‹ˆˆ‹‹’–™™œœ™œœ–œ–ˆ~wzwttwtwwtwttz~~…~ˆ……ˆˆ…………~ˆ…ˆˆ~zzwmmpiiiiccc__\\\cftmtmtmiifcfcfiimimfpwpwppfimmmmptz~~~~~z~zwtztpmmm\\XXUNRXXUURUUKKNNKKA3GAAGN,GAG==:=6330=63,:6=A:6333,300,0,),,,%%%%""""""""""%,),,30:,6:=36,:,3:::6::::::====KRGNRDKGNGDDGNGDNDKRKKKR=U3,)R%))))00,033363366:=6=DGGANADDDDDDDGGNRRNRUXXXXU\\__fffpmifcfiiif_XXc\\cffimpmiiifc___ccffmtwwtppimpptttwtwwzzwwwmmccc\\UNNKGGDGDGGGKGGKKGKGADDAA==AD……’’’’’’™™œ £§§££  œ œœ™™™––™™™™œ £œœœœœœœ££§ªª­±±±´±­´­­­ªª £  œœ œœœœœ  œ ™™œœ œ£ £§§§§§££ –™–’’ˆ‹ˆ…………ˆˆˆˆ……~~zwwmmmic_fcimppmi__X\UXUXXXXUX\_\cc____XXUXXNKGD==::666003666DGG_fcffc_\XUXNNNKGNKXXccifimmmppttptttttpppmff_iicimmpw~z~~~~ˆ…ˆ‹‹ˆ‹ˆˆˆ‹ˆ…ˆ……~~zz~~–_m¾NDDA===A=::::00)%"%"),,,6GKNRNRccip~zˆ’’™™ –œ™–’’ˆ…~~zwttpmpmmimmpmptwz…‹‹‹‹‹‹‹ˆ…‹’–™œ™œ™™™œ™œ–’‹~zwttwtzzwztw~~………~~…………ˆ~wztmmmimmifc_cc\cccftmpippiffffcfiimmmipttwpmifiiiimwz~~~~~~~~z~~zwzwtpmm_\\XURNUUXRNUUKKNKKKD3DAAGK,DAK=:=66333A:3::=AA::300033,,,))%))")%%%"%%%"%"%%%))%0,3,3030=336:63::::::::==A===NNDNNDGGKGDGKNGGNGNNKNNR30%)%N%))))3,,03033636:6:6:ADKARDGAGDGDDGGNRRKRXX\X\X\__cffimmfc_ccf_\\UUX\\_cfcippmmmicc_cffmppwzzwwtppttwwwwwwwwwwwwmmfc_X\RGKKDDAGDKGGNKKKNKKGDDDA=:=AD…ˆ’’’’––™œ §§§§ œ œœ™™™–––’––™œœ   œœ ™™œ £§§ªª±±´±±±±­±±ªª £œ  œœœœœœœ œ  œœœœœ   ££§£££   –™–‹‹ˆˆˆ………ˆˆ…‹…ˆ……~wttififc\c_fiimff\\UXX\UUUXUUUX\X_c__cc\\X\\RNRGD===:6:633::6GK_cfficccXXNUKKKKGGK\\_cfffiimpppptptwtttppifc_ffcciimpppz……‹ˆ‹‹‹‹ˆˆˆˆ……z~zzwwzzÂf\iRDDD=AAAA6:60,,%""%"%)%,3DGRRRRfcmt~‹––  £™ œœ––‹ˆ…~~wttpppipmpptpttz~…‹‹‹‹ˆˆ‹’’’™–™œ ™œœœ™ œœ––zzzwww~z~~tz…~~z~zw~~~……ˆ~…zzwpmiiimifc\cc_ffcippmmpmiffifcfiiimmmpttztpiififimtw~z~zz~~~~zzzwwwwtmpc\X\XRRUUUUNRUNKKNGNA3DDDGG,DAG::A66AA=A=6==A==66633000)),))%%%%)%%)%)"%%%%))))))0)0,0,30:06::::===::===A=D==AKKDNKDDDKDDGGKGGKKNRGKRN",%%%0)))),60030003663666:==AK=RGKDGGDDDGGRRNNUUX\\_\_ccfffmmmf_\___\RXUNUX_cfffmpppmpmfccfimpttz~~zwtwwwzzwtwttttwwtmmfc\X\NKAGA=ADDKGGKKKNNGKGDDDA==AADˆ‹’’–––™œ £§§£§ œ œœ™––’’’’–––™™ £œ ™£œœœ£ ªª­ª±±±±±­±±­­ªª££ œ œ™™™œ  œ    œ  œœ    £ ££œœ ––’‹…‹…ˆ……………ˆˆ…‹ˆˆ…~ppiffff_X_\__fX_XXURUXXUUUUURKRXU\___c___\__\XXNNDDAA:==6==:GN_ififf___UXNRGKGGDDN\\_ccifiimmppmpptwtttppmfc_ccf_fcfimtz~……ˆ…‹‹‹ˆ‹……ˆ~~z~wzwmtpwwfcXN_RAADGDDAA:630)))"""""))"DGNUURffmw…‹’™££§œ£  ™™ˆ……~~wpwpmpmpmpmtppwz…ˆ‹’’––––œ™™œœ–œ™œ™ œœ–™ˆ…~~zz~~z……~~~~w~wtwwz…ˆ~zztpiiimiic_ff_iicmmmmimimiimcfiiiimpppttwtpmiiifmmtw~~~~zz~~~~zwzzwztppf_X_UUUURRURRRNGKNGKA3DAAKG,N=N::A66DGDAA:AAD:=63363003)))%%%)%%%)%%%,%)))),),%%),,0,000,60:6::======:=:=ADAKANDGKGDADGDADGKGDGNNRDGRN%"%%%0)))),:3,30303336:666::=KAUKGDGDDDDGGRRRRRU\\Xc\ccciffiiifc\X\\URURRU\\_cfiipptttmmiimmtwwwz~…zwzzzzwttwtppttttimf_XX\NGAD:=ADDGGGKKKNKGKDDDDA=AAAD…‹‹‹’’––™œ  §ª§§£œ œ ™™’–’’’’’’–™œœ  œœ£  œ££§ª­­±±±±±±±±­ªª§§££œœœ™™–œœ     £ £ œœ œœ£ £££  œ–™’ˆˆˆ……ˆˆˆ‹ˆˆˆ…~zpififcc\XXU\\XUXURNNRUXXRURUNKRKRX\\\____\ccc_\XRGGDDAAA=AAGKfmmifif__\UXNKDKDDGDN\\_fffifimmmpmpptttttttpiffffccfciiipw~z………‹‹‹‹ˆˆ…ˆ…~~z~zztptmfmfpc_XK\N=DNKKDDD=330,))""""",%"AGKUUUfimz……‹’™§§£ £ £œ–’ˆ………~zttppmppimptpmzzˆˆ’’’’’’‹’–™–™™œ™™œ ™™™ œœœ™™™’‹ˆ…~…~……z……~~~zztwwtwwz……~~~~zttmmimiifcfimmmmppmmipfmififiimimmtppttwttpiiiimmtwz~~~~~~~~~…~z~zzztwwppfc\\RXXUUNURNRKGNNKGD3GADGK,RUR==D=AGKGDDKDDD:=303360,0))))%%%"%%%%)),),),)),,)%,,00)0,00:36:==AAAAA===:=AR=NDKDDGDA=ADDDADGDGDKKRAA0)%%%%),))))0=0,030363366::6::=GDUKDGDDDDGGGNRRRUX\\\_\cccffiffffcXUXXRRNRRUX\_ffiitptwwwwtmpzwzz~~……~z~wwwwpttpppttttmmf_\XXRGDA===AAGGKKKKNGKGDGDDD=DAAD…‹‹‹’™–œ ££ª§ª§ œœœœ™–’–’’’–’’™œ   œ § £ £§§§ª­±±­±±­­±­§ª§£  ™™™™™™œœ   ££      œœœ  ££ ££œ™–‹ˆ……~~~………‹‹……………~zwmfcfc__XUURXNRRKNNKKNRXURRRUNKNKKUUXX\\___ccfcffUUNRKDGDDDAKXipttimi_\\XXRKDKGDGGN\__ffiffiimimimmtppttttpmfiiicfcfifimtzw…‹‹‹ˆˆˆ…ˆzzz~wppppiffci_\UGURKNRKNGGG=60,,)%"")))6DGRRXfim~…ˆ‹’–££ œ œ ™–’‹ˆ…ˆ~~zwtttpmpmptttpzz……‹––’–––‹–––––™™œœ  œ–œ    œ™œ–ˆˆ…~……~~~…~ztwppwttwz~~~…~z~wttptmpmmiiimpppptppimmfiffmiiiimmitttwwwwtpmimmpmwz~~~~~~~~…~~~~zwzwmtfc_\RXUDUNRNNNKGNKNKD6DRGGK,X\XRNNRDKNKGGNGGG6=630360,,))))%%%""""%),,%,),,),,)),000,300366:=AAGADADA==AA=UARGGADDAA==AAAADGADGKKND=,%))%)))))),0:,0000036633=:6:=:DGUKAGGGGGDGGRRRRRUX\\\__ffiiffiifc\RXXNRRRRRU_cffimtptzzzzwwt~z~~…………zzzwtttpppmmpptttmpf__UURKG==::AAGGKKKKNGKGDDDDDADADGˆˆˆ‹’––™  §§§ª§££  œœ™™–’’’–’’–’–œœ£  £§££ §££§§±­­­±±±±­ª§§££ £œœœ™œœ        £ £ œœ™œ    £  œ™™’‹‹ˆ………ˆˆ‹ˆzzwmfcc_\\RRNNNK=:DD=AAGKURNNRUKGKGGNKUUXX\__cfifiiiXX\RRNNXUmptwwwwtimc__XXUNRKGGKNR\fccffffiiiimfmmppmpttttpimmicffffcifppt~~~ˆ‹‹‹ˆˆˆ…~zz~wpipmfif_f_XRDRRUXUNRKGDA:0,))"""),,6ADRN\ifm~ˆˆ‹–  ™™œ™œ––’‹‹ˆˆ~~wptttppmptpttwz……–™–™™–’––’––™–œ  œœ™œ£    – ™’‹‹ˆ………………z~ztpmptpttwz~zz~~wz~wtwtwppmpimmptttttpmimificimmimmmpmtptwtzwtpmmmpppzz~~~~~~…~~~~~~zzwmpfcc\UXXDUNNNNNRGKKRNR:DXNUc,\__U\XURNRKKKKKKG:A:6303,,0,)%%%%"""""%%,)"))),%),%,,,,0000036:=ADDKDDDGAAADN=RNRK==D=A=AA=AA=DGADGGGAG),))))))),),,,60300003::63=66:::AGRKDDGGKKDGGRRRRRUX\XX__cffiffifccXRUURRRNNRU\_fcimpttw~~~zzw~……~wztttppmmiimmttppppc_RUNNGAA==ADGKKKKGKKGDDDADDDDDGKˆ…ˆ‹’–™œ £§ª§§££ £œœ™œ™–––’–’–––™™œ    §§££££££ª­ª±ª­±­­­ªª§§  £  œœœœœœ  £ £ £££   œ œ œœ œœ™™–’‹ˆ…………ˆ‹…~~z~~zwtmf___XXNNKAGD::A==AADGGGDKNRGDGDGKKKRUUX_ccifimmmp\cmU_mptwtzzzzzwmmf_cXXXRUKGGN_\ciififffiifiiimmpppptttppmmmmffffffffmptww~~ˆˆ‹ˆˆ‹ˆ…ˆ…~zzwtimiifc\X\\UGURX\XRRGGA=:0,,%"%,03==NR_fiw~ˆˆˆ’’–’–’–’–’‹‹ˆ…~wttppptpttppww~ˆ––™–––’’–™’™’™œ  œœ £   œ™œ™’ˆˆˆˆ…………~…~zzwtmmmpmpptw~wzz~ztzzztwwzptppmppttwtttpmimifffimimiimpptppwtzwwtptptttz~~~~~~……~~~~ztimc__XX\XDXRKNKKUDKUU\U=_\_Xff_ccX_\XUNNNKKGGKG==66636,0,0)))%%%%%%%"%0,%,))),,),,),0,0336:=ADGGNDDGDADAURRRRRK==A=A:====D=DDAADDD0K%),))))),,,,0,,00003036633:6:6===GRGDDKGKGGGGRRRUUXU\XX\_ccfffffccc\UURRNRNRUU\\cfimpptwzz~~~z~~………~~ztwtpppmimffimtpppttp_NRNNGDD=AADGKKGKGGGGDDAAADDGGGN‹ˆ‹’’™œ  §§§ª§§£   ™œœœ–™™’–––––™™œœ œ £££ £££§ªª­±­­­­­ª­§§§   œœœœ œ œ££ £  §££   œœ™œœ™œ–’––––’‹ˆˆ……~ˆˆzzwzzwtpic_\\UXKDD==A66:::==ADDDDGDNDAAADDGKRRUX\cfiimppptttppwptwzw~~~~~~wpffc\\UUXRXX_c_fmmiifiiiiffiimmppmptptppmmpiiiiicfiimmptzz~…ˆ‹ˆˆ‹ˆˆˆ…~~wwmmfiic_\X\XKUR__\UUKKA::30))%"%0006AKN\cmzˆ…ˆ‹ˆ’‹‹ˆ~zwttptwtttttwz~~ˆ’™™œ–™–’’’–––––œœ£ œ£ £ £œœ™–‹‹‹‹ˆ………~~~zzwpmpmmmmmttzzwzz~wwzz~wzwwtwttpttwtttpppifiiicffmmpimpmpttmwtzwwwtwwwww~~~~~~……………~…z~pmpc\\X\\XX\RKRKKXGNXXc_=m_miiicff_c_XXKNKKNKKGDA:::666300,,)))%)))%%%%,,%))%,)0)))),,00366:=ADDGGNGGDAGDAXUUR=RK==DA==::==AAAAAAADD,K%)),,))),,,,,,,0330603336366:6:=:DNDAGKKGGGDGNNRRXUXX\XX___cccfff__\XUURRRRURX\__cfipmtwwz~~~z~~z~…zzwptpmmmmiifcfipptttwt_NNKKGGD=AADGGGGGGKDGAAAADGGGKKRˆ‹’–œœ  §§§ªª££   œ™œœ™œ™’––––––™™œœœœ£     ££§ª­­­±ªªªªª£££  œ œœ œœ   £œ ££§ § £ œ ™™™™–’–’’’’’ˆˆ…ˆ……z……~wwtzwtpmf_\XXRUGA==:63:66===AA=AAADA====ADGKNRRX__iimpttpwwwtwztwz~zzpwif_\\XX__ccfiippmiimiimiimiimmpmmtttptpppmmiiffcimpimtww~…ˆˆˆˆˆˆˆˆˆˆ…wtpmffi__\XXXNU\ccXXUNND:63,))%"%%0003DKKX\m~ˆˆˆ‹‹‹‹‹‹ˆ‹ˆ…~~wwwtwwwttttzz~~…’™œœ–™–‹’’’’––’’™œœ £  ££  œœ––…‹ˆˆ‹ˆˆ……~z~~~zwwpmmpimpmttwwwzwzwzzzzzzwwwwwwtwwwtttppmiiiim_ffmmmmmpmpppiwpzzzztzzzzz~~~~~……ˆ………………ˆw~pmtc_XXXXXU\UKXKR\KRXUfmcwtpmipmiccfcUUKKGGKKGDAA66=::66600,,))),,))))%))),,%0,0,,%,)0036::=ADDGKKRKKGNKXAUUUN==KA=A==:::===A=A=A=AA)G%,)0)))),,,0,,0030063333633:666:=ARA=DGGDDDGDRNRRXUX\\\X__\c__ccf\\XUXXUUUUUU\\__ccmppttzw~~~~~~w~~~twpmpmiiiiifccffmptwwwwpKKGGGDDAAADGDGGKGKDDDAADDGDDNNˆ‹‹’–œ £ §£§§ª££œ œœœœœ™ ™––™––––™™œœœ™        £§ª­­­ª­­­§§§£     œ œ œ     § £££    œ–™––’’’––’’’’‹‹…ˆ…~zztttpwimcic\XUUNG=A=:::6::6:::======A:=:6=:DDGKNRU_ciiptwttzwzwz~wzz~~~……~pzmif____ccffimtttpiiimmmmmmmmmppmptpttttptpmimfimimpmpttz~ˆˆˆˆ…‹‹‹‹‹ˆzwpiccf\\\\XURU_ff\\XRKG=60)),""),033AGGGU\i~……ˆ‹ˆˆ‹ˆ…ˆˆ‹‹‹‹‹‹…wzztzwwtwww~zˆ‹’–™™–™’’––’’’™ œœ £££  œœœ’’…~……ˆ‹‹……~~~~~~zwwwpmmmiipmppttwwtzwzwzzzwztwzzwwzwtpttpmififipfifmpppipmppmiwpzzzzwz~~z~~~~~……………ˆ…ˆ…ˆ……………zzpmpc_\X:UXU\XX\KX_cRXitpwzwtpitpmfff_XRKKDDGGDA6=3::::6:::6,,,,)3,,,),%,),0,%3,000,0,336:==AADGGKKRKNKRN\NUAUK==KAAA==6::A::A=A===DA)G),),),,,,,,300,03003333333666:6:==N=ADDKGDGDDRNNUUX\__\\________c__XUUXUXXXXX\\\_ccmmptpwwzzz~z~zwz~zwptmfiififfff_cffiptwzwwtGDDDDDDA=DADDGDKGKGDGDDGGGDGRRˆ‹‹’–œ £ ££§§ª   œœœ™œœœ œ™–™–’–––œœœœ™œ œ œœ £ £§ª­­­ª­ªª§££œ    œœœ   £ £££ ££ œœœœ™’–’’‹‹’––’’’’‹……ˆ~zwwwppfmtfi___XURRKD===6663663::=:=:=:=A6=:::=ADGKKRUcfmittwww~wzz~zwzz~z~~~~~twpmiccfcffiimmwwtpmpmmpppmppmptppptpwttttttmmpifptptpptww~……ˆˆˆ…‹ˆ…~ztf_\c\\\_XXRU_ii_\\UNG:30)%)"%,0066DGKGRXf…………ˆ……ˆ………ˆˆˆ‹‹ˆ‹ˆ…z~zwzwttwztzz…‹–™–™™–‹–’––œœ™  £     œ™ˆ~ˆˆˆ…ˆ…~~~~ztwttpmmiipmpmptttwzwzwzzzwzttwzzzzwttwpppifffimiffmptpipmpmiiwtzzzzz~~z~~~~~……………‹…ˆˆ……ˆ…~wtimc\_U:UXU\X\__\_fimmwtz~zwtpwtpiiccXNGGAAD==:6:3666::===:,,G,GA:,0,0))))0036::A:0306::===ADDGKKNRKKNURXRUAUN=AG==A:=6=:A=:A=====A=)D))),,,0,,,,3,003330606633366666:==K=DA=GGADDDRRRRU\\__\\_\_\c__c___\XUXX\UXXX\\\\cfimmppttwzwzwzwtwzttif_cffcfcccc_cccimpwwwzwADADDADA=DADGGGKKNKGGDGGKKKRUU…ˆ‹’’™œ ££§§§§£  ™œœœœ œœœ™™–’’–––™™œ™™œœœœ œœ   §§­ª­­­­ªª§§ œ œ      £ ££  œ  œœ–™™’’‹‹ˆ––’’–’‹‹ˆ…~ttttmmfcmfc\\\XRKDGA=::66603666::==:=6==::=::=ADKKKN\fcmmtwwzz~wwwzwtzwzwzz~~z~zwtppmffifiiimpmzzwwptppttpmttpptptpttwttttttpmtmpwwtwttwzz……………ˆˆ‹‹ˆ…zwccXXcXXX_X\XX_if___RKD660,")"%)0366:DDKDUUi~……ˆ………………ˆˆ‹ˆˆ……~~zzwtwtwzt~~ˆ’™™™™™™’‹’–’™’’™œœœ£œ£œ  œœ™–…z~z~~…ˆ……ˆˆ~ztwttppmimmpmmpptptwwzzzzztwtttwzwzztttpmmfciifmmiimmpmimmpmimzwzzz~~~~~z~~~……………ˆ…‹ˆˆˆ……ˆ~tpii_\_R:U\\\U__c_iimmpww~zzwtwwmmf__UNKD6===::3:63336=:AA=KKKNKD=,,,,,,,,336:==DA3AG:==A=AADGGKKNRNKKRUURUAUN=AD::A6:3:6A::========)3,)),,,,,,,,00036600606:6333366:6::N:A==DDDAADNRRNRX\__X_c___c___\__XUX\\\U\\X_\\\cfmpmppttwwtwtwtpttpffc__cc_cc_____cciimtwtwtADAAAAAA=DADGGGKGNNGGGKKNNR\……ˆˆ’–™™œ££§£§££ œœœœ™œœœœ™––’’––––™™œ™™œœœ™œœœ œ ££ª§ªª­ª­ªª££œœ œ   œ  ££   œœœ™™’–‹‹ˆ‹ˆˆ‹’’–’’–‹ˆ…~wwppifc_\c_X\XURNGD:::633300663:=:==:6==6::=:ADGGKNU_ffmptwzzwztttwptztzwzwzwwzwwmptmiimimmmmppzzzztwttwwttttttwppttwtwttwwpmmtpwzzwzwtz~z………………ˆ‹‹‹ˆˆzm__XXcXX\_\\\\fiic\\NGA360,%""",036::=DDK:XUt~…ˆ…~~~~……ˆˆˆˆ………zwwwwtwzt~‹’–™™–––’’™–™’–œ ™ £ £œœœ™™–’wzwzz………~~zwwwtppmmmmpppmppppttwzzzwwtttpwwwwwpptpmmifiicipmmmptmimippipzwz~~~………ˆ…ˆ…ˆˆˆˆˆˆˆ………zppii_X\N:X\__\c_f_mmppttzzwtwtwpic\_UKK=::=:6:6:33333:=DAANNKRNG=3000000366:DAAGDKDK6ADDADDDGGKKRRNKNNRXRRARKA=:::=6606:A:::=======,),))),,,,,,,30663:0633666333366::66N==A==AAAAAKNNNRUX\\\__c_cc__c_c\\X\_\\U\\X\___cimppptptttpppppmpfifc__c_____\__\\ccifiptptXDADAAA=A=DAADGGKKNKKGGNNURUz………‹‹’––œ £§§§£§£œ œœœœœœ ™–––’’’–––™™–™œ™œœœ™™ œœ  §ªªªª­­ªª§£   ™ œ   £ £œœœœ™–––‹‹………ˆ‹’’’‹‹…ztpmmc_\\_\UXURNKGD=::33030,336::6:=::==66:==DDGKKR_ciiptttwwtwppptmtwwwwwtwzttttmmpimmimmmppttww~~wwwwzzwwzwwwwtpttwttpwttpppttz~~zzzzz~~…………ˆ…ˆ‹ˆ‹‹ˆˆ~m_\UUc\X\__X__imif_XDDA,30)""""%)036:==ADDK:\_wˆ……z~~z~~~w~………ˆˆ…ˆ…………zwzwtwz~z…‹’’™™–’’’––™œ’–  œ    œ™™––……wtttww~~~…~~……~…~zzzwtpmmiimppmpmpmtww~~zwwttpmtttttpptpmpmiimfimmpptpiipmppmmzt~……~…ˆ…ˆˆˆ‹ˆ…ˆ…ˆ‹ˆˆ………zppmi\\XN:\_c__c_c_iimmtpz~~ztptptmf_\\UKGA:==66:::333636=ADDNNRURKA=:333:6=6==GDDGGKGNADGGDDDGGGKKNRRNNRGURUANGA:::6=6333:=6:::======0))))),,0,,,,00:33:3:333333636:::=6:N:=A:==ADAANKNNNUU\X\_cfcccccccc_\\__\\X_\\__c_cmmmpptptppmmppmiific__\c_\_\\X\\\\_cfcfmpm\XD=AA=A:==AAADDGGKKNKGGNNX_p~…ˆ‹‹‹’–™ ££§§£ª£œ œœœœœ™œ™™’–’–’–––––™™œœœ™™œœ™œ £§­ªªªª­ªª§££  œ£     œ œœ™™–’’ˆ…ˆˆ………ˆ‹‹ˆ‹~~~zttpmc\XXXUUURRKKDAA:=6030,0066=66:=:===:6::ADGKNKUcfmmttppttmiiimmipwttwwwtwptptpmmimmfmmmmttwzz~zzwwtzzzz~zzzzwttwwttpttwpmmtw~~z~~~~~…ˆˆˆ‹‹ˆ‹‹‹ˆˆzm_\XXc_XX\\\ccmpmfcXDA=,0,%%"",0036==AAADDKG_c~…ˆzztwzzzwz~~……ˆ………………zzztwzz…ˆ’’™™–’–’’––™œ–™œœœ£  œ™––‹…~tpppttzwzw~~………~~~zwtptppmpppppmmmtwtzzwwwtptmptptpmptpmmpimmimiimmwppmppmpmpzw…………………ˆ………‹ˆˆˆ‹ˆ‹…ˆˆ‹ˆˆ‹ˆ…~zppmi_\XN:__cccc_c_ffimwpzzzwpfpmpiXXXXRGDD==:636666366::=DDGRNUURRDA=:=:AAAKDAGDDKDGGNDGKGDGGGGKKKNRURRNGRRRGN:D6663:66666:66:::=====,)),),0,,,,,,,,=0366=3033363666:6==:K::=:::=A=AKKKNNRRXUX\_cccc_cfffc______\_\__cccfmmpmppmptpmmmmmffffc__Xc_\\\XXX\X\\_cccfff\XGAAAAA=AAAADDDKGKKKGGGKR\ftz~ˆ…‹ˆˆ’’– £§§§§ª£ œ œœœ ™™––’’’’––’–––™–™œ™œ™œœœœ £ªª§ª§ª­­­§£ £    œœ£ ™œ™™––’‹‹ˆ……~…‹ˆ‹‹‹ˆˆ…ˆ~zzwwwmic\\XRURNNNGKGDA:=:30303336:::====A=:6=ADGKNRR_fipptpmmpiccffiifmtpttwzttpttptmpmmmimipipwwz~~z~zzwzzz~~~~~zwwwwwtpttwtptwz~…~z~…ˆˆ…‹‹ˆ‹‹ˆˆ‹wi_\U\c_\\_\\fmpppif\D=A,,,)%%""%)36:=:AAAADDDNUc~…ˆ~zwtwwtwzz~~~~…ˆˆ………~zzwzzˆ‹’’’’’™™––’’™™œœ™œ ™œ œœ™–’iffpiiiimpwtwtz~…ˆ………~~~wzwwttppmppppimtttwwwwttmtmmtptpimtppmpmmmmmifpptptptpipmpzzˆ…ˆ…………ˆ…ˆ…ˆˆ‹‹ˆˆ‹ˆ‹ˆˆˆˆˆ…‹ˆ…zztpmic__c:___ccc\c_cccmztwwwiiciXc\UUU\NGDA==66666:33:===ADGKURXXXURDAAADDGDNGDGAGGDGGKGGGDGKKGGKKKNRRRNNGKNNKK:A63306:::66666666:====)))))),,0,,,A,,=0033:033333666666:A:G::::::====KGNKRNNUNUX\__c_c_iffc__ccc____cccfffiimmmpmppmimmiicfcf___\_\\\XXXUXXX\___cccc\\KDDDDD=AA==AAGGGGKGGDGKU\ipw~~ˆ…ˆˆ‹’–™ §§§§£ª£  œ™™™ œ™’–’’’’’’––™™™–™™–™–™™™œœ£§§ªªªª­­ªª§££        ™™–™’’ˆˆ………~~ˆ…ˆˆ…ˆˆ………zz~ttwifcX\URRRNRRKKKDD==:33003366:===AAAAA=:ADGKNRRUcmmpttmifmcfcccifiippptwwwttttttpmmmmmiimmtwwzz~~~z~z~w~~~zwwtwwtpttwttwz~~……~~…………ˆ‹ˆ‹‹‹‹‹ˆˆif__U_c__\_…cftwtpmi_A:A0,,,)"""%)36:=A=DDDDGGDRXˆˆ……ˆwzwtttttzw~~~~……~~zz~……ˆ‹’’–’’™™–’–’’’™œœœœ™œœ™œ™™–_ffcfiicfiipppwtwz~…ˆˆ…ˆ……~~~zzwwtpmptppmptptwzwttpmpmmpppmfmppppmimmppmimpwtwtwtmtmtzz…ˆ…ˆˆ…ˆˆˆˆ…‹…‹ˆˆ‹ˆ‹‹ˆ‹……ˆˆˆ…ˆ…~~wztpmicccf:__\cccGc_c_cmwwtttfN\\UURKRRXNGD==:6:::663:AGDADGKNXUX\\XUXRDRGGKGNKDD=GDDGKKDGGGGKKGGKKKNRRNNKKNKKNG:A63303:::::6666666:===)))),),,,,,,D0,:,,006000003333::==D=G:::::=====KGNGNKKRKRUX\\__ccifffcccfc__cc_cfcfffimmpmmmpmmmificfcfc__\\\X\XUXUUUUX\_____\\\NGGDDAA===ADAGDGGGGGGGKU_mppzz~ˆˆˆˆ‹’™œ ª§ª§§§££œœœ™œœ™™––’’’–’––––––™–™™–™œœ  §§ª§ªª­­ªª£§£ ££  œ œ™–’–‹…………~~~~…………wzzpptmf__XUNRRRNNNKKGGAA:66606366=AA=DADDDA=AGKKRRR_fppttpif_cfcc_cffiimmmtwwwptttpppimmppmmpptttw~~~~~z~z~~~~wwwztpppttwwz~~………………………ˆ‹‹‹‹‹‹‹’ii_cX_cc_\iˆ…z~wppf_D==3,)0,)%,)%,)06:=AAADDDDGGNXˆ‹‹ˆ…ˆzzwtppttwwz~~~~……~~~~~ˆˆ‹’––’–––––™––œœ œ ™œ™–œ–c_c\_\_cff__ffmimtttwz…ˆ…‹…ˆˆ…~zzwtittpppttmptwtppmmmppmpppfmppmpmmpmmppmmmwwwwwwtwptz~…ˆ…ˆˆˆˆˆ…ˆˆ…‹…ˆ‹‹ˆˆ‹‹‹‹ˆˆˆˆˆ………~zzwztmimcffc:c_\cccG__c_cmttpmfcKXURRAGNNUKGA==::=::3:3ADKGDAGNRUUX\_\X\UUUKKNKNKDG=DADDGGGGGGDKGGGKKKNRUNNNNRKGNG:A63000===::::6:6:6:::=,,,,,,,00,0,D3,00,000000003363==AAA:G:=:6::====GGKAKGKNGNNRUX\\cfiiffcccf__c_ccfffffiiiipmmmmmmmiffcfccc___X\XXUUURURUXX\\\\\XXXKKKGDDA===DDDDDGGDGGGDG_cimpwwzˆˆˆ…‹™œœ£ª£§ªª§££œ œ™œœ™™––’‹’’––’––’––™™–––™œœ£ §§§ªªªªªªª§§§    œœœ™™’’‹‹ˆˆ……~z~…~~~~zwwtppmc_c\URRRNNNRNKKGDA6:6:036::=AAAADDDDDKDKKNRUXcittttmicccccfc_ffffmmmtwwwtttpmppmmmtpmppmpttw~~~~~zz~~~z~~zwwztppmttwww~~~…………ˆˆ…ˆ…ˆˆ‹‹‹‹’mf_c\ccc\_m‹……~zztccKDA6,),,,))0,33",,3:AAA=ADGGRGG‹‹‹‹……zzwtpmttttz~ˆ………~…~~ˆ‹’–™™–™––™–™––™œ œœœ™––™’_\_UXX\_cf__cciffppptw~…‹‹ˆˆ‹‹ˆ……ˆ~~~zttttpptpppptttmmmmimtimpmfmppipmmppmppmpmwwzzwzwztw~~…‹ˆ…‹‹‹ˆˆˆˆ…ˆˆ‹‹‹ˆˆ‹ˆ‹‹‹…ˆˆˆ…~wwzztmimcffcccc_fc_G___c_ipimc\XKGRNK=DKKRGG=:::::==:=ADGNKGDKKNURXX__\_XXXNGRNNGDGADDAADGDGGDDGDGGGKKKNUNRNNRGDKD:A6A333=====:::::::::::,,,,00,,,,0,A0003,333000030066AAD=D=K:::66::::=DDGAGDGGDKKRUUXX_cfiicc_ff\c_\_ccfffcffiimiimmmmiiicffccc___\\\XUURRUNRUU\\X\XXUUKNKKGGDAAADDGDGGDDDGGGGccimptwwˆ…ˆˆ’œ  £§§£§§§£ œœ™œœœ™œ™–’’’’–’–’’’’––™™–™–œ œ££§§§ª­ªª­ªªª§§£ £œ   ™–’‹‹ˆˆˆ…………~~…~z~~~~zzzwtpmmmccf\XRRRNRRRNKNGGDA=:=:366:ADDDDDDKGGNGNRRUX\fmtttpiifcccccc_cfffimpptwwtptpppmppmptpppptttw~~~~~z~~~wz~zzzzzwtttwzwzz~~~………ˆ…ˆ……ˆˆˆ’‹’ic\c__cc_cp’ˆˆ……~w_fNGD:0,,00,,0066:63:=DDD==DKKGKˆˆ…z~zttpttttz~…ˆˆ…………………‹’––œ™™™™™™™™™™–œ £  œ–’–pXUXUXX\Uccc_c_fc_mmiwt~ˆ‹‹‹ˆˆ‹~wwtppmtpttptttmmpmimpmmmifipmmpimpppppmpmwz~~z~zzwz~z…ˆ…ˆˆˆˆˆ‹ˆ‹ˆ‹ˆˆˆˆˆˆ‹‹‹‹ˆ…ˆˆˆ…~~wtzztpmpfffffcfcf_\\__c_\fmfc_NRGKKKD=DGDNGD:66=6=:A=ADGKNKKGNNNRUUX\__\XUXNNRRNGADDGAAAADDDGDGKGGGGGGKNRNNRKNDDAG:=6D333AAA====:::::::::,,,,0,,,,,,00000000000000030::ADDAAAN6=666:::::AA=A=DGKGGGNUXU\c_fifc_ccc___\_ccccccfcffifiimmiiiifcffcc_c\\\XUUURRUNRUUX\XXRURRGNKNKDGDDDGGGGGGGGGKGGKfcimptwwˆ…ˆ‹’–  £ §£ £ª§£   ™™œ™™™™–’’’’–’™–’’’™™™–™™™   ££§§ªªªªªªª§§ª§£££  œœ––’–ˆˆˆˆ………~~~z~~z~~~~zzzwztpmmpmfff_XXUNNRNNNKNKKGDGA==:6:ADGGGGGGNKKRRRUUX\_fppwtmmiffcccccccfffmmpmttwtttpmmmttttttpttttpw~……~~~zzz~wzz~~z~zwwwwz~zzzz……ˆˆ…ˆ…ˆ…ˆ…ˆˆ‹’’’’if_cccfccmt–ˆ‹…ˆˆz_cRKG:30,330,33::=A6=DGDDAADKN’G’’’’’’ˆˆ…~~ztwtttwtw~…ˆˆˆˆ…ˆ…………ˆˆ‹’™–œœœ™œ™œœ–œœœ œ  œœ–’’\XUUXXUXU___\__c\_ciitpz…’’‹‹‹‹‹…~zzttpptptppptpmimimmpmmmifipimmfmppmppptmtz~~~zz~zzˆˆˆ‹ˆ‹‹ˆˆˆˆˆˆˆˆ‹‹‹…‹ˆ‹ˆˆ……………~~zwwwwttptfificffcc\U\\\_\\\XXUUGNGKGDG=DGDKKA=06:6==DADGKNKGGKKNRRURUX\\\UUUNRURRKDGDDDAADDDDDDDGDGGGGKKNRRNRKKGDAGG:6G=03AAAA====::::::::,,0,,,,,,,,,0000000000000000::AAADDAN6=366:::::AAAA=DDKGGKKRUUX__cfcc\c_c___\__cccc_fcffffffimmmiiifffcc_c_\\XURXUURNRURXXUURRNNGNKKKDGDGGGKGGGGKKGNKGNfcimpttw…ˆˆ‹–™ ££ ££££§£  œœ™–™™™™™–––’––’–™™–––™–––™™™  ££§§§ª§§§§§§£§§££ £œ œœ–’’‹‹ˆˆˆˆ……ˆ……z~~z~zzz~~~zzzwzwzttpmmmiiffc\XNRRRRRNNNKKGKDDADADDGKGNGKKRNNUUUXX\_cittwtpmicf_ccc_cccffiimpwttptttpppttwwwwtwttwtz~………zzz~zz~zz~~~zzwzz~~~z~~……ˆˆˆˆˆˆˆ…‹ˆˆ‹‹’’’’–’ifccccfffpw™…ˆˆ……~~wfUND:3303330636=ADAAGGDGAADNN’–––––’’ˆ‹…~wttptwtz~ˆˆˆˆ…ˆˆ………ˆ…ˆˆ‹’–œ–™œœœœ™œ œœ  œ £   ––’‹\XXRUXU\U_\\X\\X\\Xfmwt~’–’’ˆ…~zzwwtptttppmpmififiipipiiimmmmifmmpmpptwtz~~…~z~~~…‹ˆ‹ˆˆˆˆ……ˆˆˆ…‹ˆ‹‹…ˆ‹‹ˆ…~~zzzzttwtttfiiicff__\UXXX\XXUNNRRDNGKDDDADGGKK=:36:6:AD=GKGKKDGKKKNNURRUX\_UUUUUUUUKGKGGDAADGDAADDDDGGGGGKNRRNNKKKGDGK:GGA60AAAA====::::::::,,,,,0,,,,,,0000000000033303:6ADADDDN:A6:6:6:6:==AAAGGGGKKNUUUU\_cf____\___\___cfcccccfffcfffiimimmififc_c\_\\UUXUURNRRRUURRNNKKGKGGGDGDGGDKGGGKKNKRNRRffiipttw……ˆ™™ ££  £ £££œœœ™™™™–™™™™™™–™–––œ™™––™–™’™™œ££ §§§§§§§£§§§£££££œ£ œœ™™’‹ˆˆˆ‹ˆ………ˆ…~~~wwwzzz~~zz~tzwzwwtppppmmmf_\URURRRRRRNKKNGGDGDGGKKNRNNURRRXXXX\_cfmtwwtmiiffcf__c_c_cffiimtppppttpttttzwwzwzwtzww…ˆ……z~z~~w~~~~~z~~zzz~~………ˆ…‹ˆˆ‹‹ˆˆ‹ˆ‹’–’’–––ifffcfiiit  ……‹……zzwiXKN=3633333:66AAGDDKGAGADGRN–™™™™––‹ˆ…zzwtttt~…~ˆ…ˆ………ˆˆˆˆˆˆˆ‹’–™™œœ œœœ    œ£  £  œ–’‹\XXUU\U\U\_\U\\X\XXcmww~‹’’’’‹’ˆˆ~zzwwwpptwmpppmiif_ffmmmfiiimpmfiimtpmptzw~~…~~~~ˆˆ‹ˆ…ˆ……………ˆˆ…‹ˆˆˆ…ˆˆˆ……~~~~z~zwwwttpfffffcc\\XUURUXRURRNNNDKGKAAAAAGDGNA:3:::ADDAGGDGGADGKKKNRNNRXX_XXXXXXXUKKKGGGDDDDDAADDDDGGGGGKNRRNNNKGKDGN=DKD:3AAAA=====:::::::,,,,,,,,,,,,00000000000000336:AADAGDK=D:=::6666A==AAGKNKNRRUUUXX_cc\_\\__\\\___cfcccccccccfccimmmmmmiiifcc__\_XUUUURNUNRRRNNKGGGDGDDDDDADGDKGGGKNNNNRUUcffimttw……‹’–œ  £   œ   ™™™™œ™–™™™œœ™–™™™™™™œ™––™’™–™™œ£§££§§§£§§§£§£ £ £     œ™–’‹‹‹…ˆˆˆˆˆˆ……~~zwtzz~z~z~~tztzwtttpttpppif_\RXXUUUUURNNNKKKKGKKNNRURRXUUUX\\\_cfiptwwpmifci_c___cccfciifippmmptptttwwzwwzwwzwzz~…………zzz~~~~~~~~~z…ˆ………ˆˆ…ˆ…ˆ‹ˆ‹ˆˆˆ‹ˆ‹‹’’™–™™™™miiffmmmm§§£ˆ…wztmX\XA=::63:6=:6DKGGGNGDGDGK––™œœ™œ––’‹‹‹‹ˆ……~~ztwtw……ˆ…ˆ…………ˆˆˆˆˆˆˆ’–™œ œ  œ £ £  §£œ££œœ–’‹ˆXXXUX\UXUX\\R\XXXX\_itw~‹‹–’–’’ˆ‹~zwwwppwtppptmiff_cimpifmiimpmfmmpttttz~z…~~~~ˆˆˆˆ…ˆˆ………………ˆˆˆˆ…ˆˆˆ…~z~~~~zwzztppcccccc_XXURUNUXRRRNNKKGKGKD=DDADDKND=3===DDADDDAA==A=GGGKNKKNUU\\\\\XUXXKNNGKGGGDAAAADGDDGGGGKKNRRNNNKKKDGK=DGG=6DDDAA======:::::,,,,,,,,,,,,000000000000000036==DDDAK=A6::::666DAAADGKRNRUUUXX\\___\\\X___\\\\\_cc_cc_c_ccfccfiipmpmmiifcc___\XXRRUURRNRRNKKGDDDAA=A=AA=ADDGGGKKNNNRRUXcffiittt‹’™œ œ£ œœœœœœ™œ™–™œ™™™™œ™œ™™™œœœœ™™™–™–™™œœ £§£§§§£§§££§£ œ£œ   œ£œ™–’’‹‹‹ˆ‹ˆˆˆˆ‹‹……~~~zztzwzzzz~ztwwzwwwwttwtttmic__\\XUXXUURRNNNNNKKNNRUUUUXXXX\___cffmtwzttpic_f___\\___c_ff_ffmiimppttw~zz~z~zzzz~z…………~…~~~~…‹‹ˆˆ……ˆ‹‹…ˆˆˆ‹‹‹‹…‹‹ˆ‹––™–œœœ™™timippmmȨ́~…~wwpm____N==::=::=AGNKKKNGGDGGN™™™œ œœ™’’‹‹ˆˆ…~~wzwz………………ˆ………ˆˆˆˆ‹ˆˆˆ‹––œ œ £  £    £  §§œœ–‹XXUXX\X\X\X\RXUUXXX_iwwz‹‹’–’’’’ˆ‹…~~wwwttwptpppmmffc_mmpfipimimpimimwwww~~……~~zˆˆˆ‹…ˆˆ…ˆ…ˆˆˆˆ…ˆ…………~~z~~~zzzwtttc__X__\UURRRRUURNRKRNKKKGGA:GDDDDKNGA=A:AGA=DAA==::6:DDDGKGANRNXX__\XUXUKNNGKKGKDADAADDDGGGGKKKNRRNNRKNNGGGAADG::GGGDAA======::::,0,,,,,,,,,,000000000000000033:=AADAK:A6:::6:66D=DDGKNUUUXUU\\_\__\\_\X_\\\\X\__c__c_cfc__ccffiipimmmiifcc_c_\\XRRRRRNNRNKGGDGAAA=:6:=::=AADGKGGKKKRNUX_cfiittt…‹–™œœ œœ™™™™œœ™œ™–œ™™™œ™™™œœœœœ™™œ™™™œ–™œœœ££§§§§§§§§§ £    ™  œ  œ–™–’‹‹ˆ…‹…ˆˆˆˆ‹…~~zzwtwwzwwz~zwwzwwzwwttwtttpmfcc__\X\\XXUURRNRNNNRRRUXXXX\\\_cccfimptwzttmi_\c\c\_X\\\__cfccfimmmmpwwwzzz~~~~z~…ˆ………~~ˆ~~~……………………ˆˆ‹‹…ˆˆ‹‹ˆˆˆ‹‹‹‹ˆˆ‹ˆ‹––™™  œœœ–ipmtpppɅz~zz~ttmic_ccXGD=AA=:DDGNNKNKKGGDKR–™œ™œœœœ’’’‹‹‹………~~z~………~……………ˆˆ‹ˆˆˆˆ‹‹‹–’œ   £££££££œ££ §§ œ–…ˆX\XX\_\\XXRXRUUXXXU\ftz…~‹’––’–’’’‹‹ˆzzwwwwzpwpppmmcfc_impcmpmmfmpmmmpwwz~………~z~~ˆˆˆ‹ˆ‹…ˆ………ˆˆˆ……ˆ……~~~z~z~zwwtttc\\X=\RRXNNRRRURNRKRNKKKDGD=GDDGGNNKDAD:=D=:A=6::63636:=AADAKRKDU\\XUUXXNNNKGNGKGDDADDGGGGGGGGGKRRNNNNNRKDDAA=D:=GGGDDAA=====::::000000,,,,,,0000000000000000006:=ADDK==:=6:::6:AAAAGKNUXX\XX_\\_\_\\\\X\_X\\X\_cc_cc_ffcccfcfifimiiimiifcc__\XXUUURRNKKNKGDAADAA=:666:6::=ADGGDDGGGNNRX_cfimttw~ˆ‹’–™™œ™™™––œ™œ™œœ™œ–™™™™™–œœ œ ™™œ™™™œ–œœ  £§§§§§§§§§£ £  œœœœœœ œ™’–’’‹‹……ˆ…ˆˆ‹…ˆ…~~zzwztpztwzzz~zwzwzzzzwwtwwtwtpiffc__\c_\\XXUUNRRRRRUUUX\\\____cffimptwwztpmic\_X_\\XXX\\\_c__fiiiimpwww…ˆ……ˆˆ…ˆˆ~…ˆ………ˆˆ…ˆˆ‹‹‹’ˆ‹‹‹‹‹‹ˆ‹ˆ‹‹‹ˆ‹ˆˆ™–œœ  œœœ™–’zwwpt…z~zzwttpmiff_ff\XKRNGDDGGGNRKNNNGKDNU™™œœ  œœ–’’’‹‹ˆˆˆ…~z……~……………ˆˆ‹ˆ‹ˆ‹‹ˆ‹’‹™œ  £ £§££  §§ £§œœ–‹ˆ…\_\__c\\XXUUNNRXXXRXcpif‹’–––––’–ˆˆ~~~zzzzwwtwppppifff_imtfpmppcptppptzz~……………ˆ~~…z‹…‹ˆ‹ˆ…………………ˆ………ˆ~zzz~~z~~…zwwtwf_\\:URRUKKNNNRRNRNNNKGKGDAAGDDDGNNGDDA:AA:63:)030333666::AAGNADXX\\RU\XRRRKGKKGKADDDGDDDGGGGGGKRRNNNKRNKGDDDAA:=GGGDDDDAA===::::00000000000,,,,,0000000000000066:=DDN:A==6:6:36DDDDGKRR\\_\\c____\____\__\XX\\_cf_cfcfiimffcfffiiimfimiifc\\_X\XUURNKGGKGDD==A==:63663366:=ADDAAGGGKKRX_cfmpwww~……‹’–™–––’™–œ™œœ™œ™™™œ™™–œ™œœ ™™™œœ™œ™œœœ£§ªª§ª§§§§£     ™™™™œœœ™™–’‹ˆˆ~ˆˆˆ…ˆ~zwzwttwwwwwzz~wztwwwzwwptttttpificc__fcc_\cXUUUUUURXXX\\__cccffiimptwwzwtmifc\X\_XXXXU\\\__\\cfmmmppzzzˆ…ˆ…~ˆ……ˆˆ‹‹ˆˆˆ~~…………………ˆ‹ˆ‹‹‹’’’’‹‹‹ˆ‹ˆ‹‹‹ˆˆˆˆ‹’™™œœœ£™™™™’’~zztwtwzwwttpmiicicfc_\RURKGKKKKNRGRNNKNUNU––™œ  œ™’’’’‹‹‹‹ˆ…~………~…………‹ˆ‹‹‹‹‹ˆ‹‹’‹–™  £ §§££ £§§£§£ ™’‹…cc_ccc\\XUXUNRNUX\RUcmff…ˆ’––’–’’’’ˆˆ~~~zzzwzzwwtppmmiif_mitfpitmcpttttwz~………ˆ…………z~~ˆˆˆˆ‹…ˆ………ˆ…ˆ……~…~zwwz~zz~~~~~ˆ~zzttfc\_::RRRKKKKKNNNNRNNKDGGD=DGDGAGRNKGAA6A=330,%)),000336:::==KADU\\\RUX\RRUNKKNGKADGGGGGGGGGGGGKRRRNNKNNGGDGDAA=:GGGDDDDDAAA=::::3000000000000000,,,,,000000000336:DAN=A=A:=:633DDDDGNUUX\c__c__\__c_\\\\_\X\\\\cc_ccfiimpiififfimmmiiiiffc_\_\XXURRNKGDDDAD==:::6633330306:=ADAAGDGGGNU\fiptzzw~~……‹’’’’ˆ‹–’™–™™™œ–™™œ™™™™œœœœ™œœœœ™œœ   £§§ª§§§£££ ££œœœœœ™™™™™–––’‹ˆ~…ˆˆˆˆ……~zzwwpttwwzzww~wzwwwzzttmtptptpifmifffiffc_f\XXXUXUUUX\__cciifmimpmttzwwwpifc__\\\XXUXUXXX\\XX_cmiiptz~~ˆ‹ˆ™‹–‹‹‹‹‹‹‹‹‹ˆˆ………ˆˆˆˆˆˆ‹‹ˆ‹’’’’–’’‹‹…ˆˆˆ‹‹‹‹‹‹‹’’™™™™™ ™–––z~wwtwwwtpppffiffcfcc_\UUNNNNNKNNKRNNKRXUX–™™œœ œ™’’–’’’‹‹‹…………ˆ~…………ˆ‹‹‹‹‹ˆˆ‹‹™œœ££ ££§  £ª§§§§œ––ffcffc__XUXRRRRUX_UU_ffi‹––’’’–’’‹‹~~~w~zwzzwttppiimmimmftmpmwppttwww~~…ˆ………………~~z~ˆˆˆ…‹……………………………z~wzttzzzz~~~z~ z~ttff__::NRGGGKGGKKKKNNNNDGDAADGDG=KRKGG==3=:3)"%%)),,0033666:==KAGR\\XRXU\URURNNNKKAGGGGGGGGGGGGGKRRRNNNKKKGGKADA:=GGGDDDDDAAAA=:::300000000000000000000,,0000000033:ADKADAD=A:336DGDGGNRXX\__cccc___cc\\\_\_X\\_\cc_ffimiptmmimiiippimiiifccc\\X\XXRRNKDAAA=A==:6663000300,6:=AAADDDDGKKU_iipwz~zzz…ˆ‹‹ˆ‹…ˆ–’–––™™™–œ™™™™œ™œ™–™œ™œœœ œ£££ª§ª§§ª££££ £   œ™™–™™––™–’‹‹ˆ‹…‹ˆ‹‹…~zzwttwtzzwwzztwwtwwwtpppmtmppmiimiiimmifci_\\XXXXXX___cfcmmmppptpwwwzzwpmif__X\\UURURUXUXRUX\fmmmpwz‹’œ£œ™™––’’’‹‹‹…ˆˆˆ………‹‹‹‹‹’’’––™–‹ˆ‹…ˆ‹‹‹‹‹‹‹’’–™™™––œ–’’’‹…zzzwtwwwpmmmfffiffccc__XXXRRRNNKNKNNNNU\X\–™–œœœœ–’––’––‹’‹‹ˆˆ…………ˆˆˆˆ‹‹‹ˆˆ‹ˆ‹‹™œ ££ £§£££§§§§££ ––iffifcc_XXXURURRX\XXcfft~ˆ’–’’’’’‹ˆ~z~~zzzwttppmmpmmpiitptpzttwwzzz……ˆ………………~~~z~ˆ……ˆˆˆ…ˆˆ……w~wwwppwwwwzzzzz…ˆz~twfifc6NKNKKDKGDKKG:AKKKGDAADDDADANRGDDAA6:30%"%%)),,0033666::=NADD\\UUXRXURXNRRRKKDDGKKKKKKGGGGGKRRRNNNNKKGKGDGA:AKKKDDDDDAAAAA==:3000000000000000000000000000000006=ANAADDA=6633DGGGKKUXU_ccfcffc_ccc__\_X\\\\\Xcc_ccfmmtwpmmtmmmmpmpmiffccc_\X\UXRRKGAAAA==:::636000,00,,36:=AAAADDKKK\cmmtz~~ww~…ˆˆ‹‹ˆˆ…ˆ‹…’’’––™™œœœ™™œ™œ™™™œ™œ    £§§§§§ª§ª§££§ £  œ™™–’™––––’’’‹‹‹‹……ˆˆ‹ˆˆ~z~zwwzwwzwzwwwwwwtttptppiwttttmmpmmmppmicic___\\\\_ccffiippptttwtzzzzzwpmifcc\_\RXUURRUNURUU\cimptzz…™ £§£œœ™™––’–’‹…ˆˆ‹ˆˆ‹‹‹‹‹‹’’’’’’–’‹‹‹ˆ‹…ˆˆˆˆ‹‹‹‹‹’’’’––™’’™’ˆ…‹~zzzttttpmmififffcfcccc\\\\UURRNKKNNNNR_\_––™™œ™™™’––’’’’‹’‹‹‹ˆˆ……………ˆ…ˆˆˆˆ‹‹‹ˆˆ‹ˆ’™™ ££££§§£§£§§ª§££––’~mfifffc_XXXURRRRXXXX_icw~…ˆ––’’‹’ˆ……~~zzzztttppppmptimttttzwztzz~~………………ˆ~~………zz~ˆ………………………~~pztttmpttttwzzzz…ˆz~wtiiic:NGKKKDGDDGGD3AKNNGGGDGAA=DAKNKDAAA363,%"%%)),,0033666::KRDAD\XURXNUUNUKRRRNKDGKKKKKKKGKGGKNRRRRNNNNKKKGDGDG=KKKGGDDDAAAAA===63333300000000000000000000000003066AK==DA=:6666DKKGKNRXXc_ciffifcfcfc_\c\\\XXX\___ccfimptttmwpppmtmpmfff_cc_\XXXXRRNDADAA==6::633000,,,,,33:=AAAADGKKN_fpmwz~ttz~……‹………ˆˆ‹‹‹’––™™œœœ™™œœ™™œ™™™œœ œ££££ª§ªª§§§§§§œ£££ œ™–––’––’–‹‹‹ˆ………ˆˆ‹…ˆ…~~~zzzwzzwwztwttwtwttwpppwzwwwppwpptptpmfifccf____cffiimmtttwwwwwz~zzzwtpmffcX_XU\URRNRNUURU\_fiptww…~œ§ªª§£ œœ™™–™’’‹ˆˆ…‹…ˆ‹‹‹‹‹‹‹‹’’‹‹‹‹‹‹ˆˆ…ˆˆˆ‹‹‹‹’’’’–’ˆ‹‹…z~~zwwttttmmmfciifffffcff____X_\RNNNKNNRR_f\\–––™™–––––’’’’‹‹ˆˆ……………‹ˆˆ‹‹‹‹’‹‹ˆˆ‹‹–™œ £§£§£§§§£££ªª§£™–’zmimcffc_XXXUURRRXXXX_mfw~…ˆ’’’’’’‹ˆ……~w~zztttpmmpptttptwwzzz~~~~~…ˆ……………~~………wz~ˆ………ˆ…~zzpwtpmpmpmttwzzzz…ˆ~ztmmmcXNDKKGGDADDDD3=GNRKGKAD=D=AAKKNG:=A333)%"%%)),,0033666=:NNADDXGXUXRRUNRNRRRNNDKNKKKKKKKKKGGKRRRRRNRNKKNKGDDKANKKGGGGDAAAAA===:666663333300000000000000000000003:=K=:A=::3333DGGKNKRX\_\ciififfiffc_\c\\XUXU\\___ccfmptwzwzpppptpmiccc_c__\\XXUURNDDDDAAA6::630000,0,0033=AADDDDKKGRcctpzz…mppp~~ˆ……ˆˆ‹‹’–™–™œœ™™œœ™™™™™™œ™    £ §£§§ª§§£££ £££ œ™™–––––’–‹‹‹…………ˆ…‹ˆˆˆˆ…~~zzzzzzwttpttptttttptw~zwzww~twwwptmimffcicffcfiimmppwtwzwzwz~zzzzwttmfc_Xc\R\RRRNRNRUUUX\ciptww~§ª­ªª§£ œ–™–œ’–‹‹‹ˆ‹ˆ‹’‹‹‹ˆ‹ˆ‹‹‹‹ˆ‹ˆˆˆ…ˆ~ˆ…ˆˆ‹‹’‹’‹ˆ…ˆ…~~z~zzzwwwwtmipifffcffffcffcc_c\imcNNNNNRRU’\\’’’–––––––––’‹‹‹ˆˆ……………‹ˆ‹‹‹‹‹ˆ‹‹’™œœ £££££§§££££§ªª  ™wificccf_X_\XURUUX\\\cmiwzˆ’’’’’‹ˆˆ……z~zzwwtppipptwwww~w~~~~……‹………………w~~~……~…………zwpptpmmmimipttwwww…~~zwmiicXRGGKGDA6DDAA3:GRRNKNADAD=AANNNG6=A330)%"%%)),,0033666::KKAAGUGURUUNRNNRURURNKNKNNNNNNNNNNNRRRRRRRNNNNNKGGGNDKKKGGGGDDAAAA====:::::663333000000000000,,00000000:AG:6=:==6003DDDGNKRUX\\cfmfifiiiff\X_XXXRURXX_\___ciptw~~twppttiff__\_____\XXXURGGDDDA=:::630000,0,0036=ADGDGGGNNUcfttz~……ˆiffpwz~z…~…ˆ‹‹’’––™œ™™œœœ™™™™™™™™   ££££££§§§§ £   £ œ™™––––––’’’‹‹‹………ˆˆˆˆ‹ˆ‹‹ˆ………zzzz~zzzwpttttwttwtwwz~~zzz~…~~zptmffmiiimimmpppwzwwzwzwz~zzwwwttifc\X_\RXRNRNNNRRRXU\cimttw~ª­±­­ª§£ ™–™™’‹ˆ‹‹‹‹‹‹‹ˆˆ‹‹‹‹ˆ‹‹‹‹‹ˆ…ˆ……ˆ………ˆ‹‹ˆ‹‹‹‹‹‹‹ˆˆˆ…~zz~zzzzzwttpipmffffiffffcfcffmitwwcKRRNURUX\’’–––––––––’‹ˆ‹…ˆ……………ˆˆ‹‹ˆ‹‹‹’‹‹‹‹’’–™œœ££££ ££££££§§§ªœ£œ’tfc_fc_fcXcX\XRUX\___fpitz…ˆ’’’’’––‹‹‹………zzzzwwttmpttwzzzz……………‹………~w~z……~…zwpppmmmiimmpptwwwt~~~zzmffcURGDGDAA6DA==3:KRURNNADAD:A=KKKK6A=03,)%"%%)),,0033666::GGDADRKRNRRNRNNRRRRRRNNNNRNRNNRRRRRURRRRRRRNNNNKGKKKGKKKGGGGGDDDAAAA=::::::666663333300000000,,,,,,,0006=K66=3::3000AAADKGNRUUX_fmiiiiiifcXU\UUURURUU\\\\\_fptz…wztptpf_c__\_\__\\XXUXUKKKGGD=::=:30,00,00033:ADGKKGNKNRXcftww~…fcfmtptz~~~~………‹‹’’–’–œ™™œœœœœ™™™œ™œ  £§££§§§§£££œ£œ   œ™œ™™––––––’–’ˆˆˆˆˆ…ˆˆ‹…‹ˆˆ‹……ˆ…~zzzzwzzttppttwwtwwzz~…~~~………ˆˆ…twpmpmmmppmppptwzzzzzz~z~~~zwwwtpic__\\\RUNNNRNNRRRUX\_fitpwz~w±´±±­ª§ œ™™™’’‹‹‹ˆˆ‹‹ˆˆˆˆ‹ˆˆˆˆ…ˆˆˆ‹ˆ……………ˆ……ˆˆˆˆ‹ˆ‹‹‹ˆˆ‹‹ˆ……z~z~zz~zzwwwmmmiiiffffififcfiipwwzztNUURXXc‹X‹’’–™™–™––’‹ˆˆˆ……ˆ‹ˆ‹‹‹ˆ‹‹’‹‹‹’’––œ §££§ £ £ £§§ª§ªœ§œ–tf__cc\cc\f\_X\U\\_ccipipw…‹’’’–’’–™‹‹ˆˆˆz~zwzzwwtwwzz~~………………ˆ……………ˆ……~……~~zzz~……………~~~…zttmpmmifimmpttwwwtzw~zz~zi___RNG=DAAA:DA::3=GRURRKGDDG:DAGGGK:==,3,)%"%%)),,0033666::DDAADDKKNNNNRNRNRNRRURRNRURRRRRRRUUXRRRRRRRRRNNNKNKGGNNKGGGGGDDDDDDD======:66666666663333300000,,,,,,3,,:G3::0660000===AGDKKRXX\ciffiific_UDURRRNRNRRXX\XX\cmwwˆz…wttmc__c__\X\_\\X\UXUNKNGKG=A==:33000,3306:=DGGKNNRKRU\cipttz~~fffipppw~zz~~~‹‹‹‹–––™™™œœ œ™œœ™œœœœ  ££§££££§£   œœœ  œœ™–™’’––––––’‹ˆ‹‹ˆˆ‹‹‹ˆ‹‹‹ˆˆ‹…~zzzwzwwttttwwzwtw~~………~ˆˆˆ…‹‹ˆ……wptptpttpwzzwz~~z~z~zz~zzzwttpmifc\\_\UXRNNRNNRNRRX_\cipmwzzw­´±­±­ª§ œ™™‹‹ˆ‹ˆ‹ˆ…‹ˆ……ˆˆˆ‹ˆ…ˆ……ˆ……ˆz~~~~…………‹ˆˆ…ˆ‹ˆ‹…ˆˆˆ…ˆz~z~~~~zwwwtimmmimfiiimiifiifptzz~~wwXUUˆˆ‹‹‹’–™™™–™–™–’‹‹‹ˆˆ…………ˆ‹‹‹ˆ‹ˆ‹‹’‹‹’’–™–™œ §£§££   £ ª£§§ª £œ™wi____\_c_c__\_U\\___ftmpw…’’’’–’–’™’‹‹‹ˆ‹z……zz~~zzwzww~zˆˆˆˆˆ‹ˆˆ……ˆˆ……z~~~…zz~……~……~~~…~~wtpimmmfiimmpttwttpttzwwzwf\X\RNKA:A==6A=666AGRRRRNKGAD=GDKKKG===,3,)%%%%)),,0033666:=DA=AADKGRKNNNNNNNNRRRUURUURRRRUUUUUXRRRRRRRRRNNNNNKGKNNKKKKGGDDGDDDGAA===:::::::66666663333330000000,3,,:G0:60330000=::=AAGGGUUX_Xccfiif_\DDGGKNKNKNUUUXUUX\ctw…ˆ™™zwpfc_cc__\UX\XXXXX\XRRRNNKGD==:66303,633:=ADKKNRRUUUX_cimppwwz~cffimpptztzz~~…ˆ‹’––––––™™œ™œ œœœœ  £ £££§£ §§    œ™  œ™œœ™™––––™™™–’ˆ‹‹ˆ‹‹ˆ‹‹ˆ‹‹ˆ~~~zzzzwttttttwtwz……………ˆ…ˆˆˆ‹ˆ…ˆwwtwtwwt~~~~~~~~z~~zwzzwpppmfff_\\\XUURRRNRRNRUU__cipmtwwt­´´±±±­ª£ ™–‹ˆˆˆˆ…ˆˆˆˆ‹……ˆˆˆˆˆ……~wzwwz~~…………ˆˆ…ˆˆˆˆˆ…ˆˆ………ˆzz~~~~wwwwpimmmmiiiiipiiimfmt…zztX…‹‹‹‹‹ˆ’’’––™–™’–’’‹ˆˆ………………‹‹ˆˆ‹‹‹’’’––œ™œ  §£§  ££££œ§§§£ª£ œ™tm_c\__\fcccc_cX\\f__cwitw……’–’’’––––’’‹‹‹ˆˆˆ…z~~~z~wtw………‹‹‹‹‹‹ˆ……ˆ…………~~~~~~zz~……~~~~z~wppfmiicifimmpptppmpptttwtUXURNKGD:AA=6A=63:=DNNNRRNDADAKGGGKDA=:,0))%"%%)),,000336::=D==DAAGDNGKKNNNNNKRRRURUUXUURUUUXUUXRRRRRRRRRRNRNNKKKNNNKKKGGDDDDDAGD====:::::::::6666633333333000000000=G,630060300:6=6==ADGGRU\UR\cffc\RAAGDGDKKGKRURUUUX\\pt…™™zcfff_ccc_\UX\UXUX\\\UXXRRNKKKKGAA:363:66:AADKKRRUXXX\_cfimmpmtifffiimmtwtzz~……ˆˆ‹’’’’––’–™œœ œœœœ œ   ££§§§£§£ œ œ™œ œœœ™™™–––––™™™™’’‹‹‹’‹‹’’‹‹ˆ~~~~zwwwttttwwwwww…ˆ…ˆ………ˆˆ……ˆ‹‹ˆˆ‹ˆ…zwzwtz………~z~~z~zwwwtpmmifcc___XXUUURRNRNRRX__cimiwtwˆª±±±­±­­§ ™’…ˆ…………ˆ…‹…ˆ…ˆ…………~~zpwwww~~……ˆˆ…ˆˆ……ˆ……………~z~~zzwwwzpmpimmimfmmppmppptˆˆˆ………~~w…ˆ‹‹ˆˆˆ‹ˆ’’–––™––’’’’‹‹ˆ…ˆˆ………‹ˆˆˆ‹‹‹’’’–™™ œ £ §££  £§ £ ££§ §§£œ™…ppi_Xcc_fccfccf\\cmc_cwfpwˆ–‹–––’’’’’‹‹‹ˆˆ~~~wztw~ˆˆ‹‹‹‹‹‹ˆˆˆˆ………z~~~~~~~~zz~ˆ~~~~~~wzttmfiifcfifiimmpmf\mmifmciKNRNKGGD=AA:6=::3:=AKKKNNKDDDDGDDKG:=:60,))%%%%)),,000336:6:A:=ADADDKGKKNRNNRNRNUXRXUXUXUUXXXXX\UUURRRRRRRRRNNNNNNNNKKKGGGDGGDDGAA===::::::::66666663333333300000003=G033006,3,,=::6::=ADDKNURNX_ccXRK==GADGGGGGNRRURRUX\mp\~™zwcccc\__c\\UXXXUU\__\X\\XXNNRNRRKGAD::=:6=ADGGKRUXXX\\\cciiiiiffiiffmmmpttzz~………ˆ‹‹‹’’––’’™™™œ™™œœœœ   £££§££££ œœœœœ ™ ™œ™–™–––™™™œ–’’‹’‹’’’’’’’…~zzwztwttptwwwz~…ˆ…‹ˆ………ˆˆ……‹‹‹‹‹ˆ~z~zw~…ˆ……ˆ…ˆ……~zzzwzwwtttpiiff_cc\\UXUUUURRNNRUX\cfimmtwz§§­­­ª­­ª£ –ˆ‹……………ˆ…~…ˆˆ~~zwttptwt~z~…~…~ˆ……ˆ…ˆˆ…ˆ……………~~~zzwwwwpppppmmpmmpttwtztˆ‹‹‹ˆˆˆ~~z…ˆ‹ˆ‹‹‹ˆ‹ˆˆ‹‹’’™™™––’’’’’‹‹ˆ‹ˆˆˆˆˆˆ‹‹‹‹ˆ‹’’–™™™  £§£§£   ££œ££§££œ§££™™…ppmf\ffcccfffcf\ffpicctipw‹’–‹––’’’’–‹’’‹‹ˆˆ…z~zwwpz~ˆˆ…‹‹‹‹‹ˆˆˆ~……z~~~~~~~z~~……~~~~~wwtpmiiifcfffffifiic\\_f_c_cGKNKGDDDAD=::=6=36ADGAGKKGDDDDDA=GDA=:,,),)%%%%)),,,00033=66A:=ADAAADDKNNNRRRRRRUXU\U\XUUXXXXXX\XUUUURRRRRRRRRNNRRRNNKKKGKGGDDADAAA===:::::::66666666333333333000003:K,30,03,0,0=:6666:=AADKKNKKU\\GDA6=DDDDDDDGKNNRNNRUXXXX___cc_\__X_\_\\XXXXUXX____c_\_XXUXUUNNKNAAA===AGKKNRUXXX\\\_cffcff\\miffmimpttz~~…ˆˆ…ˆ‹‹‹‹’’’’’––™™™––™œœ™  œ£££§  § £   œœ œ£™œ™–™™™–™™œ™–’’’’’’’’–’’–’’’…~~~zzzwtwtmwzww~~ˆˆ‹ˆˆ………ˆ‹‹‹~~wz…ˆ‹ˆˆ‹ˆ…ˆ~~zwwwwttpppimficc_\_UXUXUUURRRRRU_fimpmtz~££ª£ª§ª­§ œ’…ˆ………~………~~z…~……~~zztwtptpttzzz…z…~…‹……ˆˆˆˆ…ˆ…ˆ………~~~zwwwttppttppppptwwzwˆ‹‹ˆˆˆ~…ˆ‹ˆˆ‹ˆ‹…ˆ‹ˆ’–™–™’–’’’’’‹ˆˆ‹‹ˆˆˆ…‹‹ˆ‹‹ˆ‹’’––™œ £§§££ œœ   œ££§§£ ª §™™ˆztpiiiicfcfffffciitm_twzpw’’‹’–’–––ˆ‹’’‹‹‹‹ˆzzzzz~~…‹ˆˆ‹‹‹‹ˆˆˆ……~z~~~~~~zz~~~~~~twpmmififccccfcfccf_X\\_"_\_DGKKDDADDDD:D=D=3=ADDADGGDGGGDGDAGGDAA))),)%%%%))),,00036=66D:==AAAADDKNNNNRRRRRX\X\X\\XXX\\\\_cUUUUUUURRRRRRRRRRRRNNNKKGKKKGGAAD==A==:::::::66666666333333330030003:K000,30000,:66333:::=AADAD=KR=D==6=AADDAAGDGGKNGGNRUUURXX\\____\\\\\XXXX\XXX\ccccfccc\\X\XXRRNRGKGAA=AGKKKRRUX\\\\\_c__c_\Xpimimmmpttz~………ˆ……ˆ‹‹’’’–––––’’™™–œœœ£§§££££    £ œ   œœ™™™™–™–™™–––’’’’’––’™––––…~~~~zwwwwtwptwwwz…‹‹’‹‹ˆ………ˆ‹’‹…z…ˆ‹‹‹ˆ……zz~wwttttpmpiiiffc\_\XXXXUXXUUURRR\immptt£   §££ª œ™ˆ………~……z~~z……~~zwpwtmppttwww~ˆ…ˆˆˆ…ˆˆˆˆ……~~…ˆ…………zwtwwtpptwpttptttzz~ˆ‹’’‹ˆˆ……ˆ‹ˆ‹ˆˆ…ˆ…ˆ‹ˆ’–™™–––’’’’’’ˆ‹‹‹ˆ‹ˆ…ˆˆˆ‹ˆ‹’’’–’™ ££§§£  œœœœœ   §§££ªœ£œ–‹~wptmiicffcfffffmitp_tw~tw…’ˆ–––’–’‹‹’ˆ‹ˆ…~~z~~ˆˆˆ…‹‹‹‹ˆˆˆ…~……z~…~z~z~~zzz~~~tttmmififcc_cc\X___UUXXX"\UXD=GG=ADDDGG=GDRA6DDAA=DGDADDGDGGDGDGDD),,0)%"%%)),,,3003:=6:G===AADDDDKNNNNNRRUUX\\\\\\\\\____cfUUUUUUUUUURRRRRUURURNNNKKNKNDKADA==A==::::::::66666663333333303633036G000033000,6363066:6:====A:=D==:6:==DDD==DADDDGADGKNNNKRNXUU\\_U_X\\UUUX\X\\_cfcfifffc_X_\\UUUUUURGDAAGKNKNRUU\XXX\\__\_X\Umppmpmmtttz~……………ˆˆˆˆ’‹’’–’’’’–’’™ £§§££   œ £§    £ œ™™™™™œ™™™–™™–’’–’–™–’™–™–’‹‹~~zzwwwttwtpwwwz–‹…ˆˆ…………ˆ’’’’’’–…’‹’‹……zwzwwtttppmpmiific__\\\\XUXXXXXXRX_iiipww’ £ œ§££§œ™–‹ˆˆ~~ˆ~~~zˆ~~~~zzwtttpmppptztˆˆ‹‹‹ˆ‹‹…ˆ…~~~ˆ………ˆ……~wwzwtpttwtwwwwww~~…‹’’’‹ˆˆ………ˆˆ…ˆˆˆˆˆ…‹‹‹–’™––––’’’’’’‹‹‹‹ˆ‹……ˆˆˆˆˆ‹’–’–™–™ ££§§§  œ™œœ™ £££§§£§ £œ™~zwwppifiifffcfimipt_pw~ww‹ˆ‹…’’’™’‹‹’‹’‹‹……~~z……ˆ‹…‹‹‹ˆ‹‹ˆ……~~~~~~z~~~~~~tzz~~zpppmiifmfc_\__XXXXXRRXX\%UURA=D::=ADGKK:KNUDNGADD=ADDADGGDGGDGDKGG,0,,))"%)))0,,333A:==DK==ADADDGGKKKNNRRRRXX__X_\\\__ccccfiXXUUUUUUUUUURRRUURRURNNNKNKNDGDDAAA=A=:::::::::6666666333333306:3636:D30,,30,,,,0030066::6:3:6:666:6=::=AAAA::AAAA===ADGDDA=KKRRRXX\U_X\XRRUUX\___fffifiiifpXc__XUXXXXURDDGGNNGNNRRXXXUX\_\XXXXXpttpppptttzˆˆˆˆ‹ˆ‹‹‹’’‹’’’œ £££££ £ £££ ££££  œ™œœ™™–™™–™–™’–’’–™–™–™–––’‹ˆz~~~~~zztwttttpttwwz…‹’‹‹ˆˆˆ…ˆ‹’’––––™––ˆ’‹ˆ………~zwtwwttmpppifiifcc__X__XXX\XXX\U\cmfitzz’–    £££ ™–ˆ‹……~~…~~~zˆ……~zzzwtttppfppptzt…ˆ‹‹ˆˆ‹‹‹ˆ……~~……ˆ………ˆ…zwwwttttwwzzzwzzˆ…ˆ’’’‹ˆˆˆˆ…………………………ˆˆ–™–™––’’’‹‹‹ˆˆ…ˆ…ˆˆ‹‹’–’–™™œ  £§££ œœ–œœ–   £§£ ª££ œ’z~zwptmfmffifcimmmpwttw~wwˆˆ…’–’‹‹‹–‹………~~……ˆˆ‹‹ˆˆ‹‹‹‹…ˆˆ…………~~~~~z~z~~~~zz~wzw~~wttpmiiiiff__\\\UXUURRXX\RRRN=:=:6AADGKNKNRXNRKGDDA=GA=AGKDDDGGGKGK03)0))"%,),0006=6N6:AGG=ADADGDGGGKKKNNRRR\Xc_\____ccffffim\\XXXUUUUUUUUURXURURRRRKKNNKGGDDAA==A=:::::::::666666633333360::633::D30,,0,,)),3330,366636363363666:==AAD========::==AA:==6D=GKGUUXUcXXUNUXX\_ccfffiififiit\fc_\U\\\\XUURNKRKGNKNRUUURUX\XXUUUUtwwppttttwz………ˆˆˆ‹‹‹’‹‹‹‹…‹‹‹‹‹‹‹’™œ£ ££££££££ £££§££œœ– ™œ–™––’–––’™–––––––™™–’ˆ…zzz~zz~zwwtttpptwtt~…’–’ˆ…‹ˆ‹‹’’’–––™™™œ™™’‹ˆ…………~…wtwtttpppmmiiiffcc_\__\\\\\\__X_fmiipw~–™ œœ     ™’ˆˆ…~~……~~z……~zzzwttpppimpppzw~ˆ‹ˆ‹‹‹‹‹ˆˆ…z…ˆˆˆ…ˆˆˆ…zzzwttwwzzz~~…ˆ‹ˆ‹’’‹ˆˆ‹‹ˆ…………ˆ………ˆ……ˆ‹’‹–™™––’’’’’‹‹‹ˆ…ˆ…ˆˆ‹’––™™™œ£££§   ™™–™™– œ  §£œª§ £œ–ˆ~~zwwpimffiicfmmptwwtzwˆ…‹‹…‹’’–ˆ‹ˆ‹ˆ–’ˆ………ˆ~………ˆ‹‹‹‹ˆ‹‹‹ˆˆˆ……………z~~~~z~zz…~wzzzzzzzzwtpppmmmfcccX\XUURUNUXX_UNNK36=::=AGGKRNRUXRUNKGG=AD=A=DKAAADDGKKG36,60,)%),,033:A6X:=DDDAAGADKDGGKNKNNRRRU\Xc__ccccccfiiimp__\\\XXXXXUUXXUUXUUURRRKKKNKGGDDD=====:::::::::66666666663363A6=:63=6G0,,,0,,,))336306:3330333330333:===AD=::::=6666::666666::AAAGKUX_\XRNRX\__cfiiiiififiit_fc__X\\\_\XX\\XXKKKKNRRRURRXXXUURURttttttwttz~~…ˆˆˆˆ‹ˆ’‹‹‹ˆ……ˆˆˆˆ‹‹’–™   ££££§§§£§§§§§£  ™ ™™’–’–’–™™’––™––™’’––’‹…zpzzwwzwtwtttttttwwzˆ––™–’’’‹ˆ‹‹‹’’’’–––œ™œ––‹ˆ‹…ˆ‹ˆˆzwwpttpppmpmiiiffff________cff_ciimmtz~–™ ™œœ œœœ–‹ˆ………~……~…~~~z~wttttppfpmttzz~…‹ˆˆ‹’’’ˆˆ…~ˆˆˆˆˆˆ‹z~~zwwwz~~~…ˆˆ‹‹’ˆ‹ˆˆˆˆ…………………………ˆ……ˆ’‹’™œ––’–’’’’‹‹ˆ‹‹ˆˆˆ‹‹‹’’––™™™œ£££§œœ ™™–™™™ œ£££§™§£ £ œˆzzztmmfiifcfmppwzwp~zˆ…ˆˆˆ…‹’–‹ˆˆ‹’’’…ˆ……ˆ……ˆˆˆˆ‹‹‹‹‹ˆ‹ˆˆ……z~z~z~~z~z~zwzzwwwwzzwztptpppffcf\X\UXURNX\\_UKGD33=66:AGGNRRUUXUXRNKGADD==AGKDD=AGGKGD630=3),3)003:=:DD\::ADA=ADAGNDGKKNNNNRRUXXXf_cffffcffmmmmpc___\\\\X\XXXUXUXUXURRRKKKKGKGDDD=====:::::::::66666666663333=3==63:3K,,0,,,)0,)33360663300003333633=:A==D:::=::6:636:33333336::AAGNU\XXRNRUX__cfmmmmiimifftcfc__\\____\\____KKNKNRRRURRXXURUNRNtwtwwwwww~z~~……ˆˆ‹ˆ‹‹‹’‹ˆˆ……………‹ˆ’™œ œ   £§§§§§ªª§ª§  œœ–––––––™™––™™™–––’’’‹ˆ~wtwwpwzwttptttwwtww~…™™œ–’’–‹’’–––™–œ™ ––’’™™–»–»Âňzwwwttttmpmimiiificcccccfffiiciimpppzz™–œ™™™œ™–™’‹………~~ˆ…………zzz~wttwptpipmttw~~ˆˆ…‹’’–’–‹………………ˆˆˆˆ‹ˆ‹~zzwwz~…ˆ‹‹’’‹…ˆ……ˆˆ………ˆ……………ˆ…ˆ‹‹’–œ–––’’–’–––‹…ˆˆˆˆˆ‹‹‹’––™™™™ §£££œœ ™œ™œœœœ™  ££œª ££  ’‹ˆ~~wtmimiifimmpwwtpz~~………ˆˆ…’‹‹ˆˆ‹ˆ…ˆˆˆ~~ˆ………ˆˆ‹‹‹‹‹ˆ…ˆ~~…~~~~~~z~z~zz~~w~~z~~z~wzztwtwwzw~wwwtptpfcc_\\UXURN\\__RA=D36=6::=GKNNRXUUXXRRNKDGDAADGGGG:=DDGD6:06A6=0G0:3==ADGG_D==DDAKGAKKGKGKNKRRNRRXX\fcfiiicffimmmptcccc_\__\\\\\X\UXXXURRRNKKKGGGGDD======::::::::66666666663333:3=::060G0,,0,,),))33363366303030003366::A=AD==:=::66333663633666::=:AKRRUURNUUX__cipmpmmmpmifpfcc__\_cccc__ccccUNRKRURRRRRUURNRNNNwttwzzzwz~~~~ˆˆ…‹ˆ‹ˆ’‹‹……~~~ˆ…’–™œ–œœœ §§££§§ªªª§ £œœ™––––™–™–™–™™™™’’’‹ˆ~~zttttptwttwptttzwwzzz…œœœ––––’–’’’––––™–œ™ –––œ §£ ±¾¾»¾ÉÉÉzzztwwttpmmimimfmffcffcmimmmfmmmttwz~–’œ™œ™™––ˆ‹…………~…………~~~zzztttwptmmpmttwz~~…ˆ…‹’–––’ˆˆˆ………ˆˆˆˆˆˆ‹…~~zzz~…ˆ’ˆ………ˆˆˆ……………ˆ………ˆ……ˆ…ˆ‹’–™–––’’––™™–‹…‹ˆˆˆˆˆ‹‹’’––™œœœ£§£££œœ œ™œœ œ™œœœ£§ §£§£££––’‹…~wwpimmmimpmmttwpzz~……ˆˆ…’‹‹‹‹‹‹…‹…‹‹ˆ………‹‹ˆˆˆ‹………~~…~zzzzzzz~~w~~w~~w~~z~wzztwwwwzzzzz~twticcc__XUURU\___N:=A33=6::=DKNNRURUXURUNNGGDDDGKGDD=:AAD),6,=DAA3N3D=RA_NGG\XUDKRANKAGKGKDKNKNNNURX\\cfiimmfffmmpmptffccc_c___\__\\X\XURRRNNKKKGGGGDD:=::::::::::::6666666666333333:6:000D0000,,))))63666:6360306300366:====AAA=::::::6366666636:666:6AGGNRRRNRUU__fipppmpmpimimfcc\__ccccc__ccffXUUNRUUURRRRURNNNNNtwwz~~zz~~~~~ˆ…ˆˆ…ˆˆ‹‹‹ˆ~~zzzz~~……‹‹’’–™’–™™œ££ ££§§§§§ £  ™–’–’™™™™œ™™™™–‹ˆˆ~wwmtmtptwttwtpttwwz~zz œ ™™™™–’–’’–’’––™™œ™œœ ™œ™§ª±´´¸¾Â¾ÂÉÉÉÉ~zzzwwwppmmmimiiffffmpppzzpwpmmpt…‹’’™–™––’’‹ˆ…………………ˆ…~~…~zzzzwtwtwttpppmpptwzz…ˆˆ’–––’’‹ˆ…ˆ………ˆˆˆˆˆˆˆ~~z~~~………‹’’’’’’‹…ˆ…ˆ…ˆˆˆ…………ˆˆˆ…ˆˆˆ…ˆ…‹’–™™––’–™™œ™–’‹…‹ˆˆ‹‹‹‹‹’––™œ œ £££   œœœ–œœœ ™™œœ£§£§§££ £œ™–ˆzzppmpmmpppptwtpzwzw……ˆ…ˆ’‹’‹‹‹‹‹ˆˆˆ‹‹ˆ…~…‹ˆ…ˆ…ˆ…z~z~~~zz~wzzt~~wz~t~z~wzwwwwwzzz~~~zzzpffcc_\XXUX\_c£G=:=33=:66ADKKNRRNRURNURRKKGGGGGGDA=3:=A%))0NGKRRRNNUU\cRKG\XUGNUKRKDDKGKAKNGKNRRRX\Xccffmiifimmpptwfffccccc_c__c_\\\XURRRNNNKKGGGGDD==::::::666:::::66666666333333666330A00000,,,,,:36:6=663333300063:=:A=A=AA=======6633:66:6==3:6:6=DAGNNRNRRU__cmmmmmpimimffccc____ccccc__ccf\XURUUUURRRRRRNKNKNtwwz~~~~~~…………ˆ…ˆˆ‹ˆˆ…~zzzzzzz~…ˆ‹’’’’’––    ££§§ªª£§£ œ™–’––™™™™–™–™–’ˆ‹ˆˆzzwmpmpmttptwtttwtzz~z~… œœ™™™––’–’’’–’–™™œ™™   œ£œ±´´¸¸»¾ÂÂÅÉÉɱű~…zzzttpppimmmiiiipttz~~~zwpwtzˆ’–’–’’‹‹ˆ……ˆ………………ˆ……~~~…~~~~zzwwtttptpmppmptwz………’’––––‹ˆˆˆˆˆˆ‹ˆ‹ˆ…ˆ…~~~~……’––’’’’’………ˆˆ…ˆ…ˆ……ˆˆˆ‹ˆ…ˆ‹ˆ……‹–™™™–––™™œ™–’‹ˆ‹ˆ‹‹‹‹‹‹–™œ £  £ £œ  œ™œ™œ œœœ–™œ £££§ £££ œ™‹…~zwttpmppmtpttwpzwzw~…‹ˆ‹’’’’‹‹‹‹‹‹…ˆ‹‹…~~……‹…ˆˆ~zz~~zz~~wzztzwtzzzztz~~~z~zwzz~~~~…………~wifffc\\XX\\_R£==:=36=6::ADGGKNNKNDNKURUKNKKGDDDAA:0::0),)3KGNUUUXRXX__UNK\XURRRNRKGGKGGAGKKNNNUUU\Xcccfiimiimmpptwiffffcccc__cc____XURRRRNNNKKGGGDD::::::::6666666666666666333333666060=00003,,,,,:3:::A6:6636333336::=A:A==A===::==::66:::=:A=:63::=AADGKRKNUU_\_iiiiimfificf____\__c__c_____c\\URUXUURRRNRNKKNKKwtzz~~~………………ˆ…~~wzzwzwz~~ˆˆ’’’’’’’––œœ££§ªªª£££  ™–––™™œ™™–™™––‹’‹ˆ…ˆwzwptptptwtwwwtwww~z~~ˆ  ™–™™™–––’’–™–™™™œœœ    §­´¸¸»»¾¾¾¾ÅÅÅÉ´¸­ªªªª wtttipmpimmmtww~~…‹zw–’’––’’’‹ˆˆˆˆˆˆˆ……ˆ………ˆˆ…z~ˆ……~~~zwtttttpipmpptwz~ˆ‹’––’‹‹ˆ‹ˆ‹‹‹‹ˆˆˆ…~…~~~…ˆ™––––’–’’–ˆˆˆˆ‹ˆˆˆ………ˆˆˆ‹…ˆˆ‹ˆˆ…‹’’’–™™™™™œœ œ™–’ˆˆˆ‹ˆ‹ˆ‹‹–œ £   £  œ œœœ™œœ ™œ ™™    §§œ££ £œ™–ˆzzwwtpppptpttwpzz~wz…ˆ‹ˆ’’’‹’‹‹‹‹…‹‹‹…~~……‹…ˆ~ˆ~~z~~~zzzzwzwp~ttzwww~t~~~~~z~~ˆ………ˆˆˆzwppffc\\\\\_RUAA=A0:A::==AD=GDDGDAKGRNRGKGGDA=A==:3663)0,6GDRXXX\U\\\\RKXXUUUURRNKGGGKGAGKNNRRXXUX\cccffiimimppttziffffffcccc_c_c_cXXURRRNNNKKGGGDD:::::::::::6666666666666333333333360:03000000,,=:===A:=6636663336==A==A==A=::6:====666====D===6::=AAADGNNRUX_X\ffffficfcfcc____\\___\c\\_\\XXXUUUXUUUNRNRNKNKKKwz~~…~………………zzwwzwzwz~~~…ˆˆ‹’’’’‹’’™ ££ªªª£§   –––™–™™™™™œ™’’’‹ˆ…ˆw~wtwpttwwttwwwwzz~~…‹ œ™–––œ–––––––––™™œœ £  £­´¸»¸¾»¾¾¾¾ÂÂÂÉ´±±­ª§§£’…zwwpppmmmmmpzz~…ˆ’’’’–’–’–‹…ˆˆˆˆ‹‹…ˆˆ………ˆˆ…zz……ˆ~zwwwttppmpppppzw~~…ˆˆ‹‹’––’’‹‹‹‹‹‹‹ˆˆ……~…ˆœ™™––’–’–’™ˆ‹ˆ‹‹‹‹ˆˆ……ˆ‹‹‹……ˆ‹‹ˆˆ‹’’’’™™–œœœœ  ™–’’ˆˆˆ‹ˆ‹‹‹‹™œ££ £££  œœœ™™™œœœ™™ œœœ  £££™   £™œ™…z~tzwpptppptttpz~z~~…‹‹…’’’‹‹‹‹ˆˆ‹ˆˆˆˆf…~~…ˆ……ˆˆz~wzzzzwwzzztw~pzzwtw~w~~~~…………ˆ…ˆˆ‹‹ˆ…~ztzmifc_\tf_RUDDAA0:===::=A:D=AAA6D3:A3D00DA==:::66%30,003DA_\X\_XX\XXRK\XXUXUNRNGGGGGKDGKRRRNUXUX_c_fififmmpppttziffffffffcccc___c\XUUURNNNNKKGGDD::::::::::::666666666666333333333030:0033333,00:=AADA==:63366636::==A=A=AA:=::6=:=A66:==AADDAA::6===AADKNRUU\U\cccccc_c_c__\___\X\\c__\\_\UXUUUUUXURURNRNNKNKKKw~~…………ˆ…………~…~zwwwwwzwz~~~…ˆˆ’‹‹‹’œ £§ªª£§œ œ™™™–™–™™™™™™––’’ˆˆˆˆzzwwwttwzwtwzwz~~ˆœ™™–’–™–––––––––™œ   ££ª§±¸¾»¾¾¾¾¾¾¾¾¾¾ÅÉ´±­­ª£ –ˆ~zztttmmmpptzwz~…‹’’–––––’’–’–’‹‹‹ˆ…‹ˆˆ‹ˆ…ˆ…ˆˆˆ……~zˆˆ‹…………zzwwttpppmtmtwwzz…ˆˆ‹–––’’’’‹‹‹‹‹…ˆ……~…ˆœ œ™™–’™–™–™‹‹‹‹‹ˆˆ…ˆ‹‹ˆˆˆˆ‹‹‹‹’’’–’–œ™œœ œ  œ™–’‹‹ˆˆ‹‹‹‹œ £££££££ œœœœ™™™œ™™™ ™™™œœ£§ œ£  £œœœ’ˆ~w~tzwpptptptwppw~wˆ‹ˆ’’’–‹‹‹‹‹‹ˆ‹‹‹‹ˆ‹ˆf…~~~~…ˆ……ˆ…ˆwzzw~zzwzzwzpzp~~zwz~w~~…………ˆˆˆˆ…‹ˆˆ‹ˆ~~~tpif__z£cUKKGG:===A66:=6=:=6=6:3:6300033,::63)3)33003:ADc_U_\\\\X\RR_X\UXUNUNDGDDKKGKNRRRRUUUX_c_fiimfiptptww~fffffffffcfccc__c_XXUURRNNNKKKGDD::::::::::::::::66666666333333333333=3330663,03=AGDGDDA=:63:3663:==:A=AA==:===:====:::=AAAGGDGA=:A=ADADGKUURXR\\__\__\__c\_\____\\\___\X\XUURUUURUUUURNNNNKKNKKz……ˆˆˆˆˆ……………~~~~~zwwwwz~z~~~……‹’’’‹ˆ‹ˆ‹’™œ £ªª§§ œœ™™™–™™™–™™™™–––’‹‹‹ˆ‹…~~zwzwzwz~zw~zw~…………‹’™™™™–––’–’––™™™™™™ ££§§­­´¾»»¾¾¾¾¾¾¾¾Â¾Âű´ª±ª§ ™zwttppmpttwwzz……‹’–™–™––––––’‹…ˆˆˆ‹ˆˆˆ‹ˆ……‹………~~ˆ‹‹ˆˆˆ……~zzzwttptpptwzw~~~…ˆ‹‹’––’’’’’’‹‹‹ˆ‹ˆ…ˆ§ £ œ™™–™™™–™’’‹‹‹‹ˆˆ‹ˆˆˆ‹ˆ‹’––’’–––œœ™œ œœ ™™™’ˆ‹‹‹‹‹‹œœ £ §£§£œœœœœ™œ™œ™™™œ™œ– œ§§£   £§ œœ–‹t~w~wtptptttwttz~w……‹‹‹’‹–––’‹‹‹‹ˆ‹‹ˆ‹‹…f…z~~~~~ˆ…ˆ…ˆwzzwzzzwzztzt~~p~~zz~w~…………ˆˆˆ…‹ˆˆ‹ˆ~~…ztmici…£££UUNKK=AAA=::6:363=6:633:3300300,6660)0,00006=AG_\X\X\\XX_RU\\\RXURUKGKGDKKGKRNURRUUXXcccimmpiippptww~fffffffffccccfccccXXUURRNNNKKKKGD::=::::::::::::::::::666333333333333:3363363636AGKGKGGDA=63=03:36A:====AA::=:::=A:=:AAADDDKKGKDGGDDADDDGKRURUNXXX\X\XXR\c_c_cc__\\\\__\X\XURRXRUUXXXUUNNNNNKNKK~……ˆˆ‹‹‹‹ˆ…………ˆ……~~~~~~~zwwwww~~~~~…‹‹‹’’ˆˆˆˆ‹œ£ ªª§£œ ™œ–œ–™™–™™™™––’–‹‹‹ˆ…~~z~z~~~zz……ˆˆˆ––™™œ™–™––’–––™™™–™œ§§ª­±±´¸¸¸¾¾¾¾¾¾¾¾Â¾¾Â´»±±­ª œ’……~wwttppppptz~z……‹‹––™–™™™–™™–’’‹ˆˆˆˆˆ……ˆˆ~…ˆˆ……~…ˆˆˆ‹‹ˆ~~zzwwtwttw~~w~~ˆˆ‹‹’’’’–’––’’’’’‹‹ˆ………………£ªª£§  œ™™™™–™™–™–––’‹ˆ‹‹‹ˆˆˆˆ‹–––’’™–™œ œœ œ œ™––‹ˆ‹ˆˆ‹‹‹’œœ££££££§ œœ™œ™™™™™™–œ™™™ œ§ª§££ ££ œœ–…zzzwwptptttwttwz~ˆ‹‹‹––’’‹‹‹‹ˆˆˆ‹ˆfzz~~~z~………ˆ……zz~wwzzwwwwzw~~p~~z~z……~………ˆ………ˆ…ˆˆ……~~…~w~if~£££§£cRNRGDAD:=6:6033:33633:30000,,,3330),0,,00:ADK\\\XX\\X\_UX\\\UXRRUKKKGDGGGKRRRRRXR\Xcfffmmpmippptww~ifffffffffccccccfcXXUURRRNNKKKKGG::::::::===:====::::::::663333333333=3663066=6:GKNKKKKG=A:6=33636=:::::=D=:=:==AA===DDDDDGNNKNGKKGGGGGDGGNRNRNNUUURXUURX__fcff__\\\\_\\X\UUNRURUUXUURURRRNRNRNN……ˆ‹‹‹‹‹ˆˆˆ…ˆ…ˆ……~~~~~zzwwzz~…ˆˆˆ‹‹’’‹ˆ‹‹‹’œ£ §ª§£ œ™ ™™™™™™–™™™™™’’‹‹‹ˆˆˆ……………ˆˆ…~…ˆˆ‹‹‹™™œœ™™™™’––’™™™™™––™§ª­±±´±´´´»¾¾¾¾¾¾Â¾¾Â¾¸¾´±ª­£ –’ˆzztpppmptwwz~…‹’––™™™–™––™’–ˆ…………………~~……ˆ~ˆ…ˆ‹‹‹‹……~~~zwtwwwzz…‹‹‹‹‹–’–––™™–’–––’‹ˆ‹ˆˆˆˆ…ˆ§ªª§§£  œ™œ™–™™™™œœ™ –’‹‹‹‹ˆ‹‹‹’’’––™––œ™™   œ œœœ––’’‹‹ˆ‹ˆ‹‹’™œ£££ £§§£ ™™œ™™™œ™œ™œ™œœœ £ª§££ £   œ–‹…~~z~zztwpttwwtzt……‹‹‹’’––’’ˆ‹ˆ‹’‹ˆ‹‹ˆfz~~~z…………ˆ…~z~zwwzzwwzzzz~w~~~~~ˆ………………ˆ……………………zp££££££fRRUKA=G:=663333663633630000,,,,)00,)00,36=DGNU__U\_\\X\XX\_XXUNRUGKKGGGDGGRRRNR\RX\cccimmmpippttwzfffffifffffffcccff\\UURRRNNNKKKGG==:::================::===6666633333:3::63:6A::NRNNKKNGDA=::36336:66366=D===AAAADGA=KGGDGGKRNNKKNNKKGGGGDKRNKKKRNRRRRRNU\ciccf\_\__X\XXXXURNRRNRRURRRRRRURRRURR…ˆˆ…‹‹‹‹‹‹‹ˆˆ…………ˆ~~~~z~z~~…~……ˆˆ‹‹’’’‹ˆ‹ˆˆ’œ  ªªª§£ œ ™™œ™–™™––™™––ˆˆˆ………………ˆˆˆˆˆ‹‹ˆˆ…ˆˆ‹ˆ‹‹’–œ  ™™™™’™––™™–™––’–£§±´­±­±±­¸¾¾¾¾¾Â¾¾¾Â»»»¸±±±§£™–‹…~~wwttpppww~~……‹’–’™œ™™––––’‹‹ˆ……~~~~~~………ˆˆ‹ˆ‹ˆ……~z~z~zz~…~ˆ……‹‹‹’‹™’–™™œ™œœ™™™–’‹‹‹ˆ…ª­ªª§££ œ™œ™™™œ™œœ œ£œ–’’‹‹‹‹’’–™™™™ ™œœ£ œ  œœ’–’‹‹…ˆˆ‹ˆ’–™ ££££££§  œ™œ™™™œœ ™ œœ  £ §£ §£££  œ™‹ˆ~~~~~wztwtw~t~ˆ…ˆ‹‹’’–’’–––’‹ˆ’‹‹f…z~zz………ˆ…~zzzztzwwwzz~z~zz…ˆˆˆ………~…~…………~~…ˆ…~…t££££££cURXNAAD==::6603330633630000,,,0),00)3006:AGKNRc\X\\X_\\X\\_U\RNRUKKGGGGGGGRNUNUXRUXcfcimimpmpptwwzfifffffffifffffcff__UURRRNNNKKKGG==::==========AA==AAA==AAA=====66663=366:6:AD=ARURNNNKKG=A6:36306633333:A=A:DAGGKKKGNKGDKKGNRRNRRRNNKGKGAGNNKGGNGGNNRNNRX_fc_cX_X\\UXUUUURNNNNKNNRNNNNNRRRRUXUU……ˆˆ‹‹‹‹ˆˆˆˆ…ˆ…ˆ…~~~~……………ˆˆ‹‹’’’‹‹‹ˆˆ‹’–   §ªª§££ œ–™™™––––––––’’‹ˆ……ˆˆˆ…ˆˆ‹‹‹‹‹‹‹ˆ‹…ˆ––™  £œ™™™–™––™™–™––’–™£­± ­§­§ª±»¾¾¾¾¾¾Â¾¾»¸»´´´±ª£™–‹ˆ~~zwwtttzzˆ…ˆ’’–™™–’’––‹‹ˆ……~~wz~~~~~z~…………ˆ‹‹‹’‹ˆˆ…~~~…ˆˆˆ‹’’’–––œ  œ  ™™™™–’’’–™œª­­­ª§££œœœ™™™œ™œœ£ § ™–’’‹‹‹‹’’’™œœœœ œ œ£œ £œœ™’’’‹‹‹…ˆˆˆ…™œ££§§£££§ œœ™œ™–™™œœ™œœœ    § £§ ££ œ™™‹‹…~~~~zwztwz…ˆ~ˆ…‹‹–’’’–’’’‹‹’’‹fˆz…~w~……………~w~zztwtwzww~w~~t………~‹ˆˆˆˆ…~~z~z~~~~zˆˆ~~…££££££cXU\KADDAA:::3,033,633630000,,,,)0,0,3,3:=AGKRX_\X_X\_\\X\_\U\NRUUNKGGGKGKKRNUNUXRX\_f_iifmmmpptwwziiffiffffiffffffffc_UURRRNNNKKKGGA::=======A=AAAAAAAADAADDDAAADD====A=63::=ADG=D\XXURRNKKDA=:03003663033==ADAGKKKNNNKRNKKKNDKRURUUURUNNRKDGKNKDGGGGKGNKKNU_c_\_U_UXXRNRRRRNKKKGGGKKKKNNNRUUUX\X_…ˆˆˆ‹‹‹ˆ‹‹ˆˆˆ…ˆˆ………………………ˆ…ˆˆˆˆˆˆ‹‹’‹‹‹ˆˆ‹–™  £ª­ªª£  œ™™™œ’™––’––’’‹ˆˆ…ˆ‹‹ˆ‹‹‹‹’‹ˆ‹–’™™œ ££§ ™™™–––™–™–––––––œª œ£   £­­¸»»¾¾¾¾¾Â»¸¾´¸¸±­£––‹~zzwwwz~…ˆˆˆ‹™––’’’’’‹ˆ~~zwzzzzzzz~………ˆ’’‹‹‹‹…ˆˆ………………ˆ‹’–’–™™œ ££ ££œœœ™™–’’’’’™œ£ ª­±­ª§§£œœœ™™œœœ  §£§£œ™’–’‹‹’––––œœ  £ £££  £œœ™’’‹‹‹ˆˆˆˆ…‹–œœ§£§§££§£ œ œœ™™™™œ ™œ    ££§£££   œ™™–ˆˆ…~…~z~t~……ˆ…ˆ…ˆ‹ˆ‹’’’–’––’‹’’’’’’fˆ…………z~………ˆ…ˆ~z~zztztwzwwzz~~ˆ………‹ˆˆˆˆ~z~wzzz~~~z~~…ˆzzt£££££w_XUXGGGDAA:6=300030633630000,,,,),,,)006:ADKNR\_\\c\_c\X\X_XXXNRUUNNKGGKKKNRNRRU\UU\_fcfifiimpptwwzifiifiiiifiifffiif__XURRRNNNKKKGG=::A=====AAAAAADADDDDDDGGGDGGGKDDGGKAAADDDGANAG_\\XUURKNGAA6:3006330,30=:DADDNNNRRRNNRKNGNGNNUUXUX\XXUUNGKKKGDGGGGKGKGGNR\U\X\R\RRRRKDNNGGGGGADDGGGGKKNRUXX\_\c…ˆˆˆ‹‹‹‹‹ˆˆˆ…ˆˆˆˆˆˆ…ˆ…ˆ………ˆ…‹ˆˆ‹‹‹‹‹‹‹‹’’’™™ £§ªªªª§££™œ™œ™––™™’’’ˆ…ˆˆ‹‹‹‹’’–’’’’’–™™œ£§££§§ª£œœœ––™™––™™––™––™™––™™™œ £­±´¸»¾¾¾¾»¸»»¸¸´±­£––‹ˆ…~~zz~~…ˆˆˆˆ‹‹‹–’’’‹‹……zzzwwwzz~ww~~~…ˆ‹‹’’ˆ‹ˆ‹‹…ˆ…………ˆ’’––™™£  £§§££   œœ™™––––™œ §§­±±­ªª§£œœœœœœœœ£§£§§£™™’’’’’’––––™   §££§§§   œœ™’‹‹‹ˆ‹‹ˆ……ˆ™œ §£§§§£§£œ™ ™™–™™–œ œœ   œ££§££££ œ™™™’‹ˆˆ………~ˆ…ˆ…ˆ‹ˆ‹……ˆ‹–’’’’––’’‹’’–’–’–fˆ………ˆˆˆ~……ˆˆ…z~zzwztwwwwzw…ˆ…ˆ…’‹ˆ‹ˆ…~~zww~wwzz~z~~~z…w~~icp\i£t\\UXNKKDD=:6:030,0,633630000,,,,)),)),3:=AGKNR__\\_X__X\\U\UUURUXUNNKGKGKNNRNRRRXXUX\cffifimmpptwwziiiifiifiimmiifiif_c\XURRNNNKKKGG:=:=====AAAAADDDDDGGGGGKKKGKKKNKKNNNKNNNRKKNRRGc__\XXUNRKKDD=6,3303300,:=DAGGNNRRRRRRRNRKKGKRUUXUX_m_\XRKNKNGGGGGGKGGGGKKXRRRUNXRNNNGA:ADDDDDAADDGDGGKNRX\\\__f……ˆ…ˆ‹‹‹‹ˆ‹ˆˆ…ˆˆˆ‹ˆ‹‹ˆ‹ˆ‹ˆˆˆˆˆ‹ˆ‹‹‹‹‹‹’–’’–™–œ ££ª­§ªª§§§œœ™™œ™™––’’‹‹‹ˆˆˆˆ‹‹’’’––––––’–™ §§ªª§§ªªª§ œ™™™œ™–™–™––––––™–––––™œ ª­´´´¾»¾¾»¸¸¾´´±±ª ’’‹……………~~……ˆˆ……ˆ‹ˆ‹‹‹‹‹‹‹ˆˆ………~zwzwwwzw~wwz~~………ˆˆ’’’‹‹’‹…………ˆˆ…ˆ‹‹™–œ£ œ§£§§§§§§  £ œ™™™™™™œ££ªª­±±­ªª££ œœœ™œ  §ª§§ª§–™–’’’’’––™–™–œ £ ª§§ªª§   œœ–’‹‹ˆ‹ˆˆˆˆˆœ™£§§£§££££ ™œœœ™™™–œœœœœœœ™  £ £   œ™™–’ˆ‹……ˆ………‹ˆ‹ˆ‹‹‹‹ˆˆ‹’–’’’––’’’’’’–––––’f‹ˆˆˆ‹‹……ˆ……~……z~~~wwttwwtzt…ˆ…‹……ˆ…‹ˆ‹ˆ~zzwwzttwtzwz~~zz~z~wtzmff\\\fp__X_RNGGD:6::03003)633330000,,,,)),),03:ADGKNR__\__\_\\\XRXRXXUUUXNRKGKGKNKRRRRRUUXXXcccfffimpptwwzimffiiifiiimifffii\__UXURRNNKKKGG:::====AAAAADDDGDGGKKKKKKNKNNNRNNRRRNRRRURRRUURf\\\\\XNRGNDGA6,603600006:AAKKNNUUUUUUURUNNUKUUUUU__zc_URNRKNGKGGKKKGGGGKKUNNNRKRNKKD::66:=A=A=AADGGKGNRUX_\\__f……ˆˆ‹‹‹‹‹ˆˆˆˆˆ…ˆ‹‹‹‹‹‹‹‹ˆ‹‹ˆ‹‹ˆ‹‹‹‹‹‹’––––œœ  ££§§ªªªª§££  ™™™™––’’‹‹‹‹ˆˆ‹‹ˆ‹’’’––™–™™™™™  £ªª­­ªª­ªª§£ œ™™™™–™’–™–’––’–––’’––™£§ª±±±¸¸´¸¸»´¸´±±­ œ‹ˆˆ…ˆ………~……ˆˆˆˆˆˆ‹‹ˆˆˆ‹‹ˆ……~……~zzwwwwwzzzzz………~’’’’ˆˆˆ…ˆ‹‹ˆ‹–’œ™ª§£ªª­ªªªª§ª£ ££ œ™™™œœ §§ª­±±´­ªª§£    œ ££ª­ªªª§’–––’’’–’–––œ™œœ £§ª­ªªª§£ œ œœ–‹‹‹‹‹‹‹…‹ œ£§ª£§££§£œœœ œ™™™–™œœœ™™™–œœ   œœ ™™–’’‹ˆ………………ˆ‹‹‹‹ˆ‹‹‹‹‹‹‹’–’––’’’’’’–’–––’f‹ˆˆˆˆ………ˆ…~ˆ…~~z~zwppttpXt…ˆˆˆˆˆ…ˆˆˆˆ…zwttwpptptppzzwzzzwwpwmcc\X\cmcc\cURKDG=::636,00,633330000,,,,)))),36=ADGKNR\c\_____\XUXUUX\XXXXRNNGGGKKGRUUUURRXU\c__cffimpptwzzimifififiiimiiffif\__XUURRRNKKKGG=::====AAAADDDDGGGGKKKKNNNNNRRRRRUUURUUUXUUUXXUf_\\\\XKRKNGDA60300300,036A=GGKRRUUXUXXUXURXUXXUU\cf~fmURRRRRNNKKNGGGGGGGGNKKKNKNKG=A663366:6:==ADGGNKNRUX_\\__c…………‹‹‹‹‹ˆ……‹ˆ…‹ˆ‹‹‹‹‹‹ˆ‹‹‹‹’’’™’™  ££§§§§§ªªª§§§££™™œ™––’‹ˆ‹‹‹‹…ˆ‹‹‹’’’’’––œ™œ™œœœ££§­­±­­­±­ª§££œœœ™™–™–™™™–’’’’’’––™™ £§­­±´´’´»´™­­ªœ–‹‹ˆˆˆˆˆˆ…ˆˆ‹ˆ‹‹‹ˆ‹‹‹…‹ˆ‹…ˆ…ˆ…~…~~zzzzwwwwzzz~zzwt‹’’’’‹‹‹‹ˆˆ‹‹‹’™œ §´±­­­±­­ª­§§§ £ £œ™œœ  £ªª±±±´´±­ª§£ ££ œ ££­±ª­­£–’–’’’––––™œœ™ œ§ª­ªªªª§£ œ ™™–’‹ˆ‹‹ˆ‹’‹’   §ª£§§ §£œ œœ™œ™™™œœ™œ™–‹–œœœœ™™œ––’‹‹ˆˆ…………ˆ‹‹‹‹‹‹‹‹‹‹‹‹’–‹’’––’’’’’’’––™–’f‹‹‹‹…ˆˆ…ˆ…~…………~zzzttpptpXw……ˆ………~‹ˆ………~wwttwpmmmpmiwwtwwwwwmpif_XX_fiff_fXUKGDA=::33,330633330000,,,,))),03:=ADGKNU\c__\c_c_\X\UX\_\XXURRRGKGNKKNXRXXRRXUXc_ccfiimpttwzzmiffiiffiiimmiiiif_\\\XURRNNKKKGG:======AAAADDDDGGGGKKKKNNNNNRRRRUUUUUUXX\XXX\\Xc\\__XXNNNKKAD:30,00,,)006=:DDGNNUUUXX\XXXX\X\\X_ciizmtXRUUURRRNNNGGGGGGGGGGGGKGKDD6=6333666:::AADGKNNRURX\\\\_cˆ……ˆˆ‹‹ˆ‹ˆ…ˆˆ………‹ˆˆ‹‹ˆ‹ˆ‹‹‹‹–’’’’–™œœ££§§ªªªª§­§ª£ª§§ œ™œ––’‹‹‹ˆ‹‹‹ˆ‹‹‹’’’’–––œœœœ   §§ª­±±±±±±­§£   œœ™™–™–œ–™’–’’’’’’–’™™œ£§§ª­±±ˆˆˆ’’––––™’‹‹ˆˆˆˆˆ‹……ˆˆˆˆˆˆ‹ˆ‹‹ˆ…ˆ…ˆ………~~z~~z~zwwttwww~~zwwwwpˆwz‹‹‹’’’’ˆˆˆ‹ˆˆœ£§¸¸´´´±´±±­­ªª§     œœ   §ª­´´´¸±±­ª§§££££ £§§­´­±­ ™––’’’–™™™œ££ªª ´­­§ªªªª£ œœ™––‹‹‹’––œ £§ª§££ ££œ  œ™œ™œœœœ™™–‹’‹’™™’™––™’’‹ˆ………ˆ‹‹‹‹‹‹ˆ‹––‹’––‹‹’’’–’’–’–™’f‹‹‹‹ˆˆˆˆˆˆ…ˆ…~…z~zwpppmppXt~…~zˆ…ˆ~zttpptpiiimifmmptttwtmpif_XXcciffcc\UKKDA=:6600330633330000,,,,))),06:=ADGNRU______\__\X_X\Xc_\UXNNNKKGNNNNUUU\RUXXXcccffimmpttwzziffiiiifiimiiiiimc_\\\UURRNNNKKGG::=====AAAADDDDGGGGKKKKNNNNNRRRRUUUUXXXX\\\\__\c\_\cUUKRRKNDG=00,,,,,),03:6AADKKUXUX\X\X\\_ci_\cfmmzwwXRRUXRUUNNRGKGKGGGGGADDDDDA:3:3330366:==AADGKRRRRRXXXX\\_ˆ~…ˆˆˆ‹‹ˆˆ……ˆ……ˆ…ˆ‹’‹‹ˆ‹‹‹‹‹’’’–––––’––œ  §§ª§ªªª­ªªª§ §§£œ ™™™’’‹‹‹‹ˆ‹ˆ‹‹‹‹‹’–––™™œœ œ£ £ªª­­±±±±±±ª£££ œ™™œ™™™™œ–––’––’’––––œ™  §£§ –’ˆˆ…~z…‹ˆˆˆˆ…ˆ…ˆ‹ˆ……‹…ˆ…ˆ‹ˆˆˆ…ˆ……~~…~~z~~…~~zttttwwzzzzwzwwtttw~ˆˆ’’’‹‹‹………ˆ……‹‹ §´»»¸¸¸´´´´±±ªª§££   œœ £££ª±¸¸´¸´±±­ª§§£§£££§ª­´±´­£œ––’–––––™œ §ª­±±¸±±ªªª§§£œ™œ––’‹’’–’–œœ §§§£££§£ œœœœ™™œœœœ™–’ˆˆ’––’–’–’‹‹‹ˆ………~…ˆ‹‹‹ˆ‹’’’ˆ’’’‹‹’’–––––’–’‹ˆ‹‹ˆ‹‹‹ˆ…ˆ………zzzwpmpmmpzwz~~~w~pw…ˆ…~~zpppmmpmffcifffimppttpppfc_X\_cfifff\UKGDA=:6600363633330000,,,,)),,36:AADKNU\c_cc_\\c\\\\\XUc_\UXKNKKNKNRNRXXRXURXXX__cffimmpttwzzifffiiifiimmmiiimc_\\\XURRNNNKKGG=::====AAAADDDDGGGGKKKKNNNNNRRRRUUUUXXXX\\\\___c_\\_UXNNNNNGGA,0),%,)%),0336=DGKRUUX\X\X\_cfmf_fwzwzzzXUURUUURRRRRNGGGGDGGAAAA==630003306::=AAAADKNRRRRUXXXX\\\…z…………ˆˆˆˆ……ˆ………ˆˆ‹’‹‹‹‹‹‹‹’’–™™™™™œ™  ££§ªª§­­­ª­ª§£œ££ œœ™™–ˆ‹‹‹‹‹‹‹‹‹‹––––œœ    ££§­ª±±´±±´±±§  £ œœ™™œ™™œœ––’––’––™–––™œ œ£  ™–‹ˆ…z~wˆˆ‹‹‹‹ˆ‹ˆˆ……ˆ…ˆˆ…ˆ……‹……………z~~~zwzz~~~wttpttwwzwwwwzwtmtzzz…‹ˆˆˆˆˆœ´¸¾»»»»¸´¸¸±­§­ª§§££  œ §§£­´¸¸´´¸±±­­§£§§§£§ª­­±­±ª§ ™–’’–™–œœ  ª­±´´»´­­ªª§§ œœœ––’’’‹’–’’’––™™œ§£££§££££œœœœ™™™™™™™’…ˆ’’–’–ˆˆˆ…~~~…ˆˆ’‹‹ˆ‹‹‹‹’‹’’ˆ‹’’’’–––’’’’‹ˆˆ‹ˆ‹ˆ‹‹ˆ…ˆ…………~wwwppppimwtwzz~witmp~…zwtfiffimicccfccfiimptpppmc__\_ccfffffXUNDD==6:60,336633330000,,,,)),03:=ADGK_f_fcc___X_\\\X_UR_\\XXNNNKRKNRRUXXNUXRX\\\_cffimmpttwzzffffiiiiiimimmiim__\\XXXUURNNKKGGA::====AAAADDDDGGGGKKKKNNNNNRRRRUUUUXXXX\\\____cc__\XXRRKNNKDA),))%)%"%),003:ADKRRXXX\\\\\fcpicft~z~zwcXUURRRRUUUUKDDDDDGD====663000,003::=ADDDGKNNRRRRUXUUU\__~~……ˆˆˆ‹…ˆˆ…………ˆ…‹‹‹‹‹ˆˆˆˆ‹‹‹’’’™œœœœœ  £ §§§ªªª­­ª­ªª££œ  œœ™™œ’’‹‹‹‹‹‹‹‹‹‹’–––™œœ   ££§ª­­±±´±±´±­ª     œœ™œœ™ ™–™–™––––™™™™™œœ™ ™™–’‹‹ˆ…zzw~…ˆ‹ˆ‹‹‹ˆ‹ˆ……~………ˆ………ˆˆ……………~z~zzzwww~~~z~zwtttpttwwtwwwwztpwz~z‹‹‹…~~~z~~~w……™¸»¾¾»¾¾»¸¸¸´±ª­­ªª§§£££££§§±´´¸´´´±­­­§££§£§§­­±­­´­§£™™’–™œ™  £§­±±¸¸¸±±±ª§§§ œœœ––’’––––’–™–––™££ £§    œœ™œœ™–––––‹…ˆ‹’’––’‹ˆ…zz~~zz~~~ˆ…ˆˆ‹‹’’’’‹ˆ‹‹’’–™–’–’’‹‹‹‹‹ˆ‹ˆ‹‹ˆˆˆ………~tzttpppipttttww_fpimzmimm_fccccfcccfc_ciifptpmti__c\_cccccccURKADA:::33,606633363000,,,,)),06:=ADGiciccc_\cc\_X_\\\XR__XX\NRNNNNKRUUXUNUXRXXXX_cffimmpttwzzifffiimiiiiipiiim__\\\\XUURRNNKGGA=:====AAAADDDDGGGGKKKKNNNNNRRRRUUUUXXXX\\_\___fcc__\XURNRNNGD,)%)%)"")),,0:==GNNUXX\\XX\ccpmfptz~zzi\XRNRRNUXUUKDAAAADA:=:6030,00,0036:ADGGGKNRRRUNURUURU\\c~~~~………‹ˆ‹…ˆ………~………ˆˆˆ‹ˆˆ……ˆˆ‹‹–’–™     ££§ªªªªª§ª­ªª­ªª££ œœ™™–™™’–’‹’’’’–––™œ  £££§ª­±±±±´´´´´­§££  œœœœœ œœœ™™––––™™™œœ™™œœ™ –’™‹ˆ…~zzzw~~…‹…‹‹‹ˆ…~…ˆ…ˆ……ˆ………~~zzzwtwtwz~tzwwwpppppttwtwwzzwtzw~~~…~zzzwzztw’¸¾¾¾»»¾¾¸»¸´±­ªªª­§§££§§£ªª±±´¸´±´±­ªª§ £££§ªªª­­ª±±ª§œœ–™™œœ££§ª±´´¸»»´±±ª§£§ œ™™–’’’’’–––™–™™–––    £œ  œ™œ™™œ–’–’’’‹ˆ…‹‹‹’’’’–’‹ˆ…wwwwtwwzzz~…‹‹‹ˆ‹‹‹ˆ’’–’‹‹‹‹’’–––’–’’’‹‹‹ˆˆˆˆˆ…ˆˆ…ˆ…~~wwwtpmpfpppipicccff_mzicif\\______ccfc_fiiftppipfc\_\________RNGAA=:=6030303633366000,,,,))036:=AGKififcc__cc__UcXXXXR_\\\XNRKKKNKRRUXRNRURUUXX_cffimmpttwzzffffiiiiiiiimmiimc_\\\\XUURRNNKGGDA=====AAAADDDDGGGGKKKKNNNNNRRRRUUUU\XXX\\\\___cffcc\\XURRRRDA0%%)"%%)),3:==DKNRUUXXUU\__mpitw~~~z~ˆpXUNRRNX\URGDA===::6:63,0,,,003336=AGGKKNRUUUURRRRUUX\\_~~…ˆ…ˆˆˆ……………~…………………ˆˆˆ’–’–™   ££§§ª­§­ªªªªª­ªª­ª§£ œ™––’––’’’’’’––’’’’’’’’–––™œ œ   §ª­±±±±¸¸´´±ª§££££ œœ    œœ™œ™™™™™œœ œ™™œ™™œ’––ˆˆ…~z~zz~~ˆ…‹‹ˆ‹‹‹……~~…………~…ˆ………~~~~wzwzpttptztwtttpppmmpttwwwz~zwzz~~~~~zpttmtwtwzt´»¾¾¾¾¾¾»¸´´´±ª­ªª££££ªª§§­±´´´±­±­ªªª££ p§§§§­ª­­±­ª§ œ™™œœ §£§­±´¸¸»»¸´±§£ £ œ™œ™––’’’–––––™™™–’–œ    ™  œ™™™™™–’’’‹ˆ……ˆ‹‹’’’’‹‹‹ˆwtimfmtwwtt~ˆ…ˆ…ˆˆˆˆ‹’–’’ˆ‹‹‹‹‹ˆ‹’’’–’’‹‹‹…………ˆ…ˆ……ˆ~~zwwttmmimmm__fc___c\fmf_c\XX\\\___ccffcfiifpmpffc__\X\_\\XUUXNKDDD==:6,330,0633336033,,0,),036:=DGmiiiiff_c_cc_X_U\UUU\\\\XRRNNNNNRNUURNRRRUUXXccffimmptwwzzffffiiiiiiiimmmmmf_\\\XXUURRRNNKGDA=====AAAADDDDDGGGKKKKNNNNNRRRRUUUUXXXX\\\\___ffifcX\\URNUNGA,%"%""%%)06::ADKNRRUXUUXX\immpt~~~~…tmXRRRRX\XRGD=:66:6663,,,,,030633:AAGKNNRUUUUUURRUUUX\_czz~…ˆˆˆˆˆ…ˆˆˆ…z~……ˆ‹‹’–’–™£ ££§§§­±ª­­­ªª§ªª§­ª££ œ™™™––’’’–’’’–’’–™–––’–––’–™–™™ œ£ £§­­­±´´´¸±´­ªª§£     £  £œ ™œ™œ™œœ   œ™œ™™œ™––’’‹‹ˆ~~wz~~~……ˆ‹‹‹……~…………………~~zwwwpttptwptttttpmmmpttwwww~~z~~~z~z~zwptmmptpw~pp¸»¾¾»»»»¸´´´±­ª§ª§§£§ªªªª­­±±±­ª­ªª§§ ££p§§§§­ª­ª­­§££ œœ   £§ª­´±¸¸»»¸¸´§§   œ™œ™™––’–––––™––’’’’œœœœ ™œ ™–––––’’‹…ˆˆˆ‹‹–‹’ˆ…~wmff_ffmcc_pti………–––…ˆ‹‹‹ˆˆ‹’–‹–’‹‹‹ˆˆˆˆ…………ˆ~~~zwtttmmfiii_\c_\\\UXc_X\XXUXXX\\ccccffffiifmimfc_\\UUX\UNGNRUGGAAA::63)3000,633366363,0,,,,036=ADNifiificc_\_c_\_X_UUU\X\XXRNNNNNNRNRRRRRRRUU\X_cfiimpptwwzzffffiiiiiiiipmmmpcc_\\\XXUURRNNKKAA:==A==AAAADDDDGGGGKKKNNNNNRRRRUUUUXXXX\\\\___ccfcc\XXXUNURD=)""""""%,)66=DGGNNRUXUXUXcimfpz~ˆwiXUURRU\\RGA=66666300,0,,0363666:ADGKNRRUUXUURRRUUUX\_cww~~……ˆˆˆˆˆ…ˆˆ…~~zz~~~~~~………‹’––™™  ££§£ªª±ª­­ªª­ªªª§­­§£ œœ™™™––’–––––––––™––™–™™–––™–™™    £§ªª­­±´¸´´±­ªª§£££   £     œœ™™™œ     ™œ™œœ™––’‹‹ˆ~~zz~ˆ……‹‹‹ˆ……ˆ…~……~~zwwttpppptmtttpwpmppppttwwzz~z~~~~w~zzwwppmpptttzpzt¸¸»»¸»»¸¸¸´´­­ª§ª£§££§­­ªª­­­­ª§££§£§£§£tª§ª§­­ª­±ª£§  œ  ££§ªª­±´¸´»»»¸±£§£œœœ™œ™™™–––––––™–––’’™™™œœ™œœ––’’’–‹………ˆˆˆ–‹’‹…~wicc\cc__\_cifmt~~Xzp‹p’’’‹‹ˆ‹‹ˆ‹ˆ‹‹ˆ…‹’’‹‹’‹zˆ………z~…~…z~~zwtttmmfiif\__\XXXRU\XUUUURUUUX\ccfciifimfcmfic_\XXRKNGRDADKR==3==6033%0,,006333336:300,,,,03:=AGRmiiicifc__c___\X_UUUXUXUUNRNNNRNRKNNURRUUUU\\_ciimmpttwwzzfffiiiiiiiiimmmmpcc__\\XXUUURRNKKDA:==A=AAAAAADDDDGGGGKKKKNNNRRRRUUUUXXXX\\\\c__f_c_c\\X\XRXNAA)"""%%03:ADDGGGRXUUUUX\i\iw…_……‹tf\X\XRRX\RK=:66663000,00,36::==:=ADGKKRUUUXUURRRXUUX\\_ww~~……ˆ‹ˆ‹…ˆˆ……zz~zz~~z~zz~…ˆ‹‹’–––™  £ §£§­­­ª­­ª­­­­ª­­ª£ œ™™–––––™™™™™™™™™™™––––™’™–™™™œ     §§ª­­±´»´±±ªª§£§££££       œ™––™œ     œœœœ™œ––’‹‹‹…~~z~~……ˆˆ‹‹‹ˆ…………ˆˆ……ˆ~…~…~~~zwtpmmpmpipppptmpmmmpttttzz~zzzzzzztwtpmppppptzpwp¸´¸»¸»»»¸¸±±ª­ªªª£§£ £ªª§§ª§ªª œ  ££§§§£§ª§ªª­­ª­­ª£££ œ  §§ªª­­±±´¸¸»¸´­ £ œ™™™œ™œ––’’–’––™™œ–––’––™™™™™™œ™’’’–‹ˆˆ…ˆˆˆ‹–’’’‹…~tmf_\c\__X\\_ccpciX_pwp‹’‹ˆˆˆ‹‹‹‹‹ˆˆ‹ˆˆ‹ztz…wz~z…zz~~zwtwtmmific__\XUUUNNXURGKRKRRR\_cfffiifiif_i\c_\XURNDKDGA=ADD3:,:03))0",)),,633333666300,,,36:=ANipimffff_c\c_\_X\\UUXURUURNNNNNNNNKNNURRUUUX___fimpmpttwwzzffffiiiiiimipmmmpffc_\\XXUUURRNKKA=:A=====AAAADDDDGGGGKKKKKNNNRRRUUUUXXXX\\\\___c__\__\\\XUUR:=)%",06==ADDGNXXURRRX\XXc\ˆˆpc_\_\UUU\UK=:363330,,,00,6:==DAAADGGKKNRRUXXXURUXUXUXX_twz~~ˆˆ‹ˆ‹ˆˆˆˆˆ~wzzwwzz~~z~~~……ˆˆ‹–––™™œ£££§£§ªªª§ª­ª­­­­­­ª§££œ™™–––™–™–™œœœœœ™™™™™™™œ––™™™œœ £  ££§ª­­±´¸±­±ª§§£§£§§£  £ £ œœ™–™™œ    œœ™™™–™’’’ˆ‹ˆˆ~~~…~……ˆˆ‹ˆˆˆ…ˆ……ˆˆ…~……zwtpmpmimfpmpppppmmpppptpwz~z~zzwwwwtwwmmmmpppwwttm¸¸¸¸¸»¾»¸¸±±ªªª§§££ œ™§’£œ§££‹œœœœ£§§ª§§§§ªªª±­­­ªª§§£œœ £§§§­­­±­±´¸¸´±ªœ œ™–––™™™–’’–’’––™™™–’–’™–™–™™™–™™’’’’‹…ˆˆ…ˆˆ‹–’’–‹~~wmc_\c\\_U\X\_Xc_c\_pmt‹’’‹…‹‹‹‹‹‹ˆ‹‹‹‹ˆ‹‹…‹ˆ~ww~tzz~wwzw~~z~~zwttpppmffc_\\URNRKGNKKGGKKKRR\_ffffmifffc_\\_\XRRGG:AAD=::=A"%),),"%,%))))633333366300,0036:=GRmmfifffc_fXccX\UX\UUURRRUNNRNNNNKNNRNRRUUXX\\__fimpmpttwwzzffffiiiiiiiipmmmpffcc_\\XXUURRRNK=====A===AAAAADDDDGGGGKKKKNNNNRRRUUUXXXX\\\\____\\X\__XXUURN=:,%""),3::==AGKU\RRRRUUUX\fX……c__c_c_UXRXRGA:333300,,,0006AAGGDDGGKKKNNNRXXXXXURUUUUUU\ptwz~ˆˆ‹ˆˆˆˆ…ˆˆzzzwwwzzzzwzz~……‹’™–™œœ £££££§§ªª­­§ª±±­±­ª§§£™œœ™–’–™œ™™™    œœœ™œ™œœ™™™œ™   ££ ££§ª­­±´´±­­ªª§§££§§£ £ £££ œ–’™™œ£ œ ™™––™’–’‹‹ˆˆ~…~z~~ˆ…’‹‹‹ˆ……ˆˆ…~……~~zppipiiicmippmpppmpppptpt~~zzzwtwwttwtiippmppttttp´¸¸¸»»»»¸´±´ª§ª£££ œ–‹‹™’–™œ  §£§ªªª§ªªª­­­ª­§§§§    §ª§ª­­­±±±´´´­ œ œ––––™™––’’’’–––––™™–’’’–––’™–™’––’‹’’‹…ˆ…ˆˆˆ‹–’’––ˆ…~zpc_\cX\_UX\X\X__XX\mcp‹–’‹‹‹‹‹‹‹ˆ‹ˆˆˆ…ˆ…~wttpw~zzzzww~~~~zztttpppmfcc_\\RGKKGGKKDGDKGKNRX_ccffiififf_\\UXURNDG6:03636::")%%")")%%%633336633033,0036:DNUpmfmiifc\f\__\XXXXUURUURRNRNNNKNNKNNNURRU\\\\c_iimtmpttwwzzffffiiiiiiiimmmmpffcc_\\XXUURRRNN=========AAAAAADDDDGGGGKKKKNNNNRRRRUUUXX\\\\___\X\UU\\XXURRK:60"")%30::ADKRpRNRNRRRXU_UXp\\\_\_cXXRUND=63330,,),0000:GNKKGGKKNNNURRUXXXXXURUXXXRUXiptwz……ˆ‹‹ˆˆˆ…ˆzzzzwzwzzwwwwz~~zˆ–™–œ £§§£§§§§§ªª­§­­­±±±­ª§£œ œ™––™™™œ  £ª£ ££ œ ™œœ™™™œœ   £§££§§ªª­±´´±ªª§§£§£§£§££ £§ £ ™––™œ  œœœ™––’–’’ˆ‹ˆ…………zwwwz……’’’™’™’ˆˆˆ……ˆ……~~zzzttmpiffcimpmipppppptmpmwzzwz~wpttttwpmmmmmppttwwp´´¸¸»»¸»¸´±±ªª§§  œ–’ˆ‹…‹ˆ‹’–™  ££§ªªªªªª­­ª­ª­ª§£§ œ £§ªª­±­±±±±±´±§£œœœ™™–––™™–’’’’–––––™–’’’’’™’–™–––’–‹’…‹……ˆˆ‹–’’–’–ˆˆ~zmcc_c\\_XXXUXX\_XX\i_fˆ’ˆ‹ˆ‹‹‹‹‹‹…~~wppmtwwwzzwwz~~~zz~wwppmmic\_\XXNGKKDGGKGDAGGKNRU\__cfffcfcc_XXUURRNA600,%),066"))%%)633633303,0603036:NRmtpfiiii_\i__c_X\\XUXURRRNRRRNNNKNKNRRUURU_X\\fcimpwppttwzz~fffiimimiiimmmmmpffcc___\XUURRRNNA:=======AAAAAADDDDDDGGGGKKKKNNNRRRRUUUUX\\\___UUXUU\XUURNN=660"""",33=AGNmNKRNNNRURXNRRUUU\X\_UUNNKA:66330,,,00033=KRNNKKNNRRUXUUX\\\\\UUUXXUUUXiiptwˆˆ‹ˆ‹‹ˆˆzz~~wzwzwttwwwttz~…‹’––™££§§§ªª§§ªª§ª§­­±±±­­­§ œœ™––’–™œœ££§­§ªª§§£  œœœœœ   ££§§§§ª§§ªª±±±±ªª§££§££§§ £££§££œ™–™™™  œœ™™–’’’’‹‹‹‹ˆˆˆ………zttww…’––œ–œ–ˆˆˆˆ…………~~~~~~wtpppicfciimmmmppppppmtitwzzwzwtttppttpippmttwwzzz´´¸¸¸»»»¸±±±­ª££ œ™’ˆ……ˆ…‹‹–™œœ££ªª§ª§ªª­­­­ªª­ª§§£ ££ª§ª­­±´±±±­±±§£ œ™™™––––––’’’––’––’’’’™––™–––’ˆ’‹’‹ˆˆ‹‹™––––‹‹zwpffcc\__X\XXXXR_XXXi\_ˆ’‹‹’’‹‹ˆ‹ˆˆ~~zztmpiitwmwwttz~~z~zzzwttpimfc_\XUURKGKADGKGDADGKNRU\_\_cff_ccc\UUUUUNN=,0)%""%,00  %)"%)63333330300333366GRUpptiiiff_\fc_c\X\XXU\URNRRRNRNKKNNNKRUURRU\XX\ifmptwppttwzz~ffffiiiiiiiimmmmpffcc___\\XUURRNND::======AAAAAADDDDDDGGGGGKKKKNNNNRRRUUUXXXX\\_RUURRXURRNG:6330"%)))0=DKNKKNKNKNRNNKNRRNRUUXRRRKDA=::3330,,,00336ANURRNNRRUUX\XX\__\\\XXXUUUUUUffipw~~~…ˆ‹‹‹‹~z~~wzzwtpwtttwwzˆ‹–––£§ªªª§ª§§ªª§ª§­ª­­­­­ª£œ™œ–™–’–œ  §§ª±ª­­ªª§££        ££§§§§§§§ª­­­­­ªª§££§££££  ££££§ œ™œ™™œ œœ™™–’’‹‹‹ˆˆ‹…………~wpttz~ˆ™™ ™ ™–’‹ˆˆ…………~z~~~zwttmiffcimmmmmppppptppipwzzwwwtttmptppmttpwwzz~~~±´´¸¸»»»´±±­­§  œ™–‹…ˆ………ˆ–™ œ££ªª§­§­­­±­­­­­ªªª£ ££§£§ª­±´±±±­±­ª  œ™–––’’’––’––––’––’’’™™––™––’‹‹’’’’‹‹™––™’‹ˆzztiiff___X\\\U\R_X\UfX_ˆ‹’‹’‹’’‹ˆˆˆ‹…ˆ~zwwtimiimtitwttzz~zzzwwwptmiifc_U\URRGGK=DGGGGDDKKNRUX\X__cc_cc_XUURUUNK:),%""%""",   "œ%"")633660003,03:6066wUXtmpiffiic_cc_c\UX\\RXURRRNRRNRNNNNRKRXXRRUXf\\fimmpwppttwzz~ffffiimiiimimmmmpffcc___\\XXUURNND=:======AAAAAADDDDDDGGGGGKKKKNNNNNNRRRUUXXX\\\URKNNUKDNA36300," + +""%))6AGKGGKKKKKNNNGGNNKNRNNNNGD=6=:=3330,,,0336:DNRRURRUUXX\\\\_____\\XXRUXUUUcciptzz…ˆ‹‹…~~zzzttttppwwz~……–™™£§­ªª§§£ª§§ªªªª­±­±±­§ ™–™––’–™ ££ªª­­­±±­­ªª§§§     ££§ªªªªª§§ªª­­ªª§§ª££££££ £ £ ££££ ™œœ™œ œ™™™’‹‹‹ˆ‹‹ˆˆˆ…ˆ…ˆ…zwtttzzˆ‹–™œœ£œ™œ’’‹…ˆˆ………~…~~~~zttmfcfffmmmmppppptpppmtwzzwzwttpmpppmptttzzzz…­´¸´¸¸»»¸´±±­£œ–™’ˆ……………‹’–œ œ £§§ª­£ªª­­±±±±ªªª§£  ££ §§ª­´­±´±±ª§  œ™–––’––™™’’‹––™–’–’’’–™™–’™––’–’’’’’–’‹’’’œ™™–’’‹…~wwmiifcc_\\\\R\U_X\RcX\ˆ‹‹‹’‹‹ˆ‹………ˆ…~zwpppciffmpfptttwwzzwzttwtpim_fccX\XNNDGK=GGGKKGGKKNRRU\U\\__\__\XXURRRKG6,,%""%"     œ)633663003000D306GzXwtpmfcfmifcc___XR\X\RURUURRRRNNRNNNRKRX\RR_Xi__cmmmtwtpttwzz~iiifiiiiiiimmmmmpffcc___\\XXXURNNAA::======AAAAADDDDDDGGGGGKNNNNKNNNN_RRUUUUUXX\XRNKKAGA==03,0,)" + +"%"):AGD:GGGGGKKNDGKKGKGKGKGD:63==:3030,0,033:=GNRRXUUXX\\____c_c___\X\UUUURU_cfmpww~…‹‹‹ˆ…~zzwwppptpwz~ˆˆ‹’–™œ £ª­ª§§£ª§£ª§§ª­­­­­­££™–––’–™œ §§ªª­±±´´±±­­§ªª§§£££§§ªª­­ªª§£ªªªª§§§§§£§§£§£   £££ £££œœœ™œ œœœ™’’‹‹‹‹ˆ‹‹‹…‹ˆˆˆˆˆ…zwtwwzzˆ‹’–œ   œ ––’ˆ…ˆ……~z…zttmfffiimmppppttttppppwtwzz~wtttpppppmttwz~~ˆ’ª´´´¸»»»´´±±ªœ™’–‹ˆ…………~ˆ‹’’–œœœ £££§ª ªªª­´´±­ª­§£   £  ££§ª±ª­´±±ª§£  ™–™™’™™™™–’––––’’’™™™™–™–’––’‹’–’–™’–’– œ™™’’’‹…tzmimfcf___\_\XX_X_N_U\ˆ‹’’‹‹ˆˆ…ˆzz~~zwwppm_ccfimfmpttttwwtwtptpmci_ccc\\XRRGGKGDKKNNKKKKNRRU\UXX\\X\\XUURUUNG=3,)""""      œ)633:3630330,K33GRz\wttpfcfiifff\__\UX\\UUUURRRRRNNNRNNRKUUXRRc\i\cippmtwttttwzz~iiiiiiiiiimimmmmpffcc___\\XXXUURN=D=:======AAAAAADDDDDGGGGGKKRNRKNNNNfNRURUUUXXX\UK:A=D::3)00,0)"% +"""%,,)066DDDDGGKADDGDGDGDDD=600::6003000,033=AKNURXRUX\\_c_cccccc_\\XXXUUURR_cciptw~~ˆˆ‹……~~wzwpttttzz…‹‹’–™™ ££§ªª£§§§§§ª££§ª­­­­ª§ œ™™–’–™  §ª­ª­­±´´±´±±­­­ªª§§§§ª­­±­ªª§§§§ªªª£§§§ §§££§ œ £ ££§££  œœœ£  œœ’’’‹‹‹‹‹‹ˆˆˆˆ…ˆˆˆˆ~~zwtzz~…’’™œœ   ™™’’ˆˆˆ………~…~…~~wtifcfiimptttpttttttppwptzw~ztwtpttppptwt~ˆˆ‹–§±´´¸¸¸¸´´±±§œ––’ˆˆ…………‹ˆ’’™œ œ£   ™§œ§§ª­±±´±­­ª£££ £    ££­­ª±±±§£ ££œœœ™’œœœœ––’’–™’’’’’’–™™™™–’’’–’’‹’’–––™’’’–––™ œœœ–’‹ˆizifiifi____c_\\_\_N_X\ˆ‹‹w’ˆˆzzpwwzz~~~zwtpmi_fccffffmppppwtptpmpmicf___c\\URRKGKKDUNRNNNRNRRRUXURUXUUXXXXURRRKD:0,%"""       œœ)633:3600333,N3=R_w\wwpmffffffcf_c_XXU\_UXRRRRRRRNRNRNNNNXXURRf_f\fmppmttptttwzz~iiiiiiiiiimmmmmmpiifc___\\X\XUURR=A==AA==AAAAAAAADDDDDGGGGKKNUNUKNRNNiNRURUXR\UX_U::::=60,,),,,,%% +"%"%%%",30:A==DDG=ADDDAAGAAA:3336660003000366ADKKRRURUX\_cccffcfcc_\\XXXUURRR\_\iptwz…‹’‹ˆ…ˆˆzz~www~…ˆ–™™™ §£§§§ §§££§§£§£§­­ª­ª££™™™––™™ ££ªªª­ª­±±´´´´±±±­­ªªªª­­­­­ª­§£§§§§§££§££§££§££  £œ £££££ œœœ£ œ œ–––’‹‹‹ˆ…ˆ……ˆˆˆ…~wwzz~…‹’’™œœœ  ™–’’ˆ‹‹……………~~ztpicfifptttwtwtpwtptpwpwwz~~~zwptwtmtwwˆ…‹‹‹’£­´´¸¸»¸¸±­­§ ––’‹ˆ……~…‹‹––™  œ£œ™œ™£œ§§ª­±­±­±­­  £  œ œ ££ªª­±­±ª§£§£  œœ–œ œœ™–––––’’’‹’’’––™™™œ–––’™–’’’’’™™œ–––™™™œœœ œ™–’’……izfffiiiccc_cc_cc\_N_X_ˆ’‹’‹’w’‹…zwmfmpwwzztzwtpmif_ccccfccmfmpmtpmmmifmfc_\Xc_X_UURNKNNKXRURRRURRRRUURRRUUUXXUUUNNN:6,),%""%       œœœ")633:3630363:R0Ncwz_wtpifffiiccccf_\XX__X\RRUURRRNRRRRRNRX\RR\fcXciptpmtptttwwzz~iiiiiiiimmmmpmmmpiiffc__\\XXXUURR=====AAAAAAAAAADADDDDDGGGNNRRRRKNNRRmNUUUXXUXUU\U::3663,)),),),))""%"""""),,3=66=A:==AAA6=DA=6:360663300330336:ADGKNRUUUX\_cfcfffiff__\XXURRRNN___imtwz…ˆ’’‹‹‹ˆ‹‹ˆ‹…ˆ’’™–œœ ££££££££ §£§£§§§­ª­­§§£œœ™™™™œ £§§§§ªªª­±±´±¸´´´±±­ª­­±±±±­­­§§§£§£££ £ §££§£§££   ££ ££££     œ œ™–––’‹‹ˆˆ…………………ˆ~wzzzˆ’–œœ™ œ–™’–‹‹ˆ…ˆ…ˆ………~zzwttmiimmttwwzwtwtttttpwtwwz~‹ˆztw~ztw~…ˆ‹…– ª±±»¸¸¸´±ª­££™–’‹‹ˆ………ˆ––œ£   œ–™™ œ££­­±±±±±ªªœœ œ  œœ £§ªª­­±­­ª§§  £ œ™  œœœ–™™–’’’’’’’’–™œœ™™™™™’œ––––––’–™œ™™™œœœ œ  ™–™’ˆ…fzUicmmifffcffcfcX_K_X_ˆ‹––t‹zwmiiimttzwwwtpmmic___ccc_cifimipmfmiffmf__\Nc\U\UURRGRRN\UXUUUXUURUURRRNURRUXUUUNN363,))%"""         +œœœ")633:6:303:3AU6X~z~zztmfcffii__cfi\_X\_\X_UUURRRRNNNRRURUX\UR_c_Xfi_ppmtpwttwwzz~iiiiiiiimmmmmmmmpiiffc__\\XXXUURR==AAAAAAAAAADDDDDDDDDDDGGNRUNUNKNNNRiNRURUUUXUUXR=63360,%%,"),,))%%%""""))),0366::::===3:A=6:633366333333336:=AAGGNRRRUX\\cffffiiifc_XU\URRRKK\__mmwzz~~…ˆ‹‹–’‹‹‹…ˆˆ‹’’’™™œ™œ££     £££§£££§ª­ª­­ªª£  œœ™™œ ££§§£§ªª­±±´´¸´´´´±±­­­±±±±­­±ª§§££ £   £§££££§££ œ    §£££    œ  œ™–™––’‹ˆˆ……………z~z~~~ˆ‹’™™–œ™–––’‹ˆˆ…ˆˆ…ˆˆˆ~~zwwpppptwtzwzwwwwtwwttttww~~……‹‹~…~~‹…ˆ‹‹’’™™£­±¸¸¸¸´´­±§§œ™–ˆ……………‹’’™™œ££œœ™’–™œœ£ ª­­±±±­§§™™ ™  œ œ££ª§ª­±ªªªª££££œœœ œœœœ–™™––’’’’’’™œœ™™œœœ–œ–™™–™™––™œœœœ œ™£ £ œ™œ’’ˆˆi~UmfpmiiimfiicifXcK_\\…‹‹–’–’‹‹wtfiiiippwtttpmiifc_\_cc_cffffimiifiiific\\\NKXX\UUURKURR\XXUUX\XXRUXRRRNRRRUUUURRK330,%%"         œœœ")63666:303=:G~~zzzzztmccfiffX\ffi__\_\_\_UXURRRRNNNNURRXXXXR\_\Xim_pmptpwwwwzzz~iiiiiiiimmmmmmmmpiiffcc_\\XXXUURR=A==A=AAAAAAADDDDDDDGDGGGKUXRUKNKNNNfNURRRRRUUURN:66330)"")%%),),)))%""""%%%),036::66:::06=:66666666363366666==AAGGKNRRUXX\_cccfffffc\XUXURNRKKX_fptw~~…ˆ‹–’’’’’’’’‹–’––œ œœ£  œœ ™££££££££ªª­­±ªª§££  œ™œ£££§£ §§ªª­±´´´´´´±±±±±±±´±´±­­§§§§ £££ £ £ £ £§§£  œ £ ££££       œ™™™––’’ˆˆ~…………~~~z~z…‹‹’–™–œ™™––’‹‹ˆˆ‹ˆ‹ˆˆ…zzwtttttwzwz~~zzwwwwwtwwwwz~ˆˆ’’––’’ˆ‹’–œ™£§±´¸»¸±±­­ªª œ–……………‹‹–™œœ §£œ™œ’–™™œ  ªªª­­­ª££œ™œœœ   œ££§§­­­ª§ª§£££ œœ  œ™œ™–™–––’’‹‹’–––œœœœœœ™œ™ ™œœ™œœ™™œœœ     £££ ™œ ’–‹‹iUpitmmfipimmimifcKc\\ˆ’––‹ˆpf_fff_mctppmiififc_\__c__f_c_fmcccfffcf_X_XNc\XXXXURNRNU_\\XX\XX\RUURRNNRRRRURUNNK603)%%"         œœœœ%)6333:=606A=K~~~zzzzpiffiffi\Xiiic\X\\\_cXURRRURNNNNRNNXXU\U\\X\ii_mmtwptzwwwzz~iiiiiiiimmmpmmmmpiiffcc__\\XXUURR=D====AAAAAAAADDDDDDDGGGKGUXUXNRKKKKcNRRRRRUUUUN:666300,%")))),),,,)))%""""""""),,03::6:6663,03336336::666:6:6::=A=AADGKKUURUUX\__cfffcc_XUUURRNRKKXcitwzz~……‹‹’’’’’’’–––’’’’’–––™™œœœ    œ ™  ££  §£ª­ª­±­­ª§§££ œœ£  £  ££§§ª±±±±±±´±­±´´±±±´´±­­§ª§££££   œ£ £ §§§§£  ££œ£££      œœœœ™™–’–’’ˆ…~……~zz~~…ˆ‹–––™––’–’‹…‹‹ˆ‹‹…~zzwwwwwz~z~~~zwwwwwtwwwww~ˆ‹’–™™––’’’’’™œœ §­¸´¸¸´´±­­ª£œ™ˆ‹ˆˆ‹‹‹™œ  £§£ ™™–––™œ  §ª§ªªª§ œœœœœ  œ  ££§§­ª­§§§§ £ œœœœœ™–™–––’––’‹’––™™œœœœ œœœœœ™œœœ™œ™œœ ™  œ£££§§£…œœ–’–’iUtiwppcptimmmpmiiUf\Xˆ’’’’’‹…pf\ccc_icmmmicfcff_\__\c_\c___fifccccf_c\U\XR_\U\\XXRNNKU\X_\\X\X\RUURRNNRNRRUURNKG633%%%" +         œœœœ%)6336::606DANzz~~~zzmmiffffm_Uifff_\XcXccXXURRRRNNNNRRRUXUXX\X\_if_mmpwptwwwwzz~miiiiiiimmmmmmmmpiiffcc__\\XXUURR=A===AAAAAAAAAAADDDDDGGGNKU\U\KRKKKK_NNNNRRRUUUK3363030)%)),),),,03,30,%,""""""%"%)),33:6666336,0,03336::=::=====:=AAAADGGGKRRNRUX\___ccc__\URUURNNNKN\fmtzz~~……‹‹’’’–’™–––’’–’’’™–™™™œ™œ     œ      £§ª­ª­±±­ªªª§££   œ£ œœ££££§­­­­­­±­±´±±±±­´´­±­ª§§££§££ œ   £ £§£££  £ œ     œ   œ œœ™œ–––’–’‹……~~~~~~~~~ˆˆ‹’’–––’’‹’ˆˆ‹ˆ~zzzzzzz~~~…~~zzzwwwtwwzwz…ˆ‹™œœ™™––’’’’’’’–œœ §­´¸¸´´´±±ªª§œ™’’‹––œœ   £§£œœœ™–™™œ £§ªªªª§£ œœ™œœ £  œ£§§ª­ªª§££££   œœ™œ™––’–’–’’’––™–™   œ œœ™  ™™œœœœœœ  œ £ §§w£§ …™’™–––iUwi~wpctwpipppptpizcz–––––‹~pc_\___ccccff_fcff_\_\\_____X_cff__X\cc__X\XU\\X\\XXRKRNR_\_\X\\XXUUXNNNNNRRURRNKG=300%%""         œœœœ)%6363:=603GDRt~z~~zwpmmiifficUfiifcXUfRffUUURRRRNNNNNNRUURX\\\\_ff_ipmtpttwwwzz~miiiiiiimmmmmmmmpiiffcc__\\XXUURR=A=A==AAAAAAAAAADDDDDDDGRNRXUXNNKKKNNNNNNNNRRRUD0333363,),),,)030363630000)"""""%"""%%"%),,03:6663003,,,00336::===AAADAAADADDGGGGKNNNRUXX__\____\XURRURNNNNR_imwzzzz………‹‹’’’––™–™™––’–––™™™™œœœ       £  £  £§ª­ª±±±±§§ª§£££££   œœ ££§ªªª§§§­­­­´­±­±­±±­­±­ª§§§§££     £  ££££££££ ££   œœ œœ œœœœ™–™–––‹ˆˆ…~~~~~z~~z~ˆ…ˆ’––’’’’‹’‹‹’‹‹‹……~~z~~~~~~~~……z~zwwwwtwwww~……‹–™™œ™™™–––––’–’™œ£§±±¸¸¸¸±±±­ª£ ™œ’–™–™™–™   £ ££   œ™™œœœ £ª§ª§ª£ œ™œœ™œ  œœ £§ªªª§§£      œœ™™™™–’’‹’’’’’–™™™™ £ œ  ™œ œ™™™œœœ™œ£  œ  £§w§§£…™ œ–œ™p–Uwmˆˆ…_~ztmmttpw…m…’’––’–’ˆzm______\c_\c_\ffffc\\X\__\c_X\ccf_\X\_c\\X\\U\\UXXUURGURU\\\\X\XXURUXRRNNNNRRRNKGD:0,,))""         œœœœ))63366:603GDUt~z~~~zztmpifffifiiimffU_iRfcXXUUURRNNRNNNRUURUXXXX\if_fppwptwwwzzz~iiiiiiimmmmmmmmmpiiffcc__\_\XXXRR===A==AAAAAAAAAAAADDDDDDNKNNRURKNNKNNNNNNNNRRRRA33033363033,003636:=:63333,)%%)%)%%%)%"""))00066:660,00,)),003:==A==DDDGDDDGDDGDGGKKNNNRRXX\\X\X\\XURRNRRNNRRRcipzzzw~………‹‹‹‹’’’’––––™™–™™™œ™™œœ™œ   £   ££  £ £§ª­­±´±±ª§§§§§££££ œœœ £ §§§£§§§ª§ªª±­±­±±±±­­±­ªªªª§§§££œ œ œ ££ £ ££ £§££     œœ œœ œ™™™™––‹ˆ…~~~~~~z~~~~~……ˆ‹’–’’’–’’’’’–‹ˆˆ~~zz~~~z~~~…ˆ……~~~zwtttwwwtz…‹’™œœ™™œ™™™™™––’™œ£§±­¸»¸¸´´±±­££™ œœ œ££œ£££££  £  œœ™™œœ  §ªªªª§£œ™œ™œœœ £ £££ª­ªª§£ œ œœ œ™œ––™––’‹’’’’’’’™™™œœ ££   ™   ™–™™™œ–œ  œ ££ £w§££‹–’£ £  œ™Xwm’‹…~wppttt~ˆˆ’––™––’’‹zi_c___\\c_\c__cfcfc_\\X_c_c_\_ccc\\X_\cXXXXXUXXUUXURRGRNR\X\\XXUURRXXURRNRNNRNKD=A60),))% +         œœœœ),6363::603KGmtzzzzzwwtppmiffifimimifUcfUf_\\XXURRNNNNNRRUUUUUXXX\fc_fmttttwwwzzz~iiiiiiiimpmpmmpmpmiifcc__\\\XXURR=A==AA=AAAAAAAAAAADDDDDGKGGGNKNGKKKKNNNNNNNRRRR6633366:63660D3::6=:A=:6:36000,0))%)),)""",)00366:::0,,3))),,066:==A=DDGKGGGGGGDDDGGGKKNNNUUXXXXXUXURNRNRRRRUUUfptzzzzz………ˆ‹‹‹’’–’–––™’™™™œ™œœœ–œ   ££ £££ £§££ªª±­±´´±ª§ª§§£ £  œœœ™ ££££§§£§£§§§ª­­­ª­­±±­­±­ªª­ª§ª§§£ œœœ™ £  £££§££§££œ   œ™œ  œ œœ™œ™™–’ˆˆˆ…~z~z~~~z~zz~ˆˆ‹‹‹’––’’’’’’‹–––’‹‹ˆ~z~~z~~~~~………~zwttwwwwz~~‹– œœœ œœœœœ™’–™œ£§±­´»»¸¸´±±­§£ £ §ª£§§§§§§§§£££ £œœœœœ   §ªª­ª£ œ™ œœœœ ££§§£ªª§§££œœ œœ œœœ–™–––’’’’’’––’™™œ  £££  œœœœœ™–™™™œ– œ    £  z££££– §£§££ œX–––’ˆ…wttwtw‹’‹–™–™–––’’‹~mc___\X\_\\f_c_fffc_X_X\cc___c_c___\\__\\UUURNURUURRNKRKNX\XXUUUUUUXXXRRNNNNRKGA:=3,,,)%" +         œœœœ%,63636:306KGmtzwzzzttppppifficiifmfcRfU\i__XUXXRRNNNNNRRUURUUXXX\c__fmwwtwwwzzzz~mmiiiiiimmmtpmmmpmiifcc__\\\XUURR=AA=AA=AAAAAAAAAAAAADDGGDGDDDGKGGKKKKKKKKNNRRRR6333333::6::AGAA=:ADDA=A=::=6303,,))%,)%%""),033666:60))0)))))03:::===DADGGKKGKGDDDDGDKKKNNRXUUUXXUURRRNNRRRUXUXptwzz~zz………ˆ‹‹‹‹’’’–––––™œ™œ™™™œ™œ  £££ £§§£§£§§ª­­±´´´­­ªª§££  £œ œ™œ   ££§£ £££§§ª­ª­ª­­±­ª­­­­ªªª§ª££   œœœ ££œ ££££§§§£     ™œœœœœ™œ™™–––’‹…ˆ…~~~~~~~~~~…ˆˆ‹ˆ‹’’™’’’––’’–’‹‹…~zw~~~~…ˆ…~zwtwwttwzzw~‹‹’ œ       œœ–™œ £§±­±¸»¸¸´±±­ª££§§ª­§ªªªªªªªª§§§££  œœœ£ £ªªªª§§œœ–  œ œ  £ªª§§§£§  œœœ™œœ™™™™™–’–’’’’‹’’–––™œœ£œ    œœœ™œœ–™™–™œ™£œ£œ£œ£ œz££ £œ£§§ª£§£  ™™™–’‹…zttwwz…’–™™™–’–’‹~pf_c_\XX_X\f_cccff__X__\cc\_\__c___\\\\XXRNRNNRNUUNRNKNKD\\\XUUXUUUXXURURRRNRKD=666)0,))%" +        œœœ%)63366603:NKww~twwwppmpppfffifmicic_RfUff_\URUXURRNNNRNUUXUUUX\\\fc_ipwzwtzz~~zz~piiimiimmmptpmmmpmiiffcc_\\\XUURR====A=A=DAAAAAAAAAAAADDDDDDDDGGGKKGGKKKKKKNNNNR6633336::::=DKDK=ADGGDGDAD=A:63600,)00)%%%%))033663630%%,%%%%,0666:=:=AAADGKKKKGGDDDDDGGKNRRUUUXXXUUURRNRURUX\UXtwwz~zz~~…ˆˆ‹‹‹‹‹’’–––™™–™œœ™™–™œ™ £§§§§§ªª§ª§ªªª±±´¸¸´±±­ª§§§££   œœ  £ £££   ££§§ªª­­ª­­­ªª­­­ªªªª§ª££  œ™œ™    œ ££§£§§§ £  £œœœœœœœœ™––––’ˆ…~~~z~ˆ……ˆˆ‹’–’–’’‹‹’’’’’‹ˆ…zzzz~~~ˆ~……~~zwwwttwwtwz‹‹– ™   £££   ™™œ ª§±±´¸¸»¸¸´´±ª§§ªª­±ª­­­­­­­­ª§ª§£    œ£ §ª§ª§§£œœ™  œ œ£££ª§ª§ª£§£ œ œ–œœ™œ™™––’––’’’’–’™™œœ£     ™œ™–™œ––™™™œœ  £  œ  ™œ £ £ §§§­§§££œœ™™’’ˆ…~ttttzˆ’’’’™–––’‹ˆ~ticc_\\X_X_c_fcccfc_\_c__c__X\___\_\\XXXURKRNNRNRRKNNGKNNXX\XUXXRUUX\UUXURRNNGD::36,,,)%""     œœœ%)6333630:=NNztzptttppimmmicfifmi_f_\RfRifcXRUXXRRNNNNNRUXXUUUX\\\c__iptzztz~~~zz~tiiimiiimmptpmpmpmiiffcc_\\XXUUUR=A=AAA==A=AAAAAAAAAAAAADDGDDGGGGGKGGGGGGGKNNNNN:636666====AGKGNNKRRRNNKAGDDGK=3633663,)))),,033663330%%%""%),0666:A::=AADGKNKKGGDDDDDGGGNNRRUUXXXXUXRUNRUUUX\XXwtwz~~~~~~……ˆ‹‹‹‹‹‹’’’–––™™œœ™™™™œœ  ª§§ªª­­ªªª­­­±´±¸´´±­ªªª§§£  œœ œ £££££§£££ £§§§ª­ªªªª­ªªª­­§ª§§£§£ £œ™–œœ  œœ   £§§§§§ £ ££œ   œœ ™––––™–‹ˆ………~~~~………ˆ’’’’‹’‹‹’’–’’‹……ˆ~~~~~~………………~~~wzwptwwtwz‹‹’œ™ œ ££££££££ §­­´´´»»»¸¸´¸±­ªªª­­±­±±±i­­±­­ªª§§£££££££§§ªªª£ œœœœœœœœ£§£§ªª§ª£££œœœœ™œœ™œœ™–™’–’–’’’–’’’œœœ    œœœœ™™’™™–™™™œ™™œ £t  œ œ  §£§£§ªªªª§§§ œ™–’’‹…~zwtttz…’–’’’‹ˆ…wmfc_\X\_\__ccffffc__cfc_ccc\\__\\\X\U\UNRKRKNRNNNKNKKKNRXUXUUUUNRUX\UXXURRKKDA66330,,,)%   œœœ%)6333306=ARtzwzptpttmimmiicfmfim_c\\RiRfifRUUXXRRNRNNRUXXXUUUX\\__ccfppzwwz~zzzz~pmmipimimmppmmmmpmiiffc__\\\XUURR=D=AAAA====AAAAAAAAADDADGDGDDDGGGGGGKGGGGKKKKKN:666:::==AADKKKRRNUUURUUNUKKRRRDK6:::6:,,,),,03363300,)%%%"),,36:=A=:=AAAGGKKKGGDDDDADGGKNRRUUXXXXXXUXRRUXXX\\\zwwz~~z~~~…ˆ‹‹‹‹‹ˆˆ’’––––™œ™œ™œœ™  §§ª­­ª±ª­­­±±±´´¸´´±ªªª§££§      ££££§££   œ £§§ªª§ªªªªªªª­­£§££ ££ £œœ™™™œ    £££§§ªª§£££££   œ™™œ™™––––’ˆˆ……ˆˆˆ…~~~~~~…ˆˆ‹–’’‹’‹‹ˆ‹’’ˆ‹…ˆˆˆ……………~zzztwzzwzz‹‹’œœ£œ£ £§§§£§§­ª±±¸¸´»»»¸¸¸¸­­­ªªªª­±´´±f±±±±±­­ª§§£££§§£ª§ª§§£ œ œœ œœ  ££ªªªªª£§£  œœ™œ ™œœ™–™––’’‹’’’–’–œ      œœ™œ™™–™™–œ™™œ™–™  t  œ£ ££§£££§ª­§ªª§§ œ™–’’‹…zwttw~ˆ’‹–…ˆ‹…zpfcc\XX__c\ffcffff___ffcfcc_\__\XXXXR\RKRKRKNNKNKKRNGNRU\XXRRRRKNRU\UUXRNNGG:=:366,00,)%"  +  œœœ%%6333:0:AAUwzwwmppptpmpicifiiffm__XXRfUfmcRURXURRNRRRRUUUXRUXX\\ccccfttztzwzwzzz~pppipipmmpmmmpmmpmiiffc__\\XXUURR=D==A=A=====AAAAAAAADDAGGDDDDDGDDDDDKGGGGKKKKKK:66:===AADDGKKNNRRXXXUXXXXUNUXURUXG==D=30,,003666330,,,""""%,066==A::==AADGGKKDGDDDAAGKGKKNNUUXXXX\XXXURU\X\\__zzzz~z~~~zz~~…ˆ‹ˆˆ‹……‹‹‹’–––™™–œ–œ™–  £§ª­­­±­ª±­±±±±¸´´´±ªªª§§££££ ££££ ££££§££   £§§§§§§§­ªªªª­ª§£œ  œ œ  ™––™œœ œ£££§§§ªªª§§§£§   œœœ ™œ––’–’’’‹ˆˆˆ‹‹‹…ˆ~zzzz~~…ˆˆ‹’’’’’‹‹ˆ‹‹‹’‹’ˆˆ………ˆ…‹‹ˆˆ…ˆ……~~zwzz~z~~‹™™ œ£££ªª§§ªª±±´´»»¸»»¾»¸¸´±±±ª­ª­±´¸´´´´´´±±ª­ªªª§§§ªª§ª§ªª§££     œ œ £ ªªª§ª£§£œ  œ™œœœœ™™–––’’ˆ™’‹–™ œœ  £  ™™–™™™™–™™œœ™––œ  £ œ   £££ §§ª­ª­§§§ ™–––’‹…zzwtw~ˆ‹‹–‹‹ˆp~~~zmffc_X\__fffiffffccccffffcc__\\\XXXURXNNRKNKNKGKKNNRKRNU\\XNNNKGKNRXRRXNDA=:6666603,))%"  + + +  œœœ%%6333=0=AA_t~wwmmmptmppicfimff_i_\X\R\XcURRRRXRRRRRNRRUURURUXX\_c_ccipwztzwwwzzz~mpmmpmppmpmpppmmpmiiffc__\\XXUUUR=A==============AAAAAADKDDDDDDKDDDDDKDDGGKKKKKK:6::=A=AAADGGGKRRUXXXX\\\\\XX\XX\\XNRRU63006:6:::63,0,)%%%"%,033:==66:=ADDGGGKDDDAAAAGKGKNNNRUUXXX\\XXUUXXX\___zzzzzzzz~zz~~…ˆ‹‹…ˆˆ…ˆ‹‹‹‹’’–––™–™–™–’œœ §§­­±±­ª±­±´±±¸´¸´­§§§££   £œ ££  §£££§£ £££§§§§§ªªªªªª­ª­§§œœœœ œœ  œ™™œœœœ ££§§§ªª­ªªª§§§£  œœ   œ™™’–––’‹‹‹‹ˆˆ……~zzzz~~ˆ…‹‹’’’’‹‹ˆˆ…‹ˆ’‹’‹’–’’‹ˆ‹‹‹’’’‹…ˆ……ˆ……z~z~~‹‹’–œœ ££§ªªªª­­´´¸¸¾¾»¾»¾¾»¸´´±±­­­±±´»¸¸´¸¸¸´±ªª§§ªª§§ªª§ª§§§§££££   œœœœ £ª§ªª§§§££  œ™™œœœœœ–––’’‹ˆ’’’œ–’––  œ     œ™™™œœœ™™œœœœ™’  œ  ™  £££§£ªª­ªª­§££œ––––’…zzwwz~‹‹‹‹’ˆˆzm\ztzzwmfffc\_cciiiifiifffcffffcfc\_\\XUUXRNXRRRNRKNKKNKKNRGNKRXXUKGDAADGNNRNUN +A::6663330,%)"""%  +   œœœœ%)6U36GA=DGip~twpiimtimmifcmpii\UcUX\RU\RURRUUURRRNNRRRURNRRUUX\_c_cfmptzwwzwwzzz~ptimpmppmmptpmmmpmiifcc__\\XUUURR=A==AAAA==========A==AAKGGDDDDGDDDDDGDDGGGGGGGK6666===DADDDGGKURRXX\X\____\\_\\__\XUXXR:63G=:D==:6000))))""%,,006::33:=ADGGGKKGDAAADDGKKNNNRRUUXX\\X\XXXXXX\__czzzzzz~z~z~~~ˆ‹ˆ‹ˆˆˆ……ˆ‹ˆ’––’™–œ–™–’™œœ£ª­­±±±­±­­±±´´´´±±ªªª££œ ££ £ £££§££££££§££§££§ªªªªªª­ªª­ª§œ™œœœœœ£œœ–œ™œœ ££§§ªª­­±­ªªª§§§     ££œœœ™™–’’‹‹‹ˆ…zzzzz~~ˆˆˆ‹’’‹ˆ‹ˆ……ˆˆ‹‹‹’™–––’–œ –™œ–ˆ’’‹ˆˆˆˆ……~~~zˆ––œœœ£ ªª§­ª±±´¸»»Â¾¾¾¾¾¾¾»¸´´±­­±±±¸»¸»»¸»¸´±ªª§§ªªª§§ª§ªª§£§§£§£œ£ œ™œ™ £§£ªª§§ª§§£  œ™œœœœœ––––’‹’™–œ™–’–£ œ  £  œ™œ™œœœœœœœ™ –’ œœt – ££§§§§§ªªª§ª§£’™™’––’‹…~zzz~ˆ‹ˆˆˆzzmi\piwwtpfifc_ffmmmmimififffifcccc_\\\XXUURKURRRKNKNNKRKNNRKKGNUURADDA==DKNNKRKDD::333330,0%%"%"""  + +   œœœœ%%6_33RK:GKmtzttmfcipimiffcimif_UfUUXURXUURRRRRNRNNNRRRURRRRUUX\\__ciippzzzzzwzzz~mtiipimppimtpmmmpmiifcc__\\XUURRN=A===================DAGKDADAADDDDDDKDDGGGGGGGG::33=AADAADGDDKRRNUX\X\\__c__\__c__\X\\XXURUNKKAAA:63,,,0,%%),,)0363006==DGGGKKKGDADGGKKKKKNRRXXX\\\\\XXX\\XX__f~~zzz~z~~~……‹’‹‹‹ˆ…ˆˆ‹‹‹’’––œ–œ™™–’™œœ §ª­­±±­­±­±´±´¸´´­ª§§   ££ £££§££§§§£§££§££§§§§§ªªªª­ª­ªªª£œœœ œœ™ ™œ™™™œ ££ §§ª­­­±­­­ªªªª§£ £££§ £œœœ–’–‹‹’’’’ˆ…~~~zw……ˆ‹‹‹‹ˆˆˆ…ˆ~……ˆˆ‹‹‹ˆ–’™’™–™ §£œ§£‹œ™‹‹‹‹‹ˆ…~…~~‹’’™–  œ§ §ªª­­±´¸»»»¾Â¾¾¾¾»»¸´´­­±±´¸»¸¾¾»»¸´­ª§§§ªªª§§ªªªªª§ª§£§£ £œœœœ™ £§£§ªªªªªª£ œœ™œ™™œœ––’’’––œ™œœ™’œ£  £ ££  ™œœœ™ œœœœœ ™– œœtœ’ £ §§£ªªªªª£§£ –––’’’’‹ˆ~z~~‹ˆˆ…wmifXXipmppficfcfimppmmpmimiiiifcf___\\XUUUUUNURRUNRNRNNRNRRNKKGDGRK==AA=ADGKKGNNKDA=:360603,,%""""%%"  +   œœœ%%6c:6UNAKtppwppifcmmfiffccfifccUfUUXURUUUURNRRNNNNNNNNRRRRRUUX\\_ccfiptzwzzwwzzz~ipiimiimpiipmmmmpmiifcc__\\XXURRN==AA================AD=DGAADAAADAADDKDDGGGGGGGG::66:A=A=AADDDGNNKUX\XX\\_________c\\__\\XUXRNNGDDA::000330)),)),),00,3::DGGGGKKGDDGKGKKKKKNRRX\\\__\_XXX\\XX__fzzzzzz~~~ˆˆ’’–’‹‹‹ˆˆˆ‹‹‹’™–™™™œ–’–™œœ £­±±­­±±­±´´±´´´´­ª§£ ££    £§§£§§£§§§§£ª§£§§§ªªªªªª­ªªªªª œ œ   œ ™œœœœœ £££§§­­±­­±±­­­­­ª§££§§ª§§ £ œ–™–’’’–’’–’‹ˆ~z~…ˆ…ˆ‹‹‹‹‹ˆ…………~~……‹…ˆˆ‹…‹‹––œ™œ£­ª§±§§£ ’‹’’ˆˆ……‹~’’™œ £££ª §­­­­±´¸¾¾»¾Âž¾»¾¸»´±±ª­­¸¸¾¸¾Â¾¾»´±§£££ªªª§ª­§ª§ªªªª§§£   œ œ™  ££§§ªªª§ª££œ™™™™™œ™’–’’’’‹™– œœœœœ £    £££ œœ  œ œ    œœ™£ œtœ–   §£ §§ª­ª   œ––’’’’ˆˆ…zˆ……ˆ……wtti_\XUimipmffcfciimppmpppmpmmmmi_c\_\\XURRUURRURUURRKRRKUKNNRKKGAGNG=====ADDGGKKGA==666,300)))""""%"      œœœ%)6fK3XRDUptmtmcfcciicifccffffc_XcURXRRRRXRRNNRRNNNNKNNNRRURUU\\\__ccipwwtzwwwzzz~imiiiiimmfimipmmpmiifcc_\\XXUURRNA=========:=======A=DG==D==A===AAAAANDDDDGGGGGG=:::==:A===AADDKKKRUXXUXX__\\\\\\___\___\\X\URRKKGD==333:66,,0,),),00,36:DDGGGKKKGGDGGGNNKNNRUU\\\____\X\\\X\_cf~~wwzz~~…‹‹–™™™–’‹ˆ‹‹‹‹––™™™™–––œ™œœ ª­±±­­±±±´´´´´´´­ª§§£££ œœœ §§£ª§§§§ª§§ªª§ªªª­­ªªªª­­ª§§§£œ   £œ  œœœœ   ££§§ª­­­±±±­±­­­­­ª§§ªªªªªª§§£™ ™––––™––™–‹‹……~……ˆˆˆˆ‹ˆ…ˆ…z…~zzwz……ˆ…ˆ~ˆ’’™–œ ±¸´´ª­§­ ™™Â¾¸ˆ‹‹’ªª§§§§§§ª£§­­±±´¸¸Å¾¾Â¾Åž¾»»»»¸­±§œª´´¾»Â¾¾¾¸±­§§££§§ª§ª­ªª§§ª­ªª§§££ œœœœ££  £§ª§ª§§§ œ––™™™™–’–’––’‹œ–œ     ££££œ £££ œœœœ  œ£     œ  œpœ™£œ££  £§ªª§œ œ–’’‹’ˆ‹ˆ…~‹…ˆ…wwptf\\\Ufifmicfcccfimptppppppppimm____XXUUNRRURRURRRRNGNNGRGARUGND=GRGA=====AAGDDGD=:::6600,,%%%""""%"       œœœ%%6iR3\UKXfpcfp_f__f__fcfcffff_c\UXRXUURUURRNNRRRNRNKKRNRNURUU_\\__ccipwwtzwwwzzz~iiimiiipmffpipmipmiifcc_\\XUURRRNA=======::::::::::=:AD==A:======A===NAAAADDDDDGA:===:=A::===ADDDGNRUURU\\\XXXX\X_\_\___\_\_XURNNKGAA6:===:6030,,,,0036:=DDDGGGGNKGADDGKKKRNRUU\\_____\X\\\X\_cfzzwwzz~~……™œœœ™––’‹’’’–™–™œœ™™™™œœœ£§­±­±±±´´´´¸¸¸´´ª§£§§££  œ  £££ªªªªª­§ª­ªª­­ª­­ª­ª­±ªª§ª§§ ££ £     œ  œ ££§§ª­±±´±±­±­±±±±ªªª­­ª­­­ª­§œ£ œ™™™™™–œ™’ˆˆ………………ˆ…ˆ…~twtt~ww~t~wz………~…–’™œ´»¸»¸´¸´¸¸¸¾Â»¸™­™­­­ªªªª§ªª§ª­±±´¸¸»¾Â¾Å¾Â¾»¸»¸¸ª­ ™‹ˆ‹ˆ¾¾¾¾¾´­ª§§££§ªª§­­ªªªªª­­§ª£ £œœœœ     ££ª§­§££ ™’™––™–’–’’™’’™™  ££ ££ §£œ££££ œœœ  œ      œ   œp™œ    œ  £§ªªœœ™–’‹‹’‹‹ˆˆ‹ˆˆ…~ztmtfXX\Ucccif_fcfAcffimppmppmpppmii\_\\XURRKNRURNURUUNKGNKDRAARRDKDAKRKD======AGDDDA=6663300))%%%%"""       œ"œ))6mUR\UNXfccfp_f\\fc_ccffffff\c_UUR\XUUXRRRNNRNNNNNKNNKRNRRUU\\\__ccipwttwwwwzzz~iiimiimpifftipiimmiifcc_\\XUURRNN======::::::::::::=:=A=:==:A=::===A=NA===AAAAADA=AAA=:=:::=A=AAADKNRRNRXXXUUUUXX\X\\\\\\_\\XXURRNKDD==AAA=:33:3003306:=AGDDGGGKKKK==ADGGKRNUUX\\__\__X\\_\X_cfizwwwz~~ˆ’œ   œ™™–’’’’’’’’™™™™œœœ™œœ œ £§ª­±±´´´±±¸´´´´±­§£ª££ œœœœ££  §ª­­ª­ª­­ª­±±­­­­­­­­ªª§§£§££§££££    œœ £££§§§­±´±±­±±­±±´±­ª­­­­±±±±±±ª§§ œœœ™™™™™–’’‹…………………~zwtt~wwpppppmwz~~ˆ…–™±Â»¾»¸»¸»»»Â¾»»»´œ±­±­­­­­­ª­ªª­­´±¸¸¸¾¾¾Âž¾¾»¸¸»´§ –ˆ…~»¸­ªª§§§ªª­ª­­­ªªªª­­ªª£œ£œœœœ  œ££ £§£ª§  œ––™––™–’–––œ–™œœ£ £§ £§££  ££££  œœ  œ œœ£ œœœœ œp–œ£œ £œœ ££§§  ™–’‹‹’‹‹‹ˆ…‹ˆˆ~w…ztptcRXXX___fc_f_fcfcfippppmppmtmff\\\XURKRKKNRRKURUURKNUGDU==RNGKDDNUNG=A==::ADAAA=:66300,,,,)")%""" +       %))6pXU_XR_fcccm_c\\f_ccfcfffff_c_UXR\UXXXURRNNNNNNNNKKKKRNRRUUX\\__ccipwtttwwwwwwz~iimiiimmfiitfmfimmiifcc_\\XUURRNK=====:::::::::::::::6:::=::==::::==:N=========AA==A===A::::=====AGKKGKNURURRRRUUXRXX\X\\\X\UUXRNNGGAAADDDA====:36663:=ADDDDDDDGGGG::=AGGKNNUUX\\_\\\\XX\_\\cfimwzwzz~~…ˆ™ £ œœœ™––’’’’’’’–™œœœœœœœœ     §­±±±´´´´´´´´´±­­ª£§££œ    £ ££§­±±­±­­±­±´´­±­­±±­­§ª£££§££§§§£££   ™   ££§ªª­±´´±±­­±±­´±±­­­±±´´´¸´´±ªª£ œ£œœœ™™™–’…~~~zzwwwppttmimmmmimtw~w~~~~~~~ˆ’’¾¾Â»»»¾¾Â¾¾»»¸¸´±´±±­­­±­­­­­­´´¸´»¾Â¾ÂÅž¾¾¾¾¸»¸¸ª£™’‹…~~zzÂ~»¸±­­ªªª§ª­ª­±­­­ª­±­­§§   œ™™    ££§§£ª£  ™™––’–––’’’’–œ™œ  £ £§£§£££££££§£ œ™™œ œœ œ  œœ œ œp’™ ™  œ™œ£££§œœ™’’’’‹‹‹‹ˆˆ…ˆ…ˆ~~w…~wttcRXX\_\_cc_c_cGcfDDmmttmpmmppcc\\\RRKKRGKKRNNUURRUKRXNRX=NR=DKDDNXRKAAA=:=ADA=:333,%)))))")%"       ))))6pX\cXUci__ci\c\_ccccfffffffc_cX\R\RUXXXRRNNNNNNNNKKKKNNRRUUX\\__ccipwtwttwwwwwz~iiiiifiiffftfmimmmiiffc_\\XUURRNK====::::::::::66:::66:66:6:=:66::::6NA::=======A=======:===::==:=DGGGGGRNNNNKNRRURUUXX\XXXXUUUUNKGGDDDGGDDAAAA=::::3==AAAADAADDDDD36:=DGKNNUUUX\\\_\XUX\\\_fimtwwz~~~ˆˆ‹‹–œ££ œœœ–’–’’’’–™œ œœ       £££­­±±´´´´´±±´±­­­§§§  œœ œœ ££§ª±±±±±±±´±´¸¸±´±­±±­­£ª§§£§§§ª£§££   œœ  œ ££§§­±±´±±­±±±­±­±±±­±±´¸¸»¸¸´­­ª§§§  ™œ™™–’‹~~~~~zzzzztwtpmmpiffcc_cfimiiwzzzzz~…‹»¾¾Â»»¾¾Â¾»»´¸´±±±±ª±±±­­±±­±´´¸´¾¾Â¾Â»¾»¾»¸»´´ œ–ˆ…~wzzÂ~»´±­­­ªª§ªªª­±­­­­±±±ª£§  œœ–œœ££ £ §§§§   –™’’’–™––’’’™™œ  £  §££££§££ ££££ œœ™œœœœ œ   œ   ™™™œ™  ™™œ  §§  ™––‹‹‹‹ˆ‹‹ˆ…………tzw…wtt_RX\\_X__c_c\_G_cGDiittmmmmpm_c\\XRAGKRGKNRNNUXUUXKU\RUXURN6DKDDKXUGDAA==D +A=:033,%)%)))"%%""      ,,)):p\_c_Ufi_ccf\fm_fccffffffff__cX_U\URUXXRUNNNNNNNNKKKNKRRRUU\\\_ccciptttttwwwwwz~iiiiifffffftfifimmiifcc_\\XUURNNK====:=:::::::66666666666666:666:6666NA66::::::=A::=A=::==:=:=::3=ADDGGDDKKKKGKNNRNNNUUXUUUURURRRNKDGDDGGDDDDDDA==:=6===AAAA==AAA==0,0:ADKKNRRUXXXX_XXUX\__cfmpwww~~~…ˆˆ‹’™  œœ™™™–™’’’’––™™    £ ££££ ££§ª­±±´´´´±­±±±­­ª§£§   ™œ™ ££§ª­´±´´´­´´´¸¸´´´±±±±­­§ª§§§§§§ª§§§£     œœœ ££§§­±´´±±±±±±­­­±­±±­´´¸»¾»»¸±±­ªªª£ œœ™™’z~zz~~wwwwwwtpmiiff\X\XX__ccffmmtwzzw~£¾¾»»Â¾¾¾Â¾¾»¸´¸´­±­­­±±­±´´±´´±¸¸»»Â¾Â¾¾¾¾»»»¸¸´± ™–‹…~wzz¾~…»¸±­­­ª­ª­ªª±­­­­±­±­§££œœœœ–™™££ ££§££££ œ–™–’’–™––’–™™™œ   £§  ££§£§œ££    œœœ œœ ™œœ œœ  ™œ’™™™œœ–™™œœ£§ œ–––‹‹‹‹‹ˆˆˆ……z…tzw…zwt\XX\_\X_cfc_X_G\UGGfftpiimmpi\_XXUNAGGNGGNRRKX\XX\XXXUX\RUN6AGA,KURGGAA==D:A:63360))%%))%"""      A0")06t_cfcUci__cf_fi_fccffffffff_\c\cU_XUUXXRXNRNNNNNNKKKNKNRRUUX\__ccciptptttwttwwwziiiiiifffffpffcmimiifcc_\\XUURNNK====::::::66666666663666333636366366K=63666666:=:6:=:==:======:6:==ADDDGGGAGGGKGNKGKRKURURRRRRRRNKGKDDKKGGDDGDDAA==:::=====::=6:33,,,0=GKKNNRUUXXX\XXUU\_cffptzwt~~………ˆˆˆ™œ œœœœ™™™––’’–™™œ £ £££§££££§§§ª­­±´´´±´±±´­­±­§££   œœœ ££§­±¸±´´¸±´´´¸»¸±´´´±´­ªªª£££§§§ª§§£     œœ  œ  ££­±±´±±­­­±±­­±­­±±´¸»¾Â¾¾»´±±­­­§£™œ™–‹~~wzwzz~twwwttpmifc\cXUURUX\__cfiimpwwzz~‹™£¾»Â¾¾¾¾¾¾Â¾¾¸´¸±ª±­±±±´ª±´´±±±±´´¸»Â¾Â»»¾»»»»¸´±œ –’ˆ…~wzz»»¸±±­±­­ª­­­±±±±­­­­±ª££  ™œ™™œ £££§§§£§£ £ ––––––––’–™™–™œ   §œ£§£§££  §£   ™œœœœ œœ™œœ™ œœœœ–™–– œ™™™™™ £ ™™™’‹‹‹‹‹ˆ…………z~pzw…zwt\\\___X_cc_\UNGXUKK_fRmimmpmfR\UGNKDGDNKKNRURX\\XX\UURUXNRK363))KKNDDA==A=ADDA=A:63363,)%%%%" +       G:%,36tccffX_fc_cccff_fccifffffff\____X\\URUXRUNNRNNNNNKKKNKNRRUUX\\_cffipppttttttwwwzfifiiffiiiiticciipmifcc_\\XUURNNK====::::::66666666333333333:636:3333G3333333336::36:6=:::::=A:6:6=:=AAADDDADKGGGKKKKNGRNRNRRRNRNRGKKGGGKGGDGGGGDAAA=:6:::::6330600%)),:GKKNNRRUXXX\XUUXX_cffmtwtwz~………ˆˆˆ‹’–œœœœœ™™–™™–’––œœ  £ £££§§§£§£§ªª­­±±´±±±±±±­­­­ª§£œ œ œ   £§ª­´±´´¸´±¸¸¸»¸±´´´´´±­­ª£§£§ª§ª§£  £œ œœœœ œ £§§±±´´±±­­ª±±­ª­­­±´¸¸»Â»¸´´´±ª­ª£™™™’‹zzwzzwwztwwtttmif_\XUURRURUX\\\cffimwwzzˆ–œ»¸Â¾»¾¾¾»»¾¾»¸¸±±´±­±­´­­±´´´­­±´»¸¾¾¾»»»¾»»¸¸±­œœ’…ˆ~~z~w¸~¾¸´´±´±±­­­­±´±­±­±­­­§£œ œ™œœ   £ §ª££§£§§§™–™™™™’’’’’™™––œ  œ£ £§£§§ £ §££  œ™™™™ ™œ–œ œœœœœœ™™–™œœœ–––™™ œ––™’‹‹‹ˆ‹ˆ……~wtzw…zztf__cc_X\__\\UNKGXRNG\cRcUiimiURXRKKDDDDNGKRRXU\__XX\URNRUKNG36)GGDAA=::=AADAAAA6:6363))""""""" +       ,"N=),:6tccfciccf_cccfccifcffffffcc__cc\U\_URUXRRNRRNNNNNKKKNKNRRUUX\\__cimpppttttttwwwziiiffiffifmpffcfipmifcc_\\XUURNNK===A::::::66666663333333603:63360630G3000300003::6666::6=::==6:6:A==AAAADDAGGDGGGGGGGGNKNKNNNNRNNKKKKGKNGKGGGGDDAAA=:6666:6630,0,)"%%)6GKKNRRRRXXXXXUUXX_ccfmpwww~~…ˆ…ˆˆ‹‹’™™œœœœ™œ–™œ–’’–™œœ£££ £§££§£££ £§ª­±±±±´±±±´´­±­ª§£   ™œ™œœ£ ª­±´´´¸¸¸´¸¸»¾´´´´¸¸´´­±­£§£§ª§ª£§œ £ œœ™œœœœ  §ª­´¸¸±±±­­­±­ª­­±±´»¸¾Â¾¸±´¸±­­ª§œ™–…ˆzzwwwwwwzwtwtppiiX\RUURRRRNUUX\\c_fmittwz~…‹’™¸»»¾»¾¾¾»¾¾¾¾»´´´±±±±ª±±±±±´´ªª­´¸¸¾»»¸»»»¸¸¸´ª£œ™…ˆ~~w»~~»»¸¸´¸±±±±±±±´±­±­±­ªª££  ™™™™    ££§§§­§ªªª™œ™™™™’–’’’™™–’™œ  ££§§§ª§£££§§£ œœ™™™™œ™œ™œ œœœœœ™œœ–™™™™’–™–™œ™–––’‹‹‹ˆ…ˆˆ~z~wtzw……~zpic_cf_\\\_X\UNNKUNKGU_UcUffi_UNRNKDDAGGNKNRRXX\\_XUXRNKGDDGD06" +66033:66:=ADA=AA::6663))%"%"       3)RA)6=6tfcicmccfcfcffcciifffffcccc_\c_\X\_URRURRNNRNNNNNKKKKKNRRUUU_\cccfppppwtttttwwwzimiiiififfpmficcimiifcc_\\XUURNNK====::::::6666666333333330063303330,D0,3,0,,,,0:63336:66:6::=::::======ADAADDADDDDDDDGGGGKNKNRNNRNNNNKNNKNGKKKGDDAA:633666333,),%)"""%%,GKKRRRUUXXXXXUXX_ccimtwww~~………ˆˆ‹’™™œœœœ™™™™œ––––œ  £ £œ ££ ££ £  £ª­±±´±±±´±´±±´ª§§   œœ™–œœ£ ª­­¸´´¸»´¸»»»»¸¸´¸¸¸´´±´±ªª£§­§ª££   œœ™œœœœ  £§ª­´¸¸´±±­­ª­­ª­­±´¸»»Â¾Â¾»¸­´´±­ª§§™™’~zzwtztwtwtptppmif\RRURNNRNRUUX\\ccfimtpt~~…‹‹–ª¸»¾»»¾»»»Â¾»»´±¸±­±­­´±±±±´±ªª­´´¸»»¸»¸¸»¸¸´±ª£™–‹ˆ‹……~…»z¸¾¸»¸¸´´±±´´´¸±±±­­ª§§£ œ –™™œœ    §ªªª±§­­­£ œœ™™’–’–’™––’–™ ££££ª§ª§§££§££œœœœ™™™™œœœ™ œœ™œœ–œœ––™™™–™–’–™™’’’’Uˆ‹ˆˆˆˆ~~zwzwtww……~zpmf_cfc____X\RKRGUNGGU\Xcicc_\RKNNGDDDDKNNNUUX\_\\\UKNAGA==:A,3ªª))",,3,36==AA=AA==6::60,,%%"       =0UD):D=tfficm_ficiciicffiffffccccf_X__\X\\XRUURRRRNRNNNNKKKKKNRUUUU\\_cfcpppptttttttttwmmmiiffiicmmiifcimiifcc_\\XUURNNK==A=:=::::66666663333333000300,060,,A,,0,,,))),63636366:6:6=A====A==A===AD=A==AAA=AAADGGGGKKNRRRURNNNNRRNRKNNKKDDAA:300333300,,)"%"""%%,GGNNRURUUXXXXX\_ccfmpwzw~~………ˆˆ‹’–œœœ™™œ™™™™–™™™ ££  §™£  œ  œ££ £ª­±±±´±±´±±´±±ªª§££œ œ™–™œ £§­±¸¸¸´»¸¸»»¾»»´¸»»¸´¸´´´­­ª§ªªª££ œ œœœ™™œœ   §­±´¸¸´´±­±­­­ª­­­´¸»¾¾»¾»¸´±´±­­§££™œ~~zzwwwtttwttppmic\UUURNNNNRRUX\_ccffppmtz~ˆ‹’£§¸¾¸»»¾¾¾¾¾»¾¸´´´±­±±±±±±­´±­­±´±¸»»¸»¸¸»¸¸±±§ ––‹ˆ‹…ˆ‹~ˆ»…»¾»»»»¸¸´´´´´¸±­±±ªª££  ™œ™™œ œ  £œ£ªª­´ª±±­§£ œ™–’––™’™’–’’™£    §£ª§§££££ œœœ ™™™™œœœ™ œ™œœ™–™™™–™™™––™–’––’’’U‹‹‹ˆ……~zwwtztwz……~zttiffcf___\X_NKUGUKGKX\Ufff_\XNKKKGDDDGKRRRUU\__\_XUDK=D:6:6:)3§ªª%)),6:=====A=:6==:6,03"%       DAXG)DGDtfiffifimfmcfmfffiifccccc_fc\\\_\\\XUURURRNNRRNNNKKKKKNNRUUUXX\_ccpppptppttttttwmmmiiffiffmimiifimiiffc_\\XUURNNK==A=:=::::666666633333330030030030,,=,,,,,,))))3033366::666:=A=A=A=A=:=AAA=:66:6:==:=ADGGKKNRRRRRRKRRRUUUUNNRNKGGAA=30,00000,,)%""""")3DKKNRRUUXX\\\_cccfmpwwz~~……ˆ…ˆ‹‹’–™™™œœ™™œ–œœ™œœœ   £££œ£ œ œ     §§ª­±±´´´´´±¸±±ªªª§ œœœœ–™  ££ª­´´¸´»¸»¸»»»»¸»»¸¸´¸¸´´±±­ª­ª­ § œ œœœœ™œœ œ£§ª­´´¸¸´±±±±­­­­­­´¸»»»¸»´´±­±­ªª£  –™zzzzwwwtwwwtptmifXXUURRNNNRRUXX_ccfimppwz~……’œ§§¾»»¾¾»¾»¾»Â»¸¸¸­ª±±­±±´­±±±­±´´»¾»»¾¸¸¸´¸±­§œ’’‹ˆ…‹…ˆz»¸»¾»Â¾¾¾¾¸¸¸¸´¸¸¸±­±±ªª££œœ™™™™™œ™  £œ ª­±´­±±­ª§  ™™™–™™’™–’’–  œ ££§ª§§§££  ™œœœ™œ™™œ™œœ œœœœœ–œ–™’™œ™’–™™’’U‹‹‹ˆ……~~zzt~tww……~~wwpiicf__\\U_KGUKUNGNX_RfficXUGKGGDDGGNNUUUUX\\\X\XUDA:=63633)0§ªª",),36:=A==AA::==::636%%      GD\N)GNGpfmiiiimmfpfimifffifcccc_cic_\\c__XUUXUURRRRRNNNNKKKNKKNRUUUXX\_cfpppttppttttttwmmmiiiiiffpfimfcfmiiffc__\XUURNNK==A==:::::666666633333330003300,3,,,:))))))%%%)03333::=6666=A===AA==:::=A=:::6:66::::=ADDGKNNRURRUNURUXXXXURRRNKGDA=63,300,0))%%""))0=GKNRRRXX\\\_cccfptwww~~…ˆ…ˆ‹’–––œœœœ™œ™œœœœ  £££   œ œ™œœ œ   £ª­±±±´´´´´´´±±­­ª£ ™œ™œ–™œ £§­±´´´¸¸´¸´¸»»¾»»»»¸¸¸¸´¸±´±­­§­ §£œ œœ™™œ™œ  £ª§±´¸¸»´´±´­±±±±­±´¸»¸¸¸´´±­ª­ª§§ œ™’™‹…~zzwwzzwwwzwttpmic\\UXUURRRRNUX\_ffifpmptzzˆˆ’™£§»»¾¾¾»¾¾»¸»»´´¸±­­±­±±´±´´´±´´´¾¾»¾¾»»¸´¸´ª§œ’’ˆ‹ˆˆ…¸¾»»»¾¾Â¾¾¾»¸¸¸¸¸¸´±±­­§ª£ œœ–™–™™™™œœ œœ­­±±±´´±­§  œœœ––™’™’––––œ œœ §§ª§ª§££œ ™™œ™–œ™–™™™œœœœ œ™™™––’–™–––™’’–’‹’Xˆˆˆˆ…~…z~ztzwwz……~~tpiffc_\_U_DGXNUNXRUcRiffcURKKKGDDKDXNUXXX\X\\UXURA=3630300%0ªªª,))03:=A=AA=::::==:6:))      KG_R)KRKpfmfmmmpmipimmffiiifcccc_cfc__\c\cUXUXXUUUUNNRNNNKKKKKKNNRUU\\\__fpppptppttttttwppmiiiiiffpcficcfmmiffcc_\XXURNNKAA==::::::66666663333333003333,,0,,,6))))))%%%%,03336=:::3:======A=:666:=:6:63663636::=AAGKNNRUUUURUUX\\\\XUUURNRGD=:60300),))%%%%,:AAGNNRUX\__cccfipwzwt~~~……ˆ‹’–™™™™ œœ™œœœ   £§    ™œ™™™™œœ ££§ª­±±±±´´´´´´´±±­§££œœ™œ–™œ£ £ª±´±±¸¸´´¸¸¸»»»»»»»¸»¸¸¸´¸´±­§­£§£™ œ™–™™–   £§ª±¸»»»´´´´±±´±±±±´¸¸´¸´´±­­§§££ œ™–’–‹ˆ~z~zwwwwwwwzpptpfc\XX\UURRUURU\__ffifmpptz~……’’– £¸»»¾¾»»¾¾»¾¸±´´±±±±±´±¸´´¸´´¸¸¸¾»¸¾»¾»¸´»´­£™’ˆ‹ˆ‹…¸»¾¸»Â¾Â¾¾¾¾»»¸¸´¸´±±­­ªª  œœ–™™™™™™œ™œ™œª­­±´±´­­ª££ ™ ––––™––––’™œ œœ§§§§§§££ œ™œœ™™œœ™™œœ   œ œ–œ––’–’––’’–™––™’‹’XˆX‹‹ˆ~zzztzzw…ˆ‹……zwiffcc_fc_GK\NUR\NUcRffc_NNNGGKGGNN\\X\\X\\X\URRR=),30%",,",ªªª))),06:A===:::==AA=:=0)     KG_U,NUNmiifpmmtpimmimfiifffccc__cc__\\cX_U\UXXXUXRRRRNNNKKKKKKNRRUUXX\__cmppppppttttttwppmmmiifffmfffccfmmiffcc_\\XURNNK====::::::66666663333333000303,,,,,,3))))))%%%%,,303:===666::=:::==:3336=666303333336:=ADGKKRRUUUXUXUX\\__\XXXURUKD=::3630,))))%"%%,3:=DKNRU\\_cfcfimtwzwwz~~……ˆˆ’–™––œœœœœœ œ    ££   œ™œ™œœ œ£££§§­­­±±´´¸´´¸´´±­§£   ™™™œœ£ £§­±±´´´¸´¸¸¸»»»»¾»¾»¾¸»¸¸¸±±­ª±§§£œ  ™™™™–œ  §§­´»»»»¸¸¸´¸´´±´±±±´´´´±±­±ª§£  œ™’’’ˆˆ~~zzwzzwwzwwttpmc__\X\XXURUXXX___fiiimptt~ˆˆ’’–œ »»¾»Â»»¾¾»»»´´´´±´±´¸´´¸¸¸»¸»¸»¾»»¾¾¾¾»¸»¸±§™’’ˆˆ…ˆ‹…¸»»¸¸Âž¾Â¾»»¸»¸´´±±­±ªªœ£ œ™™–––––œœ™™œªª­±´´±­±­§§£  –™–™™™––’–™    £££§£§£§£ ™œ™™œœœ™ œ  £  £œ™œ–’’’’’––––œ™™––’‹’ˆXˆˆ……~z~zzzzˆ‹‹ˆˆ…ztfpiiimipKK\KX\_NUfRiif\NNKKKKKKNR\_\_\X\\\\UUNR=,00,)",,)ª)%),03:====:::=:A===A3)" +     NKcX,RXNmmfipiitpfpmipffiffcccc__cc____cX_RXRXUURUUUURNNKKKKKKGKNURUXX\__cippppptttttttwppmmmiifiiiccc_ffmmiifcc__\XUURNK====::::::66666663333333000000,,,,,,,))))))%%%%))0036::::6:=:=::6::63306:66300003033:==AGGKNNRRUUUUUUX\\__\\\\XUXNNA==6663,,,),)%""""%)06=AKNUX\__cfffimww~wwwz~……‹‹––’™™™œœœœ œœ     £  œ™™™œœœ £ ££ªª­­±±±±´´´´´´±­£  œœ™™–œœ££££­±±±´´´±´¸»»¸»¾»»¾¾¾»¾»»´±±±ª­ª££   œ™™–™œ ££§­±¸»¾¾»»»¸»¸¸´¸´±­´±´´±´­­§£ œœ™‹‹……zwzww~zwzwwttmi_\_\\_\\XU\\\\cc_fiiipptt‹‹’’’–œ¸»¾¾Â»¾¾¾¸¸¸¸¸¸¸±´´¸¸¸¸¸»»¾»»»»»¾¾¾¾¾¾¾»¸»±ª–’’‹ˆˆ‹…¸¸»¸»ÂÅž»¾¸»¸¸¸±±±±ªª££ œœ™™™–––™œ™™œ§ªª´±´±­±±ª§§£ –œ™œ™™™–’–™ œ     £§££§§ œ œœœ œœ£œœ££ ££ ™œ’–’’’’–™™™™™™–‹’‹X‹ˆ…………~…~~~‹’‹‹ˆR~wptppmztwNU\N\ccfcififf\NRNGNKKUUU_c___\\_\_XXNRA0,0)%"))% +%%))03:=:=:::::=====A60"     RNc\0XmRiifipifptfpmipifmifccfccc_c_cc\cX_RUUURURURUUUNNKKKKKKKNNRRRUX\__cfpppttptppppptppmmmiiiififcc_fcmmiiffcc_\\XURRK====::::::66666663333333000000,,,,,,,))))))%%%%,%,06666666::=:::6:630336633000000036::ADGKKNRRNUUUURUX\\\\__\_\\XURDAA::660,,),))%%""""%),3:AGNUX_c_cfiiipwzzwwz~~……ˆ‹‹’––™–™ œœ     œ    œ œ™™™œœ  ££££§­­±±±±±´´´´´±±­§ £ ™–™™™œ£££§ª±´±±´±­±´¸»»»»»»»¾¾»¾»¸´±±­­­ª§§£œ£œ™™™™™  £ªª´´»¾¾¾¾¾»¾»¸¸¸´´­´±±±±±­ª£ œ™‹’‹‹‹ˆˆz~zzzwzzzzzwppmf__\__c__\_____cfcfiimpptz‹’’™ ¾¾Â¾¾»»»»»»¸´±¸»»¸»¸¸¾Â»»»»¸¾¾»¾Â»¾»»¸±ª™–ˆ…‹…´´¸¸¾ÂÅž¾»¾»»¸´´±±ªª§    œ™™–’––™™œœ£­­´­´±±´´­ªª§£  œœœœœ’™–œ   £ œ£ £ ££§£œ œœ   œ§ œ££££§ œœ–‹’’’’’’™™–œœœ™™–’‹‹ˆˆˆ……ˆ……ˆ’–‹‹Nzwwttt~wzRcfR_iifffifff\URRNNNNX\\cfcc__\__\\\RN=300)%%%%"%%)),06:::::6::=====A:3"""")"     =URf_3\mUfiffpfftpipiipmfmfffccc______cXcX\RRRRNURUNUUURNNNNKKKKNKNRRUX\__ffpmmwpppppppptppmmmiiiiffccfcfciififfcc_\\XXURN====::::::66666663333333000000,,,,,,,))))))%%%%)%,,36366366::66:3:36330333000,,03033:=DDGKKKNNNRUUXRUXXXX\\c_c__\XRKDA==663,,),)))%%"%"%%)03:AGRU\_cccfiiimww~wwwwzz~~…ˆˆ’’–’™ œ           œ  ™œ™œœ œ££§§ªª­±­±´´¸´±´´­­ª§ £ ™–––™œ£§§ªª±±±´±±±´´¸¸»»¾»»¾¾¾¾¾¾»´´±­­ª§ªª£  œ™™™–™œ  ªª´¸¾¾Â¾Â¾¾¾»¸¸´±±±­­­­­ª§£œ™…‹ˆ‹‹‹…~~wwwwzwwzwtmmiccc__cfcc_ccc__cccfimmttw~…‹‹‹––¾¾Âž¾¸»»»¸¾»´´»»»¸»»¸Â¾¾»¸»¸»»¸Â¾¾¾¾¸¸±ªœ–‹…‹™±±¸»»¾Â¾ÅÅÌÌ̾¾»»¸´´­­ªª£££œœœ™–––™™™œ £­­±­¸´´±´±­­ª§£   œ  œœœ ££œ œ™£œ   £§§ £œ     ££  §££§   ––’’’–––™œœ––’’‹ˆˆ‹………ˆˆˆ‹…’’––’‹R……zzwwwz~zwt\mmmiiimifc_XRURRRR\__ffff__\_\X\\RKA630)%""" + + +"%%)%,036::::6:=:=:====6)%%"%,%    AXUf_6_iUciffpiipmmtmmmifmfifccc____\\cU_U\URUNNURURUUUUKKNNKKNGKNNRRUUX\_cfppmtmppppppptppmmmiiimfffcfccciifffccc__\XXUUN====::::::66666663333333000000,,,,,,,))))))%%%%)),003366333::366363630,330,0,0)00006==ADDKGKKKNRURURUUUXU\\ccc_c_\XNDDA=:660,)))))%%%)"%%%,03:AKUX_cccfiimmpwwzzwwtwwzz~~……’–’–™œœœœ œœ   œœ  œœœœœœœ  £££§§§ª­ª±±±´±´±´ª­ª££ œ™––™™ ££§ª­±±±´±´´´±¸¸»»¾¾»¾¾¾¾¾»»¸¸±±­­ª­ª££ œœ™œ™œœ £§ª´¸¾¾Åž»»»¸±­­­ªªªª§  ™’ˆˆˆˆˆˆˆ…~zzzzwzzztwtppifccf_ccfffcfffc_cfcfiiptttˆ‹ˆ‹ˆ’‹’™¾¾Â¾»»»¾¸¾»¸¸¾»»¸»»»¾»»»¸¸¸»»»¾Â¾»¸±§™–’‹­­´´¸»»¾¾¾¾ÂÏÏÏÏ̾¾¾»¸´­±ª§££   ™™–™–™™œ £§­­±­¸´´´´±±­­§ª££       £ £  œœ    ££§§£§ ££ £ ££ £§§£§££œ’’’’–––™œ™’’’’‹‹‹‹ˆˆˆ‹ˆ‹’–––’’‹’’‹ˆˆ…zzzz…~~zwtpppmmimmicc\XXUUU__ccifiic_\\\UXXRG=30,)" +""))%,,3366:6:6=::=====:3)%")0")    GXUf_:cfX\iffmimmiippmiffiiiccfc_cc__\cR_RXXRXRRRNUNXUXXNNKRKNNDKKNNRUUX\ccimpmpmmpppppptmmmpmmiiiiffcfc_ciifffccc__\\XXUR=====::::::6666663333333000000,,,,,,,))))))%%%%%%,,,003300366333033330,00,0,),,0303:A=ADAKKKNKNRRRRNRRUURXXcccccc_\RNKD=::30,)%)))))))%%%),36:DKXXcffffiimmpttzzttttwtz~~~~ˆ‹–’’–™™œ  œœœ    œ  œœœœœ  £££§£§ªª­­­±±±­±±±­ªª§£œœ–’’–™ ££ª§­±±´´´´´´´¸»»»¾¾»»¾¾¾¾»»´¸±­­±­­­§£ œœœ™œœœœ§£ª±´ÂÂÅÂÅÅž»¸»´±ªª­§ª§§£œœ–‹ˆˆ…ˆ…ˆ…zwzzzw~wwwwtmpcffff__fiiifififcffffmmttttˆ‹ˆ…ˆ…‹‹’œ¾Âž»¸¾»¾»»»¾¾»¸»»»»»»»¸¸´¸»»»¾¾¾¾»´´§™–’’­±¸´´»»»¾»»ÂÅÏÏÏÌž¾»»¸±±ªª££ œ œœ––™œœœ  £ª­±­´´´¸±±±­­ª­§§££ ££££§ ££œ      £§ªª§£££££§£ £££§ª£ª£ ™‹’’’’’’–™–’‹’‹ˆ‹‹’––™’–’–’‹…‹ˆ~~z~…~~zwttppmmmmffc\\XXXXccffiiiic_\\XRUUND:,),%""")))),3336::::=:==:===:6,%""%,,3%,   K\XfcAfcX\icfiimifmptiffffffcccccc____cR_UU\RXRRNNRRXU\XRRKRKNNGGNNNNRUX___fmmmpmmppmmmmpmmmmiiiiifffccc_ciiiffccc__\\XXUR======:::::6666663333333000000,,,,,,,))))))%%%%""))),00003633300,,000,,,,),,%)00006:=AADDKKKNNNRRRRNNNURNUX__cc_cc_URNDA==6,,)"%%%,)),%)),33:DDR\_fffiimmpppttwwptppttzzz~ˆ‹–’’™–™™œ œœ            œ  ££ ££§§ªª­­±­­­­­­ª§ª££™™’–’’œœ£§§ª­´±´¸´¸´±´¸»»»¾¾»¾¾»¾¾¾¸¸¸´±±±±­ªª££ œ œœ  œ£§­´¸ÂÅÅÅÅÉÅ»¸¸´­ªªª£§£§ ™™ˆ‹ˆˆ…………~zzwwzwztzttpppcificccfiiifiififfcfipmtzzz……ˆ…ˆ‹ˆ‹ˆ’™»¾¾Â¾¾»»¾¾¾¾¾¾¾»»¸»¸»¾¾»¸¸¸¸»»»»¾»»»¸±±£™™–’’’™­±¸´¸¸»¸»¸¸¾ÂÉÏÌÏÉž¾»´­­§§££ œ  œ™™œ   ££§§ª±­±¸¸´´´±±±­±ª§§§£££££§££ ™£  ££œ£§ªª§£££ £§£££££§§£§ œ™‹‹‹‹–’’–’––’’’’‹‹’’–™––’’’–‹…ˆ…~~~~~~~~wzwwttpmpmicc\_X\\\cccffiif_\XXUNRNKA3%)%"%%%)))03366::6=:==:===::0))"%"%%)006)0"   N\XffDf_X\i_fifmifmtpiiffccccccccc_cccc_\RU\UXUNNRNNXUXUUUNRNNNDGNKNNRUX_\_cmpmmmmmmmmmmpiiiiimiiffffccccciiifffccc__\\XUUNNNGA=:::::::66666333333000000,,,,,,,))))))%%%%%%)),,,0330300,),,,00),,,,,%),,3036:AAADGKGKKKNNNNKKKRNGRU\_c_cfc_XURGDAA:),%%"%%),),),03:6AGNU_cfiimmpptptttwwmppttwwzz~…’’–––––™œœœ       £  £ œœ  § ££§§ª§ª­­±±­ªªªª§§£ ™––’’–™œ£§ª­­±±´´¸¸¸´´¸»¾»¾¾»¾¾¾¾¾¾»»¸¸´´±±±­ª§£œœ   œ£  ª±¸»ÂÉÅÅÅÅÅ»¸¸±ªª§§££ £œ’–‹‹………………~zwzwzzwwwtppmmfmfiffffiifiiffiiifipptw~~ˆ…ˆ…ˆ‹‹‹…™¸¾»Åž¾»¾Â¾»»»Â¾»»¸»»»Â¾»»»»¸»¸¸»»¸»¸´­­£™––’’œ±±´¸¸¸¸¸¸¸¸»»ÅÉÉÏÅÉŸ´ªª£§£ £  œœœœœ   ££ª§ª±±­´¸¸´´­±´±±ªªªª§££ ££ £œ™   £   §­ª§£  œ£§££§§§§£§£ ™–ˆ‹’’’’’’‹‹‹…‹‹’’’’’––™–’–’’’‹…zz~z~zz~ztwwztwtmmmicc__\_\_cc_fcifc\XUURKKKA63"%%"""""""%%%,03366:::====:====::0,%,"%),33:)3%  +0 R_\fiGcc\\i_fmimifitpifffccccfcccccfcccc\UXXXUURRUKKXUUUUURRNKKAGKKKNRRU_\_cmmipimmmmmmmpiiifiiiffffcccc_ciiiffffcc__\\XUURRRNNN=====:::6666663333300000,,,,,,,))))))%%%%"%%),,,03,00,))))),,,0,,),)%))33366=A=DDGGKKKKKKKGGGND6GRR\_\_c_c\XUGGAD:,,%)"""%)),,03:=ADKUX_iimmpptpttttwztppttwzwzz…‹’’–’–––™œ        £   œ œ  ££££§§ª§ª­±±­ª§§ªª§£  ™–™’’––œ£§­ª­±±´±¸¸¸¸¸¸¾»¾¾¾»¾¾¾¾¾¾»»»´´¸´­­­§§§  £££ £ £ª­´»ÂÉÅÅÅÅÅž¸´­ª§££££œ –‹ˆ‹………zz~zzzwttppmmiimiiiifiimfiifiiimimtwz~………………ˆ‹‹‹™±¾»Å¾¾¾¾¾¾¾¸¾»¾»¸»»¾Â¾¾¾¾¾¸»»¸¾¸¸¸´´­§£œ™–’’’œ­­±¸»¸¸¸¸´´¸¸¸»ÅÌÅÉÅÅ´±§§ £ œ œ œœœ  £ ££ §§§­­­´¸¸´´±´¸´±ª­­ªª§§ §£££ œ    £££§ª§§£ œ™££££§£§££§ œ™–‹ˆ‹’’’’ˆˆ‹ˆˆ‹ˆˆ’’–’–’’™™œ’’‹‹‹ˆ~zwzzwzwzzwptwztwtpmmifc__\\__c__c_fc\XUNNKGD==)0"%%"""""""""%,,336:6::=A=A:=AAA==633000,06:6,6) 3 U_\fiKfc\\m_fiimicmpmifffcccccfccf_c_ccf_XXXURRRUUKKXRXXUURRNNKADGGKNNRU\\\ciiitmmmimmmmpiiiiiifffffcccc_ciiiifffccc__\\XUUUURRRNKKGD===::666663333300000,,,,,,))))))%%%%""%),,,,0000))%%%%))),),,)%%%,3306:=A=DDDDGGGDGGGDADA:3666DAX\__c_\XDKAA60,))""%),303==AKRU\cfmmpptttttttzz~wtptwwzz~z……ˆ’’’’’’’’™œœ     £ ££      £ ££§§§ª§ª±­±­§ªª§§§£ œœ–––––™œ§§ª­ª±±´´¸¸¸»¸»¾»¾¾¾»¾¾¾¾¾¾»¾¸¸´¸±­ªª§ª§£££££   §ª±¸»ÂÉÅÅÉÅÅŸ´§§§    ™’’‹ˆ…ˆ…~~~~zz~zzztttppiimmpmmmiiiimiiiimimpmp~z~ˆˆ…ˆˆ‹‹ˆ–´¾¾Â¾Åž¾¾Â¾¾»¾¾¾¾¸»»¾Â¾¾»¾¾»¾´´´´±­§  ™™’’’’™ª §´¸´¸´´´±´´´¸ÂÅÅÅÅž´­££œ œœœ™œ œ œ ££   §§ªª±­¸¸¸¸´´¸´´­ª­ªªª§§ ££  œ     £ £§ª§§££œ §££§§ ££§£ œ––ˆ‹…‹‹‹‹ˆ……ˆ………ˆˆ’–™–’’––™™™‹ˆ‹ˆ‹ˆ…z~wwwzwwwzwwpttwpwttpmii____X\__\___c\XUNNKAG=:3%%%)%"%""""""""%),)303:6:=AAAA==A===A:663330::==0:,3Uc_fiNff\\mcfiimmcifiifficccffcfcccf__ffc\\\URURXUKKURXXUXNRNKGAADGKKNRUXX\ciffppmimimmmpiiiffffffcccccc_ciiiiffffccc__\XXXXXUUURNNKKAA===:::::66633300000,,,,,))))))%%%%"%),),0,00,)%)")%%,,0,,))%%)000336=AAAADDDDDADDAA=A=6333000:UU\_\XUAG==60,,)%%),636AAGNU\cfippttwwtwtww~~wpttwwzz~~…ˆ‹’™œœœœœ   ££§   œ  £££ £§ªª§­­ª­­§ª§§§§ £™™–––’–œœ£ª­­­´´´¸¸¸»¾»»¾¾Â¾¾»¾¾¾»»»¾¸»¸´´ªª­ª§§££§££œ££§­´»¾¾ÅÅÅÅÅÅÅŸ±§§§œœœ’‹‹ˆˆˆ…~~~~~~~~~wwptpmpmmmpppppmimmmmmmmppptpt~……‹…‹……ˆˆˆ’’’¸»»¾¾¾Â»¾Â¾¾¾¾¾¾¾»»¾ÂÂÂÅž¸»´¸´´­­§£ œ™’’––– œ£±´±´´´±­±´´´¾ÂÅÅÅɱª  ™œ™™™™œœ œ  ££££££§ªª±­´¸´´¸¸»¸±­­±ª­ªªª£  œœ™œ£ ££  §§ª§§££ £§£§§£ §§£ œ™’’ˆˆˆˆ‹‹‹‹‹ˆ…~ˆˆ………‹’–™––’–––––‹ˆˆ…ˆzzwwtwttwztttpttpwtppmii___\U\_\X\\\_UNRNKGAD:63)%%%"%%"""%%""%)%,,00366===DA=====AAA=::66:6==AA3=0):Xf_imRff_cmcffimmcffiifffcffffccfcfc_cifc__\XRXN\XNKURUUUUNRNGGADDDGKNNUUX\cfffmmiimiimmpfffffffffcccccc_ciiiifffffcc___\X\\\XXXURRNNKKGGD===::66666333300000,,,,))))%%%%""%)),,)03,,)%%%))0,,,,,))),,00036=A=ADADA=A=:3=6::630000000:6DUXUK=D:030,,)%""%)0A==GGRUX_fimpttwwzwzwzz…wtwwwwz~~…ˆ‹‹’‹‹’–™œœ™œ    ££££ œ £  £ £§ªªªª­ªªª§§££§§  ™œ––––™œœ£§­ª±±±±¸¸¸¸¾¾»¾Â¾¾¾¾»»¾»»¾»»¸´´±ª­­ª§§§£££§ §£ª±´»Â¾ÅÅÅž´±ª££™™™ˆ‹ˆˆ……~z~~~z~~zwttpmmpmmipppttpmmmmmmpptttwwz………ˆˆ‹ˆˆ…ˆ…‹‹‹™–––¸»»»»¾¾¾¸Â¾¾¾»¾¾¾¾¾»ÅÂÅÅÂÅž»¸´¸±´­­§§ œ™’’–’™œœ ª±­±±±­­±±±±»ÂÅÅÅÉÅ­§ œœ™–––™œœœœ £§ ££§§ª­­­±´¸¸¸¸´»´­ª­­ªªªª§   œ™œ™ œ££ £§ªª§£   §£§§£§£§§ œ™–’……ˆ…ˆˆ‹‹ˆ………~…ˆˆˆ‹––––’’’’’~…‹~~~wzwwttttwwtppmtppwtpmmif__\\X_\XU\X\\UNNNGG=A:33,)"%"%)"""""%)%)%)%,,0,33:=:ADAAAA===AAA==::=:AADD3A3,=)\ccmm_fi_fmffiipmfcfmifffffffcfcfccc\cicfc__XXXNX\RNXURXUUKRKDGDAAGGGKNRUU\_fcciiiiifiiimffffcffffccccc__ciiiifffffcccc__\__\\\\XUURRNNKKGDAAA=:::::6633300000,,,,,))%%%%""%)%,0,300,,))%),00030,,,),,,036:AA=AA=A=:::63:3000,,),,,,)06=DGKG==600,),))%%%36DADKNUX_cimptwwzzzz~z~~……ˆtttwww~z………‹ˆˆ‹ˆ‹ˆ‹’–™™œ œ  ££££££    £££§ª­­ª­ªªª§§§££§£  œœ™™–’™™œ§§­­±±±´¸´¸¸¾¾¸¾¾¾Â¾¾»»¾»»»»»»´´­ªª­§§§§§££§£§§ª´´¸Â¾ÅÅÅÅž¾»´­ª£ ‹ˆˆˆ…………~~~~z~~~zzzwtttppimmimppttttpmpmmptwzwzzz……ˆˆ‹‹‹‹‹…ˆˆˆ‹‹œ±±–¸¸¸»»¾¾¾»Âž¾¾¾»ÂÂÅÅÅÉÅÅÅ»¾¸´´´±±±§§ œ™–’–’™™ œ§£§£­­­ª­±±±¸¾ÅÅÅÉŪ œœ™™–’™™™™œœœ££œ§£§ªª­±­´¸¸¸»¸¸¸´­­ªªªª§­§   œœ ™£œ££ £§ªª§££œœ££§£ £§§£œ™’’‹…ˆˆ……ˆˆ‹‹………~ˆ‹‹’’––’‹‹~z‹~~~~zwwwwpwwpttttpmtmpwtpiiicc\X\X\XRUXRXRRNGKDD:A6,0))%%"%"""%%%%)),%,)),0,00:::ADAAA=A=A=A=====A==DDG6A30"A,\ccmpcim_iiifmitpifimififffffccfccc_Xci_fcc\\\XXX\UR\XU\RUKRGGGDAAGGGGNNRU\_cccffififfiimcccccccffccccc__ciiiifffffffcc__\__\\\\XXUUURRNNKGGDDD=====::6663333300,,,,,)))%"%)),033,,0),,,3333630,,)),006::=A:==:A:::63060,,,)))%)),)033=DAA::33,)),,)%)3:AGGGNRX\cfmmtwzzz~z~~…ˆˆwtwtwwzz~ˆ……‹ˆ…ˆ…‹ˆ™™™  £  ££§§£££££ §§ª­±­ª­ªª§§§£££§§  œ™™™™–œœ §ª±­­±±±´´´¸»»»¾¾¾Â¾¾¾»¾¾»»¾»¸±´§­ª­§§§££ £§§§ª­±¸¸¾ÂÂÂÅž¾»´±ªª ’ˆˆ…ˆ………~~~zzzz~zzzwztpppmmmpmmmpttwwwtptppttz~z~~ˆˆ‹‹‹‹‹ˆˆˆ‹’‹ ­±´¸´»»¸»¾»¾Â¾Â¾ž¾¾¾¾ÂÂÂÅÉÉÅÅ»»¸´´´±±­§£  œ’’’’–œ™  œ£ª§ª§­±±±´¾ÂÂÉÌɧ ™™–™––™™–™™œœ £ ££§ªª­±±±´¸¸¸´¸¸±±­§§§§§­ª£œ œ œœ£ §££§§§ª§££œœ£££§ £££ ™’’–‹ˆˆ~…………ˆˆˆ~~…ˆˆ‹–’’‹…ˆzzzzzwwtwtmttppttppppmptpmfif__\UXX\URRUNNNRKDGAA6=6)0)%%""%""%%"""))))),0),),,,,0,6::ADAAAAAAA=A===:=A=ADDK6D63,A3_fcitcimfimifpfwtfimmiiiffffcfficff\\ffcfcfX\_U\X\UU\XX\UUNNKGDAAAGDDGKNRRX\cccfcffffffimcccccccccccccc__ciiiiffffffffc_____\\\\XXXXUUURRNKKGGGAAA==:::::6666630000,,))))"""%%%,,300,,,0366666:630,),03366=:A:=:6==:66603,)%))%%)))),,33:===6630)))0,))0:=DKKKRU\_fippwz~zz~~…ˆˆ‹ttttwwwwz~~~~z………~‹––™   £ §££§££££§ ££ª­±­­ªª§ª§££££££ œœœœ™™™œ £§ª­±±±±±´¸´¸»»»¾Â¾Â¾¾¾¾Â¾¾»¾¸´±´ª­ªª§§§§£ ££§£ª­´´´»¾Âž¾»¸±­ª§œ‹…ˆ…~~zzzzwzzzwzwtpmmmmipmppptwwtwttwtt~t~~…ˆ‹‹‹‹‹‹‹’’–­±´´¸¸¸»»¸¾¾¾¾Â¾¾Â¾Â¾»¾ÂÂÂÅÉÉÅ»¸´´±¸­±ª§ £œ™’’’‹–œœ£§£ª§ª±­±´»¾¾ÉÌɪ£™œ–™––™–™–™™™ ££§£ªª­ª±±­´¸¸¸¸¸´±­ª£££££ª§£œ£    §£§§§§§§ª££   §§£££   œ™’ˆ……~~…………~…~~…‹‹’’ˆ‹‹~~~z~twwwwtttpptpppppmppmpppmiffc_\XUXUXRUNRKDKNGGA=A3=3",))%""%%"%"""%",,),,,0,,),,,,003::DDADAAA=A=====:====ADK=G6:=DR_fcitfitimpmfpizpipppmimffiffciffic_\fcfccc\_\XXXXRR\XX\XUNKKDD=ADGDDGGKNRU\___cfffccfffi___cc__cc___c___cfffiffffffffccc___\\\\XXXXUUUURRNNKKKDDDDA===::::666333330,,,,)""""%)))03000336::::6::330,0366:::6=::63::66:600))"%)""%,,,))003:::636,%),0,,,3AAGNNNUX_cipttz~~~~~…ˆ‹‹tpppttttptwptw~~~zz~‹’’–œ  £ £££§§£§ ££ £ª­±±­­ª£§ª§£ £ £  œœ œœœ œ£ª­±´±´´­´´´´»»»¾¾¾Â¾¾¾¾¾¾Â»¾¸±´±­­ªª§§££   ££§§ª±±±»»¾Å¾¾»¾¸´±§§£™……~~~~~~zz~zzztwwwtwtppimppmpmpptptwwwttzwt~…‹‹’–’’’‹‹’’’™™±´´´¸´¸¸»»»»»¾Â¾¾Â¾¾¾ÂÅÅÅÉž¾¸¸±±­´­­ª£  ™–‹‹ˆˆ‹’’™  £ª§ª±­­´¸»»ÅÌÉŧ œ™™™™–––™–™œ £ ££ª§ªª±±±¸¸´»¸¸´­ª§ œ   §£ œ£  œ £§§§§§§§ª§£££œ£§££ œœœ™™’ˆz~z…~z~~‹ˆ’’ˆˆ~z~~zz\‹twtttpptmmpmmmmmmpmmpmmmiifccXUUURNNRNKGDGKDD===0:0%))%%"""")""%%%,,,00030,,0,,)0066:AGADAAA=A==:==::::==DNKG:=GGUcppwtcwwmmppitiztmtppmimfffcfcfccicc\c_ff__\\\\X\UNRXXXXXRRKGGDAAADDGGGKKNUX___cccc_ccccf\\\_____________cfffffffffffffccc__\\\\XXXXUUUURRRRNNNGGGGDAA===::::66666630000,%""%"")),,0633666:==:=666300336:::::6=6:603666:30,)%%)%%"%,,,%,0336666,3,%%,,,,0:GGGNNRX\cipt~z~……ˆ‹pppppppmppppptmpzz~zz~z~ˆ’’™œœ £££§£§§§£££££ª±±±ª­ª§£§££££££œ  œ œ œ  £ª±´´´±´±±±´´¸¸¸¾»»¾Â¾¾¾¾Â¾¾¾¾¸´´­­ª§§ª§      £§£§­­­¸¸¾Â¾»»»´±­§£ˆ…~~~z~zzzwzzwzzppttptmmmiippppmtppttttzwz~zz……’’–’–™–’’’––™§­±­´´¸´¸´¸´¸¸»¾¸»Â¾¾Âž޾»´´±­­±­ªª  œ™’‹ˆˆ…ˆˆ– ££§ªª­­­´¸¸¸ÂÌÌŧ£œœ™–™–™–™’™™œ£  £§§ª­±­­¸¸¸¸¸´´ª§£œœœ™œ  œ™£ œœœ §§ª§§ªªª§ ££œ££§ œœœœ™™’‹……~ww~w…~z~~z~~~…ˆ‹‹’…~zzzzzX‹twttpmmpiimmmiiimmmmmifmiicccXRURNNGNKGDAAGAA6=:36))))"%""""%""%%%,,,00333,,,,,,,063=AGDADAA=A==:=::6::::GURN=DKKXmttzw~zzppptiwiwwpwtppiifficffcc_ifc\__cc__X_XX\XRRUU\UXURRKDGDAA=ADGDGGGKRX_\\_________cXX\_\_\______\\\cffffcfcfffffcccc__\\\\XXXXUUUURRRRNNNKKKKGDDAAA==:::66666633330)"%"""%),)000:66::=====:=::60366:====6::3630336363,0))%)%%%),,,,0036633600,)),,,,DGKKKRRU\_fmtw…………………………ˆˆ‹mmmppmmmmfmmmimpwtwzzzz…‹’–™™œ£££§§£§§§§§££ª­±±­ª­ª§ª§§§£§£         £§­´¸´´´´´±±´´¸´¸»»»¾Â¾¾¾¾Â¾¾»¾»´±ªªªª§§§£  œ  ££ £ªªª´¸¾¾¾»¸¸´±ª£–~~z~~~~~z~zzzzzwwwppmmmmiimiimmpmmpptttwz~z~~~…ˆ–™œœœ™œ™’–––’–™£´±±´±±´¸¸¸´¸¸¸»»»»¾Â¾¾¾ÂÂÂÂÂÂÅž»»»¸±±­­­­§ªœœ–‹ˆˆˆ…ˆˆ‹‹–   £ªªª±±¸¸¸¸»ÉÉŏ§  œ–™––™––™–œ£œ ££§ªª­±ª¸‹¸´´±±ª£œœœœ™™œ™œ–  œ   §§­§§ªªª§£§§ ££§ œ œœ™–’’‹…zww~t…~z~zwz~~……ˆ‹’ˆ‹~z~wzwzUˆ~twttmfimfffmiffiiiimiffmfffccXRRNKNGKGGD=AGA=::633),%)%""""""""%"%)00033363,),),,,63:AGDDDAAAAA=:=::6:6::D…URAGNNipptzwzzztmttizzwztwwppmifffffffc_ffc_\___\\U\UUXUUUXUXXURRNNGDD===AADDGGGGNU\\\\\\_\_\\\_XXX\X\\\\\___\\\_ffffcccccfffcccc__\\\\XXXXUUUURRRRNNNNKKKGGGDDAA====:::66633333,%)%")),,,0336::=:AA=A==AA=666:6==:::36:333333333300,))))%),00000333633300,,,,0,6GKNNRUUX_cmpwz……ˆˆˆˆ…………………ˆˆ‹pmmmmiiiifiifiimttwwwtz~…‹‹–™–  ££§§§§§ª§ª§§ª­±­­­±­£§§§£§§§££ £ £  ££§­±¸´´´´±´´±±´±¸»»»»¾»Â¾Â¾»¾¸±±­ª§­§£££   œ   œ  §£ª´¾¾»¸´´±­§…ˆ~~zz~~~~z~z~zzzwwttpmmimmimffimmpmpmpwww~~z~……ˆ‹’œœ££ œœ™–™™™–™´´¸´´´´´±´»»´¸¸»¸»»¾»¾Â¾¾¾¾¾ÂÂÅž»¸»»´­­­­ª­§§™™’‹‹‹ˆ……ˆˆˆ‹’œœ  §§­±±¸¸¸´¾ÉÉŋª£  ™™–™™––™–™£  £ £§ª­­§¸‹´´´±­§ œœ™™–™–™’œœœœ œ§§ªª§­­ªª§§£ §§§œ œ™œ–––’‹…~wztzpzzzzwwz~ˆ‹‹ˆ‹‹‹…z~w~zzz\X…zttppicfic_fifcfmfiimfffmffc_c\NRKKKGGDDA:AD=:66603))%)"""%""%"%%),00333666,),,,0036:DGGGGDDAAAA=:::::::6A…XUDKNRmttwzzzzwwmtwmz~zwwwtpmmififiiff__cfccX_\\\XRXRRURURUXXXRNNNNKDD==AAAAADDGGNR\\\\\\\\\\\\_UUUXX\X\\X\\_\\\_ffffcccccccfcccc__\\\\XXXXUUUURRRRNNNNKKKGGGGDDAAA===::::6633330)))%,,000336::::=DA=A=ADDA=::::===6:336333633333600,),,),,)03333336336633,0,03GGKNNRUXX\_fpwz…ˆˆˆ‹ˆˆ…ˆ……ˆ…ˆ‹‹pmiiiffffcfifffipttttww~ˆ‹‹’–™œ £££§§§ªªªª§ª­±±±­­­ª§§§§§ª§ª§§£££££££§ª­´´´±¸´´´´´´¸´´»»¾¾¾»¾Â¾Â¾¾»»´´­­§ªª§££  œœœ œœœœœ™ £ »¾»»´­­ª£ˆ…~zwz~~~z~~~zzz~zwttppmiiiififiiiipimpttzz~…ˆˆ‹––£ §§£££œ™™™ ´´¸¸»´¸¸¸´´¸»»¸»¸¸¸»»»»Â»¾»Â¾¾¾Â¾ÂÂÅž»¸»¸±­ªª­ªª££œ–ˆ‹‹………ˆˆ‹‹™™  §£­±´¸¸´¸¾Éɏ§£ œ–––™™––™™– œ £££§§ªœœ¸¸±´´±ª£œœœ–™™™’–’œœœ™  £ªª§ª­±­ª§£££ª§ª  œ™œ–™’’ˆ…ztwtzpzzwwwww‹‹…ˆˆˆ~zzz~zwNXwtpfmf__fX\cfc_ciffiiifiicfc\_XRNNKGDADD===A=:663,0%%"%%"""%"))%000336:6:6),,,3036:DGGKGDGAADA=:===:=::D…t~KNRUptpwww~ztwmptpwzwwtwfmpifimifffcc_cc__X\N\XRNUNRXURURXXXNKNKKGGAA=A==DDDDGGKN\XXXXX\XXXXX\UUUUUXXXXUXX\X\\_cccfcccccccc_ccc__\\\\XXXXUUUURRRRNNNNKKKGGGGDDDAAA===:::::66633,,,)00300366::===ADADAADGDA==:::==:6336033633630300,),0,0003663366:633666033=GKKNNRUX\X_cfw~…ˆˆ‹‹‹ˆˆ……ˆˆˆ…ˆ‹’miffifcccccfffcmmptptww~‹‹’™™œ ££§§ªª­ª­ªªª±±±±­ª§£§§ª§ªªª§§§§§££§£ªª­±±±´¸´¸¸¸´´´´´»»»¾¾»»Â¾¾»¸¸´ª­§§ª£££ œ œœœœœœ™™™   ¸¾¸¸±ªª§‹……~~zzz~~~~~~~~z~zzttpppiiififfffiipmmtwwz~……ˆ…‹œ™§ªªª§§§  £™´¸¸¸»¾¸»¸¸¸¸¸»»»»»¸¸»¸»¸¾¾¸»¾Â»»»¾»¾ÅÂÅ»»¸¸±­­ª­ªª œ™™’ˆˆ‹………ˆˆ–™  §§ª±±¸¸´»ÂÅŜ’§  ™’’’™™™–™–™ ™ £ £§™œ™™¸´´´±§£ œœ™™™™–’–’™œ œ ££ªª§­­±­§§§§£§§§£ œœœ™™’’……~wwwzpzztwtw~t~…ˆ‹‹……~zzwz~ztAc~tpfccc\XcUU_fc\_fffffiiifccc\\URRNNGAAAA:==A:6630,""""%""""""%"%))00066:::=:3,000,6:=DGGKGGGAAA=A===A====A…t~N\UXtpmtttzwtwpppmmzzzttfipmfmpffffcc___\_XXRXUNRUNNUUNUNUUUKDNKGDGAD=D==AAADGGNKXXXXXXXXXXXX\RRRUUUUXXUUUXXXX_cccccccccccc___c__\\\\XXXXUUUURRRRNNNNKKKGGGGDDDDAAA===:::::6663000,03333666==:=ADDAAAADGGDA:::6A:660663606333633,,,),0033336:63:6=66636:36:GNNNRRUXXXX\cmz…ˆˆˆ‹‹‹ˆˆ………ˆˆ…ˆ’mifffc__ccccfcfiimpppttz~ˆˆ‹––™ ££§ª§ª±­­­­­­±­­±ª§§ª§§§ª§ª§ªªªª§§§§ª­ª­­­±´±¸¸¸´¸´´´»¸»¾»»¾Â¾Â»¾¸¸´±§­§§§£  œœœœœ œ™œ–™™œ œ´»´ª§§§–ˆ…zz~~~~~~~~~zttpptmmiifiifiiipmpttzzˆ……‹ˆ’’’ ™ª­­­ªªª£ª´´¸¸»¸¾»»»»´¸¸¸¸»¸¸»¸»¸»»»¾»»»¾¾»¾»»¸¾ÂÂÂÂÅ»¸´¸±­±ªªª§ ™™œ–‹ˆˆ………ˆ‹‹’–  £§ª­­»¸¸»ÅÅŜ–£ œ–’’–––™––™œ – £ §§™™–™´±´±±ª§£ œ™œ™–––––œ™ œ ££­ªª­­±­§§§§§§§§§£œœœœ––’ˆˆ~zwwzpzztwwz~wtˆˆˆ~~zwtzzwtDfzpmi\X_XU_RU_cc\\cffcfiffi__cX\RNNNKKADA=:::=6630,)")%%"%"""""%%%),)30366:::==6:6006:=ADGGKGGGDAAAA=AAAAAAADGpzRcX\ttipippwtwtpmmiwzzwwfftmimmifcf____\_\URNXRRRRKNRUKRNRUUDGKGGDKAA=D==AAAAGDKNXUUUUUXUUUUUXNNNRRUUUUUUUXUXX\ccccc_cccccc______\\\\XXXXUUUURRRRNNNNKKKGGGGDDDDAAA====::::66660330366336:6===ADDDDDAADGGD==6::=:633363336363330,,,,0333666:=6:A:A:::6::=:=KRRRRUXXXUUX_t~…ˆˆ‹‹‹ˆˆˆˆ……ˆˆˆ…ˆmfcfcc\\_ccfffcimptptttwz~ˆ…ˆ‹’’–œ £§§§ª±­­±­­±­±­­§§£§£§§§§ªªªª§ª§§§§ª­­­­­±´±¸¸»¸´´´¸¸¸¸¾»»»Â»¾¸»´´±­§ª£££   œœœœœœ œ™’™™ œ ­¸±§£ œˆ……z~…~~~~tppppmifiiiifimimpttw~~ˆ‹……‹‹–––£§­±­­ª±­±±¸¸»»»¸»»»»¾¸¸¸¸¸»»»¸¸¸¸»¸»»¾»¸»»»»»»¸»¾¾ÂÅž´´¸­ª­­­ª§ ™–™–‹‹ˆ……ˆˆ‹‹–’  ££ªª­»»¸¾ÅÅŜ– œœ––’™–™™™––œ ™   £§£™–§´±±­­­ª£ œœ™–––’–’œœ£œ  £ª­ªª­­­ª§§§§§ªª££  œ™–’‹…zzztztzwwwwwzwp~ˆ…‹…~zw~wtpwwtpwztmff\RRRU\RU\cc\U_cc\cffcf\\cX\RNNKKKDA==66::333,))),%"""""%%"%%%),)33366:======:::::ADDGGKGGGADAD=AAAAAAA=DKpwUz\_ppfmfpptwtpppmmtz~wzicwmmmifcfc____\\XURKUNRNNGKGRKRKNRRDKKDGAKAAADA==D=DDDKKUUUUUUUUUUUUXKKKNRRRUUUUUUUUU\cccc___c___c______\\\\XXXXUUUURRRRNNNNKKKGGGGDDDDAAAA====:::666:03336::363::==ADGGGDGDADDGD::6::=666666333333600,,,000333::==A=ADAD===::=A=ARUUUUX\XXUUX\~…ˆˆ‹ˆ‹ˆˆˆ………ˆˆˆ‹‹’ifcc\cX\__cfffcmpptpttpwz~……‹‹’–™œ £§ªª±±±­ªª­±­­­§§§§£§§§ªªªªªªªªªªªªªª­­­±±´¸¸»»¸´¸»¸¸¸»»¸»¾»»¸¸±±­­ª§§£ £œ ™ œ™œœœ™™––™œœ ­´ª£œœ–ˆˆ……………………………~~wtpppmmiimimimmmpmwwwˆ‹ˆˆ™’™§ªª±­±­´±¸´»»»»»»¾»»¾»»¸´¸»»¸»¸¸´¸¸´¸¸»¸¸»¸¸¸»¸¸¸»¾ÂÅž»¸¸­ªªªª§£ ™™–’‹‹ˆ…‹ˆ‹‹‹––  £§§§ª¸»»ÂÂÅÉ –™™œ™’––’™–œ™™œ œœ  £§§ª–­±±±±­­ªª£ œœ™™™–’–œœ£ œ £ªªªª­ªªª§§§ª§ªª£§££ ™™‹‹~z~twtzzzzzzztt…ˆ~~tztpitwpmtwiiccXRRNRXURXc__X\_c__cc_cX\_U\UKRNKKDDA=3666030)%"),0""%""%%%"))%),,33336:====AAA=A=:ADGGKKGDGADAD=AAAADDA=D~pwwz\wmfciimttwpmpmmpwwzwwifwmpmffcccc___\\XRNGRRNKKGGGUKNNRNUGKGDD=G===DA==AADAAGGUUUUUUURRRRRUKKKKNRNRRRUUUUUUXccc_______________\\\\XXXXUUUURRRRNNNNKKKGGGGDDDDAAAA====:::666:36036:6666:=A==DKKGGDADDADA::666:6363333030003300,,,03336:6AGDGGGGKA====ADKDUXXXXX\XXXUX\…ˆˆˆ‹ˆˆ…ˆ……………ˆ‹’ffcc\_X\_\_ffifptpttptpwwz…ˆ‹’–™  §§§­­­±§§­­ªªª§ª§£§§ªªªªªªª­§ªªª­ªªª­ª­±­´´¸¸»¸¸¸¸¸¸¸»»¸¸»¸»¸´±´ª­ª£££ £  ™œ™™™™™––™™™œ  ±­£ œœ–’‹‹ˆˆ……ˆˆˆ…ˆˆˆˆˆ……~zwtpppmmimmmmmppmtpwzz…‹’’––™£§­±´´±¸´»¸»»¸»¾»»»»»»¸¸¸¸»¸¸¸´¸¸¸´±¸´¸¸¸»¸¸»»¸»»¸¾ÂÅž»¸±§­§ª££ œ™–’’‹‹‹ˆ‹ˆ‹‹™™  £§§ª­´¾»¾ÂÅÌ ™™–™–––’™–™™œ™     £ª§­­±±´±­­ª§§ œœœ–™––’™œ™  ™££ªªªª­­ªª§§§§§ªª£§§£œ™™‹ˆ~zzzw~~~zzz~ww~~~…~…~~iwmmmpwpmpmfc_UURNNRUUN\c_c\\\c\\___cXX\U\RNRNKGDAD=6333330,%%)03%)""%))),,33666:===ADDDADADDGGGKKKGGADADADADDDGAAD~mttzwtmfcmiipptpmtppttwwttmitimiffccc____\\UNKKNRRNNKGGRGRKNRRRNDADAD=A=DA====D:=DGURRRRRRNNNNNRGGGKKNNNRRRXUUUUX__c__c______\\\___\\\\XXXUUUURRRRRNNNNKKKGGGGDDDDAAAA====::::66=66333::36:::===AGKKKADAD=AA=636363030000,0,,000,,,,,0366:=GKKKKKNNRGGGAADGNUXXX\XX_\_\X\c…ˆˆ…ˆˆˆ……~~~……ˆˆ’cc_c\\\X\_cffiitwtwttttww~…ˆˆ‹‹–œœ£££ªªª­§§ªª§ª§§§£ §§ªªªªªªª­ªªªªªªªªªªª­±±´¸¸¸´»¸´¸¸¸¸¸´´»´¸´´±´­ª§§££  œœœ™œ™œ™™™™™™œœ£ª±­£ œœ––‹‹‹ˆˆ‹ˆ‹ˆ‹‹‹‹ˆ……~zttpppmmmpmpmppptwww~z‹’’’–––™£ª±´¸»´»¸¾»»»¸»»»»»»¸¾»»¸´»¸¸»¸¸¸´¸±¸±´´¸¸´¸»¸¸¸¸¸¾ÂÂÂÅž¸±ª­ªª£§  ™–’‹ˆ‹’™™£ £§§ª¸´¾»ÂÂɪœ™––––’–’––––™œœœ£ œ§ª§±­´´´­±­ªª§œ™™™–™’––’™™œœ ™ £§ª§ª­­ªªª§§§§­ª§§££œ™™‹………~~~w~~~zzzzwwzz~…~zmpimmittmc__\XXUNKNNRUR\fcc_\Rc\U\\__XXXU\RNNNKDDDD=33303030)),36)",%"%)%%,)3366::==AADGGDGDGGKKKKKGDGADADDDDDGGGDAGziptwtppf_mffppttmttptpwwtmmipiifiicccc___\\RNNKKNNNNKDGNDUGNRUURGAGDG===AAAAA:A===DRNNNNNNKNKKKRGGGGKKNNNNRURRUUX____\___\\\_\\\\__\\\XXXXUUUURRRRNNNNNKKKGGGGDDDDAAAA====::::66=3330666036:6:::=DGKG=A=AA===633330,0,,,",,),,,)0,0,036:=DKNNNRURRUNNNGDDRUXX\\__cccff\\mˆˆˆˆˆˆ……~~…ˆ‹__\_XX\X\\cfimmwztwwwtwwwˆ‹ˆ‹‹‹’™™  œ§§ ª§§ªªª§§£££££ªª§ª­ªªª­­­ªª­§ªª§§ªª­±±¸¸¸¸¾¸¸¸´´¸´±±¸´´±±­±ªª§ª§ ££œœœ™™™™™œœ™™œ œ£­­ª§£œ™’’‹‹‹ˆˆ‹ˆ‹‹‹ˆ…~~wttpppppipptpptpwwz~’’’––’™–™œ§­´¸»¾¸»»¾¸»»´¸¸¸¸¸¸»¾¸»»¸¸»¸»»´¸¸¸´¸´¸±¸¸´¸»»¸¸¸»»¾ÂÅž»¸±­ªªª§£  œ™’’‹‹‹’––œ££§ª§­»±¾ÂÂÅ£§œ™––––’’–’–’™™œœœ™£  §ªª±­´´±ª­ª§§£™–™™–™––’’™–œ  œ £§ªª§­­­ª§§ªª§­ªª£ £œ™–‹…ˆ~~~…~~~w~zw…w~~……zpmfmiippic_\\XXURKKNNUU_cfccXRcXR\X\\XXXU\RNNNGGGDAA36633333,,066)%0)%%"),)%),3366:=A=ADDGKGKGKKKNNKKGADAAADADDGGKGGDKwimttmtti\iifppptppptpmwwtmifmiififccc____XXNKRKNKKKNGDDKDRGNNRURKKGGKA=A=A====A:::ANKKKKKKGKGGGNDDDGKKKKNNNRRRRRX____\\\_\\\\\\\\__\\\XXXXUUURRRRNNNNKKKKGGGGGDDDDAAAD=A==:=::66A3363666,33:666:==DGDAD==A:=:30000,),))%%)%,))),,0)036==GNRRRUXUUXRRUXRXUXX\c_ccfiippmm~ˆˆ‹ˆˆ……………~…ˆ‹‹\_\\XXXX_\_fip~z~wwtttwzz‹‹‹––œœ™£œœ£§£§ª§§£££££§§§§ª­ªªª­­­ª­­ª§ª§£§­ª­­¸´¸¸»¸´´´±¸±±­­±­±­ª­§§§§§££ œœ™œ™–™œ™œœ™ œ£§ª­­§ œ™–’‹‹‹ˆˆ‹’‹ˆˆ…~ztwttpttppptwttwpzw~ˆ’–––™–––™™§ª±¸»¾Â»»¾¾»»¸´¸´´´¸¸»»»»¸»¸»»»¸´´¸´±´´¸´¸¸¸¸»»¸¸¸»»Â»¸´­ª§ªªª££ wœ––’’’’’‹’’–™– £§§§­±¾±ÂÅÂÉ££ ––––––’–’–––™™™ –£ ££­ª­­´±±ªª§§£ –––™’––––’™–œ   ££§ªª§­±­­ªªª­ªª§§£ £™–’’‹…ˆ…z~~ˆ…~~z~~wz………~ztififimmfc\RXXUURKNNNUX\cccc\UcXRXX\XXXXU\UNNKGGGGDA3:366666033::,)3,))%3)) +)%%))03:::=AAADGGKKNKKNNKNNNGADA=DDADGGGKKKRNtimppmtwmXmmitptwmppttmzwtpfcmiffficcc__\\XXKGNGKGGKKGGGGARKNRRUUKNKKN=AA=A=====:::AKGGGGGGDGDDDKADADGKKKKKNNRRRRU____\\\\\\\\\XX\\\XXXUXUUURURRRNNNNKKKKKGGGGDDDDDAAAG=A==:=::66=6630333)3366336:=ADD=A===::60,,,))%""%")),)0)0,03:A=KNRUUX\XX\UXX\\c\\\_fcffimmttwwˆˆ‹‹‹ˆ…ˆ…………………ˆ‹\\XUUXXU\\cfmt~~~zzwwwz~~…’ˆ‹‹’’™ ™™œ££§§££§££§§§§§ª§ª­­ª­­­ª­ªªª§£§§ª­­­´±¸¸¸¸±´´±´­±­­­­­ªªªª£§£££    œœ™–™™™œœœ£ §ªª­­ª£™™–’’’‹‹ˆˆ…‹‹’‹ˆˆwptttttwttpwzwzzz~~…–™™™œ ™§™§´¸¸»¾¾Â¾¾»¾¾»¸´¸¸´´¸»¸»»»´¸¸¸¸¸´´±´¸´±´´¸´´¸¸»»»¸¸»»Â¾¾±ª±ªªª­ªª£££wœ™™––’’’’’’–™œœ££ªª§±±Â±¾É  £ ™––™–’’––™––œ™œ ™ £ §ªªª­±­­ª§££œ™’’’––™––––™™œ££ ££§§­ª­±­­ªª­­ªª§§   ––’‹…ˆ~……ˆ…~~~…ˆˆ~zwpifiifiic_\U\XUXNNNRRRUX__cc\XcUUXXXUXXUX\RKNKGDGDGA6:6::6:6360:=0,60,,)6,),%%%,366:==AADDGKNKRRNRRNRNKDAA==ADDGGGKKNNXwwiimmiptiUimitptwippttpzwwmfcmiffficfc__\\UUKGKDGGGGGGDGAARKKNNRUGNNKN==A=====:::::AGDDDDDDDDDDDGDDADDGKKKKKNRRRRU____\\\\\\\\\XXX\\XXXUUUURRRRRNNNNNKKKKGGGGDDDDDAAA=K====::::66:6330030,0033336::AADA=::=663,,"%%%%%,,,),,,0:AAKNRXX\_\\\X\___f___cififmppwwzzˆ‹‹‹‹‹ˆ…ˆ…………………ˆˆ‹‹\\UUUXUU\\_fpw~~z~wwzz~‹’’’‹‹‹‹–‹‹––œ ££§££££ §§§£§ª§ªª­ªªª­ªª§§§§§§§ªª­±´´´´´´´´±±±±­ªªª­­§ªªª£££    œ œ™™™™™™œœ §£ªª­±­ª£ œ™–’‹ˆ………‹‹’‹‹‹ˆ…~~ttwtttwwwwtwz~~z~…ˆ‹’œœœœªªª¸´´¸»»¾¾Â¾¾¾»¾¾¾¸¸¸´´´´»¸»¸¸´¸¸¸´¸´±±±´±´´±´±¸»»¾»»¸¸¾¸¾¾¾»±ªª­­§ª­ª§£££  œœ™–’–’’––™œ  ££ªªª´±¾´ÂÅŜ   œ™’––––––™™™™–œœœœ  §ª§§ª­ªª§£  œ–’’’–––––––™œœ £££§ª§­­­­­ªªªªªªª§§œ œ’–’’‹ˆˆˆˆˆ………………ˆ‹ˆ~zwwmifiififf_\X\XX\RNRNRNRU\\cc\\cRX\UXUX\UU\UNNKKGGAGD:6=:=:::6:3==306300,:,,,%))0336:==AADDGNRRUUURUUUNNGAAAAAGDGGKKNRUtwwmfcifmffXfiftppwipptptwwtpf_miffffcc__\\XUUKGGGDDKDAKDDAARNGNNNRDKNGN:=AA===A::=::=DAAAAADAAAADDAADDDDGKKKKKRRNNU___\\\\\\\\\XXXX\\XXXUUURRRRNNNKNKKKGKGGGDDDDAAAAAA=N==::::::66A3330333,0033336:=DDDD==6=330))")%""""))),),,3:=DNNR\\___cfcfcfcicccffiiimttzz~~~ˆˆ‹ˆ‹‹…ˆˆˆ……………………ˆ‹X\XUUURUXX_ipw~~~~~zzz~……––’’’‹‹ˆ‹‹‹‹ˆ‹’™– –££ ££ £££ £§§­§­ª­ªªª­ªª§§§§§ª§ª­´´±´¸´¸±­­±­ªªªª­ª£§ª§££££££ œ œœœœœ™™œ  §§ªª­±­ª§£ œ™–‹………ˆ‹‹ˆˆˆ…~ztwttwwwzwwwz~~……ˆ‹––    ±´»¾»¾»¾¾Â¾¾¾¾¾»´´¸´±±´¸¸¸»´´´¸´´´´­´­´±¸±´´­´»»¾»»»»¾¸»»´¸­ªªªªª§­§§£££££ œœ––––’–––™œ ª­­­­­´´»±¾ÂŜ£  ™–––––––™™™™™–œ œœ  £§§£§§§ª£œœ–™’’’’’–––––™œ  £  §§ª§ª­­­­­ªªªªªª§§™œœ–––’‹‹ˆ~……ˆ‹‹ˆˆˆ…………ˆˆ…zmttiififcfcc__U\\\XNNNNNNKU\_cf\\cUXXUXU\\RU\RNNNKGDDGD::A:===:6:6=A33:6330=000)),363::==AAGGKRXX_XXXXXXRNGDDAGKGDKGNKRUzwwtifccf_ff\cffpmmwmppttwtttmf\miffffcc__\XXUUGDGGGDGADGGGAANNKNKKNDKKDK:==D=====:::==A::===A=A=AAD==AADDDGKGKKNRNNR___\\\\\\\\\XXXXXXUUURURRRNRNNNKKKKGGGGGDDDDAADDA==ANA::::::636D00030000336366:=ADDAAA:3:0,,,)"%%%%%%,,)))3==GKNU\\cccfifififmffffffiimttzz~z~ˆˆ‹‹‹ˆ‹‹ˆ…………………ˆ‹XXXURRRUXX_ipw~~~~zzˆˆ’–––’–’ˆˆˆˆ…ˆˆ–’–’        £  §£ª£ª­ªªªªªªª§§§£§§£§­±±´¸´±´­­ª­ªª§ª§ª§§ª§§£§££  £  œ   œœ™  £§§ª­­±±­ª§£ ™–’……ˆˆˆˆ‹ˆ‹ˆ……~zztwwtwwwzzwzz……ˆˆˆ‹‹££££ªªÂ¾¾Â¾Â¾Âž¾¾¾Â»»¸´´´­±´´´´¸¸´±¸´´´±±±±±´´´´±±´¸¾¾»»»¾»¸¸¸´­­ª§ª­ª§ª§§£ £ £  œ™–––’–––– ª­´´±±­±¸¸±»Âœ£  ™–––––’™™™–™™™œ œ œœ£££££§§§ ™–’™’’’–™™™™™œ   £ £ªªªªª­­­­­ª§ªªªª§£œœœ™–’’‹ˆ…~………‹‹ˆ‹…ˆˆ……~………zwimpifffccfc_c_U_\_UKKKNKNKU\\_f_\cUUUUXR\\UU\RNNKGKGDGGA=D=AA==6=:AA66::663A003000666::==AAGKNffcfc\\\\XRRGGGAKURGRNRKXzwtttifccf_ff_cffppmwippttwpppif\mifffccc_\\XXURGDDDDDKDGGDDGD=KNKKGNGGG:A===DA===:::::=:::::==:=:==A====DDDDGGGGKNNNR___\\\\\XXX\XXXXUURRRNRNNNKNKKKGKGGGDGDDDADAAADD=A=AND::6:66633G,00000330063::::DGDDAA:660,))%"%%"")0,,%,3D=GKRU\_cfiimimimimiiccffiimptwwzz~…ˆ‹‹‹ˆˆ‹………………ˆXXURRNRRXXcipt~~~~…‹’–’’–’’‹‹ˆˆ……‹’’’™œœœœ œœ  œ£ œœ§ª­ª­ª­ª§ª§££££ £ª­­±´±­±ªªªªª§§§£§££§§££££§£££    ££     §§§ª­±±±­ªª§£œ™’ˆˆ‹………ˆ…ˆˆ……~ztzzwwwzwzwzz…ˆ…‹‹’™ª§§­­¾ÅÅÂÂÅž¾Â¾¾¾¸¸¸´±±±±´±¸¸´´´±¸±´±­­±±´´´±´´´´»¾¾»¾»»»»¸´´­±ª§ª­§§ª§§£ £  £ œ™–––––’™™£­¸¸¸´­ª­´´´¸¾¾ £  ™–––™–’™™™™–™™œ   ™œ£ £££§§£œ–’’–’’’™™œœœœœ  £££§§ª­ª­­­ª­­ª§ªªªªª£  œ™–’ˆ…ˆˆˆˆ…‹……ˆ…~~wpiiffccc_ccc__cXc\_UKKNKGKNRXX\fc\cRXRUUU\_UU\RKKGGKGGGDD=GADDAAAA=DD::==::6D3336333::6:===AAGKRmifif__\_XURNKNRXXUXc\Rzwztpppicc_cccf_ffippmwipmpptmpmff\mifffcc__\\XUURGDDAADGGKGAGKG=GNGNDKGDK:AAA=GA====::::=6::=6:::====A:::=ADADGGGGGKNNR___\\\\\XXXXXXXXUURRRNNNNKKKKKGGGGGDDDDDAAAAA=AAA===ND6:3663303D,0003303006:AAAADGDA=A6:63))%%%))"%"%0,0A3:GGGRRX\cmmmmpmpmmmimicffffimptwzwzz~ˆ‹‹‹’ˆ‹ˆ…~~……XUURRRRRX\fimw~~…~‹–’’–’’’‹‹ˆ………ˆ‹‹‹’™™™œœœ™œœ™™œ™™£§ªªªªªªª§§£ £££ §ªª­ª­ª­ª§ª§§£££  £ ££  §££§ £   ££££££££§§ªª­­±±±­ªª§ œ–‹‹ˆˆ…………zzwzzwwwwzwwwz…‹–œœ™´´ª´¾¾ÂÉÅÅÅÉÅÂÅÅÅž¾¾¾¾»´´¸¸±´­´´´´´´´¸´¸´´±­ª­±±±±´´´±´¸»¾»¾»»»»»±´ª­ªªªªªª§§£££££££  œ™™––––™œ§±»»»´­ª­±±¸¸»» £  œ™––™’’––œœ–™œœœ £™    ££££ ™’’’’’’––œœ  œ    £§§§ª­­ª­­ª­­ª£§§ªªª£££œœ–’’ˆ………ˆˆ……ˆ………~z~tzmmfffccc__c___cc\c\\UKNKKDGNNURXf__cRUNUXX\_RU\NKKKKKGDDDGAKDGGDDDD=DD=:===::G:::::::=::==:=AAGKptpimic___UURRNRX\\c_fmpwwzttppicc__c_f_ifmpmiwmpipmtmmiii_mifffcc__\XXUURDAAAAGKGGGDDNKAGKKNAGDDG=AAD=GD===:=:::=366=:::=====A:::==AADDDGDKGKKR\\\\\\\\XXXXXUUXUURRRNNNNKKKGGGDGDDDADAAA=A======:::NA6636300,0A03,0333633:=DDDDDGGDA=66:6))")%%)%%%%,,=D:=KKGU_fmmpppptmpmmmmmifffcfimpwwwwwwz…ˆ‹’‹‹ˆ……~~……XURRUNNR\_ifmzz…~…ˆ‹–’’’’’’‹‹……~…ˆ…ˆˆ‹–’–™™™™™™–™™–™ £§§ªªªªª§£      £§£§§ª§§ª£§§£ £ œ   £ £ £ ££££ ££££§§§§§£ªªª­­±±±­­ª§£œœ’‹ˆˆ~……~zzwwzttwwwtwtz~ˆ£±´¸»¸»¸ÂÂÅÅÅÅÉÉÅÂÉÉÅÅ»¾»¾»´´´´±´±´´´´±±´´´´´´±ªª­­­­­±´´´´´¸¾¾¾¸»¾¸»±´ª­ª­­­ªªª£§£££££££ œ–™––™™œ ª±¸¸¸±­§­ª±¸»»£   £œœ––™’–™™œ™œœ    œ   œ    ––’’’––œ™ £   £££ªªª­±­­ª­ª­­§ §§§ª§§§£œœ™’’ˆ…ˆˆ……………~~zwzpificcf____\_\\_cf_c__UKKKKGDKKRRUccccRRNUXU\_UU\DGKGKGDGGDDDNGKGDDGDAGGAAADD==K==========A==A=AGNtwzzpiccc\\XUURX\__fcimptwwttpmfc_c___f_fimpiiwppmpppppiiicmiffcc__\\XXURNDA===DNGKKGDNGADGGK::ADD=A=G=GG===::::==6:::=:=:::::=666====AAADDGGKKN\\\\X\\\XXXXXUUUUURRRNNNKKKKGGGDDDDAAAAA=====::::::6N63333030,00,0,03666666AGGGGGGKDA::::6%)%)))%))")"""),AGDGKRUXiipptttmtppmmpmpffccfffmpwwwwwzz…ˆ‹’‹‹‹…~………XXUURRUN_ciimwz~~~~…ˆ’––’’–‹…~~…………ˆ‹’’–’–™––’–’–™™£§§§§ª§ £ œœ   £ ££§£ª§ ££   œ™ œ  œ    ££ ££§£§££§§§§§ª­ª­±±±±­­§£ œ™ˆ……~z~~………~~wwwwpwwtwttwz‹’´´¸»¾¾¾ÂÅÅÉÅÅÅÉÉÉÅÅÅÅÅž»¾»»´±±±±±±¸´´±±´´´±´´±±ª­ªªª­ª´´´¸¸¸»»»»»»»¸»´´ªªª­ª­ªªª§§§§§£££  œ™™––––™œ§­´¸´±ªª­­±´¸£     œœ™–™–––™™œœ  £        œ œ––’’’’–™œ     £§§­­­ª±ª±ª­ª­ª£ £££ª£§§£ ™œ’’’ˆˆ‹………………~~~zwtwifcfc_c\\\\X_X\cfiffc_XNKKKGDGKNRR_ffcNRUXXU\_UU\DGKGGKDGGAADRGNGKKKGDKKDDGGGAAKAAAAAAAADAAA=A=AGNˆˆˆ‹wifff__\XXU\__fifmppptwttpmffcc_\_f_fiipifwmtpmmmpmifffmiffcc__\\XUUNNAAAAADKGNNGDNKDAGGG::=D==A:DADG=AA:=:::=:===:::::=::=666:A==AAAAADGGGNXXX\XXX\XXXXXUUURRNNNKNKKKGKGGGDDDDAAA===:=:::::66:6K33303000,,000,0333:6::DGGGGKKGAA6=:66%)))))%%%%,%""""%"""")GDDGKRX\fmmttttwptpmpppppiccccffmtwzwzw~~ˆˆ‹‹‹‹ˆ…~…………X\XURXXUcfmmpw~~z~~~z~…‹–––’–’’‹…~~……ˆ‹‹’––––’–’’’ ™£££§£œ œœœœœœœ   £ §£  £œ  œ™œœœ ™œœ œ   ££§§£££§§§§£ªª§ª­­±±ªª£ œ™–‹…ww~~………~wwtttttttptwwˆ’¸¸»¾ÂÂÂÅÉÅÉÅÅÅÉÉÉÅÉÅÉÅž¾»»¸¸´±±­­­±´´±´±±±±±¸´´±­­­­­­­´±±¸»¸»»¾»¾¾»¸»¸±ª­ªª­­§ªª£§ª§§£§£  œœ–––––™œ£ª±´±­§­­­±±¸£ œ   ™œ™–™’’––™™™œ  £œ œœ œœ œ ™––‹’–™œ      §ª­­±­±­­ªªªª§ ££  §£§££ œœ––’–’‹‹………~~~zzwtpcfc___\_XXXXU\X_fimii__\RNKKDDGKGNKRcic\\X\\U\_XU\DKKGGGDGGDDGUKNKNNNKDKKDGNKNDDKDDDDDDDDGDDDAA=AGN‹‹‹‹…iifcc_____c_iiiipmpwwwtpmffcf_\_c_ifipmiwitpmmppimcicmiffcc__\\UURKKD==ADAGDKKDGNKGDDDD:6:A::=6DDAD==A:A:::A==A======:66::66:=::==ADADDGGKXXXXXXXXXXXXXUUURRNNNKKKKGGGGDDDDDAAAA===:=:66:66366G300000,,),003,30366::=DKGGKGKGAD:=:3:))%)%)%)%%,)%%%%%%%""%GDGGKNU\cippwwwwwttppppppmiffccffmpwzwzw~~…ˆ‹‹‹‹…………ˆ\X\X\\ccfipmpw~~z~zzz~~‹––™–’–‹ˆ~~~~~~…ˆˆ‹’’––’’’’’‹‹‹‹’’  £ œœ™™™™œ™œœœ £œ£ £££  œœœœœ™œ™™™ œ œ   ££§££££§££ª§£§ªª±­§§  ™–’ˆ~zzz~~ˆˆ……ztttttpppppwt~’»¸¾ÂÅÅÅÉÉÉÉÅÅÉÅÉÉÅÅÅÅž¾»»»¸´±´ªªª­±±±´­­±´´¸¸´±±ªª­­­ª±´´´¸¸¾¾¾»»»»»»¸´­±ªªªªªªª§ªªª§£ª££ œœ™™––™œ  ª­±­ª§ª­±´´»  œ  £œ™™™™’’––™™œ™  £  œœœœœ œœ™–’’–™œœ ££ ££ª±±±±±­­ªªª§£ ££ ™§§§§£   ™––™–‹…~~~z~zwppmmfc_\_\XXURURUXXcfmpmf_c_URKGDGGKGNNRciccc_\_\\_XU\GNKKKGGGGGGGUNRNRRNNKNNNKRNRGKNGDDDDDDDKKGGDDAAGN‹‹ˆmmiifccccccmmpmmpptwwwtppii_f\\_c_ffimpiwmptmmmmfp_m_miffc___XXURNGGDAADA==AGGGKKGDA6A=666=66:6AAAA==A=D:A==AAA===A==::6:6336=::===A=ADDGKUUUXXXXXXXXXXUUURRNNNKKKKGGGDDDAAAAA====::::66:63333D000,0,,,))3,300336366=DGDGKKKGDD==:6=,,"%%%)))%)))))))))%"%GGKKKXXppmttwzzzzttppppmppmifffffmpwzwzw~~……ˆ‹‹‹‹ˆ……………ˆ…‹_X\\fcifimpptw~~~w~zwzz~ˆ’™œ–––‹‹…~~~~~~ˆ‹…–’–––’’‹ˆˆˆœœ™™œ™™™™™™™œ™œ ™  £££ £œœ œœ™œ™œ™œœ œ œœ££££   £  §§£§§ª­ª£ œœ™’‹…~~z~~~…‹‹…ˆ…~~twtttmmmmptt~±¸»¾ÂÅÉÅÉÉÌÌÉÉÉÂÉÉÉÅÉž»¸¾»¸´±±ªª­­­­±±±­±±´¸¸¸´±­­­ªª­­´´´´»¾¾¾»»»¾¾»¸±­­ªª­­ªªªªªª§ª§§£   œ™œ–™œœ£ §§ª§§ªª±±¸´ª  ™ œ£œœ™–™’–––™™™™  £ œœœ™™œœ œ™––’‹’––™™£ £ §£ª±±±±´­­ªªª£§   £’§§§§£ œ ™™–––~w~~~z~z~zwtmpiffcX\_RUURNRUUU\ffmmmicc_XRKGGGGGGNNRRfffic_c___XU\NNNNKGDGKGGKXNRNRUURNRRRNURUKRNGGGGGGGGRNNGGGDDKN‹‹‹’‹‹…zwpiiiiffpptpptttwtwttmim_i\X\c_ciimpptmtwppmmitcm\miffc__\XURNKDDGDAA=A:D:DDGA:A=6::36333333==AAAAA=GADAAGD=A=A=A=:66=6336==::====AADDKUUUUUXXXUXXXUUUURRNNNKKKKGGGDDDAAAA====::::666663330A0,,,,,))%)003,303:66:AAGGGGGKGGAAA:::0)"%)),)),))))),,,%")KGNNU_pttpwww~zzwttppppmptpmfiiffiptzz~z~~……ˆ‹‹‹‹‹……………………ˆˆ‹cfc_ifmimptttw~~~w~wwwz~ˆ––™–™™‹ˆ…~~~…ˆˆ’–’–––’’’‹ˆ…ˆ‹‹‹’–––™–––œ™™™™œ™œ™œœ£ £ £œœ œœ™™–œ–œœœ™œ™™ ££ £œœ œœ££ £ §ª§ œ™™–’ˆ……~z~z~ˆ‹ˆˆ…~wwwttmmppttw~’»¾¾ÅÅÉÉÉÌÌÌÌÉÉÅÌÉÉÅÅɾ»»¾¸¸´±±­­­­ªª±±±±­±´¸¸¸´±±±±ª§ª­¸´¸¸¸»»¾¾¾¾¾¾»¸­±­ªª­­ªªª§ªª§ª§£§££ œœœ™™œœ£ §££££ªª´±´±ª£ œ ™£œœ––™–’––––™œœ   œ™™–™™™œ™™––ˆ’’’™–™œ   £§£­±­±±´±±ªªª£§£  £œ§§§§££œœœ–™’w~wwzzzw~w~ztipmmcfcXX_RURRRRUUX\iipmmicf_XNKGGGGGKNNRRciimmcccc_\X\URNNNGGKKGGKXNURURXXRURURUUXUX_KKKK\RRRpRRKKGGGKˆ‹‹‹‹ˆ‹ˆ~zttpmmpttwttpptwtttppfpci\\Xc__ffppttmpwpppmppim_miffc_\\URNGGDDDAAAA==A=:ADA6A:6:636333333::=AADDAGGGKGKGKGA=ADA=AAD:666===:====AAADGUUUUUUUXUXXXUUUUNNKKKGKGGGDGDDDAAAAA==:::6:663333300:0,,,,)))%%3360336::6:ADDGDDGGGKAA==66,%"),,)),,,),)3,,:GKKNRXXmtwwtwzzzwwwwttpmmmpptmimmiimmpwz~~~…ˆˆˆ‹‹ˆ…………………ˆ‹ˆfimimpttttttww~~zzzzttz~‹‹’’––™–’‹‹ˆ………~~~…ˆ‹’’––’’’‹‹ˆˆˆˆˆ‹’–––™–™™–––™™™œ™œœ œ§£  ™œ™ œœ™œ–™™™™œ–™œ£   ™œœœ™ £œ  §§§ ™–’‹ˆ………ˆ‹‹‹ˆˆzzzzwttpmmppwz…»¾ÅÅÉÉÉÏÌÏÏÌÉÉÌÉÉÅÅÅž¾¾»»¸¸´±±­ª­­­­­±±±ª­±´¸¸´´±±±­ª§±´¸»»»¾¾¾¾Â¾»¸­±±ª­­­ªª§§ªª£§££££     œœœœ  £££  ªª¸´±­ª  œ œ£œœ–™™–’––––™œ œœœœ–™™œ–™œ™™™’’’’’’™™™  £££§§ª±±´±´±­ªªª§§§£ £ ªª§ª§§œœœ––zz~wtpww~izwtfpmmffcXX_RURRRRUU\_iimiiiff_XNKKDKGKKRNRN_mmppfcff__c\XURNRNKKKKGKXRXUXR\\NUUXUUXXX\c_cKmffmUtwXRRRR…ˆ…ˆˆ‹ˆ‹…‹……~wwtpwwwwwtptptttttppcpfi__\c__ffpmwtptwtptwtpmmcmiff_\\XUNKKGDGDAAA==A=:::==:=:36363333333::=AAADAGKDNKNKNKD=AADADDG:363:==:::====DDGRRRUUUUUUUUUUUUUNNKKKGGGGDDDDDAAADA==A:::6663336000,6,,,),)))%%3330303:66:ADDDGADGDG==3:33)"),),,,,,,,,60DKKNNRX\ctwwwwzzzwwwtwtpmmmmpptpmpmmmppptz~~……ˆˆˆ‹‹ˆ………ˆ………ˆ‹ˆimpmwtwwwwwwwz~~zzwwptw~ˆˆ’––’–ˆ‹‹………~…ˆˆ’––’–’’‹‹‹…ˆ………ˆˆ’’–––™™™™™™™™™™™œ  ££ £™™™œ™œ™™™™––™œ–™™ œœœ™™™™–œ ™ œ£§§ ’’‹‹ˆˆˆ……………ˆ‹‹‹‹ˆzz~ztwtppptt~ˆ¾ÂÅÅÉÌÉÏÌÓÏÏÉÉÌÉÉÅÅž¾»»´´´±±±ª­­­­­­­­­ª±±´¸´´´´±±±±±´»»¾¾Â¾¾Â¾»¸±´±ª­­­­ªªªª§££££   œ     œ™œ £££  ª­¸¸´ªª£ œ œ£œ™–™™™–™™™™œ™œœœ™œ–™™œ–œœ™™–’–’’’–’’™œœ£££§§§ª±´´´´´­­­§ª£§§££§£­­§§§§ œœ–’~z…~tpwwziwtpitpmic_XX_RURRRRUX_cififffifc\RKNDKGGKNKRN\ppmticiffcf__UUNNRNKNKKK\NUX\X\_NXXXUUXU\_fcfmpimpmtzzzUX………ˆ‹………ˆ…zzwtzzzzwtpttttwtppp_tcic\X___ffmptttwwwttzwtppfmifc_\XXRNGKKDGA===:==::66A:6:63:360033000:==DAADDDNGRNRNRNGAADDDGGK63:66=:=:::==AAAGRRRRRUUURUUUUUUUKKGGGGGDDDDDAAA=AA==A===:6:63333000,0,,))))%%"%3630333663:=DAAD=ADAD,:%0,%"%,),,,,,000:=GNNRRUcppwwwwwwwzzwttttpimiippppptpppttttw~~……ˆˆˆˆˆ‹‹ˆ………ˆ………ˆˆˆpptpzzzzzzzzw~~zwttpttz~……‹‹’–’––‹‹ˆˆ…………ˆ‹’’’’’’’’’ˆ……………‹‹’–’––™™™™™™œ™™™ œœ  œ œ––™™œœ™––’’™™––œœ™™–––™––™œœœ™ ££œ’’‹‹‹‹ˆ‹ˆˆˆˆˆ‹‹ˆ……~~zwztpttwwˆ…»¾ÅÉÉÌÌÏÏÓÏÏÌÌÌÌÉÅÅÅ»»»¸´´´­±±­­ªª­ª±­±±ª­±±´´´´±´±´´´¸¾¾¾¾Â»¾¾¾»»´´±­±±­­­ªª§§£§££œœœœ  œœœœ™ œ ££££§±¸´¸­ª£ œ œ£œ™™™™œ™–œ™™™™œœ œ™–™™œ–™™™™™–™–’–––™œ  §£§£ªª­´¸´´´´±­ª§ª§§ª§£ª§­ª§£§££œ™™–wˆtpzzzfwppmtpmfc_UX_UUNNURX\_ffcfccffcc_UNRKKKKNNGUKXpppXicmcmfifc\\NUUNNNKNN\NRU\\\\N\XURUU\\ciiiptpptptzzz~~………ˆ………~…~~zw~~zzztppptttttppftcic\U___fippwttwttwtwwwppimfcc_XU\RNGKGGG=::=:::6:33=66:336633000000:==AAAGDDKGRRNRNNGDDGGGKKN366::=:=:6::A=AAGRRRRRRRUURRUUUUUKKGGGGDDDAAAAAAA==A=A::=66:63333000,,,))))%%%""33606633636=A6A:::A=%),"",,,,0),033=AKRXXcwwttzwwwwwtzzwtppppfiiippppttttptttww~~……ˆ‹ˆ‹ˆ‹‹‹ˆˆˆˆ………ˆˆˆttwt~~~~~~~~~…~wtppmtwzz…ˆˆ’’’–‹‹‹…ˆˆ………ˆ‹–’’––’––’‹’ˆˆˆ…………‹’–’’’––™™œ™œœœœ œ™  ™œ™––™–™™–’’’’™™’–™™–’’––’––™™œ–™  ™–’‹‹‹‹‹‹ˆ‹‹‹’‹ˆˆˆ~z~wttttwˆˆ»¾ÂÅÉÉÌÏÏÏÓÏÏÌÌÌÌÉÉÂÅ»»»»´´±ª­±­­­­­­±ª±­­±±±±±±´´´¸¸¸¸´Â¾ÂÅ»»¾»»»´´±±±±±±±­­ªª£§££ œ™œ œ™™œ™œ   £££§§±¸´¸±­§   œ£œœ™œ™œ™™œœ™™™œœ œœ™™œ™™œœ™™œ–œ™––––™œ  £§§£§ª­±¸¸´¸´´±­§ªªª§ªª§ªªª§§£§ £œ™––~t‹…wp~wzfwipwwmicc_UX\XUNRURX\\cc_\__fc_ccURRNNNNRKDUGUpmtXwzpmtmpifccUXUUURKNN\RNX\_\XRXXRNUR__cmmpwwttwmzz~~~~………~…~~z~~zzwwptpttttpttmwfmc_Uc_\ffmmwwtwwtwwztwptmmic_\URXRRKGKGD=:6::6:6:63:336333333000000::==DDDGGGGNUKNNKGDGGKGKKN3:==::=::6:6A:A=DNNNRRRRRRRRRRUUUGGDDDDDDAAAAA========:=:66633333000,0,))))%%%""30606636666:A3=,66%" + + +%,,,00),336:DUR\zwzzwwzwzwwwtwwwtpmmmfffippttwtwttpttwwzz~……ˆˆ‹‹‹‹‹‹‹‹ˆˆˆˆ……ˆˆ‹wwzw~………ztppmtwzz~……’–’’‹ˆˆ‹ˆ…ˆˆ–––™™–™–––’‹ˆˆˆ……ˆ‹‹’’’’’’–™™™œœœ    œœœ’––’™–’–™’’’–™––––’‹‹’’’––™’œœœ™–’’’’‹‹‹ˆ‹‹‹’‹‹‹……~~wwtwww‹­»ÂÂÉÅÉÌÌÏÏÓÏÌÌÉÌÌÅÉž»»»»´´­­­±±±±­±±±ª±±±±±­±­­±´±»»¸»±¾Â¾Â¾»»»¸¸¸¸´±´±´´±´±±­­§§£ œœ™™œ™™–œ™œœ £££££§´¸±¸´­ª£££œ£œ ™œœœœœœ œ™™œ™ œœ™™œœœœ™œœœœœœœœœœœ  œ£§§£ª­±´¸»¸¸¸´´­ª­ªªªª­ª­ªª§§££   ™™–~t’‹……pwzfwitzwifc_\UX\\XURU\XXXX\XX\\c_\__URRRNKRUNGRAtmw\z~ttwttmmiic\XXXUNRR\RK\__\XRXUKNXUcicpptzzwwzt~~~z~~~…~~~~~~zz~zztwppppttttttpwfmfcUc_\ffmitwwtzwzwzwwppimfc_\UUUURKDGKAA::6=6:663333333330003,,0,,:===GADDGGGKRGKKNNGGGKKKNR36A===:::6:6D===ANNNRURRRNRRRRRRUGGDDDDAAAA=A===AA:::::::336300000,,,3,))))%%%""0,3333666:66=0:)) +%)),03,0666DG\cm~z~zzz~zzzzwwwtwppmmifffipmptwwtttttttwzw~…ˆ‹‹ˆ‹‹‹‹‹‹ˆˆˆ‹‹…ˆ‹‹twzz~……ˆ…ˆˆˆˆˆwppppttwz~…‹‹’––’’‹‹‹‹………ˆ‹™™–™™™™™™™–’‹‹‹…‹ˆ…ˆˆ–’™™œœ  œ ££ ™œ’–’’–’–’’‹’’’™–’’’‹‹ˆ’–’™œ™™––’’’‹’ˆˆ‹‹‹‹‹‹’‹‹‹’’–~~zzwwz~±±¾ÅÂÉÅÉÉÌÌÌÏÌÉÉÉÉÌÉÅž¾¾¾»¸´´­±±­­±±ª±±´­±´­´­­±±­­±´¾¾»¾¸ÂŞŻ»»»¸¸¸´´´´´´´±´±´±­£ª œ™™™–™–––™™œ™ ££§£§ª´¸±¸¸±­§ £œ£  ™  œ    œœ™ œ œœ–œœœ ™œ     £     ££œ ££§­ª´´»»»¸¸´´±­ª­ª­§­­ª­ª§££   œ–™™’t’ˆˆ……zzfzptwtif_\\X\_\X\U\_XUUUXUUXU_\X\\XUURNKNXRGNDwpz~~~twzzwpptmmi\\_URUR\U\____\RXUNRUUcmtttw~~wzzw~~~~~~~…~~~~~~z~zzztwtmmttttttttwmpifUcc_ifmmpwwtzwwzwtwppfifc\\UURRRGDGGD=:=:=6:363336333003300000006:==DAGDDKGKRAGGRRKGKNNNRR36D=:A=:=6::D=::AKKKNURNRNNNRRRRRGGDDDDAAA====:AD=::6666663333000,,,)6)))%)%%""")06663:6636:,%™™ +"%),,60066=GGmm~~z~z~z~z~wzwztwppmiifiimpmpptwtwttttptwwz~ˆ‹‹‹‹‹‹‹‹‹‹ˆ‹‹‹‹‹wwz~~……ˆˆˆ‹‹‹‹ˆ…ttppptwwwz……‹‹–––––‹‹‹‹………ˆ…‹’–™™™œœœœœœ™–’‹ˆ‹ˆˆ…ˆ‹’–™œ™   ££§£œœ––’’’‹–’‹’’–’‹‹‹ˆ‹–™™–’–’’’’ˆˆ‹‹‹‹‹‹’––™œ…ˆ~~z~´¾ÂÅÅÉÅÉÉÉÉÌÌÉÅÉÅÉÉÉÅÅ»¾»¸´´´±±±±­±´ª±­±±±´±´­­±­­­­¸»¾¾Â¾ÂÅÅÂÅ»»¾¸»»´´´´´¸´±´±´±´±§§œœ™–™’––’’–™   ££ªªª­´»´¸¸´­ª £œ£  œ   ££ £™œ™œ™    œ™ ££ §£££§ª£§££ ££ £ £§±­¸¸»»»»¸¸´±±­­­ªª­­­­­ª  œ  ™–™™’t’’‹‹ˆ…ˆzf~~wtpfcU\\\_c\__XccXURNNKNNRRXUXNURRRRNKUNDNGzt~~tz~~zttwtpm__c_UXR\c_\c__\R\RRRRXcppwww~zwz~z………~~~…~~~~~~z~~~zwwttmpttwwttwtzptmiUcccifpmmzwwzwt~tptpmcifc\XXXRNRGGKDDA===:::636333333333300000006::=ADDDGKGKNAKGUUUKNNNNNR33A:6A=:A:=6A===AKKKKRNNNNNNNNRRRDDDAAAAA==A==:=D:6:6666633300300,,,):)%%%%%""%03:36:6:03, +™™™™™™%%,,6306=GUK~…z~~z~z~wzwztwpmimiimmmpppttwwwtttttwwwz~ˆ‹‹‹ˆ‹‹ˆˆ‹’wwz…ˆˆ‹‹‹twttttwzzz……ˆˆ–™–™™ˆ……ˆˆ‹–™œœœœœ  œ œ™–’‹‹‹ˆ…‹‹‹‹’–™™   £§§§œœ™––’–‹’’’’‹‹‹‹ˆˆ‹‹‹‹’™™–’’’’’’‹‹‹‹‹’’‹’–™œ ™™~~­¸¸ÂÂÅÉÅÉÉÉÅÉÉÉÉÂÅÂÅÉÅÅž»»¸´±´±±±±±´´­´±±´±¸´¸­´´­±­´´¸¾ÂÅÂÂÅɾ¾¾¸»´¸¸¸´±´±´´­±­±±´­§£œ™™’––’’™œ £ §§­­­±¸»¸»»¸´ª££œ£ £  ££§£ £œ œ œ££££ œ£§ª­­§§±ª­ªª§§ ££ £ £ª±±¸¸»»»»¸´¸´±±­­ªªªª­ª­­£ œ  œ™œ–’–’‹‹…‹………zmfccU\\__fccccf_UUGGKGGKNNURUNRNRNNKGRNDKNizp……z~wwzwwwt~zcX_U_icc_\_XU\UNRU\ipmttz~wtwzz…ˆ………~…~~~~~z~~zztwtppppwzzwtztzttpmifccifpmmztzwtwztmpmi\ff_XXUURKNKKGDDA:==:66333363333333303000006::=DDDGGGGKNGNNXXXNNNNNNR3336:=::==A:=A:==KKKNNNKNKNNNNNNRDDDAAA===:=::::A6::63663033030,0,,))6)%%%"""03666::6,0" +™™™™™™"%,,666:AKX………ˆ…~~~zz~~zzzzttppmmmfmppttpttwwttwtwtzwwz~ˆ‹‹‹‹‹‹’’’’’–zzz~~……ˆ’‹…wzwwwtwzz~……ˆ‹––™œ™–’™™™…ˆˆ‹’™™œœ    £ £œ™™’’‹‹ˆˆ‹‹‹‹‹ˆ’’–™œ £ §££ œœ––’–’‹’’‹‹‹ˆˆˆ‹‹‹‹ˆ‹‹––™–’’’’’ˆ‹‹’’’’’’’––™  £œ™– ±»»ÂÅÉÉÉÌÉÉÅÉÅÅÅž¾»»¸´±±±´±±±¸´±´±´±´¸¸¸¸¸´­´´¸»¸ÂÅÉÅÅÉž¾´¸´´¸´±±±­±±ª­­­±±ª£ ™™––’–’™™£§§ªª±±±´¸¸»»»¸¸­§£ £ £ ££§££ £ œ   £§ §£ ªª­±±ª´´±±±­ª§£££££££­­±¸¸¸»¸¸¸¸¸±±±±±ª­ª§ªª­ª§ œœ œœ ––™’’ˆˆˆˆ…wif__\\\c_iffffi\RUGGGDGGKKRNKNRNNKRGAGKGGRi~pˆ…ˆ…zz~~~~z’fi~_tff\XcXU_XRUUimmpttwzwptww…ˆˆˆˆ…………~~…~zzzzzzwwtppptwzzzw~tzpptimic_ifpip~pzwptwp_mifXcc\XUURNKKKGKDGD=:==66333333333333300003036=:=DDGDGGGKNNRUX\\RRRRNNR6333::=:==A=A=::AGGGKKKKKKKKNNNNNDGAADD===:=::66=66633333003030,0,,)):)%%%""",3666=:3),"" + +™™™™™™"",0:::=DN…ˆˆ…ˆˆˆ~…zzz~~~~z~wttptmpmippmtwtttttwtwwwwzztz~ˆ‹‹’’’–––’™~~……ˆ‹’’’‹…~zzzwwwz~…ˆ‹‹’™™ œ™’œœœ™‹’–™™   £ £§£  œ™––‹‹‹‹‹‹‹‹‹‹’––™  £§££ œ™™–’’’‹‹’’’–‹‹ˆ‹‹‹‹‹‹‹ˆ‹’’™’‹’’‹’‹’’’’’’’–™œ££§ œ­§´»»¾ÅÉÅÉÉÉÅÅÅÅÅž¾Â¾¾¾»»¸´±´±±´´´´¸´´±¸±´¸¸»»»¸¸»¸»¾»ÅÅÅÅž»´´´´´±­­­ªª±§ª­±­­§£ œ™–’’’‹’™™§ªª­­´´´´¸»»»¾¸»±ª£££ §£££££  £  ££££ª££ª§­ª±´´´¸¸´´´­ªª§§§ £§§­ª±¸¸»»»¸´»¸´±´­±­­ªª­ªªªª£   œœ ™™œ’’‹‹‹‹‹ˆiif_\__ccciiiiifRKUDGDDKDKGNNGNNKKGRGADGGDUf…ˆˆ‹ˆ………~……ˆ‹–‹‹~ziif\c\X_\RU\mpmmwttwtmpptˆˆ‹ˆ………ˆ………~…~~zwzzwzztttttwzzzzw~mtwfmmi_mimip~twwpfiR_if_U\URURRRNKGKGKGDA=6::6663333333333330000006=A==GDGDDGGKNRUXX\XRRRNNKN:63366:6A:A:A:66=GGGGGKGKGKKKKNNNDDAAAA===::=66::66330300000,0,,00))%:%%%%"""%066:6:=,%"™™™™™™™ +""03=:=AKRˆˆˆˆˆˆ…~…zzz~~~~~zwtwptptpmppmttpptttwtwwzz~zwz~ˆ‹‹’’’’’’’–’–––™––…ˆˆ…ˆˆˆ‹‹’’‹ˆ~zwzw~~……–™™     œ  œ™œ–œ™œœ££ £££§£££ ™™™‹ˆ‹’‹’–™œœ ££ £ œ™–––’‹’’’–’‹‹ˆˆˆ‹ˆˆ‹ˆˆ‹ˆ‹–’‹ˆ‹’’‹’’’’’’’’’–œœª§ª­§±±´¸¾ÂÉÅÉÉÅÉÅÅÅž¾Âž¾Â¾»¾¸¸¸¸´´±±±±´¸¸¸¸»»¸´»»»¾¾»»¾»¾Â¾ÉÂÅɾ»¾¾¾¸´´±±±ªªª§ª§­§ªª­ª­ § ™™’‹’–™ª­­±±´´¸´»»»¸¾»»±ª£§£££££££££œ££ ££§§­§­±ª±­´¸¸¸»¸¸¸¸±­ªª§§££§£­§­´´¸¸¸¸±¸¸±­±­­­­ª­­ª§ª§£ £œœ  œœœˆ‹‹‹ˆifc__ccfcfiimff\RGUDGDDKDGGNNGKNKGGRDDDDDDUi……ˆ‹‹‹‹ˆ……‹ˆˆˆ‹ˆˆ––…~wiicc_X_\__fmmpmttmppfmpt……ˆˆˆˆˆˆ………ˆ…~…~~~wzzwwztttttz~~~~…w~pwzmmpm_mmmipptwpccK___URXNRURRNNGKGDGGDDA==:6633333333333333330306ADAAKADDDGGKNUX\U\XURNNNKN6:3333:3=6=:A666=GGGGDGDGGGGKKKKNDDAAA====:::666633330330,,,,,))00)%%6%%"""""")36:=:6A)"%™™™™™™ + +"%3::=DDNR‹ˆ‹ˆˆ…ˆ…~zz~~~~~zzwwtwptpppppppmmtptttwwwwzzz~~……‹’’–––’–’’–––––––ˆ‹‹‹‹‹‹‹’’‹‹……~~~z……ˆˆ’–œœ  ££  ££ œ ™ œ  £ ££  £§   ™œ–’’’‹‹ˆ‹‹’–™™    £ œœ™™™–’’’’’–’‹ˆ‹ˆˆ‹ˆˆˆˆ‹ˆ‹‹’…ˆ‹’‹’’–––’–’’’’™œª­­­±±´´¸»»ÅÅÅÉÉÅÉÅÅÉÅžž¾Â¾¾»¸¸¸¸´´±´±´¸¸¸»»¾¾»»¾»»Â¾¾Â¾ÂÅÂÅÂÅž»¸»»»¸±±­±­§£§£ª£ª§§ªª§ª § ™–’‹‹‹‹‹’’™­±±´´´´´´¸»»¸»»¸´­§§£££££££££ ££ £ªªª±ª±´­±±¸¸»¸»´¸¸¸±±­­§ª§£§£­£ª´±¸´´´±´¸´±­±­­ªª­ªªª§££œ  œœ  œœˆ‹‹…iic__ffiiiiiifcKNAUAGADKDDGKKKNKKGDRDDDDDAXi…ˆˆ‹ˆˆ…ˆ‹‹‹’™–‹……zmmffc\c\cciimpmppimm_mpp~…ˆˆ‹‹……ˆˆ……ˆ…~z~zwzwwtwwwtwwz~~…w~ttzpmtt_mppitmptt_cG_XNDRUNRRNRNNKGGDDDADDAA:6633333333333330330606DK=NKAAADGGKRXX\UXXURNNKGK3=33336333:6=666:GKDDDDDDDGGGGKKKAA=AD:=:::6:66633330000,,),))%,,,%""6"""%,63:A=:=""" +™™™™™™ +)0A==GGXR‹ˆˆˆ…ˆˆ…~zz~~~~zw~zwwttttppppmmiipppppttwwzzzz~…‹’–––™–––’’––’’–™–‹’’’’‹ˆˆ…~…ˆ…‹‹’’–œ ££§§££§§£ £œ£  £ œ  œœ £œœœ™™™––’’‹ˆ‹‹‹‹‹’––œœ  £ œœœœœ™’’’’’’–’’‹‹‹ˆˆ…ˆ…ˆˆ…‹…ˆ‹~ˆ‹‹’–––™™–’’’’‹’’™£­±±´´´¸´»»»ÅÅÅÉÉÅÉÅÅÉÉÅÅž¾¾Â¾¾»»¸¸¸¸´´´´´´´¸¾Â¾¾»¾»ÂÂÂÂÂÂÅÅÅÂÅÅÅ»»±¸¸¸´±±ª±ª££££§ £§£§ª£§ £œ™’’‹ˆˆˆˆ’–±´±´´¸´´´´»»»¾»»¸­­ª££§£££ £§£§ª£§­­±´±´¸±´´´¸¸´»±´´´´±±­ª§§§’ ª §´´¸¸´´­±¸´±­­­ª­­ªªªª§  œ œœœ œœ™‹‹…‹ˆ‹‹‹‹…ifcccifmmiiffcNGNAU=GADKDDGGGNKGKGDRDDDDGA\m…ˆ…’’’‹ˆ’‹’’’––’‹ˆ…~~ppiic\f\ffiiipimmfii_mmmz~ˆˆˆ‹‹ˆ…ˆˆˆˆˆˆ~~~zwzwwtzzwwzz~…ˆ~~wwwzmtwcwttftmptt\cG\\KDRRNRNRNNNNGGAGADDADA=6:66666663333666666=66DXARGAAADGGNN\_X_XXURNKKGG3=6333333333:666:GGDDDDDDDDDGDGGKAA==D:=:=6:663333000,,0,))))%),))":)066:=:=:"™™™ +",0DGKU\_…‹‹ˆˆ……………~~~~~~zzzzwtwptppppmifimmpimptwwwwwz~…ˆ‹’’––™–––’––’’’™–’’’’’’’’’’’’’‹‹…ˆ…‹‹’™™ ££§§§§§§££ § £   œ™œœ™™œ ™™™––œ™™–’’’’‹‹ˆˆ‹–™™ œœ œœ™œœœœ–’–’’’–’’’‹‹‹ˆˆˆˆˆˆˆ~ˆ‹’’’–™™œ–™––––’––œ­±´´¸¸¸¸¸»»»ÂÅÅÅÉÅÅÅÉÅÅÅžž»Â¾¾»¸¸´´´´´±´´±¸»Â¾¾ÂžÅÂÅž´¸±»¸¸±´±§­§£ ££££££ £§£§£ œ™–‹………‹‹–´´´´´¸´´´¸¸¸»¾»»»´±ª§££££££§§§ª­§ª±±´±´´´´¸¸´´´¸¸´¸´´´±±ªªª§§’’§œ§¸´¸¸´±­´´´­±­­­­­ªª§ª£œ ™œ™œœœ™™–ˆˆˆ…ˆˆˆ‹ˆifcfipmppimfccNGNAU=GADKDAGDDKKGKGGUADDDGD_p…ˆ…’’––’’–––’–’’’‹ˆ~zzttiif\f\fifffmfii_fcciipw~………ˆˆ…ˆˆˆ…ˆ……~~~~zzwzzwwzzzzzz~…‹zwt~mtzcztpftmpwt\cD\\DDRRNNKNRKKKDGDDDAAADDA:=::666666666::====AAAG\DNKADAGGGKN\cXcfURNKGGDD3:63333330336366:DDADDDAAADADADDGAA=AA::::663330000,,,,,)))))%%)"%6,3::=::A6%" + +",3AGNN\_ˆˆˆ‹‹ˆ…………~…~~~~zztttmppmmpmifffimiimpttttww~ˆˆ‹’’–™™–––’’’’’–––’’–––––’’’’’’–’’’’–ˆ–’’’–™œœ ££§§§ª£§§£££  £œœ™––™–’––––’’™œ™––’’–‹ˆˆˆ’’–™™œœœ œœ™ ™™œ™’–’’’’’’’’’‹ˆ……ˆˆˆ…~~ˆ‹’’’™™œœœœ™™–™– ™±±´¸´»»¸¸¸»»»ÂÅÅÅÉÅÉÅÉÉÅžÂÂÅž¾Â¾¾»»´´´±±±±´­´»¾ÂÂÂÂÂÂÅÂÅÅÂÂÂÅž»¸¸´¸¸¸±±´§ª£§     § œ £ ££œœ™’’…~‹ˆ’­±¸´´´´´´´¸¸¸¸¾»»¾¸»±§§£££§§§ªªª±§±´±¸´¸¸¸´´¸±´´¸¸¸¸¸´´´±ª­ª§ª§’ ª¸¸¸´´±­±±±ª­­­­­­ªª§§ œœ–™™™œ™––‹………………‹‹ˆffcipwpttimff_RGNDU=GADKDDGDDGGGKGGUADDDKD\p…ˆˆ–––––’–™™™™–––’ˆ‹…~~~zwppimc_f\cfc\ciUXf_cc_fctz………ˆˆˆ…ˆˆˆ……~z~zzzzzwzzwzwz~~……ˆ‹…~wtptz_zpmfzimww\cD\XAANRNKKNRGGKDDDAD=DDADD:==66:66:::::==AAAADDDKXGKKDDDDGGKR_fiwiRRKKGDAA3:36333330003333:DDAAAAAAAGAAAAADAA===::6:63330300,,)),))%%)%""%"300=::=:D:%% + +%06GKRR__ˆ‹…ˆˆˆˆ………~…~~~zwtttmmmmmmmiffffiiipptttttw~~……‹’––™–’–’––’‹’–––’––™™™––’’––™––––™–™–––’––™œ   £§§ª§ª§ª££  œœ ™™–’’’–’’’™™™–––’’‹‹‹’’’’™––œ™™œœœœœ™™œ™–™–’’–’’–’’–’‹‹‹‹ˆˆ‹………~~~…ˆ‹’’–’–™œ™œ£œ œ–™¸¸¸´´¸¸¸»»»¸¸¸»»ÂÅÅÅÅÅÅÉÌÉÉɾ¾Â»¾Â¾»»¸¸¸´±­­­´±¸»¾¾ÅÂÂÂÅÉÂÅޞ¾Â»»»´´´´±±´ªª§§£œœœœ£œœ     œ™™’’…~ˆˆ’±­¸´´´´±±±´¸¸»»»»¾»¾»ªª§§£§ªªª­­´­´´´¸¸¸´´¸´¸´¸´´¸¸¸´´´´±ª­­§­’’§­¸»¸¸´´±±­­§­ª­­­­ªª££œœœ’–––™’‹ˆ~z~~ˆ‹ˆwiimwzwwtmpcf\UGNGUAGDDKGAGDDGDGKGDUDDDDND_p…‹ˆ–––™™–™œœ™™–’–‹……~~zzwppimf_f_cc\\URUU_\c_cfcpz~~……ˆˆˆˆ…ˆˆˆ~~~zzzzwzzzzzzzz~z…ˆ…‹‹…~wtmptw_wmmf~fmtwXfD_X=ANRNKKNNKGKGDDADADDDGG=A==::::=====AADDDDGGGKUKKNGDKGGGKUcfizfRNKGDA=:3:3:6:0330000033:DDAAA===AD=A===A==:::6666333300,,,,)))%%""%"%""0 + +00::=A=D=0)"" + + + + + +3:AKNUUmi…ˆˆ……ˆ………………~~~~zwttpmiimiimiffcffiimppttttzz~…‹’’–––’’’’’‹‹’’–––™™œ™œ™™’–––™™™™™œ™œœ™™™™™œ  £££§§ª£ªª§   ™ œœ––’’’‹‹‹ˆ–™–™––’’’’’–––’™’–™–™œ™™œ™™™œœ–™–––’’’–’’’‹‹‹‹‹‹……~~…ˆ’–––™œ œ§¾ÌÉ ™œ¾»»¸´¸»¸»»»¸¸¸»»ÂÅÅÅÅÅÅÉÉÌÉÉž¾¾Â¾¾Â¾»»»´´´±±­­±±­¸»¾¾ÂÂÂÂÂÅÂÂÅÅžž»»´¸¸´±±±­ª§£ œ œœ œœœ œ œ™™––‹‹…~ˆ™´±±¸´´´´±±±´¸´»»»»¾¾Â¾¸´ªª§ªª­­±­±±¸¸¸»¸¸´´¸´´±¸´¸´¸¸±´´´±­±±­±’œ±ª±¸»¸¸´´±±ªª§ªª­­±±­ª £œ™œ–––’–’‹‹tw~~~~…ˆˆ…ˆt~z~zzwpmfcRUKNDUAGDDKGDGADGDKKKGUDDDGNA_t…ˆ–––œœ–œœ œ™–’–‹…ˆ~zzwtptmmi_f\_\X\XRUU\\cU_fftz~…ˆ………………~~z~zzzwzzzzzz~z…ˆˆˆ‹…~wwmtpt_tpifcmpwXfD_X=ANRNNNNKGGGKDDADADDGGGA=AA======AAADDGGGGKKKNRNKNGGNKGGNXccfwcRNGGD=::6636:=A3000000006DDAAA===DA:=:=6===::6663330300,,,,))%%%%"""%) +,0:6=A=DA3,"%%" +:=DNRUXpt………………~……~~z~~wwptmmiiiiimfffcffifmpmptttzz……‹’’’’’’’‹‹–––––™œ™œœœ–™–™œœœœ™œœ  œœœœœ  £§££ª§ª§ªª£ œœ™œ™™’‹‹ˆ‹ˆ‹……‹’™–™™™’––’’’’–––™™œ–œ–––––œ™–™–œ™œœ–––’’–––’’’‹ˆ‹‹‹ˆ‹~~…‹’’––™™ £ ­ÂÌ̠ə¾¾»¸¸»»»¸»¸´¸»»ÂÂÅÅÅÅÉÉÉÉÉÅɾ¾¾Â¾¾»Â¾»»»¸´±±­­­ª­±±´¸¾»ÂÅÂÅޞÂÅž¾¾¸¸¸´±±±­ª§£ œ  ™  ™™œ™œ™™™™–‹‹‹…‹œ´´±¸´´´´±­±±´´»»¾»¾Â»¸­­ª­­­±±±¸´»»¸»¸´´¸´´±±´±¸¸¸¸­´¸´±±±±±±±´´´´»»»¸´±±±§ª§ªª­­±±­ª££™œœ™––’–’ˆˆ~ttzz~z~……ˆ‹wˆ~~zztif_UUNNGUAGDDKGDGAAGAGKGKUGGDDRA_t…ˆ’™™™œ™    ™™–™’‹ˆˆ~~wtwptipfif\_XX\URRXX_cR\citz~ˆ………………~~~zzzzzwzzwwzzzz~~……ˆ‹‹‹…ˆ~wtpwpp_ptif~_mptXcG_X=DNRRNNNKKKGGGDDDAADGGDDAAD===AAAAADDDGGGGKKNNNNNKKKRKGGNU__XcUNKGDA=:=3306=AD:000000003DDAAD=GAGD::6:66==::66633000,,,)))%%"%""""",),63:==DD==%,0%%)3KNNNNU\tw~……~~~~wz~wwtpiifffffifffcfiiimmmppptwz……‹’’–’’’’‹ˆ‹–––’–™™™œœœ™™™™œœœœœ   £      ££§££ª§­ªª§  ™™–™–’ˆ‹ˆ‹…………~ˆˆ‹–™–™™–™™––––™–™œœ ™œ™™––’™–’––™™™™–––’’––’’’’‹‹…ˆˆ‹‹ˆ‹ˆ~z~~~…ˆ’–’–™œœ£»¾ÂÅÉÌÉÌÉÅ»»¸»¸»¸¸´´¸»»¾ÂÂÂÂÅÅÉÉÉÉÉž¾Â»¾¾¾¾»¸»¸´­±­­ªª­±´±´»¾¾Å¾ÅÂÂÅÂÅÂÅž¾Â¾¾¸¸¸´´­±ªª§££  œ– œ––™–œ™™––’‹‹‹…… ±´­´´´´±±ª±±´´¸»¾¾ÂÂÅž»±±­­±±´´±»¸¸¾¾»»¸´´´±±´´´¸»´´±¸´±´±´´´´´¸¸¸¸¾»¸¸´±±±§­§ªª­­±´±­££œœœ–’’’’’ˆ…~~ttwwz~z‹‹‹~~pic\XUNNGUDGGDKGDGDAGDGKGKUKKDGUAcwˆ‹ˆ’–™™œœ    ™œ–™’‹ˆˆ…wtwtpppimf_\XX\URR\\\_U\_mtw~~~~ˆ……~~z~zwzzzwzwwwwzz~~…ˆ…ˆ‹ˆ‹‹…ˆ~ztptpm_mticz\pttX_Dc\:ANURNNNKKKGGKGDDA=DGDDGAAAA=AAAAADDDDGGGGKKKNNRNKKKNNGKKU\\UXRNKGDA=::0336ADG=00000,003DDDDGAKDGD=66636::6633330000,,)))%%""""""""0 +™ + +06:=AAAA,:30)))%0=NRRRUfiwz…………~~~wwzwtpmffffcccfffffiimmmippmppww~ˆ…‹’’’’–’‹‹‹‹ˆ––’’––™™œœ œœœœ  œ    £££££  £§£§§£ªªª§§£œœ––––’ˆˆ…~~~z~z~z……ˆˆ‹’–™™–™™™™™™™œ™œ  £œœ™™™––™’’’’–™–––™–’’–’’’’ˆ‹………ˆˆ…ˆ…zzz~~…‹’’’™™œª¸¾ÂÅÉÉÌÌÉÅž¾¾¾¸¸´¸¸´´´¸»»¾¾ÂÂÂÂÂÅÉÉÉÅ޾¾¾¾¾»»¸¸´±ª±ªª§ªª±±±¸»Â¾Å¾ÅÂÂÂÂÅÅž¾Âž¸¸»¸´±­ª­§§£  ™™  –™––™–™’’ˆˆ……‹ ±±­±´±±­±ª­±´´¸¸¾ÂÅÂÉÉ»´±±±±´¸¸´¾»»¾Â»»»´´´´±´´¸¸¸¸´±¸´´¸´´´¸¸¸»»¸»¾»´¸¸´±±ªª£§ª­±±´­­­£œ œ–’’’’’‹ˆzttttz~z~…‹’’’…~pi_XXUNNGUGKGDKGAGDDGDGKKKUGNGGXAmz‹‹‹’–œœ™œ   œ™œ–™–ˆˆˆˆ…~ztwtptpmmfc_XX\URR\X\cU\citz~~~…~~~~~zzwzwtzzzzzwwwzz~~~…ˆˆˆˆˆ‹ˆ……zztptmp_mpm_wXmtpX_Dc_KARURRRNKKKKGGGDDDADDADG==A==AAAAADDGGGKKKKNNNRNNKKKKKKGKR\XURNKKGDA=::060:AADA:3333,,,3ADGGKDKGDA=66633::6663330,,,,)%%%""""""%3 +™™:==A=D=660,,)),GGRUXU_itwz~~…ˆ…~zwtwtpmiccccX\_ccfcfiiiimmpppppwwˆˆ‹’’’™’’‹‹‹‹‹ˆˆ™’––’–™œœœ œ œ   œ£   ££§§§££££££ª§ª­­ª£ œ™’’’‹……zzzwwwww…ˆ……–––’™™™œœ™œœœ £   œ™™œ™™–’’’’–’’’––’–’’‹ˆ‹…~……~wwwz~~…ˆ’––œ §¸»ÂÅÂÉÉÌÌÉɾ¾»»´´´´±±¸»»¾»Â¾Â¾¾ÂÅÅÅÉÅÅž¾»¾»¸¸¸¸±­ª­ª§§§§±­´¸¸ÂÂÅÂÂÂÂÅž¾ÂÅž¾¾»¾¸±­­ªªª§££œœ™ œ–œ™–––––’‹ˆ…ˆ……‹œ­­ª­±­­­±ª±±´´´¸¾ÅÅÅÉÉŸ±±´­´´»´¸Â¾¾¾Å»»»´´´´´´´¸»»¸´´¸´´¸´´¸¸»»»¾»»¾»´¸¸´­±ª§£§ª­±±´±±±­§  ™––’–’ˆzttzw~~~…ˆ’’–’…pi_NUURNGUKKDDKKDGGDGGGKGNUDR\K\Aw~ˆ‹’’™™–™  œ™–™™™’‹‹‹‹……zzzwtwtmmif_\\\XRR\\\fX\cipzz~z~~z~~~~~wtpwtpwwwwzwzwzzzz…ˆˆˆ‹…ˆˆ……~wwptmpcmpi_p~D_p\U\D_\NDNUURRNNNKKKGKGGAADDDDDA===ADAADDDDGGGKKKKNNNNNNKKKGGGGGN\XURNKKGDA=::363:A=DD=6630,066DGGGNGGDD==66633663330000,)))%%""""""%""0 +™™™ + +6::=:AA::300,"%""),3KKRU\Xcmwwz~~…ˆ…~……~zwwptiifc___URX\__cffiimipppptppzw…ˆ‹’’’’™–’‹‹‹‹ˆˆˆ–’––’–™™œœ£   £££ §£££§§§§§£ £§§§­ª­­ª§  ™™’‹‹ˆ~wtttpppt~……ˆ‹’‹’––™œ™™œ  œ œœœœ™™™––™–’‹’‹‹’™’’‹’‹‹ˆˆ…~~zwwwzzw~~………–™œ§ª±»¾ÂÅÅÉÅÉÉÅÉž¾»¸´´´´±±¸¸¸¾¾¾»Â»¾¾ÂÅÅÉÉž»»¾¸´¸´¸­±­ªª§ª§§­­´´´¾ÂÂÅÅÅÅžÂÂÅÅÅÂÅÂÅÅž»±±±ªªª§§ œ™™ œ–™––––’–’ˆ‹…‹ˆˆ’œª§ª­­­­­­ª±´´´´¸¾ÂÅÉÉÉÅ´±±¸±´´»¸»Â»Â¸¸¸´±±±´´¸»¸»´¸´¸´¸¸´´´»¾¾¾¾¾¾»»¸¸´´­±§£§§ª­±´´±´±±ª £œ™™––’ˆ~z~~zzz~…‹’’–ˆ~~pfcNUURNKUKKDDKKDDGDGDGKGRUGU_cAzz…‹‹’’–™–™ œ™––™™–ˆ‹ˆ…ˆ~wwwwtpmic_\__\UR_\_f\__mpzzzzz~~zzzz~ztpptmmttwtwtzwwz~zˆ…ˆˆˆ…ˆ…zzwptppfppi__z=_fXU_A\XRDNXURURNNNKKGGDDAAADGDDDAA=ADADDDDGGGGKKKKNNNNNKKKKKGGGGN\XURNKKGDA===0366==DDA366,0,:6DGGGNDDAA::66:333300000,,0)))%%"""""""% +™™™™™™6:6==:=6366,,%"%,%%6=GNNRXcfimwz~~~………~~~…~wwtmpfcc_X\\XRUX_\ccfffimppttttpzw…ˆ’–’–™–’‹‹‹‹……ˆ––––’––™œœ£  £§§£ §££ §ª§§§§£§§£§ªªªªªœœœ™–’‹‹…ˆzwtppmppptz~…ˆˆ‹’’–™–™œœ ™œ™œ™™–™–’––’ˆˆ‹‹ˆ–‹‹‹’‹……wzzzwtttwwzz~…ˆ’™œ£ª±´¾ÂÂÅÉÅÉÉÉÅÉÅž¾´¸¸¸´±±´¸¸»¾¾»¾»¾¾¾ÅÅÉÉž¾¾Â»»»´¸´´¸­±­ªª§ªª§­ª´´ª»ÂÅÅÉÉɾÅÅÅÅÅÅÂÅÅÅžŻ¾´±±ªª§££œœœ™œ™’–’–’’’–’‹‹ˆ‹‹‹–œ§§ª­­­±±±­±´´¸´¸ÂÂÅÉÉÉÅ´±´¸´´¸¸»¸¾¾¾Å»¸´±±±´¸¸¸»´»´´±´¸´´´¸¸¸»»»Â¾¾¾¾¸´´´±±ª£§ªª­±¸´´´±´ª££  œ–––’‹……~~z~~ˆ‹’…~zpffXUXRNNUNGDDKKDGGDGGKKNRXGXci…D~z…‹ˆ’’™™’–œ™–––––’……ˆ‹‹ˆ‹…~zzzwtmif\_c__XU__\f__cmpz~zz~~zz~zz~ppmpipppwptpwwww~z…ˆ…ˆ‹ˆ…ˆ…wwwptpptpti_\w:_RUUcG\RUDNXUURRRNNKKGGDGAADDGGGDDD=ADDDDDDGGGGKKNNNNNNNKKKKKKKGGK\XURNKKGDA=::3336:=AD=3::0=,=:AGDGKAA==:666633330000,,,,))%%""""""" +™™™™™™™6"6:6=:6::::,"303::AKNNX\fimpwzzz~~zz~~zttpicf\_XXXUUNRU\X__cfcfmmtwwwwtzz…ˆ‹’’’––™’‹‹ˆ…ˆˆ™––’’––™œœ  £££§£££§§£§§§§§£££§§§§ª§§§œ™™–’’ˆ………~~wtppimmptz~~………ˆˆ‹‹’––™™™œ–™’™™––™–’’’‹ˆˆ‹ˆˆ‹‹’ˆˆ‹‹ˆ~~zwwttttwwwwz~~ˆ–™§­¸´¸¾ÅÂÉÉÉÉÉÉÅÉžŻ¸»»¸´±±´¸¸»»¾»¾»¾¾ÂÂÅÉÅž¾¾¾¸»¾¸¸¸´¸±±±ªª§§ª§­ª±±ª¾¾ÂÅÉÉžÅÉÅÅÉÅÅÅÅÅÅž»´±±ª§£§£œ™œœœ™’’’’’––’‹ˆ‹‹™œ£ª­ªª­±±±±±±´¸¸»ÅÂÅÉÌÅÅ´´´¸´´´¸¸¸»¾»Â¾¾´¸´´´´´¸´»¸»¸´±´´´±´´¸´»»¾Â»»¾»»´¸¸±´­§ª­ª­´¸´¸´´±ª£§ £ ––™’…ˆ…~z~~~~…~zwpif\UXUNRURKDDKKDDGGGKNNRN\D\fmw~…‹ˆ’––’’™–’–––’‹……ˆˆ‹‹‹ˆ…~zzwwpfi\\f_\\Xc__f_c_mpzzzz~zwwzzwzppmmimpttptptwww~z~ˆˆˆ‹‹…ˆzztpwmpwpwm_Ut=\NRUcK\NXGNXUXURRNNKKGGDGDAAGDGKGGGAAKGDGDDGGGGKKKNNNNNNKKKKKKKGGK\XURNKKGDA=::33033==A:06:=AAA==DAD=A:::::66633000,,,,,))))%%%""""% +™™™™™™™™™™ +63::6=A==::::===DKKR\_impttwzw~~…~zpzz~wppifcc\UUUUURKNRXU\\_f_fmpttwzww~~…ˆ‹’’’’––’’‹‹ˆˆ‹ˆ–’––––™™œœ  £££ª§£§£§§§ª§ª§§§§£§££§£ £œ–™–ˆ…~~wtppmmmptzz…ˆ……ˆˆ‹‹‹’™™™™™––™–’––’’ˆˆ‹ˆˆ…ˆ‹ˆˆ‹‹‹‹’‹~zwttpttttwz~~~~…ˆ™™­´»¸¸¾ÅÅÅÉÅÉÉÉÉÅÅÂÅž»¾»»´´´¸¸¸»»¾»»»¾¾ÂÅÅÅž¾¾»¸¸»»¸¸´´´±±­ªª§§ª­­­­ª»ÂÅÂÉÉÉÅÂÅÅÅÅÅÂÅÉÅž¾¾¸´­±­§§§£™œœœœ–’’’’’’’‹ˆ‹‹’ œ£ª­ª­­­±±­­±¸¸¸¾ÅÂÂÅÌÅÉ´¸´´´´´´´´¸»»¾¾»¸¸±±±´´´´»¸»¸¸´´´¸´´´¸´¸¸»¾¸¸»»»¸»¸´´±ªª­­­¸»¸¸¸¸±ª§§£§ ™ œ’’ˆ…‹…………~w\zzzz~z~wtpmcXXXUNRXNKGGKKDDKGKNNRUR\A_fp…zˆˆ‹’’’–’’’’ˆ……ˆ…ˆˆ‹ˆˆ…wzwtpii__f___\c__fcccmpzzwzzzzzwzwwtpmmimmppptppwwwzz~……‹‹ˆˆˆ~wtpzmtzmwm_RpA\KNR_NXK\KNXXUURRRNKKGGDDD==KAGNKKKAKNGGKDGGGGGKKKKNNNNNKKKKKKKGGK\XURNKKGDA=::63003::=:066AA=A::A=A==::66666633000,,,,))))%%%"""""""" +™™™™–™™™™™66:ADAA====AAAGGKU__fmpttwwwzz~~~pwiwwwpifcc_UXURRRUNKNNRRXX\c_fmpwtwzwz~…ˆ‹’’’–’‹‹ˆˆ‹ˆ–’––––™™œœ £ ££ª£§§§§ªªª§ª§§ª§£§§££ £œ™’––‹‹………~zwtmpmptwzz~………ˆ…––––™’’™––’’’‹ˆ‹ˆ…ˆˆˆˆ…ˆˆ‹‹ˆ‹‹‹‹…zzztpttttwwz~~…‹ §±¸»»»ÂÂÅÅÉÉÌÅÅÅÂÅÅÅž»»»¸¸´´¸¸»»¾»»»¾¾ÅÅÅÉɾ¾¾¸¸´¸»¸¸¸´´´´­­ªªªª­­­±­¸¾Â¾ÉÌÉÉÅÅÉÅÅÅÅÅÅÅž¾Â¾»´­±­§§£ œœœ™™––’’’’‹ˆ’ £ §ªªª­­±´±±±´»¸¸¾Â¾ÂÉÅɾ¸¸´¸´´¸±¸´¸»»»¸´´´±´´´¸¸¸»¸´¸¸´´¸¸±±¸´¸¸»¾¸¸»¾¾»»¸´´±­ª±±±¸¸»¸¸¸±ªªª§£ œ£œ–‹ˆˆ…ˆ…z\zwzzzz~wtpmic\\XXRRXNNKKKKGGKGKKKNUR\K\ip…~~……ˆ…‹‹‹‹‹ˆˆ………ˆˆˆˆˆzzwpmmic_ic___cccic_cmpz~wzzzwwzzzwwtpmimimpmttppwwz~zz……ˆˆˆ…ˆzttzmp~mti\Ni=\DKUUKUK\NR\\XXURRNKKGGDGGA=NDKNKNNDNRKGGDDGGGGKKKKNNNNNKKKKGGGGGK\XURNKKGDA=::63303==A63:3AD===:=:=:=::66666633,,,))),)))%%%%%"""""""""" +™™™–’™™™™™–03:DGDDDAAADAAGGNU\cfmpttwtwwzz~~~~~ptittpmfc__\UUXRNRRKKKKRNUUU__fmtwtwzw~z…ˆˆ‹‹’’’’’‹‹ˆ‹ˆ––––––™™™œ  £§£ª§§ª§ªªªªª­ªªªª§§ª§ œ œ–’’‹‹…~zwppptww~w~………ˆ…‹’–’’–’–’–‹‹ˆˆ………………‹‹‹‹…‹‹‹‹w~ztptttwtzzz~……§ª´»¾¾¾ÂÂÅÅÌÉÌÉÉÅÅÅž¾¾»»¸¸¸¸»»»¾¾¾¾¾ÂÂÅÉÅÉÉ»»»¸¸¸´»»¸¸¸¸´´­ªªªªª­­±±±»»ÂÂÉÉÌÉÉÅÅÂÅÅÅÅÅÉž»¾»»±±­ª§§§œ™œœ™––––’‹‹‹‹’œ£§£§­ª­ª­±´´´´´»»»¾¾¾¾¾ÅÂÅ»»¸¸´´´­´±´¸¸¸±±´±±±´´´¸»¸¸¸¸´¸´¸¸±±´´¸¸»¾´»»»»¸»¸´´´ª­±±´´¸»»¸´±­ªª§£ œ£ ™ˆ…ˆ…ˆ……~~wtzwwwzwpmcf_\\UUUNURRNKNKGKKKGNNRRUXRXmp~~z…………ˆ‹‹…‹‹ˆˆˆ‹‹‹ˆˆ…ˆ~ˆˆˆ…ˆ…~zztmpiccmc__cfcfic_cmpz~wzwzztzzzwzwtpmimmmmtpppttwzzz~……ˆ‹ˆ…‹~ztpzmpzmpf\K_:\GKRUGUK_RU\\XUXXRRNRNKDGKAANKNNNRRGNRNGGDDGGGGKKKKNNNNNKKKKGGGGGK\XURNKKGDA=::60303:=A36:6DAA::::366:6:66666333,,,,)))))%%%)%"""%"%""""" +™™–’––™™™–’%:DGGGGDDDGDDKGNR_fimpttwptwwwzzzzztmmimmic_\\\UUUNNNNKKGGNKKRRX_fmtwtwwzzz…ˆ…ˆ‹’’’’’’‹ˆ‹‹ˆ™–™–––™™œœ ££§§ª§ª­§­ªª­­­ª­ªªªªª£   ™–ˆ‹ˆ……~~zwwttwzzw~………ˆˆ‹‹’’’–’’‹‹‹‹ˆ‹ˆ………ˆˆˆˆ‹ˆˆ…‹‹‹‹ˆ~~~zttwttwtwwz~…§ª­¸»¾¾ÂÂÅÅÉÌÉÌÌÅÅÅÅÅžž»¾»¸¸¸»»»¾Â¾¾¾ÂÂÅÅÉÉÅ»¸»¸¸»¸»»¸¸¸´¸´±­­­ª­±­±´¸»¾ÅÅÉÉÌÅÉÅÅÅÅÅÉÅÅÅž»¾»¸´±±ªªª§ œœœ™–––’’‹ˆˆ‹‹‹’ §ª§§­­­­±±´´´±´»»»¾Â¾¾¾¾Â»»´¸±´±±´±±´´¸´±±­­­´¸¸»»´»»¸¸»¸´¸±±¸´¸¸¸»¸»»»»»»¸¸¸´§±±±¸´¸»»¸±­±ª§§£ ™£ ™’‹…ˆˆˆˆztwwttpticcc_\\URURURRRNNKGKNNKRRRRU\UXmtzfz………~‹‹ˆˆ…ˆ‹‹‹ˆˆ……~ˆ…ˆˆ…~~wppifcmc\fccfficccmp~~wzwwzwzwzw~wttpmppmmppppttwwzz~……ˆ‹ˆ…‹zztpzipwpif\K\=XDKRUKUK_UR__\XX\RURURGDGNKDNNRRNNNKKRNDDDDGGGGNKKKNNNNNKKKKGGGGGK\XURNKKDAA=::333366:=6:6:DD===:663366666666333,,,,)))))%%%%"""%%"""""""" +™™’–’™™–––™ +"=DKKKKGGGGGGKGRRcimppwtwpwtzwzzwwwpppmmii__\X_URRKKKKKKGGKKKKRU\ciptttzzzz……ˆˆ‹‹’’’’‹‹‹‹ˆ––––™™œœœœ  £§ªªªª­ªªªª±ª­­­­ªª­§£££œ’‹‹ˆˆˆ……………~z~www~~z~…~…………ˆˆ‹‹‹‹’’’‹ˆ‹‹‹ˆˆˆ……ˆˆ‹ˆˆ‹ˆ‹ˆ‹‹‹‹ˆ…ztwwwwwwwzzz~…ª­´»»ÂÂÂÅÅÉÉÌÌÌÉÅÉÅÅÅž¾¾¾»»»»»»¾Â¾¾¾ÂÂÅÉÉÉž»»¸¸¸¸»»»»¸¸´´´­±­ª­­±±´»ÂÂÅÉÉÅÌÅÉÅÉÅÂÉÉÅÂÅž»¾»¸¸´±±­­­§   œœ™™’’ˆ‹…‹ˆ‹–– §ªª§ª­­­­±¸¸´´»¾¾¾¾Â¾¾¾»Â¾¾»¸±´±±±­±±­±±´±±±ª­­´¸¸»»»»¾»»»»¸´´±¸´»¸¸¸¸¸»¾»»¸´¸¸¸ª´´´¸´¸¸¸´´±­ª£§  ™£ –’‹………ˆˆ……zwttwpmpf_c__\\UNRUURRRRNNKNNRNRURUR\XXpw~icz……~ˆˆˆ………‹‹‹ˆˆˆ…………ˆ~wttmifm_ci_fiimffcmtz~z~wwwwwwzwzwtttpptpppppttwwwzz~~ˆ‹‹ˆˆ‹~z~wtwitpmfcXKXAUGKRRGXN_XR_\\\\_UXRXUKGKKNGRRUURKRNGNKGDDDGGGKNKKKNNNNNKKKKGGGGKK\XURNKGDAA=::6636636::636DDA=:6660033636666333,,,,))))))%%%%%%%%"""""" +™™’–™™–––™ +"ADKKNKKKKGGKKGNRcimptttttttwwzwttttptmiff__\\_XUNNKKKGGGGKKKKRRX_fppppwwwz……ˆ‹‹‹’’‹‹ˆ™™––™™œ   ££§§­­­ª­ªªª­±ª±±±±­­­ª§§£œˆ‹‹ˆˆ…ˆ…………~~zz~~~………ˆ‹ˆˆˆ……ˆ‹’‹‹‹ˆ…ˆˆ‹ˆˆˆˆ…ˆˆ‹ˆ‹ˆˆ‹‹‹‹‹……ˆ……~tzztzwwz~~~……­­¸»»ÂÂÂÂÅÉÌÌÌÌÉÉÅÉÅÉÅÅÅž¾¾¾»»»»¾¾¾Â¾ÂÂÂÅÅÉÅÉž»»»»¸¸»»¾»¸¸¸´´´±±±­­­­´¸¾ÅÅÂÌÉÅÉÉÉÅÅÂÅÉÉÅž¾¾»¾»¸´±´±­­ª§££œ™œ™–’‹‹…‹ˆˆˆ‹‹’™–ª±ª­ª­­±±­´¸¸´¸¾¾¾¾¾Â¾¾¾¾Â»»¸¸±´±±­ª­­­ª­±±­±ª­±¸´¸¸¾¾¾¾»¸¾»¸¸´±´´»¸¸»»»»»¸»´¸¸´´­´±´´¸´¸¸¸¸´±ª £œœ™£ ––ˆ…ˆ……~zwppttiic\___\\UKRUURRRRRRNRRRRRRRRNX\\tw~icz…~…~ˆˆ………………ˆ‹‹‹‹ˆˆ……………ˆ~~ztwpmfpcfmciimmiifmw~~zzwwwwwtwzzwwtwttwppppttwwwwzzz~……‹‹ˆˆ‹~…wzwptipmmcc\KUAUKKNRGXK_XN___X\_XUUXUNKKKKKURUURGRKGRGKDDGGGGNNKKKNNRRNKKKKGGKKNN\URRNKGDAA==::66660306303AD==6363,000333363333,,,,,))))))%%%%%"%%"""" +™™‹’–™™™–™ +%DDNKKNNKNKKKGGNR_fmmtttttptwwwwwwptptifcc_\\\\XURNKNGKGGDGGKKNRU\cmimmttwzˆ‹ˆ‹‹’’–’‹™–™–™™œ   £ §§­±­ª­§ª§ª±­±±±´­±­­§ª ™‹‹‹ˆˆ‹…ˆˆ…ˆˆ……~~~ˆ‹‹………………‹‹‹ˆ‹‹ˆˆˆˆ…ˆˆˆ‹‹ˆ‹‹‹ˆˆˆ‹‹‹‹ˆ…………z~~tzwzz~~ˆ…™­±»»»Â¾ÂÅÅÉÉÉÌÉÉÌÉÉÉÉÅÉÅž¾¾»¾¾¾¾¾ÂÂÂÂÅÅÅÉÂÅ»»»»»¸¸»»¾»»¸»´±¸±±´±±±´´¸»ÉÉÅÉÉÉÉÉÅÅÅÂÉÉÉÉ»¾»¾¾¾»¸´´±­±ªªª§œœœœ––‹ˆ‹‹ˆ‹‹’œ­­´­­­­­±±±´»¸´¸Â¾¾¾Â´´¸´±´­­ª­­­ª£­­­­±­­±´´´´»Â¾¾¾»»»»¸±´¸´¸¸»»»»»»»»¸¸´¸´±´­´¸¸´»»¸´´±ªœ£ ™œ œ–’‹‹……ˆ……~zwtimppfX_\\_\\\URRUUNRUNUUNURRURNRNDX__tzzmc~……~ˆ…………………ˆˆ‹‹ˆ‹ˆ…………ˆˆ…~~~zppfpfmmimiimiiiptzz~zwzwwttwzzzzwzttwttpttwwwwwzzzz…K‹‹z…z~tttimmpcf_NU=UNKNNK\G_UR___\\c\UUUXRNKKGNRNURRGNNKRKGDDDGGKRKKKNNNRRNKKKKKKKKRNXURRNKGDA==::663:330,30))=D=")630,000033333333,,,,,,))))))%%%%""%"%""" +™™‹’–™™™™™–")%GNRKNNNKNNGGKGRRccmmtttwtttwwwwtwtpppiffc___\\URRNNKGGGGGGGKKNRU\_miiimtwz~~…‹…‹‹‹‹’’’’’’™™™™–™œœœ  œ£§ª­­ªª§§£§­ª­±±´­±±±ª§£™’‹‹‹ˆ‹ˆˆ……ˆ‹ˆ‹ˆ…ˆ………z~……‹ˆ‹…………‹ˆ‹‹ˆ‹‹…ˆ…ˆ…‹‹ˆ‹‹ˆˆˆ‹‹‹ˆ‹‹‹‹‹ˆˆˆ…~~w~zz~ˆˆ­­´¸»¾Â¾¾ÂÂÅÉÉÉÉÅÌÉÉÉÅÅÉÅɞ¾»¾¾¾¾Â¾ÂÂÂÅÅÉɾž»»¸¸»¸»»¾¾¾»»¸¸±¸±±¸´±´¸¸¾¾ÉÉÂÌÉÉÉÅÅÅÉÅÅÉÅɾ»¾¾¾Â¾»¸¸´±±±­­­ª£   ™’‹ˆˆˆ…ˆˆ’ ±­´±­±­­´´±´»¸´¸Â¾Âž¾»¾´±´´´±­±­­­ª§£ªªª­­ªª±´±¸´¾Å¾»»¸»»¾»´¸¸¸´¸»¸»»»¸»¸¸´¸¸´´±±¸¸¸´»»´´±­§œ œ–œœ™’’ˆˆˆˆ~~wwtf_iifcXR\X\\\\XUNRUNRUNUURUUUUUNRRG\_cw~wpc…ˆ………………ˆ…ˆ‹ˆˆˆˆ…ˆˆˆ…………~ttmtfppmpiimmfmtt~~~zwwzwtwtzzwzwzwtwttttwwwwwwzzz~…’K‹zz~ttwiippficURAURUNRG\K_XNc\\XXc_XUXXUNKKNNURUUUKKRNUNDDDKGGNNKKKNNNRRNNKKNNNNNRNXURNKKGDA==:::336360,0,,%:A="%300,000003333333,,,,,,)))),))%%%%%)"""""" +™™‹––™™™™™–%:AKRRRRRRKNRKGGGRRffmmptttttwwwwtwtwpppifif_\\X\XRRNNKKGGDGGKGKNRU\_iiffmttwz~……‹…ˆ‹‹––––’’’’œœ™™–™œœœœœ™ £§ªª§§§£ £ª§­­±±±±­­­£ ™’ˆ‹ˆˆ…ˆˆ‹‹ˆ‹ˆ………………ˆ…~~…ˆˆ‹…………~……ˆ‹‹‹‹……ˆˆ…ˆ‹‹ˆˆˆ…‹‹ˆ‹‹‹‹‹‹‹‹‹ˆ…z~~~………‹‹±±´¸»»¾¾¾ÂÂÂÅÉÅÅÅÌÉÌÉÉÅÅÉÉɾ¾Â¾¾ÂÂÂÂÂÅÅÉÉ»»¸¸»¸¸¸¸¾¾Â»»¸¸´´±±¸´´¸»»ÂÂÉÉÅÉÉÉÉÉÉÅÅÅÅÉÅžŻ»¾Â»»¸´±´±±±±­ª £œœ’‹ˆ…ˆ‹‹‹’£´±¸´±±­±¸¸´´»¸¸»Â¾ÂÂÂÅž¾»´±´´´±±±­­ªªª£§£­ª­­­±´±¸´¾Â¾»¸»¾»¾»´´¸»¸¸»»»»»¸¸´´´´¸´´±´¸¸¸¸»¸´±­££œœ™–œ’–’’‹ˆˆˆˆ~~tzttic\fc\\URXXX\\X\XNNURRXRURUXUUUURUUK_cfz~zti…~‹………ˆ…………ˆˆ‹‹‹ˆˆˆˆˆˆˆ…ˆ…wwtwttpppiimmippt~~~zzwwwtttzzwzzzwwwwttwwwwwwwzzzzˆK~wztptffppimffNAUUXNRG\K\XR_XXXXc\\X\XXNKURNUUUXUKGRRXRDGDNGGRKNKKNNNRRNNNKKRKNRURXRNNKGGDA==::633,33,)),)%)=:"%%)0,,,0000333333,,,,,,))))0)))%%%%%%""""""" +™™––™™™™™™3ADNUUUUURNKNGGGKXRfimmptptptwwwwwwwwptmiiif__\\\UURRNKKGDDGGGDGNNU\_ffcciptwwz……ˆ‹ˆ‹‹‹’–™––’’–œ™™™––œ™œ™™–™ £§–£ £ œ §£ªª­­­­ªªª  ™’’’‹ˆˆˆ…ˆ…‹‹‹‹ˆˆ…ˆ……………~~~…~…ˆˆˆ………~…ˆ‹ˆ‹‹ˆˆ…ˆ………ˆ‹‹…………ˆˆˆ‹‹‹‹‹ˆˆ…………………ˆ­±±´¸»»¾»¾¾¾ÂÅÉÉÂÉÌÉÌÌÉÅÉÅÉ޾ÂÅÅÂÅÅÅÉÉɾ»»»¸»¸¸»»¾¾¾»¾¸´¸´±´¸¸¸»»¾ÅÅÉÉÅÅÅÉÉÅÅÅÅÅÅÅÅž»Â¾¾¾Â¾¸»¸±¸´´±´±­§£ ™–’‹ˆˆˆ‹’£¸´¸´±´±´»¸¸¸¾¸»¾ÂÂÅÅÂÅÅ»¸´´´´´­±­­ªª­§§§§ª­±±±±¸±¸¸Â¾¾»»¸¾»Â»¸¸»»»»»¾¾»»¸¸´´¸´¸¸¸±¸»¸»»»¸±­ª£  œ™™™–’’‹‹‹……pzpzimf_\\_XXURXUXXX\\\URUUUUUURUUUXUUUXU__fi~~…~……‹……ˆ…ˆ………ˆˆ‹ˆ‹ˆˆ‹‹‹‹‹ˆ…ˆˆ…zzwzwtttpmippmpmp~~zzzwzttptwzwzzzwwwzwwwwzwwwwzzzzˆK’wztppiimtmpiiKAUX\NRDXG\XR_XU\Xc\_UXUURXXUNUXUXUNDNN\XGXXUGXNNNKKNNNRRNNKKNNNKRUUURNNKGGDA==::660,30)),))%%%0%%",0)),,000033333,,,,,,,,)),)))))%%)%%"""""""" +™™ +–™™™™)6DGRRXXXXNNNNKKGR\_fmmmptpttttwwwzwwwppiiiifc_X\XXUNRNNKGDGGDGDGKKR\_cfc_fmptw~……ˆˆ‹‹’–™–’’‹’™œ––––™™™–™––œ ™’™™™™™œ §§ªªª£££§œœ™’’‹…ˆ……ˆ…ˆ‹‹‹ˆˆˆˆ……ˆ……~z~~……………~~…ˆˆˆ‹‹‹‹…ˆ…ˆ…ˆˆ…………ˆˆˆ‹‹’’’’’‹‹ˆ…ˆˆ…ˆˆ…‹‹£±±±´¸¸¸¾¸»¾¾ÂÂÅÉÂÅÉÌÌÌÌÉÅÉÉÅÂÂÅÂÂÂÅÅÂÂÅÅÅÅÉÉÉÉɾ¸¸»»»»¸¾¾¾Â¾»¾¸¸»´´¸»¸»¾¾ÂÂÅÉÉÉÉÅÉÉÅÅÅÉÅÅÅž¾Â¾¾Â¾¾Å»»»±´´±´´±±­§£œ™’’‹ˆ’’’¸¸¸¸¸´¸´¸»»¸»¾»¾¾ÂÅÅÅÂÅÅŸ´´¸´´¸ª±±­­­­£ª§ª­­±­±­´±¸´¾Â¾¾»»»¸¾¾»»¸»¾¾»»¾¾»¸»¸´¸´¸¸´´¸¸¸»¸¸¸±£§£   ™™––’’‹ˆ‹ˆppizifcX\\cUUUR\UXXX\\\\UURRUUXUUUUURUU\R\cpm~…ˆ…~…………‹………ˆˆˆ………ˆˆ‹ˆˆ‹‹‹‹‹ˆˆ‹ˆˆ~~z~zwtttpimmpmmpzzw~zwwwttwwwww~zzzwzzzzz~zzzzzzzz…‹‹’…wztppmfipimfmKDX\\RUGUGXUR_XUXX_X\RXXXU\\XRUXUURRARK_\G\\XRXRRNNKNNNRRNNKKKKNKNRRURNNKGGDA=:::63,,0)))),)%%%,"%0,%),,,00003333,,,,,,,,,,))))))))%%%%%%"""""" +™™ + + +,:GKUUX\XURNRNGGKX_cfimimptttttttwztwtmpfiiifccX\\XURRNNKKDGDADDGGGRX\_c__fimpt~…ˆ‹‹’’’–’ˆ–™–’––™™™––’’ˆˆ…ˆ‹–’œ £ §£œ œ œ™™–‹ˆ………ˆ…‹‹ˆ‹ˆ‹ˆˆ……~~w~~~~………~………‹‹‹‹ˆ‹…~…ˆ……ˆˆˆˆ‹’’’’–’’’–™™ˆ‹ˆˆ‹‹––­±´´´¸¸¸»¸»»¾ÂÅÅÉÅÅÉÉÌÉÉÉÉÅÉÅÅÅÅÅÅÂÅÅÅÅÅÉÉÉÉÌÉÅž¾»¸»»»¾»¾¾¾Â¾»»»»¸¸»¾»»»Â¾ÅÉÉÉÅÅÉÉÉÉÉÅÉÂ޾¾¾ÂÂÅž¾»±±´´´´´´±ª§£ ––’–’£–»»¸¸¸´»¸»¾»»»»»¾¾ÂÅÅÂÅž¸¸´¸´´´­±±±ª­ª£ª§§­ª±­­±´±´´»¾¾Â¾¸»´Â¾»»»¾¾Â¾»»»»¸»»´»¸»¸´´¸¸»»¸´¸­£§£  œ™™’–’‹…‹pmizfc_X\\cXURR_XX\\_\__XUURUXXUURRRUXU\UGfwpˆˆˆ……ˆˆ‹ˆ……‹…ˆˆ……ˆˆ‹‹‹‹‹‹’ˆ…ˆ…‹…zzzzztwttmpptpptwww~ztwtttwwwwwzzzzz~~~~~~~zzzzzzˆ‹’–…zzwpppc_\_iciN_\_\UXGXGUUR\XRUU\XXNX\XX\XXUUXXXUNARNc_c_\\UUURRNKNNNRRNNKKKGKKKGNURNNKGDAA=:::33,,,,))))%%%%)"%"0)%%)),,0003333,,,,,,,,,,,)))))))))%%%%%%"""" +™™ + + + + +:=GKXX\\\XURRRGRU\c_fimmipptppptwwzwttmmfifffc_XX\XURRRRNKGGDADADDGRUX\___ccimpz~ˆˆ‹‹’’’’‹’‹‹…‹‹’–’’––––™’’’‹‹~~~ˆ‹‹’œ œ£ ™–™–œ–™–’‹ˆ~~……ˆˆˆˆˆ‹ˆ…ˆ~~z~z~~~……~~~…ˆ‹‹‹‹‹ˆˆzz~…w~~…………ˆ’’™™––œœ œ™™’ˆ–œ±±±´±´¸´»»»»¸¾ÂÂÅÅÉÅÅÉÌÉÌÅÉÅÅÅÉÉÅÅÅÅÅÉÉÉÉÌÉÉÉÌÅ»»¾¸»»»»»¾Â¾Â¾¾¾»¾¾»¾Â¾¾¾ÂÅÂÅÅÉÉÉÂÅÅÉÉÉÅÉÂÅž¾¾ÂÉž»´´¸´´´´´´­§§£™™––œ´œ¾»Â¾¾»»»¸»¸»¾¾¾»»»¾¾ÂÅÅÅÅÉ»»»¸¸´´´±­­­­­§£ª§ª­­­­­±´´±±»¾¾¾¾¸»¸¾¾¾¾¾¾¾¾¾¾»»»»»¸´¾¸»¸¸´¸»»»¸´¸ª§£   œ™–’–’‹‹’pifzf_\U\\cUURU\U\\\___cX\XRXX\XXURUUXR\XGpzp…ˆ…‹……ˆ…ˆ‹‹ˆˆˆ‹…ˆ‹ˆ…ˆ…ˆ‹‹‹‹‹‹‹………ˆ…~~~~zwwttpttpptptwtzzwwtttwwwwzzzz~z~z~~z~~~~zz~…‹’–…~ztpmp_\XRRNfR\_c\UUDXKUUR\URRUUUUU\X\U\\XUX\XUUKDRR___c\\XXUNNNNNNNRRNNKKKKGGGGGUNRNGGDAA=:::03,,)))%%)%"%"%%)%,%"%%),,0000333,,,,,,,,,,,,,,,,)))))%%%%%""""" +™ + +=AGRc\__\\XUUUUXX_fcifimimppmpptwwzzttmiifccfc_\\\XXUUUUNKGGDAADDGKNRUX\_\cccmiwz……‹‹’’’ˆ‹‹…ˆ…ˆ…–’’’–––––’ˆ‹ˆzz~zz~ˆˆ’™™ œ–’–’™––’’ˆ‹…zz~……ˆˆ‹ˆ………~zzz~zz~z~…~~~~~~ˆˆ‹ˆˆˆ……~wz~~twz~…‹–œœ™§£ ­­   ™œ’œ  ¸´´±´´¸¸´»»»¾»¾ÂÂÂÅÉÉÉÉÉÌÉÉÅÉÉÅÅÉÉÅÅÅÉÌÌÌÌÏÌÌÉÉž¾»¾»¸¸¸¾»»Â¾Â¾Â¾Â¾¾Å¾ÅÅÅÉÉÉÉÅÂÉÉÉÉÉÅÅÅž»¾Â¾¾ÉÉž¸±¸´´´¸´´±§ª§£œœ  »»Â¾¾¾¾¾»¾»¾»¾»»»»¾»¾¾ÅÅÉÉÉÉÅž¾¾»¸´¸´­­±­ª­££ª§ª±ªª­±±±´´´¸¾¾»»¸»¸¾»¾¾Â¾»¾¾»»»»¾¾»¸»»»¸»±¸¸¸»»´´§§£ œ  ™™–™’’‹–…ticzf\\U\\cUURUXU_\\\ccc\_\_\\\\XXUXXXR_\Gt~t……ˆ…‹ˆˆ‹ˆ‹‹‹‹‹‹ˆˆ‹ˆˆˆ…‹‹‹‹ˆˆ‹ˆ~………~~~zztwttttmpppwwtwwwwwwtwwwwzwzzz~~~……~~z~…‹’’~wppimcXXRRKNUX\_\URAUNRRRXURNRRXKXX\XR\\XU\\UXUKGf\cc\__\XUUNNNNNNNRRNNKKGGKDDGGRNNKGGDAA=:::03,0,))%),%%)"%%)))""%%%),,000333,0,0,,,,,,,,,,,,))))))))))%%%%%""""" +=DKR\f_cc__\XX\X\\_fcfifiiippppptwwzzttmifcccfc__\_\XXUUURNGGDAADAGGKNRU\\\__ciipz…‹‹‹’’’…‹……ˆˆ™’’’’’–’’‹‹…ˆ…~wwtwwtwzt’’™’’–’’ˆ‹ˆz~~~ˆ‹ˆˆ…ˆˆ~~~wwzzzzz~z~~~~~~~~~z……ˆ………~wtwz~zppwz~z~~…‹’  £­ª»¸±ª´´¸¾¾¾¾¾»¸´´±´¸¸¸»¾»»¾¾Â¾ÅÅÉÌÉÌÌÉÅÉÂÉÉÅÅÉÉÅÉÅÌÏÏÏÏÓÏÌÌÉž»»¸¸»¾¾¾¾ÂžÂÅÂÅÂÅÉÉÉÉÉÅÅÅÉÉÉÉÉÉÉÅž¾Â¾ÂÅÅž»´»¸¸´´´´´±­ª§§ª­»¾¾¾¾¾¾»¾»»»¾¾¾»»»¾¾¾¾ÂÅÉÌÌÉÌÉɾ¾¾»»¸¸´±­±­§ª£§§ªª­­­ª­±±±´´¸¾»»»»»»Â¾¾¾Å»¾¾»»»¸¾»¾¸¸»¾¸»±¸¸»»¸¸±§§  œ  ™™™™’’’’’’ˆwmfzf\XX\\cUURXXX_\\Xccf\c_c____\XXUX\U__wp…ˆ……ˆ‹ˆ‹‹‹‹ˆ‹‹ˆ‹ˆ‹‹ˆ‹‹‹‹ˆˆˆˆ…~~~…~z~~twtptpimppwttwwwwtzwwwwwwwzwz~~~~……~ˆ’’’’ztmpii_UUNRKNUUX\\RN=RKGRNXRNNRNUN\NXXU\X\U\XRDRGKc_cf\_\XXRRNNKNNNNRRNNKKKGKDGGKRNNKGGDA==:::00,,0)%),))),%))))%%"%%%)),,00333,,,,,,,,,,,,,,,,,,,,,)))))))%%%%%"""=DKfUcicffcc_X\_\__cfcfffifimppppwwwzwtwmmicccfc___\\XXUUXRRKGDAADADKNKNUX\\_\cimpz…ˆˆ‹’’’ˆ…ˆ‹™–’’’’’’‹‹……~zttpptptpmw‹‹‹ˆˆˆ‹‹‹ˆ‹……~z~~z~~~…ˆ…ˆ…ˆ‹~…zzwzwzzzzzz~zz~~~~~~w…~~~~zptwmmpmtwzwww~ˆœ£§±¸Â»¾¸¸¸»¾¾¾Â¾¸´±±´´¸»»¾»»¾¾ÂÂÉÉÉÌÉÉÉÅÂÉÅÅÅÉÅÉÅÅÉÉÌÏÏÓÓÓÏÏÌÅÅ»»¸¸¸¸¾¾¾¾Â¾ÂÂÂÅÂÂÂÂÅÂÂÅÂÅÂÅÅÉÉÉÅÉÅÅÅÉÉÌÅÉÅÅÅÅÂÅžÂÂÅÅÉž»»¸¸´´´¸¸´±­ª­­±¾Â¾¾¾¾¾¾¾»¾¾»»»¸¾¾¾ÂÂÂÉÉÉÌÌÌÌɾ¾¾»¸»¸´´±­±ªª£ª£§ªªªª­ª±±´¸¸¸¾»»¾»»»Å¾¾Å¾¾¾»»´¾¸¾»»»¾¸»±»¸»¸´¸±ª§  œœœœ™™™––’––‹zpizc_UX\\cUURXX\_\_Xcci\fcfccccXXXRX_X_cwp~…‹…ˆ‹‹ˆ‹‹‹‹‹‹‹‹‹‹‹‹ˆˆˆˆ…~~~……z~~tttppmmmpptwtttzwtwwztzwwwwwwzz~~………………………‹’–’’’zpimff\NRKNKNRXXXXNK=NNDRNURNRNRURXNXXX\XDRXUUDNGNXc_f\\XXXNNKKNNNNNRRNNKKGKGGKKGRNNKGDDA==:::0000,,),0),,0),%%%"""%%%)),,00033,,,,,,,,,,,,,,,,,,,,,,,,)))))))%%%%%"""""%,6G_ficfifficc_\_c___cfcffffimmmpttwwwzwtwpmifccf_c__\\XXUUUUNKGDAAAADKKGKRU_\c_cimmzˆ‹‹’’’‹ˆ…………‹™’–’’‹ˆ…~~ztppmmmmimmp………ˆ……ˆ‹ˆˆˆˆˆ…ˆ~zzwzw………‹……ˆ~zzwwwwwwwzww~zz~zz~z~~zwzwzzwtptiimiippittw~…‹™§­¾¾Å»¾»¾Â¾¾Â¾»»´±´´¸»»»¾»¾¾ÂÂÂÅÉÉÏÌÌÅÉÅÉÅÉÅÅÅÉÅÅÉÉÌÏÓÓÖÓÏÏÌÉÉž»¸¸¸»¾¾¾¾ÂÂÂÅÂÅÂÅÅžÂÂÅÅÉÉÅÅÅÅÅÅÉÅÉÉÅÉÉÅÅÅÅÅÅ»ÂÂÅÉÉÅž¾¾¸¸¸´´¸¸¸±±­±¸´¾Â¾¾»¾¾¾¾¾»»¸¸¸»¾»¾¾ÂÂÉÉÌÏÌÏÏ̾¾»»¸¸±±­±ª­§§££ªªª§­­±´´¸´»»»»»»¾¾Â¾¾»¾¸¾»¾¾»¾»¸¸´¸»¸»´´­­§ £œ œ œœœ–™’’––ˆztizfcXX\_cXXNX\\\\_\cffcifffc__D\XRX\\__tm~…‹ˆ…‹‹ˆ‹‹‹‹‹‹’ˆˆˆˆ……~~ˆ……~~tptmpimmtptwwttzwtwwzwzwzzwzwz~~~…ˆ…ˆˆ…ˆˆ‹’’––’–…zmfic_\GRKNKNNXURUKGANKDNRRRRRRRRUNRU\X\XGN\URDKDNU_cf\_UUUKKKKKKKNKRRNNKKGGDGNNGRKKGGDDA==:::00,,00,00%,,,,)"""""%%%)),,00033,,,0,,,,,,,,,,,,,,,,,,,,)))))))))))%%%%""%))0:Uciififfcffc\\_c_c_cccffciimmpmtwwwzzwtwpificffc_\_\XUXUURRNKKGDA=ADKNKKNR\\c_fimpzˆ‹‹’’’‹……………………‹–’’‹‹ˆ…zzzzttmmiiiifiimpt~~……ˆ……ˆ…ˆˆ……~zzw~z…‹ˆˆˆ…zwwwttwwtwtwzwwz~~zz~~wwttwwmpipfimfffmippwz…’§»ÂÂÉÅž¾¾¾»»´±¸´¸¾¾¾¾¾¾¾ÂÂÅÅÉÌÏÌÉÉÉÅÉÉÉÉÉÅÉÉÉÉÉÌÏÓÓÓÖÏÏÌÌÉÉž»¸»¸»¾¾¾¾ÅÅÅÅÂÅÂÅÂÂÅžÅÂÅÉÉÉÅÅÅÂÅÉÉÉÅÌÉÉÅÉÅÅÅž¾ÂÂÉÉÅž¸¸´¸´»¸¸´´±´»±»¾¾¾¾¾¾¾¾¾¾»»¸»»¸¾»¾¾ÅÅÉÌÌÏÏÏÌÉÅž¾»»¸¸´­­­ªª§££§§­ªª­ª­¸´¸¸»¸»»¸¸¾Â¾Â¾¾Â¾¾Â»»»¾¾¾¾¾¾»¸¸¸¸»»»¸´­ª§££œ     ™™™’’–’…zwmzcf\X\_c\\N_\_____fiffiffccccD_XRUX__\pmz…ˆˆ…‹‹‹’‹‹‹‹’‹ˆˆˆ…~z~~……ˆ…~wmtipippttwzwwtwwtzwzz~wzwwzzz~~~~~…ˆˆ‹‹ˆ‹‹’’–––’…wiif_XXGRKNKNNUXRKKGDKGGNRRRRRURRRNRUX\\\GN\XNGGGNR\_c__RXUGGKKKKKNKRRNNKKGGDDKKKNNKGGDDA==:::03,,0003,),00,%""%%%)),,,0333000000,,,,,,,,,,,,,,,,,,))))))))))))%%%%%""""""""),,3=Xcifffcfccc__\___c__ccfffiimmmmtwwwzzwwtmmficffc_\_\XUURURRNKKGGAAAGGKKGKNXX_cfipp~…ˆ‹’’’‹ˆˆ…ˆˆ…ˆ…‹’‹ˆ‹……~wwttppmmmfffffiiim~~~……………ˆ…ˆˆˆ~~~z~z~……ˆˆˆ…ˆzwwzwwwtwtttwztw~~~~zzwtttttimimfiiicfifmmtwz…’»¾ÅÅÉÉÉÅÅž¾»¸´±¸´¸»Â¾¾¾¾ÂÅÉÅÌÌÏÌÉÌÌÉÉÉÌÅÌÉÅÅÉÅÌÌÏÏÏÏÖÓÏÉÌÌÌÉž»¸¸¸»»»¾ÅÉÉÅÂÉžÂÅÂÂÂÂÉÉÉÉÅÂÂÅÌÉÌÉÉÅÌÉÉÅÅÉÅÂÂÂÂÅÉÉÅÅ»»¸¸´»»¸´´±±¸±¸´»¾¾¾¾¾¾¾»»»»»»¸¾¾Â¾ÅÉÌÌÌÌÌÏÌɾ¾»»»¸±ªªªªª§§§§§ª­­­­±´¸¸´»»¸¸¸¸¾¾»¾»¾Â¾»»¾Â¾¾»»¾¸¸¸»»»¸´´±§§§§   œœœ™œ™––’ˆztmzff_X\_c_c\c\ccc_cffciiifcfffccX_R\__N_mwˆ…ˆ‹’‹‹’‹‹‹ˆˆˆˆ…~~t~~ˆ‹…ˆ…~zttmpmmmtpzzwzwwztzwzz~z~zzzzz~~~~~…ˆˆ‹‹ˆ‹’––––’…wiff\UXGRKNKNNRXNNKDDGGDKNUUUUURRRRUXXXX\GNXXKKDKRN_\___RXRGGKKKKKKKRRNNKKGGDDNKKNKNGGDDA==:::00,,00330,0,,)""%%%)),,,033300000000000,,,,,,,,,,,,,,,)))))))))))))))%%%%%""%%%,00KXU_fcccccccc\\\\\__c_c_fffffmmppwwwwwwwtpmmffcifcc_\\\XRRURNNGGGGDAAGKGGDGKNU\ccipp~ˆ‹‹’’’ˆˆ‹…ˆ……ˆˆˆ‹ˆ‹…zwztipmimiiiccffcfiipz~~~……ˆ…ˆ…ˆˆ‹~~~~~……ˆˆˆˆ‹zzzzwtttwtpppwwz~~~wwwtppmpfmiififf_cfcimptz…¾ÂÉÅÉÉÉÉÅÅÅž¾¾»´¸´¸¸»»ÂÂÂÂÂÂÅÅÅÉÉÏÓÌÌÌÌÌÉÌÌÉÉÉÉÉÉÉÌÌÌÌÌÏÓÏÌÌÏÏÌÌɾ»»»»¾¾ÂÉÌÉÉÂÅÂÅÅÅÂÂÂÅÂÅÂÅÉÉÉÉÉÅÅÅÌÉÌÌÉÉÉÉÉÂÅÉÉÂÅÅÅÅÅÅÉž¾»´¸¸¸»¸±´±­´±ª´»¾¾¾Â¾»»¸¸¸¸»¾»»»¾ÂÅÉÌÉÌÏÌÏÌž»»»»´±ª§­ªªªª££ªª±±±­´¸¸»¸»»´¸´¸¾»¸»»»¾¾ÂÅ»¾¾¾Â»»»¸»´¸´¸»»¸±±±ª§ª£   œ™™™œ™™’’‹zppzff\\ccfffffXcf_cfcicmmmifiifffXcN\\\G_mw~ˆ…~ˆ’‹’’’’‹‹’‹‹‹ˆˆˆˆ……w…ˆˆˆzwtptmppptz~~~zwzt~z~z~~~zz~z~~~…ˆ‹‹‹ˆ‹’–––’’wifcURXKRKNKRRRXRNKGGGGDGNXXUUURUURX\XUXXGKUDGKGKUK\X\\\RUNKKKKKKKKKRRNNKKGGDGKKKNNNGGDDA=:::6000,,,00,,0),)""%%%)),,,03630000000000000000,,,,,,,,,,,,,,,)))))))))))))))%"%)))00:NXX\c\_c_ccf_X\\\\\_c_fccffiippttwwzzwwttmimfcffcccc_\XXRRRRKKGGGGDDDDGDGADGKRX__imtz…‹’’’’……‹ˆ……ˆ…ˆˆˆ……z~zz~wtppimififf_c_ccffiitwz~z~………ˆˆˆ‹……~~…………‹…~~zwwttpwtpppttw~~~~wttpmmimciiiiiifcfccimmtw…’ÂÅÅÅÉÉÉÉÅÅÅɾ»»´¸´¸»¾¾ÂÂÅÂÂÂÉÅÉÅÉÓÓÏÌÏÏÌÉÌÉÉÉÌÌÉÌÌÌÌÌÌÌÏÏÏÌÌÏÏÏÏ̾»»¾»¾ÂÂÉÉÉÉÅÅÂÅÅÅÅÂÅÅÅÅÂÉÅÉÉÅÌÉÅÉÌÅÉÌÉÉÅÉÅÅÂÅÅÂÂÂÅÂÉÉÅÂÅž»¸¸´¸»´±±­ª­­§±»¾»¾Â¾»¸¸¸¸»»»¾¾»ÂÂÂÅÌÉÌÌÌÌɾ»»»¸´­§ªªªª§§££ªª­´´±´»»»»»»±´´´»´¸¸¸¸»»¾ÅÅž¾Â¾¾»»¸¸¸±¸¸´¸¸»­­­­ªª££   ™™™œ™™–ˆ~itzic_cfiiiiii_ff\fi_ifippmimifif\fK_XcG_mzz…zˆ’’’’’’‹’’‹’‹‹ˆ………………z……ˆˆˆ…~~zwttptpww~~…~~zt~~~~…~~~z~~~……ˆ‹‹‹’’–––’–…wif_XUXNRGNKRUUURNGGGGGGGR\XUUUURUR\XUXUXGNRGNNKNRKXXXXXRRKGGGGGGGKKRRNNKKGGDKGKNNNNGKDA==:66600,,0)00,,,%)%"""%%%)),000033333333000000000000000,,,,,,,,,,,,,,,)))))))))))%)),,63GNU\X_\\__cfccX\\\_____cfcffiipptwwwzzzwwtpmiicfcfc__\_UUNNNRNKGGDGDDDADDDAAAGGK\Xfipwˆˆ’’’‹ˆ…ˆˆ………ˆˆˆww~wzwtttmiffifffcc__\__cfmmttwzw~~……ˆ‹ˆˆ………~…‹ˆ…~zwttttttpmpppptzz~~zzwwpmiififfiffifcccfffippz…–ÅÉÅÅÉÉÉÅÉÅÅž¾»¸¸¸´¸¸¾¾ÂÂÂÅÂÂÉÅÌÉÌÓÖÓÏÏÏÌÌÌÌÌÌÉÌÉÌÌÌÉÌÌÌÏÏÏÏÌÏÏÏÓÌÅ»¾¾¸¾ÂÂÉÉÉÉÂÅÅÅÅÅÅÅÂÅÉÅÅÉÉÌÉÅÌÌÉÌÌÉÉÉÉÉÅÉÅÂÂÅžÂÂÅÂÌÉÅÂÅÅž»»¸´¸¸±­­ª§ªª£­»¾»»¾¾»»¸¸»»»»¾»¾¾ÂÂÅÉÉÌÌÌÌÉž¾¸»¸´´ªª§§§§§££§ª­±¸±´¸¸¸»¸»¸±´±±¸±´±´´¸¸»Å¾»»¾¸´´´´¸´´¸¸¸ªªª­§§§£ £ œ–™™™™’ˆ‹‹i~wpicfimmmiimfifXciciiipppimmificfU__fG_mww~…’’––’–’’––‹‹‹‹ˆˆ…………~……ˆˆˆ…z…~~wwttwpzz…ˆz~~……~z~~~~……‹‹’’–™™™–’…wif_UXXRRKNNRRUUUKNNGDKKGR\XUUUURXR\\XXXUKKUGRKNNNNNUUUXNNNGGGGKGGGGRRNNKKGGDGAKRNRRKKDAAA:66600,,,)0,)))")"""%%%,,0,,003633333333333000000000000000,,,,,,,,,,,,,,,))))))))),0:DKNRX\\\X\_cccc\_\___cccccfffiipttwwtzwzzwtppiicfffc\\X\URRRNRNKDGDDDDA=AAA=AADGKRXfimw~……‹‹ˆ…ˆ……ˆ‹pttmtppmpif_cf_cc__\\\__ffmmptwww~z~………ˆ…ˆ…ˆ………~~ˆ…ˆ~zwwwpttppmmmmmpwwzzzwttpmmffifcifiiffcffffittw…–ÉÅÅÅÅÅÅÅÉÅÅÅ»»¸¸¸¸´¸¸Â¾ÂÅÂÂÉÉÌÌÏÓÓÏÏÓÏÏÏÌÏÏÉÌÌÌÌÉÌÉÉÌÌÏÏÏÓÌÏÏÏÓÌÉž¾»ÂÂÅÉÅÉÉÅÉÅÉÉÅÉÅÅÅÉÉÉÉÉÌÌÉÌÏÉÌÏÌÌÉÅÉÉÉžžÂÂÂÅÌÉÅž»¸¸´´¸¸­ª§§ §§ £»¾¾»¾¾»»»¸»»¾¾Â¾¾ÂÅÅÅÉÌÌÏÌÌÅž¾»»´±±ª­££§§££§ªª±±´´¸¸»»»»¸¸´´­±±­±±±´¸¸¸Â¾Â¾¾¾»»´¸±±´´´´¸»´££§ª§§§  £ œ–™™–™’‹‹‹‹zwtmmimpmmmimiifUficfmipptmptmfmicXcciG\ptt~‹’’–™’––’–™™’’’ˆ‹‹ˆˆ‹ˆ…~………ˆˆw~zztwwww~z………‹……………ˆ…w~~~~……ˆ‹‹’’™œœ™–’ˆwmfcX\XRRNNRRRUUURRRKKGNKU\XUUUUU\U__\U\XNGUKUNNNRNNUKRUKKKGGDDGDDGDRRNNKKGGDDAGNNRRKKDDAA:66600,,),,0))""%"""%%),00,,30636333333333333333000000000000000,,,,,,,,,,,,,,,),),03AGNRUUXXXUX__ccc_c\_cccc_cffifmmttwtwwwtwwtpmmifficc_\\U\URRRRNKKDGDDGAA==AA==AGGNRXciitz~ˆ‹‹‹ˆ…ˆ………ˆˆ‹ppmmpmmfif\_______\XX\\ccfmmpwwtwzzz~…………ˆ…………~~~~~ˆ~twtmtpppmmimmmpttwzwttpmifcffciffiffffffimwwzÅÉÉÉÅÅÅÅÉÅž¾¾»¸¸¸¸»¸Â¾ÂÅÂÂÉÌÌÏÓÓÓÏÏÓÏÏÏÌÌÏÌÌÏÉÉÉÌÅÉÌÌÏÏÏÓÌÓÌÏÏÌÌÅžÂÅÅÌÅÉÉÅÉÉÌÉÉÅÅÉÅÅÉÅÉÉÌÏÌÏÏÌÌÏÌÌÉÂÉÅÅÅžÂÂÂÅÉÉÉÉÅÅ»»»¸´´´´­§£££££œ ¸¾Â¾»»¾»»»»¾¾ÂÂÂÂÂÂÅÅÌÏÏÏÌ̾¾¾»»´´±ªª £§£§ £§ª±±´±´´¾»¾¾»»´±ª­­ª­­±´¸´´¾»¾¾¾»¾»¸´´±´´´´±´¸±£££§§§§    œ–––’–’‹…~…zwppmptppmmpmmiXiifiiitptppwpmpmf\ffiG\pmt~zˆ‹–’™™–™––™™™’–’’‹‹’‹‹‹………………ˆ…‹ˆwz~~zwtzzwz~ˆˆˆˆ…ˆˆ……………ˆ……~z~z~ˆ‹‹’––™œœ–––…zpfcU\XUUKNRURUXUUUUNNGNNU\XUUUUX\X\_XU\XNKRKRRKKRKKRNRGGGGGGDDDDDDDRRNNKKGGGGADKNNNKKGAA=:66600,,))),%)"%%%""""%))),0,,30:3666666333333333333333000000000000000,,,,,,,,,,,,,,36DKRNRUUXXUU\\_cfcc_cccffccffmimptttwtttpttpmiiiffic__\XXXURRNRRNGGGDDD===:A==AAGGRRX_fipw~~…‹ˆ‹‹ˆˆˆˆˆˆˆ‹pmiiifcfi_\\_\_\X\XXXX\_ffmppwwtwzzw~~~………ˆ………ˆ…~~~~zz~…zwtpptppmiiiiifmfmtwtptpiiccffcffffiiffiffmwz~…ÉÉÉÉÉÅÅÉÅÉÅž»»»¸»¸¾Â¾ÅÂÂÂÅÂÂÉÌÌÌÏÖÖÓÏÏÌÏÌÌÏÏÌÏÏÉÉÉÉÉÉÌÌÌÏÏÓÏÓÌÏÏÌÏÅÉÅÅÂÅÅÅÌÉÉÉÉÉÌÉÌÉÉÉÉÅÂÉÉÅÌÌÌÏÌÌÌÏÏÌÌÉÅÅÂÅžÂÂÂÅÌÉÉÅÉž»»´´±±±­£ £ £ –œ¸¾¾¾»»¾¾»»»¾ÂÅÂÂÅÂÅÅÅÉÏÌÌÏ̾¾»¾»»»¸´­§§ ££§£ £§­­±±´´¸Â¾¾»±´­±­ª­­±±´´±¸¸»»»¾»»´´¸±¸±´´´´´±§£££§§§   œœ™–’’’’‹‹…~ztttptppmpppim\fmfmmfpptttzpptpmcfiiG_pmwz~z…ˆ™’™™™œ™™™™œ–––’’’–‹ˆ…ˆ…………‹‹ˆ…wwz~zttw~w~~ˆˆˆˆˆˆ‹…ˆ………ˆ………zzzz~~z~~ˆ‹ˆ‹’––™™™–––…zwf_\_XXRNNRURUURXUURRNRNX\XUUXX\\X\_XU\UNKRNNUKKRGKNNRGGGKGGGDDDDDDRRNNKKGKDDDGNNRNGGGA==:66600,,,)))%,)"%%""%%%,),,,0,006366666666666333333333333300000000000000000,,,,,,,,066GNNRRRRXXUX\X\cfcfcffffcffffmmppttttppmipmmifficcf_\\XXXUUUURUURKGGDAA::=:=:=A=GKRRU\fmpt~~…ˆ‹‹‹‹‹ˆ……ˆ…ˆ‹miiffccff_\\\X\\XXXXUX\_fimmptwwzzzz~~~……ˆ……………~~zzz~~~zwwtpptpmiiiiffiiiptpptpiiffifffcffffiiifipwzÅÉÉÉÉÉÅÅÅÅž»»»»»¸¾ÅÂÅÅÂÅÂÂÅÉÌÏÏÏÓÓÏÏÌÏÌÌÌÌÌÌÌÌÌÉÉÉÉÉÉÉÏÏÏÓÏÓÏÏÓÏÏÅÌÉÅÅÉÉÉÌÌÉÉÉÌÌÉÌÉÉÉÉÉÂÅÅÉÌÌÏÏÌÌÌÌÏÏÉÅÅžžÂžÂÉÌÉÉÉÅ»¸´´±ª­ª££ œ œ™’»¾»»¾¾»¾»»¾¾ÂÅÂÅÉÂəÉÌÓÌÉÌɾ»¸¾¾»»¸±±§£ £§§££§ª­­±´´¸»ÅÅž±±­­­­±­­±±±´¸¸¸¸¸Â»»¸¸¸´´±±±±¸´­ª£§£§§£  œœœ™™’––’ˆ’ˆ~~~zwwwtwppmttpipfcpfipcpptpwwzttppffimGfmmw~~zˆœ’™™™œœ™œ™™™’–’’–’’–’‹‹…ˆ…………zwzz~pwtzz~…z‹………ˆˆ‹…ˆ……ˆ‹………~zz~z~z~…ˆ‹‹‹’––™™™––’…~zf_ccXXUNNRURXRRXXRUURRNX\XUUX\_\\\\\XXRNKNNKRNGNKKGKNGGGGGKDKDDDDDRRNNKKKKDDDGKNNRGGGAA=:66600,,,))%%0,%))""""%%)0%0,03,=0366666666666666666333333333300000000003000000000,003:=GKNNRRRUUUUXU_cfffffiifffifipppppptpmmiiiiif_cf__c\XXXUUXURRUXUNNGGDDA==:::::AAGKRRX\fmttz~ˆˆ‹‹ˆˆ‹ˆ……‹ˆˆ’mifffcccc\\\\\\\\X\UUX\cfipppptwz~~~~~z~……………………~~~z~zzz~zwtttptpppmiffffcffiimptmmiiiifffffiicfiiimpz~…ÂÅÌÌÉÉÉÅÅÅž¾¾¾»»»»ÂÅÅÅÅÂÅÂÂÅÌÌÌÓÏÏÓÌÌÉÌÌÉÉÉÌÌÌÌÉÌÉÅÉÉÉÌÌÏÌÓÌÏÓÏÓÓÓÏÌÌÉÉÌÉÉÌÉÌÉÌÌÌÌÌÉÉÌÉÅÅÉÉÅÉÌÌÌÉÌÌÌÌÏÉÅÂÂÂÅÅÅÂÂÂÅÅÅÂÉÉÌÌÉɾ»¸´¸±ª­ª   œœ™™–»¾¾¾¾¾¾Â¾¾ÂÂÂÅÅÅÅÅəÌÌÏÏÌÉž»¸»»»¸¸´±§££££§£££ª­±±´´¸»ÉÉž±­­­ªª±ª­­±±´´´±»¸Â»¸´¸¸¸´±´±´¸´­­§ª§£§§   œœ™™–––’…‹ˆ…~zzwzttpmmtttmtiftifp_tmtpwt~tpptitppGmmmw~~w~…™–™™œœ –œ™™™––’’™’–––’–ˆˆ‹…………’…zwzw~twwzzzwˆ………ˆˆ‹ˆ‹…ˆˆˆˆ………~~~~~~zz……‹‹––––™–’’……~fpi_X\UNRNXRXUUXXRRXUUN\\XXXX_cX_\XX\UNRNKRNRNGKGGGGKGGGGGNRNDDGDDRRNNKKGGDDAGGNKRKKDA==:66600,,))%,,33),,%"""%),,),0336A33::66666666666666666666333333333300000:0000000000306=AGKNNRNUUUUXXX_cfffffififiifmppppmmpmiifiicf___c\\_XUUURRXURRUXURKDDGDAA=::6::ADGNNUX_cittw…ˆ‹‹‹ˆˆ……‹‹ˆ’’–mifffcccc___\_\\\X\XUX\cimmppttwz~~~~~………~~~~z~z~wzzztwwtttppimfcfcccfiiippppmmmiifffiiffffiippzˆÅÉÌÌÌÉÉÉÅÅž¾¾»¾¾¾»»ÂÂÅÂÅÂÅÂÂÅÌÌÏÓÏÏÏÌÉÅÉÉÅÌÉÉÉÌÌÉÉÉÅÌÉÉÌÉÌÉÏÌÏÓÓÓÓÓÓÏÏÌÌÌÉÌÌÌÌÉÌÏÌÌÌÉÉÌÌÉÅÌÅÅÉÉÉÂÅÌÉÌÌÌÉÅÂÅÅÅÅÂÂÅÅÅÅÅÅÌÌÌÌÉÉÅž¸¸´±ªª§  œœœ™™™»Â¾Â¾Â¾ÅÅÅÅÅÂÅÂřÉÉÌÌ̾¾»¸»±¸¸¸´±ª§§§£§££§ª­±­´´¸»ÌÌÉ»±­ª­­­­ª­­±±´´´±»¸¾¾¸¸¸´¸´±´´¸¸±±±ªª§§£§ £œœ™™––––’‹ˆˆˆz~zzwtpmpptpmtiiticm\wmtpwp~wwpti~ttGpmmw~~w…–™™™œœœ™™™™™™–––––™™–––’‹‹‹ˆ………ˆ‹’‹…zzwwzwtzzww~t‹…ˆˆ…ˆ‹ˆ‹…ˆˆˆˆ………~~~zzz~…ˆ‹’–’––––’’………~itmcX_UNUR\UXUXUUUUXUUU\\XXX\_c\_X\UXXRURKRKNNKKKGKGGKGGKKRURDDDGDRRNNKKGGDDDGKNNNNGDA==:66600,0))%03A6,00)"%)),,,,330:=63::66666666666666666666666333333333333G0000000000636ADGKNNNNRUUXX\\_fficfiicifiiimppmpmmmmfffiffc__\_XXRUURRNNURRUUUUUNGDDAA=::=:::ADDNRU\_fmttwˆ‹‹‹ˆˆˆˆ‹‹‹’’’iifccccccc____\\\\XXUU\ffimpmttwz~~~~~~~z~~~~~z~~w~zzwtwwtttpmmffffccffffmmppmpmmmiifffiffiiftt‹ÅÉÌÌÌÉÌÉÂÅž¾¾¾»¾¾¾¾ÂÅÅÅÉÂÅÅÅÉÉÌÌÏÌÌÌÌÉÂÉÅÂÉÉÉÉÉÌÌÉÌÉÌÌÌÌÉÏÌÏÌÓÓÖÖÓÖÓÏÏÏÏÌÉÌÌÉÉÌÌÏÌÌÌÉÉÌÏÌÉÉÂÉÅÅÂÂÉÉÉÌÌÉÉÅÅÂÅÅÅÅÅÅÅÅÅÉÅÏÏÏÌÉÌÅÅž¸´±±§ª£œ œœ™–œœ»Â¾¾¾ÂÂÅÂÂÅÅÅÂÂÂÂÂÅÉÉÅÉÉÉ»¾»»´»±´¸¸´±­ªª£§§£§§ª­±±´¸¾ÏÌÌÉž»´±­ª±­­­ª­­­´´±±¸»¾¾¸»¸¸¸´´´´´´±´­­ª§§§§££™œ™œ–™™––’‹‹ˆ‹……~~zwppptptmptimpifp\wmptwt~wzpt~zwGtppw~~w~……–œœœ™œœ™™–™™œ–™™™™œœ™™–‹‹…………‹’ˆ…~…z~zwzztzzttzpˆˆˆˆ…ˆ‹ˆˆˆˆˆ‹…ˆˆ……~~~~…ˆ‹‹’–––’–’…~iwpmXcUNUU\XXXXURURUUUX_\\UU\__\\\_X\XUUUNNNNKKKGGKGKNKKNNNRUDDDGDRRNNKKGGGDDDNRRRNDDA==:66600,0,))36D:033,")")),,,003,:::666:6666666666666666666666333333333333f33:::06300:6:DGKKKKNKRUXUX\\_fiifififiiimimppmppmiiffiicfc__\\XXRURNNKKRNNRRUXURDGA===:===6=AGDKRU\_iptwz…ˆ‹‹‹ˆˆ‹–’’iff__cffccfffcffc_\XUU_cimppptpwwzz~~~~z~~~~z~~z~~~~~~~zzzzz~zwttwwttpmpiicffcffcfifmmppppppifififiiiitw……ÉÌÌÌÉÌÉÉÅž¾¾Â¾ÂÂÅÉÉÉÅÉÉÉÉÅÏÉÏÌÉÌÌÉžÂÅÅÅÅÅÌÉÉÌÌÏÌÏÏÌÏÏÌÏÓÖÖÖÖÖÖÏÏÏÏÏÌÌÌÌÌÌÌÌÉÉÌÉÉÌÌÌÌɾÉÅÉÅÂÅÉÉÉÌÅÅÅÉÅÉÅÅÅÂÅÉÅÅÌÉÏÏÌÌÉÌÅÅž»´´±§ª§œ£œ™œ™ œ¾ÂÂÂÂÅÂÅÅÂÂÂÂÂÅÂÂÂÉÉÅÅÉÂÅ»»»¸´¸´´¸¸´´±­ª££ª§§§­ª±±´¸ÏÓÌÉÅ»¸±±±­­­­­­±­±´´´±»¸¾¾»»»»¸¸¸´±±´±±­­ª§§ª£££™™œœ™œ™™–’‹ˆ‹ˆˆ…~zztppptwmmpiitmfpcwmptz~tt…~zGwttw~~z~……™œ™œœ ™–œ–œ–œ–™–œœœ ™œ–’‹‹…………ˆ’‹~…~~t~~p~zptwmˆˆ…ˆˆˆ‹ˆˆˆˆ‹‹ˆˆ……………~~~……‹‹‹’’–––’’’‹…~~fzmp_fUNUR_\X\XXRXRRUX\_\_XXX_\XX\_X\XUXXRKNKNKGGKKGKKKGRKKNRGGDKGRNNNKKGGDDADRUNNKDGA==:66600,,0,,3:G:360"%%%,,),,,,0066:66666666666666666666666666333333333333m6D===6:630=6=ADGGKKKKRU\XX\__cfifiiiffiimmppppmmiiffcffcf__\X\UUNRNKGKGNNNRNRURNAGA===::==6=AGGKR\_impwwzˆˆ‹‹’‹‹‹’’’’’–ffccccffffmiiiiifc_XXX_ciipttttwtwwzz~zwzzzzwzwwzzz~zz~~wzw~zwtttttttpppmmfffcffcccciimpptptmfiiiffimmw~ˆˆ’ÉÌÌÌÉÉÉÉÂÅž¾¾¾Â»ÂÅÂÉÉÉÉÉÉÉÉÅÌÌÏÌÉÉÉž¾¾ÂÂÂÉÉÌÉÉÌÏÏÏÏÏÏÓÓÏÓÓÖÚÚÓÓÓÓÏÏÓÏÌÉÌÌÌÌÌÌÌÌÌÉÌÌÌÌÉÉÂÅÉÉÅÂÂÉÉÉÉÉÅÂÅÅÉÉÉÅÅÉÌÉÉÉÌÌÏÏÌÉÌÉÅž»´¸­§§£   œœ™ ÂÂÅÂÂÂÅÂÅž¾ÂÂÂÂÅÅÅÂÅž»¸»¸´¸´±´´´´­­­§£ª§§§ª­´´´»ÓÏÉž¸´±­±­­­­±±±±´´´´±¸¸»¾¾»¸»´¸¸´´±´´±­­ªª§ª££ ™œœœ™™–––’’ˆ‹ˆ‹‹ˆ…~~tttppwtppmmtpitfwppt~…’t‹……~zwwwwz~~…™™™œ™ œ’œ™™™™–––œœ™ ™œ–’‹…ˆˆ~………pz~tzzmpwm…ˆˆ……ˆ‹ˆˆˆ‹‹‹…ˆ…………~…ˆˆ‹‹’–™–’’ˆ‹……~zf~pmciURUXc_XfX\U\UUX\_c\\\\\\\UXX_\_\XUUUKKKKGKKGGGKKGKNGGKRKKGKDRNNNKKGGDDDAURRKGDDA==:666000,,,)0"D63,")%%))),))),066:33:66666666666666666666666333333333:AA™6GAAA:=633A:AADGGKGKNUXX\X__cfiffiimiiffmmppppmifffccffcf___\XRRNNKKKGGGKNNNRUUNGKA=A====A=AAGKNR_cmptzz~‹‹‹‹’’’’’–’–’ccfffffiffpmmmmmicc\\\cffmmpppttpttzzzwtwwzzttttwwwzww~zztwtzwttttttttpptmmiicccc_c_ccciptwtwpmmiiffimpw‹‹–ÉÌÌÌÌÉÉÉžž¾¾¾Â»ÂÅÂÉÅÅÅÉÉÉÌÉÉÉÌÉÌÉɾ¾»¾¾ÂÅÅÌÌÌÌÏÏÏÓÓÓÓÓÏÓÖÖÚÚÓÓÏÏÏÏÓÏÌÅÌÉÉÌÌÌÌÌÉÉÌÌÌÌÉÉÅÅÅžÅÅÉÌÉÉÅÅÂÅÅÅÅÂÅÉÅÅÉÌÌÌÌÌÌÌÉÅž¾¸¸­ªª £ œœœ ªÅžÅ¾¾¾»Â¾ÂÉÅÂÅÅž¾»¸¸´´´´­´±´´±­±ª§­ªª£­±¸´´»ÏÌž¾¾»´±­­±±­±±´±´´¸±¸´¸¸»¾»»¸¸¸¸´´´´±±±­ªªª§§§£œœ   ™™™–’‹‹‹ˆˆ~wwtptzwtppmtpmtizppw~’’™–‹ˆˆ…zzwwwzz~~ˆ’™––œ–œœ–™œ™œ™’’™™œœ œœ™‹‹ˆˆ‹~’‹ˆ…ˆ…~iz~wzzmtwm…………ˆˆ‹ˆˆˆ‹ˆˆ……………~~……‹ˆ‹‹––––’ˆ‹……zwzzpiwt\UU\fcXp__U\UX\_cf_\\\\X\X\X\\c_\RRRKKNKGNGGKKGGGNKGGKNKKKGGRNNKKKGGDDA=RRNKGGDA==:666000,,)),6A:0,")%"%)))%)),,63633666666666666666666666666333333336KDDœ3DAAA=A:66A=A=ADDKGKNUXX\\_ccfiffiimffffmmppmmimifffccc_c___XXURNNNKKGGGKKKNRRURKKAAAA=ADDAADGKUcffmpwz~…––’’’–––’’–’cffifiiiiitpppppiff___fffimpmpptpppwwwwtttwwpmmptttwttzwwttpwtpptttttwppppmiffccc_c_cccitpwtztpmmmccmpmz…‹’’ÌÌÌÌÏÌÉÉž¾¾Â¾¾ÂÅÅÉÅÉÅÉÉÉÉÉÉÉÉÉÉÉÉž»»»¾¾ÂÂÉÌÏÌÌÏÏÓÖÖÓÓÓÖÖÖÚÚÓÖÓÏÏÏÏÏÌÉÏÉÌÏÏÏÏÌÌÉÉÌÉÉÉÅÉÉÅÉÅÅÂÅÅÉÉÉÅÅÅÂÅÅÅÉÅÅÅÂÂÅÉÉÏÌÏÌÌÌž»¸±­­££ œœ£ª­ÅŞž¾»»»Â¾ÂÅÅÅÂÂÅÅ»¾»¸´¸±´´±´±´±±±±­ª±­­§­±¸´¸»ÌÉž»»¸±±±±±´±±´±±´´»´¸¸»»»¾»¾»»¸¸¸´´±±­±­ªªª££££  œ œœ™™–’’‹’’ˆˆˆ……w~wwpzztttitmiwizwt~–––œ–’‹ˆ…~zzzw~~~~…–™––™’™™™–™™œ™––™–œœœ œ™’‹‹ˆ‹’‹‹ˆˆˆwzizzzwwppwp~…‹…ˆˆˆ…‹……~………~~…ˆ‹ˆ‹’’––™G0%ˆ…zw~zmiwwwU\_ifXwi_U\X\\c_fc_XX_\\\\\\_c_\NNUKKKKGRKKKKKKGKGGGNKGGKKGRNNKKGGGDDA=NNKKGDDA==:666000,,,,)366,),%%"%%%,,)3,303336666666666666666666666663333333:DNGG 3AA====:33DAA=ADDGDKNU\X\__cfffffffiififimmpiiiiffffcc_c____X\URNNNKKKGKGGKNNNRRNNDGDDADGGGDGNUffiiptz~…ˆ’––’’–––––––’ffffiiimmmtptttppiicccfifimpmmttpmmttttpppttpmmppptppptppppmtpmptttptwtppmpificcc__\cccitpzzzwtimmffimpw…‹–ÉÉÏÏÌÏÌÉÉž¾¾¾ÂÂÂÅÅÉÉÉÅÉÅÉÉÉÉÅÌÉÉÅÅ»»»»»»ÂÅÌÏÏÌÏÏÓÖÖÖÓÓÖÖÖÚÚÖÓÓÓÏÏÏÌÌÌÏÌÏÏÏÓÏÏÌÌÅÌÅÉÅÅÅÅÂÅÉÅÅÅÅÅÅÌÉÅž‹ÉÉÉÌÌÌÌÉÉÅž¾¸´­­§£ œ™§­¾ÅÅž¾¾»»»¸»¾¾ÂÅÅÅÂÂÅž»¸´´´±±±±±±±±±±´­­±­­ª­´¸¸¸»Éž´¸¸±±´´´¸´´´´´¸´¸´»¸»»¾¾»»¸¸¸´´´´±±­­ªªªª§   £ œ  œ™™––‹ˆˆ………zzt~zzppiwpizizzt™™™™–’’‹ˆ…~~zw~z~’––––’™–––™œœ™––™™œœœ œœ–‹‹…‹‹…’ˆˆˆˆ…wziwwztwtpwpz~~~…ˆˆ…ˆ…ˆˆ…~~~…ˆ‹‹’––™™D0’%‹…zz~zmizzzi__mi\zpc\\\__fci_\\\c_\\\\\___XRNUNNKKKRNKKKKKGGGGGKDDDGGDRNNKKGGGGDA=KNKKGGDA==:666000,,,,,0,),)0)"%")%00)::603333333336666666666666666663333336=GKGD 3===:=3633DAA=ADDGGGRX\\__ccccfffcfififfiiimfffifiifffcc\c\_\\RRNKRKKKKGGGGNNNNNKKGKKGDGKKKGKU_iimmpwz~~ˆ’’–––’––’’’––’fffiimimppttwwtttmpfffiiimmmmptppmipmppmmmmimiimtmpmmmmimmmmmmptttttttwttppmimfccc__cccftpz~~zwmpmiimipz…–­ÌÌÏÏÏÏÌÌÉÅž¾Â¾Â¾¾ÂÂÅÅÅÉÌÉÅÉÅÌÅÉÅÉÉÅÅž¾»¾¸»»¾ÅÏÏÏÌÏÓÓÓÖÖÖÖÖÖÖÖÖÖÖÖÓÏÏÏÌÌÌÌÏÓÏÏÖÏÌÌÉÂÌÅÉÂÅÂÅÂÂÅÅÅÅÅÅÅɞ¾¾¾¾ÂÅÅÉÉÌÉÌÅÅÅž¾¸±±­ª§  ™¸»ÂÅÅÅ»»»¸¸»»»»¾ÂÅÉÅ»¸´´´±´±­±­±±±±´´±±´±­­±¸¸»¸¾É¸¸¸´´´¸¸»¸¸¸´´¸¸»¸¸¸¾¸¾»»»¸´¸´´¸´±±±­­ªª§§£    œœ œ™™™’’’’‹ˆˆ…ˆˆ……~~~~~ctmztmzmz~t’™™–™’’’ˆ…~~zz~z~’––™––™––™œ™œ––™™œ™ œœœ™’ˆ‹ˆˆ’’‹…ˆˆ…~zitwwpwppwpwzzzˆ…ˆ…ˆ……~…~~…ˆˆ’’–™–™™–0‹‹…wwzzmm~z~mc\mi_~ticc_cifci_c__c____\\_\\\RUURNNNNNNNNKKKKGGGGGDGGGDARNNKKGGGDDA=ANKKGDDD==:6660000,,00))%,",,)""%%)3336==:003300000033333666666666666633333:DDGGDAi3=::6:3333A====DDDGKRU\__cc_c_cccccffiffffficfciiiiffffc_c\\XXUNNNRKNKKKGGKNKNKKKKKNNKGKKNNKNXcimpptwz~ˆ‹––––’––’’’’––ffiimpmppptttwwwwptmiiiiimmpppppmmiiiiifmifiiffipimicfifimiimiptttttttwtwttmmmicc___cccfptzz~tppmifimt~…ª­ÉÌÏÏÏÏÌÉÉÅɾ¾¾Â¾Â¾»ÂÂÂÅÅÅÌÌÉÉÉÉÉÉÅÅÉÉÅÉÅž»¸»»»¸ÂÂÏÏÌÏÏÓÓÓÖÚÚÚÖÚÚÖÖÖÖÓÏÏÏÏÏÏÏÏÓÓÏÏÓÏÌÏÉÅÉÉɾÂÂÅÅÅÅÅÂÅÅÂÅÉž¾¾»¾»»¾¾ÂÂÅÅÂÉÅÉÅÅž¾¸±±­ª£  ™»¾ÂÅÅÅž»»»¸¸¸»¸¾»ÂÅÉÅž¾¸´±±±­±­ª­±±±±±´±±±´±±±´¸¸»»ÂÅÅž¾¸´¸¸´¸»»¸»´¸´»´»»»»»»¾»»»¸´¸´´¸´´´±­­­ª§§££œœœ œ œœ™–’’’ˆ……ˆˆˆ……\wwztw~p’…t–––––’’‹ˆ…~~~~~~…~’™™™–™™–™œ™œ™™–œœœ™ œ œ™–’’ˆ’’…–‹ˆ‹ˆ…~ftwwpwptzpzzz~ˆˆ…ˆ………~~~~~~…ˆ‹–––™™™™™,……wwwzpmzzzpi_imfwmficfmffmcfcc_c_c__\_\X\XXXUURRRNRNNNNKKGGGGDDDDDAARNNKKGGGGAA=ANKKGDDA==:66600000,3,,)))%",),%%)),666:A==0033,,,,,,0000033333666666663333=KKGGGA=f3=66:63633=A=:=AGDGKRU\_\__\c_____ciffffcfffcc_ffiffcccc__X\XXUNRRRNNKKNKKKNNKGGGKKNRNKKKNRNR\fptppwwz…ˆˆ‹’‹––™––’’–’’–™ifmmpmmppptptzwzztwpimmimmppppppmiffffffifcfcccfmfifcfccfiiiimmpttwtttwwwwtmpmicc___ccfimww~~ztptififpt~­±ÅÉÌÌÏÌÌÉÉÅž¾¾Â¾¾¾ÂÂÅÅÉÉÌÉÉÌÉÅÅÅÅÉÉÉÂÉž¾¾¸¸¸¸¸»ÂÅÌÌÏÓÏÓÓÏÖÚÚÚÚÚÖÖÚÖÖÓÓÏÏÌÏÌÓÓÖÓÏÏÓÏÏÏÌÉÌÉÅÂÅÂÂÂÂÅÅÂÂÂÅÅÅž»¾»¸¸»Â¾Â¾ÅÅÂÅÅÅÅž¾¾»±­±ª§£ œ¾ÂÅÅž»»»¸¸¸¸¸¸¾¸ÂÉÉÉž¾´´­­­­ª­ªªª­­­­­±±­´´´´´´»»¾¾ÅÅÅÉ»¸´»¸»»»¸¸¸¸¸»¸¸¾¾¾»¾»¸¸»´´¸¸¸¸±´´´­­­§§§££œ    œœ™™––’’’’’’’‹ˆ……ˆ………………ˆ…c‹zz~t–––™–’’’’’’‹‹~~z~~ˆ…’’™œ™™™™–œœœ™™™™œœœœœœ£ ™––’’–––…–…ˆ………itwtttttzt~zz~…ˆ…………~~~z~~~~~~…ˆˆ––™–™œœ™,’……tztzppwzwmtzipmzpttpimiimfif_cc____\\\\X\\XXXUURRURRNNKKKGGGDDDAA==RNNKKGGGDAA=ANNKGGDA===6660000000,,,))%)))0)%,,0:66=A=:3033)))))),,,,000000333336663333ANNKDD=:G3::3663633=AA=AAGGGNRUX\X\\\_\\\\\fffffc_cc_c__cfiffccfcc_\\XXURRRRRNKNRNNNRKKGDGKKRRNNKGKNKRXftwtpwwz~ˆˆ‹‹’–––––’–’’’–ifiippmpppttwzz~zwztwmmmpppttppmpiffcfccffcfc_fcffcccccciiiimmmtttwtwtzzzzzppiiccc_\_cfiizz~zttwmmiipw~~±´ÂÅÌÌÏÌÉÉÉɾ¾¾ÂÂÅÉÌÌÌÉÌÉÉÂÉÉÅÉÅɾž¾»¸´¸¸¸¸ÂÅÉÌÏÏÏÓÏÏÖÖÖÚÚÚÖÚÚÖÓÖÓÏÏÌÏÏÏÓÖÖÓÓÓÌÓÏÌÉÉÌÉžžÅÂÂÂÂÂÅÅÅÅ»¾¸¾»¸´»¾¾ÂžÅÅÅÅÅž¾»»´±´ª£ œœ»¾Éž¾»»¸¸¸¸¸¸»»»ÂÉÅÅž»´­±­­­ªª£ª§ª±ª­ª±­±´´¸´¸´»¾¾ÂÅÅÂÅÅÅ»»¸»»»»»¸»¸¸¸»¸¸¾¾¾¾»¾»¸¸´´¸¸¸»´¸¸¸±±­ª§§££      œ–––’’–’’–c’‹ˆ……………ˆˆ…‹…’wz’’’™™™’’’‹‹ˆ…~~z~~…ˆ––™œ™–œ™–™œœ™™™œœ™ œ™œ œ™™™––™™™™–’ˆ…ˆitwptptpzt~z~~…………ˆ~~~~z~~~z~…ˆˆ–’™–™™™0)’……tztzptwwwiw~mt…~wwwtmimmpiiccccccc_\\_X\__\\\XXUUURRRNNKKKGGDDAAA==RNNKKGGDAA==ANRNKKDA=A:6660000003,,,))),)),,)003636:==63033)))))),,,,,00000000003333363DRRNGD==K3:66:63336DAA=ADDKDKUUUXUUXX\XXXXXccfcccc___c__cficffccc_\\XXXUUURUNNNNRRRNNKNGGDGKRNNKKGGKGRUcwzwpwwz~~…ˆ‹‹’’––––’––’–’fimmppppptttz~~~zwzwzppppttwwtppmmfc_fc_ccccc\cc_fcc_ccciifimippwwwtww~z~~~wwpmcfcc__ccfmwz~zwwtppmipt…±±¾ÂÉÌÌÌÉÉÉÉÂÂÂÂÅÂÂÂÂÅÂÅÉÏÏÌÉÏÌÉÉÉÉÉÉÅÅž¾¾¸¸¸´´´»¾ÅÉÌÌÏÏÏÓÓÓÓÖÚÚÚÖÖÚÖÓÖÓÌÏÏÏÏÏÓÖÓÖÓÖÏÓÏÌÌÉÌÉž¾Â¾¾Å¾¾»¸»»»¸»¾¾ÂÂÂÅÂÅÅÅÅÅž¾»¾¸´´­ œ™™ ÂÅÉž»»¸¸¸¸´´¸¸»¾¾ÅÉÂÅ»»´­±­­ª§§£§£§­ªª­­±´´´´±¸´»ÂÂÅÅÅÅÅž¾»¾¾¸¸»¸»¸¸´»»»¾Â¾Â»¾»»¸´¸¸»¸¸´¸¸¸´±­ªª£££   œœ œ™–™–’’’’’’cˆ‹~…ˆ……ˆ‹’–’w~’’’––™––’‹‹’‹ˆ…~~~~…z™™œ™œ™œ™–œœ™––œœœ– ™™œœ™™™™™™œœœœ–’ˆˆ…iwwmtppmwtzz~…~……~~zz~zz~ˆˆˆ’’™––™™,)’0’…tztwtwzwwmz~m~…ˆzz~wwfpmpiffcfccc__\__X\c_\_\X\UXURRNNNKKKKGDDDAA==RNNKKGGDAA===NNKGKDA==:666000003000,,,,0,%00,0063366::30033%)%%%),,,,,,,,000003300333:3GUUNNAA=N=:3:::6363GADADGGKGNRRRRRRUUXXUUUU__c_c__\_\___ffffcc__c\\\\\XUXUUURRNRURRRNNNGGDKKNKNKKGDKGRUmz~ztzz~~~…‹‹’’––™––––––imimppttttttw~~~zz~zzttttwwwzwtpmmicccfcc_cc_\c_\fc__cfcfiimpiptwtwwtz~~…zzzmffccccc_imzz~z~zztptpptz§ª­±»¾ÅÉÌÉÉÉÉÅÅÅÂÂÅÂÅÂÂÅÅÅÉÌÏÏÌÏÌÌÌÉÉÌÉž¾¾»»¸¸´´´»¾ÂÉÉÌÌÌÏÏÓÓÖÚÖÚÖÚÚÝÖÖÚÓÏÓÓÌÌÓÖÖÏÖÖÖÓÖÏÌÉÉÉÅž¾Âž¾¾Å¾¾¾»¸»¸»¾¾ÂÂÅÂÂÅÅÅÅÅÅž»¾¸¸´­œ™––™–ÅÅž»¸¸¸¸´¸´´´¸»»¾ÂŸ¸±±±­­§££§£ £­§§ª±´´¸´´´´¸¾ÂÅÉÉÉɞ¾¾¸¸»»¾»¸±¾»¾¾Å¸¾»»¸¸»»¸»¸¸»»´±±­ª§£££   œ™œ™œ–œ–’–’’’’cˆˆ~~………ˆˆ’–’™’z~™––™–œ™™’’‹‹ˆˆˆ~~…z…’™™œœœ™ ™™œ™–’™™œ™– œ™™™–™™™œœœ œœ™–…ˆ~…~mwzmtpmmzt~z~…~…~zzwwz~z~ˆˆˆ’–––™™0A’0…ˆw~wwtwzzz~~ˆ…ˆ~~wztmptmffffcccc__c\X\f_\c\XXXUURRRNNKKKKGGDDAA==RNNKKGGDAA==AKNGKKDD=::666000003000,,003,)00,,,360336630033%,%%%)))))),,,,,00000333336RDURRRN==NA66:6:33:6KDDDGKKNKNNNRRNRRRUUURRUX\_\_\\X\__c_ffcc__\__\XX\XXUXUXXUURURRRRRRNKGGKKKNNKGGDGGRUp~~wz~~~…ˆ‹‹‹–’–––™™–’–’‹mmmptttttwwwz~~~z~zzwtwwzzz~zwpppicfcccc_c__\__\c___cfcfiimpmptwtzzzz~……ˆˆ~…pimffccffmmzz~z~~~~wwwtz£ª­±­¸»ÂÅÉÌÌÉÉÉÅÅÂÂÅÅÅÅÅÅÉÉÌÏÌÏÏÏÏÌÏÌÌÌɾ¾¾»»¸¸´´¸´»¾ÅÅÅÉÉÌÏÏÓÓÓÖÚÚÚÝÝàÚÚÚÖÓÖÖÏÏÏÖÖÓÖÓÖÓÓÓÌÌÌÅÅÅÅÂ޾¾»¾»¾¸»»¾¾ÂÂÂÂÅÅÅÅÅÉÅ»¾´¸±ª™œ–™™™ÅÅ»»¸¸¸¸´¸´±±´¸¸¾¾Â¸´´±±­­­§£ § œ ª£§­­¸¸´´´¸´¸¾ÅÉÌÉÉÉÅžž»»»»»»¸´¾¾Âž»Â»¸»¸¸¸»¸»¸¸¸¸´±­ª§£   œœ™™™–™™™™’™––’–’‹‹zz…………ˆ‹–™™œ–œzœ™™z™œ™œ–’‹’‹ˆˆ…~zz…–™™œ œœ ™œ™™’’––œ–– œœ™’’–™™œ™œœ ™––‹…~zmtwmtpmmzt~~~~~~zwwwwwzz~ˆˆˆ‹‹’–™™–0’,…w~zztz~zz…‹‹………~zwpttmifffccc_____X_cc_c_XXXUUURRRNNKKGGDDAAA::NNNKKGGDAA==AKKKKKDDA=:6663330003000,0000,000,,033006630033)))%%)))))),,,,,,,000000036NDXAAUR=ARA3366663::GGGDGKKNGKGKNNNNRNRRRNNRXX\X\\XX\\\__cc____X\\\XX\UXUUXX\XXUXUURRNRRKKKNKNNNKKKKGGUUt~~zz~~~ˆ‹‹‹––™–™™––’’mmpppttwwzzwzz~~z~zzzwzw~z~~~ztppiifc_fc_c\\X__\____ffmmmmmtppwtwzz~~~…‹‹–ˆtpmifiiiptzzzwz~z…~z §ª­±­´¸¾ÉÉÉÉÉÅÉÂÉÂÅÅÅÅÉÅÉÉÌÌÌÏÏÓÓÏÏÏÏÌÌÉ»»»»»¸´¸¸´¸¸»ÂÅÂÌÌÌÏÏÓÓÓÖÚÚÚÝÝÝÚÝÝÚÖÖÖÓÓÓÖÓÓÖÏÖÖÓÓÏÉÌÉÉÅÉÂÅÂÂÅÂÂÂÂÅÅž¾¾»¾¸»»»¾¾¾ÂÂÂÅÉÅÉÅÅÉÅž»»´´´§œ ’™™–ž»¾¸¸¸¸´´±±­´¸´»¾»¾±­±±­­­ª§  £œœ §£§ªª¸´¸¸´¸¸»ÂÅÉÉÉÉÉÅÅÅžɻ»¾»¸»»»¸¾¾ÂÅÅž»´¸¸»»»¸¸´¸´´´±ª§££    œ™œ–––™œœ–––™–’’‹‹~z…………‹™œœ ™ ~ œœw~ œ™™’’‹’’‹ˆˆ~~~~~…’™–™œœœœœ™–™’––’™––œœœ™’–––™œ–œœ ™’’‹~~tittmwpmmzp~~~~~~~~~z~wwtwwwz~ˆˆ…‹‹––™™–3,ˆtzztwzz~………‹……‹ˆˆ…ˆzztttpmfficcc___c_\cffc_\\XXXUURRNNKKGGGDDAA=::NNKKKGGDAA===KKGGGGDDA=66633333300030033,00000,,00036603033))%)%))))))))),,,,,,,0000663AD=AXUK=U=:3633:36:GGDDGKKNGNGGNKKNNNRRRNNNUU\\XXUXX\\\\____\\\XXXXXXXXXUXX\XUUUUUURRURNKKKNNNKKKNNKKUXw~~~~~~~…ˆ‹’–™™™™™’’‹‹pppttwwzz~zzz~~~~~~~zzzz~~~~~~ttppmtfiif_c\\X\_\___cfipppmptptzzz~~~ˆ–™œ’™£ˆzwpmmmmmpwzzzzz~ˆ~  ~£§§­­±´´¾ÅÉÉÅÉÅÉÅÉÅÅÅÅÅÉÅÉÌÌÌÌÏÏÓÓÓÓÓÏÌÌÉž»»¸¸»¸´´´´´¸¾¾ÉÅÉÌÌÏÏÓÖÖÖÚÖÖÝÝàÝÝÝÚÖÓÖÖÖÓÖÓÖÖÓÖÖÏÏÓÉÏÌÉÅÅÅÅÅÅÅÂÅÂÂÅž¾¾»¾¾¾¾»ÂÂÅÂÅÉÅÅÅÉÉɾ¾»»¸´´£ œ––––ÅÅ»»¾»»¸¸¸±±±­±´±¸»¸»±­­­­ª­ª§œ £œ™œ£ §ª­¸´¸»¸»¸¾ÅÂÅÅÅÅÉÉÉÅÂÅž¾¾»»»¸¸»ÂÂÅÂÅÅ»»´´»»¸¸¸¸¸¸¸¸´­ª§££   œ ™™™™’œ œ™–––––ˆˆ~……‹™™  œœ   z~ œ™––‹‹’‹ˆ…z~~z…ˆ™’–œ™œœœœ–™™–––––™œœœ’–™–™™–™™œ™’’‹~~~tmttpwpmmzp~~~~~z~~zwzwwtwtwwzˆˆˆ‹‹’––™––,‹…ˆt~z~www~…ˆˆ‹ˆˆ‹‹‹ˆ‹…~~wwtmifficfc__cfcX_fcc_\\XXUURRNNKKGGDGDAADA::NNKKGGGDAA==AKGGGGGDDD:66633366633303303303000,,,0063600333,,,,,,,,,,,))),,,,,,,00006:063ADUXNA\:=6:33:636KDAAGKKKGKGGKKGKKNRNNNKNRUXXUURUU\\\X_\___\XX\UXX\X\XX\\\XXUUXUURRUUNNKNNRRNNNRRNRXpzz~~~…ˆ‹‹’’™œ™–™™’‹‹ˆtwwwwwz~~~~~~z~~~z~~~z~zw~~z~~wwttpwmmicc_\\X\\\_cfffmptpptttwz~z~……ˆœ £§££§™£zwttttmzz~~~~ˆˆ™œ££§§§ª­ª­±´¾ÅÉÉÅÌÉÉÅÉÅÅÅÂÅÅÉÉÌÌÌÉÌÏÏÏÓÏÏÌÏÌÉɾ¸»¸´»¸´´±¸´»»¾ÉÅÉÌÏÏÏÖÖÚÖÚÖÚÝààÝÝÝÚÖÓÖÓÓÓÖÓÖÓÖÓÓÏÓÏÉÏÌÉÅÉÉÉÉÉÉÅžÂÉž»¾¾¾¾Â¾Â¾ÂÂÅÅÅÅÅÉÅž»¸»´±± œ™’’’’Å»»¾»»»»¸±±±­´´­´¸±¸±­±­­ªª§§œ  œ–œ£ §ª±»¸¾¾¾¾»ÂÅÂÂÂÂÅÅÉÅÅÅÅž»»»»»¸»¾ÂÂÅž¾¸¸¸¸»»»»»»¸»¸´­§£££ œœœ ™™™™œ ™™™™’’–’‹‹ˆ~………ˆˆ…–œœ  œ  ~~£ œ™™‹…‹’‹‹ˆ…zz~w…ˆˆ™’™™œ  œœ™™’–’––’–™œ  –™™–––––™™––’‹…~~~pptptwpppzm…~~~z~z~zztwtttttttzˆˆˆˆ’’––™––’’‹‹……t~w~zzwˆˆ‹‹ˆˆ:‹‹‹ˆtttmifffcfcc__cc\_fc__\XXUURRNNNKKGGDDDDAAA::NNKKGGDDAA==AKGKDDDDGG=:66333:::66333636636333,003066603333000000,,000,,,00,,,,,,,0336003DGRXND_3A:=66:666GDDDDGGKGKGDGKKKKKRKRNKNRRUUUUURX\X\\_\___\XU\UX\\\X\\\\_\XXXXXRUUUURRNRNRRRRRUX\pttz~…ˆˆ‹’––œ™™––™‹‹‹ˆˆzzzzzz~~~~~~~~~~z~~~~~~z~zz~~zzwzzztppii_cXX\___fmimmtwttwwwzz……ˆˆ–££ªª§ªªªªªªzwˆ~ˆ’………‹™œ ££§ª§ª­ª±´´»ÅÉÉÉÉÌÉÉÅÅÉžÂÅÅÉÌÉÌÅÌÏÌÌÏÌÌÌÌÌÉÌɾ»¾¸¸¸¸´´±´¸¸»¾ÅÉÉÌÏÏÏÖÚÚÖÚÖÝÝÝàÝÝÚÖÖÓÓÖÓÓÓÓÓÓÓÓÓÏÓÏÉÌÌÉÉÌÉÌÉÉÌÉÉÅÂÅÉž»Âž¾ÂÂÅÅÉÅÉÅž¸´»´­­ ™–’’ž¾¾¾»¾»»¸´´±±±´­±¸´±­­­­­§ª££  £ ™œ££§ª±»»Â¾¾Â¾¾ÂÂÂÉÉÅÉÉÉɾ»»»»»»¸¾¾ÅÂÉÅž¾´»¸¸¸»¾»¸¸¸¸¸±ª£ ££ œœœ œ™œ™’  ™œœ––’–‹ˆˆˆˆm…‹œ £œœ££ ~§£ œœ‹‹’‹‹…zz~~wˆ~…‹™–œ–œ  œœ™™–’’––’™œœœ ™™™––––––––’‹…~~ptpppwppmzm…~~~~z~~~wztttttttwwz~ˆˆ‹‹’–’™™™–’…ˆwzw~zzw……‹‹‹‹‹‹6ˆ‹‹~ttwmiiffffcf_c___cf_\\XXUUURNNNKKGGGDDDAAA=::NNKKGGDDAAA=DGGGGDADGD==:6366=:=:336363::666300000036300333333333000000000000000030663306AGNUNGc3A=::6::6:GDDDDGGNGGGDKGGKGGNKNKGKRRRXRUXUX\XX\_____X\U\X\\\_\_\____\\\\XXXXUUURRURRURUX\_ftwwz~…ˆˆ‹ˆ™™™–––’™‹‹‹ˆˆ~~~~~~~~~~~~~~z~~zz~~~z~z~~z~~~zwtmmff\\\ccfipmpttzztw~z~……ˆ‹‹’ §§­­ª­­­­­­£§ ™œ  œ’™™™™œ   £ª§ªªª­­´´»ÂÉÉÉÉÌÉÉÉÅžÂÅÅÉÉÅÉÅÌÏÉÏÌÉÌÏÌÏÌÏ̾¾¸¸»´±´´¸¸»¾¾ÉÉÌÌÌÓÏÖÚÝÚÚÖÝàÝàÝÚÖÓÖÖÓÖÖÓÓÖÓÖÓÖÓÏÏÏÌÌÌÉÅÌÉÉÌÉÉÉÌÉÅÉÉÅž¾Âž¾ÂÅÅÉÅÉɾ»´¸±±ª£––’’‹’¾¾¾»»»»¸´´±´´±´¸¸­ªªª­­§ª£££ ££ §ª§ª±´¾¾ÅÅž¾Â»¾ÅÂÅÉÉÉÉÉɾ¾»»»¸»»»»¾ÂÅÅÂÅ»¾¸»¸¸»¸¾¾´¸»¸»±§§ §£    œœœœ––  ™œ™’’’‹‹……~~…ˆ‹mˆœ £  £ œ §£  œ‹…–ˆ…z~zw‹~ˆ––œ™™œœœœ™™™––’–œ œœ£œœ™––––’–™––‹…ˆ…~~wwpmtwtpmzm…~~z~~~zzztttttttzw~~ˆˆ‹‹’’––™œ™–’‹…ˆtzwzzz…ˆ‹‹‹6‹ˆ‹…zttwpiffffcci_fcc_fc_\\XXUURRNNNKKGGDDDDDAD=::NNKKGGDDAA=AGKGGDAAADAA=:63::==A:3666::==:3:63333033:333633666666333330333300033063::063:6D0RNKc3=::666=66GDDDDDGKDGDGKGGGKKNKKKKKRRUURUXU\_\\__cc_c\_X\X\\X____cccc____\\X\XXXUUXUXXXU\mtwwzz~z………ˆˆ‹‹’’™™–’’’–‹‹‹‹‹~~~~~z~~~z~zz~~~zzw~~z~zwwpmicccfimmtptww~~~…ˆˆˆ‹–£ªª±­­±±±±±±§ª£œ ££  œœœœ œ £ §§ªª­±±´¸»ÂÅÉÉÌÉÉÌÉÉÅžÂÂÂÅÅÅÅÅÉÌÉÏÌÌÌÏÏÏÏÏÏÅ»¸»´´´´¸»»¾ÂÌÉÌÌÌÏÏÖÚÚÖÚÚÝÝÝàÝÚÚÓÖÓÓÓÖÓÓÖÓÓÏÓÓÏÌÌÌÌÌÉÉÉÅÉÉÌÌÉÌÉÉÅÉÉÅÅÂÂÂÂÂÂÂÅÅÅÂÂÂÂÉÂÅÅÌÅ»¸¸­­§£––’’‹’ž¾¾¾¾¾¸»¸´´´¸´¸¸»±ª§ª­ª§§§§£ §§ªª­ª­´¸¾ÂÉÉž¾¾¾¾ÂÅÂÉÉÅÌÉÉÅ»¾»¸¸»»»»¾ÂÂÅÅ»¾»»¸¸¾»¾»¸¸»»»´ªª£££    ™œœœ™™œœ™ –‹’‹ˆ…~zˆ…mˆ™œ œ… ££ £§  £œ™…‹–‹’‹…~~…ww~…’–™™™™  œœ™™–’––’™ œ £ œ™™™™™‹––™––…‹t~zpmtwwpp~m~~~~~z~wztwttttwzw~~ˆ‹–’’™™œœ™™’‹‹……wzz~~z…‹6‹…ˆwttwpiiiffccfcccc_fc\XXUUURRRNNKKKGGDDAAD=A=::NNKKGGDDAA=DDGGDDD==ADDA=:3:=A=A=6:::==:=:6::66663336663:66::::::6666633333333333:6==333=3D3NKGc3:==:66::6GDDADGGKGGDGKKGGGKKKKKNNRUUXUXXX__\_ccffcc_c\_X__\_ccccccfc__c__\_\\\XX\\\_\c_zwzww~~z~~……ˆˆ‹’™™–’’‹‹ˆ‹‹z~z~~~z~zz~~…~~z~~~~…~zztzmffimmpmwtwzw~ˆˆˆˆ‹‹‹’–™§§­­ª­­­­´­­ª­§§£§§££    £ £££§§§ª­±´¸»¾ÅÅÉÉÉÌÌÌÅɾ¾¾ÂÂÅÅÂÅÉÌÌÏÏÌÌÏÏÏÏÓÓÉÅÅ»¸¸´´¸¸¾¾¾ÂÅÌÉÌÌÏÓÓÖÚÚÖÚÝÝÝÝàÚÚÖÓÓÓÓÓÓÓÓÓÓÓÏÓÏÓÌÏÏÌÌÌÉÌÅÉÉÉÌÌÌÉÉÉÉÉÅÉÂÅÂÅÂÂÂÂÅž¾ÂÂÅÅÅÅÉÅÂÅž»´­­ª£™’’‹–¾»»¾¸¸´´¸¸»»»±§£ªªª§ª§§££ªª­­±­±¸»ÂÅÅÅ»¾¾ÂÂÂÂÂÅÉÅÌÉÉÅ»»¸¸»»»»¸¾Â¾Â¾¾¾¸¸»»¸»¸¸»»¾¸´­ª£ £££  œœœ™œ–  œ ˆ’’‹ˆˆˆ~ˆˆ‹m‹…™œœ…œ §££££££ œ…–‹–’‹ˆz…ww~……’’––™™œœ œœ™–––’™ œ  £ œœ™œ™‹–™™––ˆ‹t……~~~wzzmt~m…~~~~~~~zwtzttttwzw~ˆ’–––™™œ™œ™–……wzz~w~…ˆ’’’6ˆ…6ˆwtwtmmmipiffcc_fc\c_\XXUUURRNNKKKKGGDDAAA===::NNKKGGDDAAAAGGGDDD==:AA=A=6=ADAAA:=:=:A:=::=::::666636:3:66:::::::::::666663333366:A=36::6D6GKD_33AA=6:666DAAAGGKKKGGGKKKKKKGGNNRRUXXXXXXX____ffific_f_c\___ccfccccccc_cc___\_\\\\__ccpw~z~zz~z~z~~~…ˆˆ‹‹’–™––‹’’ˆ‹‹…~~~~z~~~~~~z~z~~……~~~ˆ…~~t~tiimpptmtwzzz~……‹‹‹‹’’–™œ§§­ªªªªª£±­ªª­§ª§§£ £     £  ££§§ª­±´¸¾¾ÅÅÅÉÉÉÉÌÉÅ»¾¾¾ÂÅÂÂÅÉÌÌÏÌÌÌÏÏÏÏÏÓÌÉɾ»»´¸»¸ÂÂÂÅÉÌÉÌÌÓÖÖÖÖÚÖÝÝÝÝÝÝÖÖÓÓÏÓÏÏÏÏÓÓÓÓÏÏÏÓÏÏÌÌÌÉÉÉÉÉÌÌÌÌÉÉÌÉÌÉÉÉÅÅÅžÂÅÅ»¾¾ÅÉÅÉÉÉÅÉ»´±­ª§™’‹‹–¾žž¾»»¸¸»»¾¾¸­§£§ª§§§ª£§§­­±­±±´»¾Å¾¾¾¾¾ÂÂÂÂÂÉÅÅÉÉÅž»¸¸»»¾¾»¾Â»¾Â¾¾¾¾Â»»»»¸¸»´¸¾¾»¸¸­§£££ ££ œ œ™œœ  œœ‹’’’ˆ………~ˆ…ˆp‹‹–™™…œ£   §§£ œ™–’™‹………‹ˆ‹~…’’’–™–œœœ™ œ™’–––™ œ   œœœ™ ™–™™™™‹‹tˆˆ…~z~mt~m……z~~~~~~wtwtttwwzw~……ˆ–™™™™™œ™œ™–’’ˆˆt~z…w~…’–m6:…3ˆwtztpmimtmffcf_c__c_\XXUURRRNNKKKGGDDAAAA===::KKKKGGDDAA==GGGDAA==:==:==6:DD==A=ADA6D=::=AA===::6:66:6666======:::===::::6666633==AD:==6A:AGA\G3=A=66666GDDADGKKGGKKNNKKKNKGRRUUX\\XX\XX_c_ffmmimfcicf___ccffccccccc_cc_\_\_\\X_ccfftz~w~z~~zzwzz~……ˆ‹‹’––’’‹’ˆ‹‹~~~~~z~w~~z~~~~~~……………~~ˆ……wzwtmpttttwww~~…ˆ‹’’’––œ §ª§±§§§§§£­ª§§ª£§££  £    £   £££§ª±´¸»¾¾ÂÅÅÉÉÉÉÉɾ¾ÂÂÂÅÂÅÅÉÌÏÏÌÏÌÏÏÏÏÓÓÌÉɾ»¾¾»»¾ÅÅÂÉÌÌÌÌÏÓÖÖÓÖÚÖÝàÝàÝÚÖÚÏÓÏÏÌÌÌÌÏÓÏÏÌÏÌÏÌÌÉÌÌÉÉÉÉÉÌÉÌÌÌÉÉÉÌÉÉÅÅžÂÂÂÅžÂÂÉÉÉÅÉÌÉž¸´­­­ª™’–‹–¾ÂÅž¾¸¾»»¾¾¾¾¸ª§£§ª§£§§§§ª­­±±±´´»¾Â¾¾¾»»¾»¾ÂÅÅÅÅÅÅÉÅÉÅ»»¸¾¸¾¾¾¾Â»¾¾¾¾»¾Â¸»¾¸¸´»´»¾»¸»¸±ª££££   œœ™œ  œ ™™’’’’‹ˆ…………‹ˆ…–™–ˆ’£œ  §§   œ™––™’‹………‹ˆˆ’ˆ’’–™–œœ™–œ œ––––™œœ œœœ™™™ œ’–™™œ™ˆtˆ‹………~~mw~m……~~~~~wwwtwttw~z~…ˆ‹’’–™™™–™œ™œ™–’ˆ…t~z…w~~‹’\i’::ˆ0…twzttmiiwpiffc______XUUURRRNNKKGGGDDDAAA====::GGGKGGDDAA=ADDDAA==:::66:=36GA::==DGD:A=6=ADDDDDAA=:6:6:6::AAAAAA===ADAA:=::::::66=:=D=A=:=6AG=\K6A=A66:6:GGADDKKGKKNKNNNNKRNRRUUU\_\\XXXXcffimppmpmiific_cffffc_ccccc_c_\\\\_\\\_cfiiwz~z~~~wwtzz~…‹‹’’’‹‹ˆ‹‹‹zzzzzz~z~~z~~~~~~………ˆ…ˆ…~~~~~……~zzzwptwwwwwwz……ˆ’––™™™ £ªªª­§£§ £ ªª££§££    £œœœœ œ   §£§­±´¸»¾¾ÅÅÉÅÉÉÉÉÅÅÅžÂÅÅÅÅÅÉÏÏÏÌÏÏÏÏÓÏÓÏÏÌÌŸ¾ÂÅÉÅÉÉÌÌÌÏÖÖÚÓÖÚÚÝÝÝÝÚÚÖÚÏÏÏÌÉÌÉÉÏÏÅÌÉÌÉÌÉÉÉÌÉÅÅÌÉÌÉÌÌÌÌÉÉÉÌÉÉž¾ÂÂÂÂÅÅÉÉÅÉÌÉÅÅ»¸¸±­­­–œ’œ‹»ÅÅÅÂÅŞ»¾¾¾Â»»¾´§££§§££§§§§ª­±±±±´¸»»¾»»¾»»¾»»ÅÅÂÅÉÉÅÅÉÉÉ»»»¾¾Â¾Â»¾¾»¾»»¾´¸»¸¸´»´»»¸´¸¸­­§£££   œœœ œ£œ ––’’’ˆ……………ˆ…‹‹ˆ’–’ˆ£™ £££   œœ–™–ˆˆˆ…ˆˆ…‹’–––œœ––œ£œ™––™™ ™œœœœ™–œ ™––œ™œ™‹‹ˆˆ‹ˆ……………z~z~p………~z~~wwtttttz~~…ˆ‹’––™™œ™™œ™K™–’…ˆt~…~w~~wˆ’Xi’::ˆ0…pzzwtmmittffcc___cc_XUUURRNNKKGGGDDDDAAA====::DDDGGDDDAA=AADAAA=::66663:),6=66::DKD===:AAGGGGGGGAG:=:=:=:ADAAAAAAAKGDD::::::::::=6:A:D===6=G:\GADAD6=::=KDDAGKGKKNKKNRKNNRRUUUUUX\XXX\\_fiimpttpppmmmmifcfcffccf_cc_\_\\\XX\\\\\cimmzzzz~~zzwwtzz~…‹‹’’‹‹ˆ‹‹‹ˆ‹ˆ‹ˆ~~~zzzzz~~z~z~z~……ˆˆˆˆˆˆ……~~~~~z~zzzwwwzwwzzzz……ˆˆ’–™™œ™££§ª§­ª£££££œ£§   £   œ £œœœœœ   œ§£ª­±¸»¾¾¾ÂÅÅÅÅÅÅÉÉÅÉÅÂÂÂÂÅÅÅÂÅÉÏÏÏÌÏÓÏÓÓÓÏÌÓÌÌÉÅžÅÅÅÉÉÉÌÌÌÏÓÖÚÓÖÚÚÝÝÝÝÚÖÓÖÏÏÏÉÉÌÅÉÌÌÅÉÅÉÅÅÉÉÅÉÅÉÅÉÅÌÉÌÌÌÌÌÉÌÌÉÉÅÅž¾¾»Â¾¾¾¾ÂÉÌÉÉÉÉÅÅÅ»¸¸´±±­§§™­ »ÂÅž¾¾Â¾¾¾»»±§ £§§££§§£§ª±­±±±´¸¸¸»¸¸»¸»»¸»ÅÂÂÂÉÅÅÂÅÉÉÅž¾¾ÂÂÅž»¾¸¸»´´¸¸¸¸¸´¸¸¸´´´­­§§£££ £   £œ ™ –’‹’’…ˆ~………ˆˆ‹ˆ’‹ˆ‹ œ £  £œ£œ ™––ˆ…‹ˆ…‹‹~ˆ…‹––’™œ–   ™™–™™œ–œœœœ™–œœ–™– ™œ™‹‹ˆˆˆˆ………~~z~tˆˆˆˆ…~~zzzzztttwwz~……ˆ‹––œ–œ™™™™G–’’……w…~w~w…Um::ˆ3ˆpzzzwpimttfifc___cf\UURRNNKKKGGGGDDDADAA====::DDADDDDDAA===AA===::666636%),066:=AGD=A==D=KKKKKKKGKKNKA:KADDDDDDDDANKDK==U=:::=::=66=6G==A::D=XDDGDA6A=6=KDGDGGKKGNGNRRNNNRUXUUURXXXXXX\cimmpttwtttpmppmmiffiffcfc_c\X_XXXUUX\XX\_iipwzww~zzwwttwwz…ˆ‹‹’’‹‹‹…ˆ‹‹‹‹‹ˆˆ…z~zzz~z~~z~z~~…………ˆˆˆ‹‹ˆ…ˆ…~~z~z~ztzw~~zzzwzwzz~z…ˆˆ‹–™™™  §§ª­ª­§§£ £ œ £œœœ œœœ™œ£   ™œ  £ §§ª­±¸¾Â¾¾ÂÅÅÂÂÂÅÉÉÉÅžÂÅžÅÉÏÏÏÏÏÓÓÓÓÓÓÏÓÏÏÌÉÉÂÅÂÂÅÉÉÉÌÌÌÌÏÓÖÚÖÖÚÖÝÝÚÝÚÖÖÖÏÏÌÌÉÌÉÉÉÉž¾ÂÂÅÅÂÅÉÅÅÅÂÉÉÌÌÌÌÌÌÌÉÉÉÉÉž»»¾¾¾Â¾ÅÉÉÅÅÉÉÅÅž¸»¸´´±ª­§´»¾ÂÂÅÂÅž¾Â¾Â¾Â¾¾»­§œ§§§£§§§§ªª±­­±±±´´¸¸»´¸¸»¸´¸Â¾Â¾ÅÂÅÂÉÉÉÉžÂÂÅÅÅž¾¾»¸¸¸±¸´¸¸¸¸¸­´¸±±±ªªª££§ £    œœ–œ™‹‹’……~~……ˆ……ˆ…’‹‹œœœ  £  £œ ™–’’ˆ‹ˆ~ˆ…ˆ’–’™™’– œ œœ–œœœ™œœœœ™–™œ’™™ œœœ‹‹ˆ……………~…~~zw…t‹‹‹‹……~~zwzzwwttzz~~~……ˆ‹‹––œ™™™–™™=%GG……z~~zwzz…‹Gm‹‹::‹0…mzwzwtmippfiif___ccXURUNNKKKKGGGGDDDADADA=:=6:AADADAAAAA=A=A==::::666336"%,0366:=DDADNAGANNNNNNNKNNRNRNNNGGGGDDGGDRUGR==XA====:::::=6D:AA66:AU6GGGA:D:6:KDDADDGGDKGNRUNRRRXXUURRUUXUX\_fimptwwwwwtttttppmiiiiifff__\\\XUURUXXUUX\ffttzwzzzwttttttw~ˆ‹‹’‹ˆˆ‹‹ˆˆˆ…z~~~zz~~~~~~z~~………………ˆ‹‹ˆ‹ˆˆˆˆ~~~~~wzwtwwzzz~zz~zz~~~……‹‹’™™œœ £ªª§ªªª£££  œœ  œ™™œ™œ™™œ££  œ   ££§ªª­±»¾Â¾Âž¾ÅÉÅÉÅžÅÅÅÅÂÉÉÏÏÏÏÓÏÓÓÓÓÏÓÓÏÓÏÌÌÅÉÅÅÉÉÉÉÌÏÌÌÏÖÖÖÚÚÖÖÝÝÚÚÖÓÓÖÏÌÉÉÌÉÅÅÉÅž¾¾¾ÂÂÂÉÅÅÅÅÅÉÉÉÌÌÌÉÌÌÉÉÉÌÅž¸»¾»¾¾ÂÂÂÅÅÂÂÅÅÅÂÅ»»¸¸¸´±´ª»¾ÂÂÅÅÅÅž¾Â¾¾Â¾¾»ª§ £§ª§§§ªªªª±±±´±´±¸´¸¸¸¸´¸´±»¾»Å¾ÅÅÅÅÉÉÉÉÅÂÅÅÅÂÂÅž¾¾»´´¸´¸´´´¸´¸ª´¸±±­­ª§££§ £ œœœœ™‹™™‹’‹‹‹………………ˆˆ’‹‹’™ œ ˆ£ ££  œ™––’‹~‹‹~‹…ˆ…‹‹––™™–™ ™£  –œœ œ œœœ™–™™–™œ œ  ‹‹…ˆ………w~z~~ˆt………~zwzwzzwwt~z~……ˆ‹–™œœ™™™œ™:%3’……z~zztz~zˆˆGi…A::‹3……iwtwwtiimmfffc__\_f\RRUNNKKKGGGGDDDAADDA==:=6=AAAAAAAAA=======::::633303")0036:=AADDRDKURUURRRURRRUNURRRRGKKGGGGRX\N\ADU=A======::::A:D=66:AN6DGKA6A666GAA=ADDD6GGRURNRRRX\XURNRRUUX\cfmppwwzzzzwwwtwtttmmmmiiffccX\\XRRRRUUURUXccptzwwzwwtppppptzˆ‹‹’’’’‹‹‹‹‹‹ˆˆw~~~~z~~~~~ˆ……ˆˆˆ‹‹‹‹‹ˆˆ…z~zzzttppptpwzzz~~z~~……––œ™   §§ªªªªª£§£     œ™––™–™™™œ£§£  £££££§ªªª´»»Å¾Âž»¾»ÂÅÂÅž¾ÂÂÅÅÅÅÉÌÏÏÏÓÓÓÓÖÖÓÓÓÓÓÖÏÏÌÉÉÅÉÌÌÌÌÌÌÏÏÌÖÖÖÖÖÖÖÚÚÚÖÓÓÓÓÌÌÉÌÌÉÅÂÅž¾¾¾»»ÂÅÅÅÅÅÅÉÉÉÉÏÉÉÌÌÌÉÅÉÅÅÅ»¾»¾¾»Â¾ÂÂÂÂÅÅÅž¾¸»»¸´¸»¾ÂÅÅÅÅÅÅž»¾¾¾¾Âž»ª§£§ªªª§§ªª­ª±±±±´´´´¸¸´´´±´±±¸»¾ÂÂÂÂÉÉÅÌÉÉÉÅÅÅÂÅÅÅž¾»¸´¸´´¸±±´´±¸±¸¸´±±±­ª£§£ £œ™™™™™‹––‹‹ˆ‹…………ˆˆˆ‹…’’‹’™œ  ˆ£ £££ œœ™–~‹‹z‹‹…ˆˆ‹’’–™™™ œ  £œœœ   œ™œ™––™™™™œœœ ‹…………~z~‹ˆˆˆ…~zwwtzzwzwzz~………‹––œœœ™™™–:%0’…ˆz~~zztz~w…ˆGi…=6=N0ˆ…fttttpmiiifcfc_c\_cXUNRRRNKKGGGDDDGDDDG=AA==:=AA==A======:==::6666333303"%,036:=AADDUGN\UXXRURXUUUXRRURUURNGGDDKU\_c_\GUAD=A====:::::=A=:::=N6ADGD:=666D=A:AAA=3DDRRRNRUUXXXURNURUX\_ffmptwzzz~zwwzwwwwwttpmiiffc_\\\XRRNRRNURRU\_mtzwwwwttppppptw~…‹’’’–––‹‹‹‹‹‹ˆ‹tz~~~~~………ˆˆˆ‹‹ˆ‹‹‹ˆˆ…zz~wztppmptptw~~z~~…ˆˆ’’™™   œ££ªªª§ªª§££œ  œœœ––’™™™–™œ££§£££££§§§ª­­´»»Â¾¾Â»¸»¸¾Â¾»Â¾»¾¾ÂÅÅÅÉÅÌÏÓÓÓÓÓÓÖÖÓÓÖÓÖÓÓÓÏÌÌÉÉÏÉÌÌÏÌÏÌÌÚÖÚÚÖÚÓÚÖÖÖÏÓÓÓÌÌÉÉÉÅžž¾¾¾¾¸»¾ÂÅÉÂÅÅÉÅÉÅÌÉÉÉÉÌÌÉÉÅÅž»»»¾»¾¾¾»¾Â¾ÂÂÅž»¾¸»¸»¾ÂÅÉÉÅÅž»Â¾ÂÂÂÂÂÅ»­ª§§­ª§§ªª­­­´±±±´±¸¸¸¸±´±´´±±´»¾¾¾ÅÂÉÅÅÌÅÅÉÅÅÅÂÂÂÅÂÂÅ»¾»¸»´±¸±±´´­´´¸´±±´±­ª§§   ™™–––œ–’ˆˆ‹ˆ…~………‹‹‹‹ˆ’‹’’œ  £§   £  œ™œ–’…‹ˆ~‹‹…‹ˆ……‹‹’’™™–   £  œœ  œœ–œ–––œœ™™œœœœ’‹ˆz~~~……ˆˆ’’’‹‹~ztttwwwzzzz~……ˆ‹‹’–œœœ™mœ™:U0=……zz~pz~z…‹Gi…A6:K0pctttptiiiffcc_cfccfUXRNNNNKKKGDDDGGAADD:A==:=:AA=========:=:::6666333003"%)036:=ADGGUKK_X\\\U\\XXX\XRXUUXURNGGGNX_cc_\\UAAADA=====::::=:::::N6AADD=:666::=6===:6AANNNRRUU\XXXURURU\_ciiptwzz~~~~zzzwzzwzwwtmmiff____\XURNRNNRNNRX_ftwwtwttptpppptwz…‹’’’–––’‹‹ˆˆˆ‹…twzz~~~…ˆˆˆˆˆˆˆ‹‹‹ˆˆ~zzzzwppmtpppw~~z……………‹‹–œœœ££  £§­ª§ªª§§£§œ £œœœ™™–™–––œ ££§§§£§§§§§ªª­´¸¸¾»»¾¾»¸¸´¸¸»¸¾»¸»¾ÂÅÅÂÅÉÌÌÓÓÓÓÓÓÓÖÖÖÖÖÖÓÓÏÓÌÏÉÌÏÌÌÉÌÌÌÌÏÚÚÚÚÖÚÓÚÖÓÖÏÖÏÏÏÌÉÌÉ޾¾»»»¸¸»¾ÅÉÂÅÅÅÂÅÅÉÉÅÅÅÌÉÅÉž»¸¸¸¾»»¾¾¸¾¾»ÂÂÂÅž¾»»¾¸»¸»ÂÅÅÉÉÉÅÅÂÅ»¾Â¾¾¾Â¾ÂÂÅ­ªª­ªª§ªªª­­´±±±´´¸´¸¸±±±±´±´´¸»¾¾ÂÂÅÅÉÉÉÅÅÅÅžÂÂÂÂÅž¾»¸¸¸´´´´´±±¸¸¸´±±´­­ªª§£  ™™––’ ’–’……‹ˆ‹‹‹‹ˆ~…………‹‹ˆ’––œ£ §§££ £  œ™œ’’ˆ‹‹z‹…ˆ……‹ˆ’™™™  £ œ£   œœœ’™™–™œœ™™ œœ™–‹‹…~~……~…‹‹––’’‹~z~tttwwwwzzz~………ˆ‹‹’œœœ™m™™U,=ˆˆ~…wzpz~z‹GiA6:30_~\tttptiiiffcc_fifffUURNNKKGGGDDDDDDA=AA:=::::6AA=====:=:=:=:::66663000,0"%),36:=ADGGRKKc\___X_\X\\\\U\XX\XURRRG_ccccc\\XDAADD======:::::::::K6==DA=6666=6:3:66:66=KDKRUUU\X\XXUX\\_cfimptwzz~~~~zwz~~z~zzwpmiiccc\\XXURNNKNNKKNX\fptwtttttpppmptwz…‹’’’’––’’ˆˆ‹ˆ…ttzwz~z~~ˆˆ‹ˆ‹‹‹ˆ‹‹‹‹ˆ……~wwwzzptptptptz~ˆ…‹‹ˆˆ™ œ £§££§§ª§ª­­ªª§£ £§œ œœ™™™™™™™œ£££§§§§§§§ªª§­±´´»¸¸»»¸´´±´´´­¸¸±¸»¾ÂÅÅÉÉÌÏÏÓÓÓÓÓÓÖÖÖÓÓÖÏÓÓÏÏÏÌÌÌÌÌÌÉÌÌÏÏÖÚÚÚÖÚÖÖÓÏÓÏÓÓÏÏÌÉÌÉÉž¾¾¾¾¾»»»»¸¸»ÂÅÅžÂÂÅžÉÅž´»¾´´­»¸¸»»¸¾»»Â¾»¾»»»»¾¸»ÅÅÅÉÉÉÅÅ»¾¾Â¾Â¾¾ÂÂÂÅÅű­­­­ªªª­§­­±±±±´¸¸¸¸´­±±±±±±¸»»Â¾ÅÅÅÅÉÅÅÅž»Â¾Âž¾»»¸¸¸¸´´´´´´»¸»´±´´­±­ª§§œœ™™–™’œ––’ˆ…‹‹‹‹……ˆ……ˆ‹‹‹’–‹’’™ ££§£§£œ££œœœ™’’‹‹ˆ‹ˆz‹ˆˆˆˆˆˆ’––– œ£ œ£   ™™™’™™™œ™œ–œœœ™–‹‹…ˆ…~……ˆˆ™–’‹~wztttwtttzwz~……‹‹ˆ‹™œœœm™œ +f)œ……~……wwmzzwGf==6:00_wXppptpiifcc__\fiiffURRKRKGGGDDDDDAAA==:::6:666AA===:::::::=:66333300,,),"%),06:==ADGNNNf____\_\XX\__X\\\\XXUUURcfcff_\XUAAAAD========::::::=N::AA==6666:,66636:6::=AGNURUX\\X\X____ffimttw~~~~~~~zzz~~zzzzztmmmc__\\\\XUNNKNKGKKUXippttppttpppmpttz‹‹’’’’’’’’‹ˆˆˆptwwzzw~z~~~…ˆ‹‹‹‹‹‹‹ˆ‹‹‹…z~zwttzztwtwptppzz…‹ˆ‹‹’™   £§ª§ §£§§ªª­ª­ª§£££ œ œœ™™™–œ™œ££ ££§§§§ªªª§­­±±´±´¸¸¸ª±­±±±­ª´­´¸»¾ÂÂÉÌÌÏÏÓÓÓÓÓÓÖÖÚÖÖÖÓÓÏÏÏÏÉÌÏÌÉÌÌÌÌÏÏÖÚÖÖÖÖÖÖÓÏÓÏÓÓÌÏÌÉÌÌÉÅ»»¾¾»»»¾»»»´»¾ÅÂɾ¾¾¾¾»Â¾»»¾Â¾»¾»­¸»´±­¸´´¸»¸»¸»¾Â¾¾¾»»»¸»»»¸»ÂÂÅÉÉÅÉž¾¾¾»¾¾Â¾ÂÂÂÅÅÉÉ´±±­±­­ª­ª±­±­±±´¸¸¸¸´ª­±­±±±¸¸¾Â¾ÂÅÉÉÉÉÅž¾»¾»¾Âž¾»»»´¸´¸±´´´¸´¸¸´´±±­­ª§§œœ––––’™–’–…ˆ‹ˆ‹’‹ˆˆˆˆˆ…‹’ˆ’–‹™’™££§ª§ª£ § œœœ–’ˆ‹…ˆ…~‹ˆˆˆ………ˆ…‹‹’’’’ œ £œ œ œ™–™’––™œ™œ’œœ ™™‹ˆˆˆ……………‹‹’–’’‹wztttwtwtwww~…ˆ‹‹ˆ‹–™œpœœœA=""œ……wwizw~’Gf=A6:00__Xpmmtmfffcc_\_ffffcXNNKNKGGGDAAAD=A=::66:66336AA===::::::6=6663330,,,)%)"%),03:==ADGKNNc_c_c__X\\\_\\X\\\\\XXXXfifiic_\RDDAAAAAA==AA===:::==R=:D=::6666:06330666:::=DKRNRU\\XX\cccciiimtww~~~~~zzz~~~z~zzwtpmic\\XX\\XXRRNKKGGKRXfpppppptpmmmmpttzˆ‹‹’’’’’’‹ˆˆˆmpwwwwwzzzzz…ˆˆ‹‹‹‹ˆˆ‹ˆ‹‹ˆwwzwtptwzwztwtttpzzˆˆ‹’’–œ£ ££§§§££§££§§ªªª­ª§§§£ £  œœ™™œœ  ££££§§ª§ªªª§ªª­ª±±±´´´ª­ª­­­ªª±§±§¸±¸¾ÅÉÉÏÓÓÓÓÓÓÖÚÚÖÚÖÓÓÓÏÏÏÏÌÌÌÌÅÉÌÌÌÏÏÖÖÓÓÖÖÓÖÓÏÓÓÖÏÏÏÉÉÌÉÉÅ»»»»»¸»»»»»¸»»Âž»¾¸¾»¸»¸¸¸¸¸±´¸ª±¸±­­±±±¸¸¸¸¸¸»Â»»»»»¸´»¸¸¸»¾¾ÅÅÉÅɾ»»¾Â¾¾Â¾ÂÂÅÅÉ̸´±±±±­­±­­­±±±±¸¸»¸¸¸ª­±±±±´´´»ÂÂÂÅÌÉÉÉÅÅž¾»Â»»¾Å¾¾¸»»¸¸´¸±¸´±¸¸´»¸±±´±­ªª§œœ––––’–’’’ˆ‹‹ˆ‹‹ˆ‹‹‹‹’’’’‹–™‹œœ§£§§§§  £œœœ™’‹ˆˆˆˆˆ…‹……ˆˆ‹‹–’£  £ œœœœ––™––™™œœ™œ–œœ œ™ˆ‹‹ˆˆ………ˆˆ’–’‹ˆwztttttwtwwtz……ˆˆ‹‹‹’–™mœ  œm")œ…ˆ…wwi…zw–Gf=A6:00\_Xmimpifff__\X\fccc_XKKGKKKDDADD=A==:::66666336=====::::6:::6633300,,))%),,336:=AADGKNR____c__\_XX\\\X\X\\\XXX\ifcmifc\KGDDDDAADAA=====:::==UA=A:666666:0300366:::6:AGNGNR\XXX_ffcfimmptwz~~~~zwwz~~zzzwwwppii_\XXXX\XUUNNKGDGGRXcppppppppmmmpptwz…ˆ…‹’’’’‹‹‹‹mmttwtzwzwzw~…ˆ‹‹‹‹ˆˆ‹ˆˆzwtttppppt~zzwwwwww~z……’–’–œ §££§§£££§£ £§£­­­ª­§ªª£££    œœ œ£  £ £§§§§ª§§§§§ªª­­­´±ªªª§ªªªªªª£§§ª±´´ÂÅÉÓÓÓÓÓÖÓÖÚÚÖÚÓÖÖÓÏÏÏÌÌÏÏÌÅÉÌÌÌÏÏÖÖÓÓÖÓÓÓÓÓÓÓÓÏÏÏÉÉÉÉž»¸»»¸»»»»»»¾¸Â¾Å»¸»´»¸´¸´´¸´´±±§£ª­­ª­­­±´¸´´´»¸¾¾¸»¸¸¸¸¸¸¸»»»»ÂÂÅÉÉÅÅÂÅ»»¾¾¾¾¾ÂÂÂÂÅÌÉ»¸­±±±±­±±­±±±±´¸¸¸´¸´ª±±­­±±¸±¾¾¾ÅÂÉÉÉÉÉž»¾»¾¾¾ÂÅÅž¾»»»¸¸´¸´¸¸¸¸´¸»¸´±¸±­ªª£œœ–’–’’’’–‹‹‹…‹’’‹’‹’–’’’–™’  §§§§ªª  £œœ™–‹ˆˆˆ……~…ˆ…ˆˆ~……ˆˆ‹’™–£œ § œœ™™’–––’™™™™™œ™  œœ–ˆ‹‹‹‹ˆ……ˆˆˆ‹’‹–’‹‹‹…~wwttttptwwwtw~…ˆˆˆ‹ˆ’™piœ  £   –‹………tti‹ˆ’GfAA6:00\_Xmimmiffc_\\X_c___\UGGDKGGDAAAA==::::666666336==:=::::6666:6633000,,),%))0066:=ADDGGKNRUccc_c_X\XXXX\\\X__\\\\_fcfmii_\NKGGDDDAAAA=======::AXDA=::666666,3303366663==DGDKKXUUXcficiiimpwz~~~~~wwwzzzwzwtttmmff\XXUXXXURRNKKGDGDNU_mppppppppmmppwzz…ˆˆ‹ˆ‹‹’––’miptwtwtwtwpz……ˆˆˆˆˆ‹‹ˆ~zwpppmimptzzzzzzzwz~…ˆˆ’’™–œ £§§§§§££ £  §§£ª­­­­ª­ª£§£££ £  £œ£  £ £££§£§§§£§§§ªª­ª±­§§œ£§§­ª§ª§§§§­­±¾ÂÏÏÓÓÓÓÖÓÚÚÝÚÚÖÚÚÖÌÏÌÌÌÌÌÌÉÉÌÌÌÏÓÖÓÓÓÓÓÏÓÓÏÓÏÏÏÌÌÉÉÉÅÅ»»¸¸»¸»»»»»»»¸¾»Â»»¸±¸´´´±œ´±§­§£££§ª ªªª­±¸±´´¸¸´»¸¸´´´´¸´¸»¸»»ÂÂÅÌÅÂÅ»¾¾¾¾¾¾ÂÂÂÅÉÌ̸´±±±±±±±±­±±±´´¸…¸¸¸±­­±±±­­¸±»¾»ÅÂÅÅÉÉÅÉž¾¾Â¾Å¾¾¾»¸¸»±¸´¸»»¸´»¾¸¸´´´±ªª ™™–’’’’–‹’’‹‹’’–’–’’’––’–’’’œ–££ªªªªª§£  ™œ™–’wˆˆ……z…………~………ˆ‹’™–£œ£§  œ™––’’–™™™™œœ œ™’‹‹‹ˆˆˆ‹ˆˆ’–‹ˆˆztttpttpptwttw~…ˆˆ‹‹ˆ’’–™mœ £££££™’…ˆtpm’‹’GcA=6:00X_Xifimiccc_\XU__XRKRRKGDKGDDAAA=::::::666333003==::::::6663:6633000,,,))),033::==DDGKKNNR\ffc__\\\\XXXXX\\__\\\\\cfimif\X\UKKKNGDDDAA=====A=:DUDA=:6666666)03363:3366=:ADAGGURRU_fiffmmppw~~~…~~zwzzwwwwtpppiicc\UUUXUURRNKKKGDGGKRXmmptpptppmpptwz~ˆˆˆˆˆ‹ˆ‹‹’–’’’’iipptpwptpttt…………ˆˆˆˆ‹ˆ…~zzppmmmmttzwzz~~~z~ˆ‹‹–™™ £§ªª§§£§  ££££££§ª­±­­­ª£ª§£££§£ £œ£££     £ §§££££§ª­ª§­ª££œ £ªª§§ª£§£ªª§ª­¾ÓÓÓÓÓÓÖÖÚÚÚÝÚÚÚÖÖÏÓÌÌÌÏÏÉÉÌÌÏÓÓÖÖÖÖÖÓÓÏÓÏÏÓÏÌÌÌÌÅÅÅÅ»»¸¸¸´»¾¾¾¾¾¸»»»¾»»¸´¸±±´±œ± £ª£  ££  §§£ªª´±´´¸¸´¸´´±´´±´´¸¸¸¸»ÂÂÉɾÅ»¾¾¾¾¾ÂÂÂÅÉÉÌ̸´´±´±±±±­±±´´±´¸……¸´±ª­±±±­±¸´»¾¾Â¾ÅÂÅÉÉÉž¾¾Â¾¾Å¾»»¸´¸­¸¸¸»¾»¸»»»»¸±´­ª§œ–––’’’–––’–™™–™––’™––’––œ ™  §ªª­§£££ œœ™–’tˆˆ~…~…~………ˆ‹’™’£œ§§œ£œœ™’’’’–œœ™œ œ™–‹‹’ˆ‹‹ˆ‹‹‹‹–ˆ…~tpppptpppptttt~…ˆˆ‹‹‹‹’––œœœ£§ ££™™–…~ˆppi’–‹‹GcA=6:00U\Xfcimf___\\UR\\KNKKGGDAGDAAAA=A:::666633333000::6:6:666663666330000,0,,,0366:=AADGGNNRcU_fccc_\\\\XXXXX\X__\\\\X_ifpfcXU_XNNNRKGGDDAAAA===A=DUA=:::666666,,366663666::===DKKKNR\cffimippw~~~zw~zwtwttpmmmfc__RRRURNNNKGGKDDGGKNXmmppppttpptttwz…ˆˆ…ˆˆ‹‹‹‹’’’iimppttmtmttw~…ˆ…ˆ…ˆ…~wzppmimmttwwzz~…‹‹™œœ£§§ªª§§££œ   £££ £­ª´±ª­ª§ª£ ££§£££ £§ œœœœœ ££§£££§ªª­ª£ª§ œ œ£§§§§§§§£§ª§§ª±ÖÖÖÓÓÓÖÖÚÚÚÚÝÝÚÚÖÓÓÏÌÌÌÌÌÉÌÏÏÖÖÚÖÖÖÓÖÓÏÓÏÏÏÌÌÉÉÉÂÅž¸»¸´´¸»¾¾¾¾¾¸¸¸»»»»¸¸´­­±­™   £ œœ££œœ §  §£­±´´¸´´±´±´±­ª´¸¸¸¸¾ÅÅÉÅž¾¾»¾¾Â¾ÂÂÂÂÉÌÌÏ̸´´´±±±±±±±´´­´´…´±­ª­±­±±´»¸¸»»¾»ÅÂÉÉÌÉÅÅž¾¾»»Â¾¾¾¾¸¸¸´´­»»»»»¾¸¾»¸»¸±±ªª£’–––’’’’’™’’’’–™™œœ™™’–™–™–’–™’– £œ ’œª§ªª§§§£ œœ™–’ˆ‹……~~…~…………’œ™£œ££œ£œ™™’’’’’’™œ™œœ™’’’’’’’‹‹‹‹ˆ’‹…~~ztppppppppptpttzˆˆ‹‹‹’’’™œœ£§£££™œ™…mmf’ˆtzG_A=6:00U\\ccfic__\XXRN\KKKGGGDDDDAD=A=:=::6666333300,,066366666:6666663330000,,0,36::==ADGKKRRR_Xcfcf___\XXXXXUXXX__\\__Xcfcmi_XRc\RNRRGKGGDAAAAAA=RAAUA::::666663,0036:6666666::=AGGGGKU_cffiippz~~~~~z~zwtwtppmmiff_\UUURRNKKKGKGGDGGKNUimpppptttttttwz……………‹‹‹‹‹‹’’’’iimpptpmppttwz~………………z~zztppiiiptwzz~ˆˆ‹’’’–  £§£ª§§§     ££   §ª­±±­­ªªª££§§£§££££§œœœ™™œ ££§£ §§ª­­­££  œœœ££§££§££§§ª§§­±ÖÓÖÖÓÓÚÖÚÝÚÚÚÚÚÚÖÓÖÏÏÌÌÌÌÌÌÓÓÚÚÚÖÖÓÏÓÓÏÓÏÏÌÉÉÉÉÉÅÅÅ»»´¸¸»¾¾¾Â¾¾»»¸»»¾»»´´±£ œ–™ œ ™ œ   ™ £œ ££ª­±±¸´¸±±±±­­§±´¸¸»ÂÅÉÅÅɾ¾¾¾¾ÂÂÂÅÉÌÏÏϸ´´´±±±±­´±´´­¸´ˆ´´±ª­±±´´´¸»»¾¸Â»ÂÂÅÉÉÉÅŞ»¾Â¾¾¾¾»¸¸¸±´¸»»»»¾¸¾»¸»´±­ª§–’’’’’’’’’‹™––––’œ™ œœ™––™™™––––™££ £ ª£§§ªª£ œ™™z–’ˆ……~~~ˆ……ˆ’’œœ§££§ £œ™™’’–™–™™’–’’’–‹’‹‹ˆˆ~zzttppppppppppppw~~…ˆ‹‹’‹’‹’™œ££§£§œ™œœ…imf‹…ptG\A=6=30X_\_ccfc_\XUURKXKNGDDDADAAADA=:::666663330000,,,0003636:::::666333300000006:==AADDGKNUUUcX_cff__\\\XXXXXUUX__\\\\Xcicii\XRc_RRNNKKKGGDDDAAA=U==X=:::::66666030666:666666:===DGGGGRX_ccfimtz~~~zttwpmppmmifc_XUURNNKKKGGDDGGGNNRimmttpwwwttttwz~……ˆˆ‹‹‹‹’immppppppmpttwz……~~~zwtttmmipttwz~……‹‹‹’’–™ œ££§§§££££      ££§ª±­­±­­§ª£§££ ££ £ £œœœ™™   £§§£§ªª­­ª§£££ œ™  ££ § ££§§ªª­­ÓÖÖÚÖÖÚÚÚÚÚÚÚÖÚÝÖÖÖÓÏÌÌÏÏÌÏÖÖÝÖÖÚÖÓÏÓÓÏÏÏÌÌÉÉÅÉÉÅž»»¸¸»»»¾¾Â¾»»¸¸»»»¸´´±œ–™’™œ™™œœœœ œœ  ™   £§­ª´´¸´±­±ªªª±´¸¸¾ÂÅÌÅÅÅž¾¾¾Â¾ÅÅÌÏÏÏÓ¸´´´´±´±­´±´´±´¸´ˆ´±±ª­±±´¸´¸¾¾¾»Â¾ÅÂÂÉÉÅÅž¾¾Â¾¾¾»¾¾»»¸¸¸¸»»»»»¾¸»»»¸´±±­£–’’’’’’’’’‹œ–™–™–œœœœ™™–’–™–™’’™–œ££ £ §§§ªª§  ™™™z’’ˆ…~…~…ˆ……ˆ’–™ ª§§§£ œ™™’–’‹’™’–’’’’‹’’’’~’’t‹ˆ‹‹ˆ~wwppppppppppppptzz‹‹’’‹‹’™™  £§§œ™œ™ˆmif~zwmmGXD:6=60\__\_ff_\XURRUKXNNDDDDDD=ADA==::66666330000,,,)),))06066=:==66663333300,,0:=A=DADGKKNURXc\cffc___\\XXUUUUUU___\\\ififcm_\U__RNNRNKNKGGDDDADNX==X::=:::6666636336::66366:::==DDDDGKR\__cfmtz~……~tttmippppiffc\XURRRNKKKGGDGGGRNRfmmpwtwzwwwtwzz~~…ˆ…‹‹‹‹‹’‹immppppppmpptw~~~~~~z~~zwtttpppmttwz~…ˆ‹––™œ  £££§££££  œœœœœ££§­±±­­­­§ª£§£    £  £œœ™–™    §§§ª­­­­ªª£§  œœ  £££§  §§ªª­ª­ÏÖÖÖÚÚÚÚÖÖÖÚÚÓÚÚÚÓÖÓÓÏÏÓÏÏÓÚÚÝÖÖÖÓÓÏÏÓÏÏÏÌÌÌÉÉÉÉÅž¾¾»»»¾¾¾¾Â¾¾»»¸»»»¸¸´±™’ˆ’–™–™™™œ™ œœœœ™ ™œ £§ª§±´¸±­±ªªª­±¸¸»ÂÉÉÉÅÅÉÂÅž¾¾Â¾¾Â¾ÉÉÌÏÏÓÓ»´´´´´±±±´±´´±´¸´´´±±­±´´¸¸¸»¾¾¾¾¾¾Â¾Åɾž¾¾¾¾¾¾Â¾¾¾»»¸¸»¸»»¸»»¾»»»¸»¸¸´±±­œ–’’’’’’’’–™™™––™œœœœœ™’–––™™––œ’œ  £§œ£§§§§§£  ™œ™w’–ˆ……~…ˆ………‹ˆˆ…’’™™ ªª§££ ™™™–™’ˆ––’’’’’’~’’’t‹‹‹‹…wzttppttpppppmptwz~ˆ‹’’‹‹‹’––’œ £§™–œ–‹iicfft_cGXG:6A::_\\\\cc\XURNUXK\RRRKGDDAAAAA=::666633333000,,,))%%%)3,::=:A=6:663333000003=ADADDGGKNNRRUc__iff__\\\XXXUUUUU___\\\iificmc_X__URRRNKKKGGGGGDGRXA=\=:::::6666366606::6636::6::=ADDGKNRX_\ffmpw~……ˆ~~ttpmipppmmfif\\XUURRKKGGGDGGKRRUcimpwwwzwzzwwzz~~~…ˆˆˆ‹‹‹‹‹iipppptppptptwz~~~~~zzz~z~ztttwpttippwz~ˆˆ’™™™œ ££££§£££££œ   œ   §ª­­±­±ª§§ ££        œœœ™œ £ £§§§­­­±­ªª££ œ  £œ££££££££ªªª­±ÌÚÖÖÚÚÖÖÓÖÖÖÖÓÚÖÖÖÖÓÓÓÓÖÓÓÖÚÚÝÖÖÓÓÓÏÏÏÏÏÌÌÌÌÉÉÌÉÅÅž¾¾¾¾¾¾Â¾¾Â¾¾¸¸¾¸»»¸±´™ˆ’’–™––œœ œ™™œœœ–œ  §§§­±¸´­±­§ªª´¸¸¸ÂÉÌÉÉÉÉÂŻ¾ÂÂÉÌÏÏÓÓÖÖ¸´±´´±´´´´´±­±´´±±´´­­±¸¸»¸»Â¾Âž»Âž¾¾¾Â»»»´¸¸¾»¸»¾¾¾»»»¸»¸¸±±­–’’’’’’’’’–’–™™–™™™œ™œœ™’–’’–™™’™ œ £§ §§§§££ œœ™™™w––ˆ…………ˆ…………ˆ‹ˆ‹ˆ’–™™£­ª§£  ™™–™–’’ˆ‹––‹‹‹’’’’’’’‹‹~’‹‹‹‹ˆ~wzwwppttppppppmtw~~ˆ‹’’’ˆ‹ˆ’’3™œ £’™’ˆ_fcfcm\_GXK:6=A\_\\\\__XRRNRX\U_UUUNKGAA===A:::666633363000,))%%"""%3%=6===:66336333333336ADDDGGGKKNNRRXcc_fffc__\\XXXXXURR___\__iifici__\_\UUNNUNKKGGGGDGGNUUU_=====:::6663663:6=6:66:=6:==AAGGKKRU\Xccimw…………ˆ~wpmmmmpmiiiif_\XXURNKKKGGGGKNRUXcfiptwzzzz~zzzz~z~~……ˆ‹‹‹‹‹mippppttpttttzzzz~~zwzzzwzwppptptwmppwzz~ˆ‹‹’–™œœ ££  §§£§£ £   œ   £§­­­­­­§£§££   £     œ™™œ  £  ª§ª­­­±ªªª§£  £  œ£    ££§­ª­±±ÌÖÖÖÚÚÚÖÓÖÓÓÓÖÖÖÖÓÓÓÓÓÏÓÏÓÚÖÚÚÖÖÓÖÓÏÓÓÏÏÌÏÏÌÌÌÉÅÅÅž¾Â¾¾Å¾Â¾¾¾»»»»»»´´±™‹‹’’’™–’œœœœ™œœœœ–œœ £§£ª­´´­±­ª§­´¸¸»ÂÅÉÉÅÅɾ¾»ÂÂÂÂÂÂÅÌÌÓÓÖÖÖ»´±¸¸±´´´´´±­±±´´´´±±­­»»»»¾Â¾¾¾¾Â»¸¾¸¾Â¾Â»¾Â¾¾¾Âž»»¸´»»¾»¸»Â¾»¸¾¸»¸¸´±­–’’’’’’’’’’’––––™™™™œ™–’’’’––––œœ™  ££ª§££  œ™™––™w––m…………ˆ‹ˆˆˆˆˆˆˆ‹‹’––™œ§­ª§£  ™™™™–’’‹’’‹’’’’’’‹‹…‹‹’ˆ‹ˆ’‹~zzwzwtttptppppppzˆ‹’’ˆ‹ˆ‹‹30:œ ~……_f_ccc\XGXK:6U\_\\XXXX\URRNUX\X\RUXRNGAAA====:6666333033300))))%%""0):3A===63006003033336ADGGGGKKNNNRUU_f_fcc___\\XX\\UURR___\\cifim_i\c\cXRRNNXKKKGGGGDKGKRRX_=AA:=:::66:6:66:6::::::=::::AAKKKNRXX\_cfmz~……………~wppmmmmififfc\\UXRRNKKGGGGGNNRXX_ffmtwzzz~~zzzzzz~~……ˆˆ‹‹‹‹‹pimptttwttwwwzz~zzzwwwzwwwtmpmttpwptttzw~……‹‹’™œ  £§§££ª§§£££  £  œ £§§­­­­­ªª£ª§££    œ   œœœ™ œ   §§ªª­­±ª­ª§§£ £££ £ £   £§ªª±´´ÌÓÖÚÚÚÖÖÓÓÓÓÓÓÓÓÖÏÓÓÏÏÓÓÓÖÖÚÚÚÖÖÖÖÓÓÏÓÏÏÌÏÏÌÏÌÌÉÅÅž¾¾Â¾¾Â¾¾¾»»»¸»¸¸´–‹’’™™–œœœ™œ œœ™’œ   §£§ª±±ª­­ªª±´¸¸»ÂÂÅÅÅÅɾ»Â»¾Â¾ÂÅÅÉÌÓÓÖÖÚ¾¾¸¸´´¸´¸±±±±­±±´±±±´­ª»»»»¾Â¾¾¸¸»»Â¾Â¾¾¾Â¾¾ÂÂÅž¾»¸»¾¾¾»¾¾Å¾¾¸¾¸»¸¸±±±–’’’’’’’’’–‹–’––™™™œ™™–’’’™––™’™’££ §§§   œ™––’’™–’™iˆˆ…ˆ‹‹ˆ‹‹ˆ‹‹ˆ‹’–™–œ §­ª§§£ ™œ™™™’’’ˆ‹~‹’’’’ˆˆ‹‹‹ˆˆˆ~~zwzzwttttppppttz~…‹ˆˆ…ˆˆ‹30‹™z…‹pp_c_cccXUGXN::XX\XXUNUUXRNNRXX\\\UXUUKDAA====::66633303366,,)%%)%)"%,0=::=300,300033336:DGGGKKKKRRRRUU_ccffcc__\\XX\\UURR\\\___icmm\fXcX_URNNN\KKKGGKGGGDGNNXc===:A:=6666666:6:=::=:==:6::ADGKKNUX\X\cip~~……ˆ…………wptpmmiicfffc__UUUNNKKDGGGGNRRXX_ccipwzzz~~~z~z~~~…z…ˆˆ‹‹‹ˆ‹‹‹‹‹‹pimttwwztwwwwz~~~zwwwtzwttpmmipppwttwtwz~……‹œ ££§§§§§ªªª§£££ ££  ££§ª­±±­ª­ª£§§££ ££ œœ  œ  ™ œ œ £§ªª­ª­­ªª§£ £££§£§£ £ ££ªª­´±¸ÏÌÚÝÚÝÖÚÓÓÏÏÓÓÓÓÓÓÏÏÏÓÓÖÖÓÚÚÚÚÚÚÖÖÓÓÏÓÌÏÌÏÏÏÓÌÏÌÅž¾Å¾Âž¾¾Â»¾¸»»¸¸±’’’’’’–––™œ™™œ  œœ’œœœ££ §ª­ªª­ªª±´¸¸»ÂÂÂÂÅÅž»¾¾Â¾Â¾ÂÅÂÉÏÓÖÚÚÚÝ»»´¸¸´´´­±­­­±±±±±´ª§¸¸¾¾Â¾Â»»¸¸»¾¾»¾¾ÂÂÂÂÂÅÅÉÅÅž¾»»¾¾¾¾¾»¾Â»»»»»´±±±–’’’’’’’’’–‹–––’–™™œ–––’‹’–’–œ’™– §œ§£££œœœ–’’’–t™p‹ˆ‹‹‹‹‹‹–™™ œ ª­ª§ª£ œœœ™™––’’’‹…ˆ~‹‹ˆ‹’‹‹‹’‹‹…ˆ‹‹……~~~z~~ztttptpttwwz…‹‹ˆ…~…ˆ0 +‹’zwmm\c__c_XXGUR::UUXUGRKNRRNKKRUUXXXRURRGDA===::::66333000063)),%))),"),0:===300,000003336:DGGKKKNNRRRUUUc__ff_c_c_\\XX\UURR\\\__cffmm_fX_XcXRRNN\NKNGGKGDDDDKG\c==A==::6666::6:::=::=:==:666AAGGKRUX\\_cmt~~……ˆ………~wtwtppiifcfffc_XUUKNKGGKGGGRRUUX\_cimwwzz~z~~~~~……ˆˆ‹ˆ‹ˆ…‹‹‹ˆˆˆ‹‹mmptwzzzwwzwwz~zzzwwwtwwttpmimmpptttwwzz~…‹’œ£§§ªªªªª­­ª§§§§££  ££§ªªª­­ªªª§£§§ ££££ œœ œœœ œ œ£œ£§§ª­ª­ª­ªª§££££§££££  £§§ª­±¸´»ÌÌÚÚÝÝÚÚÓÓÏÏÓÏÓÏÏÏÌÏÏÏÓÓÖÓÖÚÚÚÚÖÖÖÓÓÓÓÏÏÌÏÏÌÏÏÓÌÉÅžÂÂÂÂÂÅÅÅɾ¾¾¾Â»¾¸»»´¸± –––––’–™œ™œ    œ™œ  £ £§ª­­ªª­§±¸¸¸¾¾Â¾»Å¾¾Â¾ÂÂÂÅÅÌÏÖÚÖÚÚàž»´»¸´±´±´­­­±±±±±±­­»¸¾¾Â¾¾Â»»¸¸»Â»¾»Å¾¾ÅÅÅÅÉÅž»¾¾»¾¾»¸¾¾Â¾¾»¾»¸´´±­–’’’’’’’’’–––’––––œ’’™‹’––’–œ–™™ £œ§§ ’™™™’’’’–p’™t’’’‹’‹‹’’™™™£ £­­§ªª§£   œœ™™–’……ˆ…‹ˆ‹‹ˆ‹‹ˆˆˆˆ‹‹ˆ…~~~~~~~twwttptwwz~…ˆˆ‹‹‹ˆ…~~%‹ˆz~~wii\c__c_XUGURRURRURGNDKNNGGGNRRUUUNRRNGDA===:::66633303,,30)%)%)%,,,):=6,3,,,00366:=GGKKKfNNRRUUUX_\cccccc____\X_XURR\\__cffimpcc\\U_\RUNNXNKKGKGGDDGDDGXf=A==:::66::::6:=:===:==::336=AGGKRU\\_cipw…………ˆˆ………~tttmpiifffffc_\UUNNKGGKGGKRRUXX\\cimttwwzzz~~~~………ˆ‹‹‹‹ˆ…‹ˆˆ…ˆ…ˆ‹mpptwzzzzzzzz~z~wzwwwtttptmmmmmpppppwwzw~…ˆ–œ£ª§­­­­­±ª­ªª§£§§ §§§ªª­­­­§§§§§££££££   œœœœœœ     £§§§­ª­­ªªª§£§£§£§£§ £££§ªª­´¸¸»ÉÏÚÝÚÝÚÚÖÓÓÏÏÓÓÌÌÏÉÏÏÌÏÓÖÓÖÚÝÝÚÖÖÖÖÓÓÓÏÌÌÌÌÌÓÓÏÏÌÉÅÅžÅÂÂÉÉÅɾ¾¾»¾»»»¸´´£ ™™–’––’–™œœœœ œ  œœ œ’£ £§§ªª­­­ª´´¸¸¾»¾»»Â¾Â¾¾Â¾Â¾ÅÅÂÂÉÏÌÖÖÝÝÝÝž»¸»´´±´±´±­ª±±­±­­±±»»¾¾Â¾¾¾¾Â¾´´¾¾¾¾¾¾Å¾ÉÉÅÅÉÅÅÉÅ»»»¾»»¸¸»»¾¾»»¾»¸´±±ª–’’’’’’’’’–’–’–’–™’™––’‹’–’™œ–™œ   §£œ’–––’’‹–p™w–’–’’’‹’’–œœœ§£§­±ª­­§£     œ™™‹‹…w…~……ˆ‹‹‹‹‹’‹ˆz‹‹ˆ‹ˆ……~~zzwzwwppwwzz…ˆ‹‹‹ˆˆ~z~z~~)‹ˆzzztfiX_\\c\URGXRUXUNNKDKADKK=AGKKNNRKGNRKGDA===:::66333663,,),%)%)%",)"0%:00),,00336:=KKNNRiRRRUUXXX\_cccfcc_____\\\URRX\\_fifiimf__XXU_RXRRUNKRKKGGDDDDDD\iAD=A:=::::===:=:=A::==:=:66:AADGKNUX\_cmtw…ˆˆˆˆˆˆ………zttptmiiffffc_\XXRNGGKKKKKUUUXXX\cfptwwwzzz~~……ˆˆ‹‹‹ˆˆ…ˆˆˆ…………‹ppttzz~~~~~~~~~wztwttttttimmmmmmpttwwzw~…‹–œ§ªª±±±±±±­­ª­ª§§ª±ªªªª­­­±­ ££§£££££ £ ££œ  œœ™œ £ ££§££­­­­§ªª§§ª§§§§£§ £§£ªª­±¸»»¾ÌÓÖÝÚÝÚÚÖÓÓÌÓÏÏÌÏÏÌÌÌÉÌÓÓÏÓÖÚÝÚÚÖÖÖÓÓÓÏÉÌÏÌÏÓÏÏÏÌÌÉÉÅÅÂÂÂÅÂÂÅÉÉɾ»¾¾»¸´±±§£œœ™–™–––œ™™œœœ    œœ –£££ª§§ª­ªª­´±¸´»»¾¾¸¾»Â¾»ÂÂÂÅÂÅÂÅÅÉÏÌÓÚàÝàÚ¾»¸¸´´±±±±­­ª­­­±­ª­´¾¾¾Â¾Â¾¾Â¾¸¸»»ÂÂÂÂÉÅÂÌÅÅÉÉÉÉɸ¸»»¸¸´´¸´»»¸»»»»´±­§™’’’’––––’–’–’–’’‹’‹––™œ–œœ£œ ££œ’‹‹’’‹’’t™z––’–’‹’’’’™œ  §§ª­±ª±­ª§ £   œ––ˆˆ…w~…z…ˆˆˆ‹ˆ‹’‹ˆwˆ‹‹‹ˆ……~~zzzwtwttwzz~…‹ˆˆ……wwttzz~):ˆ‹ˆzzzpcf\c_\c\UUXXUUXRKDGAD==KA::DGGKKKNGKNKGDA===::666360::3,)%%%,"%0% +60%,0036::GKKNNimRUUUUXX\_\cccc_c_\\____\URR\__\fifmmpi\cXUU\RURRXNNUKGGGDKDGAAXfUAA=::::66AAA===:=:::::=6666A=ADNNU\_cipwz…ˆ‹ˆˆˆˆˆˆ…ˆ…~wtttpmiffficc_\XUNKKNNNNUXXX\\\_ccptwwwzzzz~………ˆ‹‹‹ˆ………ˆ…………‹ttwwz~~~~~~~z~zwwwptppppmmmmmpppttwwzz~~…‹– §­ª´´´´´±±±­±­ªªª´­­­ª­±­­ª£ £§£££ ££§££§ £ œœ™œ £££§§££ª­±­ªªª§ª§ª§£§§§££§§§­±´¸¾»ÂÉÏÓÝÚÝÚÚÚÓÓÏÓÌÏÏÏÌÏÌÌÌÏÏÏÏÖÖÚÝÚÚÚÖÖÖÓÓÏÌÌÌÏÌÏÏÏÏÌÉÉÉÅÂÅÅÂÅÅÂÅÉÉÉÅÅž¾¾¸´´´­§£  œ™™™™™™–™œœœ œ œœœ£™££§ªª§§ª§­­´´´´»»»»¸¾¸¾¾»ÂÅÅÉÅÉÅÉÉÌÌÏÏÝçàÝϾ»»¸´´±´±±±ª­ª­­ª­­­­´¾¾¾Â»¾Å¾»¾¾»»¾¾ÅÅÅÅÅÉÅÉÅÅÉÉÅÅž¸»»¸±´±´´´¸¸»»»»¸¸±­ªœ’’’™™––’’‹‹‹‹ˆ’––™ ™œœ£™ § ™’‹‹’–‹’‹–~’™––’’‹–’ˆ’’–––™ œ§§ªª­ª­ªª§£   œ –™‹‹…wz~…~~~w~ˆ……‹ˆ‹ˆ‹‹z‹‹‹‹‹ˆ……~~~~zwtwwwwwz…ˆ……wttpwz~,ˆˆˆ‹~zzp_fXfc\_XXU\\XUXUGGG=D::K=::AADDGGKGKKGGDA==:::666363:=36)%""0%",),036:DUNNRXmpRUUUUXX\\_cffcc_\\_\\c_XXRU__c\immmmpiUcXUXXRRUR\RNXNKGGGNGDAAUiDDA=:::=66DAAAA:==6::=:=6::6AADDKRX_ccmtz~…ˆ‹‹ˆˆˆˆˆ…ˆ‹ˆzzttpmiffiiff_\\XUNRNNRXXXX\_\\\cfptwwtwwz~~…ˆ……ˆ‹‹‹ˆ………ˆ…………‹ttzwzzz~~~~zwwztptpmppppppptttwwwzz~~…ˆ™££ª­¸¸´¸´±´´±´±­ªª´­±±±±­ªª§£œ £££££££§£§§£  œœœ™ £££§££ ª­±ªªªªª§§§§§§§££§ª§ª±±¸»¾¾ÅÉÓÓÝÚÝÚÖÖÖÖÓÓÌÏÏÏÌÌÌÉÉÌÌÌÏÓÖÝÝÚÝÝÝÚÚÖÏÌÌÌÏÏÏÓÓÓÏÏÌÉÉÉÅÉÉÂÉÅÂÉÉÉÉÉÂÂÅ»¸´±ªª§ œœœ™–™™œ™™™œœœ™œœ œ œ£££§ª§§ª§ªª±±´¸»»»¾¸»»»¾»ÂÅÅÅÉÉÉÅÌÉÓÖÖëëÉÅÅ»»¸¸´´±±­±±­­ªª­§ª­ª­´Â»»Â¸Âž¾¾¾¾¾ÂÂÂÅÅÉÂÅÉÉÉÅÅÅÅž¸¸¸´´±­´´´´´¸»¾¸»¸±­­œ–’’’–™–’‹‹ˆˆˆ‹’’––™ ™™œ£–££ ’ˆˆ’’‹‹––™––’–’’‹’’‹’’–––œœœª§§ªª­ªª§ª££££  –™‹‹zz~~~~tz……ˆˆ‹ˆ‹‹‹~‹ˆ‹ˆˆ………~~zwwtwzzzz~~…~zwptptw~,ˆˆ…ˆ~~wmccUcc_cX\R__\XUUDGD=D==K=:==AADDDKKKKKKDA==:::6:6660:A0:)%"0% +™™™)%%™),03:AR_RRXimpcUUUXXX\\_cffcf_\\_X___U\R\cc__iipmpmfXcXXXUURUU_UUUNKKKKRGDADRfADA=::=::6AADA==AA6::===::6:=DDGKR\_cmpww~ˆˆ‹‹ˆˆˆˆ…ˆˆ‹ˆ…~~tttpmiifmiif__\\RU\fc\\_\\_\__cipptwttwzz~…ˆ……ˆ‹‹‹‹ˆˆ………ˆ……ˆˆ‹tpwwzz~~~zzztpptmtpppttptwtwwzz~…‹œ£­­±¸¸¸»´´¸¸±´´±­­±­±´´´ª§§££œ  ££§§£££§§§£££  œœ    £§  §­­­­­ªª§§§§£§£££§ªª­±¸»¾ÂÂÂÉÓÏàÝÝÝÖÖÖÖÓÏÏÌÏÌÉÌÌÌÅÏÌÌÏÏÖÚÚÖÝÝàÝÚÖÓÏÏÌÏÏÏÓÓÓÏÏÏÉÌÌÅÉÌÌÉÅÅÉÉÌÌÉÂÅÅž´´´­§ªœ œœ™™™–™™™™™™™–™œœ    §§§§ªª§§ª­­±´´»¸¸»¸¸»¸¾¸ÂÅÅÅÉÌÌÅÌÅÚÚÚî»´¸¸¸±´±±±±±­­ªªª§§ªª±¸¾¾»Â¾¾ÂÂÂÂÂÂÂÂÅÅÅÅÉÅÅÅÉÉÅÉÂÅž¾»´¸´´´±­±´¸¸´¸¾¾¸¾¸´±ªœ™–’’’’–’’‹‹‹‹‹……‹ˆ‹–––™™£™™œ£–£ œˆ…’ˆ–™–™–™–––’’’’™™™œ §§£ªª­§ª§ª£§§  œ™–‹ˆ~zz~zzztt~……‹ˆˆˆz‹‹ˆˆ‹……~~~~zzwzzz~z~~~~~zzttppmpw~ˆˆˆ……zzti_f\c_c_U_Rcc_XXUNKGAD:=K=:====AADKNNNNKDDAA=:::==:606D,=%"%0%™™™™)™™™™ +%,06AGXcUU_mimfXXXXXX\\_cffcfc_\c\_\\X_R_cc_ciitipmc\_XXXXXUUX\UXRRRNNKUKGDGRfAAA:=:=::6AAA===A=::::==:::==DDKKN\_mptwz~ˆˆ‹‹ˆˆˆˆˆˆ‹‹‹ˆzwttpimmpmmifffffiiifc_c______fmtttwwwwww~~…ˆ…ˆˆ‹‹‹‹‹ˆ…ˆ…ˆ……ˆˆˆtpttzz~~~zttptpppptwwwwzwwzzz~……‹  ª±±­¸¸´¸¸¸¸¸´¸´´´±´±´´¸¸ª££  œ££§£§§£££££§£§££  œœœ œ££ œ£ªª­±­ªª§££§ §£§£§ªª±´»¾¾ÂÅÂÌÏÏàÚÝÝÚÚÖÖÓÏÏÌÌÏÌÏÉÏÉÏÌÌÌÌÖÚÚÚààäàÝÚÚÓÓÏÏÓÓÓÓÓÓÏÓÏÏÏÌÌÏÏÌÉÉÌÉÌÌÌÅÉÅÅÂÅž¸±¸±ªªœ£  ™œ™–™™––™™–––™œœ££ §ª§§§§£§§ª±±±´»»´¾¸´»´¾»ÅÅÅÅÉÌÌÂÏÿõõõõ¾»»»´¸´´±´±±±±­­ªª­ªª£ªª´¸¾¾»¾Â¾Â¾ÂÅÉÉÉÉÉÅÅÉÅÉÉÅÂÅ»»¸¸¸±´±­±±´´´¸»¾»¾´´´§œ™––’’’’’‹‹ˆˆ‹ˆ‹…‹‹’’–™™ œœ™£– ™ ˆ’ˆ’’’–™––™™––™–’–’’–™™™ §££ªªªªª§ª§§§  ™™’‹…~wz~zzzppz~~‹…‹‹z‹‹‹‹‹……~~z~z~~w~z~~~~zwwpppmmmwz………wwmf\c_c___X_Ucc\XUURNKDD6:K=:=====DDGKNNNKGDAA==:=AA=:6,D)A%"%0" +™™™™™™™™™™™™%)0:DR\fUUmpiiiX\\X\\\\_cffccc__c_\\_UcRc_f\fffpfmi\\_XXXXXXX\\U\RRUNNNXK_GKNiA=DA:::66:DD==AA=A::==AA=A=AAGDGKNX\ptpw~~ˆ‹‹‹‹‹‹ˆ‹ˆ‹‹ˆ…~ztwpmmppppmimiiimmmifcfccc__cfppttwwwzww~z…ˆˆˆ‹‹ˆˆˆ………ˆˆˆˆˆˆˆppptzw………zwwpttpwwwzz~z~zz~wz…ˆ’™ £§­´´±¸¸¸»»»¸»¸»»¸¸´¸´¸¸»»ª§££œ £££§§§§£££ §££§£££    œ  œ™£§§­±ª­§§££§£££££§ª­´¸¾ÂÂÅÅÉÏÌÚàÝÝÝÚÚÖÓÓÓÏÌÌÏÌÏÌÌÌÌÌÉÏÌÖÚÚÝààäààäÝÚÓÖÖÓÖÖÓÓÓÓÏÓÓÓÏÏÏÓÏÌÌÌÌÌÌÌÉÅÉÅÂÅÅ»¸´´±­ª £  œ™™––––’––’–––™™£££ªª§§ªª§§ª§­´­±»¸¸»¸´¸´»¸ÂÅÅÉÌÏÏÂÿÿõøøø¾¾´¸´´±´±´±±­±­­ªªª­ª£­ª±´¾¾»ÂÅÅžÅÂÉÉÉÅÉÅÅÉÅÉž¾»¾¸´¸´´±­±­±±´¸¸»¸»§±´£œ™’–‹‹‹ˆˆ~‹ˆˆˆ‹‹‹’’™™£œ ™£–œ–œ‹‹‹–’ˆ–’–™™™™–™–™™–’’–‹‹’–™™œœ§££ª­ª­­§ªª£§ œ™–‹~zw~zzzmp~~~ˆ~ˆˆzˆ‹ˆˆ…~~~~~~~zzzz~~ztwtppmmmtwtwic\_c___c\_Xf_XXXUURNDD6:K=:::==AADDGRNNKGDA===:ADDA=:,A)=%%%,™™™™™™™™™™™™f")0:GpttXpppmiiX\\\\__\_ciifcc___\\\_UcUc_c\ficm_im_\\\\\X\\\X\U\UUXRRRUNcfNKiDDDD=:=:66ADAADDAA==AAADDGADDGKKNN\_pttz~ˆ‹‹ˆˆ‹‹‹ˆ……~wwptttttmmpmmmpmmiiffffc__ffptpttwwzwzzz……‹ˆˆˆ‹ˆ…………ˆˆˆˆ‹ˆˆppptwz…………………ˆzzwtwwwzz~~~~~‹’œ £§ª±´´±»»¸¾¾»»»»¾¾¸»¸»»¸»»¾§ª§£   §§£§ª§£££ £  ££ £œ£££    ™ £§ª­ª­ª§§§££§£§§§­±´»¾¾ÅÉÌÌÌÓÝÝÝÝÚÚÖÓÓÓÏÌÌÉÌÌÏÏÌÉÌÌÌÏÏÖÚÝààääääçàÝÝÚÚÖÖÖÓÖÓÖÏÖÓÓÓÏÓÏÏÌÌÌÏÏÏÌÌÅÉÉÅÅ»´´´±±ª  £ œ™™’’’’’’’’’’–™– §£ª§§ªªªª§ª§­±±´¸¸´»¸´´´¸¸¾ÉÉÌÏÏÓÏÿÿüøøë»»´´¸´­±±±­±±±­ªªªª­ª§ª±´¸»»»ÂžÅ¾¾ÅÂÉÉÉÉÉÉÉÉÅž»¾¾»Â»¾¸´¸´´´±±­­­´´±¸´±§­– ™™’’‹‹‹‹‹‹ˆ‹‹ˆˆˆ~‹ˆ……‹‹‹’’™™£œ ™£–œ™™‹ˆ‹…™–ˆ–’™œœœ™™œ–œ™’–’–‹ˆ’–™™ œ£§§§ªªª­ª­§££ œ–’‹‹ˆzww~z~zipzzzˆ~ˆ‹~‹…ˆ‹…………~~~~zzwzz~zztttpppmmpwz~~~~ttf_\_____c__\f_XXXUXRNGD==K=::=:ADADDGNRNKGAA==:=DDAAA=,=%"%%))™™™™™™™™™™™™™\)3=Ntww\tmpmmm\\_\____cciifff___\\X_XfX_cc_cf_i\cmc\\\\\\\_X\XXXXXXUUUURfiRNmRGGG=AA=:6DGDDDGDDAAAGKKKNNNNKNKRRXcptw~~…ˆ‹‹‹ˆ‹’’ˆˆˆ…~ztwwwwwpptppmmmmiiifiifc_fimppttwwzzzz~ˆ…‹ˆˆˆ‹…………ˆˆˆ…‹ˆˆppptwz……ˆ……ˆˆ…ˆ……~~zwwwz~~…ˆ…ˆ………§§ª­±­´¸´´»¾»¾¾¾¾¾¾¾Â¾¾»¾¾¾¾¾­§ªª§£  £££§§§£££ £ £££ § £§  œœ ™œœ§§­­­ª£§§§§§§§ªª´´´»ÂÂÉÉÏÓÌÖÝÝÚÝÚÖÓÓÓÓÌÌÌÉÌÌÏÏÌÅÌÌÏÓÓÖÚàààääççëäààÝÝÚÖÚÖÖÖÖÓÚÖÖÓÏÓÓÏÏÏÌÏÓÏÌÉÉÅÅÅɾ¸±´´±­ª££  ™™–’’’’–™œ™££§ªªªªªªª§ªª±­±±´¸±¸´±±±±¸»ÅÉÌÓÓÓÓÿøüçä¾»¸´´´´±±±­­±±­ª§­ªªªªª±´´¸¸»¾Â¾ÅÂÂÂÂÂÂÅÂÉÉÅÉÅÅÅÅž´¸¸»»Â¸»¸´»´´±±±±­±±±­±±­§ª–’––‹‹‹‹‹‹‹ˆˆ……ˆ~…~…ˆ‹ˆ’–’œ™§œ ™£–œ™œ‹œ™œ–’™™™œœ™œœœ’œœ––’–‹‹‹’–™–   §§§ªªª­­ª£££œœ–’ˆ…wzw~zzwipzz~ˆˆˆˆˆˆ‹‹ˆˆ……ˆ…~~zzz~wztwttppmptwwzzzzppi_X_\\___\\_ccUXUXXRRGDAAKA=::=AADGGKRRNNGDA====AD==AA))"")%,"%™™™™ +™™™™™™™™™™™™X)3Azwwzttptpppf_______ffiifffc___\\\Xc\\_c__c_f_cp_\\\\\\\\\\XX\XXXXUUU_cfURpUNKKGGD==AKKGGDGGGAGGKRXURRRRNRNRRXfmtw~~…ˆ‹‹‹’’’’’’‹‹‹ˆ~wzzzzztttppmmiimiiiimffcfimppttwwzzz~~~……ˆ‹ˆ…ˆˆˆ………ˆˆˆ…ˆˆˆpptww~…ˆˆˆˆˆ‹ˆˆˆ……~zz~……‹–‹‹ˆˆ‹™ª­±±´±´¸¸¸¾¾¾¾ÂÂÂÂÂÂÅ»¾Â­§ª§§§££ £££§£ £  £     §  §£ œ  ™  £§±­­ª§­ªª§ª­ª±±¸¸´¾ÅÅÉÏÓÖÓÚÚÝÝÚÚÓÓÓÓÓÌÌÏÌÌÌÏÌÌÉÌÌÏÓÓÖÚäÝàääçççäääààÝÝÝÚÚÚÚÖÚÚÖÓÓÓÖÓÏÌÏÏÏÏÌÏÌÅÉÉÅ»´±´±±­ª££  œœ™–’’‹’’’––œœ£§§ª­§ªªª­§§ª±­­­±¸´´±´´±±¸¸ÂÅÉÖÖÏÓÿàÝÝྻ¸´´´´´±±­­±­­ªªª­­­­­´¸¸»»¾Â¾ÂÅÅžÅÅÅÉÅÉÌÉÅÅÂÅž»´´¸»¾Â»¾»¸¸¸¸´±­­­­±­ª­­ª££–’–’‹‹‹‹‹‹‹‹…ˆ‹ˆ…………ˆ‹…–’–œ™§œ ™£– ™œ§œ œ ™–œœ™ œœ œ™’œ™™–’™–’––™–£œ£§§§­­­­­§   ™™–’ˆ…w~t~zwwimzw~ˆ~…ˆ‹ˆ‹‹‹‹‹…ˆˆ…………~~~~zzzzwztzwtptmptwwwwtwmmfcU\X\\__\X___UXXUURRDGDAK==:=ADDGGKNNRNNGGAAA==AD=A=A,)"")),"%™™™™™™™™™™™™™™™™™™U,3zzwwwwwmwttpi_ccccc_cfiiiffcc__\\XX_XX____c_cccmc_____\\__\\\\XXXXXXXc_iXftXRNNKKGGGDNNKKGNKGKKKNU\XXUUUUURRRciptz~…ˆ‹‹‹ˆ‹––™–’–ˆ……z~~zzwtttmmiiiimiiiimfffimmpptwzwzzz~………ˆˆˆˆˆ…ˆˆˆˆˆ…ˆˆ……ppwzz~…ˆˆˆˆˆ‹ˆ‹ˆ………~…‹‹‹–´±–»±–ª­­±´´¸´¸»¸»¾Â¾ÂÂÅÅÂÅÅÉÅÂÂÅÂÅÅÅ­§ª§£££££   £ £££ £  ££ ££ ££ œœœ™ œ£ª±±­±±±­­¸´¸±´´¾»¾ÂÉÉÏÓÖÚÖÝÝÚÚÚÚÏÏÏÓÏÌÏÏÌÌÌÏÏÌÌÌÏÏÏÓÚÝäààçäççççäçäààààÝÝÝÝÚÚÚÖÖÓÓÓÏÏÌÌÏÓÓÏÓÏÌÉÌ´´­´±±ª§§££ œ™œ–’’ˆ’’–™™™œ§ªª­­ªªª§ª£§ª­±­ª­´±­­´±±´´´¸ÂÅÓÓÏÏÖÖÚÝ»»»¸´´¸´´±´­­±ª­ªªª­­±±»¸»»¾¾¾Â¾ÂÉÅÅÂÅÅÅÅÅÉÉÌÉž»»¸¸»»¾Â¾¾»¸¸¸¸±±±±±ª­­§ª§§  –’‹‹‹‹‹‹‹‹‹ˆˆ‹…ˆˆ…ˆ…ˆ…ˆ’– œ§œ ™£–£­œ­§£§£œ™œ ™£œ™ œ™™œ™™™–œ™’––––™œ œ§££§±­±­ª§  œ™–’‹ˆ…t~t~zzwppzw~ˆ……ˆ‹…ˆ‹‹‹ˆ‹‹………~z~~zzwzwwtzwtttppttwttpwiic_U\XX__\XX_\\RUUUXRRGKDDKA===ADGGGNRRUNRKGA===A=D==:=0%"),)")™™™™™™™™™™™™™™™™™™X,:zwwzzztptpwtmccfcfccffiiifffcc_\\\XXXR_______c_i___________\__XXXX\\\f_f\it\URRNNNNNGRRNKNRNNNNNNX_\\XX\XUUUXfmttzz…ˆ‹ˆ‹ˆ’’’™–’–’’’‹ˆˆ~zzzwwtpttmiimimmiimimiiiimppptwzz~z~…………ˆ…ˆˆ‹ˆˆˆˆˆ………………ttwzz~…ˆ…ˆˆˆ‹ˆˆˆ……………ˆˆ–™¸¸´´»´´±´­±±´¸¸¸¸¸¾»»ÂÅÂÅÅÂÅÅÂÅÉÅÅÅÅÅÅŧ§ª§££ £œ ™ œ       £  £§ ££ œ œœœ™ ª±±±¸´¸¸»»»»»¾»Â¾ÂÅÉÌÓÖÚÖÚÚÝÚÖÚÖÏÏÏÏÌÉÏÌÌÏÌÏÌÌÌÌÏÏÓÖÝààààçäççäëçëçääääÝàÝÝÚÚÝÓÖÓÖÓÏÓÌÌÌÓÓÏÖÏÏÌÉŸ±±±­±§ª§£££œ™™––’ˆ‹’–œœœ ªª­­±­­ª£ª§ª§­­­§ª±±­ª±±­´±±¸¾ÂÏÏÌÏÓÓÓ¸´¸»¸´´´±´±±±±­ª­ªª­­­´´¾»¾¾Â¾»ÂÉÂÅÅÅÅÅÅÉÌÉÉž¾¸¸¸´´»»¾Â¾¾»¸»¸¸´´±­±§ª­§£§§œ™–’‹‹‹‹‹‹‹‹‹‹ˆ‹‹‹ˆˆˆˆˆ…ˆ’‹’’–£ ªœ œ£–±±œ±ª§ª§£œ £œ  œ  ™œœœ™œ–œœ–™™–™œ   £§££´­´­§ª  ™™’’‹‹…wzw~~zwwtt~w~ˆˆ……ˆˆ…‹ˆ‹‹‹ˆ………~…~~~~~zzzzwwtzwwtwtptptppmtfcc_U_UX\_XUX\\XURUUURRKKGDKAAAADGGGKKNURNRKDDA===:D=:3:0%"),,"% +™™™™™™™™™™™™™™™™™™\,Awwtzwwtttmttpcpfcccfiiiiiifffcc_\\XX\Ucccccc_ccm____________cc\\XXXX_ic\\it_UUURRURRNUXUUR\X\RRUR\c__\\_\XXXfmpwww~~…ˆˆˆ‹ˆ’’’’–’–’’‹‹…zzzztttpptmmmmmmimimmmmmmmppptttzz~z~…ˆ……ˆ…ˆˆ‹ˆ‹…ˆˆ………………pttwzzˆˆˆˆˆˆ‹ˆ…………ˆ…ˆ––¸´»»¸¸»¸´´¸±´±¸»»»»¸»¾¾ÅÉÅÂÉÅÅÅÅÅÉÉÉÉÅÉÉÅÅŧ£ª§££œ œœ™œ™œ œ  œ     £ £ œ™œ™™™™ ª±´´»¸»¾¾¾¾¾¾Â¾ÅÂÅÉÓÖÖÚÖÖÚÚÚÚÓÖÓÌÏÌÏÉÅÌÌÌÏÌÏÌÌÉÏÏÏÖÚàÝàààäääääççëçççççàäÝÝÚÝÚÓÖÖÖÓÏÏÌÉÌÓÏÓÖÓÓÏɸ±±±­­ª§££££œœ™’’’‹’‹–œ™ £ªª±±´±­ª§§£ª£­ª­£§£­­ ­´­´±­¸»»ÌÌÉÌÓÓÓ±´´»¸¸´´´´´±±­ªª­ªª±­±¸¸Â¾¾¾¾ÂžÅÉÅÅÅÅÅÅÂÅÉÉÅž¾»¸¸¸´±±¸»¾¾¾¾¾¸»¸»¸´±±´ªª­§£££œ™™‹‹‹‹‹‹‹‹‹‹ˆ‹ˆ‹‹ˆˆˆˆˆ‹––™£ ª  ­­™´´±´­ª­§§ ££ ££ ££œ œ™™œ™™œ™œœ™œ £  §ª £¸´±­£§œœ–™––ˆ…tzz~~zwzwp~zzˆ‹…ˆˆˆˆˆˆ‹‹’‹‹…………z~z~~~z~zzzwzzztttttpppmmpffc\U_RXX_XU\\\XRUUUURRNKGGKAAADGGGKKNRURRRNKGD==:=G==3=0)%,),%" +™™™™™™™™™™™™™™™™™3GRtpwtwwwwmwptftwtciffimmiifffcc__\\\XUcccccciccic___________c_\\\\\\cfc\_ft\XXXUUXUUR_c\\U_\_XXXU_f____c_\\ciptwwz~…ˆ‹‹‹ˆ–’’’–’’‹ˆˆwwwwpppmmppmmppmmmmpmmpppppppptwzz~z~………ˆ…ˆ…‹‹‹‹‹…ˆˆ……ppttz~~…ˆˆˆˆˆˆˆˆˆˆˆ‹ˆ‹’’œœ»¸»¾»»¾¸¸¸»´´´¸¸»»¸¸¸»»ÉÉÅÅÉÅÉÉÅÉÌÉÌÉÉÉÉÅÉÅ­§§£  œœ™™™–™™    œ   œ  œ£œ™–™™–™™ ª±´¸¾»¾ÂÂÂÂÂÂÅÂÅÅÉÌÖÚÚÚÚÚÚÚÖÖÏÓÏÉÏÉÌÌÉÏÏÏÏÌÏÌÌÉÏÓÌÚÚààäàààäàääççëçëçççääÝÝÚÝÚÖÖÓÖÓÏÏÌÉÌÓÏÖÖÓÓÏɾ´­±­­ª§££££ œœ™’‹‹’ˆ–™œ £­±±´¸±­­§ª§­£ª§ª£§ ª± ­±±´­­»»¾ÅÌÉÉÓÖÖ±´´¸¸¸´´¸´´±­­§ª­ªª±±´»»¾Â¾¾¾ÂÂÂÂÅÉÂÉÅÅÅžÅÅÅÂÅ»»»»¸¸´´´¸¸¾¾Â¾»»¾»¾¸¸´±±­­ªª§§ ™œ–‹‹‹‹ˆˆˆˆˆ‹ˆˆ‹ˆˆˆˆ‹ˆ……‹™–’™£œªœœ±±±´¸´´±­­ªª£§§£ ££££ œœœœ™™œ™™œ œœ £œ§ªªœª»¸´­£§œœ™™–’ˆ…tz~~~zz~zp~~~……ˆ‹‹ˆˆ‹ˆ‹’’‹‹ˆˆ……~~~~z~zzzzzzzwwtttmmmmmmfc_\U\NXK_XX\\XXURUUURRRKKGKDDDDGKKKKNUURRURNNGDA:AG=:0=3)%0),%" +™™™™™™™™™™™™™™™™™,:KRpptwtwtwpttwiwwwwmfmmimiifffffcc_\\XUcccccfmfficcc_________fc_\\\_\fif_cfwXXXXXX\X\Ufff_Xc_c\\\Xciccccfc_cfmtwtw~…ˆˆ‹‹‹‹‹’’’’‹‹ˆ……wtwtmppmppppptpmmmppppppppttpttwwz~~~……ˆˆ…ˆˆ‹‹‹‹ˆˆ…ˆ………mmppzz~z………ˆ‹‹‹‹ˆ‹‹‹™–£»¾»¾¾¾¸»»¸¸»¸¸¸»»¸¸´¸´»¾ÉÉÉÅÉÅÅÉÉÌÌÌÉÉÌÉÉÉÉű§§ £ œ ™™–’–™œœœ œœœœ™œ œ ™™–––’–œ ª­´´¾¾ÂÅÅÅÅÅÅÅÅÉÉÏÌÚÝÝÚÚÚÖÖÚÓÌÓÉÉÌÉÉÌÌÏÏÏÏÉÏÌÉÌÓÖÏÚÝàäääääçàäääççëëëçëçäàÝÚÝÖÖÖÓÓÓÏÏÌÉÌÓÓÖÓÏÏÏÉ»±ª±­±­ª££££  ™™’’’‹‹‹––œ£ ±´¸´¸´ª­§ª§­ª­§§§§ §±£±±±´±´¾¾ÂÅÉÉÉÏÖÖ´´´»¸¸¸¸¸±±±­±§ª­­ª±±´¸¸»¾Â¾Â¾ÂÂÅÉÂÅÂÂŻ»»¸»¸¸´¸´»¸¾Â¾¾¾¾¾Â»¸¸±±­­ª§££œ™™–ˆ‹ˆˆˆˆˆ‹ˆ‹‹‹‹…ˆˆˆˆˆˆ’œ–’™§ ­œ§´±´¸´´´´­ªª§§§ª§££££ £   œ™™œ™œœ   ££ ªªªœ­»»¸­£§œœ™–’’‹‹ˆwz~~~~~~~z…ˆˆˆ‹ˆ‹ˆˆ’‹‹ˆ‹……~~~~z~~~zzwwttpmpiiimcf_\U_NUG_UX_\XXRRRRUNRRNKGNGGGDKKKKKNRRUUUURRKGDDDG=6,:6))0%)%™™ +™™™™™™™™™™™™™™3ANR_mptwwttpttwitwwztfpppmmmiffffcc__\XUcccccfpffmfcf__cc_____f_c_\\ciimfcccz\\\\XX\X_Xmiiiifcf___\fmffc_ffcfimtzwz~…ˆˆ‹‹‹‹‹‹ˆˆ‹‹…………~wtwmptpmttptptpppppptptptpttpttwwz~~~……ˆˆˆ‹ˆ‹‹‹‹ˆˆ…ˆ………mmptwzzz…ˆ‹‹‹‹’œœ§¾¾¾Â»»¸¸»¸»»¸´¸¸¸¸´´´´¸»ÅÅÉÉÌÅÉÉÌÉÌÌÉÉÉÉÉÅÅ´ª£££  œ––’’–™™™™œ™™™™™™œœœ––’’’’–œ£§±¸¸ÂÂÅÅÉÅÅÅÅÅÅÌÌÓÚÚààÚÚÚÚÖÖÓÉÏÉÌÌÉÌÏÏÏÓÓÌÌÏÌÌÌÏÖÓÖàäçäääçäàäääçççççëëçääàÝÚÚÖÓÓÓÏÏÏÌÌÌÖÖÖÖÏÏÌŸ´­­ª­ªª£ ££ œ™™’’’‹’’œ £±¸»¸´´­ªª§ª±­­­­§§ ª´­¸´±¸´¸¾¾¾ÂÅÅÉÌÓÓ¸¸¸»¸»¸»»±±±±­ª§­ªª±­´´´´»¾¾ÅÅÂÅÅÂÉÅÅ»¾Â¾¾¾»¸¸¸¸¸´´¸»»¾Â¾¾»¸±±­ª§§££œ™™–‹‹‹‹‹‹‹‹‹‹…‹ˆ‹‹ˆ…‹…’–œ–’™£ ª ª´±´´´±…±­ªª§ª§ª§§§§£££   œœœ™œœœ œ £§£­ª±»»¾»¸±§£™œ™’’’‹…zwz~~~~z~~~…………ˆˆˆ‹ˆˆ‹‹‹‹ˆ…ˆ~~…~~~z~~~ztwppmppiiiicGc_U_RUG_XX\\\XRRRUURRRRRNRGKGGKKKNKRNNUXXURUNKDGDD:3,=3))"3),) +™™™™™™™™™™™™):DNU_pipttptttwwmwzz~wptttppmiifiiffcc_\Xccccffpciifcc_________ccc_\\cmimcf__~\_\_\\\\c\pmmmmiffcccfimiiccfffimmwzwz~……ˆ‹‹‹‹‹‹‹ˆˆˆ………~wtwmtptpttttptppppptwtttttwttttzzw~z~~………ˆˆ‹‹‹‹‹‹ˆ……imptwzww~z~…‹‹‹‹’–  ª»¾¾Â»¸¸¸¸´»¸´´´´¸´´±±´´¸ÂÂÅÅÉÅÉÅÉÉÏÉÉÉÉÅž¸§§§§   –––’’––™–™––™–––™™––’’–’–œ ª±¸»ÅÅÉÉÌÉÉÉÉÂÉÉÌÖÝÝÝàÚÚÖÚÓÓÓÉÏÌÌÌÉÌÌÌÌÓÏÏÏÓÌÌÌÓÖÖÚàäçàäàäàààäääëäçëçëçääàÝÚÚÖÖÓÏÌÏÌÌÏÏÖÚÖÖÓÌÉ´´­±±ª§§£ ££  ™–––––’–’™œ§­»Â»¸´­­ªªª±±­±±ªª£­¸¸»¸»»»Â¾¾ÂÂÅÂÉÉÏÏ»»»»¸»¸»¸´´±­­ª§­ªª­­±­­´¸¾ÂÅÅÂÂÂÂÉÅÅÂÂÅž»¾¾»»»¸»»»¸´¸¸»»¾Âž¸±±­ª£§ £œ–™–’‹’‹‹‹‹‹‹‹’’’‹‹ˆ’–™™   £ª£­±±´´¸´…±­ªªª§£ª§ª§££§ £   œ™œ    ££££ª§¸»¾¾¸¸±£ ™œ––’‹…~…zzw~~~…~~ˆˆˆ……ˆˆˆˆ‹‹ˆ‹…ˆˆ…~…~~~~~~~zptmmmmmififRKf_X\RXG_\\___UURRXXUNUUURURNKKNNNKNNKKRUUUUUNNGDGA660:3)%"6,), +™™™™™™™™™™=GNX\mfppttwwwzwwzz~~ztwwwttpiiiiifffc__\ccfcffpfmfic_c___________c__cpiicf\\z\\\_\\\_c_tppmmmiifffimimmfciiimmpwzz~~……ˆ‹‹‹‹‹‹ˆ‹ˆˆˆ……~ztwppptpwwtwttttpttwwttwtwwtwttzzwz~~~……………ˆ‹ˆ‹ˆˆ………~~~~mipttwzwzz~ˆˆ–’™££­¸»»¾»»¸¸´¸¸¸´¸±´´´±­´±´´Â¾ÉÅÅÉÌÉÉÌÌÉÉÅÉ»´ªªª£  œ™––’’’––’–’’–’’’™–™–’’’’’™ £ª­»ÅÉÌÌÌÏÉÉÉÅÅÉÌÏÖÝàÝÝÚÚÚÖÓÓÏÌÏÌÌÌÌÌÌÌÌÏÓÏÌÏÏÏÏÖÖÖÝàääàäääàääçççëçëëäëëäàÝÝÚÚÖÖÏÏÌÏÏÏÏÓÖÖÚÓÓÉɾ¸¸´±´­ª££ £££ œ–––’’’––––™œ£ª¾Å»¸´ª±­­­±±±´´¸ª§­»¾¾¾¾¾ÂžÂžÅÅÅÉ»»¾¾»¾»»»´´±±­­ªªª§­­­ª­±´»¾ÂÅÂÅÅÅÌÉž¾Â¾»»¾¾»¸´»»»»´¸»¾»¾Âž¸´±±ª§§œ ™–––’’‹‹’’’’–’’’’’’™œœ££ §­£­±­±´´´…­­­­ˆª ˆ£ªª§§§ §   œœœ  ££££££§§»¾¾»´¸­ £™™’–’ˆ…z~t~~…~……ˆ…ˆˆˆˆ…ˆ‹‹‹‹‹‹‹ˆ‹ˆ……………~~~~~~~~z~~zzwmfiiiiiffffRNfc_X\\K_\___\UUURXXXNXXXUUURNKNRRNRNKKNRRUUUNKKGDD:6060,%"60)," +™ + +™™™6AGRX\mfppttwww~zz~z~~~wwwwtttimmiiiffccc_ffffiipiicic__c_c_c_____c__ccmmmff_\~\\\\\\\__\ttpmpmiiiifmmmmppimmmmptwzwz~~…ˆˆ‹‹ˆ‹‹‹ˆˆ‹ˆ…~~~zwwptttwwwwwwttttwtwttttwwwwwwzzz~~~~~………ˆ…ˆ……~~wzzzpmptwwwwzz~……’™–œ£§±´»¸»¸¸´¸¸¸´´´´´±±±±±±´´¸¾ÂÅÅÉÉÉÌÌÌÌÌÉÉž¾¾¾¸±­­ª£ œ™––’’’’‹’’’––––’–’––™ §­±»ÉÌÏÏÏÓÌÉÌÅÅÅÏÓÚàààÝÚÚÚÓÏÏÌÌÏÏÌÉÌÌÉÌÌÌÓÏÏÏÏÓÓÖÖÝààäàààäààäääëëëëëëçîëçäàÝÚÚÖÓÏÏÌÏÏÏÓÖÖÓÖÏÏÌÉ»»´¸¸¸±ª§£££§£ œ™’™––’–™–™™œ ªª¾É¾»´­­ªªª­±´´¸¾Â¾ÅÅÉÂÂÂÂÅÉÅÂÅŪ»´Â»Å¸¸»»»»¸»»¸¸´±­­ªª­§­­­­±±´¸ÂÂÂÅÂÅÉÉÉž¾Â¾»¾¾»»»¸»»»»¸¸»¾¾¾¾Â¾¾Åž¸´´±­£§ œ™–’’’’’––’––’–’’‹–’––™™™ § £±§­±±±±±±……ªªªˆ§£ˆ ª§£§££§£  œ œ ££££§£££§¾¾»¸±´ª §™–’–’‹‹……~zzw~……ˆ…~………ˆˆ………‹ˆ‹‹ˆˆˆˆ…ˆ…zzzt~zzzzwzzwwticcfffccccfRKc_c__\Nc____\XXUU\XXX\XXXXXURNRRNNNKGKKNURRRNKGGAD63,300)%30))""™™™:DKR\\mimmpwwwz~~~~~~~~zttwtttmpimfmifccccffffmmpiffif______fc_c_c__cc_iiiccc\z\\\\_\\_\_tppmmmmmmmippmpttpmmmmptwwww~z~…ˆˆˆˆˆ‹‹ˆ‹ˆˆ…~…~~zzttpttwzwtwttwtwwwwwwtwwwwwwzzzzzz~z~~~…………~~~ztwzz~ppttwtzw~~~…ˆ–’™™ £§±´¸¸»´¸´¸¸¸´´´´±±­±­­±´¸´Â¾ÂÅÉÅÌÌÌÉÌÉÌÅž»»¸±­­§£œ™–––‹‹ˆ‹’–’’–’’––™œ£ª­´»ÌÏÓÓÓÏÌÌÌÉÅÉÖÚÝààààÖÚÚÖÓÓÌÌÏÏÌÉÏÉÉÌÉÌÏÏÏÓÓÓÓÚÝàääçääàààààääççëççëëëëëçäàÝÝÚÖÓÓÏÓÏÓÓÖÖÖÖÏÏÌɾ»¸»»¸´­§§£££   œ–™™–’™™’™œ £­´»Å¾´±±ª­ª­­´´¾ÅÅÅÉÌÌÉÉÅÅÉÌÅÅŪ´´±¸¸´´¸¸»¸´»¸¸¸¸´­­§­­ª­ª­­´­¸»¾ÂÅÅÅÅÉÌÉž¾Â¾¾¾Â¾¾¸¸¸»»¾»¸¾¾»Â¾Âž»´´­­§§£ ™––’’’’’’™™™––’’–’–––‹™––™™–œœ§£§±ªª±­­­ª­ª…§§ªˆ§£ˆœª£££ £££  œ  œ£££££££§Â»»»´±§££™™’–’‹‹………~~z~…ˆ……ˆˆ…~………ˆ………‹…‹‹ˆ‹ˆ…~~~~pwwpwwwwwtwwppmc_________cNNRUfcc_Xc_ccc_\UUXX\\\\\X\XUXRNNNKKNGGGGKRNNRNKDD=A6300,3))0,,%%""""""™™=DNRX\iipmpwww~~~~~~~~tptttpppiiiiiifcccfffimppmcfiicccc__ffcc____c_cffi_c_\w\_\_c\\\\_pmmppmppppmmppppwtpmpmpttwwtzzz~…ˆˆ…ˆˆˆˆ‹‹’ˆˆ………~……~~wtpttwwwtwtwwttwwzzwwwwwwwwzzzzzzzz~~~~zzz~tptwwztttwzwzz~…ˆ‹’–™–œœ£§§­´´´¸¸´´´´¸¸±±±´±±­ªª­±´±ÂÂÂÂÅÉÌÌÌÏÏÌÌÉÅ»»¸¸±ªª£ ™–’’’‹‹‹‹…‹…‹‹‹’–’–––™™œ §­´¸ÉÌÏÓÓÓÓÏÌÌÌÅÌÚÝàààààÖÖÖÖÓÓÏÏÏÌÌÉÏÉÌÏÌÏÏÏÏÓÓÓÖÚàäçççäàààäààäççëëëëëëëëëççäààÝÚÖÖÓÓÓÓÖÓÓÚÖÓÌÌž¾¸¾¾»´±ªª§§£   ™™œœ™–™œœœ£§§±¾¾Â¾±­­­ªª­±´»ÂÉÌÉÌÏÏÌÌÉÌÌÏÅÅÉÅ­±´´´´±´´¸»§£»¸¸´´´ªª§±­­­­±±±±¸»Â¾ÅÅÅÉÉÌɾ¾Â¾»Â¾¸»»¾¾¾¾»»¾¾Â¾ÂÂÅ»»´±ª±ª§§ œ™™’’’’’’œœ™™™––™’––™œœ™œ™™œ™™£§ª­­§±ªªª§  £œ §§§£ˆ™§££££ ££œ œ   §§£§££§§¾Â»¾»´±§££œ™’’’ˆ‹ˆ………~~ˆˆˆˆ‹‹……~~……ˆˆ…………ˆˆ‹‹‹ˆ…~~~~wwtppptmmtpttptpmccc_\X\\\\XX_KKRUiffc___ccc_\UXUX_\_\_\_XXXRKKKKGKGDDDGNKNNKG=A:=3033,0)),))%%%%%%""""%"%™ +:AGNUX\fimmmwwtz~~~~zwtwpppppimmfimfffcfifmppmmcciicccfccccc___c____ccf_f__w\\\__\\\\\miimmmmptpppttttwwtppptttwwtwzz~ˆˆˆˆ……ˆ‹’ˆ‹ˆˆˆ~……~wwtptwzwtwwwwwwtwwzzwwzwwwwzzz~zz~~~~~~w~~ztwwzpmpttwttwzwz~z……ˆ’™™œ  £§ªª­´±¸¸¸±´¸´¸¸±´±±±±­ª§­­¸­¾ÅÂÅÂÉÌÌÏÏÏÏÌϾ»»±´±§§ œ––’’’’‹ˆ‹ˆ‹ˆˆ…ˆ‹ˆ‹’’’’––™œœ£ª±¸»ÌÌÓÓÖÓÏÏÌÌÌÉÌÝààààÝàÖÖÖÓÏÓÏÏÏÏÌÌÓÉÏÌÉÏÏÏÏÓÓÖÖÝääçççäääàäàääëçëëëëëëîëëççäàäàÚÚÚÓÖÖÖÓÖÖÚÖÖÏÏÅ»¾»¾¾»¸±ªª£§§£  ™™œœœ™œœ  ª­­´Â»±­­ª­ª­±´¾ÌÌÏÌÏÓÓÏÏÌÏÏÓÌÅÌÉÅ´±´´´±±±¸¸§£¸¸¸´±±§ªª­­±ª±±­±´¸¾¾ÂÉÂÅÉÅÌÅž¾Â¾Âž¾»Â¾¾¾¾¾Âž¾¾Â¾¸¸±­­­ª§§ œ™™’’’’–’–’  œœ™™™™–™–œœ™™ –™ œ™§ª­­ª£­§§§œ œ…œ §££ ˆ£–§££§££££œ   £ §§§ª£¸ª¾¾Â»¾¸±´£  œ–‹’’ˆ‹ˆ…………~~ˆˆˆ‹ˆˆˆ………ˆ……………‹‹ˆ……~~zzzwtmpmpimmpmimmpmc_X__XUUXUXXX\KKNRfiffc_cfcf_\XXXX_Xc_c__U\URGGGGGGDAA=)%:KK==:=6:0330,,)),))))))))%%%)"")))™)6=DKNUX_cfmmmtwtwzzz~z~zwtwmtpptimmiiififfiffmtmipccffcccccccccccc___c__cccc_\z\_\\_\\\\\ifiimmptttptwwwwzzwttttptwtwww~~ˆ…ˆ………ˆ‹‹ˆ‹‹……~~zwwptwzwwzwwzzzpwwzzwwzzzwwzzz~z~~~z~wzwzwwpttwmmmmmtwwz~z~……ˆˆ’’™œœ ££§ª­­­±±¸´¸´´´´´´±±­±­­±­ª­±´±¾ÂÂÅÅÉÌÌÌÏÏÏÏϾ¾¸¸±±­££™––’’ˆˆˆˆ‹…ˆˆˆ‹ˆˆ‹’’–––œœ §­­»¾ÏÌÓÓÓÓÏÏÌÌÉÌÏÝààààÝÝÖÖÖÓÏÓÏÏÓÓÏÌÓÉÓÌÌÏÏÓÏÏÖÖÚàääçäçäääääààäëçëîëëëëîëëçççääàÚÝÚÓÚÚÚÚÚÚÚÚÖÓÓ¾¾¾»»¸´±­­§§§££ œœœœ œ  ££­±±¸Â¸±±±­ª­±¾ÉÌÏÏÓÏÓÓÖÓÓÏÓÓÓÏÌÌÌÉ´´±´´±±±¸´ª§´´¸±­±§ª­ª±±­±±­´¸¸¾»ÂžÉÉÉÉÉÅž¾ž¾ÂÂÅž¾¾¾¾»»¸±­ªª§§££œœ™’’’’’’’–– £œœœœ™–™–™œ œ™£–™£  ª§ªª§£ª£  –œ™œ £  œˆ ™££££££ £    £œ£§ª±¸»ª¾»¾¸¾»­± £œ™’ˆ‹ˆˆˆ…ˆˆ…ˆˆ‹‹ˆˆˆ~……………zˆˆ…zzzwztpipimfiimiiifiiXXU\\NRNUUUXXUNKKNRfcffcfifc\_\X\X\\_cc\\XXUNGGGGGDA=:6)%600,,0:33,30,0))))))))))))))),%%),0,:AGKRU\_cfmmmtwwtwww~~wzwtpwmpmppiiiiiiiifiiiimpifmccfccccccccfcccfc_c_c___cc__z\\\\_\\\\\fcffmpptttttwzwwzwzwwtppwwwwwz~~…………………ˆˆˆ‹‹’ˆ‹ˆˆ…~~z~zwptwwzwzzzzzzwwwzzzzzzzzwz~~~~~z~~~zwwttwtppppiifmipzz~~…………‹‹’–œœ  £§§ªª­­±±±´±´±±´´´¸´±±±­­­­­­­´´»ÂÂÂÅÉÉÏÌÏÏÏÌÉ´´­­ª££œ™’’’‹ˆˆˆ‹ˆ………ˆˆˆˆ‹‹’––™œœ£§­ª»ÂÌÏÏÓÏÏÏÏÏÌÉÌÏÝààààÝÝÚÖÖÓÓÓÓÏÏÓÓÏÓÌÓÏÏÓÏÓÏÓÖÖÖäçäççççääçääàççëîëëëçëîçëçäçàäàÝàÝÚÝÚÚÝÚÚÚÚÖÏÓž¸¸¸´­±­§££   œœ     £§§±´´¸¾Â¾¸±±´±­­´ÉÌÓÓÓÖÓÏÖÖÖÖÓÖÓÖÓÏÏÌÉ»´´±´±±´¸±­£´´´±­­ªª­­­±±±±±±¸»Â¾ÂÉÂÉÅÅÌÉɞ»ÅÅÅÂÂÉž¾Â¾¾¾Â»»»´­ª§ª£§££œœœ––’’–’’’™™œ£ œ œ–––’œ™œœœ£œœ§ £§œ§§§’  ™––™–™œ œœ–™œœ  ££££œ   £ £ £§­´»¸ª¾¾Â¸¾»£´  ™–‹‹‹ˆˆˆ‹ˆ…ˆ…ˆˆ‹‹……z~……………zˆ…~~wz~wzwpmmmmfiicfiiff_UURUXNNRRRRUUUNKGKRc_ccfiiic__\\\\X\_c_XXXNRKDGDDD==:,)))0,,,,,,0,)0,,,)))),,,,,,,,,,,0)),33%6=DGNRU\_cfmmmpttpttw~~ztwwttwmpmmmmiiiimimifiiimtifmfficfcccfccccccc_c___c_____cw_\\\\\\\\\ccffmptttwttwzwwzwztttmtwzwzw~~zˆ……ˆ…ˆˆˆˆ‹‹‹‹ˆ…~z~zztwzwwzzwzz~zztwwwwwwzzzzzz~~~z~~zzwtpttpmimmfffiip~~…ˆˆ‹’–– ££§§§ª­ª­­±±±´±±­´±´´´±±±±­­­ª­­±´´¸ÅÂÂÅÉÌÏÏÏÏÌÉÉž­±­ª£££œ™–’’ˆˆˆˆˆ…………ˆˆˆˆˆ‹’––™œ  §­ª»ÂÉÏÌÓÏÏÏÏÌÌÉÏÓÝàààààÝÚÖÓÏÓÏÏÓÓÓÓÓÓÏÓÓÓÓÓÓÓÓÖÓÖäçäççççääçäçàççëëëëççëëäççàäàäàààÚÝÝÝÝàÝÚÚÚÚÓÖÏž»´±¸±±­ªª§§   œ œ    §ªª±±¸¸¾Â»»´´´¸¸±ÅÌÏÖÖÓÖÖÓÖÖÖÖÖÓÓÖÖÓÏÉɾ´±´´±´´¸±±£´¸´±­­ª­­­±­±±±´´¸¾ÂÂÅÉÅÉÉÉÌÉÉž¾ÅÅÂÅÅÉÉž¾¾¾Â¾¾¾Â»¸¸´ªªªª£§££  œ™––’––’œœœ  œœœ–™––œœ œœ£  §£§£œ§œ£’œ™™’’’…–™  œ™™™œ™  £  ™£  £££££ª±¸¸¸»¾¾¾»»»£±£œ––‹‹‹ˆˆˆ‹ˆˆˆˆˆˆ‹‹ˆˆ……~z……~………zˆˆ…z~zzzzwwtpmmiiiififfcXUUNRUNNRNNRURRKNKKN_R__ffiffc__\X\UX\_\XUUNNGDDDDA::0,)))0)))))))),,,,0,,,,,,,,,,,,,0,0,,06:):ADKNRU\\fcimmpppptttzzwttwwwwppmmmmmimimiimimiimwiiifmiffffffcccccfc_c_____c__cct_\\\\\\\\\c_fimmptwtwwwzwwzwzttppptwwzz~~…ˆ…………ˆ‹‹ˆˆzzzzzwzwzzzzwzz~z~wwwwwwwwzwzzz~~~~zwwtttttpmimmccciim…ˆ‹‹’’–™œ£§§ªªª­±­±­±±´±´±ª´´±´±±±±­±­­­­±±´´¸ÂÂÅÅÉÌÏÉÏÏÌÅžªªª§§£ œ™–’‹‹…ˆˆ…………………ˆˆˆˆ‹‹’’’–œ œ£­­»ÅÉÌÌÓÏÌÏÌÌÌÌÌÓÝàààààÝÝÖÖÏÓÏÏÓÓÓÖÖÓÓÓÖÓÖÖÓÏÓÓÖÖàçäçäççäääääàçëëçëëççççäççàäàäààÝÝàààÝàÝÝÝÝÚÓÖÓÅ»´±´±´ªª§§§  £ £œ   £§ªª­´´¸Â»»¸´¸»»¾ÉÌÓÚÖÖÖÖÖÖÖÖÖÖÖÓÓÖÓÏÅÅ´´±´±´´¸±´§´¸±±±±§­±­±­±±±±¸»»Â¾ÉÉÉÅÉÅÉÉÉÅÅ޾ÅÅÅÉÉÉÉž¾Â¾¾Â¾¾¾¾¾»´´±­­ªª§§££   –™–’––’ œœ œ™™œ™––™œ £  £££§£§£œ§œ ™’–ˆ’œ ™™™’œœ£  œ –£  ££§§ª­´¸´ »»Â»»¸»£­£–’‹…‹‹‹…ˆˆˆ‹‹‹ˆˆˆˆ~‹…~………………zˆˆ……z~~zwwzwtpmimmiiicc\\RRNNNNNNRNRRNRNNNKNUNU\fcifccc\\UXKUXNXUNRNKGGDDA=63,,))),)))))))))),,0)0)),,,,00000,03003DK3=DGKNUX_cicimmppppttttwwttwwzwtpmmmmmimimiiimmmmpztifipffffcccccccccc_______cc__ft__\\\\\\\\_cffmptwwwtwzwwwwwwtpppppwwz~~…………ˆˆ’’‹……zzzzzwwwzzzztzz~zzwwwwwwwwzwzz~~~~~zwwttttpppiiiifcciip……ˆ‹‹’––™œ §ªª­­­­±­±±±±´´´±­±±±±­±­±ª­±­­­±­±´»¾ÂÂÂÅÉÉÉÌÉÌž»§ª§§££ ™–––ˆ‹ˆˆ……ˆ…………ˆˆ…ˆ‹ˆ‹’’–œœ™£­­¸ÂÅÉÌÏÌÌÌÉÌÌÌÌÓÝààààààÝÝÖÓÖÓÓÏÓÓÖÖÓÓÓÖÖÓÖÏÓÓÓÖÚàçäçäçäääàääàäëëçëëçäççççäàäàääÝÝàààäàààààÝÚÓÖÓÅÅ»´±±±´­ªªª££     £  £§§§ª´´´¾Â»»»¸»¾¾ÂÅÉÓÚÖÖÚÖÖÚÖÖÓÖÖÓÓÖÓӾ¾¸¸¸¸´´´¸­´§´´±±±±§±­±±±´´±´´»¾ÅÂÅÅÉÉÉÉÉÉÅÅÅÉžÂÂÂÅÉÉÉÅÉÉž¾¾¾¾»¾¾»»»»»¸±±­­­ª§£££§££ œœ–™–’–– œ œ™–’™–’’™œ £££§§§§§£ ™§™œ‹ˆ‹’‹ˆ……‹™œ–™™–œ™  œ™œ–   ££§ª­±¸¸´ ¸»Â»»´¸§­ –ˆ‹‹‹……ˆˆ‹‹ˆ…ˆ‹…~‹…~~~……………z…ˆ…~~~~zz~zwtmmmmiifcc\_NNNNNNNNNKRNRRKNNKRURUNfcfc___XXUUNUUNURKNKGDDAA=::0,,,)),%%%%%%))))),,,,,,,,,,,0000,,0336GR:ADKNRUfimipmmmppppttttwwwwwwzwwtpmmmmmmmpmiiimmmpwwmimtifffccccccfcccc__cc__c_c_ct_c\\\\\\\\\_cfittzwzwwzwwwwtwwttpttzwz…………………ˆ’’ˆˆ…zzzzzwwwwwzwtzz~zzwwwwwtwwwwww~z~z~wtwtpppppmiififcciip~~…‹’–™œœ££§­­±±­­±±´±´´´´´±­­±­±­±±­­ª­­±ª­­´¸¸¾ÅÅÅÅÅÅÅÉÉɾ¸¸ªªª£££ œ™–’‹‹‹ˆ……ˆ…………ˆˆˆˆ‹ˆ’–™™œ£ªª´¾ÅÉÌÏÉÉÌÉÉÉÉÌÓÖààààààààÚÖÖÖÖÓÖÓÓÖÓÓÏÓÓÏÓÓÓÓÖÓÖÝäàäççääàààäààçëççëççççççäàäààäÝàäàääàäààäàÚÖÚÖÂɸ´±­´´±­ªª§£££   £   £§§ª±´¸¾Â¾»¾¾»¾»»¾ÂÅÏÚÚÖÝÖÖÚÖÓÓÖÓÓÓÖÏϾ»»»»¸¸¸¸¸­´ª´´±±­±±´­´´±´´±¸¸¾ÂÅÅÉÉÉÅÅÉÉÉÅÅÂÉÅÂÂÂÂÂÉÉÉÉÌÅž¾»»¸¾»¾¸¸¸¸¸±±±­­ª§§§££§§£ œœ  œ££ œ ™™–’–’’––œ  ££§§§§§£œ™£™™ˆ…ˆ‹ˆ‹‹ˆ……ˆ–™’™œ™œ–œ ™–™–  ££§ª­±´»¸¸ »¾¾¾¸´´ª­ ™’’‹‹ˆ‹ˆ……ˆˆˆ…ˆ~ˆz~~………………zˆ……~~zz~~zwpppmmmicccf_NNNNNNNNNKNNNRKRKNNRNRNccR_\__UUUUKUNNRDGNKDGA==:6600,,),6%%%%%)))))))),,,,,,,,,0000),036:KU=KURRffimpttppmpppttttwwwwwzzzzzwmpmmpmppmmiiimpmptzpmitiiffffcccccccc_____cc__c_ct__\\\\\\\\\__ciptzzzwwzzwttwzwwttttwtz~………ˆˆ‹‹’‹ˆ‹~zz~zwwzwttwttzz~zzzwwwwttttwwwzz~~z~tpwptpmpmiiffffcfimm~zz~‹’’™œ£ §§§­­­±±­­±´±´´´´±´±ª­ª­­­­ª­ª­­­­­­´¸»ÂÂÅÅÂÂÂÂÅÅž¸¸´­§ª££  œœ™’’‹‹ˆ…………………ˆ……ˆ‹‹‹’–™™ §ª±ÂÂÌÉÌÌÉÉÉÉÉÉÏÏÚààààààààÝÚÖÚÖÖÖÖÓÓÓÖÓÏÓÓÖÓÓÓÓÓÖÚääàäääàÝààààäëëçëëëççäääçääÝààÝàààçäääààääÚÚÚÖÏ̸±´±±±±­ªªª§£££œ££££ £££ª­´¸¾Â¾»»¾»»»»»¾»ÌÚÚÖÚÚÖÖÖÓÏÓÏÏÓÓÌ̾»¾¾¾»¸»¸¸±±­±´±±±´´´±¸¸±´¸´¸¸¾ÅÅÂÉÅÉÉÉÅÉÉÉÅÂÉÉÅÅÅÅÅÉÅÅÅÉÉɾ¾¾»¸»¸»´¸¸´´­­±­­ªªªª§§§§§£  ££ §§£ œ’–™’’–œœœ ££££§§ œ™£–™…~…‹ˆ‹‹ˆ…ˆˆ–––™™™™’–œ™–– £££ª­±´¸»¸»¾¾¾¾»¸¸­ªªœ–’–‹‹ˆ‹‹………ˆ…~……~~ˆwzz~…………ˆ……zˆ…ˆz~z~~zttttppmffficNNNNNNNNNKNNNRKRGNNRNURf_R\U_\RRUUGRNNNDGKGADA::63300,,):"""%%%%)%))))))),,,,,,0000)036:=NXANXU_iimptwwptmppptttwwwwzzzz~zzptmpppptimiiipppppzpimtimiffffccccccc____________p__\\\\\\\\\\_cimtz~~zz~~wttwzzwwwttwt~~~~~………ˆ‹ˆ‹’‹ˆ‹~zw~~zzwzwtpwttwzzzzzzzwwwttwtwzzz~zwpwpptppiifffffffimpzwwzzˆ–™ §£ª§ª±­±´±±±±´±¸¸´´´´±­±ª­­­­­­­ª­ªª­­±»»Âž¾¾Âž»¸´¸±§§££  œ™™’’‹‹ˆ………ˆ……ˆ‹‹’–™™ §§´¾¾ÉÅÉÉÉÌÉÉÌÉÌÏÖàààààààààÝÚÝÚÚÚÖÖÓÖÓÓÓÓÓÓÏÏÖÖÖÖÝääààäàÝÚààààäëççëëçççäääçääàäààààääççàààààÝÝÝÖÓÏ»±±´±´±­§­­§£££  £££ £§§ª±±»¾Â»»»»»¸¸¸»´ÉÖÖÓÖÖÖÚÖÓÏÏÏÏÓÓÉɾ¾»¾¾¾¸»¸»¸´±±±´±´±´´´´´¸´´¸´¸»»ÂÅÅÅÂÅÅÅÉÅÅÉÉÂÅÅÉÉÉÉÅÉÉÉÅÅÉɾ»¾¾¸»»´¸´´¸´±ªª­ª­ª§ª§ªªª§ª§££§§£ª§£ œ’––’’‹’’’œ™™œ ££§§§œœ™£––~‹…ˆ‹ˆˆ…‹’’––ˆ–™–™œ™’’™£§§§­±±´´»¸»»»»¾¸»¸±§§œ––‹‹‹ˆˆ………~~~~ˆz~~z……ˆ……zˆ……ˆ………~~z…zzwwwwttpipimfcUNNNNNNNNRNNRKRANRRNURf\NRR\XRKRUGNNRNDGGDAA=:633300,,:"""%%%%%%))))))),,,,,,0000)336:=R\D\_ccmmppptwttpptptttwwwz~zz~~…zzpttppmmpmmiiipptttwpmmpmiiifffffffccccc_______\\\m\\\\\\\\\\__cffpwzz~z~wwwzwzwwwwwzw~…~~~~………‹‹‹‹‹ˆˆ~zw~~zzwwwppttttzwzzzzzwwwtwwtwwz~………~wwtwpppppmifffffffmptmppwwz‹’œœª§­ª­­±±´±´±´´´¸¸¸´´´­­±ª±­­ªª­ª­ªª­ª±´»¾Â¾¾¾»Â¾¸»´¸´ª§£ ££œ–™–’ˆˆˆ…~…ˆ…ˆˆ‹‹–™™ §£´»»ÅÅÉÉÉÉÉÅÉÉÌÌÓÝààààààààÝÝàÝÚÚÖÖÓÖÓÏÖÓÓÓÏÓÖÓÖÚÝààÝàààÝÚÝÝààäëççëççççççäççääàäààäääëçàààäàÝÝÝÖÖÖϸ´´±´´±ªª­ª£ £££§£ £££§ª­±¸¾ÂÅ»»»¸¸¸´´±­ªÓÓÏÏÓÓ֖ÏÏÏÏÏÓÓ¾¾¾¾¾Â¾¾»»¸»¸´´±´´±±­±±´´´¸´±´¸¸»»ÂÅÅÉÅÂÂÅÅÂÅÅÅÅÅÉÉÅÉÉÉÌÅÉÂÅÉŸ¾¾¸»¸´´´±´±­§§ª§­ªª§ª­­ªªªª§§ªª§§ª££œ––’’’’’’™œ–™ ££§££ œ™ ’–z~ˆ…ˆˆˆˆ…‹’’ˆ’–––™™–™ £§§ª´±´±¾¸»¸»¾¾¸¸¸±ª§™–’’‹‹‹………~z~…z~…~…………~ˆ……ˆˆˆ…~…………~zzzwzwttmtmpmiXNNNNNKKNRRNRKRDNRRRRRcXRRU\UNNRUGGNNNDDGD==::6333000,,6"""%%%%%%))))))),,00000333)336:=R_U_cffmpmpptwwttpwptttwwz~~zz~ˆ‹twwmppmmmmmmipptwttmmmmmmmiiifffffccccf________\\m\\\\XXXXX\_cccfpzz~~~~~zzwzzzwwtwwzw~~~……ˆ…‹‹’‹‹ˆ…zzzzzwzttwmmppptwtzwz~zwwtwwwptzz~……~wzwttppmmmifccfffimptifmmmipˆ œª§­­±­±­´´´´´¸´¸¸¸¸±±±±­ª±­­­ª­ª­ªªª­­¸¸¾Â¾¾Â¾»»¾¾»¸¸¸¸±­§££££œ™––‹‹‹……~ˆ……ˆˆˆ‹‹’–™œ §§±¸»¾ÂÉÉÉÉÉÉÉÉÌÌÓÝàààààààààÝÝÝÝÚÚÖÖÓÓÓÖÖÓÖÓÓÖÖÖÚÝÝÝàÝÝÝÝÚÚÝààäçççëçëääççäçççäàääààääçääààäÝÝàÝÚÚÚÓ»¸´­±´´­­­­§£££§§£££§§§ª­±¸»¾Å¾¸»»¸¸±­­ªª§w­ÌÏÏӖÌÏÌÏÌÏϾ¾¾Â¾¾¾¾¾»»¾»´±±±±­­ª­­±±±´±±´¸»¸¾ÂÅÅÅÉžÂÂÅÂÂÅÅÅÉÅÉÉÉÉÉÂÅÂÅÅž¸»»¸¾¸¸´´±±­ªª£ª§ªªªª­­­ªªª­ªª­­ª§ª£§œ™–’’’™™™œ ££§ £œ – –~ˆˆ…ˆ…ˆˆˆˆ’’…’’–’––‹’™œ§ª­­´±´­»¸»»¾»¾¸¸¸´ª£–’’‹‹‹‹‹ˆ………z~~~~~…wz……………~zˆˆˆˆ‹‹ˆ…ˆˆ…~~zzzzwwtpwpppmif_RNKKKRRRRRKUDNNRRRRcXURX\RNKRUKGNNNDAGA=:=66333030,,,)"""%%%%%)))))),,,,00000333)036=AR_Xcfciimmpptwwtwtwpttwwz~~~~…‹‹ˆwwzmmmmmmmmmmpppwptmmmmmmmmiiiiifffffcccccc____\\m_\\\\XXXXX\cfffpww~~~z~~~zwttzww~~~~………………ˆˆ‹‹‹ˆ‹‹…wzwwwtwpptiimmmptpwwwzzzwwwwttwzz~~…zzzwtwtpmpmic_cfffimpt_c\ciipz  §ª­±­±±­±´¸¸´¸¸»¸»¸´´±´­­­­­±ª­­­ªªª±±´¸»¾¾Â¾¾¾»¾»»¸¸»´­ª§§   ™™’’‹‹‹……~~……ˆˆˆ‹‹‹’–– £ªª±¸»¸¾ÉÉÉÉÉÉÌÉÌÌÓÚÝàààààààààÝÝÝÝÚÖÓÓÓÖÓÓÖÖÖÖÖÚÖÚÝÝÚàÝÝÚÚÚÝÝààäçççëççääççäçäçäääàààäàçàääààÚÝÝÚÚÚÝ־ϸ±´´±±±­ª£§§§§§§££ª§ªª­±´»¾Â¾¸»»»¸­ª£§§£w‹§œ§™  ™ÌÉÌ̾¾¾¾¾¾»»¾»´­­§­­ª§ªª­­­±±±´¸»»»ÂÅÂÉžÂÂÂÂÅÂÂÅÅÅÉÅÅÉÂÅÂÅž»»»»»¸¸´´±±­§ª§ª§§ªªª­­±­ªª±­­±’ªª­§£ –––’’’’‹’–––œ §§£££œ – ’’~…ˆ………‹…ˆ…ˆˆ…’–’ˆ’œ™£ª±­´´±ª¸»»¸»»»¸´´´§£–‹ˆˆ‹‹‹…ˆ…~~z~~……wz……………~…~ˆˆˆˆ‹‹ˆ…………~~~z~zzwzwtztttpmif_RUUUURRRUKUDRNRNRN_\XU\XUNNUUNRNNNGDGAA:=:6333333,,,%""%%%%%%)))),,,,,,000003333336=AN_\cffiiippmpwzwztwwttwwz……mp™zwwpmmmmmmmmmpppwppmmmmmmmmmmiiiiifffffccccc_c___i\\\\\XXXXX_ccfimwz……~~z~~~zwtwww~z~~…ˆ………ˆ…ˆˆ‹‹‹‹‹‹…‹ˆ…wztppmmiipffffimpmtttzzzwwttttwwwzz~~wzwttttpppiiccffffimptXX\c_fmwz£§­­±±´´±´´´´¸»¸»¸»¸´¸­±­­±±±±ª­­±­ª­±´¸»¾¾Â¾¾Â¾¾¾»¸¸´¸´­ª§§£ œœ™’’‹ˆˆ~~……ˆ…ˆ‹‹’–– §­­´¸¸»ÂÉÉÌÉÉÉÌÌÌÏÓÚÝàààäàààäàäàÚÝÚÖÓÓÓÖÖÓÖÖÖÖÚÖÖÝÚÝÝÝÝÝÖÚÚÝÝàààäççëççäàççççäçäääàààäàäÝäàààÝÝÝÝÖÚÚÚÖÓ»´´´´±±±­§ªª§§§§§§ªªªªª­±¸»¾¾¸¾»»¸§§ ’’‹w‹™™ ™œ ™§ÉÌÉž¾¾¾¾¾¾»»¸´ªª§ªªª£§§£ª­­­±´´¸¸¸ÅÅÅÉž¾¾¾¾ÂÅÅÂÅÅÅÅž¾Â¾»¾»¸¸´´±­±­ªªªª§§§ªªª­±±­ª´±±±§­­§ œ––––––’ˆ’–––™œ££§§£œ ’œ’~…ˆ………ˆ……ˆ………z‹’……’™™£ª´­´´´±»¸»´¸»¸´±±±§§™‹’…‹‹‹ˆˆˆ…~~~…ˆt~…~~~…~~‹ˆˆˆ‹ˆˆ……~~~~zz~wwwtwtpmmic_\X\X\XUXNUDUKNKNN__XX_UXRNRURURNRKGGDD::=6663630,,,%""%%%%%))))),,,,,,000006336666AAR___ififfppmptztztzzzzww~…ˆ……ˆm‹’™~twmmmmmmmmmmpppwpppmmmmmmmmmiiiiiiiiffffcccccc__i_\\\\XXXXXccfiipz~……ˆ……~~wwtzzt~z~…ˆˆˆˆ‹…‹‹‹ˆˆˆ‹‹ˆˆ……zwtpiiifcic_ccffiimppzzwwtppttwtwwwz~zwwwptptpmmifccffffimptRUX_ccipzzªª­±´´´´´´´´»»»»¸»¸¸´­­±­±±±±­±±­­ª±´¸»¾¾¾¾Â¾¾»»¾¸¸¸´´´­ªª££œœ™™–’‹ˆˆˆ~…ˆ…‹’’™£ª­±´´¸»ÂÅÉÉÉÉÌÉÏÌÓÏÚÚàààààààäàäàÝÚÖÖÓÓÏÖÖÏÖÓÓÖÝÚÚÝÝÝÝÚÚÝÖÝÖÝÝàÝÝäççëçääàääççäääääÝààäààÝàÝÝÝÚÚÚÚÓÚÚÚÚÖÓ´¸¸¸´´´­ª­ªª§§ª§ªªªªªª­­¸¸¾Â»¾»¾´ª£’ˆ‹z…‹’™œ™œ œ £Éž¾¾¾¾¾Â¾»»¸±ª§§ §§ £ £§ªª­­±±´»»ÅÅÅÅÅŻ¾ÅÅÅÂÅž¾¾»Â¾¾Â»¸¾¸¸¸´±±­±±­ªª­ª§ª§§ª±±´±´´´­±£­ª§£œ’–––––‹–’™™™ §ª§£  –œ’’ˆ…‹…………………‹‹z~…z™™£ª±­±±´´»¸»´¸¸´±­ª±£§œ……‹‹‹ˆ……………p~…z…~…~~‹ˆ‹‹‹‹ˆªˆ……~~~ztwtttpmmmfc_c__c_\\RUGUGNRNN\\\X_XXURUUUUURRNKGGA==:6663:00,,)%""%%%%%))))),,,,,,0030333366::AAR___icicimpmppwtzwz~~~tw~ˆˆˆ…im’™zptmmmmmmmmmmttttttppmmmmmmmmmmiiiiiiiifffffcffccf____\\XXXXcfiimtzˆˆˆˆˆ…~zwwtzwtz~z~ˆˆˆ‹‹ˆ‹ˆˆ……‹ˆ…ˆ~zwpmfifc____X_ccfcimmwwttpmpppwwwttwzwtttmpmppmiffccfiifipptRRU\_fiiww~ª­´´´´±¸´¸¸»¸»»¸¸´¸´­±±±´±±±±±­±±­´´¸»¾¾¾¾Â¾»¾¾¾»¸¸´±±±­ª§££œœ™™–‹‹‹ˆ……~~ˆˆˆ‹’–œ£§­±´´»»¾ÅÅÌÌÌÌÌÏÌÏÌÖÖàààààààäääàÝÖÖÖÓÓÏÖÓÓÓÖÓÖÚÚÚÚÝàÚÝÚÚÚÚÚÚÝÝÚàäççççäääçàäçäàäääàààäààÚàÝÝÚÖÚÖÖÖÚÚÚÝÚÖÏ»»¸¸¸¸±­±ªªªªªª­­­­ªªª­´¸¾¾¾¾»»¸­œ‹ˆ…‹~…’™™œœœ œ£­Â¾»¾»¾¾Â»¸¸´­§££ ££œ  £§ª§ªª±­´¾¾ÂÂÂ޾ž»»»¾»»¾¸»»¸¸¸´´±­±±±­­­ªª§ªª­±´´´¸¸´±±‹§­ª§  ’™™’––’’–’™œ™œ–­£££ ’™’–ˆ‹…ˆ……………‹‹~~z~w‹w~–™£§­­­­´¸¸¸»´¸´±ªªª­££œ…’…ˆ‹‹ˆ………………………m~…z~…~~‹ˆˆˆˆ‹‹§‹…~…………~twwwttppmffcffffccfUXKUKNUNN\X\U\\\XUXURUUURRNKG=AA::6:3=03,,)%""%%%%%))))),,,,,,0030633636===AR__cf_icimmimmttwwzzt~~…ˆˆ…ˆˆf’–™wpppmpmmmmmmmttttttpppppmmmmmmmmmiiiiiifffffffcccf______\\\Xffimmpw…ˆ‹ˆ‹ˆˆ…~~zzwwwwtzzz~~…ˆˆˆˆˆ‹‹‹ˆ………ˆ…ˆ~~zttpfic___\\X\\__cffitttpmimmmtttppppppmtpmppmpiiffcffiiipptRRU\\cimtpw­­´´´¸´¸¸»»»¸¸»¸¸±´±±´´´´±±´±´±±´±´¸¸»»¾Â¾Â¾¾¾¾¾¾»¸´´±­ª§££ œ™–––‹‹‹‹ˆ…~~…ˆ‹‹‹’–œ ª±´´¸»¾ÂÉÅÉÌÌÌÏÏÏÓÌÌÖÝààààààäàäàÝÖÖÓÓÖÏÓÏÓÓÓÓÓÚÖÖÚÚÝÝÚÖÚÚÝÖÚÚÝÚàäääääääçäääääàäääàààäààÚÝÚÚÓÖÖÓÓÓÚÚÚÝÝÚÓϾ»¸»¸´±±­­ª­­­­­­­­­­­´´»¾¾Â»»»±………ˆ…‹’––œœœœœ ª»¾»¾¸»»»»¾¸¸´±ª£     œ   £ª§§§±±±¾¾Å¾Åž¾¾¾¾¾Â¾¸¾¾»»»¾¸¸»¸´´´±±ª±±±ª±­ªªªª§­­´´¸¸¸´±±ˆª­§£œ –œ–––’’––’œœ–––­£§  ™–––‹………~…~ˆˆˆz~z~wˆt~z–™ £ª±­±¸´¸¸¸´´´±ªª§­£ œ…’’…‹ˆˆ…ˆˆ…ˆ…~…………i~…z~~~~~……ˆˆˆˆ‹‹£‹ˆ………ˆ‹ˆˆ……~wwwzwtppmiifiiiiffi_\XUNRXRRXX\U_X\XXXURXXXURNKDAAA=::63A30,,,%""%%%%%))))),,,,,,3000633603::=ARcfcc\mfmimmiipttwwwt~……ˆ………ˆ–™wtppppppmmmmmttttttppppppppppmmmmmiiiiiiiifffffffccccc__\\\\fciimtz……ˆ‹ˆˆ……~~zwwwwttzz~~ˆˆˆˆˆ…ˆˆ‹ˆ…ˆ………~~wttmiff___\XX\X\X__cfmppmmimiipttpmpiimmppmppppmiffffiiimmptNRU\_ffitpz­±´¸´¸´¸¸»¸»¸¸»¸´´´´´¸´±±±±´±´±±´´´¸¸»¾¾Â¾Â¾¾¾¾¾¾»»¸±±­ª§£§£ œœ–’’‹‹‹‹ˆ……~………‹‹’–  ­±¸¸»»¾ÅÉÉÉÌÌÌÏÏÏÏÌÌÖÝààààààäàäÝÚÖÖÓÓÓÓÏÏÏÏÏÓÓÚÖÚÚÚÚÚÖÖÚÚÝÚÚÝàÚàääàäääàäääääààääàÝÝÝàÝÝÚÝÚÖÓÖÓÓÓÓÖÚÚÝÚÚÝÖÌ»¾¾¸´´±±­­±­­±±±±­­±±±¸»»¾»»»±…ˆ‹ˆˆ‹™™™™œœœ’§´±¸»´¸¸¸¸»´´ªª   œœœœ œ£££ª§§ª±±­Â»Â¾ÂÅžž¾Â¾¾¾Â¾»¸»»»¸¾¾»¸»¸´´´±­­±´´­±±ª­ªªª­±´¸¸¸¸´±´ˆ­­§£œœ™œ™––’’’–’ ™£––­ ª££œ™™™‹~z…zz~ˆˆˆwzz~w…pzz–™£§§´±±´±¸´´±±´±­­§­£  ™’–’‹ˆˆ…ˆ……ˆ……ˆ…~……iz~~z~……ˆˆˆ‹ˆ‹‹‹ ˆˆ…ˆˆˆ‹ˆ……~zwwwwttmmmmimmmmiimc_\URUXUUUUXU\U\U\XXUX\XURRGDAD=AA:63=000,,%""%%%%%))))),,,,,,00003636036:=ARcifi\pimmiiifptpttt~~z…~…ˆˆˆ…mˆ’–™ttttppppppmmmttttttppppppppppppmmmmmmiiiiiiifffffccccccc___\fcmmpt~……ˆˆˆ…ˆ…~~~ztwtwwwwzz~…ˆˆˆˆ……ˆˆ‹…………zztptiiff\\\XXUXXXX\\_cfimiiiiffmtppppiiimmpmpppppmiifiiiimpttKUU\\cfipp­±±´¸¸¸´¸¸¸¸»»¸»¸´¸¸´´´´´´´±±´´±´´´´´¸¸¾Â¾¾Â¾»¾¾¾»»»´­­ª§§§£ œ™™’’‹ˆ‹ˆ…ˆ……‹‹–££­±¸»¾¾ÂÅÉÉÉÌÉÌÌÌÌÌÉÉÖÝààààààäààÚÚÖÓÖÓÓÓÓÌÌÏÌÏÓÚÖÖÚÖÚÖÖÖÚÖÚÚÚÝàÝààäàäàäÝàààààààääàÝÝàÝÝÝÚÚÚÖÓÓÌÏÏÏÓÖÚÝÚÝàÚÖÉÅÅ»»´´±±±±­±´±±­±­­­§´¸¸»»¸»­………ˆ‹‹‹‹’™™œ™œœœ–ª´±¸´´´¸¸´´±±§ª£   œœœœ £§§­ªª­±´±¾¾¾Â¾Â¾¾¾Å¾¾¾¾Â¾¾¾Â¾»´»»¾¸»»¸¸¸´´´±±±±´´´±´´­±­­­±´¸¸¸¸¸´±´ˆ­ª§ œ™™™™’–’’–––œ–§ ­­œ­§£ ™œ™ˆzz~zw………www~wmzw–œ§§£¸´´´±¸±´±´±±±­§ª§££–’–’…‹ˆˆˆ…ˆˆ……z…f~z~~~z…ˆ‹ˆ–‹‹‹ˆ‹ˆˆ‹‹’’ˆ…ˆ…~zwwwwwwpppmmppppmmmfc_UUXUXXRRXXXRXU\UURU\XXURKDAA=AD:66:30,0)%""%%%%%))))),,,,,,00000336036:=AUfmfmimiimffiippppmt~~ˆ…‹ˆˆim–~wwtttpppppppmttttttttppppppppppmmmmmmmmiiiiiiiffffffffc_____ffmmpwˆ…ˆ……ˆ~~~z~wttpwwwwzz~……ˆ…ˆˆˆˆˆˆ……………zwttpmiff\X\UXUXUXU\\\cffiffiifffpmmppiiimppppmpttpimifiimptttNRUX_cfmmp­­´¸¸¸»´»¸¸¸»»¸»¸´¸´´´´¸´´´±±±´±±´´¸¸¸»»¾»»¾¾»»¾¾»»»¸ª­§£££ œ™™–’‹‹‹ˆ‹‹ˆˆ………………ˆ‹‹’’–£§±´»¾¾ÂÅÉÉÉÉÉÅÌÉÉÉÌÉÅÓÝààààààäààÚÚÖÖÓÓÏÓÏÏÏÌÏÌÓÖÓÖÖÓÚÓÚÓÝÚÚÚÚÚààààäàäàààààÝààààäàäÝààÚÝÝÚÝÖÓÖÏÏÏÏÌÏÖÖÝÚààÝÚÌÉÉž¾¾´´±±´­´´´´±±­±­ª±±¸¸¸¸¸­ˆˆˆ‹‹––™™œœœœ œ­¸±¸¸´´´´±±­­§ª£    œœ™ £§ª±­­­´´±»¾Â¾Â¾Â¾Â¾ž¾»¾¾Â»»¾¾»¸¸»¸»¸»»»´¸¸´´´´±´´¸¸´´¸±±­±­±±¸¸¸´´¸±±…­œ§ œ–™™™–™–’’’–‹ ’ª£­ª™ª§ £œ™–…~z~~z~z………tww~tpwt– §ª£»´´¸±¸´´±¸´´±±§ª£§ ’–’–‹‹…‹…ˆ……~~w~~~~f~~~w~ˆ‹t¾‹´’‹ˆˆ‹‹ˆˆˆ‹‹’’–‹ˆ……zwwwtwtttpppttttpmpfccUXXUUUNNXXURUUXUUNUXXURRNGAA=AG::6660,,,))"%%%%%))))),,,,,,00000333006:=AUipipmmififciimpmmmpz~……ˆ…‹ˆˆm‹‹’zwwwttppppppppttttttttttppppppppmmmmmmmmmiiiiiiiiifffffccccc_fiiptzˆˆ……~wzzzzttppwwwwzz~…ˆˆˆ…ˆˆˆ…………ˆ…~~ztttmpicc\XXXXXXU\X\\\_ccfccfifffmimtpiimmpppppptttppimmmmpwtwNRUX_cimipt±´´¸¸¸¸»»¸¸»»¸»¸¸¸¸´´´¸±´´±±±±±­´´´¸¸»»¾»»¾»¸¸»»»¾¾´­ª£   œ–––’‹‹‹ˆ‹‹ˆˆˆ………ˆ…………ˆ‹‹’’’§ª±¸¾ÂÂÂÉÉÉÅÉÅÉÉÉÅÉÉÉÅÖÝààààààÝààÚÚÖÖÏÏÌÏÓÓÏÏÌÌÏÓÏÓÓÓÚÖÖÖÝÚÚÝÝÝàààääàäàäàààÝààäääääàÝÝÝÝÝÚÚÖÖÓÏÓÏÏÉÏÖÖÝÝäÝàÝÚÌÌÉÅ»¸´´´±±¸¸´´´±±±­ª±¸¸´´´­’‹‹‹’–’™™™œœ  œ£§±´±¸¸´´´±­­ªª£§£ £     £§ª­±±±±´´±»»¾Â»¾¾Â¾»Â¾¾»¾¾»¸»»¸´¸¸¸»»»»¸¸¸¸¸´´´±´¸´»¸¸´±´­´±´´´¸¸±±´´±…ªœ£ œ’™™™™™–’’–™ˆ£’§§’­œ­§£ œ™‹‹…~~~z………………tzwzp~pwt  ªª±»±´´´»¸´´¸´´±±ª§£§œ’–’’ˆ…‹………~~zzw~~z~~f~zzz………ˆXi»¾¸’–ˆ…ˆˆˆˆˆ‹’–––’‹……zzwwtwtwwttttwwwtppcc_UXUURRNNUXURRRXXUNRXURNNKGAAADGA=6663000),%)%%%%)))))00,,,,00300333036:=DRmpmmmiiffffiiimimmmz~~…ˆˆ‹‹ˆˆˆ~zwwwwttppppppptttttttttttpppppppppmmmmmmmmmiiiiiiiiiiffccfcccimmptz…ˆ~~zzwwwwttmttwwwwz~…ˆˆˆ……ˆ………………~zwwwpimicc_XXXXXXU\\\_____f_cfifffifptpimmmppppptttwttppmmmpzwwRRUX__fmitt±¸´¸¸¸¸¸¸¸¸»»»»¸¸´¸´´´´±´´±±±±­±±±´¸»¸»»¸»»¸¸»»¸»»»´ªª§œ£œœ–––’‹‹‹‹‹‹ˆ‹……ˆ……ˆ…………‹ˆ‹’– ªª´»ÂÂÂÅÉÉÉÅÉÉÅÉÅÂÅÉÉÉÖÝÝàààààààÝÝÚÖÖÏÌÉÌÏÏÌÌÌÌÏÓÏÓÓÓÚÚÚÚÝÝÝÝàààààäääääääàäàààäääääàÝÝÚÝÝÖÖÚÖÖÓÏÏÏÉÏÖÖÚÝàÝààÝÓÖÌÉÅž»¸´´´´¸¸¸´´±­±±ª­¸´¸´´­–’™™–œœœ   £ £ª±´±´¸´´±±­±ªª§ª£££££££££ª­­±±´´´´´»»¾¾Â¸Â¾¾¾¸¾¾»»»»»¸»¸»´´´´´¸¸»»¸´¸´¸¸¸¸±¸»´»¸¸´´¸´¸´¸¸¸»»´´¸´±ˆªª£œœ–––™–™’–’–™‹§–ªªªœ­§£ ™–‹ˆ~z~…wˆˆ…ˆpztwmztwp£ª­ª´»´¸´¸»¸´´¸´´±´ª§£§–––‹’’‹…‹…~~wzttzzwzzfzp~~………ˆcp¾¾»´´´……………ˆ’’–––‹……~~wwtwwzwwwwwzwzwtpcc\UXUUKRKNRUUNNNUUURUURNKKGGDA=GGD=A:63033,00,))%%))),063,,,,00003333006:=ARmmmmpifciffiffiimmmz~~~ˆ‹ˆ‹‹ˆ‹…wwwwwwwtttpppppwwwwwwttttttpppppppppmmmmmmmmiiiiiiiiiiiffffffcmmppww~……~z~wwztwwttmptwtwww~~…ˆˆ……ˆ……………zzwwwpimifc_\\\\XXX\_\\____c_cffffffimtpmmimmpmpptwwzwtttppptwwwRRUX\\cifpw±´¸´»¸¸¸¸¸¸»»»»»¸´¸´´±´±±±±±±±­­±±¸´»»»¸¸¸¸¸´»¸»¸¸»´­ªª £ ™™™™’–‹ˆ‹‹‹‹‹ˆˆ‹……ˆˆˆ…ˆ‹ˆ–™£ª­¸¾¾ÂÂÅÉÅÉÉÉÉÅÅÅÅÂÉÉÌÖÚÝàààààäààÝÚÖÓÌÉÉÉÌÌÌÉÏÏÏÏÓÓÖÖÖÖÖÖÝÝÝààääàäçääçääääääääààäääàÝÝÚÝÝÚÚÚÖÖÓÏÏÓÌÏÓÖÚÝàààÝàÖÚÓÌÉž»¸´¸¸¸¸¸´±±±­±­±´´¸´´­™™™œœ™ œ  ££§£§ª­±´´»±¸­±­­­ªªª§££§££§§ª­±±±­±´´´±¸»¾Â¾´Â¾»»´»»¸»¸¸¸¸¸¸»¸±´´´¸¸»»¸¸¸¸»¸´´´»»¸¾¸¸¸¸»¸¸¸´´´»»¸¸¸´´‹’­£œ™––™™––––’™™ˆ§™ª­ªª±£ œ–’‹‹~……ˆw…‹ˆ…~~mwpwiwptp§­ª­¸¸¸»¸´¸¸¸±´¸´±±§§££––’‹’’‹ˆ‹…~zztwppwwtwwfwpzz…~………‹»¾»´´´…~…‹‹’’’’ˆˆˆ~zzwzz~wwwzwzzwwtpcc\XXRRKRKKNRRKDNRUURRRKNGGDGDDAKKK=D=:33030030,,)%,,003:60,0000333333,06:=ARmimimfccfifiiiiimmmz~……‹‹ˆ‹…ˆ…wwwwwwwtttttpppwwzzwwwwwwwtttttppppppppppmmmmmiiiiiiiiiiffffffpmptwt……z~zwtwtttwppptwtwzz~~ˆˆ………………~…zzwwtpmpiffc__\X\X\___\c_c_c_ccffcffmitpppfiimmpptww~wtwwtttwzzzRUXX\\cifm±±´¸´¸»¸»»¸´¸»»»¸´±´±´´´´±´±­­­­±±­´¸¸¸¸¸´´´¸¸¸´¸¸»¸±­ª§  œœ™™™––’‹‹‹‹‹‹ˆˆ‹‹ˆˆˆˆˆˆ‹‹ˆ–œ£ª¸¸¾ÂÅÅÅÉÉÉÌÉÌÉÅÅÅÅÉÅÌÚÝààààààààÝÝÚÓÏÉÉÉÉÌÌÉÅÏÌÌÏÓÓÖÖÓÖÚÚÝÝÝÝàçäàçççääääääçäääààäääàÝàÝàÝÚÝÚÖÚÓÓÓÓÏÏÓÚÝÝàààÝÝÚÝÖÏÌÉÅ»»¸¸¸¸¸¸´´±´±±±´¸´¸¸´­£ œœ œœ  ££££§§ªªª±±¸¸±´±±ª­­ªªªª§§§§§ª§­­±´±ª±¸¸¸­´»»¾»¸¾¾¸¸¸»¸¸¸¸¸´´´¸»´±´´´¸¸»»¸¸¸¸»¸´±¸¸¸»¾»»»»»»»»¸ª´¸¸´¸¸´´ª£œ–’–œ–™’–’–™ˆ§œ§ª‹§­­§ ™™’‹ˆ……ˆˆ‹wˆˆz~pwmtftmim§±§ª´¸»»»¸¸¸¸´±¸´±±£ª£ ™™’’‹ˆztwttmmptmmwitpww~…ˆ‹œ»¸´´´~wz~ˆˆ‹’’‹‹ˆ‹~~zzzzwwwwwzzwwptf_XXUNRNRKGKRRKDNNRUUUNKNKGGKDGKKNNGDAA333630630,,,0366==:30:303633633,36:=ARififmffcfiffmiiimmp~~…ˆ‹‹‹…ˆwzzwwwwwtttttppwwwwwwwwwwwwttttppppppppppppmmmmmiiiiiiiiffffffmmttzt~~wttttttppmtwtwz~~ˆˆ…~~~~~wwwtmmmmiif_c\\\\\__c_f_c_c__cffcffimptppcifiimppww~zwwwwwwwz~~XUXXX\cfc…±±±´´¸»¸¸»´¸¸»»¸´±´´´¸±´±´±±±ª­­­­±´¸¸¸¸¸¸´±´´´´´´¸´­­ª§££  œœœ™™–’–’‹‹‹‹‹‹ˆ‹‹‹ˆˆ‹’œœ§±»»¾ÅÅÅÉÉÉÉÉÉÉÅÅÅÅÂÉÉÓÚÝàààààààäÝÝÖÏÌÅÅÅÉÉÉÉÅÏÌÉÓÓÓÓÖÖÚÝÚÝÝÝÝàääàäçëççääççççççàààäääààààÚÝÝÚÚÚÓÓÖÖÓÓÓÚÝÝÝÝàÝÝÝàÚÏÏÉɾ»¸´¸¸»»¸´´¸´´´¸´¸¸»´±§£     £ £££§§§ªª­­±¸¸±±´­­­ªªª­ªª§ªªªªª±±±´±­´´»»´¸»¾¾¾»Â»»´¸¸´¸´´´¸´´´»¸´´´¸¸»»»¸¸»´¸»¸´»»»¾¾»»»¸»»»¸¸§¸´¸±¸´´±‹§£ –’™œ–™’–’’’–ˆ§œª§ªª­§£–™–ˆ‹……………‹‹wˆ…zzmwmtfpifiª´§ªª¸»¾»»¸¸´±´¸¸´±£ª£ ™–‹…~wpttpimptimwmppwt~~~~……ˆ™’´´´´~ztwtw‹ˆ‹ˆˆ…ˆ…~z~~twwzwzzztmtc_XXRNNKRKGKRRNDNKRUURNNRGKKNGKNNNRNGND=66:6063000336::A:=03=333336663006:=ARfciciccfffiimmmimmm~~…ˆ‹‹…ˆ~z~zzwwwzwwttttpwwzwwwwwwwwwwwwwtttttppppppppppmmmmmiiiiiffffffpmtpzw~~~~~wttwwttptppwtww~………~z~~zz~z~wwwpppppiifcc_\___c_ccf_c____ccccffimmpmmfmffmmppww~~zwwzzww~~~\X\X\Xfcf±±±±´¸¸¸¸¸¸´¸¸¸¸´´´´±¸´´±±­­­­­­±­­´¸¸¸»¸´±´±±´´´±¸±­­ª§£ £    œœ™–™™–’’‹‹ˆ‹ˆ‹’’™£ ª¸¾¾ÂÅÅÅÅÅÉÉÅÉÉÅÂÅÅÅÉÉÖÚÝààààààààÝÚÓÌÉÅÅÅÅÉÉÌÉÌÌÌÏÏÓÖÖÚÚÝÝÝààààääääççççääççäçççàäàäääààààÚÝÚÚÚÚÖÓÓÚÖÖÖÚÚÚÚÚÝÝÚÚÝÚÓÓÏÌž»¸¸»»¸¸±´´¸¸´´´´¸»±­ª§££ ££§£§§§§ªªªª­±±¸´´±´­­­ª­­­­ªªªªªªª­±±±´±´¸»»¸¸¸»»¾¾¾¾¸´´¸´´´±´¸´´¸¸´´´¸»¸»»»¸¸»´¸»¸´¸¾¾Â¾¾¾»»»¸´£¸´´­´±´­ˆ§£œ––œœ™œ––’–’’ˆ§™§œ’ª§­ª£–™–ˆ‹‹ˆˆ…ˆ‹ˆtˆ‹zwiwmtfmi\f­±§ªª¸»Â¾»»´´´¸¸´´±£§£ ––‹‹ˆ~wtmppmiimpfitimmtt~zzw~zˆ´´´´wwpppt~zz…‹…ˆˆ‹………~~~Uwzwzwzzwpip_\XUUKNNRKGKRRNDNGNRXUNRUDNKNKNRNNURKRGA::=:06333366:==A:A:6A336336336033:=ARc_iff__cfiimmpmfimm~~…ˆˆˆ……~zzzzzzwzzzwwtttzwwwzwwwwwwwwwwwttttttttttpppppppppmmmmiiffffffpmwtzz~………~zzwppwwttppttzwwz…~zzwtwz~~~~zwztpppppfifccc____ccccfcc_\__ccccccfmimppipifmmptwzzzzwzzzzwz~~__\X\\fci…±±±´±´¸¸¸¸¸¸´¸¸¸´¸±´´´¸´´±±­ª­­­­±­¸¸¸¸¸´±±±±±´±´­´±­­ª§§£££  £ œœ™œœ–™––’–’–’’’’™œ ª­­»ÂÂÂÂÅÅÉÅÉÉÉÉÉÉÅÅÅÅÌÚÚàààààààààÝÝÖÉÌÉÅÂÅÂÉÉÌÌÌÉÌÌÏÏÖÓÚÚÝÝàäààààäääçääçäçäçççäçàààçääàääàÝÝÝÚÚÖÖÖÖÖÖÖÚÖÚÖÖÚÝÚÖÚÝÖÖÖÖÏÉɾ¸¸¸¸¸¸±¸¸»¸¸´´´¸¸´±ªª§§£££§£§ªªªªªª­­±±¸´´±´­±±ª­­­­ª­ªª§ªª­­±±´±¸»»»»´»¾¾¾¾¾»¸´´¸´´´±´¸´´´¸¸¸´»»¸»¾»»»»¸»»¸¸»¾¾Â¾¾»¾»¸±£¸¸±­±ª±ª‹§£™™™œœ™œ™™–––‹ª™£ –ª§±­ –œ’ˆ‹‹…‹ˆ…tˆˆ~~ztiwptcifRc­´ªª¸¸¾Â¾»¾¸¸´´»±¸´£££œ–’ˆ‹ˆ…~ptimmmifiip_ftfiippztwtz~wtpp´´´´ttmmmmtmtmw……ˆˆ…………ˆ~_XzzwwzwwtpimX\XUUGNNUKGKRRNDNKRR\XUUUUNKRNNRRRUUNUDDADG=,30:36::===D:A=:=:6:666666336:=ARccfccc_ccfmmptmimimz……‹…………~zzzzzzzzzzzwwtwwzzzwwwwwwwwwwwwwwwwttttttttttppppmmmmmmiiiiifpptwzz~……~z~wtptwtwttwwzzz~~…~z~wwtzz~~~~zwwppppptimfffc____cc_cffcc__cccc_c_ciffmpmpiiimttw~~~zwwzzzz~~cc_X\\fc´…´±´±±´¸¸¸¸¸¸´´¸¸´¸±´´´´¸±­­­ªª­­­´±´¸¸¸¸¸´±±±±±±±±±­ªªªª§££§££££  œ  œœœœœ™’’œ™’™™™œ £­±±±¾ÂÂÂÅÅÅÉÉÅÉÌÉÌÉÉÉÌÌÏÝÝààààààààäÝÝÓÉÉÉÉÅÅÅÉÉÉÉÉÉÌÏÓÌÓÖÝÚÝÝàäàààääääçäççäçäççääçäààäääàääàÝÚÝÚÚÚÓÖÖÖÖÖÚÚÚÖÖÚÝÖÖÖÚÚÚÚÚÓÌÌÅ»»»»»»»»»¸¸¸¸´¸¸¸´±§ª§§§£§§§ªªªªªª­±´´±¸´´´´­­±­­±­±­ª­ªªªª­­±±´´¸»»»¾¸¾¾Â»Â»»´´¸¸´±¸´¸¸¸¸¸¸»»¸»»¸»¾¾»»»»»»¸»»¾»Â¾Â¾¾»»£±§´´±­­ª± ‹§ œœœ™œœ™™™–––ª™œ ­ª­­­ –œ–‹’ˆ‹ˆˆ……w…~~wwmtpp_ffG_ª±ªª»¾¾Â»»»»¸´¸¸±¸´§££œ–’’ˆˆ~wpmiimmcfifpcpciipmwpUpwttfff±tpwfmiffifmmitt~ˆˆ…………ˆ\~~zwzwwptimX\UUUGKNUKKGRRRGNNRR\X\XXXNNRRRRUUXXRXKUKNRGKKA==:==AAAA==A=:=:::66666336:=ARccccc_c__cmittpmwizw~‹ˆ~ˆ…~wzwzzzzzzzzzzwwwz~zwwwwwwwwwwwwwwwwwwwtttttttttttpmmmmmmmmmmippwwz~~~…z~wtttwwwwwzzz~~~~~~~~~wwtwzzzzzztppmpptmiiifccc__c__cffcc__cccf____fcfimppimimptwzzzzwzzzzz~~ffccf_fc¸´´±´±´¸´¸¸´¸´´´´¸´´±´±´´¸­±­­­§­­±±´´¸´¸¸´´±±­­±­­­­­ª§§§§§§§§§§§££ £      œ™œ œœœ  ££§ª±´´´¾¾ÂÅÂÅÉÉÉÉÉÌÌÌÌÌÉÏÏÏÝàààààààààäÚÝÏÌÉÉÉÅÅÅÉÉÉÅÉÌÉÌÓÅÖÚÝÝÝààààààäààäääççäççäçääääààäääÝàààÝÝÚÚÚÚÖÖÓÓÖÖÚÚÖÖÖÖÚÚÚÖÝÚÚÚÝÖÏÏÉž¾»¾»»¾»»¸»»¸´¸´´±±ªªª§ª§§ªªªªª­­­±´¸¸¸»¸¸±´­ª±­­±±±­§ªªªªª­­­­±±´¸»¸»»¾¾¾¾¾¸¾¸¸¸¸´´¸´´¸¸»»»¾¾»¾¾»¾¾¾»¾»»»¸¸¾»»¾Â¾¾»»»¸£’±§±´±±­§´ ‹£œ œ™™œœ™™–––’™ª™  ±ª±­ª£™œ–‹ˆˆ………z~zwwptpp_fcGU­±­ª¾Â¾¾¾»»»¸»»´´´ª££œ’’’’‹ˆ…~wtpifmiiffffpcm_fimftiXppiXc\_­mmtfiicfffiiimmw~~…ˆˆˆˆ…ˆ……~~zzztwttip\_UXRGKKUKKKRRRKRKNU_\_\\\URURUUXXX\X\\XNUU\_fKKGGDADDDAAA==:A::::6666036:=ARccff_ccc__pftwtmzi~t~~~~ˆ…z…~~~twwzzz~zzz~zzzwwwzwwwwwwwwwwwwwwwwwwwtttttwtttttppppppmmmmmmpptwzz~~~~~wtttwzzzz~zz~~~~~~~~zwwtww~zzwzwppmpppmiiifffccc____cfcccccccc____c_cfimpimmmttwzzzzzz~~z~~~ffffmcm¸¸´¸´´´´´´¸´´¸´¸¸´¸´±±´´±´¸±±­±­ª­­±´±±´¸¸¸±±´´±­±­±­­­ª£§£§££§§§§ª§§££££££££ œ £   ££§§ª­´¸¸¸¾¾Â¾ÅÉÉÉÉÉÌÌÏÌÏÌÓÓÝÝàààààààààäÚÝÓÏÌÅÅÂÅÅÉÌÉÉÉÌÉÏÏÉÓÖÚÝÝÝàÝàÝàäààääääääçääççääààààääààààÝÝÝÚÚÚÖÖÓÖÖÖÚÚÚÖÖÖÖÚÖÖÚÖÚÖÚÓÓÏÌž¾Â»»Â¸»»»¸¸¸¸±±±±§§§§­ªªª­­­­±±±±´»»»¾¸¸±´±­±±±±´­­§ªªªªª­­­­±±±´¸¸¸¾¾»»¾»»»»¸¸´±¸´´´¸¸»¸¾¾»¾Â¾¾Â¾¸»¸¸¸¸¸»¾¸Â¾¾¾¸¸££±´¸´´±±±£±œ‹£œœœ–œ™œœœ’–––™’ªœ£œ±§´±§§œœ–’tˆ……wzz~wwmtmm_fcGR±´­ª¾Å»»¾»»»»»»¸´´­§ ™–’’’‹ˆzwpmfcmifffcfpRci\cfifpfUmmcXXX\wiiifiicfcfiififiip…ˆˆˆˆ‹………~~z~wwwtmp\_U\NKKKUKNNRRRKUNRX\\c\\_XXXUXU\\\_\__\\XX_cimNKKGGGGGDDAA====::::666036:=ARc_fccfc__\p_tttizfztzzzztwz~timtwwzzz~~z~~~zwwwwwwwwwwwwwwwwwwwwwwwwtttttttttttpppppppppmppwwz~~~~ztwtwwwzz~~~~~~~~~~~zzwwwwzzzwwwptmtpmmifmiffcfc_____cccc_ccc_cc__cccciimipmmtwtzzzzzz~z~~z~ffiipt¸»¸¸¸´´¸´¸´´´¸¸¸¸±¸±­±±´´±´±­ª­±­­­±±­±±¸¸¸´±±±­±±±­ª­­ª££ §§§§§§ªªª§§§££§§£ £  £ ££§§ªª­±´»¸»¾¾¾ÂÂÅÅÉÉÉÌÌÌÏÏÏÏÖÝÝÝàààààààààäÝÝÓÌÉÅÅÂÅÅÅÉÉÅÅÌÌÏÏÌÏÓÖÚÚÝàààÝÝàÝàääääääçääçääààÝààäààààààÝÝÚÚÝÚÖÖÖÖÖÝÚÝÖÓÖÓÖÖÖÚÚÚÚÖÓÓÏÏÌÅÉɾ¾Â»»¾»»¸¸´±ª­­£§£§ªªª­­±±±±±´´¸»¾¾¾¸¸´´±±´±±±±ªª§ªªªªªª­­­±±­±¸¸¸¾¾¾¾»¸¸¸¸´¸´±¸´¸¸¸»¾¸¾Â¾Â¾Â»¾»»¸´¸´¸¸»»Â¾»»¸» §­¸»´¸­±™œ™œœ–§ œ™™ ™ œ ’’™™™ª £œ­§´­ª§œœ’’‹t………~~z~~z~wtmtmp\fcGK´±±ª¾Å¾»»¾»»»»»»¸´­§ ™–’––‹ˆwtmmccmfccfcfpR_fXcfffmcXiX_UXXXffcccffcccfficififf~ˆˆˆˆ‹~zzwzwppf__\RKKKRKRNUURNXRUX\\c__\\\\X\\X\_c_c\\_\\cfmppNUKKKKGGGDDAA===:::666336:=ARc_cc_f_\\\tXppp_zcfwiw~tpp~wzwziimptwwzz~~~~~~~www……~wwwwwwwwwwwwwwwwwwwwwwwwwtttttwttttppppppttwzz~~z…~wwtwwzzzz~~~~~~~z~z~~zzwwwzzzzwzwtpptpmmiiiiifcfcc_\\\_ccc__cfcccccffccfimmpmppwwwwzzwz~~~~~fimmtzˆ¸»¸»´´¸¸¸´´¸¸´´¸¸±´´±±±´´±¸±±­ª­ªªª±±ª´±´´¸¸´±­­­­±­­­­ª£§£££§§§ªªªª§ª§§§££    œ  £§§£§ªª´´»¸¾¾¾¾¾ÂÂÅÉÉÉÌÉÌÏÓÓÓÚÝÝÝàààààààààääÝÓÉÌÉÉÅÉÂÉÉÉÅÉÌÌÏÏÏÓÏÓÖÚÚÝààÝÚàÝàààäääääççäääàÝÝàÝààÝàààààÝÝÚàÝÖÚÚÚÚÝÚÚÚÖÖÓÚÚÖÚÚÖÚÖÏÏÏÓÏÉÌÌÂÅ»»¾»»¸¸´±ªªª £££§ªªªª­±±±±±¸»»Â¾¸»´´±´¸­±±±ªªªªªªªª­­­­­±­­´´¸¾¾»»¾´¸´¸±´¸±¸´¸»»¸¾¾¾Â¾»¾»¸¸¸¸¸¸´¸¾¾¾Â¾»»¸»¸»™¸¾¸´±±™™™  ™§£ œœ ™œœœ––œœ’ª £ ªª±±­£œœ’ˆtˆ…z~~zz~tpppppXfcGG´±»¾¾Â¾¾¾¾»»¸¾»»»¸±­ª œ–’–’‹‹ztmpcfmffcicfpU_cXccfff_X\\\RX\U\c___cf_ccfiicfcfffz~…ˆ‹ˆ‹………~z~zzzppifc\UNKKUNNNX\_K\UXU___cc____\__\_ccccXXc\_cimttttNNNKKGGDDAAA===:::6633:=ADRc_cc_f__\_c\mcm\wcctfizmppwwwwziimmptwzzz~~~~wwz…ˆzwzwwwwwwwwwwwwwwwwwwwwwwwwwwwztttttttttptwwwz~z~~z~zzwtzwzzzz~z~~~~~~~z~z~zwz~zz~zzwwtptmpiiiffifcffcc__\_c_c_\ccccfffffcccimmpmppttwwwwwz~~~~…ffmmw…‹¸»»»¸¸»¸»¸¸¸¸´´¸´´´´±±´´´±¸±´±­ª§­ª­±­±±´¸´´´±±­­­­­­­ª§ £  ££§£§§ª§§§£§§££ œœœ    §£§§§­´±¸»¾¾¾¾Â¾ÂÅÅÅÉÌÉÌÏÓÓÖÚÝÝÝàààààààààääÚÓÉÌÉÉÅÉÅÉÌÉÉÌÌÌÌÌÌÏÏÓÓÖÝÝÝàÝÚàÝàäàääçäääääàààÝÚàÝàààààäÝÝÝÝÝÝÝÚÝÝÝÚÝÝÚÝÚÚÖÖÚÖÚÚÚÖÖÓÏÏÏÓÌÏÏÌÉÅž¾Â»¸¸»´±­§™œ  £§§§§§ª­­­­­´¸»Âž»»¸¸´¸»±´±±­­ªªªªªª­­­­ª±±­±´´»»¸¸»¸´±´­±´±´¸¸¸¾¾Âž¾¾¾»¸¸¸´´¸¸´´»¾¾Â¾»»»»¸¸™¸¾»´´´–™–££œª£  œ£œ™™™™‹’œœ’ªœ§£§­±±­ ™œˆw~…~~z~~wwttptpUfcGG¸¸¾Â¾¾¾»¾»´»¸»»¸´­ª£ ™––‹‹~witcimifiicfpXc_Uccifc\U\XRRU\RX_X\\_c__ciiiff_ffiwz…ˆ‹ˆ‹…ˆ…~~~~zptmmffXRKKUNNN\cc__\\Uc__fccccc_cc_cfcccX\__cffptwwtNNNKKKGGDDAAA==:::66066=ADRcccc_c__\__\UX\\mfcpfiimmptzww~immmpptwzz~~~ww~…ˆ…~zzwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwttttttwzwzzzzzz~z~~zzzwzzz~z~~~~~~~~~~~z~~~~zwzzz~~~~zzwtpppiifffffcffcc_\\___c____ccfiiimccfimmpptttwwwwwwzz~~~…fcppz»»»»»¸»»»»»¸´´´´¸´´´´´´´´´´´´¸±±§ªªª­­­±±´´±±±±­­­­ªª±­­£  œœ £££££§£££££££ œ™™™œœœ £ £§§ª±´´»¾¾¾¾Â»ÂÅÂÂÅÉÉÌÏÖÖÝÝÝÝÝàààààààààääÚÓÌÌÉÉÅÅÉÉÌÌÉÌÌÌÉÉÉÏÓÏÓÓÝÝÝÝÝÝÝÝàäääàäàäääàààÝÝÚÝàààààääàÝàÝÚÝÝÚÝÝÝÚààÝÝÚÖÖÚÚÖÚÖÖÚÖÏÌÏÏÓÏÓÓÏÌž¾¸¸¸¸´±­§™™  £§§£™–£ªªªªªª¸¾Âž»»¸»¸¸»´´±±­­ªª­ªª­­­­ª­­±±­±´»¸¸´¸»´±´±­±±¸¸¸¸Â¾Åž¾¾»»»¸´¸´±´¸¸¸»¾¾Â¾¾¸»»¸»™»»»´¸¸±±´±­œ­§ £  œ™œœœˆˆ™ –ª ª§£­´­ª ™œ‹‹wz…~zzz~zwwpwmUicKf»»Âž¾»»»»¸¸´¸¸»´ªª£ œ™–‹ˆ…zzmtpmmmimipip\cXXc_ff__UXUURU\RUUUU\\__ccififfcfcitwˆ‹…ˆˆ…~~~…~~zzppii_UKKRNRR_ffc\__Uc_cfcfcffcf_cfcccc\\__cccpptwwwNNNKKKGGDDAAA==::66366=ADUccc__c__\\XXUXX\ic_cffiimmpwtwzmpmppptwwzz~~~zz~…ˆˆzzwwwwwwwwwwwwwwwwwwwwwwwwwwwzwwwwwwwwwtzzzzzwzzzzzwzzzwz~~z~z~z~~~~~~~z~~~~zzzz~~~zzzwwttmiifcfcffffffc__________cfimmmpiciimppptttwwwwwwzz~~~………ffpp»»»¾»»»»»¾¾»¸´¸¸´¸´¸´¸¸´¸´¸´´±´±­ª§ªª­­ª­±±±±­­­­­­±­­­­ª œœ™œœ  £  £        ™œ™–™™™œ œ £§ª­±±»Â¾Â¾Å¾ÉÉÌÌÓÝÝÝÝÝÝÝàààààààààääÝÓÏÏÌÉÅÉÌÌÏÌÌÉÌÉÅÌÅÌÏÌÖÏÚàÝÝàÝÝÝààààÝààäääàààààÚÝààÝàÝäàäÝÝÚÚÝÝÚÝÝÚÚàÝÝÝÚÚÖÖÖÖÚÖÚÖÓÏÉÏÏÖÌÓÖÓÏž¾Â¸¸¸¸´±ª£œ™   ££ ’–œ§££§ªª»»ÂÅ»»¸»»»¸¸±´­±ª­­ªª­­­­­±­­±±­´¸¸´´¸»´±±±±´´»»»¾ÂÅÂÉÉž»¾¾»»»»´´´±´¸¸¸»»¾»¾»¾»¸»¸»»¾»¾¸´¸±´±´±œ±ª££ œ œ œ™–…™£™ª£­ª§­¸­ª –œ’ˆwzˆ…~zw~~zwwtwiUffXp»¾¾Å¾Å¾¾¸»¸¸¸´¸´´¸´ª­£  ™™‹ˆ…~~mzttppmpmtmp\fXXc_ff\cXXXURU\RUURRX\_\c_ffififfcmpt~ˆˆˆˆˆ~~~~~~~ttppi\KNUNR_ciff_cc\cccf_fffifc__c_fcf\__c___mpptttRNNKKKGGDDAAA==::6636:=ADR_fcc__\\XXXURUXX\__ccfmiiiptptzimmpptttwzz~~~zzzˆ……zzzzwwwwwwwwwwwwwwwwwwwwwwwwwzwwwwwwwwww~~zwzzzzwwwzzzzwzzz~~zz…~~~~~z~~~zz~z~~~zzzzwwwpiicccffffiiic_c_c______ccimmptmfimmppptwttwwwwwwzz~………ciwt»»»»¾»¾»»»¾¾¾»¸¸¸¸»´´¸¸¸¸¸¸´´±±±±­ª§§§ªª­ª­­­­ª­ª­­­±±­­­§  ––™œœœ œ’ ™™™ œœœœ™™™–™–™™œœ £§§ª­±¸Â¾ÂÂÂÅÅžÅÅÌÏÖÝÝÝÝÝÝÝàààààààààääÝÓÏÏÌÌÉÌÏÏÏÉÏÌÉÉÅÉÉÉÌÏÖÏÚàÝÝÝÝÚÝÝàààààààäääàäààÝàÝààÝàäàäÝÚÚÚÚÚÚÚÚÖÚÝÝàÝÝÝÚÚÚÖÖÖÚÓÓÏÌÏÓÓÏÖÖÓÓÅÅ»»¾¸¸¸´´±ª£ œœœ £ ™’–™  £ ªª¸¸ÅÅÅž¸»»»¸¸´¸±±­­±­ªª±­­±±­­­±­´´¸¸¸¸»´±±±´´±¾¾¾ÂÅÉÅÉÅÅ»»¾»»»»´´´±´¸´¸¸¸¾»»¾¾»»¾»»¾»»¾¸¸¸´±±¸±´­­£§£œ£œœ –™ˆ™£™ª£ªª§±¸­ª –œ–ˆz~…ˆ…~t…~z~zwiUfiz´¾Â¾Â¾Â¾¾¸»¸¸¸¸¸¸¸´´­­£ £™™’‹‹~~~wwwwtpwppmiX\c_ff\c\XXRRX\UUURRXX____cfiffiiipttz………ˆ…~~~~~~wwttm_NRXUccfiffcc__cfcfccfiiic_\_\ccc___c__cimifppRRNKKKGGDDAA===::6636:=ADUficf___\XUURNRUUX\__ccifiiptptwimmppttwwwz~~~~…ˆˆzzzzzzzzzwwwwwwwwwwwwwwwwwwwwzwwwwwwwwww~z~wwwzwtwtzzwzwwz~~~~~~~…~~zz~z~~~~~~z~~~~~~zzwwzwpiifffcccfiiifcfc____\__ccfipttpimmmppttwtwwzwwzwz~~…ˆˆfmz¸»»»»¾¾¾»¾»¾¾¾»»¸¸»¸¸´¸´¸»¸¸´±´±­­ªªª§§­ªªª­§­ª§­­ª­±­­±­­ œœ™™™™™™œ™’–™™™œœ™œ™™––’–’––œœœ ££§­±´¾¾»ÂÂÅÅÅÉÂÅÉÏÓÚÝÝÝÝÝÝÝàààààààààäàÚÓÏÓÏÌÌÌÏÏÓÌÏÏÌÉÉÅÉÅÅÌÓÚÝàÚÝÝÝÚÚÝÝÝààààäàääàääÝààààÝààäààÝÚÚÚÚÚÖÚÚÖÚÝÝàààÝÚÚÚÚÖÚÚÓÓÓÏÓÖÓÓÖÖÓÏɾ»»¸´¸±±­§££ œ™œ –‹––’–œ£ ª­´»ÅÅÉÉž»¾»»´¸¸´±­­±­­­±­­­­­­±±­±´´¸»»»¸´±­´¸¸¾¾ÂÅÉÌÉÉ»¾¾»»»¸´±´´´¸´¸»´¾»»¾Â¾¾¾»»»¾¾»»¸¸¸±±»±´±­£ª§ £ ™œ–œˆœ££ª§­ª§±´­ª –œ–ˆ’‹~ˆ…~…zz…–…Uim­¸¾Â¾¾»¸¸»¸¸¸¸¸¸±´­­§  œ™’ˆˆ~…zzzzwtwptpm\\f_ff__XXUURU\URURUUX\\__cfifiimmptttzz……~~~~~~wwwwpcKciXfcfiiiffcccfcfffffffc__\\c_c_____c_fiifmpRRRNKKGGDDAA===::663::=ADXiiic_\\\XUURRRUUX\\__cfffimpppwfimppttwwzzz~~……ˆˆ……zzzzzzzzzzzzzzwwwwwwwwwwwwwww~wwwwwwwwwwzzzzttwwwwtwzwztwz~~~…~~~~~~z~~~~~~~~~~~zzzzwz~wpiififccffffiffff_c______cfimtttmpmmmtttwwwzzzwzwz~~…ˆfpˆ¸»¾»»¾¾¾»»¾¾¾¾¾¾»»»¸»¸¸¸»»¸´¸´´­­±§§§ª§­ªªªª§ªªªª­ª±­±­±­ª   ™™–™™™™™’™™–™™™™œ––’’’’–’’™™™œ  §ª­±¾¾¾ÂÅÅÉÅÉÅÉÉÏÖÝÝÝÝÝÝÝÝàÝààààÝààààÝÖÓÓÓÏÏÏÏÓÓÌÌÌÌÌÌÉÅÅÉÏÖÝÝÝÝàÝÝÝÚÝÝààÝààäàääààäÝààààÝààààÝÝÝÚÚÚÚÖÖÚÚÚÝÝàÝÝÝÚÚÚÖÖÖÖÓÓÏÏÓÖÖÓÖÖÖÓž»¸»¸±´±±­§£§œœœ™œ––’––œ£ ª­±»ÂÅÌÌÉž¾¸¸¸¸»´±­±±­­­­­ª­­­±±±ª±´¸¸»¸»»´´­¸»»Â¾ÅÉÌÉÉɾ¾Â¾»¸»»´´±´´´´¸¸±¾»¸¾Â¾¾¾»¾»»¾»»¸»´´´¸±´±­§§§£ £–™’™–œ§§­£­­ª±´±­ ™œ™‹~‹…ˆ…ˆˆˆz…ˆˆ ˆUw~±»¾Â¾¾¾¾»¸´»¸¸¸¸¸¸±±±­§œœœ–’…ˆ~………~z~~wwttttpm_\i_ffc_XXUURU\UUUURXXXX__cfiiimppptttz~z…~~~z~~~~~~~z~twzwt_Kpm\iciiiiifcfffccccfffc_c\\_ccc_cc___\fiiifmUiRRNNGDDAA==:::6336:==ADUmmmf_\\XXURRNNRUUX\__ccfffmmmptfiimptwwzzz~~ˆ…‹ˆ…zzzzzzzzzzzzzzzzzwwwwwwwwwwwzwwwwwwwwwwzzzwwwwttwtwwwwwwz~z~~z~~~~~~~~~~~~~~wwwtwzttmmiiicfffffiifffccc_____cimmpptppppmtttwzwzwwwwzz~~~‹i±¸¸»»»»¾»»¸»¾¾Â¾¾¾»»¸»»¸»»»¸»´¸´±ª­­§§§ªªªªª§§ª§§§ª­ª­­­­±ª§  œ–––––œ™™’™™™™œ™™™–’’’’’’’™––™œ££§ª­¾»¾ÂÅÅÉÉÌÌÌÓÚÚÝÝÝÝÝÝÝÝàÚààÝÖÚÝàÝÝÝÖÖÓÓÏÏÓÓÓÓÏÏÌÌÉÉÉÉÉÌÓÖÚÝÝààÝÝÝÝÝÝààÝàààààäààäÝàààààÝàÝÝÝÚÚÚÚÖÚÖÖÚÚÖÚÝÝÚÝÝÚÚÚÓÖÖÚÓÖÏÓÓÖÖÖÖÖÖÓ»»»¸´´±±­ª§§ ™ –œ–’’–™™œ£ §ª­»¾ÅÉÌÌÉž»¸»¸¸´´­±­±­­­­ªª­ª­±­ª±´¸»»»»¸´´±»»¾Å¾ÅÉÌÌÉÌž»¸»¸¸´­´´´´¸¸´»¾»¾Â¾¾Â¾»»»¾»»»»´´´¸±´­­§ª§ œ£–™™™ §£­§±­­­´´ª ™œ–’‹‹‹……ˆ‹‹‹z…–™£§z…­´»Â¾¾»¾¾»¾¸´¸´¸¸»¸¸±´´±§œœ™–…ˆ~……zzz~twtptptmc\i_ifc_XXUUUX_UXUURXUXX__fimmmmppmpttz~z~z~wzzzz~~~zzzpwwzw\Ntp\ffimmiiifcfcc_cccfffcc\\\f_f_c____\ifii\iXRURRNKGDAA=::::663::=AADUpmpf_\\XUURNNNRUUXX\__ciffmimptiiimpttwzz~~~…………ˆ‹‹zzzzzzzzzzzzzzzzzzwwwwwwwwwwww~wwwwwwwwwwzzzwztwwtwtwttwtz~~~~~~z~~~z~~~~~~~~~~~zzzwtttwttpmiiiffffffiffiffccccc__fippptppptttttwwzzzwzwzzz~zz~ˆz±´¸»»»»¾»»¸»»¾Â¾¾»»»¾»¸»»¸¸»¸¸±±§ª­§£§ªª§§ª§§ªªªª§­ª±­±±±§§ œ™™––™™™œ™–™™™™œ–––––’’’’’–’’™œ £ ª­»»»ÂÉÉÌÉÏÏÓÖÚÝÝÝÝÝÝÝÝÝàÌÖÓÚÖÖÖÖÚàÝÖÖÓÏÏÏÓÓÏÓÏÏÌÌÉÌÌÌÉÓÖÚÝààààÝÝÝÝÚÝààààààààäàààÝÝÝàÝàÝàÝÝÝÚÚÚÚÚÚÖÖÚÚÖÝÚÝÝÝÚÚÚÖÓÖÚÖÏÖÏÖÖÚÚÚÓÖÓÏž»¸¸´´´±±­ªª§£œœ–œ–––––œ  £§ª­»ÂÅÅÉÉž¾»»»»¸´´±­±­­ª­ªªª­ª­±­­´´´»¸»¾»¸¸´»¾¾ÂÂÂÅÉÌÌÌÅž¾¾¾»»»¸±±±±±´´´´»¾¾Â¾Â¾»¾»»¾¾¾¸´¸¸¸´´­­§ª£ –£™–ˆ™œ §£ªª­±­­¸´ª –œ–’’’’’ˆˆˆ‹––– œ§ªz­±¸»Â»»»»»»»¸¸´´¸¸»¸¸´´´±§ œ––‹…ˆ…~…zzw~tttpttppmpmfmfc_U\U_XX_RXXUUUUX\_cfmmmmmpmmttpwzwz~~z~zzwww~z~zwzittwX\N_tXmiipmmmfffccfcf_cfcff_\_\c_c__c__c_fcfiXfURXRUNNKGDGDA=6:633:==ADGXpmmc_\\XXXRNNNNRUXX\\_cfffiiimtfiimpptwzz~~……ˆ‹ˆ‹~zzzzzzzzzzzzzzzzzwwwwwwwwwwww~wwwwwwwwwwzz~zwwtttwtwtttwwzz~~~~z~~~z~~~~~~…~~~zzzzzwttptpppmiiiiffccfiffiiffcffcccimpmptppttwwttwzzzzzzzzz~~zzˆ±­´´¸¸»¸»»»»»¾Â¾¾»¸»¾»¸»»¸»»¸´­­§§ªª£§§§§§§§£ªªª­ªª­­­±­­ªª  ™œ–––™™œœ™™™™™œ’––’’’’’–––œœ££ª­±»»¾ÉÉÏÌÓÓÚÚÚÝÝÝÝÝÝÝÚÚÓÌÓÌÓÓÓÓÓÖÝÚÖÖÓÏÏÏÓÓÏÓÏÏÌÌÌÌÌÏÏÖÚÝààààÝàÝÝÝÚÝààÝààààääààÝÝÝÝàÝÝÝÝÝÝÝÖÚÚÖÚÚÚÓÝÚÖÝÚÝÚÝÚÚÚÚÏÓÖÓÓÓÏÚÚÝÚÚÖÚÖÏÉ»¸»¸´±´±­­­ª£ œ™™’–™–™   £§ªª»ÂÂÂÅž¾¾¾¸»»¸´±­ª±­­ª­ªªªª­­±±±¸¸¸»»¾¾¸»¸¸»»»¾¾¾ÂÌÉÉÌž¾¾¾¾»»¸±±±´±´´´±»Â¾¾Â¾¾¾¾»¾»¾Â»»¸¸¸¸´±±±§ª§£œ œ™‹™œ£ª§ª­­´ª­´±­ –œ™–––’–’’‹’ˆ…‹–™œ £ ªªª±´¸»¾¸»»¾¸¾¸¸¸¸´»»¾¸»¸´±­££™–’ˆ…ˆ……wwtzttttwtptptpipi_cU_\c\X_X_\XXUXX__fipmppppmpptptwtz~z~~~zzwtzz~zwzmtmtX\K_wXpmmppipiiifciff_fi_ccc\\________\ccccffUfURmRURRKKKNNKKGD=00:=AADG\mmmc__\XUURNKKNNRUX\\__ffffiimpfimpmptwwz~…ˆ……‹‹…ˆ~~~~~zzzzzzzzzzzzzwwwwwwwwwwww~wwwwwwwwwwzzzzwwttpttttwtwwzzzzz~zzz~~~…~…~~z~wzwwtmpppmiiiiifffffffiiiif_fffffimppptpttwwztwtwzzzzzzzz~~z~…ˆ­ª´±¸¸»»»¸»»»»¾¾¾¾Â¾»»»»»¸»¸»¸¸´­ªªª§§ ££§ª§§§£§ª§ªª­±­­±±ª­§££œœ™–™œ™  œœœœœ™–™’–’’’’’’’–™œ £ªªª¸¾¾ÅÉÏÏÓÚÚÚÚÝÝÝÝÝÝÏÓÌÉÉÏÌÏÏÓÓÏÏÚÖÓÓÓÓÓÏÓÓÓÓÓÏÏÏÌÏÏÓÓÚÖàääàäàààÝÝÝÝààààààääààäÝÝÝàààÝÝÚÝÝÝÖÚÚÖÖÖÖÖÝÝÚÝÖÚÖÝÚÖÖÖÓÖÖÓÓÓÏÚÝÝÚÚÚÚÖÓž¸¸¸¸±±±±±±­­£§œ––™™–œ  £££­ª¾Â¾¾Â¾¾¾¾»¾¸¸»´´­­ª­ªª§ªªªª­­±±´¸»¸»»¾¾¾»¾¸¸»»»»»ÂÅÉÉÌÉÉÅž¾¾¾»»¸¸´±´´±±±´´»ÂÅ»¾¾¾¾¾»»¾»¾¾»¾»¸¸¸´­±±§§ª§ œ –œ £ª§­­±´­±±±­£™œœ™–––™–’’–™œ £§£­­­´´¸¸¾¸»»»»»´¸¸»¸¸¸»¸»¸´­ª  –’……ˆ………tttwttpttppwtwtmpiUf\___\\_\c___X\\_ffimmppmpmpmppptpwzw~~zzzwwzzzwwzipmpX_K\tUX=mptitmmmiiiif_iic_cc__c__c__c\\_c__ccRRURiURRNNRNRRRRRRR00A=ADDG_mppfc_\XURRNKKKKNRUX\__fcfiiimpfimmppttwz~~…ˆˆˆˆ‹ˆ…~~~~~zzzzzzzzzzzzwwwwwwwwwwwwzwwwwwwwwwwwzwwwtttptppttwwwwwzzwzzz~w~……~~~~z~zztttptpmiiimiiiiiifffifiiicfiffimmmppppttwzzwwwwzzzzzz~z~~~~………­­±±´¸»»»¸»»»¾¾¾¾¾¾¾¸»»»»¸»¸¸´¸±­§ª§ £œ œ£§££££§ªª­­±­±±´±­­ª§£  ™™™™™      œ™™–––’’’’–œ  §ª­¸»ÂÅÌÏÓÖÖÚÚÚÚÚÝÝÚÉÅÌÉÅÉÉÉÌÏÏÓÏÏÏÓÓÏÓÓÖÏÏÓÓÓÓÓÓÏÏÓÏÓÖÖÓàäàääààààÝÝÝÝàààààäääääÝÝÝÝààÚÝÚÝÝÝÖÚÖÖÖÚÖÚÝÝÚÝÚÚÓÝÚÚÚÚÖÚÖÖÓÖÓÚÝÝÚÝÚÚÚÖɾ¸»»¸±±±´´´¸­§ª£’–’™œ™  £££§ª§Â¸»¾¾¾»»»»¸´¸´±ª­§ª§§§§ªªª­±±±¸»»¾¾¾¾¾¾¸»¸»»¸¸¸»ÅÅÉÉÌÉÉÅž»¾»¾»¸´´´±±±´¸¸¾Â»¾»¾¾¾»»¾¾»¾¾»»¸¸¸¸­±±§§ª§£  –™ ££ª§±±­´­´´´­§œ œ––™™œ–’’’…™œ££§ª§­±±±´»»»»»»»¸»´¸»»»»¸¸¸¸´±ª§œ ’‹……ˆ…~pfttptpttmtzwwtmtmUf__cc__c_fccc___cifmmpppmpmpmpmptptwwz~~~zzwzzzwtwimmpXcK_tXX=pppmtpppmmmmi_mmcccfcc___c\__\\c__\U\RRRRfXRRRRURUUUUUXXXXRAADGKpmpmcf_\XUURNNKGNKNRXX\cfcffiimpcfmmppptwzz~…ˆˆ……ˆ……~~~~~~~zzzzzzzzzzzzwwwwwwwwwwww~wwwwwwwwwwwwwzztptmttpwwwzwwzwwtwzw~z~………z~~z~zwtttttpiiimmiimmiiffiimmmfifffmimppptptwzzzzzzzzzz~~~~~~~~………­­±´´¸¸»»¸»»»¾¾¾¾¾¾Â¸¸¾»»¸¸¸´±´­ª§§£œ ™™™ £   £§ªª­ª­±­´´´±­­§£œœ™™œœ™£££ ££ ™™™–’’‹‹’’––™œœ£§±´¸ÂÉÏÏÓÓÖÚÚÚÖÖÉÉÏÅÂÉÅÂÅÅÉÉÏÅÓÏÏÏÖÏÏÓÓÓÏÏÓÓÓÓÓÖÓÓÓÓÓÖÚÖàààääääààÝÚÝàäààààäàääàÝÝÝÝààÖÝÚÝÚÝÖÖÖÖÖÚÚÚÝÚÚÚÚÖÖÚÝÝÚÝÖÝÚÚÖÚÓÖÝÝÝÚÚÝÚÚÌž¾¸´±±¸»Â¾´ª­ª–– œœ ££££ªª§Â»»¾¾¾»¸¸¸´±¸´­ªªªª§§§§ªªª­±±±¸¾¾Â¾»¾¾¸¸¸¸¸¸´´¸ÂÂÉÌÌÌÉž¾»»»¸¸¸´¸±±±±´»¾¾Â¾»»¾¾¾»»Â¾¾»¾¾¾¸»»¸±±­ªªª§££ ™œ  §­ª±´±±ª±¸´±ª £ ™™œœœ™™’––ˆ™ §§§­ª±±±´±¸»»¸»»¸»»¸´»¸¸»¸´¸¸±­§£œœ–‹ˆ…‹………z~pippmpmppmtwwttptiUic_fcccccifffc_cfmimpppmmmmmpmimppptw~~zztwwwtwtffpm\fKttU\=ttmppttpppppi_mmfffccf\_\c\\c_X_\\RRXRRRR_\RRRRXUXXXXX_\\fiADDGKmmmicc_\XUXNNKGGKKNRUX\_ccifiimpfimpptttwzz~ˆ…ˆ~…~~~~~~zzzzzzzzzzzzzzwwwwwwwwwwzwwwwwwwwwwzzzzzwttttttwzz~wzzzzwwzzz~~~……ˆ…~~~z~zwtwpttpiifmmmmmmimifiipmmiifffifipmptptwzzz~z~z~~~~~~~~……­­­´´¸¸»»»»¸»»¾¾¾»¾¾»»»»¸´´´±±±ªª££ ’œ–’–™–œ–œ £§§ª­­´±´¸¸´±±ª§ œ œ™™œ£§§££ œœ™™™––’‹‹‹’’’–™œ– £±±¸ÂÉÏÏÓÓÖÖÚÚÓÏÅÅž¾Â¾ÂÅÅÉÌÅÏÌÏÓÓÏÏÏÓÏÏÏÓÓÖÓÖÖÓÓÖÏÓÖÖÚààààääääààÚààäàäààäàäàààÝàààÝÚÝÝÝÝÝÖÖÓÖÖÚÚÚÝÝÚÚÖÖÖÚÚÚÚÝÚÝÚÚÚÚÓÖÚÝÝÚÚÚÝÝÌÉÉ»¸´¸»Åž­±­´ –§œœ §§ª£­§´Â»¾¾¾»»´´´´­´±­ªªªª§§§§ªª­­±±­»Âž¾»»»¸¸´´±´ÂÂÅÉÌÉž»»»»»¸¸¸¸¸´±±´¸¾Â¾»»»»¾»»¾¾¾¾¾¾¾»»»¸´±ª­­ª§§££œ ££§­­­±´´ª±¸¸´­£ª£œ   œœœ’™™‹œœˆ§ªª­±±­±±¸¸¾¸¾»»»»»¸»´¸¸¸´´¸­ª££ œ–‹‹…‹……wppfpimmimmmpwtttttfRffcfcfcc_iiiifiiiimmppmmmiiimifimpiwz~zzwtttttttfcm\\cKNXX_=ppmtpwptttmmmcppiicc_i___cXX__U\NNNNNNRUR\_RUUU\__cffcc_cimADGGNpipffc\\XUXNKNKDGKNRRUX\_cfffimpimmmtwwttzz~……ˆ…~~…~~~~~~zzzzzzzzzzzzzzzzzzzzwwww~wwwwwwwwwwzzzzzzwwwtwwz~zzzzwzwttwz~………ˆ……………~~~zwzzzwwptpmfffmiiimmmmmimimpmmiiififmpppttpwzz~~z~~~~~~……­ª­±´´»¸»¸»»»¾¾¾¾¾»¾»»¸»´±´±­±­§§  ™’’‹’‹‹––™œ £§§ª­´´¸¸¸´´±­ª§ £ œœ §ª£§£œœ ™™––™’’’’’™œ–œ ­­¸ÂÅÏÌÓÏÓÖÖÓÌÌ»»¾¾¾¾ÅÂÅÏÉÏÌÏÏÏÏÏÓÏÏÏÏÓÓÖÖÓÚÖÖÖÓÖÖÚÝàààääääàààÝààäààààààààààÝÝàààÝÝÝÝÚÝÖÖÖÖÖÚÚÝÝÚÖÝÖÖÖÚÚÚÚÝÚÚÝÝÚÖÓÓÚÚÚÚÖÚÝÚÖÌÌɾ»»¸»»ÉÉž±¸´–ª œ£ª­±§¸»¸Â¾¸¾¾¾¸¸´´´±±±±­ªªª§§ªªªª§­±±­­¾¾ÂÂÅž¸»¸´´±´±±¾ÅÅÅÉ̾»»¾¸»¸¸»»»¸¸±´»»Â¾Â¾»»»¸»»»¾¾Â¾¾¾»»´±­ª­­­ªª§£ £§§­±±´´¸¸´´´¸±ª£­§ £££œ  –œœ   ‹§­ª­±±±±´¸¸Â»¾»»»»¸¸»´´´´±±´ªª§£ œ–‹‹…ˆ~tpmcpiiiiimmptpptptiUic_fcccf_mmmmimmimmmpmiiiifcifcXimizzzwwwtttttpf\i\X_KKX\_=mmmpmtmttpmppftpfi_f_f\_\_\\_\XRNNNNNRRRRX\UUUXiccfiiffcimifcfNUmimfcc\XXRXKNNKDGGKNRUX_\_cffiipfmpptzttwwz~…ˆ…~~ˆ~~~~~z~zzzzzzzzzzzzzzzzzzzzzwzwwwwwwwwwwzzzzzwzwzwzz~~~zwwzzttwwz………………ˆ…~zzz~wwwttppiifiifmmpmmpmmmmppmmiiiifmpptttpwz~~~~~~z…~z­­­±´´»»»»»»»¾Â¾»¾¾»»¸¸´±±±±±ª§£œ™–’‹‹‹‹’’’™œ £ªª­±´¸»¸¸¸´­­ª£§   £§ª§ª œœœ™™™––’’’’’–™™™œ ª±»ÅÂÌÉÓÌÏÓÓÏÉž»¾¸¸»´»»Â¾ÅÌÉÌÏÏÏÓÏÌÏÏÏÏÏÓÏÖÓÖÚÖÖÚÖÚÖÖÚàÝàääààààààààààääààààÝààÝÝàÝàÝÝÝÝÝÚÚÚÖÚÚÚÝÝÝÝÖÝÖÚÚÖÚÚÚÚÝÝÝÚÖÚÖÖÖÖÖÚÖÖÝÚÚÖÏÓϾ¾»É¸ÉÉÉŸ»¸¸´±­­±±´§»¾»Â»´»»»´´´±±­´­±ªªªªª§­ª­ª£­±±±±¾»ÂÅž»»¸´´±±­±»ÂÅÅÅɾ»»¸»¸¸¸¸»¾¸»»´´»»Â¾¾¾»»¸»»¾»¾Âž¾»Â±´´´­­±­­ª§­§ªª±´´¸¸»»¸¸¸´±­§±ª£§§ £ ™œ™ ££§§­­­´±±´´´»¾»¾»¾»»¸¸¸¸´±´­±´­ªª£ œ™’…ˆ……~ttm_pficmimmppmmpmtmmmf_cc_cfcimppippmmmimmffffcfifcXfmpzzzttwtttppmcXf_U\NKUX\=cmimifiptmipmippif_c_i\c\\XX\XXRRNNRRRRUU\XXXXXmffimiffcmmiffcXXimiic_\XURUKRNKDGGNNRRU\\_cffiipcpmpwzppwwzz~…~~…~~~~~~~~zzzzzzzzzzzzzzzzzzzzwzwwwwwwwwww~~~~~~~~~z~~~zzz~wwtwz~…~………ˆ……………~zzwzzwtttppifffiiimmmpmmppptppmiiiiiiptttwtz~…zw~z~~w~~­­­±¸¸¸»»»»»»»¾¾»¾¾¾»»¸¸±±­­­­§£ ™––‹ˆ‹ˆˆ‹’’™œ §§­­¸¸¸¸»¸¸±­­§§££££ª§§ª œœ™™™™™–’–’’’’–’’’–œœœœ£§±¾ÂÂÉÅÏÉÌÏÏɾ¸¸»¸¸¸¸¸¸¾»ÂÉÉÉÌÌÏÏÏÌÌÏÌÏÏÓÓÓÓÓÖÖÖÚÚÚÖÚÚÝÝÝàäààààààààÝàààÝÝÝÝÝÝÝÚÚÝÝÝÝÝÝÝÝÚÚÝÚÚÚÝÝàÝÝÚÚÚÚÚÓÖÚÚÚÚÝàÚÚÚÚÖÖÖÚÖÚÚÚÖÚÚÚÖÓÂÏÉÌ´ÌÉÌÉÅÅ»¾»»¸´±±´´¸¸¾¾¾¾¸¸¸¸¸´´´±´­±±­ªªª­ªª­ª­ª£­´´´´»»Â¾ž¾¾¸»´±±±±ª±´¾ÂÂÅž¾»»¸¸»»¸¾¾»»¾¸»»»¾¾¾»»»¸»¸¾»¾ÂÂÂÂɞş»¸¸±±´±±ª±ªª­´¸¸»»¾¾»´»¸±±ª±­ªªª’£§£œ ™ §§§ª­±­±´´±¸±»»¾¾¾¾¸¸¸¸¸´±±±§±´­ªª§£ œ––ˆ……~twm_piiciimmmmmppfpmmmiccf__ccimppmmmpmimii_cff_cffcXfmtzw~~~twtptpmpmf\\_UXRNRURA_ificfmptfmmiimmmf\__i__\_XXXRURNNRRRRRUU\XXXXXmfimiiicfpimii_\\ipmmc_\XUUUNURNDKGKNNRUXX\cfciip_tmptwpptww~z~~…~~…~~~~~z~zzzzzzzzzzzzzzzzzzzzzwwwwwwwwwwww~……~~~~z~z~zzwwz……ˆ………………~~zwzzzwwttpifffimmpmmpmmpppttpmmiiffipptwwwz~~~~~wtz~wzzci\­ª±±´¸¸»»¸»»»»¾¾¾¾¾»¸»»´±±­­­ª§  ™’’’ˆˆˆ‹‹‹‹’’™œ §ªª­´¸¸»»»¸´­­ªªª§§§ªª§§£œœœœ™™™™––’’’’’––’––œœ  §ª´»¾ÂÂÂÌÅÅɾ¾¸¸´¸»¸´´´´´»»¾ÅÅÅÉÌÌÏÌÉÌÌÌÌÏÓÓÖÓÓÖÖÖÚÚÝÚÚÝÚÝÝÝàààààààààÝÝÝÝÝÚÚÚÚÚÚÖÚÚÚÝÝÝÝÝÚÚÚÝÝÚÚàÝàÝÚÝÖÖÚÚÖÖÖÖÖÚÚÝÝÚÝÖÓÖÖÖÚÖÚÚÚÚÝÝÚÖÖÓÌϱÌÌÌÌÉž¾¾¾¸¸´´¸¸»»»¾¾»¸´´¸´´´´±´±­±­­ªª­­­­­­­§±´´´¸¸»¾¾¾Â»»»»¸±­­­­­­´´´¾Åɾ¾¾¾¸¸´¸»»¾»¾¾¾»¾¾¾¾¾»¸¸¸¸¸¸»»¾¾Â¾ÅÌÉÅÉÉÅÉÉ»´´¸´´ª´­­±´´»»¾Â¾»´¸¸´­ª´­­­­§£ª§§£££ªªª­­´±±´¸´´´¸¸»¾»¾´»¸¸´´­±±£±±ªªª§§£œ™™’’ˆˆ~ptpcpmiimiimmimpmitmipmfcfc_fcimmmmmmmmfiff__ccc_cfccimwzwz~~wzwtttppmf_\\RURNURRDXXcfffmmpiimii_pif_\ci_c_\\UURRRNRRRRRUUU\XXX\\mimmiimfimmpmmc_\itpif_\XUXRRRNKGGKNNNRXXX\_cfffp_pmpptptttwzz~~~~~ˆ~~~~zzzzzzzzzzzzzzzzzzzzzzwwwwwwwwwwwwz………ˆ……ˆ…~~~~~~~zwzz………ˆ………ˆ………~wwzzwwwtwpmiiiimmmmpppptttttpmmmiffipmtzzz~~~~~~~z~zzmiittc_XUU±­´±´´¸¸»»»»»¾¾¾¾¾¾»»¸¸´´±­­ªªªœœ––’ˆˆˆˆˆ‹‹‹–™œ £ªª±´´»¸»¸»¸±±­­­§§£§ª§£§ œ œ™™œœ™™––––––™––™œœ £§­´¸»¾¾¾Å¾¸¸´´¸¸¸±±±±±¸¸»¾Â¾ÉÉÌÌÉÌÌÌÌÏÓÓÓÖÓÓÖÓÚÚÚÚÚÚÚÚÝÝäàààààààÝÝÚÚÖÝÖÖÚÖÖÖÖÖÖÚÝÝÝÝÝÝÚÚÝÝÚÝÝààÝÝÚÚÚÚÖÚÖÓÓÖÖÚÝÚÝÚÚÖÚÖÓÖÖÚÚÚÚÝÚÖÖÓÓÏ̱ÌÌÌÌÉž»¸¸¸´»»»¾»¾¾»¸´¸¸¸±´´´´±­­±­­­ª­­±­±­ª±´´¸»´»¾¾Â¾¾¸¸¸´±§ª­ª­­±´´»Âž¾¾»»¸»´»»¾¾¾¾¾»¾Â¾¾»¾»¸¸¸¸¸¸¾»»¾¾ÂÂÌÌÏÌÌÏÌÌÉž¸»¸¸­´±±±±¸»»»¾¾»¸»»´±­´±±±­ªªªªªª§§­­­±±´±±´´¸´¸´­¾¾¸¾¸»¸´´¸ª´±§±­­ªªªª§ œ™–’‹‹…pip_ppfmmmimmmmmimtimtpificcfcimiiimiiicfcc\cccfccfcfmmzwz~~~~wzztpwtmmfcXXRUNNURUAXX_cfimipimpmmfmfc\\_f\c\\XUXRRRNRRRRUUUXXX\\__mimmmipimmmmmmfc_mtpfc__XUXNNNKGDGKKNNRUXX\__cffm_cimmpppttwzz~~…~~~~…~~~~~~~zzzzzzzzzzzzzzzzzzzzzzwwwwwwwwwwww~…………ˆ………~~~~~~zzzz…………ˆ………ˆ………zwwzzwwwttpmmmmmmmmptttwwttwtpmmmiiipmtwzzz~~~z~tzzzztwiffi\X\RRR±­´±´¸¸¸»»»»¾¾¾Â¾»¾¾»»¸´±­­­ª§§œœ––‹ˆˆˆˆˆ‹‹’–™œ £§ª±´´¸¸¸»¾»´´±­±ª§§§ªª§§   ™™œœœ™™™™™––™™™–™œ ££§­´´»»»¾Â¾¾¾»´´´±´´¸­­­£§­´´»»¾¾ÉÉÉÉÉÌÌÌÏÓÓÏÖÓÏÓÓÓÚÚÚÖÝÝÝÚÚÝàààÝààÝÝÝÝÖÚÓÚÖÓÚÓÓÓÓÓÓÖÚÚÚÝÝÝÝÚÝÝÝààÝàÝÝÝÝÝÚÖÚÖÖÓÖÓÚÚÝÝÚÖÚÖÖÓÓÖÚÖÖÚÚÚÖÖÓÏÏ̱ÌÌÉÉÅžŸ´´¸¸¸»¾¾»¾Â¾¸¸¸¸¸´´±´¸´±­´­­±ª±±±±±±­±´±¸¸´»»¾¾¾»´´´±±ª§­ª±­´´´¸¾Â»»»¾¸»»´¾¾Â¾Â¾Â¾¾Â»Â¾Â¾»¸»´¸»»¸»»»ÂÂÉÏÓÏÏÓÏÏÌÉ»»¸¸±´´±±´¸»¾»»»»»»¸¸±±¸´­±±ª­ª­­­ªª±­±±±´±´´´¸´´±ª»¾»¾»»»¸¸¸ª¸´£±±±ª­§­ª£ ™––‹ˆpip_ttmpmpipmmiimitmmppmiiffffmiiffifff_c\_\cccfcffcipmwwzz~zzzzzwtwtmmfc\UURRNUNRAXXX_ffmipippppimic___f\_XXUUURRUNRRRUUUXX\\\___immmimpmmmpppmffcptmfc_\XXUNKKGDDGKKNNRUXX\__cffm_cfimmppttwzz~~~~~~…~~~~~zzzzzzzzzzzzzzzzzzzzzzzwwwwwwwwwwwwz…ˆ…ˆˆ…………~~~……~~~~~……………………………ˆ…~wwwwwwttwppppppmpmmpwttwwwwtppmmiimmpptwwwzzzwztwwwtppfcccXUUNNN±±´±±¸¸»»»»»¾¾¾¾Â»¾¾¾¸»´±±­ª­§£œœ™’ˆˆ……ˆ‹‹‹‹’––™ §ª­´´´¸»¸¾¾»¸¸´±±­­ªª­ªªª    œ  œ™™™œ™™™™™™––œ£§£ª­´´¸»¸»¾»»»¸§±±­±´´ªª§£§§±±»¸¸ÂÅÅÉÅÉÉÌÏÏÏÏÏÓÓÓÓÖÓÖÚÖÖÝÚÚÝÝàÝàÝÚàÝÝÚÚÝÚÖÓÖÓÓÖÓÏÓÏÏÓÓÖÚÚÝÝÝÝÝÝÝÝàààÝÝÝÝÝÚÚÚÖÖÚÓÖÓÚÚÝÚÚÖÖÓÓÓÓÓÖÓÓÖÚÖÚÖÓÏÏÌÌɸ»ªÂ¾ÂÅ»¸¸¸¸¸¾Â¾¾Â»´»¸¸¸´¸´´¸´±­±­ª­­´±´´±±­±´±´»¸»»»¾»¸±±±±­­ªªª±­±´´´»¾¾¾¾¾»»»¸¾¾Â¾Âž¾¾¾Â¾¸»´»¸»»¾»»¾¾ÅÏÏÓÓÓÓÓÏ̸¸´´±´´´±¸´¸»»¸¸¸»»»¸´±»¸ª­±§±­ª­±­ª´±±´´±´¸¸´»´´´ª¾¾¾¾»»»¸¸¸ª¸¸ ´´´ª­§ª§§ ™’–’‹‹miw_wtptmtmmimmmpmpppptpmfffffmiifffcfi__\\_cccfffffipmttwwzz~zzzwwztppi_\UXNRNRNRNX\\_ccimpittttmmm__c\c\\XXXUURRRRUUUUXXX\\\\__iiimmimmmmpptpmiffttmic_\\XUNKGDDAGGKNNRUX\_c_cffm_cffipmpptwzz~~~~~~…~~~~~~~zzzzzzzzzzzzzzzzzzzzzzwwwwwwwwwwwwz……ˆˆˆ……~~~…~~~~~…………………ˆˆzwwzwttttppppttppmpttwwwwwtttpmpimmipmmtttwwwtpptttpmfc\U\URRNNK´±±´´¸¸»»»»»¾»»Â¾¾¾¾¾¸»´±±­ª­§§ œ–ˆˆ……‹‹‹––œ §ªª´¸¸»¸»»¾¾¸´¸´±­±ª­ª­­­££££    œœœ œœ™œ™™™™œ£§£­±´±¸¸´¸»´¸¸´§­­­­±±§§£ £§ª­¸´¸¾ÂÅÅÅÅÌÌÏÌÌÏÌÖÏÏÏÓÏÓÖÓÓÚÝÚÚÚÝÝÝÝÚÝÚÚÖÖÚÖÖÓÏÏÓÓÏÏÏÏÌÓÓÖÚÚÝÝÝÝÝÝÝÝÝààÝÝÚÝÝÖÚÚÖÖÖÖÖÓÖÖÚÖÖÓÖÏÓÏÓÖÓÓÓÖÚÓÖÖÓÏÏÌÌÅ­±§­¾»Â¾»¸¸¸¸¾ÂÂÂÅ»¸¾»¸¸´¸±¸´´´±±­ª­±±±´´´±±±´±´»¸»»¸»¸´­­­­ª­§ª­­­±±¸´»±¾Â¾¾»¾»»¾Â¾ÂÅÅž¾Â¾¸»¸¾¸»¸»»¾¾ÂÂÏÌÓÏÓÓÏÏɾ¸´ª±±±´±±´´¸¸¸¸±¸»¸»¸¸±»´§±±ª´±­±´´´¸´±¸±´¸´´±¸´¸¸´»¾¾»¸¸¸¸¸¸ª¸´ ´¸´­ª§§££œ™’’–‹…pizczptwpwipimpmtppttttmmfffffpmfcic_ci__\__ccfffifimpptpttww~zz~zz~wptfcXUUNNNRRURXX\___fmpiptpwpmi__c__\\XXXUUURURUUUUXXX\\\__fmmmmmmmppptttpmmiitpmic_\XXRKGDADADGKKNRUXX___cifm_ccfimppptwwz~~~~~~~~~~~~z~zzzzzzzzzzz~zzzzzzzzwwwwwwwwwwww~……………ˆ……~~~~…~~…~~~…~……………………zwzwtttttptpttwttpptpwtwtwwttpmmimmimiimpptttpmmmpmmic_XUXRNNNNK±±´´´¸¸¸»»»»¾¾¾Â¾¾¾¾»´¸´±´ª­ª§£ œ’‹‹‹ˆ……‹ˆ‹‹’™œœ§­­±¸¸¸»¾»¾¾»¸»¸´±´­±­±±­§§§§   £      œœœ™œœ £ª­±´±±´´´±¸±´¸±§ª­ª§­ª£   ££§ª´´¸»¾ÅÅÅÉÉÌÌÌÉÌÌÓÏÌÌÓÏÓÓÓÏÚÚÚÚÚÚÚÚÚÚÚÖÚÓÚÖÓÖÏÏÏÓÏÌÌÏÌÉÏÓÓÖÚÝÝÝàÝÝÝÝÝÝÝÝÝÚÚÚÖÚÖÖÓÖÓÓÓÓÖÖÖÓÖÓÓÓÌÓÓÏÓÏÓÚÏÓÖÓÓÌÌ̾­­§£±¸¾Â¾»¸¸»¾ÂÂÅÅž¸»»¸»´¸´´´´´´±­ª±­´´´´¸±±±¸´´¸¸»»´¸¸±­­­­£ªªªª­­­±´¸¸´¾Â¾¾¾»»ÂÂÂÂÅÅÉÅÅž¾¸»¸»¸¸»»»¾¾Â¾ÌÉÏÓÓÓÌÌÅ»´±ª±±­±±­´±¸´´¸´»»»¸¸»´¸±§´´­´´±±¸¸¸»¸´´´¸´´´´¸´¸»¸»»¾»¸»»»»¸»¸´´´¸´ª§£œ  ™–’’–’‹ˆpmz~w~wtzmtiptmpmtwptpimifffcpiccfc__f\___cfffffiimpppppttttzw~~~~~zttc_UXRRNNRRXUUX\\c\cimimp_ttmfccc__\\\XXXUUUURUUUXXXX\___cippmmmmmppptttpmmmitmmfc_\XURNGDADADGKKNRUX\\__cffmccffimmpptwwz~~~~~~…~~~~~~~zzzzzzzzzzzzz~zzzzzzzzwwwwwwwwwwww~……………ˆ……~~~…~~~……~~~……………~~zwtttptptptwwwtttpttpwtwwtppmpmimiiffipimppmiiiifff_XURUNKNNKN±±´´´¸¸¸¾»»»»»¾Â¾¾¾»»¸´´±±­­ªª£œ™‹‹ˆ…ˆ‹ˆ‹‹’™  ªª±´´¸»¾»»Â¾¾¸»´¸´¸±´±±´­ªªªª§£ ££££ ££ œœœ   §­±±±±­´±´±´­±´­ª­­§§§ £ œ  §§§±´´¸»ÂÅÂÅÅÉÉÉÅÌÉÏÏÌÏÏÏÓÓÓÓÖÖÚÚÖÚÚÚÚÖÖÖÖÖÖÖÓÓÌÌÏÏÌÌÉÌÌÌÏÏÓÓÖÝÝàÝÝÝÝÝÝÝÝÚÝÚÖÖÖÖÓÓÓÓÓÓÏÓÓÏÓÓÓÓÓÏÏÏÓÌÏÓÖÖÏÌÖÏÏÌÌÉ»±­ª§­´»¾¾»»»¸»»¾ÂÂÅ»»»¸»¸¸¸¸¸¸¸´´­ª±­´´´´¸´´´¸¸¸´»»¸´´¸­ªªªª§§§ªª­­±±´´¸´Â¾Â¾¾¾¾¾ÂÂÅÅÉÅÉÉž»»¸¾»¸¸¾¾»»¾¸ÉÅÌÓÓÏÌÉ´¸±±ª­­±­±­´´¸±¸¸¸»»¸¸»»¸»´±´´±¸¸´´´»´»¸¸¸´´´¸¸´¸¸´»»»ª»¾»»¸¾»¸»´¸´´¸±ª£ ™–™––’’’’ˆ………~z~wzmptttptipwtttfpifiicpif_cc__c\\_c_ffiffimmpppppppptwtz~~~~ztw\\UXRRNNRRUUXX\_cXcfifim_ptifccc__\\\XX\UURURUUXXX\\__ccfmpppmmmmppptttpmmimtiiic_\XUNKGDADADGGKNRUUX\_ccffmfccfimmpptwwz~~~~~~…~~~~~~zzzz~zzzzzz~~~zzzzzzzzzwwwwwwwwwwwwˆ…ˆ…ˆˆ~…~~~~…~~~~~………………ˆzwtppttptptzwwtttpppmtttwwttppmiiffccfmfi_ifffffccc\XUNNKGKNNR±´¸¸´»»¸¾»»»»»¾¾¾»»»»´´´±±±ªªª£ –’‹‹‹ˆˆˆ‹‹’’œ  ª­­¸´¸»»»»¾»¾¸¾¸¸¸¸´¸±´±±­ª­­ª§§§§§§£§     £££§­´±´±±±±´±´­±±±­­±ª§§   ™œœ£§§±´±´»¾ÂÂÂÂÅÅÅÅÉÉÅÏÏÌÌÌÏÓÖÖÓÚÖÖÖÖÚÖÖÖÓÖÓÖÖÖÏÏÉÉÌÌÌÌÅÌÉÌÏÌÓÏÓÚÝÝÝÝÝÝÝÝÝÚÚÚÚÖÓÖÖÓÖÓÓÓÓÏÏÓÓÓÓÓÏÏÏÏÌÏÌÏÏÖÖÓÏÓÌÏÌÉÅ»±ªªª­´»¾»»»»»¸»»Â¾Â¾¾»»»»»¸¸¸¸¸´¸¸´­­±±¸´¸¸¸¸¸¸¸¸»¸¾»»¸¸´±­§§ªª§£ª§ª­­­±´´¸Å¾¾ÂÅÅÅÅÉÅÅÅÅÅž»»»¸¸´»»»¸ª¸Â¾ÉÏÏÌÉ»´±±­­­ª­£­­´´¸ª¸¸»¸»»»»»»¸¸´±±´¸»¸¸¸¸´»¸»¸´´´´´´´´´»¸¸ª»¾»¾´¾»»»¸¸¸´¸´­§œ–––’–’’’’’ˆˆ…ˆ…~…zzppwwwtpitztttcpiifmfpiiccc_\\\\_c_fcifimmpmmmpmmmptpzzzz~~wtXUUURRRNURUUX\__c\fcffipcmpiic_c_c\\\\XXUURXUXXX\\\___ccfmmpppmmppptttppmmippcifc_\XUNKGDAAADDGKNRRUX\\_cffmcfcfipmpttwwz~~~~~~~~zzzzzzzzzzz~zz~zzzzzzzzwwwwwwwwwwww……………ˆˆ……~~~z~z……~~~…………………………………zwwttttpwtwwwwwwtpppmpptwwtppmmffcc_\cic\\\c_cc___\XURNNNDGNNN±´´¸¸»»¸»¸»»¾»»¾»»¸»¸¸´´±±­§ª§££™–‹‹ˆˆˆ’’––  £ªª­´¸»»¾»»»»»»»»»¸¸´´´´´´±­±±­­­ªªª§§§ ££££££ª­±´±´±­±±±´´±­±±±­±ª§§£  œœ  §ª±±´´»¾Â¾ÂÂÂÂÅÉÉÌÌÏÏÏÓÓÓÓÓÖÓÓÖÓÖÖÓÖÓÓÓÓÖÓÌÌÅÅÉÉÉÌÉÉÉÌÌÏÓÏÓÚÝÝÝÝÝàÝÚÝÝÖÚÚÖÖÓÓÓÓÓÓÓÓÌÏÏÓÓÓÏÏÏÏÏÌÌÌÏÓÓÖÓÓÏÌÌÉÉÅ»¸ª­­±´»»»»»¸»¸»»¾»¾»»»»¸»¸¸»»¸¸´¸´±±±±±¸¸»¸¸¸»¸»»¸¸¾»¸»´´­ª£§§§§£ª§ªªª­±´¸¸Å¾¾¾»»¾ÂÅÂÂÅÉÉÂÂÅÅž»»¸¸¸±»¸¾´­»´»ÅÌÌÉŸ±±±­±­ª­§ª­±±´ª¸»¸¸»¸¸»»¾»»±´´´´¾¸¸¸´¸»»¸´´´±´´´¸´´¸´»­»¾¸¾­»¸¾»¸¸¸±¸±ª§ ™––––’’’‹‹ˆˆ…ˆ…~zppzwwttititptfpmifpipmifcc_X\____cfcfiimmmiiimRffmpmwwwwzztpKRURRNNRRRUX\\\_c\ccffip_ppmmccc____\\XXUUUXUX\\\\__ccccfimmmtppppptttttmmimtcmfc_\XUNKGDAAADDGKNRRUX\\_cffm_cffimmpttwzz~~~~~~~~~~~~~~~zzzzzzzz~~~~z~~zzzzzzzwwwwwwwwwwww………ˆˆ……~~~~…~~zzz~……~~…………………~zzttwtttwwwwwzwttmmmmmttwpmmiiccXRUUXXXUXX\XU_XXXXURNNNNDGNNN­´¸´¸¸»¸»»»¸»¾»¾¾¸»¸´´±±±­­§ª£§£œ–’‹‹‹’’’–™™£ §§­­±¸»»»¸»¸»¸»¸»¸¸¸´´´´¸´±±±´±±±­­ªª£§  §£§§§­±´¸±±±­±±±´´±­±±´±±ª§§£ œœ  £§­­±±¸¸¾Â¾¾¾¾¾ÂÂÂÅÉÌÌÌÌÓÓÖÓÓÓÓÓÖÖÓÖÓÏÓÓÓÓÏÓÏÉÅÉÅÅÅÅÉÉÅÉÌÌÌÏÓÏÚÝÝÝÝÝààÝÚÚÚÖÚÓÖÏÖÓÓÖÓÓÓÏÓÓÏÏÏÏÌÌÏÏÌÉÌÏÓÏÖÓÓÏÏÌÉÉž¾´´­´´¸¸¸»¸¸¸¸¸»»¸¾¸¸»¸¸»¸¸¸¸¸¸´´´±±­±±»¸¸¸»»»¸¾»¸»Â¾¸»´±±­§ª§§££ª§ªªªª­´¸´Â¾¾¾¾»»¾ÂÂÂÉÅÌÅÅÉÅÅ»»»¸»´¸´»±±»±¸¸ÅÉŸ¸­±­­±ª­­ª­­´´´±¸¸»¸¸´¸¸»»»»­´´¸´»¸´¸¸¸»¸¸¸±´±´±´´±±´¸»±»¾´»±»¸»¸´´´­´­§££œ––––’’‹‹…ˆ………~zpt~zzwtmpitmtfppmppmtpmi__c\___cccfciiiiimff_iRccciimi\piXU\GKRNNKNRUURX\_X\c___fcip\mtpmfcccc___\\XUXXXX\X\\\cccccfpimppttttttwwwttpmiipfif_\XURNKGDAAADDGKNRRUX\\_cffm_cffimmtptwz~~~~~~~~~~~~zzzzzzzzzzzzzzzz~z~zzzzwwwwwwwwwwww~~………~~~~zz~z…………ˆ…~~~~……~~~zwwwwtwttzzzzztwpmiiipptmfiff\\NRNRUNURUUXRRUUUUURNKNKKDGNKR­´´´¸»»¸»»¸¸¸»¾»»´»¸±±±­­­­ªª§£  ™’’’’–’–™œ £§ªª­­¸¸¸¸»»»¸¸¸»¸¸¸¸´´´´´´­´±±±´´±­­ª£§££§§§§ª±´¸´±´­­±±±±±´±±±´±±­§§§ œ ££££ª­­­´¸¾Â¾¾¾¾»Â¾ÂÉÅÌÌÌÉÏÓÓÓÖÏÓÓÓÓÓÖÓÏÏÓÏÓÏÏÏÉÂÅÅÂÅÅÉÉÉÉÉÌÉÏÓÓÖÚÝàÝÝÝàÝÚÚÚÓÖÏÖÏÓÓÓÖÓÖÓÓÖÓÓÏÏÏÉÉÌÌÌÉÌÏÏÏÓÓÓÓÏÉÌÉɾ»¸¸¸»¸¸¸¸¸´¸¸»¸¸»±¸¸¸»»¸¸¸¸´¸´´´±±­´´¸¸¸»»»»»¾¾»¾¾¾¸»¸­­ª§ª§£££§£§§§ª­±´±¾Â¾Â¾¾¾»»»¸¸¾¾¾ÅÅÉÅÉÉÅž»¾¸»´¸´¸ª­»±¸¸Â¾Â¸»­±­ª­ªªªª­ª±±´´´´»´¸¸¸´¸¸»¸±±±´¸»¸±»´»¸¸¸´´´´±­±±­´¸´»´»»´»´¸´¸´¸´´­±ª£ £œ™’––’‹‹ˆˆˆˆˆ……~~zw~~zzwmmitm~fttmttiwtpmf_c_c__cccffififf_mc\\_RUUNRUU\XUXNRUDKNNKNNNRUNX\\UXc\\\c_fm_ittiiffcccc_\\XXXX\\_\___fffffitmpttwwtttwwwwttppiimfic_\XURNKGDDAAADGKNRRUX\\_cffm_cffiiptttwz~~~~~~~~~~~~zzzzzz~zzzzzzzzzzzzzzzzwwwwwwwwwwww~~w~~~~~~~~zzz~…………………~~~~~zz~~~~~~zwzwtwttzzwwwtwmmffimmpicc\_UUKNGDKKNNNAUGGKRNRNNKGKKKGKNNR­±´´¸»»»»¸¸´¸¸»¸¸¸¸´±­­­ª­­ª§£ œœœ–’’’’’’–™––™  £§ª§ª­´¸¸»»¸¸¸¸´¸¸¸¸¸´¸´¸´´±±±±´´±±±­­§§££§£ªª­´´¸´±´ª­±±´±´´´±´±±­­§ªª  £ £§£ªªª§±¸¾¾¾¾¾¾»Â¾ÂÅÅÉÉÌÌÏÏÓÓÓÓÓÓÏÏÓÓÓÏÌÏÌÏÏÏÏÉÅÅÅÅÂÂÅÉÅÉÉÌÉÏÏÏÖÚÝÝÚàÝàÝÚÚÖÓÓÓÓÌÓÓÓÓÓÖÓÖÖÖÓÏÓÏÌÅÌÏÌÌÌÏÏÏÓÏÖÓÏÌÏÌÉÅž»»¸¸¸¸´´¸´´¸»´´¸´´¸¸¸¸¸¸¸¸¸¸¸´´±±±´´¸»¸»¾»¸»Â¾»¾¾¾»»¸­­§£§§ §£§§§§§ª­­±­¾Â¾¾Â¾»¸¸´¸»¾»ÂÂÅÅÅÉÉÅÅÅ»¾¸¸¸¸¸±ª­¸´´¸»¸»´¸­­­­­ª­ªªªª±­´¸¸¸»¸¸¸»´¸´»»±´´¸»»´´»´»´´´±´¸´´­´­±±¸±¸¸¸­¸¸±´´¸´¸±±±­­ œ œ™––’’‹‹ˆˆ…ˆˆ……~tz~~wzpmmwmwwwpttUwttpicccf__cc_ffmfiff_i\XUURNRNRUUURKKKKAGKKGKNNRRNXXXXRcX\\cXfmcfptpmifffcc__\XX\\_X___cifiimpwwppttwwttwwwwwwtptmimcfc_\URRKGGDDAAADGKNRRUX\\_cffmc_ffiittptwwz~~~~~~~~~~z~zzzzzzzzzzzzzzz~zzzzzzzwzwwwwwwwwww~zzwzz~~~~~z~z~~………………z~~~~zztz~~~~~~~zzzzztttwzzzwwttmifcfifc\__XXRKGKDAGADKD=GADGDKKKKGDGKGGKNNR±±¸¸»»»»»»¸¸´´¸¸¸´´´±­ª­ªªª§§ œœ™œ™––––––™™™™œ £££§§ª­±´´¸»¸¸¸¸´¸¸¸¸´´´±´¸±±­­±±±±±­±­ªª§§ªªª±±´¸¸¸´±­­±±´´´´´´¸­­ª­ª§§££§£§§§ª§§ª­´¾¾¾¾¾¾»ÂÂÂÅÅÉÉÌÏÏÏÓÖÖÓÏÏÌÓÏÓÓÏÏÏÌÏÏÌÌÉÉÅÅÅÂÅÂÉÅÉÉÌÌÏÓÓÖÖÚÚÖÝÚÝÝÝÖÖÓÏÏÓÏÏÓÓÖÓÖÖÖÖÚÓÓÏÏÉÉÌÌÌÌÏÏÏÏÓÌÓÓÏÏÏÌÉÉÅž¸¸»»´´¸´¸»¸¸´¸´´´¸¸¸¸¸¸»¸¸´´´±±´´¸»»»¾¾»»¾Â¾¾¾¾¾¾¸¸±ª£§§§ §£ª§§§ªª­­´´¾¾Â¾»Â¾»»»¸¸¸»»»¾ÂÅÉÉÉɸ»¸¸´¸»±­±¸¸±´¸¸¸±´­­­ª­§ªª§­­±±¸¸»»»¸¸´»¸¸¸¾¸´¸¸¸¸»¸¸¸¸¸¸¸¸­´´´±±´±´­´­¸¸¸­¸´´±´¸´´´´±£­£œ£œ™–––’’’‹…ˆˆˆˆ…ˆt~ztwtmmzt~ztttttRwtwtmfffi__cfcfimimff_f\XUUNNRNRRRRK +GGGAGKKDGKNRRNXX\\Nc\\_cUfmffpttmmiffccc_\\\_cccicmcppipttzwtttwwwwwzzzzzwtttmmpcf_\XURNKGDDAAADDGGKRRUX\\_cffmfccffmtpptwz~…~~~~~~~zzzzz~z~~zzzzz~zzz~~z~zzzzzwzwwwwwwwwwwzwwwzz~~………~z~~z~~……………~z~zzzzztwzwzz~~~~~~wzwwtwwzzwwtppmfcfccXXURNNKGDDA6A==A==A=AADDGGADDDGKGKNNU´±¸¸»»»»»¸´¸´¸¸¸¸¸´±±­­­ªªª§££œ™œœœ™™™–™™œœœœ ££££§§§­­´´¸¸¸»¸¸¸¸´¸¸¸´´´´¸±­ª­­­­­­±±­­­­ªª­­´´¸¸¸¸¸±ª­±´´¸¸´¸¸´ª­­ª§§§§£§£§ªªª§§­±±¾¾¾»»¾¾¾ÂÂÅÅÉÉÌÌÏÓÖÓÓÏÏÏÏÏÏÓÓÌÏÏÌÏÏÉÉÉÉÅÂÅÅžÉÅÉÌÏÏÓÓÓÖÚÚÚÖÚÚÝÝÚÓÓÓÌÌÏÏÌÏÏÖÓÓÖÖÚÚÖÏÏÏÉÉÏÌÌÌÌÏÌÏÓÌÏÓÏÏÏÏÌÌÉÅÅÅ»»»»´´¸¸¸¸¸´´´´´´´¸´´¸»»¸¸¸´´´±¸´»»¾¾Â¾¾¾¾Â¾Â¾»¾¾»¸­­§ª§§ § §£§§§ª­­¸¸¾¾Â¾¸¾¾¸¸»¸¸¸»»»¾ÂÅÉÉÉɾ¾¾¸»¸¸¸¸»­±´´¸±´´´´­±­ªªªª§§§ªª­­´´´»¸»´¸¸¾»¸»»¸¸»»»»¸»´¸¸¸¸¸¸±´´´´´±±´±´ª´´¸­´±´±´´±´´´´£ª£  œ™–––’‹‹‹ˆ~……………~……~w~wztmmwz~~wwtptRwtttpifii__cifimpimif_c\XURRNRNRNRNK + +ADG=GKKDDKNRUNUUXXNc\\_cRfmffppwpmiiifiifccfficfmfpittmtwwwzwwwzwwwzzzzzzzwtpmmmmcc\XXURNKGDAAAAADDGKNRUX\\_cffmc_fcfippptwz~~~~~~~~~~zzzzzzzzzzzzzzzz~z~zzzzzzzzw~wwwwwwwwwwwwwwwz~~……zz~~~………………~zzwwwwwttwtwwzz~~zzwzwwtwzzzwwpppifccc_XURNKKGDA::66:66::==AADADDADDDGKGKNRU±´¸»»¾¾¸»´´¸¸´´¸»´¸±´­±ªªª§§  œœœœœ™™™™œœ   œ  £££§§§ª­±´¸»»»´»¸¸¸´¸´´±´±´­ª£ªªª­ªª­±±±±±ª±´¸¸¸»»»¸¸´±±´´´¸¸¸¸¸±ªªª§§§££§ª§§§ªªªª­´´»¾»»»¾¾¾ÂÂÅÅÅÉÌÌÏÓÓÏÏÓÓÌÏÌÏÓÓÌÏÌÏÏÌÉÌÅÉÅÅÂÂÅÂÉÉÉÌÏÓÖÖÖÖÚÚÚÖÖÚÚÚÖÓÓÏÌÏÏÌÉÌÓÓÓÓÖÖÚÖÓÓÏÌÉÉÌÌÌÌÏÏÌÌÓÉÏÓÏÏÏÏÏÏÉÉÉɾ»¾¸´¸´¸¸¸¸´´¸´´¸±¸´´¸»»»¸¸´¸¸´¸¸»¾¾Â»¾Â¾Â¾¾¾¾¾¸­ª£ªªª£§ §£§££ª­±´»Â¾Â¾»¾¾»»¸´¸¸¸»»¾ÂÂÅÉÉɾ¾»»¸¸´¸¸±´´±´´´±±ª­­­§§ª§ª§ª’ª­±±¸¸»¸»±´¸»»¸¾»¸»¸¸¸»¸¸¸¸´¸¸¸´´´´´¸´´±´±´ª±±´±±´±±±´­´´´´£§§£œœ™–––‹‹‹ˆzˆ…………~ˆwz~pmmw~~~zwpptUwwwttmificcfmfmmpmmmi__\\XUUNRNNRRNK +ADG:GGKAAKNRURUUUXRf_X__Ufmifttwttmmmimmiifimpimpttpwwzwzzw~wwzzzzz~~~~~~~ztpmmiic_\XURNNGGDADADADDGKKRUX\\_cffmf_icfimpptww~~…~~~~~~~zzz~zzzzzz~zz~zzzzz~zzzzzzzwwwwwwwwwwwzwwwwzz………~~~~~………………~~wwwtttttppttwzzzzzzzzwwwwzwzwwpppicc__\XRRNGGDAA::663366:::==A=DAAAADGKKKRRX´´»»¾»¾¸»´´´¸¸¸¸»´´´´­­­ªª§£œ    œ™œœœœœœ  £  ££§£§§ª­±´´»¸»»¸¸¸»¸±´´±±´´±ª  §£§­§ªª­±±´´±´»»¸»¾¾¾¸¸¸´´´¸¸¸»¸¸´­ª§§§£§§£§ª§ªªª§§ª±¸´»¾»»¾¾»»Â¾ÅÅÉÉÌÉÏÓÏÏÓÏÏÏÏÌÏÖÏÌÌÌÏÌÏÌÏÅÌÅÉÂÅÅÅÉÉÌÏÏÓÖÖÖÖÚÚÖÓÓÖÖÖÓÏÏÏÌÌÏÉÌÌÏÏÏÓÓÓÖÖÓÏÏÌÉÉÌÌÌÉÌÏÌÌÏÌÏÏÏÏÏÏÌÌÉÉÉÅž»¾¸±¸¸´¸´¸¸´´´´´´´´¸¸»»»¸¸¸»¸¸¸¸¾¾¾Â¾Â»¾Â¾¾¾¸ª­§ª§§ §œ££§§§ª­´±¸¾Â¾¾Â¾»»¸¸»¸¸»¾»Â¾ÂÉÅÉž»»»¸±¸¸´¸¸­±±´±´­±§ª§£ª§ªª­­­±±¸»»¸»­¸»¾»¸»»»¸´¸¸¸¸¸¸´¸´»¸´¸´±´¸¸´´¸´±ª±§ª±±´±´­´ª´¸±±§§ª£™œz’’’’ˆ‹……z……ˆ~………~ˆ……zzpmmz~~wwptwwwzzwwpmfiffipmmmmmimi__\\XXUUURRRURNNGDDD:GGKAAKRUURURXXNfc\c_Xfpiittwwwtpwpppptitptpppwwtzz~w~zzzzzz~~~~~~~~~~zwtmmifc_XURRNKGDGAADAADDDGKNUX\\_cffmicffcfipptww~~~~~~~~zz~zz~zzz~zzz~zzzwzzwzwzzzzwwwwwwwwwwwwwwtww~~…~~~~~………………zzttpppppmptptwz~zwzzzwwtwzwwwwtpmfcccc\XRRRKADAA666300636::==A=AAAAADGKKKURX´´¾¾¾¾»»»´´´¸»»»»¸´±´±±ª§§§   £   œ œœœœœ  £££§§§£§ªª­­´´¸»¾¾»¸¸¸´±´´´´±±­§œœœ §ª§§­ª±±±±´¾¾¾»¾¾¾¾»»¸¸´¸¸¸¸»´´±±ª§££££§§§ªªª­§ª§­´¸´»»¾»¾»»¸¾¾ÅÅÉÉÌÌÏÓÓÌÏÏÓÓÏÏÏÓÓÏÌÌÌÌÌÌÏÉÉÂÉÂÅÂÅÉÌÏÏÏÓÓÖÖÓÚÖÖÏÓÓÓÏÏÏÌÏÌÌÏÉÌÉÏÏÏÏÓÏÓÖÏÏÌÉÌÉÉÌÌÅÌÏÌÌÌÌÏÌÏÌÏÏÌÌÌÌÉÅɾ¾¾»±¸¸´´¸´¸´´´´´¸¸¸¸¸»»»»¸¸»¸¸¸¸¾¾¾Â¾¾Â¾¾Â¾Â¾¸§ªª­§§ £  ££££ª±±±¸¾¾¾¾¾¾»»»¸¸¸»»»¾»Â»»ÅÅž»»»¸±¸»¸»¸±±­±±¸±´§ª§£ª§§ªª’ª­±´¸»»¸¸±¸»»»»¸¸¸´´¸´´¸´¸´¸±¸¸¸´¸´´»¸´´´´±§´§ª±±±±±­´ª±¸±±§£§£™œw’’‹‹‹‹…z…z………ˆ……z~tppz~~ztwmtttz~zwwtmiifimpppmmpmimc_\\\\XXXRURUURRNGDD:GGKDAKNRUUUR\UUfcff__ipifptwzzwtztttzwwwzwtwwzzwz~z~~~~zz~~~~~~~~~~zwtmmffc\UURNKKKDGAADADGGGGKNRU\\_cffmffcicffmptww~~~~~~~~~zzzzzzzzz~zz~~z~zzzwwwwwwwwwwwwwwwwwwwwwwttw~~…~~~~……~……………~zwppppmpmmmpptwzzzz~~zzwttwwwwwtpmfcffc_XURNNAA==63300,33666:==AA=AA=DGGKNRUX±¸»»¾¾¾¸»¸´´´¸¸¾»¸¸±´­­ª§§£   £££    œœœ   £ ££§§§ª§ª­±±´¸»¾Â¾»´»´´´´¸´­§ª£œ™  £§ª§­­­­­­¸Â¾¾Â¾¾»»¸»¸¸¸¸¸´­±­§£££§§§ªªª§ªªª­±¸¸¸»»¾»»¸¸¸»ÂÅÉÅÌÏÏÌÏÓÏÏÏÓÏÌÏÓÏÓÓÌÌÌÏÌÌÌÌÉÂÅÂÅÅÅÌÏÏÓÏÓÖÖÖÓÖÖÓÏÓÌÏÏÌÌÌÌÌÌÏÌÌÌÏÏÓÏÓÏÏÓÏÏÉÉÌÉÌÌÌÉÌÏÉÉÌÉÌÌÌÌÌÏÏÌÌÌÉÅž»¾´¸´±±¸´¸´´´¸´¸¸¸¸¸¸¸»¾»¸»»»¸»»¾Â¾¾ÂÅž¾Â¸ªª­ªª§     £££§­±±»¾¾¾Â»»¸»»¸´¸»»¾¾»¾»¸ÂÅÅÅž¾¾»¸´¸»»¸¸´´±´±´±´ªª§§ª§§ª§’ª­´´¸»¸¸´´¸¸¸»»»»´±´´±´¸¸¸¸¸­´´´±¸¸´¸¸±´´´´£±£ª±±±­­ª±ª±´±±£ § ™ w’’‹‹‹……~~z…ˆˆˆ~ttp~~~zttptpt~zwwtpmimimptttpptmimfc\\\\\\\UUUUUUUUKGK:KGKAAKNUXUXR\X_cfif_cmtiftwzz~zw~zww~zzz~zwzz~zwz…~~~~~~~~~~~~~~~~zwtpmfccXUUNRNKGDDADDDDGKKDKNNR\\_cffmcc_ifffimtwwz~~…zzzzz~zzzzzzzzzzzzzz~zzwwwwwwwwwww~wwttwwwwwwtwtttw~~~…~~~z……………~……zztppmmmpmimpppwwzzz~zzwttwwwttppmifffccXURNKDA==60000)33366::=AA==AADKKNRUXX±´¸¸¾¾¾¸»´´´´´¸¾»»¸±±­ª§§§££££§£ £££  œœ   £ §§ªªªªªª­­±´¸¾¾Â¾¸¸»´¸´¸¸±­££ œœ  §£§§ªª­­ª­´¾¾¾Â¾¾¾»»¸¸¸»´´­­ª£§£§§§ªª­­­­­­±´¸´»»¾»»»»¸¸¾¾ÅÅÉÌÌÌÌÌÏÓÏÏÓÓÏÌÏÏÖÓÏÏÏÏÌÌÌÌÉÅÅÅÅÉÉÏÓÓÓÏÖÖÖÓÓÖÓÓÏÏÌÏÌÌÌÉÏÌÉÏÌÏÌÌÌÓÏÏÏÓÓÏÌÉÌÌÌÉÉÉÌÏÌÌÌÏÌÌÌÉÌÌÌÌÌÌÌÉÉÅž¾¸¸¸±±¸´´´´¸¸¸¸¸¸¸¸¸»»»»¸»¾»¸»»¾£Ì¾¾ÅÅž´­­ª§§£     £ £§­±´»¾Â¾¾»»¸¸¸´´´¸»»¾»»»»¾ÅÅÅž¾¾»¸¸»»»¸¸´´´¸±´­´­§§§§ª§ªª–§ª±±¸»»»¸¸¸¸´»»¸¸­±±´­±»»´¸¸­¸¸´±´¸´¸¸±´¸±¸§­£ª±­±­ª§±ª­´±± œ£ œœt’’’‹‹ˆ…z…~~……‹ˆ…wwp~~~zwtttmp~~wwtmmmmmptwttptmmmif_\_____XXXXXXXXXKX=NNK=AKRX\XXU_\cfipccfppifpz~~~~z~~zz~~z~z~z~~zz~~…ˆ…~~~~~~~~~~~~~~~zwtpmfcc\XXUUKGDDAAAADDGNNGGKRNXX_cffm__cficcfiptwz~~…~zzz~…zwwzzzzzzzzzzwzzzwwwwwwwwwwwwzwwtttttttwtttttw~~…~~~……~………………~wttpmimmmmmpppwwwzz~~zztwwttttpmpmiiifc\XUNGA==::3000,33366:6==A==AAGKNRUXXX­±´´»»¾»¸¸¸±´´»¾»»¸­±ª­ª§§£§§£££ £          ££ª­ªª­ª­­­±±»»»Â¾»¸¸´¸¸´´­ª £ ™œ ££§§ªª§­­­­±»»¾ÂÅÂÅÅž»»¸»¸»´´±±§££§§§ªª­±­±±±±´´´´»»¾»»»»¸¸¾¾ÅÅÅÌÌÌÏÉÏÓÏÏÓÏÏÏÏÓÓÓÏÏÏÌÏÏÌÉÌÉÉÉÅÏÏÓÖÓÖÓÚÖÓÓÓÖÓÏÏÏÉÌÏÉÌÌÏÌÉÌÌÌÏÌÌÓÏÏÏÖÖÓÏÌÉÉÉÉÉÉÉÌÌÌÌÌÌÌÉÌÌÌÌÌÌÌÉÉÉÉž¾»»¸±´¸¸´´¸¸¸¸»¸»»¸¸»¸»»¸»»»»¸~NcœÂ¾¾¾ÅÅÅÅÅÅž´­­­§££œ œ   œ£ª­´¸»¾¾¾¾»¸´¸´´´±­»»¾¾»¸¸´Åž»¾»»»»»»¸¸´´´´´±±­§§§§ª§ªªª£­´±¸¾¸¸»´´»¸¸¸¸¸­±´±­±»»´¸´±¸¸¸±´¸´¸´´±´±´ª­ ª±­±­­ª´ª­¸±±££  œ p–‹’’‹ˆˆ~~~~~……ˆˆ~zzpzz~wwwtpmmzztttpmmmptwwwtttpppicc_cc__cXXX\X\\\\\\:RRKADK\\_\XX__cimttfctpitmz~~~~~z~zzz~~~~z~…ˆˆ…~~~~~~~~~~~~~wtpmfcc\\\XXNGDAAA=DAAGNRGDNNNXU\_ffmcc_if__cfmpwz~~~~~~…zzzwwwwwzzzzwwzwwwwwwwwwwwwwzwwttttttttwptttwz~……~…………~…………~~wwpppimimmmpmtttwzz~~~~ztwwtwttmmmpmmiif_\UNGA=:6:633003336:6::====AAGNRRUXXXªª±±¸»¾¾»¸¸´¸¸¾»»»¸ª´­ªª§££§£§££££  £        §ª­­ª­­­ª­­´¸¸»¾¾¾»¸¸¸¸´±ª§£££œœ££§§§ª§§ª­­­­¸¸»¾ÅÅÉÅŸ¾¸¸»»±´±­§£ ££§ª§±±±´±´´´¸¸´¸¾¾¾»»¾¸»»ÂÂÅÅÉÏÌÌÉÌÏÏÏÏÌÏÏÌÓÓÏÏÏÌÏÏÏÌÌÌÉÉÅÏÓÓÖÖÖÖÖÚÚÓÓÓÓÖÓÌÏÌÌÌÅÉÉÌÉÌÌÌÌÌÏÏÏÏÏÏÓÖÓÏÏÉÅÉÉÉÉÉÌÌÌÌÏÌÌÌÌÌÉÌÌÏÌÉÉÌÌÉž¸»¸´´¸´¸´¸¸´¸»»¾»»¸»»»¸¸¸¸¸¸¸RRœÂ¾ÂÂÉÅÅÅÅÅ»±±±­ª££   œœ  £ª±¸»¸»»¾»»´¸¸´±±´­»»»Â»»¸´Å¾¾¾¾¾¾¾»»¾»¸¸´´±´´±§­§§§§ª§§§ª§±´´´»¸´¸¸±¸»»¸´´±±±±ª±¸¸´¸´´¸¸¸±´´´¸¸¸´´´±ª­§­±­±±±­´±­»±´§§œ œ m™’‹’’‹‹tz…~~…ˆ…~~wzzwz~zwwpmmmwwptpmiimptwwwwwtppmicccccccf\X\\\______6UUNADU__\\Xcccmpwwicwpiziz…~~zz~z~~wwz~~z………ˆ~…ˆ……~~~~~~~~~~~~zztpmfc____\XUGGAA=AAAADKRDGKKRURX\ffmfc_fcc__cfiwz~………~wwwwwwwwwwwtwwwwwwwwwwwwwwwwwwttttttttttpptwzz~…………ˆˆ……~………~~~~zttppmmmpmmpptttwww~~~~wzwwwtpiimmpmiii_XRNGDA:::6633033366::::=====DKRRXX\Xª­ª­±»¾»»»»»¸¸¾¾»»¸­´­ªª§§§§§§££    £     £££ª§­­ª­­­­ª±±´´»»»»¸´¸¸´±±§ª§ £  £§§§§ªªª§ª­ª­´´¸»ÅÅÉÉÅž»»»»»»±±­­ª§£££§­ª±´´´´´´´¸¸´´¾¾¾»¾»¸¾¾ÂÂÉÉÉÌÌÉÉÌÌÏÏÌÌÏÏÌÏÏÏÌÌÌÌÌÌÏÌÌÌÌÌÓÖÖÖÖÖÓÖÖÖÓÏÖÓÓÏÉÏÏÌÌÉÉÉÏÉÉÌÌÌÌÏÏÌÏÏÏÏÓÏÏÌÉÉÉÌÉÉÉÉÌÏÏÏÉÌÏÌÌÉÌÌÏÌÌÌÌÉÉÉÅ»¾»¸¸¸´¸¸»»´»¸¾¾¾¾´¾»¸¸¸´¸´¸¸wwœÂ¾ÂÂÅÅÅž­±±­§£§££  œ£ £­´¸¾»»¾»¾»¸´´´´±´±¸»¾Â¾¾¸¸Â¾¾»¾¾»»»¾Â»¸¸´±±´´±§ª§§§ª§ª§ª­ª±´±´¸¸´´´´¸¾»»´¸´±±±ª±´´´´´´¸¸´´´´¸»¸¸¸´±ªª±ª­±­­±´±¸´¸¾´±ªª £œ œ™–’‹’ˆ…t…w…~~~ˆ…zwz~zz~wwwpmiittpppiiimpttwtwwwtppmffffcccf_\\X\__cccc6UUNDD\c\__cffmmtzziftpi~iz…~~~~…zzzzzzw~~~~…ˆˆ……ˆˆ………~~~zzzzzzzzz~~~tpif_\\_____\XXD==:=A=DAKUAKGGNDDRXccmic_c_____ccz~ˆ………ˆ…~wwwwwttwwtttwwtttwwwwwwwtttwwwttttttttpppptwz~~ˆˆˆ……ˆˆˆ…~………~~~wtpppmmmmmppppttwtwz~zzwwwtpffiimiiiic\URKAA==::633066636:6::=:::=AKRRXXXUªªª­±¾¾¾¾¾¾¾»¾Â»¸¸±±­§§§§ª§££§   £     £££££§ª­­­±­±­­±±´±¸»¸»´´¸´´±±ª­ª£§££§£§§§ªª§§ª­­­±´´»ÂÂÅÅÉÅÅ»»¸¸»»±­±­§§§£§£ª­±´´¸¸´¸´¸´¸´¾¾¾»¾¾»¾¾ÂÂÅÅÉÉÌÉÌÌÌÌÏÉÉÌÌÌÌÌÌÉÉÉÉÉÌÏÌÏÏÏÏÖÖÖÖÚÖÖÚÖÓÓÏÓÏÏÏÉÌÌÏÌÌÉÅÏÌÌÌÏÌÌÌÏÉÏÌÌÏÏÌÌÌÉÌÉÌÉÉÅÌÌÌÌÌÉÌÌÌÌÉÌÌÏÌÌÌÌÉÉÌÅž¾¾»»»¾¾»¾»»¾¾¾Â¾¸¾¾»¸´±´´´´UKc̾¾¾¾Åž±­­ªª£ª££ £  §£­¸»¾¾»¾¾¾¸¸´´´±­´´´»»Â»»»»¾Â¾¾»¾»»»»¾Â»¸¸¸­±±±­§§§§§§£§ªª­§±´´´¸¸±±±´»»¾»´´±±±±­´´¸´´¸´´¸¸´¸±´¸¸´»¸­­ª­­±±ª­´±´»¸»¾´­§ £œ œ™–’’‹’’’‹…t…w…~~~ˆw~z~z~~~zzwpmiitpmmmiifimptwtwtwwttpiicffcffc\\\__cfcff6XXNK__c__cfppttwzzmftpmi~…~zz~~zwwzwwwz~…ˆˆ………………zz~zzzzzzzz~~z~zpfc_\X__c_\\\XG:A::A=ADKR=KKDNAAG)__im_\\\\\_\__w…ˆ~…ˆˆzttwtttptttttttttttttttttttptttttttttttttttttzz~~……ˆ‹‹ˆˆˆ‹ˆˆ~…………~~zwtptmmpppptpptpttww~~~z~zwtppfcfiifiifc\XUNADAA:::6636663666::=::::=GNUUUUUªª­­´¾Â¾Â¾Âž»´±±ªª§§ªªª§§£ ££      £££§££ª­ªª±­±±±­±±­´»´¸±´¸±´±±­­ª§§££££§££§ªª§ªªª­´´´»¾¾ÅÂÉÅÅ»¸¸¸¸¸±±­±ª§ª£§§§ª´´´¸¸¸¸¸¸´¸´»»¾¾¾Â¾¾¾ÂÅÅÅÉÅÌÅÌÉÌÉÌÉÉÉÉÉÉÅÂÅÉÉÅÅÌÏÏÏÓÏÓÖÚÚÚÚÖÖÖÓÏÓÌÓÏÌÌÌÌÏÏÏÌÌÉÏÌÌÏÌÌÌÉÌÉÌÉÉÌÌÉÌÌÉÉÉÉÉÉÅÉÌÏÌÏÌÏÏÌÌÌÌÌÌÌÌÏÌÌÉÌÉÉ»»¾Â¾¾¾Â¾¾»»¾»´´±±±±´Gft¾¾Â¾¾¾ÂžÅ¾´­­­§§ª££££££ª§±»¾¾Â»¾¾»¸´´±´´­´´´»»¾¾¾¾»Â¾»¸¾¸¾»¾¾¾»¸¸´±­­±­§§§§£§§§ª§ª£­±±±´¸´´´¸¸»Â¾¸´´´±´±¸´´´¸´´¸´´´¸´´´´´¸´ª­­±±±±ª­±±¸»»»»±ªª££ £œ™––’–’’’‹…p…w…~…~…z~~~~~~wztmiifpmmiififiimptptwtwwwtmmciffff_\XX\cffffi6XXNNcccc_fittwwwzzmi~p……i~…~w~~~ztzwwww…‹‹ˆˆ……~zzzzzzzwwwzz~~~~m__\\U\__c\\XXK6=:====DGN:GNGK)%D%N\im_\\\\X\X\\z…ˆˆ~~ˆˆ…wpwtttpmttpppptppppppppttppmttttpppppptttwwwww~~…ˆ‹‹‹‹‹ˆ‹……………………~~~~wwwttpmmppttpttptwtzz~~~~~ztptffcifffifc\XXNDGDA=:=::666:6::6:::::6::GKRRURUªª­­¸¾ÂÅÂÅÅÅÂÅÅž¸´´ª§ª§­ªª§§£ ££œœœœœœ££§§££§­ª­­±­­±±±­±±»¸´´±´±´±´±±­ªª£££££  £ªª§§ª­ª±´±»»¾Â¾Å¾»¸¸¸¸´±´±±ª§§§§£§ª±´´¸´¸¸¸¸¸¸´¸¸»»¾Â¾¾¾ÂÂÂÅÉÂÉÅÉÉÌÌÏÉÉÉÅÉÉÅÂÅÅÅÅÅÌÏÏÓÓÓÓÖÚÚÝÚÖÚÖÓÓÓÌÓÌÌÌÉÌÏÌÏÏÉÌÏÌÌÏÌÏÌÉÉÉÌÌÅÌÉÉÉÌÉÉÉÌÉÉÅÉÉÏÏÏÌÓÏÌÌÌÌÏÌÏÌÏÌÌÌÌÌÌÅž¾ÂÅÅÂÅÂÂÅÅÅž¾»»¸±´±´­­±´»Â»»Â¾»¾¾¾Â¾¸­±­ª§§££§§§§­ª´»¾Â¾¾»»¸¸´´´´±´´¸¾»¾¾¾¾¾¾¾¾¾»¸¾¸»»¾¾Â¾¸¸´´­ª±ªª£§§£§§ª§ª§§ª±­±´¸´´´´´¾¾¾»¸¸´´¸´¸±±±¸´´¸¸¸´¸¸´¸¸´¸¸§±­´´±±­±±´»¸»¾¸­§§ª£ £  ™––’’’–’’‹p…z…~…………~~~~~~~wwtmiifpiiifficfimpttwwptwzwppfiffff\_XX\cffifi3X\RRfcfccf_mwwzzw~~mmp……~…~i~~~~wztwww~……‹‹……ˆ…~~w~wz~~zttz~z~~pcX\XX____X\U\N3A=::::DGG=GNGK%=)N\mpc_\_XX_UXU~……………z~………tzptppXpppmppppmmpmmmippmmitppppppppppwwwtwwz~~…ˆ‹‹‹‹ˆˆˆ…ˆ………ˆ…ˆˆ~~zwwwwtpptttttttppttwwz~~~~~~wtpcfciiffifc\XUNGGGDA:=:::::=:=:6:::666==DGNRRNU \ No newline at end of file diff --git a/src/MEDOP/res/testfiles/enceinte-axis-E500000.med b/src/MEDOP/res/testfiles/enceinte-axis-E500000.med new file mode 100644 index 000000000..4de1f1763 Binary files /dev/null and b/src/MEDOP/res/testfiles/enceinte-axis-E500000.med differ diff --git a/src/MEDOP/res/testfiles/enceinte-axis-E600000.med b/src/MEDOP/res/testfiles/enceinte-axis-E600000.med new file mode 100644 index 000000000..a7ff7cea9 Binary files /dev/null and b/src/MEDOP/res/testfiles/enceinte-axis-E600000.med differ diff --git a/src/MEDOP/res/testfiles/entaille.med b/src/MEDOP/res/testfiles/entaille.med new file mode 100644 index 000000000..ad3975207 Binary files /dev/null and b/src/MEDOP/res/testfiles/entaille.med differ diff --git a/src/MEDOP/res/testfiles/fieldlena.med b/src/MEDOP/res/testfiles/fieldlena.med new file mode 100644 index 000000000..b1966e0f0 Binary files /dev/null and b/src/MEDOP/res/testfiles/fieldlena.med differ diff --git a/src/MEDOP/res/testfiles/irm_test1.png b/src/MEDOP/res/testfiles/irm_test1.png new file mode 100644 index 000000000..5d20c7ed1 Binary files /dev/null and b/src/MEDOP/res/testfiles/irm_test1.png differ diff --git a/src/MEDOP/res/testfiles/irm_test2.png b/src/MEDOP/res/testfiles/irm_test2.png new file mode 100644 index 000000000..a44375d2f Binary files /dev/null and b/src/MEDOP/res/testfiles/irm_test2.png differ diff --git a/src/MEDOP/res/testfiles/padderoutput.med b/src/MEDOP/res/testfiles/padderoutput.med new file mode 100644 index 000000000..a9f16db49 Binary files /dev/null and b/src/MEDOP/res/testfiles/padderoutput.med differ diff --git a/src/MEDOP/res/testfiles/parametric_01.med b/src/MEDOP/res/testfiles/parametric_01.med new file mode 100644 index 000000000..68eefe106 Binary files /dev/null and b/src/MEDOP/res/testfiles/parametric_01.med differ diff --git a/src/MEDOP/res/testfiles/parametric_02.med b/src/MEDOP/res/testfiles/parametric_02.med new file mode 100644 index 000000000..a6babea39 Binary files /dev/null and b/src/MEDOP/res/testfiles/parametric_02.med differ diff --git a/src/MEDOP/res/testfiles/smallmesh_constfield.med b/src/MEDOP/res/testfiles/smallmesh_constfield.med new file mode 100644 index 000000000..644bac3c8 Binary files /dev/null and b/src/MEDOP/res/testfiles/smallmesh_constfield.med differ diff --git a/src/MEDOP/res/testfiles/smallmesh_varfield.med b/src/MEDOP/res/testfiles/smallmesh_varfield.med new file mode 100644 index 000000000..10aca342c Binary files /dev/null and b/src/MEDOP/res/testfiles/smallmesh_varfield.med differ diff --git a/src/MEDOP/res/testfiles/testfield.med b/src/MEDOP/res/testfiles/testfield.med new file mode 100644 index 000000000..bd62c8ff0 Binary files /dev/null and b/src/MEDOP/res/testfiles/testfield.med differ diff --git a/src/MEDOP/res/testfiles/timeseries.med b/src/MEDOP/res/testfiles/timeseries.med new file mode 100644 index 000000000..3226304db Binary files /dev/null and b/src/MEDOP/res/testfiles/timeseries.med differ diff --git a/src/MEDOP/res/workspace_clean.png b/src/MEDOP/res/workspace_clean.png new file mode 100644 index 000000000..f3229af72 Binary files /dev/null and b/src/MEDOP/res/workspace_clean.png differ diff --git a/src/MEDOP/res/workspace_save.png b/src/MEDOP/res/workspace_save.png new file mode 100644 index 000000000..ec1a9643f Binary files /dev/null and b/src/MEDOP/res/workspace_save.png differ diff --git a/src/MEDOP/tui/CMakeLists.txt b/src/MEDOP/tui/CMakeLists.txt new file mode 100644 index 000000000..6e3726a1f --- /dev/null +++ b/src/MEDOP/tui/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright (C) 2007-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 +# + +ADD_SUBDIRECTORY(xmedpy) diff --git a/src/MEDOP/tui/Makefile.am b/src/MEDOP/tui/Makefile.am new file mode 100644 index 000000000..6a82dd8f2 --- /dev/null +++ b/src/MEDOP/tui/Makefile.am @@ -0,0 +1,23 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# This folder contains the packages for the Text User Interfaces: +# - xmedpy: python library for TUI (python package installed with name xmed) + +SUBDIRS= xmedpy diff --git a/src/MEDOP/tui/xmedpy/CMakeLists.txt b/src/MEDOP/tui/xmedpy/CMakeLists.txt new file mode 100644 index 000000000..d2e4afc59 --- /dev/null +++ b/src/MEDOP/tui/xmedpy/CMakeLists.txt @@ -0,0 +1,45 @@ +# Copyright (C) 2007-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(${SALOME_MACROS_DIR}/InstallAndCompilePythonFile.cmake) + +SET(PYFILES_TO_INSTALL + __init__.py + fieldproxy.py + fieldtools.py + fieldguide.py + cmdtools.py +# For the control of PARAVIS and VISU + driver_pvis.py + driver_visu.py +# For the medop.sh executable program + medop.py +# Modules that are required for test or tutorial purposes only: + properties.py + ) + +INSTALL_AND_COMPILE_PYTHON_FILE("${PYFILES_TO_INSTALL}" ${MED_salomepythondir}/xmed) + +SET(TEST_SCRIPTS_XMED + tests/test_xmed_fieldOperations.py + tests/test_xmed_uiEventListener.py + tests/test_xmed_visualisation.py + ) + +INSTALL(FILES ${TEST_SCRIPTS_XMED} PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ DESTINATION ${MED_salomebin_BINS}/xmed) \ No newline at end of file diff --git a/src/MEDOP/tui/xmedpy/Makefile.am b/src/MEDOP/tui/xmedpy/Makefile.am new file mode 100644 index 000000000..94221691e --- /dev/null +++ b/src/MEDOP/tui/xmedpy/Makefile.am @@ -0,0 +1,59 @@ +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# + +# Author : Guillaume Boulant (EDF) + +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +mypkgpythondir = $(salomepythondir)/xmed + +# Modules that are strictly required for the fields operations in +# SALOME: +mainpkg = \ + __init__.py \ + fieldproxy.py \ + fieldtools.py \ + fieldguide.py \ + cmdtools.py + +# For the control of PARAVIS and VISU +mainpkg+= \ + driver_pvis.py \ + driver_visu.py + +# For the medop.sh executable program +mainpkg+= \ + medop.py + +# Modules that are required for test or tutorial purposes only: +testpkg = \ + properties.py + +mypkgpython_PYTHON = \ + $(mainpkg) \ + $(testpkg) + +mybindir = $(salomescriptdir)/med +testscripts=\ + tests/test_xmed_fieldOperations.py \ + tests/test_xmed_uiEventListener.py \ + tests/test_xmed_visualisation.py + +dist_mybin_SCRIPTS=\ + $(testscripts) diff --git a/src/MEDOP/tui/xmedpy/__init__.py b/src/MEDOP/tui/xmedpy/__init__.py new file mode 100644 index 000000000..cb03cd40e --- /dev/null +++ b/src/MEDOP/tui/xmedpy/__init__.py @@ -0,0 +1,188 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# +# Author : Guillaume Boulant (EDF) + +# +# =============================================================== +# This functions are to be used to notify the USER of some events +# arising on the field operation. It is NOT to be used for logging +# purpose +# =============================================================== +# +def inf(msg): + print "INF: "+str(msg) + +def wrn(msg): + print "WRN: "+str(msg) + +def err(msg): + print "ERR: "+str(msg) + +def dbg(msg): + print "DBG: "+str(msg) + +# +# =============================================================== +# Initializing some CORBA stuff +# =============================================================== +# + +# Remember SALOME definitions: +# --------------------------- +# +# componentName = Name of the component (a library libEngine +# should exist with a C function named Engine_factory, and the +# component should be registered in the catalog MEDCatalog.xml). +# +# corbaModule = Name of the corba module that contains the IDL +# specifications of the component (name as defined in the idl file) +# +# containerType = Name of the container factory +# +componentName = "MEDOPFactory" +corbaModule = "MEDOP" +containerType = "FactoryServer" + +import salome +if salome.lcc is None: + salome.salome_init() +__import__(corbaModule) +factory = salome.lcc.FindOrLoadComponent(containerType,componentName) +# The factory is not the main CORBA component of the SALOME module MED +# (i.e. the engine associated to the active study), but the CORBA +# entry point for MED fields operations (i.e. a CORBA component +# reachable throught the LifeCycleCORBA). This entry point is used to +# get the other SALOME CORBA components required for MED field +# operations, in particular the dataManager and the calculator + +# +# =============================================================== +# Initializing the MED components required for MED fields operations +# =============================================================== +# +dataManager = factory.getDataManager() +calculator = factory.getCalculator() + +# +# =============================================================== +# Initializing the notification system (events from components to GUI) +# =============================================================== +# + +# The MEDEventListener is created in the GUI (WorkspaceController) and +# a reference is transmitted to the python context throw its IOR. The +# transmission consists in initializing the variable below from the +# GUI (who knows the IOR) when importing xmed in the python console +# (see WorkspaceController) +eventListener = None +import SALOME +def connectEventListener(): + global eventListener + try: + eventListenerIOR = dataManager.getEventListenerIOR() + eventListener = salome.orb.string_to_object(eventListenerIOR) + except SALOME.SALOME_Exception, e: + wrn("The event listener is not running yet") + msg ="When you'll have loaded the MED GUI, " + msg+="call explicitely \"xmed.connectEventListener()\" " + msg+="to connect the GUI event listener" + inf(msg) + eventListener = None + except Exception, e: + err("An unknown error occurs. Check if this ior=%s is valid."%eventListenerIOR) + +def eventListenerIsRunning(): + global eventListener + if eventListener is not None: + return True + + # Try to define the event listener + connectEventListener() + if eventListener is None: + # it definitly does not work + wrn("the GUI is not loaded yet and will not be notified of the modification") + return False + + return True + +# One can try to connect to the eventListener, but it will fail if the +# MED GUI is not loaded. That does not matter, because the event +# listener is used only to notify the GUI of some event. If the GUI is +# not loaded, there is no use of notification. +connectEventListener() + +# +# =============================================================== +# Automatic import of some elements of the package +# =============================================================== +# +from fieldtools import load, get, put, dup, ls, la, save, view +from fieldguide import doc +from cmdtools import cls, wipe + +# +# =============================================================== +# Some helper functions to deal with the fields and meshes +# =============================================================== +# +import MEDCoupling +__mapTypeOfFieldLabel={ + MEDCoupling.ON_CELLS:"ON_CELLS", + MEDCoupling.ON_NODES:"ON_NODES", + MEDCoupling.ON_GAUSS_PT:"ON_GAUSS_PT", + MEDCoupling.ON_GAUSS_NE:"ON_GAUSS_NE"} + +def typeOfFieldLabel(typeOfField): + # A field name could identify several MEDCoupling fields, that + # differ by their spatial discretization on the mesh (values on + # cells, values on nodes, ...). This spatial discretization is + # specified (at least) by the TypeOfField that is an integer value + # in this list: + # 0 = ON_CELLS + # 1 = ON_NODES + # 2 = ON_GAUSS_PT + # 3 = ON_GAUSS_NE + try: + return __mapTypeOfFieldLabel[typeOfField] + except IndexError, e: + return "UNCKNOWN" + +#----- +# This function is to be called from the working python console to +# specify the globals() dictionnary (used in fieldtools for stat analysis) +# +# >>> xmed.setConsoleGlobals(globals()) +# +import fieldtools +def setConsoleGlobals(pyConsoleGlobals): + fieldtools.pyConsoleGlobals = pyConsoleGlobals + +# +# =================================================================== +# unit test functions +# =================================================================== +# +def TEST_typeOfFieldLabel(): + print typeOfFieldLabel(0) + print typeOfFieldLabel(5) + +# =================================================================== +if __name__ == "__main__": + TEST_typeOfFieldLabel() diff --git a/src/MEDOP/tui/xmedpy/cmdtools.py b/src/MEDOP/tui/xmedpy/cmdtools.py new file mode 100644 index 000000000..4361ecd64 --- /dev/null +++ b/src/MEDOP/tui/xmedpy/cmdtools.py @@ -0,0 +1,60 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# +# Author : Guillaume Boulant (EDF) + +# +# =================================================================== +# The functions of this module must be imported as global functions in +# the SALOME python console. It provides the console context with +# general purpose python commands. +# =================================================================== +# +# add something to clear the screen +class Cls(object): + """ + This class can be used to create a command that clear the shell + screen running this python interpreter. + """ + def __repr__(self): + import os + os.system('cls' if os.name == 'nt' else 'clear') + return '' + +cls = Cls() + +class Prompt: + """ + This class can be used to create a special prompt + """ + def __str__(self): + import os + return 'medop> ' + +import sys +sys.ps1 = Prompt() +del sys +del Prompt + +class Wipe(object): + def __repr__(self): + return '>>>\n'*40 + +wipe = Wipe() + diff --git a/src/MEDOP/tui/xmedpy/driver_pvis.py b/src/MEDOP/tui/xmedpy/driver_pvis.py new file mode 100644 index 000000000..b70e26624 --- /dev/null +++ b/src/MEDOP/tui/xmedpy/driver_pvis.py @@ -0,0 +1,85 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# +# Author : Guillaume Boulant (EDF) + +import MEDCoupling +__mapTypeOfField2ParavisLabel={ + MEDCoupling.ON_CELLS:"OnCell", + MEDCoupling.ON_NODES:"OnPoint", + MEDCoupling.ON_GAUSS_PT:"ON_GAUSS_PT", + MEDCoupling.ON_GAUSS_NE:"ON_GAUSS_NE"} + +def pvis_typeOfFieldLabel(typeOfField): + # A field name could identify several MEDCoupling fields, that + # differ by their spatial discretization on the mesh (values on + # cells, values on nodes, ...). This spatial discretization is + # specified (at least) by the TypeOfField that is an integer value + # in this list: + # 0 = ON_CELLS = OnCell + # 1 = ON_NODES = OnPoint + # 2 = ON_GAUSS_PT + # 3 = ON_GAUSS_NE + try: + return __mapTypeOfField2ParavisLabel[typeOfField] + except IndexError, e: + return "UNCKNOWN" + +def pvis_scalarmap(filename,meshname,fieldname,typeOfField,iteration=-1): + """ + This is the minimalist function to render a scalar map on a field + load from a med file using the PARAVIS module. + """ + import pvsimple + + reader = pvsimple.MEDReader( FileName=filename ) + # For fiels defined on cells, it seems to be required to specify + # the type of fields + if typeOfField == MEDCoupling.ON_CELLS: + reader.Groups = ["GROUP/%s/%s/No_Group"%(meshname,pvis_typeOfFieldLabel(typeOfField))] + + representation = pvsimple.GetDisplayProperties(reader) + representation.ColorArrayName = fieldname + + lookupTable = pvsimple.GetLookupTableForArray( + fieldname, 1, NanColor=[0.25, 0.0, 0.0], + RGBPoints=[25.0, 0.23, 0.30, 0.754, 245.0, 0.71, 0.016, 0.15], + VectorMode='Magnitude', ColorSpace='Diverging', ScalarRangeInitialized=1.0 ) + representation.LookupTable = lookupTable + + pvsimple.Render() + + return True + + +def TEST_scalarmap(): + import os + from xmed import properties + properties.setup(properties.testdata_02) # test with nodes + #properties.setup(properties.testdata_03) # test with cells + pvis_scalarmap(properties.testFilePath, + properties.testMeshName, + properties.testFieldName, + properties.testTypeOfField, + properties.testFieldIt) + +if __name__ == "__main__": + TEST_scalarmap() + + diff --git a/src/MEDOP/tui/xmedpy/driver_visu.py b/src/MEDOP/tui/xmedpy/driver_visu.py new file mode 100644 index 000000000..60c618131 --- /dev/null +++ b/src/MEDOP/tui/xmedpy/driver_visu.py @@ -0,0 +1,120 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# +# Author : Guillaume Boulant (EDF) + +import VISU +import MEDCoupling +__mapMedType2VisuType={ + MEDCoupling.ON_CELLS:VISU.CELL, + MEDCoupling.ON_NODES:VISU.NODE, + MEDCoupling.ON_GAUSS_PT:VISU.TGAUSSPOINTS + } + +def visu_typeOfField(medTypeOfField): + """ + This function gives the visu type corresponding to the specified + med type. + """ + try: + return __mapMedType2VisuType[medTypeOfField] + except IndexError, e: + return "UNCKNOWN" + + +import salome +from libSALOME_Swig import SALOMEGUI_Swig + +def visu_scalarmap(filename,meshname,fieldname,typeOfField,iteration=-1): + """ + This is the minimalist function to render a scalar map on a field + load from a med file using the VISU module. + """ + + # We first have to prepare a pointer to the VISU component engine. + visuComp = salome.lcc.FindOrLoadComponent("FactoryServer", "VISU") + visuComp.SetCurrentStudy(salome.myStudy) + + visumed = visuComp.CreateResult(filename) + visumed.SetBuildGroups(True) + visumed.SetBuildFields(True, True) + visumed.Build(False, True) + if not visumed.IsDone() : + print "ERR: can't create a representation of med data" + return False + + visuComp.RenameEntityInStudy(visumed, meshname, VISU.NODE, 'onNodes') + visuComp.RenameEntityInStudy(visumed, meshname, VISU.CELL, 'onCells') + + visuType = visu_typeOfField(typeOfField) + scalarmap = visuComp.ScalarMapOnField(visumed, + meshname, + visuType, + fieldname, + iteration) + if scalarmap is None: + print "ERR: can't create a scalar map" + return False + + # __GBO__ maybe it could be appreciated to select the component to + # display. In this interface, the modulus of the field is + # considered. + component = 1 + scalarmap.SetScalarMode(component) + scalarmap.SetSourceRange() + scalarmap.SetScaling(VISU.LINEAR) + scalarmap.SetTitle(fieldname) + + # This final part is to automatically display the scalar map in a + # VISU viewer. + sg = SALOMEGUI_Swig() + sg.updateObjBrowser(1) + + # Display the scalar map in the viewer + myViewManager = visuComp.GetViewManager() + myView = myViewManager.Create3DView() + myView.Maximize() + myView.Display(scalarmap); + myView.SetFocalPoint([0,0,0]); + myView.FitAll(); + + return True + + +def TEST_scalarmap(): + import os + from xmed import properties + #properties.setup(properties.testdata_02) # test with nodes + properties.setup(properties.testdata_03) # test with cells + + # __GBO__: WARN due to a specific feature of VISU, when only one + # field timestamps exists in the med file, we have to specify an + # iteration number of 1, whatever the iteration value is in the + # med file. + #iteration = properties.testFieldIt + iteration = 1 + + visu_scalarmap(properties.testFilePath, + properties.testMeshName, + properties.testFieldName, + properties.testTypeOfField, + iteration) + +if __name__ == "__main__": + TEST_scalarmap() diff --git a/src/MEDOP/tui/xmedpy/fieldguide.py b/src/MEDOP/tui/xmedpy/fieldguide.py new file mode 100644 index 000000000..bda5a608c --- /dev/null +++ b/src/MEDOP/tui/xmedpy/fieldguide.py @@ -0,0 +1,67 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# +# Author : Guillaume Boulant (EDF) + +# +# =================================================================== +# Th module must be imported as global in the SALOME python console to +# provide the user with documentation on fields operations. +# =================================================================== +# + +class UserGuide: + """ + In this python console, you manipulate variables that identifies + field objects. These variables are proxy objects towards the real + MED fields stored as MEDCoupling instances in the SALOME + container. + + What you can do with this proxy object: + + - you can manipulate this object in algebric operations (+,-,*,/): + >>> add = f1 + f2 + >>> dif = f1 - f2 + >>> mul = f1 * f2 + >>> div = f1 / f2 (an exception is raised in case of division by 0) + >>> square = pow(f1, 2) + + - the operande could be a scalar numerical value: + >>> offset = f1 + 4.2 + >>> scaling = 3.8 * f1 + + - any combination of this operations can be done on a single instruction: + >>> x = f1 + pow(f2) + >>> y = f1 + x - f2 + + - you can request some helper functions on this object: + >>> doc : print the user documentation for field operations + >>> print f : print the main properties of the field f (name, values, ...) + >>> f.dup() : create a dublicate of the field f + >>> dup(f) : do the same thing + >>> f.visu() : display the modulus of this field using VISU post-processor. + """ + + def __repr__(self): + return UserGuide.__doc__ + + def __call__(self, command): + print "help on command %s"%command + +doc=UserGuide() diff --git a/src/MEDOP/tui/xmedpy/fieldproxy.py b/src/MEDOP/tui/xmedpy/fieldproxy.py new file mode 100644 index 000000000..93933d4bf --- /dev/null +++ b/src/MEDOP/tui/xmedpy/fieldproxy.py @@ -0,0 +1,422 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# +# Author : Guillaume Boulant (EDF) + +import xmed +import MEDOP +import SALOME + +def newFieldProxy(fieldHandlerId): + ''' + This creates a new FieldProxy wrapping the field whose + fieldHandlerId is passed in argument. The function requests the + xmedDataManager to get the fieldHandler from its id. + ''' + fieldHandler = xmed.dataManager.getFieldHandler(fieldHandlerId) + return FieldProxy(fieldHandler) + +# This define the map between attributes of a FieldProxy and those of +# the associated FieldHandler +PROXY_ATTRIBUTES_MAP = {"id":None, + "fieldseriesId":None, + "fieldname":"name", + "meshname":None, + "meshid":None, + "type":None, + "iteration":"iteration", + "order":"order", + "source":"source"} + +class FieldProxy: + """ + This object is a proxy to manipulate a remote MEDCoupling field + from within the SALOME python interpreter. Remote means that the + MEDCoupling field is in the SALOME container and not in the + client. See UserGuide class for detailed documentation of what can + be done with a field proxy. + """ + def __init__( self, fieldHandler ): + """ + This defines the wrapping on the field specified by its + fieldHandler id. + """ + self.__fieldHandler = fieldHandler + self.__restriction = None + print self.__repr__() + + def __getattr__(self, name ): + """ + This method realizes the read proxy pattern toward the field + handler. + """ + # WRN: Note that the modification of this function can lead to + # coercion problem. Modify this function with extrem care. + return getattr( self.__fieldHandler, name ) + + def __setattr__(self, name, value): + """ + This method realizes the write proxy pattern toward the field + handler. Only some attributes are writable. The list is + specified in the PROXY_ATTRIBUTES_MAP table. + """ + if name in PROXY_ATTRIBUTES_MAP.keys(): + if PROXY_ATTRIBUTES_MAP[name] is not None: + xmed.wrn("The modification of this attribute can't be done that way") + msg="Use f.update(%s=\"%s\") instead to ensure synchronisation of data." + xmed.inf(msg%(PROXY_ATTRIBUTES_MAP[name],value)) + else: + xmed.err("The modification of the attribute %s is not possible"%name) + else: + self.__dict__[name] = value + + def __repr__(self): + """ + Return a string containing a printable representation of this + object (what is displayed when typing the variable name and + carriage return). + """ + # We need first to update the handler because some data can + # have changed (the meshid for example in case of change of + # underlying mesh). + # __GBO__ : TODO check the performance + self.__fieldHandler = xmed.dataManager.getFieldHandler(self.id) + text = "field name (id)\t = %s (%s)\n"%(self.fieldname, self.id) + text+= "mesh name (id) \t = %s (%s)\n"%(self.meshname,self.meshid) + text+= "discretization \t = %s\n"%xmed.typeOfFieldLabel(self.type) + text+= "(iter, order) \t = (%s,%s)\n"%(str(self.iteration),str(self.order)) + text+= "data source \t = %s"%self.source + return text + + def __str__(self): + """ + This is what is displayed when you type 'print myField'. Note + that this function prints the values of the field and then you + must be aware that a huge amount of data could be + displayed. Moreover, it means that this operation triggers the + loading of the associated MEDCouplingFied data in the SALOME + container. + """ + text = xmed.dataManager.getFieldRepresentation(self.id) + return text + + def __add__(self, operande): + """ + This makes the addition of two fields or the addition of a + scalar to a field. It depends weither the operande is a + FieldProxy or a simple scalar numerical value. + """ + # The xmed calculator could raise exceptions coming from + # MEDCoupling. Note that the fieldproxy instances are used + # from within the python console, and for ergonomic reason, we + # choose to not raise the possible exceptions to the console + # by a clear message. Keep this in mind for unit test. You + # have to test the return value, which should not be + # null. This principle is applyed for all operations. + try: + if isinstance(operande, FieldProxy): + # The operande is an other field + xmed.inf("Addition of %s and %s"%(self.fieldname, operande.fieldname)) + rfieldHandler = xmed.calculator.add(self.__fieldHandler, operande.__fieldHandler) + else: + # The operande is a scalar numerical value that must be + # considered as an offset in a linear transformation + factor = 1 + offset = operande + xmed.inf("Application of the offset %s to %s" % (offset, self.fieldname)) + rfieldHandler = xmed.calculator.lin(self.__fieldHandler, factor, offset) + except SALOME.SALOME_Exception, ex: + xmed.err(ex.details.text) + return None + + return FieldProxy(rfieldHandler) + + def __radd__(self, operande): + """ + The user typed 'operande+self', we replace by 'self+operande' + to automatically activate the __add__ method of fieldpoxy. + """ + return self+operande + + def __iadd__(self, operande): + """ + These methods implements the augmented arithmetic assignments (+=) + """ + xmed.wrn("NOT IMPLEMENTED YET") + + def __sub__(self,operande): + """ + This makes the substraction of two fields or the substraction + of a scalar to a field. It depends weither the operande is a + FieldProxy or a simple scalar numerical value. + """ + try: + if isinstance(operande, FieldProxy): + # The operande is an other field + xmed.inf("Substraction of %s by %s"%(self.fieldname, operande.fieldname)) + rfieldHandler = xmed.calculator.sub(self.__fieldHandler, operande.__fieldHandler) + else: + # The operande is a scalar numerical value that must be + # considered as an offset in a linear transformation + factor = 1 + offset = -operande + xmed.inf("Application of the offset %s to %s" % (offset, self.fieldname)) + rfieldHandler = xmed.calculator.lin(self.__fieldHandler, factor, offset) + except SALOME.SALOME_Exception, ex: + xmed.err(ex.details.text) + return None + + return FieldProxy(rfieldHandler) + + def __rsub__(self, operande): + """ + The user typed 'operande-self' where operande is not a field + proxy. This function process the situation. + """ + # The operande is a numerical value (because otherwise, the + # "sub" method would have been called instead). We may apply + # the command '(self-operande)*(-1)' to activate the __sub__ + # method of fieldpoxy. + # + #return (self-operande)*(-1) + # + # We prefer to apply a linear transformation because it can be + # done in one single request to the med calculator. + + factor = -1 + offset = operande + xmed.inf("Linear transformation %s%s*%s" % (offset, factor, self.fieldname)) + try: + rfieldHandler = xmed.calculator.lin(self.__fieldHandler, factor, offset) + except SALOME.SALOME_Exception, ex: + xmed.err(ex.details.text) + return None + + return FieldProxy(rfieldHandler) + + def __mul__(self, operande): + """ + This makes the multiplication of two fields or the + multiplication of a scalar to a field. It depends weither the + operande is a FieldProxy or a simple scalar numerical value. + """ + try: + if isinstance(operande, FieldProxy): + # The operande is an other field + xmed.inf("Multiplication of %s by %s"%(self.fieldname, operande.fieldname)) + rfieldHandler = xmed.calculator.mul(self.__fieldHandler, operande.__fieldHandler) + else: + # The operande is a scalar numerical value that must be + # considered as an offset in a linear transformation + factor = operande + offset = 0 + xmed.inf("Scaling %s by factor %s" % (self.fieldname, factor)) + rfieldHandler = xmed.calculator.lin(self.__fieldHandler, factor, offset) + except SALOME.SALOME_Exception, ex: + xmed.err(ex.details.text) + return None + + return FieldProxy(rfieldHandler) + + def __rmul__(self, operande): + """ + The user typed 'operande*self', we want to execute + 'self*operande' to activate the __mul__ method of fieldpoxy. + """ + return self*operande + + def __div__(self, operande): + """ + This makes the division of two fields or the division of field + by a scalar. It depends weither the operande is a FieldProxy + or a simple scalar numerical value. + """ + try: + if isinstance(operande, FieldProxy): + # The operande is an other field + xmed.inf("Division of %s by %s"%(self.fieldname, operande.fieldname)) + rfieldHandler = xmed.calculator.div(self.__fieldHandler, operande.__fieldHandler) + else: + # The operande is a scalar numerical value that must be + # considered as an offset in a linear transformation + factor = 1./operande + offset = 0 + xmed.inf("Scaling %s by factor 1/%s" % (self.fieldname, operande)) + rfieldHandler = xmed.calculator.lin(self.__fieldHandler, factor, offset) + except SALOME.SALOME_Exception, ex: + xmed.err(ex.details.text) + return None + + return FieldProxy(rfieldHandler) + + def __rdiv__(self, operande): + """ + The user typed 'operande/self', we want to execute for each + value of the field the operation 'operande/value'. + """ + xmed.inf("Division of %s by %s" % (operande, self.fieldname)) + function = "%s/u"%operande + nbResComp = MEDOP.NBCOMP_DEFAULT + try: + rfieldHandler = xmed.calculator.fct(self.__fieldHandler,function,nbResComp) + except SALOME.SALOME_Exception, ex: + xmed.err(ex.details.text) + return None + + return FieldProxy(rfieldHandler) + + def __pow__(self, power): + """ + This compute the power of the field to the specified value. + """ + function = "abs(u)^%s"%power + return self.ope(function,duplicate=True) + + def __abs__(self): + """ + This compute the absolute value of the field. We use here + """ + return self.ope(function="abs(u)",duplicate=True) + + def __neg__(self): + """ + This computes the negative of this field (when you type -f) + """ + return -1*self + + def dup(self): + """ + This creates a duplicate of the field. The whole data are + duplicated. + """ + xmed.inf("Duplication of %s"%self.fieldname) + try: + rfieldHandler = xmed.calculator.dup(self.__fieldHandler) + except SALOME.SALOME_Exception, ex: + xmed.err(ex.details.text) + return None + + return FieldProxy(rfieldHandler) + + def ope(self, function, duplicate=True): + """ + This can be used to apply a transformation function to this + field. The transformation is specified using a literal + equation given as a string where u stands for the field. + """ + # _GBO_ TO BE IMPLEMENTED: the case where duplicate = False + # must modify the object itself and not create a new field + xmed.inf("Operate the equation \"%s\" to %s"%(function,self.fieldname)) + try: + rfieldHandler = xmed.calculator.fct(self.__fieldHandler, + function, + MEDOP.NBCOMP_DEFAULT) + except SALOME.SALOME_Exception, ex: + xmed.err(ex.details.text) + return None + + return FieldProxy(rfieldHandler) + + + def __call__(self, restriction=None): + """ + This could be used to return a fieldproxy binded on the same + fieldHandler than self, but with options that restrict the + usage to a domain specified by the given arguments (restricted + to a component, to a part of the mesh, ...). + """ + xmed.wrn("Not implemented yet. Return the field itself") + self.__restriction = restriction + return self + + def update(self,name=None,iteration=None,order=None,source=None): + """ + This function can be used to update the meta-data associated + to this field. It can modify the name, the iteration, the + order and the source. + """ + if name is None: + name = self.fieldname + if iteration is None: + iteration = self.iteration + if order is None: + order = self.order + if source is None: + source = self.source + + xmed.dataManager.updateFieldMetadata(self.id,name,iteration,order,source) + self.__fieldHandler.fieldname = name + self.__fieldHandler.iteration = iteration + self.__fieldHandler.order = order + self.__fieldHandler.source = source + # WARN: Note that you have to update directly the fieldHandler + # object because of the presence of the method __setattr__ + # that make the proxy to this update method + + # Finally, we have to notify the GUI for update of field prestations + #self.__notifyGui_update() + notifyGui_update(self.id) + + # Print for visual control + print self.__repr__() + +# +# =================================================================== +# Functions for events notification +# =================================================================== +# +# Note that these functions are not part of the class FieldProxy so +# that they could be used in another context than the FieldProxy instances +import MEDOP + +def __notifyGui(type, fieldId): + medEvent = MEDOP.MedEvent(type, fieldId) + + if not xmed.eventListenerIsRunning(): return + + # Notify the GUI of the update event + xmed.eventListener.processMedEvent(medEvent) + + +def notifyGui_update(fieldId): + """ + This function must be used to notify the GUI that the field + meta-data have changed so it could update the gui + presentations of this field. + """ + __notifyGui(MEDOP.EVENT_UPDATE_FIELD,fieldId) + +def notifyGui_add(fieldId): + __notifyGui(MEDOP.EVENT_ADDNEW_FIELD,fieldId) + +# +# =================================================================== +# use case functions +# =================================================================== +# + +# =================================================================== +if __name__ == "__main__": + # See test_medoperation.py + pass + + + + + diff --git a/src/MEDOP/tui/xmedpy/fieldtools.py b/src/MEDOP/tui/xmedpy/fieldtools.py new file mode 100644 index 000000000..dbfcad72f --- /dev/null +++ b/src/MEDOP/tui/xmedpy/fieldtools.py @@ -0,0 +1,216 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# +# Author : Guillaume Boulant (EDF) + +# +# =================================================================== +# The functions of this module must be imported as global functions in +# the SALOME python console. It provides the console context with Tool +# functions to manipulate field throw there fieldproxy. +# =================================================================== +# + +import xmed +from xmed.fieldproxy import FieldProxy, newFieldProxy + +# =================================================================== +# Operations on fields + +def dup(aFieldProxy): + """ + This function returns a duplicate of the specified field. + It's equivalent to the call '>>> copy = f.dup()'. + """ + try: + clone = aFieldProxy.dup() + except Exception: + print "ERR: the argument can't be duplicated as a field object" + return None + return clone + +# =================================================================== +# Get list a field with information using the commands ls and/or la + +# IMPORTANT NOTE: +# the pyConsoleGlobals variable should holds the globals() dictionnary of +# the python console context +pyConsoleGlobals=None + +def status(local=True,remote=False): + """ + This function return the status of the medop context, i.e. the + list of fields defined in this python session. + """ + status="" + if local is True: + dvars = pyConsoleGlobals + if dvars is None: + xmed.wrn("The stat function required the specification of the python context") + xmed.inf("Type this command \"import xmed; xmed.setConsoleGlobals(globals())") + if remote is True: + status="========= Fields used in the current context ===\n" + for varkey in dvars.keys(): + var = dvars[varkey] + if isinstance(var, FieldProxy): + status+="%s \t(id=%s, name=%s)\n"%(varkey,var.id,var.fieldname) + + if remote is True: + if local is True: + status+="\n========= Fields available in the data manager ===\n" + fieldHandlerList = xmed.dataManager.getFieldHandlerList() + for fieldHandler in fieldHandlerList: + status+="id=%s\tname\t= %s\n\tmesh\t= %s\n\t(it,dt)\t= (%s,%s)\n\tsource\t= %s\n"%( + fieldHandler.id, + fieldHandler.fieldname, + fieldHandler.meshname, + fieldHandler.iteration, + fieldHandler.order, + fieldHandler.source) + status+="---------\n" + + if len(fieldHandlerList) > 0: + status+="(use 'f=get(id)' to get a field in the current context)" + + return status + +# For simpler typing, one can create a python command for status +# (avoid to type "print status()") +class ListFields(object): + """ + A stat object displays the status of the med operating context, i.e. the + list of fields defined in this python session. + """ + def __init__(self,all=False): + self.__local = True + self.__remote = all + # all = True means that the local metadata (fieldproxy) and the + # remote metadata on the engine (MEDCouplingFieldDouble) are + # displayed by the stat command. Otherwise, only the local + # metadata are displayed. + + def __repr__(self): + return status(self.__local, self.__remote) + +# Creating the commands list (ls) and list all (la) +ls=ListFields(all=False) +la=ListFields(all=True) + +# =================================================================== +# Field Data Management +from xmed import properties +filepath = properties.testFilePath + +def load(medFileName=filepath): + """ + This function indicates that we want to use the fields from the + specified med file. The fields meta-data are loaded in the engine + part of the module. To get a fieldproxy on a field, call the get + function with the id of the required field. To display the whole + list of fields loaded in the engine, type 'ls' (la verbose). + """ + xmed.dataManager.addDatasource(filepath) + print status(local=False,remote=True) + +def get(fieldHandlerId): + """ + This return a field proxy on the field identified by the specified + field handler id. + """ + return newFieldProxy(fieldHandlerId) + +from xmed.fieldproxy import notifyGui_add +def put(aFieldProxy): + """ + This function puts a reference to this field in the GUI data + model. When a field is referenced in the GUI data model, then it + belongs to the workspace. When the workspace is saved, all the + field that belongs to the workspace are saved. + """ + xmed.dataManager.markAsPersistent(aFieldProxy.id, True) + notifyGui_add(aFieldProxy.id) + +import SALOME +def save(filename): + """ + Dump your job in a med file. Only the fields marked as persistent + are saved in the specified file. + """ + try: + xmed.dataManager.savePersistentFields(filename) + except SALOME.SALOME_Exception, ex: + xmed.err(ex.details.text) + +# =================================================================== +# Field Data visualization +VIEWER_VISU = "VISU" +VIEWER_PARAVIS = "PARAVIS" +VIEWER_DEFAULT = VIEWER_VISU + +VIEWER_TMP_FILE = "/tmp/medop_viewer.med" + +def view_using_paravis(aFieldProxy): + # __GBO__ TO BE IMPROVED: we used a tmp file in this first step of + # development, but we should used at last a MEDCoupling corba + # object (see how to use the stuff in PARAVIS/src/Plugins) + xmed.dataManager.saveFields(VIEWER_TMP_FILE, [aFieldProxy.id]) + + from xmed.driver_pvis import pvis_scalarmap + pvis_scalarmap(VIEWER_TMP_FILE, + aFieldProxy.meshname, + aFieldProxy.fieldname, + aFieldProxy.type, + aFieldProxy.iteration) + +def view_using_visu(aFieldProxy): + # __GBO__ TO BE IMPROVED: we used a tmp file in this first step of + # development, but we should used at last a MEDCoupling corba + # object (see how to use the stuff in PARAVIS/src/Plugins) + xmed.dataManager.saveFields(VIEWER_TMP_FILE, [aFieldProxy.id]) + + # __GBO__: WARN due to a specific feature of VISU, when only one + # field timestamps exists in the med file, we have to specify an + # iteration number of 1, whatever the iteration value is in the + # med file. + iteration = 1 # __GBO__ for bug VISU + # instead of: + # iteration = aFieldProxy.iteration + + from xmed.driver_visu import visu_scalarmap + result = visu_scalarmap(VIEWER_TMP_FILE, + aFieldProxy.meshname, + aFieldProxy.fieldname, + aFieldProxy.type, + iteration) + if result is False: + xmed.err("the field can't be displayed") + +def view(aFieldProxy, using=VIEWER_DEFAULT): + """ + This displays a 3D view of the field using VISU or PARAVIS, + depending on the configuration. This view is for quick visual + control of a field and is not intended to be parametrizable. For + custom display, you should import the fields in VISU or PARAVIS + and continue the job in one of this SALOME module. + """ + if using == VIEWER_PARAVIS: + view_using_paravis(aFieldProxy) + else: + view_using_visu(aFieldProxy) + diff --git a/src/MEDOP/tui/xmedpy/medop.py b/src/MEDOP/tui/xmedpy/medop.py new file mode 100644 index 000000000..baf8d1817 --- /dev/null +++ b/src/MEDOP/tui/xmedpy/medop.py @@ -0,0 +1,37 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# +# Author : Guillaume Boulant (EDF) + +# +# =================================================================== +# medop.py is a tools to initialize a python console outside of the +# GUI for field operations. A salome session must be running +# first. For example: +# $ ./runAppli -t +# $ ./runSession +# $ python -i path/to/medop.py +# =================================================================== +# + +import xmed +# Set the globals dictionnary so that the fields tools work properly. +xmed.setConsoleGlobals(globals()) +# Import the tools required for field operations +from xmed import load, get, put, dup, ls, la, save, view, doc, wipe diff --git a/src/MEDOP/tui/xmedpy/properties.py b/src/MEDOP/tui/xmedpy/properties.py new file mode 100644 index 000000000..ef92df389 --- /dev/null +++ b/src/MEDOP/tui/xmedpy/properties.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# This file defines some properties for test purposes + +import os + +try: + MED_ROOT_DIR=os.environ["MED_ROOT_DIR"] +except KeyError, e: + raise RuntimeError("MED_ROOT_DIR should be defined to load the test data") + +RESDIR=os.path.join(MED_ROOT_DIR,"share","salome","resources","med","medop_testfiles") + +def testdata_01(): + testFileName = "testfield.med" + testMeshName = "Mesh" + testFieldName= "testfield1" + testFieldIt = -1 + testFieldDt = -1 + testTypeOfField = 0 # On cells + return testFileName, testMeshName, testFieldName, testTypeOfField, testFieldIt, testFieldDt + +def testdata_02(): + testFileName = "smallmesh_varfield.med" + testMeshName = "My2DMesh" + testFieldName= "testfield2" + testFieldIt = 1 + testFieldDt = 1 + testTypeOfField = 1 # On nodes + return testFileName, testMeshName, testFieldName, testTypeOfField, testFieldIt, testFieldDt + +def testdata_03(): + testFileName = "fieldlena.med" + testMeshName = "lenamesh" + testFieldName= "lenafield" + testFieldIt = 3 + testFieldDt = 0 + testTypeOfField = 0 # On cells + return testFileName, testMeshName, testFieldName, testTypeOfField, testFieldIt, testFieldDt + +# Default values +testdata=testdata_02 +testFileName, testMeshName, testFieldName, testTypeOfField, testFieldIt, testFieldDt = testdata() +testFilePath = os.path.join(RESDIR,testFileName) + +# Setup test values +def setup(testdata=testdata_02): + global testFileName, testMeshName, testFieldName + global testFieldIt, testFieldDt, testFilePath, testTypeOfField + testFileName, testMeshName, testFieldName, testTypeOfField, testFieldIt, testFieldDt = testdata() + testFilePath = os.path.join(RESDIR,testFileName) + +def display(): + """ + Displays the properties values defined in this script. + """ + print 60*"=" + " Properties values - START" + print "MED_ROOT_DIR = ",MED_ROOT_DIR + print "RESDIR = ",RESDIR + print "testFileName = ",testFileName + print "testFilePath = ",testFilePath + print 60*"=" + " Properties values - END" + +#display() + +def getFilePath(filename): + """ + Returns the absolute path for a given file base name. The base + name must match with a file contained in the test files directory. + """ + filepath = os.path.join(RESDIR,filename) + if not os.path.exists(filepath): + raise RuntimeError("The file %s does not exists"%filepath) + return filepath diff --git a/src/MEDOP/tui/xmedpy/tests/test_xmed_fieldOperations.py b/src/MEDOP/tui/xmedpy/tests/test_xmed_fieldOperations.py new file mode 100644 index 000000000..a6dd3aadc --- /dev/null +++ b/src/MEDOP/tui/xmedpy/tests/test_xmed_fieldOperations.py @@ -0,0 +1,215 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-1 -*- +# +# This file is a set of basic use case to test (from the python +# context) the functions developped in MED modules for the field +# operations. +# +# (gboulant - 16/6/2011) +# +import xmed +from xmed import properties +from xmed import fieldproxy +from xmed.fieldproxy import FieldProxy +#from xmed.fieldtools import dup, stat, get, save +#from xmed.fieldguide import doc + +# Don't forget to set the globals dictionnary for the fields tools to +# work properly +xmed.setConsoleGlobals(globals()) + +# Load some test data in the MedDataManager +filepath = properties.testFilePath +xmed.dataManager.addDatasource(filepath) +fieldHandlerList = xmed.dataManager.getFieldHandlerList() + +def setup(): + """ + This function defines a set of field variable for quick tests in + the python console. You just have to execute the function to get + the variables defined in the global context. + """ + fh1=fieldHandlerList[0] + fh2=fieldHandlerList[1] + f1 = FieldProxy(fh1) + f2 = FieldProxy(fh2) + return fh1, fh2, f1, f2 + +# Setup for quick tests in the python console +fh1, fh2, f1, f2 = setup() + +def TEST_addition(): + fieldHandler0 = fieldHandlerList[0] + fieldHandler1 = fieldHandlerList[1] + + # The addition can be done using field handler directly + addFieldHandler = xmed.calculator.add(fieldHandler0, fieldHandler1) + print addFieldHandler + + # Or with a field proxy that ease the writing of operations + fieldProxy0 = FieldProxy(fieldHandler0) + fieldProxy1 = FieldProxy(fieldHandler1) + + res = fieldProxy0 + fieldProxy1 + if res is None: return False + + return True + +def TEST_arithmetics(): + fieldProxy0 = FieldProxy(fieldHandlerList[0]) + fieldProxy1 = FieldProxy(fieldHandlerList[1]) + + # Standard operations where operandes are fields + res = fieldProxy0 + fieldProxy1 + if res is None: return False + res = fieldProxy0 - fieldProxy1 + if res is None: return False + res = fieldProxy0 * fieldProxy1 + if res is None: return False + res = fieldProxy0 / fieldProxy1 + + # Standard operations with scalar operandes + res = fieldProxy0 + 3.4 + if res is None: return False + res = 3.4 + fieldProxy0 + if res is None: return False + res = fieldProxy0 - 3.4 + if res is None: return False + res = 3.4 - fieldProxy0 + if res is None: return False + res = fieldProxy0 * 3.4 + if res is None: return False + res = 3.4 * fieldProxy0 + if res is None: return False + res = fieldProxy0 / 3.4 + if res is None: return False + res = 3.4 / fieldProxy0 + if res is None: return False + + return True + +def TEST_unary_operations(): + fieldProxy0 = FieldProxy(fieldHandlerList[0]) + + res = fieldProxy0.dup() + if res is None: return False + res = xmed.dup(fieldProxy0) + if res is None: return False + res = pow(fieldProxy0,2) + if res is None: return False + + return True + +def TEST_composition(): + # In this test, we combine operandes that are supposed + # to be compatible. We expect that no error occur. + fieldProxy0 = FieldProxy(fieldHandlerList[0]) + fieldProxy1 = FieldProxy(fieldHandlerList[1]) + + res = pow(fieldProxy0,2) + fieldProxy1 + if res is None: return False + + return True + +def TEST_litteral_equation(): + fieldProxy0 = FieldProxy(fieldHandlerList[0]) + res = fieldProxy0.ope("abs(u)^2") + if res is None: return False + return True + +def TEST_use_restriction(): + fieldProxy0 = FieldProxy(fieldHandlerList[0]) + res = fieldProxy0("c=1;g='toto'") + if res is None: return False + return True + +def TEST_modification_of_attributes(): + fieldProxy0 = FieldProxy(fieldHandlerList[0]) + id_ref = fieldProxy0.id + fieldname_ref = fieldProxy0.fieldname + meshname_ref = fieldProxy0.meshname + + # + # This operations are not allowed, or not that way + # + # This should print that it is not allowed: + fieldProxy0.id = id_ref+3 + if fieldProxy0.id != id_ref: + print "ERR: the id should be %d (%d found)"%(id_ref,fieldProxy0.id) + return False + # This should print that it must be done using the command update + fieldProxy0.fieldname = fieldname_ref+"toto" + if fieldProxy0.fieldname != fieldname_ref: + print "ERR: the fieldname should be %s (%s found)"%(fieldname_ref,fieldProxy0.fieldname) + return False + # This should print that it is not allowed: + fieldProxy0.meshname = meshname_ref+"titi" + if fieldProxy0.meshname != meshname_ref: + print "ERR: the meshname should be %s (%s found)"%(meshname_ref,fieldProxy0.meshname) + return False + + return True + +def TEST_update_metadata(): + fieldProxyRef = FieldProxy(fieldHandlerList[0]) + id = fieldProxyRef.id + + name_ref = "toto" + fieldProxyRef.update(name=name_ref) + + fieldProxyRes = xmed.get(id) + name_res = fieldProxyRes.fieldname + if name_res != name_ref: + print "ERR: the fieldname should be %s (%s found)"%(name_ref,name_res) + return False + return True + +# +# ============================================================= +# Unit tests +# ============================================================= +# +import unittest +from salome.kernel import pyunittester +class MyTestSuite(unittest.TestCase): + def test_addition(self): + result = pyunittester.execAndConvertExceptionToBoolean(TEST_addition) + self.assertTrue(result) + + def test_arithmetics(self): + result = pyunittester.execAndConvertExceptionToBoolean(TEST_arithmetics) + self.assertTrue(result) + + def test_unary_operations(self): + result = pyunittester.execAndConvertExceptionToBoolean(TEST_unary_operations) + self.assertTrue(result) + + def test_composition(self): + result = pyunittester.execAndConvertExceptionToBoolean(TEST_composition) + self.assertTrue(result) + + def test_litteral_equation(self): + result = pyunittester.execAndConvertExceptionToBoolean(TEST_litteral_equation) + self.assertTrue(result) + + def test_modification_of_attributes(self): + self.assertTrue(TEST_modification_of_attributes()) + + def test_update_metadata(self): + self.assertTrue(TEST_update_metadata()) + +def myunittests(): + pyunittester.run(MyTestSuite) + +def myusecases(): + TEST_addition() + #TEST_arithmetics() + #TEST_unary_operations() + #TEST_update_metadata() + #TEST_composition() + +if __name__ == "__main__": + #myusecases() + myunittests() + pass + diff --git a/src/MEDOP/tui/xmedpy/tests/test_xmed_uiEventListener.py b/src/MEDOP/tui/xmedpy/tests/test_xmed_uiEventListener.py new file mode 100644 index 000000000..d341b4930 --- /dev/null +++ b/src/MEDOP/tui/xmedpy/tests/test_xmed_uiEventListener.py @@ -0,0 +1,66 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2011 CEA/DEN, EDF R&D, OPEN CASCADE +# +# 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 +# +# Author : Guillaume Boulant (EDF) + +# This script can be used to test the event listener. Note that the +# event listener is a CORBA object created inside the XMED GUI and +# that it could be reached if and only if the XMED GUI is loaded +# first. +# +# Then two tests are defined: +# - First you can try to import and use this script in the python +# console while the XMED GUI is NOT loaded. Then you will check that +# the script detects that the event listener is not available. +# - Second you can try to import this script AFTER having load the +# XMED GUI. Then the test will be completed. +# + +import xmed +xmed.connectEventListener() + +if xmed.eventListener is None: + raise RuntimeError("The test must stop because the event listener is not defined") + +import MEDOP + +# We can first try to retrieve the IOR using the data manager (just +# for internal test because it's not required in the use cases) +print xmed.dataManager.getEventListenerIOR() +print xmed.dataManager.getEventListenerIOR() +print xmed.dataManager.getEventListenerIOR() +# Make it several time to check the memory releases. + +# We can then test the standard use case of the event listener +fieldHandler = MEDOP.FieldHandler(id = 0, + fieldname = "testfield", + meshname = "testmesh", + type = 0, + iteration = 0, + order = 0, + source = "test//:test_medEventListener.py") + +medEvent = MEDOP.MedEvent(type = MEDOP.EVENT_UPDATE_FIELD, + fieldid = fieldHandler.id) + +print fieldHandler +print medEvent + +xmed.eventListener.processMedEvent(medEvent) +print "Test completed" diff --git a/src/MEDOP/tui/xmedpy/tests/test_xmed_visualisation.py b/src/MEDOP/tui/xmedpy/tests/test_xmed_visualisation.py new file mode 100644 index 000000000..a16d025fb --- /dev/null +++ b/src/MEDOP/tui/xmedpy/tests/test_xmed_visualisation.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-1 -*- +# +# This file is a set of basic use case to test (from the python +# context) the functions developped in XMED and MED modules for the +# visualization of fields using VISU or PARAVIS. +# +# (gboulant - 6/7/2011) +# + +import xmed +from xmed import properties +from xmed.fieldproxy import FieldProxy + +# Load some test data in the MedDataManager +filepath = properties.testFilePath +fieldHandlerList = xmed.dataManager.addFieldsFromFile(filepath) + +def setup(): + """ + This function defines a set of field variable for quick tests in + the python console. You just have to execute the function to get + the variables defined in the global context. + """ + fh1=fieldHandlerList[0] + fh2=fieldHandlerList[1] + f1 = FieldProxy(fh1) + f2 = FieldProxy(fh2) + return fh1, fh2, f1, f2 + +# Setup for quick tests in the python console +fh1, fh2, f1, f2 = setup() + +def TEST_driver_visu(): + from xmed import fieldtools + fieldtools.view_using_visu(f1) + +if __name__ == "__main__": + TEST_driver_visu() diff --git a/src/MEDPartitioner/CMakeLists.txt b/src/MEDPartitioner/CMakeLists.txt index c82e559be..726e79780 100644 --- a/src/MEDPartitioner/CMakeLists.txt +++ b/src/MEDPartitioner/CMakeLists.txt @@ -17,18 +17,20 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -ADD_SUBDIRECTORY(Test) +IF(CPPUNIT_IS_OK) + ADD_SUBDIRECTORY(Test) +ENDIF(CPPUNIT_IS_OK) INCLUDE_DIRECTORIES( ${PARMETIS_INCLUDE_DIRS} ${METIS_INCLUDE_DIRS} ${SCOTCH_INCLUDE_DIRS} - ${BOOST_INCLUDE_DIRS} ${METIS_INCLUDE_DIRS} ${LIBXML_INCLUDE_DIRS} ${MED3_INCLUDE_DIRS} ${HDF5_INCLUDE_DIRS} ${MPI_INCLUDE_DIRS} + ${PTHREADS_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/../MEDLoader ${CMAKE_CURRENT_SOURCE_DIR}/../MEDCoupling ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL @@ -69,58 +71,59 @@ SET(medpartitionercpp_SOURCES MEDPARTITIONER_SkyLineArray.cxx ) -SET(medpartitionercpp_DEFINITIONS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${BOOST_DEFINITIONS} ${LIBXML_DEFINITIONS}") -SET(medpartitionercpp_LDFLAGS medloader ${LIBXML_LIBS}) - -IF(MED_ENABLE_SCOTCH) - SET(medpartitionercpp_SOURCES ${medpartitionercpp_SOURCES} MEDPARTITIONER_ScotchGraph.cxx) - SET(medpartitionercpp_HEADERS_HXX ${medpartitionercpp_HEADERS_HXX} MEDPARTITIONER_ScotchGraph.hxx) - SET(medpartitionercpp_DEFINITIONS "${medpartitionercpp_DEFINITIONS} ${SCOTCH_DEFINITIONS}") - SET(medpartitionercpp_LDFLAGS ${medpartitionercpp_LDFLAGS} ${SCOTCH_LIBS}) -ENDIF(MED_ENABLE_SCOTCH) - -IF(MPI_IS_OK) - IF(MED_ENABLE_PARMETIS) - SET(medpartitionercpp_SOURCES ${medpartitionercpp_SOURCES} MEDPARTITIONER_ParMetisGraph.cxx - MEDPARTITIONER_UtilsPara.cxx - MEDPARTITIONER_JointFinder.cxx - ) - SET(medpartitionercpp_HEADERS_HXX ${medpartitionercpp_HEADERS_HXX} MEDPARTITIONER_JointFinder.hxx MEDPARTITIONER_MetisGraph.hxx) - SET(medpartitionercpp_DEFINITIONS "${medpartitionercpp_DEFINITIONS} ${MPI_DEFINITIONS} ${PARMETIS_DEFINITIONS}") - SET(medpartitionercpp_LDFLAGS ${medpartitionercpp_LDFLAGS} ${PARMETIS_LIBS} ${MPI_LIBS}) - ELSE(MED_ENABLE_PARMETIS) - SET(medpartitionercpp_SOURCES ${medpartitionercpp_SOURCES} - MEDPARTITIONER_UtilsPara.cxx - MEDPARTITIONER_JointFinder.cxx - ) - SET(medpartitionercpp_DEFINITIONS "${medpartitionercpp_DEFINITIONS} ${MPI_DEFINITIONS}") - SET(medpartitionercpp_LDFLAGS ${medpartitionercpp_LDFLAGS} ${MPI_LIBS}) - ENDIF(MED_ENABLE_PARMETIS) -ELSE(MPI_IS_OK) +SET(medpartitionercpp_DEFINITIONS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${LIBXML_DEFINITIONS} ${MPI_DEFINITIONS}") +SET(medpartitionercpp_LDFLAGS + ${MED3_LIBS_C_ONLY} + ${HDF5_LIBS} + ${STDLIB} + ${LIBXML_LIBS} + ${MPI_LIBS} + interpkernel + medcoupling + medloader +) +IF(MED_ENABLE_PARMETIS) + SET(medpartitionercpp_HEADERS_HXX ${medpartitionercpp_HEADERS_HXX} MEDPARTITIONER_MetisGraph.hxx) + SET(medpartitionercpp_SOURCES ${medpartitionercpp_SOURCES} MEDPARTITIONER_ParMetisGraph.cxx) + SET(medpartitionercpp_DEFINITIONS "${medpartitionercpp_DEFINITIONS} ${PARMETIS_DEFINITIONS}") + SET(medpartitionercpp_LDFLAGS ${medpartitionercpp_LDFLAGS} ${PARMETIS_LIBS}) +ELSE(MED_ENABLE_PARMETIS) IF(MED_ENABLE_METIS) + SET(medpartitionercpp_HEADERS_HXX ${medpartitionercpp_HEADERS_HXX} MEDPARTITIONER_MetisGraph.hxx) SET(medpartitionercpp_SOURCES ${medpartitionercpp_SOURCES} MEDPARTITIONER_MetisGraph.cxx) - SET(medpartitionercpp_HEADERS_HXX ${medpartitionercpp_HEADERS_HXX} MEDPARTITIONER_MetisGraph.hxx) SET(medpartitionercpp_DEFINITIONS "${medpartitionercpp_DEFINITIONS} ${METIS_DEFINITIONS}") SET(medpartitionercpp_LDFLAGS ${medpartitionercpp_LDFLAGS} ${METIS_LIBS}) ENDIF(MED_ENABLE_METIS) -ENDIF(MPI_IS_OK) - - + IF(MED_ENABLE_SCOTCH) + SET(medpartitionercpp_HEADERS_HXX ${medpartitionercpp_HEADERS_HXX} MEDPARTITIONER_ScotchGraph.hxx) + SET(medpartitionercpp_SOURCES ${medpartitionercpp_SOURCES} MEDPARTITIONER_ScotchGraph.cxx) + SET(medpartitionercpp_DEFINITIONS "${medpartitionercpp_DEFINITIONS} ${SCOTCH_DEFINITIONS}") + SET(medpartitionercpp_LDFLAGS ${medpartitionercpp_LDFLAGS} ${SCOTCH_LIBS}) + ENDIF(MED_ENABLE_SCOTCH) +ENDIF(MED_ENABLE_PARMETIS) + IF(MPI_IS_OK) + SET(medpartitionercpp_SOURCES ${medpartitionercpp_SOURCES} + MEDPARTITIONER_UtilsPara.cxx + MEDPARTITIONER_JointFinder.cxx + ) +ENDIF(MPI_IS_OK) + +ADD_LIBRARY(medpartitionercpp SHARED ${medpartitionercpp_SOURCES}) +SET_TARGET_PROPERTIES(medpartitionercpp PROPERTIES COMPILE_FLAGS "${PLATFORM_DEFINITIONS} ${medpartitionercpp_DEFINITIONS}") +TARGET_LINK_LIBRARIES(medpartitionercpp ${medpartitionercpp_LDFLAGS} ${PLATFORM_LIBS} ${PTHREAD_LIBS}) +INSTALL(TARGETS medpartitionercpp DESTINATION ${MED_salomelib_LIBS}) + +IF(MED_ENABLE_PARMETIS) ADD_EXECUTABLE(medpartitioner_para medpartitioner_para.cxx) SET_TARGET_PROPERTIES(medpartitioner_para PROPERTIES COMPILE_FLAGS "${medpartitionercpp_DEFINITIONS}") - TARGET_LINK_LIBRARIES(medpartitioner_para medpartitionercpp) + TARGET_LINK_LIBRARIES(medpartitioner_para medpartitionercpp ${medpartitionercpp_LDFLAGS}) INSTALL(TARGETS medpartitioner_para DESTINATION ${MED_salomebin_BINS}) -ELSE(MPI_IS_OK) +ELSE(MED_ENABLE_PARMETIS) ADD_EXECUTABLE(medpartitioner medpartitioner.cxx) - SET_TARGET_PROPERTIES(medpartitioner PROPERTIES COMPILE_FLAGS "${medpartitionercpp_DEFINITIONS}") - TARGET_LINK_LIBRARIES(medpartitioner medpartitionercpp) + SET_TARGET_PROPERTIES(medpartitioner PROPERTIES COMPILE_FLAGS "${PLATFORM_DEFINITIONS} ${medpartitionercpp_DEFINITIONS}") + TARGET_LINK_LIBRARIES(medpartitioner medpartitionercpp ${medpartitionercpp_LDFLAGS}) INSTALL(TARGETS medpartitioner DESTINATION ${MED_salomebin_BINS}) -ENDIF(MPI_IS_OK) - -ADD_LIBRARY(medpartitionercpp SHARED ${medpartitionercpp_SOURCES}) -SET_TARGET_PROPERTIES(medpartitionercpp PROPERTIES COMPILE_FLAGS "${medpartitionercpp_DEFINITIONS}") -TARGET_LINK_LIBRARIES(medpartitionercpp ${medpartitionercpp_LDFLAGS}) -INSTALL(TARGETS medpartitionercpp DESTINATION ${MED_salomelib_LIBS}) +ENDIF(MED_ENABLE_PARMETIS) INSTALL(FILES ${medpartitionercpp_HEADERS_HXX} DESTINATION ${MED_salomeinclude_HEADERS}) diff --git a/src/MEDPartitioner/MEDPARTITIONER.hxx b/src/MEDPartitioner/MEDPARTITIONER.hxx index 87310b46a..3af09ff4c 100755 --- a/src/MEDPartitioner/MEDPARTITIONER.hxx +++ b/src/MEDPartitioner/MEDPARTITIONER.hxx @@ -21,7 +21,7 @@ #define __MEDPARTITIONER_HXX__ #ifdef WIN32 -# if defined MEDPARTITIONER_EXPORTS || defined medpartitioner_EXPORTS +# if defined MEDPARTITIONERCPP_EXPORTS || defined medpartitionercpp_EXPORTS # define MEDPARTITIONER_EXPORT __declspec( dllexport ) # else # define MEDPARTITIONER_EXPORT __declspec( dllimport ) diff --git a/src/MEDPartitioner/Test/CMakeLists.txt b/src/MEDPartitioner/Test/CMakeLists.txt index e4594107b..ee2bc2143 100644 --- a/src/MEDPartitioner/Test/CMakeLists.txt +++ b/src/MEDPartitioner/Test/CMakeLists.txt @@ -21,7 +21,7 @@ INCLUDE_DIRECTORIES( ${PARMETIS_INCLUDE_DIRS} ${METIS_INCLUDE_DIRS} ${SCOTCH_INCLUDE_DIRS} - ${BOOST_INCLUDE_DIRS} + ${CPPUNIT_INCLUDE_DIRS} ${METIS_INCLUDE_DIRS} ${LIBXML_INCLUDE_DIRS} ${MED3_INCLUDE_DIRS} @@ -46,7 +46,7 @@ SET(MEDPARTITIONERTest_SOURCES MEDPARTITIONERTest.cxx ) -SET(MEDPARTITIONERTest_DEFINITIONS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${BOOST_DEFINITIONS} ${LIBXML_DEFINITIONS} ${CPPUNIT_DEFINITIONS}") +SET(MEDPARTITIONERTest_DEFINITIONS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${BOOST_DEFINITIONS} ${LIBXML_DEFINITIONS} ${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") SET(MEDPARTITIONERTest_LDFLAGS medpartitionercpp ${CPPUNIT_LIBS}) IF(MED_ENABLE_SCOTCH) diff --git a/src/MEDSPLITTER/CMakeLists.txt b/src/MEDSPLITTER/CMakeLists.txt index d6a25c29f..6f4e730b0 100644 --- a/src/MEDSPLITTER/CMakeLists.txt +++ b/src/MEDSPLITTER/CMakeLists.txt @@ -17,8 +17,10 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -ADD_SUBDIRECTORY(Test) - +IF(CPPUNIT_IS_OK) + ADD_SUBDIRECTORY(Test) +ENDIF(CPPUNIT_IS_OK) + INCLUDE_DIRECTORIES( ${PARMETIS_INCLUDE_DIRS} ${METIS_INCLUDE_DIRS} @@ -74,8 +76,8 @@ SET(medsplittercpp_SOURCES MEDSPLITTER_JointExchangeData.cxx ) -SET(medsplittercpp_DEFINITIONS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${BOOST_DEFINITIONS} ${LIBXML_DEFINITIONS}") -SET(medsplittercpp_LDFLAGS medmem ${LIBXML_LIBS}) +SET(medsplittercpp_DEFINITIONS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${BOOST_DEFINITIONS} ${LIBXML_DEFINITIONS} ${MPI_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +SET(medsplittercpp_LDFLAGS medmem ${LIBXML_LIBS} interpkernel ${MPI_LIBS} ${HDF5_LIBS} ${MED3_LIBS_C_ONLY} ${STDLIB} ${PLATFORM_LIBS}) IF(MED_ENABLE_SCOTCH) SET(medsplittercpp_SOURCES ${medsplittercpp_SOURCES} MEDSPLITTER_SCOTCHGraph.cxx) @@ -84,33 +86,41 @@ IF(MED_ENABLE_SCOTCH) SET(medsplittercpp_LDFLAGS ${medsplittercpp_LDFLAGS} ${SCOTCH_LIBS}) ENDIF(MED_ENABLE_SCOTCH) +IF(MED_ENABLE_METIS) + SET(medsplittercpp_HEADERS_HXX ${medsplittercpp_HEADERS_HXX} MEDSPLITTER_METISGraph.hxx) +ENDIF(MED_ENABLE_METIS) + IF(MPI_IS_OK) IF(MED_ENABLE_PARMETIS) SET(medsplittercpp_SOURCES ${medsplittercpp_SOURCES} MEDSPLITTER_METISGraph.cxx) - SET(medsplittercpp_HEADERS_HXX ${medsplittercpp_HEADERS_HXX} MEDSPLITTER_METISGraph.hxx) SET(medsplittercpp_DEFINITIONS "${medsplittercpp_DEFINITIONS} ${MPI_DEFINITIONS} ${PARMETIS_DEFINITIONS}") - SET(medsplittercpp_LDFLAGS ${medsplittercpp_LDFLAGS} ${PARMETIS_LIBS} ${MPI_LIBS}) + SET(medsplittercpp_LDFLAGS ${medsplittercpp_LDFLAGS} ${PARMETIS_LIBS}) ENDIF(MED_ENABLE_PARMETIS) ELSE(MPI_IS_OK) IF(MED_ENABLE_METIS) SET(medsplittercpp_SOURCES ${medsplittercpp_SOURCES} MEDSPLITTER_METISGraph.cxx) - SET(medsplittercpp_HEADERS_HXX ${medsplittercpp_HEADERS_HXX} MEDSPLITTER_METISGraph.hxx) SET(medsplittercpp_DEFINITIONS "${medsplittercpp_DEFINITIONS} ${METIS_DEFINITIONS}") SET(medsplittercpp_LDFLAGS ${medsplittercpp_LDFLAGS} ${METIS_LIBS}) ENDIF(MED_ENABLE_METIS) ENDIF(MPI_IS_OK) +SET(medsplitter_LDFLAGS ${medsplittercpp_LDFLAGS}) +IF(MED_ENABLE_KERNEL) + INCLUDE_DIRECTORIES(${KERNEL_ROOT_DIR}/include/salome) + SET(medsplittercpp_LDFLAGS ${medsplittercpp_LDFLAGS} ${BOSST_LIBS} ${SALOMELocalTrace}) + SET(medsplitter_LDFLAGS ${medsplittercpp_LDFLAGS} ${SALOMEBasics}) +ENDIF(MED_ENABLE_KERNEL) + +ADD_EXECUTABLE(medsplitter medsplitter.cxx) +SET_TARGET_PROPERTIES(medsplitter PROPERTIES COMPILE_FLAGS "${medsplittercpp_DEFINITIONS}") +TARGET_LINK_LIBRARIES(medsplitter medsplittercpp ${medsplitter_LDFLAGS}) +INSTALL(TARGETS medsplitter DESTINATION ${MED_salomebin_BINS}) IF(MPI_IS_OK) ADD_EXECUTABLE(medsplitter_para medsplitter_para.cxx) SET_TARGET_PROPERTIES(medsplitter_para PROPERTIES COMPILE_FLAGS "${medsplittercpp_DEFINITIONS}") - TARGET_LINK_LIBRARIES(medsplitter_para medsplittercpp) + TARGET_LINK_LIBRARIES(medsplitter_para medsplittercpp ${medsplitter_LDFLAGS}) INSTALL(TARGETS medsplitter_para DESTINATION ${MED_salomebin_BINS}) -ELSE(MPI_IS_OK) - ADD_EXECUTABLE(medsplitter medsplitter.cxx) - SET_TARGET_PROPERTIES(medsplitter PROPERTIES COMPILE_FLAGS "${medsplittercpp_DEFINITIONS}") - TARGET_LINK_LIBRARIES(medsplitter medsplittercpp) - INSTALL(TARGETS medsplitter DESTINATION ${MED_salomebin_BINS}) ENDIF(MPI_IS_OK) ADD_LIBRARY(medsplittercpp SHARED ${medsplittercpp_SOURCES}) diff --git a/src/MEDSPLITTER/MEDSPLITTER.hxx b/src/MEDSPLITTER/MEDSPLITTER.hxx index 3792974ef..6cb4c1ede 100755 --- a/src/MEDSPLITTER/MEDSPLITTER.hxx +++ b/src/MEDSPLITTER/MEDSPLITTER.hxx @@ -26,7 +26,7 @@ #define MEDSPLITTER_HXX_ #ifdef WIN32 -# if defined MEDSPLITTER_EXPORTS || defined medsplitter_EXPORTS +# if defined MEDSPLITTERCPP_EXPORTS || defined medsplittercpp_EXPORTS # define MEDSPLITTER_EXPORT __declspec( dllexport ) # else # define MEDSPLITTER_EXPORT __declspec( dllimport ) diff --git a/src/MEDSPLITTER/Test/CMakeLists.txt b/src/MEDSPLITTER/Test/CMakeLists.txt index 629834d30..7a9b11dd4 100644 --- a/src/MEDSPLITTER/Test/CMakeLists.txt +++ b/src/MEDSPLITTER/Test/CMakeLists.txt @@ -21,12 +21,12 @@ INCLUDE_DIRECTORIES( ${PARMETIS_INCLUDE_DIRS} ${METIS_INCLUDE_DIRS} ${SCOTCH_INCLUDE_DIRS} - ${BOOST_INCLUDE_DIRS} - ${METIS_INCLUDE_DIRS} + ${BOOST_INCLUDE_DIRS} + ${CPPUNIT_INCLUDE_DIRS} ${LIBXML_INCLUDE_DIRS} ${MED3_INCLUDE_DIRS} ${HDF5_INCLUDE_DIRS} - ${MPI_INCLUDE_DIRS} + ${MPI_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/../../MEDMEM ${CMAKE_CURRENT_SOURCE_DIR}/../../INTERP_KERNELTest # for BasicMainTest.cxx @@ -35,63 +35,83 @@ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/../../INTERP_KERNEL/Geometric2D ${CMAKE_CURRENT_SOURCE_DIR}/../../INTERP_KERNEL/ExprEval ${CMAKE_CURRENT_SOURCE_DIR}/../../INTERP_KERNEL/GaussPoints - ) +) SET(MEDSPLITTERTest_HEADERS_HXX MEDSPLITTERTest.hxx MEDSPLITTERTest_Utils.hxx MEDSPLITTERTest_defs.hxx - ) +) SET(MEDSPLITTERTest_SOURCES MEDSPLITTERTest.cxx MEDSPLITTERTest_MESHCollection.cxx MEDSPLITTERTest_ParallelTopology.cxx MEDSPLITTERTest_Utils.cxx - ) - -SET(MEDSPLITTERTest_DEFINITIONS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${BOOST_DEFINITIONS} ${LIBXML_DEFINITIONS} ${CPPUNIT_DEFINITIONS}") -SET(MEDSPLITTERTest_LDFLAGS medsplittercpp ${CPPUNIT_LIBS}) +) -IF(MED_ENABLE_SCOTCH) - SET(MEDSPLITTERTest_DEFINITIONS "${MEDSPLITTERTest_DEFINITIONS} ${SCOTCH_DEFINITIONS}") -ENDIF(MED_ENABLE_SCOTCH) +SET(MEDSPLITTERTest_DEFINITIONS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${BOOST_DEFINITIONS} ${LIBXML_DEFINITIONS} ${CPPUNIT_DEFINITIONS} ${MPI_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +SET(MEDSPLITTERTest_LDFLAGS ${CPPUNIT_LIBS} ${MED3_LIBS_C_ONLY} medsplittercpp) -IF(MPI_IS_OK) +IF(MED_ENABLE_PARMETIS) SET(MEDSPLITTERTest_SOURCES ${MEDSPLITTERTest_SOURCES} ParaMEDSPLITTERTest_MeshSendReceive.cxx ParaMEDSPLITTERTest_ParaDomainSelector.cxx ParaMEDSPLITTERTest_medsplitter_para.cxx - ) - SET(MEDSPLITTERTest_HEADERS_HXX ${MEDSPLITTERTest_HEADERS_HXX} ParaMEDSPLITTERTest.hxx) - IF(MED_ENABLE_PARMETIS) - SET(MEDSPLITTERTest_DEFINITIONS "${MEDSPLITTERTest_DEFINITIONS} ${MPI_DEFINITIONS} ${PARMETIS_DEFINITIONS}") - ENDIF(MED_ENABLE_PARMETIS) -ELSE(MPI_IS_OK) - IF(MED_ENABLE_METIS) - SET(MEDSPLITTERTest_DEFINITIONS "${MEDSPLITTERTest_DEFINITIONS} ${METIS_DEFINITIONS}") - ENDIF(MED_ENABLE_METIS) -ENDIF(MPI_IS_OK) + ParaMEDSPLITTERTest.hxx + ) + SET(MEDSPLITTERTest_DEFINITIONS "${MEDSPLITTERTest_DEFINITIONS} ${PARMETIS_DEFINITIONS}") + SET(MEDSPLITTERTest_LDFLAGS ${MEDSPLITTERTest_LDFLAGS} ${PARMETIS_LIBS}) +ENDIF(MED_ENABLE_PARMETIS) + +IF(MED_ENABLE_METIS) + SET(MEDSPLITTERTest_DEFINITIONS "${MEDSPLITTERTest_DEFINITIONS} ${METIS_DEFINITIONS}") + SET(MEDSPLITTERTest_LDFLAGS ${MEDSPLITTERTest_LDFLAGS} ${METIS_LIBS}) +ENDIF(MED_ENABLE_METIS) + +IF(MED_ENABLE_KERNEL) + INCLUDE_DIRECTORIES(${KERNEL_ROOT_DIR}/include/salome) + SET(MEDSPLITTERTest_LDFLAGS ${MEDSPLITTERTest_LDFLAGS} ${SALOMELocalTrace}) +ENDIF(MED_ENABLE_KERNEL) + +IF(MED_ENABLE_SCOTCH) + SET(MEDSPLITTERTest_DEFINITIONS "${MEDSPLITTERTest_DEFINITIONS} ${SCOTCH_DEFINITIONS}") + SET(MEDSPLITTERTest_LDFLAGS ${MEDSPLITTERTest_LDFLAGS} ${SCOTCH_LIBS}) +ENDIF(MED_ENABLE_SCOTCH) + +SET(SCRIPTS testMEDSPLITTER.py) + IF(MPI_IS_OK) - ADD_EXECUTABLE(TestParaMEDSPLITTER TestParaMEDSPLITTER.cxx) - SET_TARGET_PROPERTIES(TestParaMEDSPLITTER PROPERTIES COMPILE_FLAGS "${MEDSPLITTERTest_DEFINITIONS}") - TARGET_LINK_LIBRARIES(TestParaMEDSPLITTER MEDSPLITTERTest) - INSTALL(TARGETS TestParaMEDSPLITTER DESTINATION ${MED_salomebin_BINS}) -ELSE(MPI_IS_OK) + IF(MED_ENABLE_PARMETIS) + SET(TestParaMEDSPLITTER_LDFLAGS ${MEDSPLITTERTest_LDFLAGS} MEDSPLITTERTest medmem interpkernel medsplittercpp) + SET(SCRIPTS ${SCRIPTS} testMEDSPLITTER.py) + + ADD_EXECUTABLE(TestParaMEDSPLITTER TestParaMEDSPLITTER.cxx) + SET_TARGET_PROPERTIES(TestParaMEDSPLITTER PROPERTIES COMPILE_FLAGS "${MEDSPLITTERTest_DEFINITIONS}") + TARGET_LINK_LIBRARIES(TestParaMEDSPLITTER ${TestParaMEDSPLITTER_LDFLAGS}) + INSTALL(TARGETS TestParaMEDSPLITTER DESTINATION ${MED_salomebin_BINS}) + ENDIF(MED_ENABLE_PARMETIS) +ELSE(MPI_IS_OK) IF(MED_ENABLE_METIS) + SET(TestMEDSPLITTER_LDFLAGS ${MEDSPLITTERTest_LDFLAGSS} MEDSPLITTERTest medmem interpkernel medsplittercpp) + IF(MED_ENABLE_KERNEL) + SET(MEDSPLITTERTest_LDFLAGS ${MEDSPLITTERTest_LDFLAGS} ${SALOMEBasics}) + ENDIF(MED_ENABLE_KERNEL) + ADD_EXECUTABLE(TestMEDSPLITTER TestMEDSPLITTER.cxx) SET_TARGET_PROPERTIES(TestMEDSPLITTER PROPERTIES COMPILE_FLAGS "${MEDSPLITTERTest_DEFINITIONS}") - TARGET_LINK_LIBRARIES(TestMEDSPLITTER MEDSPLITTERTest) + TARGET_LINK_LIBRARIES(TestMEDSPLITTER ${TestMEDSPLITTER_LDFLAGS}) INSTALL(TARGETS TestMEDSPLITTER DESTINATION ${MED_salomebin_BINS}) ENDIF(MED_ENABLE_METIS) ENDIF(MPI_IS_OK) - + ADD_LIBRARY(MEDSPLITTERTest SHARED ${MEDSPLITTERTest_SOURCES}) SET_TARGET_PROPERTIES(MEDSPLITTERTest PROPERTIES COMPILE_FLAGS "${MEDSPLITTERTest_DEFINITIONS}") TARGET_LINK_LIBRARIES(MEDSPLITTERTest ${MEDSPLITTERTest_LDFLAGS}) INSTALL(TARGETS MEDSPLITTERTest DESTINATION ${MED_salomelib_LIBS}) INSTALL(FILES ${MEDSPLITTERTest_HEADERS_HXX} DESTINATION ${MED_salomeinclude_HEADERS}) +INSTALL(FILES ${SCRIPTS} DESTINATION ${MED_salomebin_BINS}) diff --git a/src/MEDSPLITTER/Test/Makefile.am b/src/MEDSPLITTER/Test/Makefile.am index 1a4735921..2cc3453f7 100644 --- a/src/MEDSPLITTER/Test/Makefile.am +++ b/src/MEDSPLITTER/Test/Makefile.am @@ -76,7 +76,7 @@ if MPI_IS_OK if MED_ENABLE_PARMETIS PARA_BIN_TEST_PROGS = TestParaMEDSPLITTER TestParaMEDSPLITTER_SOURCES= TestParaMEDSPLITTER.cxx - TestParaMEDSPLITTER_CPPFLAGS = $(TestMEDSPLITTER_CPPFLAGS) $(MPI_INCLUDES) + TestParaMEDSPLITTER_CPPFLAGS = $(TestMEDSPLITTER_CPPFLAGS) $(MPI_INCLUDES) $(CPPUNIT_INCLUDES) TestParaMEDSPLITTER_CXXFLAGS = @CXXTMPDPTHFLAGS@ TestParaMEDSPLITTER_LDADD = $(MED3_LIBS_C_ONLY) $(libMEDSPLITTERTest_la_LDFLAGS) -lm \ libMEDSPLITTERTest.la \ diff --git a/src/MEDSPLITTER_Swig/CMakeLists.txt b/src/MEDSPLITTER_Swig/CMakeLists.txt index ebdef3124..8cd10378d 100644 --- a/src/MEDSPLITTER_Swig/CMakeLists.txt +++ b/src/MEDSPLITTER_Swig/CMakeLists.txt @@ -17,7 +17,6 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/InstallAndCompilePythonFile.cmake) FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) @@ -41,11 +40,13 @@ INCLUDE_DIRECTORIES( ) SWIG_ADD_MODULE(libMEDSPLITTER_Swig python libMEDSPLITTER_Swig.i) -SWIG_LINK_LIBRARIES(libMEDSPLITTER_Swig ${PYTHON_LIBRARIES} medsplittercpp) -SET_TARGET_PROPERTIES(_libMEDSPLITTER_Swig PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS}") - +SWIG_LINK_LIBRARIES(libMEDSPLITTER_Swig ${PYTHON_LIBS} medsplittercpp) +SET_TARGET_PROPERTIES(_libMEDSPLITTER_Swig PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_libMEDSPLITTER_Swig PROPERTIES DEBUG_OUTPUT_NAME _libMEDSPLITTER_Swig_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) INSTALL(TARGETS _libMEDSPLITTER_Swig DESTINATION ${MED_salomepythondir}) INSTALL(FILES libMEDSPLITTER_Swig.i DESTINATION ${MED_salomeinclude_HEADERS}) -INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libMEDSPLITTER_Swig.py MEDSPLITTER.py test_MEDSPLITTER.py DESTINATION ${MED_salomescript_PYTHON}) -INSTALL_AND_COMPILE_PYTHON_FILE(${CMAKE_CURRENT_SOURCE_DIR}/MEDSPLITTER.py ${MED_salomescript_PYTHON}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libMEDSPLITTER_Swig.py DESTINATION ${MED_salomepythondir}) +INSTALL(FILES MEDSPLITTER.py test_MEDSPLITTER.py DESTINATION ${MED_salomescript_DATA}) diff --git a/src/MEDWrapper/Base/CMakeLists.txt b/src/MEDWrapper/Base/CMakeLists.txt index 863127fb3..0de97a472 100644 --- a/src/MEDWrapper/Base/CMakeLists.txt +++ b/src/MEDWrapper/Base/CMakeLists.txt @@ -20,8 +20,13 @@ INCLUDE_DIRECTORIES( ${HDF5_INCLUDE_DIRS} ${BOOST_INCLUDE_DIRS} - ${KERNEL_ROOT_DIR}/include/salome - ) +) + +IF(MED_ENABLE_KERNEL) + INCLUDE_DIRECTORIES(${KERNEL_ROOT_DIR}/include/salome) +ELSE(MED_ENABLE_KERNEL) + INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/adm_local_without_kernel) +ENDIF(MED_ENABLE_KERNEL) SET(MEDWrapperBase_SOURCES MED_Structures.cxx @@ -34,7 +39,7 @@ SET(MEDWrapperBase_SOURCES ) ADD_LIBRARY(MEDWrapperBase SHARED ${MEDWrapperBase_SOURCES}) -SET_TARGET_PROPERTIES(MEDWrapperBase PROPERTIES COMPILE_FLAGS "-D${MACHINE} ${HDF5_DEFINITIONS} ${BOOST_DEFINITIONS}") +SET_TARGET_PROPERTIES(MEDWrapperBase PROPERTIES COMPILE_FLAGS "-D${MACHINE} ${HDF5_DEFINITIONS} ${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS}") TARGET_LINK_LIBRARIES(MEDWrapperBase ${BOOST_LIB_THREAD} ${BOOST_LIB_DATE_TIME}) INSTALL(TARGETS MEDWrapperBase DESTINATION ${MED_salomelib_LIBS}) diff --git a/src/MEDWrapper/Base/MED_Common.hxx b/src/MEDWrapper/Base/MED_Common.hxx index 1b2cf2109..7352ee3e0 100644 --- a/src/MEDWrapper/Base/MED_Common.hxx +++ b/src/MEDWrapper/Base/MED_Common.hxx @@ -39,7 +39,7 @@ #include "MED_SharedPtr.hxx" #include "MED_SliceArray.hxx" -#ifdef WNT +#ifdef WIN32 #pragma warning(disable:4099) #endif diff --git a/src/MEDWrapper/Base/MED_SliceArray.hxx b/src/MEDWrapper/Base/MED_SliceArray.hxx index 50833b8d4..807b62a99 100644 --- a/src/MEDWrapper/Base/MED_SliceArray.hxx +++ b/src/MEDWrapper/Base/MED_SliceArray.hxx @@ -28,7 +28,7 @@ #ifndef MED_SliceArray_HeaderFile #define MED_SliceArray_HeaderFile -#ifdef WNT // for correctly compiling "valarray" in modules, which are includes this file +#ifdef WIN32 // for correctly compiling "valarray" in modules, which are includes this file #undef max #undef min #endif diff --git a/src/MEDWrapper/Base/MED_Structures.hxx b/src/MEDWrapper/Base/MED_Structures.hxx index 05cdf7ddb..705fd719c 100644 --- a/src/MEDWrapper/Base/MED_Structures.hxx +++ b/src/MEDWrapper/Base/MED_Structures.hxx @@ -26,7 +26,7 @@ #include "MED_Common.hxx" #include "MED_Utilities.hxx" -#ifdef WNT +#ifdef WIN32 #pragma warning(disable:4251) #endif diff --git a/src/MEDWrapper/Base/MED_TStructures.hxx b/src/MEDWrapper/Base/MED_TStructures.hxx index c49f60095..37a9da0ff 100644 --- a/src/MEDWrapper/Base/MED_TStructures.hxx +++ b/src/MEDWrapper/Base/MED_TStructures.hxx @@ -29,7 +29,7 @@ #include "MED_Structures.hxx" -#ifdef WNT +#ifdef WIN32 #pragma warning(disable:4250) #endif diff --git a/src/MEDWrapper/Base/MED_WrapperBase.hxx b/src/MEDWrapper/Base/MED_WrapperBase.hxx index f37006dab..ef63c2d05 100755 --- a/src/MEDWrapper/Base/MED_WrapperBase.hxx +++ b/src/MEDWrapper/Base/MED_WrapperBase.hxx @@ -27,7 +27,7 @@ #ifndef _MED_WrapperBase_HXX_ #define _MED_WrapperBase_HXX_ -#ifdef WNT +#ifdef WIN32 #if defined MEDWRAPPER_BASE_EXPORTS || defined MEDWrapperBase_EXPORTS #if defined WIN32 #define MEDWRAPPER_EXPORT __declspec( dllexport ) diff --git a/src/MEDWrapper/Factory/CMakeLists.txt b/src/MEDWrapper/Factory/CMakeLists.txt index cdbd05d78..dd859f167 100644 --- a/src/MEDWrapper/Factory/CMakeLists.txt +++ b/src/MEDWrapper/Factory/CMakeLists.txt @@ -22,33 +22,36 @@ INCLUDE_DIRECTORIES( ${BOOST_INCLUDE_DIRS} ${MED3_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/../Base - ${CMAKE_CURRENT_SOURCE_DIR}/../V2_1/Wrapper ${CMAKE_CURRENT_SOURCE_DIR}/../V2_2 ) IF(MED_ENABLE_KERNEL) INCLUDE_DIRECTORIES(${KERNEL_ROOT_DIR}/include/salome) ELSE(MED_ENABLE_KERNEL) - INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/adm_local_without_kernel/unix) + INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/adm_local_without_kernel) ENDIF(MED_ENABLE_KERNEL) SET(MEDWrapper_SOURCES MED_Factory.cxx - ) +) SET(mprint_version_SOURCES mprint_version.cxx ) ADD_LIBRARY(MEDWrapper SHARED ${MEDWrapper_SOURCES}) -SET_TARGET_PROPERTIES(MEDWrapper PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS} ${MED3_DEFINITIONS}") -TARGET_LINK_LIBRARIES(MEDWrapper MEDWrapperBase MEDWrapper_V2_1 MEDWrapper_V2_2) +SET_TARGET_PROPERTIES(MEDWrapper PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS} ${MED3_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(MEDWrapper MEDWrapper_V2_2) INSTALL(TARGETS MEDWrapper DESTINATION ${MED_salomelib_LIBS}) ADD_EXECUTABLE(mprint_version ${mprint_version_SOURCES}) -SET_TARGET_PROPERTIES(mprint_version PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS} ${MED3_DEFINITIONS}") -TARGET_LINK_LIBRARIES(mprint_version MEDWrapper) +SET_TARGET_PROPERTIES(mprint_version PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS} ${MED3_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(mprint_version MEDWrapper MEDWrapper_V2_2 MEDWrapperBase ${BOOST_LIBS} ${MED3_LIBS_C_ONLY}) + +ADD_EXECUTABLE(MED_Test ${mprint_version_SOURCES}) +SET_TARGET_PROPERTIES(MED_Test PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS} ${MED3_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(MED_Test MEDWrapper MEDWrapper_V2_2 MEDWrapperBase ${BOOST_LIBS}) FILE(GLOB MEDWrapper_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") INSTALL(FILES ${MEDWrapper_HEADERS_HXX} DESTINATION ${MED_salomeinclude_HEADERS}) -INSTALL(TARGETS mprint_version DESTINATION ${MED_salomebin_BINS}) \ No newline at end of file +INSTALL(TARGETS mprint_version MED_Test DESTINATION ${MED_salomebin_BINS}) diff --git a/src/MEDWrapper/Factory/MED_Test.cxx b/src/MEDWrapper/Factory/MED_Test.cxx index 49530d0f7..02928a8aa 100644 --- a/src/MEDWrapper/Factory/MED_Test.cxx +++ b/src/MEDWrapper/Factory/MED_Test.cxx @@ -325,7 +325,7 @@ void ReadMed(const char* theFileName, CopyMed(theFileName,theFileName2,theVersion,theNbCopy); } -#ifdef WNT +#ifdef WIN32 #pragma warning(disable:4101) // exc unreferenced ... ?? #endif diff --git a/src/MEDWrapper/Factory/MED_WrapperFactory.hxx b/src/MEDWrapper/Factory/MED_WrapperFactory.hxx index 983aebfb5..d23fd6187 100755 --- a/src/MEDWrapper/Factory/MED_WrapperFactory.hxx +++ b/src/MEDWrapper/Factory/MED_WrapperFactory.hxx @@ -27,7 +27,7 @@ #ifndef _MED_WrapperFactory_HXX_ #define _MED_WrapperFactory_HXX_ -#ifdef WNT +#ifdef WIN32 #if defined MEDWRAPPER_FACTORY_EXPORTS || defined MEDWrapper_EXPORTS #if defined WIN32 #define MEDWRAPPER_FACTORY_EXPORT __declspec( dllexport ) diff --git a/src/MEDWrapper/Makefile.am b/src/MEDWrapper/Makefile.am index 066489835..a26384166 100644 --- a/src/MEDWrapper/Makefile.am +++ b/src/MEDWrapper/Makefile.am @@ -18,7 +18,6 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am -# if without KERNEL, build only med 2.1 library if MED_ENABLE_KERNEL SUBDIRS = Base V2_2 Factory else !MED_ENABLE_KERNEL diff --git a/src/MEDWrapper/V2_2/CMakeLists.txt b/src/MEDWrapper/V2_2/CMakeLists.txt index 61681f5d0..351584b2d 100644 --- a/src/MEDWrapper/V2_2/CMakeLists.txt +++ b/src/MEDWrapper/V2_2/CMakeLists.txt @@ -31,11 +31,11 @@ SET(MEDWrapper_V2_2_SOURCES IF(MED_ENABLE_KERNEL) INCLUDE_DIRECTORIES(${KERNEL_ROOT_DIR}/include/salome) ELSE(MED_ENABLE_KERNEL) - INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/adm_local_without_kernel/unix) + INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/adm_local_without_kernel) ENDIF(MED_ENABLE_KERNEL) ADD_LIBRARY(MEDWrapper_V2_2 SHARED ${MEDWrapper_V2_2_SOURCES}) -SET_TARGET_PROPERTIES(MEDWrapper_V2_2 PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${BOOST_DEFINITIONS}") +SET_TARGET_PROPERTIES(MEDWrapper_V2_2 PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS}") TARGET_LINK_LIBRARIES(MEDWrapper_V2_2 MEDWrapperBase ${MED3_LIBS_C_ONLY} ${HDF5_LIBS}) INSTALL(TARGETS MEDWrapper_V2_2 DESTINATION ${MED_salomelib_LIBS}) diff --git a/src/MEDWrapper/V2_2/MED_V2_2_Wrapper.hxx b/src/MEDWrapper/V2_2/MED_V2_2_Wrapper.hxx index 11c6ebece..7f14dd791 100644 --- a/src/MEDWrapper/V2_2/MED_V2_2_Wrapper.hxx +++ b/src/MEDWrapper/V2_2/MED_V2_2_Wrapper.hxx @@ -28,7 +28,7 @@ #ifndef MED_V2_2_Wrapper_HeaderFile #define MED_V2_2_Wrapper_HeaderFile -#ifdef WNT +#ifdef WIN32 #if defined MEDWRAPPER_V2_2_EXPORTS || defined MEDWrapper_V2_2_EXPORTS #if defined WIN32 #define MED_V22_WRAPPER_EXPORT __declspec( dllexport ) diff --git a/src/MED_SWIG/CMakeLists.txt b/src/MED_SWIG/CMakeLists.txt index cdd2ac2a3..e9834f105 100644 --- a/src/MED_SWIG/CMakeLists.txt +++ b/src/MED_SWIG/CMakeLists.txt @@ -17,4 +17,4 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -INSTALL(FILES MED_shared_modules.py DESTINATION ${MED_salomescript_PYTHON}) +INSTALL(FILES MED_shared_modules.py DESTINATION ${MED_sharedpkgpython_PYTHON}) diff --git a/src/Makefile.am b/src/Makefile.am index f5ac8d696..3f11d9856 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -92,7 +92,7 @@ endif endif if MED_ENABLE_GUI - GUI_SUBDIRS = MEDGUI + GUI_SUBDIRS = MEDGUI MEDOP endif endif @@ -105,4 +105,4 @@ DIST_SUBDIRS= \ MEDMEMBinTest MEDMEMCppTest INTERP_KERNELTest ParaMEDMEM ParaMEDMEM_Swig MEDLoader \ MEDSPLITTER MEDSPLITTER_Swig MEDPartitioner RENUMBER MEDCouplingCorba MEDCouplingCorba_Swig \ MEDMEM_I MED MED_SWIG MedCorba_Swig ParaMEDLoader MedClient ParaMEDMEMComponent \ - ParaMEDCouplingCorba MEDCalculator MEDGUI ParaMEDMEMTest + ParaMEDCouplingCorba MEDCalculator MEDGUI MEDOP ParaMEDMEMTest diff --git a/src/MedClient/src/CMakeLists.txt b/src/MedClient/src/CMakeLists.txt index b8310d8c7..34d1bae4e 100644 --- a/src/MedClient/src/CMakeLists.txt +++ b/src/MedClient/src/CMakeLists.txt @@ -17,12 +17,13 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/InstallAndCompilePythonFile.cmake) +INCLUDE(${SALOME_MACROS_DIR}/InstallAndCompilePythonFile.cmake) FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) INCLUDE_DIRECTORIES( ${PYTHON_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} ${OMNIORB_INCLUDE_DIRS} ${MED3_INCLUDE_DIRS} ${HDF5_INCLUDE_DIRS} @@ -55,13 +56,17 @@ SET(MEDClientcmodule_SOURCES ADD_LIBRARY(MEDClientcmodule SHARED ${MEDClientcmodule_SOURCES}) INSTALL(FILES libMEDClient.i DESTINATION ${MED_salomeinclude_HEADERS}) -SET_TARGET_PROPERTIES(MEDClientcmodule PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS}") -TARGET_LINK_LIBRARIES(MEDClientcmodule MEDMEMImpl MEDEngine) +SET_TARGET_PROPERTIES(MEDClientcmodule PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(MEDClientcmodule MEDMEMImpl MEDEngine ${PTHREAD_LIBS}) INSTALL(TARGETS MEDClientcmodule DESTINATION ${MED_salomelib_LIBS}) SWIG_ADD_MODULE(libMEDClient python libMEDClient.i) -SWIG_LINK_LIBRARIES(libMEDClient ${PYTHON_LIBRARIES} MEDClientcmodule) -SET_TARGET_PROPERTIES(_libMEDClient PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS}") +SWIG_LINK_LIBRARIES(libMEDClient ${PYTHON_LIBS} MEDClientcmodule) +SET_TARGET_PROPERTIES(_libMEDClient PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${PLATFORM_DEFINITIONS}") + +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_libMEDClient PROPERTIES DEBUG_OUTPUT_NAME _libMEDClient_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) INSTALL(TARGETS _libMEDClient DESTINATION ${MED_salomepythondir}) INSTALL_AND_COMPILE_PYTHON_FILE(${CMAKE_CURRENT_BINARY_DIR}/libMEDClient.py ${MED_salomescript_PYTHON}) diff --git a/src/MedClient/src/MEDClient.hxx b/src/MedClient/src/MEDClient.hxx index a36630f09..2b90350fc 100644 --- a/src/MedClient/src/MEDClient.hxx +++ b/src/MedClient/src/MEDClient.hxx @@ -24,7 +24,7 @@ #ifndef _MEDCLIENT_HXX_ #define _MEDCLIENT_HXX_ -#ifdef WNT +#ifdef WIN32 # if defined MEDCLIENT_EXPORTS || defined MEDClientcmodule_EXPORTS # define MEDCLIENT_EXPORT __declspec( dllexport ) # else diff --git a/src/MedClient/test/environ/CMakeLists.txt b/src/MedClient/test/environ/CMakeLists.txt index 9bb5cc1ea..4c6db9583 100644 --- a/src/MedClient/test/environ/CMakeLists.txt +++ b/src/MedClient/test/environ/CMakeLists.txt @@ -19,7 +19,10 @@ ADD_SUBDIRECTORY(csh) -SET(MedClientTestsConfig runTestMedCorba runContainer) +SET(MedClientTestsConfig +# runTestMedCorba + runContainer +) FOREACH(MedClientTestConfig ${MedClientTestsConfig}) SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${MedClientTestConfig}.in) diff --git a/src/MedClient/test/test2/CMakeLists.txt b/src/MedClient/test/test2/CMakeLists.txt index d352ef916..85544b4f9 100644 --- a/src/MedClient/test/test2/CMakeLists.txt +++ b/src/MedClient/test/test2/CMakeLists.txt @@ -17,12 +17,13 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/InstallAndCompilePythonFile.cmake) +INCLUDE(${SALOME_MACROS_DIR}/InstallAndCompilePythonFile.cmake) FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) INCLUDE_DIRECTORIES( ${PYTHON_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} ${OMNIORB_INCLUDE_DIRS} ${MED3_INCLUDE_DIRS} ${HDF5_INCLUDE_DIRS} @@ -45,8 +46,13 @@ SET_SOURCE_FILES_PROPERTIES(libCompo2.i PROPERTIES CPLUSPLUS ON) SET_SOURCE_FILES_PROPERTIES(libCompo2.i PROPERTIES SWIG_DEFINITIONS "-shadow") SWIG_ADD_MODULE(libCompo2 python libCompo2.i Compo2.cxx) -SWIG_LINK_LIBRARIES(libCompo2 ${PYTHON_LIBRARIES} MEDClientcmodule) -SET_TARGET_PROPERTIES(_libCompo2 PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS}") +SWIG_LINK_LIBRARIES(libCompo2 ${PYTHON_LIBS} MEDClientcmodule) +SET_TARGET_PROPERTIES(_libCompo2 PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${PLATFORM_DEFINITIONS}") + +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_libCompo2 PROPERTIES DEBUG_OUTPUT_NAME _libCompo2_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) + INSTALL(TARGETS _libCompo2 DESTINATION ${MED_salomepythondir}) INSTALL_AND_COMPILE_PYTHON_FILE(${CMAKE_CURRENT_BINARY_DIR}/libCompo2.py ${MED_salomescript_PYTHON}) diff --git a/src/MedCorba_Swig/CMakeLists.txt b/src/MedCorba_Swig/CMakeLists.txt index 02cd9f084..2e0500839 100644 --- a/src/MedCorba_Swig/CMakeLists.txt +++ b/src/MedCorba_Swig/CMakeLists.txt @@ -25,6 +25,7 @@ SET_SOURCE_FILES_PROPERTIES(libMedCorba_Swig.i PROPERTIES SWIG_DEFINITIONS "-sha INCLUDE_DIRECTORIES( ${PYTHON_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} ${OMNIORB_INCLUDE_DIRS} ${MED3_INCLUDE_DIRS} ${HDF5_INCLUDE_DIRS} @@ -41,13 +42,16 @@ INCLUDE_DIRECTORIES( ) SWIG_ADD_MODULE(libMedCorba_Swig python libMedCorba_Swig.i) -SWIG_LINK_LIBRARIES(libMedCorba_Swig ${PYTHON_LIBRARIES} MEDMEMImpl MEDEngine) -SET_TARGET_PROPERTIES(_libMedCorba_Swig PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS}") +SWIG_LINK_LIBRARIES(libMedCorba_Swig ${PYTHON_LIBS} MEDMEMImpl MEDEngine ${PLATFORM_LIBS}) +SET_TARGET_PROPERTIES(_libMedCorba_Swig PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${XDR_DEFINITIONS} ${PLATFORM_DEFINITIONS}") SET(MED_MedCorba_Swig_salomescript_DATA medcorba_test.py batchmode_medcorba_test.py batchmode_medcorba_test1.py ) +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_libMedCorba_Swig PROPERTIES DEBUG_OUTPUT_NAME _libMedCorba_Swig_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) INSTALL(TARGETS _libMedCorba_Swig DESTINATION ${MED_salomepythondir}) INSTALL(FILES libMedCorba_Swig.i DESTINATION ${MED_salomeinclude_HEADERS}) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libMedCorba_Swig.py DESTINATION ${MED_salomescript_PYTHON}) diff --git a/src/ParaMEDLoader/CMakeLists.txt b/src/ParaMEDLoader/CMakeLists.txt index b5e97d4ec..d51e9ecc1 100644 --- a/src/ParaMEDLoader/CMakeLists.txt +++ b/src/ParaMEDLoader/CMakeLists.txt @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) INCLUDE_DIRECTORIES( ${MPI_INCLUDE_DIRS} @@ -35,7 +36,7 @@ SET(paramedloader_SOURCES ADD_LIBRARY(paramedloader SHARED ${paramedloader_SOURCES}) SET_TARGET_PROPERTIES(paramedloader PROPERTIES COMPILE_FLAGS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS}") -TARGET_LINK_LIBRARIES(paramedloader paramedmem medloader) +TARGET_LINK_LIBRARIES(paramedloader paramedmem medloader ${PLATFORM_LIBS}) INSTALL(TARGETS paramedloader DESTINATION ${MED_salomelib_LIBS}) FILE(GLOB paramedloader_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") diff --git a/src/ParaMEDLoader/Makefile.am b/src/ParaMEDLoader/Makefile.am index 184f2309f..4904a2b44 100755 --- a/src/ParaMEDLoader/Makefile.am +++ b/src/ParaMEDLoader/Makefile.am @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) include $(top_srcdir)/adm_local/unix/make_common_starter.am diff --git a/src/ParaMEDLoader/ParaMEDLoader.cxx b/src/ParaMEDLoader/ParaMEDLoader.cxx index f751551f5..9c8df2aee 100644 --- a/src/ParaMEDLoader/ParaMEDLoader.cxx +++ b/src/ParaMEDLoader/ParaMEDLoader.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "ParaMEDLoader.hxx" #include "MEDLoader.hxx" diff --git a/src/ParaMEDLoader/ParaMEDLoader.hxx b/src/ParaMEDLoader/ParaMEDLoader.hxx index aedacc93d..a36e45f42 100644 --- a/src/ParaMEDLoader/ParaMEDLoader.hxx +++ b/src/ParaMEDLoader/ParaMEDLoader.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __PARAMEDLOADER_HXX__ #define __PARAMEDLOADER_HXX__ diff --git a/src/ParaMEDMEM/CMakeLists.txt b/src/ParaMEDMEM/CMakeLists.txt index 4ede58f2f..2b0bfb3b9 100644 --- a/src/ParaMEDMEM/CMakeLists.txt +++ b/src/ParaMEDMEM/CMakeLists.txt @@ -16,6 +16,7 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +# Author : Anthony Geay (CEA/DEN) INCLUDE_DIRECTORIES( ${MPI_INCLUDE_DIRS} diff --git a/src/ParaMEDMEM/OverlapDEC.cxx b/src/ParaMEDMEM/OverlapDEC.cxx index 06a06d663..5035aed3d 100644 --- a/src/ParaMEDMEM/OverlapDEC.cxx +++ b/src/ParaMEDMEM/OverlapDEC.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "OverlapDEC.hxx" #include "CommInterface.hxx" diff --git a/src/ParaMEDMEM/OverlapDEC.hxx b/src/ParaMEDMEM/OverlapDEC.hxx index c483d2b07..7532910e2 100644 --- a/src/ParaMEDMEM/OverlapDEC.hxx +++ b/src/ParaMEDMEM/OverlapDEC.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __OVERLAPDEC_HXX__ #define __OVERLAPDEC_HXX__ diff --git a/src/ParaMEDMEM/OverlapElementLocator.cxx b/src/ParaMEDMEM/OverlapElementLocator.cxx index ece659ec3..417c50e0f 100644 --- a/src/ParaMEDMEM/OverlapElementLocator.cxx +++ b/src/ParaMEDMEM/OverlapElementLocator.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "OverlapElementLocator.hxx" diff --git a/src/ParaMEDMEM/OverlapElementLocator.hxx b/src/ParaMEDMEM/OverlapElementLocator.hxx index c779a49e9..ade57b2ac 100644 --- a/src/ParaMEDMEM/OverlapElementLocator.hxx +++ b/src/ParaMEDMEM/OverlapElementLocator.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __OVERLAPELEMENTLOCATOR_HXX__ #define __OVERLAPELEMENTLOCATOR_HXX__ diff --git a/src/ParaMEDMEM/OverlapInterpolationMatrix.cxx b/src/ParaMEDMEM/OverlapInterpolationMatrix.cxx index f8bb14137..cb1f1ed48 100644 --- a/src/ParaMEDMEM/OverlapInterpolationMatrix.cxx +++ b/src/ParaMEDMEM/OverlapInterpolationMatrix.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "OverlapInterpolationMatrix.hxx" #include "ParaMESH.hxx" diff --git a/src/ParaMEDMEM/OverlapInterpolationMatrix.hxx b/src/ParaMEDMEM/OverlapInterpolationMatrix.hxx index da3acd4f2..e08dd6f47 100644 --- a/src/ParaMEDMEM/OverlapInterpolationMatrix.hxx +++ b/src/ParaMEDMEM/OverlapInterpolationMatrix.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __OVERLAPINTERPOLATIONMATRIX_HXX__ #define __OVERLAPINTERPOLATIONMATRIX_HXX__ diff --git a/src/ParaMEDMEM/OverlapMapping.cxx b/src/ParaMEDMEM/OverlapMapping.cxx index bdb975a5b..243a31a7b 100644 --- a/src/ParaMEDMEM/OverlapMapping.cxx +++ b/src/ParaMEDMEM/OverlapMapping.cxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #include "OverlapMapping.hxx" #include "MPIProcessorGroup.hxx" diff --git a/src/ParaMEDMEM/OverlapMapping.hxx b/src/ParaMEDMEM/OverlapMapping.hxx index ca756b334..d2fbe4552 100644 --- a/src/ParaMEDMEM/OverlapMapping.hxx +++ b/src/ParaMEDMEM/OverlapMapping.hxx @@ -16,6 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// Author : Anthony Geay (CEA/DEN) #ifndef __OVERLAPMAPPING_HXX__ #define __OVERLAPMAPPING_HXX__ diff --git a/src/ParaMEDMEMTest/CMakeLists.txt b/src/ParaMEDMEMTest/CMakeLists.txt index c02e286ec..2f26862c7 100644 --- a/src/ParaMEDMEMTest/CMakeLists.txt +++ b/src/ParaMEDMEMTest/CMakeLists.txt @@ -111,3 +111,13 @@ FOREACH(bintestparamem ${TESTSParaMEDMEM}) ENDFOREACH(bintestparamem ${TESTSParaMEDMEM}) INSTALL(TARGETS ${TESTSParaMEDMEM} DESTINATION ${MED_salomebin_BINS}) +SET(COMMON_HEADERS_HXX + MPIMainTest.hxx + MPIAccessDECTest.hxx + MPIAccessTest.hxx + ParaMEDMEMTest.hxx + MPI2Connector.hxx +) +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${MED_salomeinclude_HEADERS}) + + \ No newline at end of file diff --git a/src/ParaMEDMEM_Swig/CMakeLists.txt b/src/ParaMEDMEM_Swig/CMakeLists.txt index 829d35274..c8e8f7a0f 100644 --- a/src/ParaMEDMEM_Swig/CMakeLists.txt +++ b/src/ParaMEDMEM_Swig/CMakeLists.txt @@ -17,7 +17,7 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/InstallAndCompilePythonFile.cmake) +INCLUDE(${SALOME_MACROS_DIR}/InstallAndCompilePythonFile.cmake) FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) @@ -40,11 +40,12 @@ INCLUDE_DIRECTORIES( ) SWIG_ADD_MODULE(ParaMEDMEM python ParaMEDMEM.i) -SWIG_LINK_LIBRARIES(ParaMEDMEM ${PYTHON_LIBRARIES} paramedmem medloader) +SWIG_LINK_LIBRARIES(ParaMEDMEM ${PYTHON_LIBS} paramedmem medloader) SET_SOURCE_FILES_PROPERTIES(ParaMEDMEM.i PROPERTIES CPLUSPLUS ON) SET_SOURCE_FILES_PROPERTIES(ParaMEDMEM.i PROPERTIES SWIG_DEFINITIONS "-shadow") INSTALL(TARGETS _ParaMEDMEM DESTINATION ${MED_salomepythondir}) INSTALL(FILES ParaMEDMEM.i DESTINATION ${MED_salomeinclude_HEADERS}) -INSTALL_AND_COMPILE_PYTHON_FILE(${CMAKE_CURRENT_BINARY_DIR}/ParaMEDMEM.py ${MED_salomescript_PYTHON}) +INSTALL_AND_COMPILE_PYTHON_FILE(${CMAKE_CURRENT_BINARY_DIR}/ParaMEDMEM.py ${MED_salomepythondir}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/ParaMEDMEM.py test_InterpKernelDEC.py test_NonCoincidentDEC.py test_StructuredCoincidentDEC.py DESTINATION ${MED_salomescript_PYTHON}) \ No newline at end of file diff --git a/src/RENUMBER/CMakeLists.txt b/src/RENUMBER/CMakeLists.txt index 66b984c79..ebbc033e2 100644 --- a/src/RENUMBER/CMakeLists.txt +++ b/src/RENUMBER/CMakeLists.txt @@ -46,7 +46,7 @@ SET(renumber_SOURCES ) SET(renumbercpp_LDFLAGS medmem) -SET(renumber_DEFINITIONS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${BOOST_DEFINITIONS}") +SET(renumber_DEFINITIONS "${HDF5_DEFINITIONS} ${MED3_DEFINITIONS} ${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS}") IF(MED_ENABLE_METIS) SET(renumbercpp_SOURCES ${renumbercpp_SOURCES} RENUMBER_METISRenumbering.cxx) diff --git a/src/RENUMBER/RENUMBERDefines.hxx b/src/RENUMBER/RENUMBERDefines.hxx index e3c74701c..2c76be652 100755 --- a/src/RENUMBER/RENUMBERDefines.hxx +++ b/src/RENUMBER/RENUMBERDefines.hxx @@ -22,7 +22,7 @@ //export symbols #ifdef WIN32 -# if defined RENUMBER_EXPORTS || defined renumber_EXPORTS +# if defined RENUMBERCPP_EXPORTS || defined renumbercpp_EXPORTS # define RENUMBER_EXPORT __declspec(dllexport) # else # define RENUMBER_EXPORT __declspec(dllimport)