Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge back master branch.
authorPierre-Nicolas Clauss <pierre-nicolas.clauss@loria.fr>
Tue, 19 Jul 2011 12:38:11 +0000 (14:38 +0200)
committerPierre-Nicolas Clauss <pierre-nicolas.clauss@loria.fr>
Tue, 19 Jul 2011 12:38:11 +0000 (14:38 +0200)
Conflicts:
src/smpi/smpi_base.c

152 files changed:
.gitignore
CMakeLists.txt
ChangeLog
NEWS
buildtools/Cmake/AddTests.cmake
buildtools/Cmake/CompleteInFiles.cmake
buildtools/Cmake/DefinePackages.cmake
buildtools/Cmake/Distrib.cmake
buildtools/Cmake/Flags.cmake
buildtools/Cmake/Option.cmake
buildtools/Cmake/PrintArgs.cmake
buildtools/Cmake/generate_g5k_platform.pl
buildtools/Cmake/generate_g5k_platform_cabinets.pl [new file with mode: 0644]
buildtools/Cmake/generate_peer_platform.pl
buildtools/Cmake/gras_config.h.in
buildtools/Cmake/simgrid.nsi.in [new file with mode: 0644]
buildtools/Cmake/tesh.pl
buildtools/Cmake/test_prog/prog_mutex_timedlock.c
buildtools/Cmake/test_prog/prog_sem_init.c
buildtools/Cmake/test_prog/prog_sem_open.c [new file with mode: 0644]
buildtools/pipol/deploy.sh
configure
doc/Doxyfile.in
doc/FAQ.doc
doc/HelloWorld/CMakeLists.txt [new file with mode: 0644]
doc/HelloWorld/FindPCRE.cmake [new file with mode: 0644]
doc/HelloWorld/HelloWorld.c [new file with mode: 0644]
doc/HelloWorld/README [new file with mode: 0644]
doc/all.bib
doc/gtut-files/10-rpc.c
doc/gtut-introduction.doc
doc/gtut-tour-08-exceptions.doc
doc/publis.doc
doc/webcruft/SimGrid.ico [new file with mode: 0644]
doc/webcruft/simgrid_logo_win.bmp [new file with mode: 0644]
examples/amok/bandwidth/bandwidth.c
examples/amok/saturate/env.c
examples/amok/saturate/saturate.c
examples/gras/all2all/test_sg_32.tesh
examples/gras/all2all/test_sg_64.tesh
examples/gras/console/ping_client.c
examples/gras/console/ping_server.c
examples/gras/mmrpc/mmrpc.c
examples/gras/mmrpc/mmrpc_server.c
examples/gras/mutual_exclusion/simple_token/simple_token.c
examples/gras/p2p/can/can.c
examples/gras/p2p/can/can_tests.c
examples/gras/p2p/chord/chord.c
examples/gras/ping/ping_client.c
examples/gras/ping/ping_server.c
examples/gras/pmm/pmm.c
examples/gras/replay/replay.c
examples/gras/rpc/rpc.c
examples/gras/rpc/test_rl.tesh
examples/gras/rpc/test_sg_32.tesh
examples/gras/rpc/test_sg_64.tesh
examples/gras/spawn/spawn.c
examples/gras/synchro/test_sg_32.tesh
examples/gras/synchro/test_sg_64.tesh
examples/gras/timer/timer.c
examples/msg/masterslave/masterslave_vivaldi.tesh
examples/msg/token_ring/token_ring.tesh
examples/msg/tracing/categories.c
examples/msg/tracing/ms.c
examples/platforms/One_cluster.xml [moved from examples/platforms/cluster_with_100_hosts.xml with 50% similarity]
examples/platforms/One_cluster_no_backbone.xml [new file with mode: 0644]
examples/platforms/Two_clusters.xml [moved from examples/platforms/2_clusters_with_30000_hosts.xml with 84% similarity]
examples/platforms/cluster_with_100000_hosts.xml [deleted file]
examples/platforms/cluster_with_10000_hosts.xml [deleted file]
examples/platforms/cluster_with_1000_hosts.xml [deleted file]
examples/platforms/cluster_with_300000_hosts.xml [deleted file]
examples/platforms/cluster_with_30000_hosts.xml [deleted file]
examples/platforms/g5k.xml
examples/platforms/g5k_cabinets.xml [new file with mode: 0644]
examples/platforms/gdx.xml [new file with mode: 0644]
examples/platforms/griffon.xml [new file with mode: 0644]
examples/platforms/median_harvard.syscoord [new file with mode: 0644]
examples/platforms/median_harvard.xml [new file with mode: 0644]
examples/platforms/median_meridian.syscoord [new file with mode: 0644]
examples/platforms/median_p2psim.syscoord [new file with mode: 0644]
examples/platforms/nancy.xml [new file with mode: 0644]
examples/simdag/scheduling/minmin_test.c
include/instr/instr.h
include/xbt/dynar.h
include/xbt/ex.h
src/amok/Bandwidth/bandwidth.c
src/amok/Bandwidth/saturate.c
src/gras/DataDesc/cbps.c
src/gras/DataDesc/datadesc_private.h
src/gras/DataDesc/ddt_convert.c
src/gras/DataDesc/ddt_create.c
src/gras/DataDesc/ddt_exchange.c
src/gras/Msg/gras_msg_types.c
src/gras/Msg/msg_interface.h
src/gras/Msg/rl_msg.c
src/gras/Transport/transport.c
src/gras/Virtu/process.c
src/gras/gras.c
src/include/surf/surf.h
src/instr/instr_config.c
src/instr/instr_interface.c
src/instr/instr_paje.c
src/instr/instr_private.h
src/simdag/sd_dotloader.c
src/simix/process_private.h
src/simix/smx_context.c
src/simix/smx_context_raw.c
src/simix/smx_deployment.c
src/simix/smx_synchro.c
src/smpi/smpi_bench.c
src/smpi/smpi_mpi_dt.c
src/surf/fair_bottleneck.c
src/surf/network_ns3.c
src/surf/network_ns3_private.h [new file with mode: 0644]
src/surf/ns3/ns3_interface.cc
src/surf/ns3/ns3_interface.h
src/surf/simgrid.dtd
src/surf/simgrid_dtd.c
src/surf/simgrid_dtd.l
src/surf/surf_routing.c
src/surf/surf_routing_dijkstra.c
src/surf/surf_routing_floyd.c
src/surf/surf_routing_rulebased.c
src/surf/surfxml_parse.c
src/xbt/backtrace_linux.c
src/xbt/config.c
src/xbt/dict.c
src/xbt/dict_multi.c
src/xbt/dynar.c
src/xbt/ex.c
src/xbt/graph.c
src/xbt/mallocator.c
src/xbt/mmalloc/mmap-sup.c
src/xbt/parmap.c
src/xbt/set.c
src/xbt/xbt_os_thread.c
src/xbt/xbt_queue.c
teshsuite/gras/datadesc/datadesc.big32_8_4
teshsuite/gras/datadesc/datadesc.little32_4
teshsuite/gras/datadesc/datadesc.little64
teshsuite/gras/datadesc/datadesc_r_big32_8_4.tesh
teshsuite/gras/datadesc/datadesc_r_little32_4.tesh
teshsuite/gras/datadesc/datadesc_r_little64.tesh
teshsuite/gras/msg_handle/msg_handle.c
teshsuite/simdag/platforms/CMakeLists.txt
teshsuite/simdag/platforms/Evaluate_get_route_time.c [new file with mode: 0644]
teshsuite/simdag/platforms/Evaluate_parse_time.c [new file with mode: 0644]
teshsuite/simdag/platforms/flatifier.c
teshsuite/simdag/platforms/four_hosts_Dijkstra_ns3.xml [new file with mode: 0644]
teshsuite/simdag/platforms/four_hosts_floyd_ns3.xml [new file with mode: 0644]
testsuite/surf/surf_usage.c
testsuite/surf/surf_usage2.c

index ee6cc13..d079e1a 100644 (file)
@@ -32,6 +32,7 @@ src/supernovae_*.c
 ### Generated files\r
 _*.c\r
 include/simgrid_config.h\r
+include/xbt/version.h\r
 include/instr/tracing_config.h\r
 include/smpi/smpif.h\r
 src/context_sysv_config.h\r
@@ -53,6 +54,7 @@ _CPack_Packages/
 CMakeFiles\r
 CMakeCache.txt\r
 DartConfiguration.tcl\r
+simgrid.nsi\r
 Testing/\r
 Makefile\r
 bin/\r
index e4aa9ec..bb28602 100644 (file)
@@ -7,20 +7,27 @@ project(simgrid CXX C)
 set(CMAKE_C_FLAGS "" CACHE TYPE INTERNAL FORCE)
 set(CMAKE_CXX_FLAGS "" CACHE TYPE INTERNAL FORCE)
 set(CMAKE_EXE_LINKER_FLAGS "" CACHE TYPE INTERNAL FORCE)
+
 ## Mapping version number -> version name
 # 3.5.99 -> alpha1 (oops)
-# 3.5.91 -> beta1
-# 3.5.92 -> beta2
-# 3.5.93 -> rc1
-# 3.5.94 -> rc2
+# 3.5.9{1,2} -> beta{1,2}
+# 3.5.9{3,4,5} -> rc{1,2,3}
+# 3.6.{0,1} -> release 3.6, 3.6.1
+
 set(SIMGRID_VERSION_MAJOR "3")
-set(SIMGRID_VERSION_MINOR "5")
-set(SIMGRID_VERSION_PATCH "94")
-set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}")
+set(SIMGRID_VERSION_MINOR "6")
+set(SIMGRID_VERSION_PATCH "1")
+
+if(${SIMGRID_VERSION_PATCH} EQUAL "0")
+       set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}")
+else(${SIMGRID_VERSION_PATCH} EQUAL "0")
+       set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}.${SIMGRID_VERSION_PATCH}")
+endif(${SIMGRID_VERSION_PATCH} EQUAL "0")
 set(libsimgrid_version "${release_version}")
 set(libgras_version "${release_version}")
 set(libsmpi_version "${release_version}")
 set(GCC_NEED_VERSION "4.0")
+set(APPLE_NEED_GCC_VERSION "4.6")
 
 ### SET THE LIBRARY EXTENSION AND GCC VERSION
 if(APPLE) #MAC
@@ -28,6 +35,7 @@ if(APPLE) #MAC
 else(APPLE)
     if(WIN32) #WINDOWS
         set(LIB_EXE "a")
+        set(BIN_EXE ".exe")
     else(WIN32) #UNIX
            set(LIB_EXE "so")
     endif(WIN32)
index 0e14051..c53ae08 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,30 @@
-SimGrid (3.6) unstable; urgency=low
+SimGrid (3.7) unstable; urgency=low 
+
+ -- `LC_ALL=C date` Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
+ SIMDAG
+ [dot loader]
+ * Bug fix: correction of the dot file parsing with the libcgraph
+
+
+SimGrid (3.6.1) unstable; urgency=low 
+
+ The "Oops, we broke Macs too" release
+
+ Portability
+ * Fixed contextes detection so that raw ones are used when possible   
+ * On Mac, do not use Posix Ucontextes with gcc v4.[1-5] since this
+   leads to a strange error, with user code segfaulting sometimes when
+   the generated code is not perfectly aligned (which is not
+   controlable from the user side, depends on the amount of code)
+
+ XBT
+ * New macro: CATCH_ANONYMOUS, which is like CATCH(e) but without argument.
+
+ -- Mon Jun 27 13:59:03 CEST 2011 Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
+
+SimGrid (3.6) stable; urgency=medium
+
+ The Summer Release, also known as the "OMG! They Killed Kenny!" version
 
  Java and Ruby: 
  * Bindings now constitute their own package, separated from the main one.
@@ -132,7 +158,7 @@ SimGrid (3.6) unstable; urgency=low
  * Add a build option -Denable_debug (set to ON by default): when set to OFF,
    assertions and verbose/debug logging events are disabled at compile time.
 
- -- Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
+ -- Tue Jun 21 08:57:43 CEST 2011 Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
 
 SimGrid (3.5) stable; urgency=medium
 
diff --git a/NEWS b/NEWS
index fb64cda..dea8725 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,13 @@
 
+                    _               _____ _____ 
+__   _____ _ __ ___(_) ___  _ __   |___ /|___  |
+\ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \   / / 
+ \ V /  __/ |  \__ \ | (_) | | | |  ___) | / /  
+  \_/ \___|_|  |___/_|\___/|_| |_| |____(_)_/   
+                                                
+
+(still to be done)
+
                     _               _____  __   
 __   _____ _ __ ___(_) ___  _ __   |___ / / /_  
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \| '_ \ 
@@ -6,7 +15,7 @@ __   _____ _ __ ___(_) ___  _ __   |___ / / /_
   \_/ \___|_|  |___/_|\___/|_| |_| |____(_)___/ 
                                                 
 
-The "F*! They Killed Kenny!" version. Major changes:
+The "OMG! They Killed Kenny!" version. Major changes:
 
  * Java and Ruby bindings were removed from the main archive
    - They are now distributed separately
index 5865d11..a923771 100644 (file)
@@ -9,16 +9,8 @@ if(enable_smpi AND NOT WIN32)
        exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpiff" OUTPUT_VARIABLE "OKITOKI")
        exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpirun" OUTPUT_VARIABLE "OKITOKI")
 endif(enable_smpi AND NOT WIN32)
-
-
-if(${PROCESSOR_x86_64})
-       set(HAVE_RAWCTX 1)
-endif(${PROCESSOR_x86_64})
-if(${PROCESSOR_i686})
-       set(HAVE_RAWCTX 1)
-endif(${PROCESSOR_i686})
        
-
+       
 ### For code coverage
 ### Set some variables
 SET(UPDATE_TYPE "svn")
@@ -456,35 +448,6 @@ endif(${ARCH_32_BITS})
 
 # Those tests are broken : set to "fail" for release v3.6
 if(release)
-if(${ARCH_32_BITS})
-       set_tests_properties(gras-rpc-sg-32-thread PROPERTIES WILL_FAIL true)
-       set_tests_properties(gras-all2all-sg-32-thread PROPERTIES WILL_FAIL true)
-       set_tests_properties(gras-synchro-sg-32-thread PROPERTIES WILL_FAIL true)
-       if(HAVE_UCONTEXT_H)
-       set_tests_properties(gras-rpc-sg-32-ucontext PROPERTIES WILL_FAIL true)
-       set_tests_properties(gras-all2all-sg-32-ucontext PROPERTIES WILL_FAIL true)
-       set_tests_properties(gras-synchro-sg-32-ucontext PROPERTIES WILL_FAIL true)
-       endif(HAVE_UCONTEXT_H)
-       if(HAVE_RAWCTX)
-       set_tests_properties(gras-rpc-sg-32-raw PROPERTIES WILL_FAIL true)
-       set_tests_properties(gras-all2all-sg-32-raw PROPERTIES WILL_FAIL true)
-       set_tests_properties(gras-synchro-sg-32-raw PROPERTIES WILL_FAIL true)
-       endif(HAVE_RAWCTX)
-else(${ARCH_32_BITS})
-       set_tests_properties(gras-rpc-sg-64-thread PROPERTIES WILL_FAIL true)
-       set_tests_properties(gras-all2all-sg-64-thread PROPERTIES WILL_FAIL true)
-       set_tests_properties(gras-synchro-sg-64-thread PROPERTIES WILL_FAIL true)
-       if(HAVE_UCONTEXT_H)
-       set_tests_properties(gras-rpc-sg-64-ucontext PROPERTIES WILL_FAIL true)
-       set_tests_properties(gras-all2all-sg-64-ucontext PROPERTIES WILL_FAIL true)
-       set_tests_properties(gras-synchro-sg-64-ucontext PROPERTIES WILL_FAIL true)
-       endif(HAVE_UCONTEXT_H)
-       if(HAVE_RAWCTX)
-       set_tests_properties(gras-rpc-sg-64-raw PROPERTIES WILL_FAIL true)
-       set_tests_properties(gras-all2all-sg-64-raw PROPERTIES WILL_FAIL true)
-       set_tests_properties(gras-synchro-sg-64-raw PROPERTIES WILL_FAIL true)
-       endif(HAVE_RAWCTX)
-endif(${ARCH_32_BITS})
 if(HAVE_MC)
        set_tests_properties(mc-bugged1-thread PROPERTIES WILL_FAIL true)
        set_tests_properties(mc-bugged2-thread PROPERTIES WILL_FAIL true)
index e63a6a7..6c59857 100644 (file)
@@ -3,6 +3,63 @@ ${CMAKE_MODULE_PATH}
 ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Modules
 )
 
+IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") #Intel processor 64 bits
+   message(STATUS "System processor: amd64")
+   set(HAVE_RAWCTX 1)
+   
+ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86") #Intel processor 32 bits
+   message(STATUS "System processor: x86")
+   set(PROCESSOR_i686 1)
+   set(HAVE_RAWCTX 1)
+   
+ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$")
+    IF(${ARCH_32_BITS})
+        set(PROCESSOR_i686 1)
+        message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}")
+    ELSE(${ARCH_32_BITS})
+        message(STATUS "System processor: amd64")
+        set(PROCESSOR_x86_64 1)
+        set(PROCESSOR_i686 0)
+    ENDIF(${ARCH_32_BITS})          
+    set(HAVE_RAWCTX 1)
+    
+ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^alpha")
+    message(STATUS "System processor: alpha")
+    
+ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
+    # Subdir is "arm" for both big-endian (arm) and little-endian (armel).
+    message(STATUS "System processor: arm")
+    
+ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")
+    # mips* machines are bi-endian mostly so processor does not tell
+    # endianess of the underlying system.
+    message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}" "mips" "mipsel" "mipseb")
+    
+ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
+    message(STATUS "System processor: ppc64")
+    
+ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
+    message(STATUS "System processor: ppc")
+    
+ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc")
+    # Both flavours can run on the same processor
+    message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}" "sparc" "sparcv9")
+    
+ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(parisc|hppa)")
+    message(STATUS "System processor: parisc" "parisc64")
+    
+ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390")
+    # s390 binaries can run on s390x machines
+    message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}" "s390" "s390x")
+    
+ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sh")
+    message(STATUS "System processor: sh")
+    
+ELSE(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") #PROCESSOR NOT fIND
+    message(STATUS "PROCESSOR NOT FOUND: ${CMAKE_SYSTEM_PROCESSOR}")
+    
+ENDIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+
 message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}")
 
 include(CheckFunctionExists)
@@ -37,6 +94,7 @@ endif(enable_ns3)
 # Checks for header libraries functions.
 CHECK_LIBRARY_EXISTS(pthread   pthread_create                  "" pthread)
 CHECK_LIBRARY_EXISTS(pthread   sem_init                                "" HAVE_SEM_INIT_LIB)
+CHECK_LIBRARY_EXISTS(pthread   sem_open                                "" HAVE_SEM_OPEN_LIB)
 CHECK_LIBRARY_EXISTS(pthread   sem_timedwait                   "" HAVE_SEM_TIMEDWAIT_LIB)
 CHECK_LIBRARY_EXISTS(pthread   pthread_mutex_timedlock "" HAVE_MUTEX_TIMEDLOCK_LIB)
 CHECK_LIBRARY_EXISTS(rt                clock_gettime                   "" HAVE_POSIX_GETTIME)
@@ -154,18 +212,47 @@ elseif(pthread)
 endif(pthread)
 
 if(pthread)
-       ### HAVE_SEM_INIT
+       ### Test that we have a way to create semaphores
        
+       if(HAVE_SEM_OPEN_LIB)
+               exec_program("${CMAKE_C_COMPILER} -lpthread ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_sem_open.c -o testprog"
+                            OUTPUT_VARIABLE HAVE_SEM_OPEN_run)
+               if(HAVE_SEM_OPEN_run)
+                       set(HAVE_SEM_OPEN 0)
+               else(HAVE_SEM_OPEN_run)
+                       exec_program("./testprog" RETURN_VALUE HAVE_SEM_OPEN_run2 OUTPUT_VARIABLE var_compil)
+                       if(HAVE_SEM_OPEN_run2)
+                               set(HAVE_SEM_OPEN 0)
+                       else(HAVE_SEM_OPEN_run2)
+                               set(HAVE_SEM_OPEN 1)
+                       endif(HAVE_SEM_OPEN_run2)       
+               endif(HAVE_SEM_OPEN_run)
+        else(HAVE_SEM_OPEN_LIB)
+               set(HAVE_SEM_OPEN 0)
+       endif(HAVE_SEM_OPEN_LIB)
+
        if(HAVE_SEM_INIT_LIB)
-               exec_program("${CMAKE_C_COMPILER} -lpthread ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_sem_init.c" OUTPUT_VARIABLE HAVE_SEM_INIT_run)
+               exec_program("${CMAKE_C_COMPILER} -lpthread ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_sem_init.c -o testprog" 
+                            OUTPUT_VARIABLE HAVE_SEM_INIT_run)
                if(HAVE_SEM_INIT_run)
                        set(HAVE_SEM_INIT 0)
                else(HAVE_SEM_INIT_run)
-                       set(HAVE_SEM_INIT 1)
+                       exec_program("./testprog" RETURN_VALUE HAVE_SEM_INIT_run OUTPUT_VARIABLE var_compil)
+                       if(HAVE_SEM_INIT_run)
+                               set(HAVE_SEM_INIT 0)
+                       else(HAVE_SEM_INIT_run)
+                               set(HAVE_SEM_INIT 1)
+                       endif(HAVE_SEM_INIT_run)
                endif(HAVE_SEM_INIT_run)
+        else(HAVE_SEM_INIT_LIB)
+               set(HAVE_SEM_INIT 0)
        endif(HAVE_SEM_INIT_LIB)
 
-       ### HAVE_SEM_TIMEDWAIT
+       if(NOT HAVE_SEM_OPEN AND NOT HAVE_SEM_INIT)
+               message(FATAL_ERROR "Semaphores are not usable, but they are mandatory to threads (you may need to mount /dev).")
+       endif(NOT HAVE_SEM_OPEN AND NOT HAVE_SEM_INIT)
+
+       ### Test that we have a way to timewait for semaphores
 
        if(HAVE_SEM_TIMEDWAIT_LIB)
                exec_program("${CMAKE_C_COMPILER} -lpthread ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_sem_timedwait.c" OUTPUT_VARIABLE HAVE_SEM_TIMEDWAIT_run)
@@ -220,12 +307,8 @@ ELSE(CMAKE_CROSSCOMPILING)
                        file(READ "${simgrid_BINARY_DIR}/conftestval" mcsc)
                        STRING(REPLACE "\n" "" mcsc "${mcsc}")
                        if(mcsc)
-                           if(APPLE AND NOT ucontext) # TODO for the moment ucontext don't work on MAC OSX
-                               set(mcsc "no") 
-                           else(APPLE AND NOT ucontext)
-                               set(mcsc "yes")
-                               set(HAVE_UCONTEXT_H 1)
-                               endif(APPLE AND NOT ucontext)
+                               set(mcsc "yes")
+                               set(HAVE_UCONTEXT_H 1)
                        else(mcsc)
                                set(mcsc "no")
                        endif(mcsc)
@@ -269,36 +352,18 @@ endif(pthread)
 ###############
 ## SVN version check
 ##
-if(IS_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.svn)
-       find_file(SVN ".svn" ${CMAKE_HOME_DIRECTORY})
-       exec_program("svnversion ${CMAKE_HOME_DIRECTORY}" OUTPUT_VARIABLE "SVN_VERSION")
-       message(STATUS "svn version ${SVN_VERSION}")
-else(IS_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.svn)
-       exec_program("git config --get svn-remote.svn.url"
-               OUTPUT_VARIABLE url
-               RETURN_VALUE ret)
-endif(IS_DIRECTORY ${CMAKE_HOME_DIRECTORY}/.svn)
+exec_program("git remote" OUTPUT_VARIABLE remote RETURN_VALUE ret)
+exec_program("git config --get remote.${remote}.url" OUTPUT_VARIABLE url RETURN_VALUE ret)
 
 if(url)
        exec_program("git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log --oneline -1" OUTPUT_VARIABLE "GIT_VERSION")
+       message(STATUS "Git version: ${GIT_VERSION}")
        exec_program("git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log -n 1 --format=%ai ." OUTPUT_VARIABLE "GIT_DATE")
-       
+       message(STATUS "Git date: ${GIT_DATE}")
        string(REGEX REPLACE " .*" "" GIT_VERSION "${GIT_VERSION}")
        STRING(REPLACE " +0000" "" GIT_DATE ${GIT_DATE})
        STRING(REPLACE " " "~" GIT_DATE ${GIT_DATE})
        STRING(REPLACE ":" "-" GIT_DATE ${GIT_DATE})
-       
-       exec_program("git svn info" ${CMAKE_HOME_DIRECTORY}
-               OUTPUT_VARIABLE "GIT_SVN_VERSION")
-       string(REPLACE "\n" ";" GIT_SVN_VERSION ${GIT_SVN_VERSION})
-       foreach(line ${GIT_SVN_VERSION})
-               string(REGEX MATCH "^Revision:.*" line_good ${line})
-               if(line_good)
-                       string(REPLACE "Revision: " ""
-                               line_good ${line_good})
-                       set(SVN_VERSION ${line_good})
-               endif(line_good)
-       endforeach(line ${GIT_SVN_VERSION})
 endif(url)
 
 
@@ -321,6 +386,36 @@ else(BIGENDIAN)
   set(GRAS_BIGENDIAN 0)
 endif(BIGENDIAN)
 
+# The syntax of this magic string is given in src/gras/DataDesc/ddt_convert.c
+# It kinda matches the values that the gras_arch_desc_t structure can take
+
+# Basically, the syntax is one char l or B for endianness (little or Big)
+#   then there is a bunch of blocks separated by _.  
+# C block is for char, I block for integers, P block for pointers and
+#   D block for floating points
+# For each block there is an amount of chuncks separated by :, each of
+#   them describing a data size. For example there is only one chunk
+#   in the char block, because no architecture provide several sizes
+#   of chars. In integer block, there is 4 chunks: "short int", "int",
+#   "long int", "long long int". There is 2 pointer chunks for data
+#   pointers and pointers on functions (thanks to the AMD64 madness).
+#   Thee two floating points chuncks are for "float" and "double".
+# Each chunk is of the form datasize/minimal_alignment_size
+
+# These informations are used to convert a data stream from one
+#    formalism to another. Only the GRAS_ARCH is transfered in the
+#    stream, and it it of cruxial importance to keep these detection
+#    information here synchronized with the data hardcoded in the
+#    source in src/gras/DataDesc/ddt_convert.c 
+
+# If you add something here (like a previously unknown architecture),
+#    please add it to the source code too. 
+# Please do not modify stuff here since it'd break the GRAS protocol.
+#     If you really need to change stuff, please also bump
+#    GRAS_PROTOCOL_VERSION in src/gras/Msg/msg_interface.h
+
+SET(GRAS_THISARCH "none")
+
 if(val_big MATCHES "l_C:1/1:_I:2/1:4/1:4/1:8/1:_P:4/1:4/1:_D:4/1:8/1:")
        #gras_arch=0; gras_size=32; gras_arch_name=little32_1;
        SET(GRAS_ARCH_32_BITS 1)
@@ -346,38 +441,47 @@ if(val_big MATCHES "l_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/8:")
        SET(GRAS_ARCH_32_BITS 0)
        SET(GRAS_THISARCH 4)
 endif(val_big MATCHES "l_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/8:")
+if(val_big MATCHES "l_C:1/1:_I:2/2:4/4:4/4:8/8:_P:8/8:8/8:_D:4/4:8/8:") 
+       #gras_arch=5; gras_size=64; gras_arch_name=little64_2;
+       SET(GRAS_ARCH_32_BITS 0)
+       SET(GRAS_THISARCH 5)
+endif(val_big MATCHES "l_C:1/1:_I:2/2:4/4:4/4:8/8:_P:8/8:8/8:_D:4/4:8/8:")
 
 if(val_big MATCHES "B_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/8:") 
-       #gras_arch=5; gras_size=32; gras_arch_name=big32;
+       #gras_arch=6; gras_size=32; gras_arch_name=big32_8;
        SET(GRAS_ARCH_32_BITS 1)
-       SET(GRAS_THISARCH 5)
+       SET(GRAS_THISARCH 6)
 endif(val_big MATCHES "B_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/8:")
 if(val_big MATCHES "B_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/4:") 
-       #gras_arch=6; gras_size=32; gras_arch_name=big32_8_4;
+       #gras_arch=7; gras_size=32; gras_arch_name=big32_8_4;
        SET(GRAS_ARCH_32_BITS 1)
-       SET(GRAS_THISARCH 6)
+       SET(GRAS_THISARCH 7)
 endif(val_big MATCHES "B_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/4:")
 if(val_big MATCHES "B_C:1/1:_I:2/2:4/4:4/4:8/4:_P:4/4:4/4:_D:4/4:8/4:") 
-       #gras_arch=7; gras_size=32; gras_arch_name=big32_4;
+       #gras_arch=8; gras_size=32; gras_arch_name=big32_4;
        SET(GRAS_ARCH_32_BITS 1)
-       SET(GRAS_THISARCH 7)
+       SET(GRAS_THISARCH 8)
 endif(val_big MATCHES "B_C:1/1:_I:2/2:4/4:4/4:8/4:_P:4/4:4/4:_D:4/4:8/4:")
 if(val_big MATCHES "B_C:1/1:_I:2/2:4/2:4/2:8/2:_P:4/2:4/2:_D:4/2:8/2:") 
-       #gras_arch=8; gras_size=32; gras_arch_name=big32_2;
+       #gras_arch=9; gras_size=32; gras_arch_name=big32_2;
        SET(GRAS_ARCH_32_BITS 1)
-       SET(GRAS_THISARCH 8)
+       SET(GRAS_THISARCH 9)
 endif(val_big MATCHES "B_C:1/1:_I:2/2:4/2:4/2:8/2:_P:4/2:4/2:_D:4/2:8/2:") 
 if(val_big MATCHES "B_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/8:") 
-       #gras_arch=9; gras_size=64; gras_arch_name=big64;
+       #gras_arch=10; gras_size=64; gras_arch_name=big64;
        SET(GRAS_ARCH_32_BITS 0)
-       SET(GRAS_THISARCH 9)
+       SET(GRAS_THISARCH 10)
 endif(val_big MATCHES "B_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/8:")
 if(val_big MATCHES "B_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/4:") 
-       #gras_arch=10;gras_size=64; gras_arch_name=big64_8_4;
+       #gras_arch=11; gras_size=64; gras_arch_name=big64_8_4;
        SET(GRAS_ARCH_32_BITS 0)
-       SET(GRAS_THISARCH 10)
+       SET(GRAS_THISARCH 11)
 endif(val_big MATCHES "B_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/4:") 
 
+if(GRAS_THISARCH MATCHES "none")
+    message(STATUS "architecture: ${val_big}")
+    message(FATAL_ERROR "GRAS_THISARCH is empty: '${GRAS_THISARCH}'")  
+endif(GRAS_THISARCH MATCHES "none")
 
 # Check architecture signature end
 try_run(RUN_GRAS_VAR COMPILE_GRAS_VAR
@@ -405,7 +509,7 @@ set(makecontext_CPPFLAGS_2 "")
 if(HAVE_MAKECONTEXT OR WIN32)
        set(makecontext_CPPFLAGS "-DTEST_makecontext")
        if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
-               set(makecontext_CPPFLAGS_2 "-DOSX")
+               set(makecontext_CPPFLAGS_2 "-D_XOPEN_SOURCE")
        endif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
        
     if(WIN32 AND __VISUALC__)
@@ -509,9 +613,9 @@ foreach(fct ${diff_va})
            }
            va_end(ap);
        }
-       int main(int argc, char *argv[])
+       int main(void)
        {
-           test("test", 1, 2, 3, 4, 5, 6, 7, 8, 9);
+           test(\"test\", 1, 2, 3, 4, 5, 6, 7, 8, 9);
            exit(0);
        }"
        )
@@ -646,6 +750,16 @@ if(ADDR2LINE)
 set(ADDR2LINE "${ADDR2LINE}/addr2line")
 endif(ADDR2LINE)
 
+
+
+### Check if OSX can compile with ucontext (with gcc 4.[1-5] it is broken)
+if(APPLE)
+    if(APPLE_NEED_GCC_VERSION GREATER COMPILER_C_VERSION_MAJOR_MINOR)
+        message(STATUS "Ucontext can't be used with this version of gcc (must be greater than 4.5)")
+        set(HAVE_UCONTEXT_H 0)
+    endif(APPLE_NEED_GCC_VERSION GREATER COMPILER_C_VERSION_MAJOR_MINOR)
+endif(APPLE)
+
 ### File to create
 
 configure_file("${CMAKE_HOME_DIRECTORY}/src/context_sysv_config.h.in"                  "${CMAKE_BINARY_DIR}/src/context_sysv_config.h" @ONLY IMMEDIATE)
@@ -676,11 +790,19 @@ exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif2c" OUTPUT_VARIABLE OKITO
 exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpiff" OUTPUT_VARIABLE OKITOKI)
 exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpirun" OUTPUT_VARIABLE OKITOKI)
 
-set(generate_files_to_clean
-${CMAKE_BINARY_DIR}/src/context_sysv_config.h
-${CMAKE_BINARY_DIR}/src/gras_config.h
-${CMAKE_BINARY_DIR}/include/simgrid_config.h
-${CMAKE_BINARY_DIR}/include/smpi/smpif.h
+set(generated_headers_to_install
+       ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/smpif.h
+       ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid_config.h
+)
+
+set(generated_headers
+    ${CMAKE_CURRENT_BINARY_DIR}/src/context_sysv_config.h
+    ${CMAKE_CURRENT_BINARY_DIR}/src/gras_config.h
+)
+
+set(generated_files_to_clean
+${generated_headers}
+${generated_headers_to_install}
 ${CMAKE_BINARY_DIR}/bin/smpicc
 ${CMAKE_BINARY_DIR}/bin/smpif2c
 ${CMAKE_BINARY_DIR}/bin/smpiff
@@ -700,8 +822,8 @@ else("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
        configure_file(${CMAKE_HOME_DIRECTORY}/examples/msg/small_platform_with_routers.xml ${CMAKE_BINARY_DIR}/examples/msg/small_platform_with_routers.xml COPYONLY)
        configure_file(${CMAKE_HOME_DIRECTORY}/examples/msg/tracing/platform.xml ${CMAKE_BINARY_DIR}/examples/msg/tracing/platform.xml COPYONLY)
        
-       set(generate_files_to_clean
-               ${generate_files_to_clean}
+       set(generated_files_to_clean
+               ${generated_files_to_clean}
                ${CMAKE_BINARY_DIR}/examples/smpi/hostfile
                ${CMAKE_BINARY_DIR}/examples/msg/small_platform.xml
                ${CMAKE_BINARY_DIR}/examples/msg/small_platform_with_routers.xml
@@ -710,4 +832,12 @@ else("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
 endif("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
 
 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
-"${generate_files_to_clean}")
+"${generated_files_to_clean}")
+
+
+IF(${ARCH_32_BITS})
+  set(WIN_ARCH "32")
+ELSE(${ARCH_32_BITS})
+    set(WIN_ARCH "64")
+ENDIF(${ARCH_32_BITS})
+configure_file("${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/simgrid.nsi.in"       "${CMAKE_BINARY_DIR}/simgrid.nsi" @ONLY IMMEDIATE)
index d65e466..5cc94d0 100644 (file)
@@ -91,6 +91,14 @@ set(EXTRA_DIST
        src/smpi/smpi_mpi_dt_private.h
        src/smpi/README
        src/mk_supernovae.pl
+       
+       examples/gras/ping/ping.h
+       examples/gras/console/ping.h
+       examples/gras/mmrpc/mmrpc.h
+
+       tools/gras/gras_stub_generator.h
+       tools/tesh/run_context.h  
+       tools/tesh/tesh.h
 )
 
 set(XBT_RL_SRC 
@@ -354,7 +362,7 @@ set(RNGSTREAM_SRC
        src/rngstreams/RngStream.c
 )
 
-set(install_HEADERS
+set(headers_to_install
        include/xbt/misc.h
        include/xbt/sysdep.h
        include/xbt/virtu.h
@@ -374,6 +382,7 @@ set(install_HEADERS
        include/xbt/graph.h
        include/xbt/fifo.h
        include/xbt/swag.h
+       include/xbt/lib.h
        include/xbt/matrix.h
        include/xbt/peer.h
        include/xbt/config.h
@@ -396,6 +405,7 @@ set(install_HEADERS
        include/smpi/smpi.h
        include/smpi/mpi.h
        include/smpi/mpif.h
+       include/smpi/smpi_cocci.h
        include/surf/surfxml_parse.h
        include/surf/simgrid_dtd.h
        include/surf/surf_routing.h
@@ -416,10 +426,10 @@ set(install_HEADERS
        include/simix/datatypes.h
        include/simix/context.h
 )
-set(GENERATE_HEADERS
-       ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/smpif.h
-       ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid_config.h
-)
+set(source_of_generated_headers
+       include/simgrid_config.h.in
+       include/smpi/smpif.h.in
+       src/context_sysv_config.h.in)
 
 ### depend of some variables setted upper
 # -->CONTEXT_THREADS CONTEXT_UCONTEXT
@@ -676,17 +686,6 @@ set(add_src_files
        src/simix/smx_context_sysv_private.h
 )
 
-file(GLOB_RECURSE include_files
-"include/*.h"
-"teshsuite/*.h"
-"testsuite/*.h"
-"tools/*.h"
-"examples/*.h"
-"examples/*.hpp"
-"src/*.h.in"
-"include/*.h.in"
-)
-
 file(GLOB_RECURSE xml_files
 "examples/*.xml"
 "include/*.xml"
@@ -816,7 +815,8 @@ buildtools/Cmake/tesh.pl
 
 # This is the complete list of what will be added to the source archive
 set(source_to_pack     
-       ${install_HEADERS}
+       ${headers_to_install}
+       ${source_of_generated_headers}
        ${XBT_RL_SRC}
        ${EXTRA_DIST}
        ${SMPI_SRC}
@@ -836,7 +836,6 @@ set(source_to_pack
        ${JEDULE_SRC}
        ${RNGSTREAM_SRC}
        ${add_src_files}
-       ${include_files}
        ${xml_files}
        ${tesh_files}
        ${txt_files}
@@ -846,4 +845,5 @@ set(source_to_pack
        ${DOC_FIGS}
        ${DOC_bib}
        ${README_files}
+       buildtools/Cmake/simgrid.nsi.in 
 )
index f38b21e..81bf320 100644 (file)
@@ -79,8 +79,8 @@ endif(enable_lib_static AND NOT WIN32)
 
 # include files
 set(HEADERS
-    ${install_HEADERS}
-    ${GENERATE_HEADERS}
+    ${headers_to_install}
+    ${generated_headers_to_install}
     )
 foreach(file ${HEADERS})
   get_filename_component(location ${file} PATH)
@@ -177,6 +177,7 @@ add_custom_target(dist-dir
   COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_HOME_DIRECTORY}/doc/html/ simgrid-${release_version}/doc/html/
 )
 add_dependencies(dist-dir simgrid_documentation)
+add_dependencies(dist-dir maintainer_files)
 
 set(dirs_in_tarball "")
 foreach(file ${source_to_pack})
index 8bd0b59..278388c 100644 (file)
@@ -12,8 +12,14 @@ if(enable_compile_warnings)
        set(warnCFLAGS "-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror ")
 endif(enable_compile_warnings)
 
+if(enable_compile_warnings AND COMPILER_C_VERSION_MAJOR_MINOR MATCHES "4.6")
+    set(warnCFLAGS "${warnCFLAGS} -Wno-error=unused-but-set-variable ")
+endif(enable_compile_warnings AND COMPILER_C_VERSION_MAJOR_MINOR MATCHES "4.6")
+
 if(enable_compile_optimizations)
        set(optCFLAGS "-O3 -finline-functions -funroll-loops -fno-strict-aliasing ")
+else(enable_compile_optimizations)
+        set(optCFLAGS "-O0 ")
 endif(enable_compile_optimizations)
 
 if(NOT enable_debug)
@@ -24,10 +30,6 @@ set(CMAKE_C_FLAGS "${optCFLAGS}${warnCFLAGS}${CMAKE_C_FLAGS}")
 
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${custom_flags}")
 
-if(WIN32)
-       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i486")
-endif(WIN32)
-
 # Try to make Mac a bit more complient to open source standards
 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE")
index b4b671d..170f0aa 100644 (file)
@@ -16,9 +16,11 @@ endif(NOT CMAKE_INSTALL_PREFIX)
 
 set(pipol_user ${pipol_user} CACHE TYPE INTERNAL FORCE)
 
+option(release "Whether Release Mode is activated (disable tests on experimental parts)" on)
+
 option(enable_gtnets "Whether gtnets model is activated." on)
 option(enable_ns3    "Whether ns3 model is activated." off)
-option(enable_smpi "This variable set smpi lib." on)
+option(enable_smpi "This variable set smpi lib." off)
 option(enable_lua "Whether the lua bindings are activated." on)
 set(enable_pcre ${enable_pcre} CACHE FORCE "Whether the pcre lib is activated.")
 if(enable_pcre STREQUAL "")
index 9e7c532..d39ef8d 100644 (file)
@@ -74,10 +74,10 @@ if(enable_print_message)
        message("")
 endif(enable_print_message)
 
-message("\nConfiguration of package `simgrid' (revision ${SVN_VERSION}) on arch (=${GRAS_THISARCH}):")
+message("\nConfiguration of package `simgrid' on arch (=${GRAS_THISARCH}):")
 message("           BUILDNAME :        ${BUILDNAME}")
 message("           SITE      :        ${SITE}")
-message("           Release   :        simgrid-${release_version}~rev${SVN_VERSION}")
+message("           Release   :        simgrid-${release_version}")
 message("")
 message("       Compiler: c++ :        ${CMAKE_CXX_COMPILER}")
 message("              version:        ${COMPILER_CXX_VERSION}")
index c213ee7..b8ba575 100755 (executable)
@@ -72,7 +72,7 @@ while(defined($line=<SITES_LIGNE>))
                {
                        if($line =~ /"uid": "(.*)",/){
                                $cluster = $1;
-                               print "\t\t\t<cluster id=\"AS_$cluster\" prefix=\"$cluster-\" suffix=\".$cluster.grid5000.fr\"\n";
+                               print "\t\t\t<cluster id=\"AS_$cluster\" prefix=\"$cluster-\" suffix=\".$site.grid5000.fr\"\n";
                                `wget https://api.grid5000.fr/2.0/grid5000/sites/$site/clusters/$cluster/nodes --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
                                open NODES_LIGNE, 'nodes' or die "Unable to open nodes $!\n";
                                while(defined($line=<NODES_LIGNE>))
@@ -99,15 +99,15 @@ while(defined($line=<SITES_LIGNE>))
                print "\n";
                
                print "\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
-               print "\t\t\t\tgw_src=\"\$1src-AS_\$1src_router.\$1src.grid5000.fr\"\n";
-               print "\t\t\t\tgw_dst=\"\$1dst-AS_\$1dst_router.\$1dst.grid5000.fr\"\n";
+               print "\t\t\t\tgw_src=\"\$1src-AS_\$1src_router.$site.grid5000.fr\"\n";
+               print "\t\t\t\tgw_dst=\"\$1dst-AS_\$1dst_router.$site.grid5000.fr\"\n";
                print "\t\t\t\tsymmetrical=\"YES\">\n";
                print "\t\t\t\t\t<link_ctn id=\"link_\$1src\"/>\n";
                print "\t\t\t\t\t<link_ctn id=\"link_\$1dst\"/>\n";
                print "\t\t\t</ASroute>\n\n"; 
 
                print "\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^gw_AS_(.*)\$\"\n";
-               print "\t\t\t\tgw_src=\"\$1src-AS_\$1src_router.\$1src.grid5000.fr\"\n";
+               print "\t\t\t\tgw_src=\"\$1src-AS_\$1src_router.$site.grid5000.fr\"\n";
                print "\t\t\t\tgw_dst=\"gw_\$1dst\"\n";
                print "\t\t\t\tsymmetrical=\"NO\">\n";
                print "\t\t\t\t\t<link_ctn id=\"link_\$1src\"/>\n";
@@ -115,7 +115,7 @@ while(defined($line=<SITES_LIGNE>))
                
                print "\t\t\t<ASroute src=\"^gw_AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
                print "\t\t\t\tgw_src=\"gw_\$1src\"\n";
-               print "\t\t\t\tgw_dst=\"\$1dst-AS_\$1dst_router.\$1dst.grid5000.fr\"\n";
+               print "\t\t\t\tgw_dst=\"\$1dst-AS_\$1dst_router.$site.grid5000.fr\"\n";
                print "\t\t\t\tsymmetrical=\"NO\">\n";
                print "\t\t\t\t\t<link_ctn id=\"link_\$1dst\"/>\n";
                print "\t\t\t</ASroute>\n\n"; 
diff --git a/buildtools/Cmake/generate_g5k_platform_cabinets.pl b/buildtools/Cmake/generate_g5k_platform_cabinets.pl
new file mode 100644 (file)
index 0000000..f5009f3
--- /dev/null
@@ -0,0 +1,339 @@
+#!/usr/bin/perl -w
+use strict;
+use Switch;
+
+my $site="";
+my $cluster="";
+my $toversion=3;
+my $line;
+my $uid="";
+my $i=0;
+my @AS_route = ();
+
+if($#ARGV!=1) {
+    die "Usage: ./generate_g5k_platform.pl g5k_username g5k_password\n";
+}
+
+print "<?xml version='1.0'?>\n";
+print "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n";
+print "<platform version=\"$toversion\">\n";
+print "\t<AS id=\"AS_grid5000\" routing=\"Floyd\" >\n";
+
+print "\t\t<AS id=\"AS_interne\" routing=\"Floyd\">\n";
+printf "\t\t\t<router id=\"lille\"/>\n";
+printf "\t\t\t<router id=\"paris\"/>\n";
+printf "\t\t\t<router id=\"nancy\"/>\n";
+printf "\t\t\t<router id=\"rennes\"/>\n";
+printf "\t\t\t<router id=\"lyon\"/>\n";
+printf "\t\t\t<router id=\"bordeaux\"/>\n";
+printf "\t\t\t<router id=\"grenoble\"/>\n";
+printf "\t\t\t<router id=\"marseille\"/>\n";
+printf "\t\t\t<router id=\"toulouse\"/>\n";
+printf "\t\t\t<router id=\"sophia\"/>\n";
+#printf "\t\t\t<router id=\"luxembourg\">\n";
+print "\n";
+printf "\t\t\t<link id=\"Lille_Paris\"        bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
+printf "\t\t\t<link id=\"Paris_Nancy\"        bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
+printf "\t\t\t<link id=\"Paris_Rennes\"       bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
+printf "\t\t\t<link id=\"Paris_Lyon\"         bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
+printf "\t\t\t<link id=\"Bordeaux_Lyon\"      bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
+printf "\t\t\t<link id=\"Lyon_Grenoble\"      bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
+printf "\t\t\t<link id=\"Lyon_Marseille\"     bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
+printf "\t\t\t<link id=\"Marseille_Sophia\"   bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
+printf "\t\t\t<link id=\"Marseille_Toulouse\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
+#printf "\t\t<link id=\"Luxemburg_Nancy\"    bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
+print "\n";
+
+print "\t\t<route src=\"lille\"     dst=\"paris\"     ><link_ctn id=\"Lille_Paris\"/></route>\n";
+print "\t\t<route src=\"paris\"     dst=\"nancy\"     ><link_ctn id=\"Paris_Nancy\"/></route>\n";
+print "\t\t<route src=\"paris\"     dst=\"rennes\"    ><link_ctn id=\"Paris_Rennes\"/></route>\n";
+print "\t\t<route src=\"paris\"     dst=\"lyon\"      ><link_ctn id=\"Paris_Lyon\"/></route>\n";
+print "\t\t<route src=\"bordeaux\"  dst=\"lyon\"      ><link_ctn id=\"Bordeaux_Lyon\"/></route>\n";
+print "\t\t<route src=\"lyon\"      dst=\"grenoble\"  ><link_ctn id=\"Lyon_Grenoble\"/></route>\n";
+print "\t\t<route src=\"lyon\"      dst=\"marseille\" ><link_ctn id=\"Lyon_Marseille\"/></route>\n";
+print "\t\t<route src=\"marseille\" dst=\"sophia\"    ><link_ctn id=\"Marseille_Sophia\"/></route>\n";
+print "\t\t<route src=\"marseille\" dst=\"toulouse\"  ><link_ctn id=\"Marseille_Toulouse\"/></route>\n";
+#print "\t\t<route src=\"Luxemburg\" dst=\"Nancy\"     ><link_ctn id=\"Luxemburg_Nancy\"/></route>\n";
+print "\t\t</AS>\n"; 
+  
+`wget https://api.grid5000.fr/2.0/grid5000/sites --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
+open SITES_LIGNE, 'sites' or die "Unable to open sites $!\n";
+while(defined($line=<SITES_LIGNE>))
+{
+       if($line =~ /"uid": "(.*)",/){
+               $site = $1;
+               print "\t\t<AS id=\"AS_$site\" routing=\"RuleBased\" >\n";
+       
+               `wget https://api.grid5000.fr/2.0/grid5000/sites/$site/clusters --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
+               open CLUSTERS_LIGNE, 'clusters' or die "Unable to open clusters $!\n";
+               while(defined($line=<CLUSTERS_LIGNE>))
+               {
+                       if($line =~ /"uid": "(.*)",/){
+                               $cluster = $1;
+                               &get_switch($site, $cluster);                   
+                       }
+               }
+
+               close CLUSTERS_LIGNE;
+               `rm clusters`;
+               
+               print "\t\t\t<AS id=\"gw_AS_$site\" routing=\"Full\">\n";
+               print "\t\t\t\t<router id=\"gw_$site\"/>\n";
+               print "\t\t\t</AS>\n";
+               print "\t\t\t<link   id=\"link_gw_$site\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
+               print "\n";
+               
+               print "\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
+               print "\t\t\t\tgw_src=\"\$1src-AS_\$1src_router.$site.grid5000.fr\"\n";
+               print "\t\t\t\tgw_dst=\"\$1dst-AS_\$1dst_router.$site.grid5000.fr\"\n";
+               print "\t\t\t\tsymmetrical=\"YES\">\n";
+               print "\t\t\t\t\t<link_ctn id=\"link_\$1src\"/>\n";
+               print "\t\t\t\t\t<link_ctn id=\"link_\$1dst\"/>\n";
+               print "\t\t\t</ASroute>\n\n"; 
+
+               print "\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^gw_AS_(.*)\$\"\n";
+               print "\t\t\t\tgw_src=\"\$1src-AS_\$1src_router.$site.grid5000.fr\"\n";
+               print "\t\t\t\tgw_dst=\"gw_\$1dst\"\n";
+               print "\t\t\t\tsymmetrical=\"NO\">\n";
+               print "\t\t\t\t\t<link_ctn id=\"link_\$1src\"/>\n";
+               print "\t\t\t</ASroute>\n\n"; 
+               
+               print "\t\t\t<ASroute src=\"^gw_AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
+               print "\t\t\t\tgw_src=\"gw_\$1src\"\n";
+               print "\t\t\t\tgw_dst=\"\$1dst-AS_\$1dst_router.$site.grid5000.fr\"\n";
+               print "\t\t\t\tsymmetrical=\"NO\">\n";
+               print "\t\t\t\t\t<link_ctn id=\"link_\$1dst\"/>\n";
+               print "\t\t\t</ASroute>\n\n"; 
+
+               print "\t\t</AS>\n";
+               
+               push @AS_route, $site;
+       }
+}
+close SITES_LIGNE;
+`rm sites`;
+
+printf "\n";
+
+while(@AS_route)
+{
+       $site = pop @AS_route;
+       print "\t\t<ASroute src=\"AS_$site\" dst=\"AS_interne\" gw_src=\"gw_$site\"";
+       if( $site =~ /^orsay$/ )
+       {
+               print " gw_dst=\"paris\"";
+       }
+       else
+       {
+               print " gw_dst=\"$site\"";
+       }
+       print " symmetrical=\"YES\">\n";
+       print "\t\t\t<link_ctn id=\"link_gw_$site\"/>\n";
+       print "\t\t</ASroute>\n";
+}
+
+print "\t</AS>\n";
+print "</platform>\n";
+
+sub get_switch {
+       my $total;
+       my $switch="";
+       my @switch_list=();
+
+       my @host=();
+       my @host_switch=();
+       $site="$_[0]";
+       $cluster="$_[1]";
+       `wget https://api.grid5000.fr/2.0/grid5000/sites/$site/clusters/$cluster/nodes --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
+       open NODES_LIGNE, 'nodes' or die "Unable to open nodes $!\n";
+       while(defined($line=<NODES_LIGNE>))
+       {
+               if($line =~ /"uid": "(.*)",/)
+               {
+                       $uid = $1;
+                       push(@host, $1);        
+               }
+               if($line =~ /"total": (.*),/){
+                       $total = $1;
+               }
+               if($line =~ /"switch": "(.*)",/ && !$switch)
+               {
+                       $switch = "$1"; 
+                       push(@host_switch, $1);
+               }
+               if( $uid && $switch )
+               {
+                       push(@switch_list, $switch);    
+                       $uid="";        
+                       $switch="";     
+               }
+       }
+       close NODES_LIGNE;
+       `rm nodes`;
+
+       my %count;
+       my @uniq_array = grep { ++$count{$_} < 2 } @switch_list;
+       @uniq_array = sort (@uniq_array);
+       if(@switch_list && @uniq_array != 1){
+
+               if(@switch_list != @host){
+                       printf "Take care \@host != of \@switch_list\n";
+               }               
+               
+               print "\t\t\t<AS id=\"AS_$cluster\" routing=\"RuleBased\" >\n";
+
+               my @num=();
+               my $radical;
+               foreach(@uniq_array){
+                       $switch = $_;
+                       $i=0;
+                       @num=();
+                       foreach(@host_switch){
+                               if($_ =~ $switch){
+                                       if($host[$i] =~ /$cluster-(.*)/){
+                                               push(@num, $1);
+                                       }       
+                               }
+                               $i++;
+                       }
+       
+                       my $deb;
+                       my $fin;
+                       @num=sort {$a <=> $b} (@num);
+                       $radical = "";
+       
+                       $i=0;
+                       foreach(@num){  
+                               if($i == 0){
+                               $deb = $num[$i];
+                               $fin = $num[$i];
+                               }
+                               else{
+                                       if($num[$i] == ($num[$i-1]+1) )
+                                       {
+                                               $fin = $num[$i];
+                                               if(@num == ($i+1)){
+                                                       if($deb != $fin)
+                                                       {
+                                                               if(!($radical =~ /^$/))
+                                                               {
+                                                                       $radical = $radical.";";
+                                                               }
+                                                               $radical = $radical.$deb."-".$fin;
+                                                               $deb = $num[$i];
+                                                               $fin = $num[$i];
+                                                       }
+                                                       else
+                                                       {
+                                                               $radical=$radical.";".$num[$i];
+                                                       }                               
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if($deb != $fin)
+                                               {
+                                                       if(!($radical =~ /^$/))
+                                                       {
+                                                               $radical = $radical.";";
+                                                       }
+                                                       $radical = $radical.$deb."-".$fin;
+                                                       $deb = $num[$i];
+                                                       $fin = $num[$i];
+                                               }
+                                               else
+                                               {
+                                                       $radical=$radical.";".$num[$i];
+                                               }
+                       
+                                       }
+                               }
+                               $i++;
+                       }
+                       print "\t\t\t\t<cluster id=\"AS_$switch\" prefix=\"$cluster-\" suffix=\".$site.grid5000.fr\"\n";
+                       print "\t\t\t\t\tradical=\"$radical\" power=\"";
+                       &get_gflops($cluster);
+                       print "\" bw=\"1.25E8\" lat=\"1.0E-4\""."\n";
+                       print "\t\t\t\t\tbb_bw=\"1.25E9\" bb_lat=\"1.0E-4\"></cluster>\n";
+               }
+               
+               print "\n\t\t\t\t<AS id=\"gw_AS_$cluster\" routing=\"Full\">\n";
+               print "\t\t\t\t\t<router id=\"".$cluster."-AS_".$cluster."_router.".$site.".grid5000.fr\"/>\n";
+               print "\t\t\t\t</AS>\n";
+               
+               print "\t\t\t\t<link id=\"switch-$cluster\" bandwidth=\"1250000000\" latency=\"5E-4\"/>\n\n";
+       
+       print "\t\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
+               print "\t\t\t\t gw_src=\"$cluster-AS_\$1src_router.$site.grid5000.fr\"\n";
+               print "\t\t\t\t gw_dst=\"$cluster-AS_\$1dst_router.$site.grid5000.fr\">\n";
+               print "\t\t\t\t\t<link_ctn id=\"switch-$cluster\"/>\n";
+       print "\t\t\t\t</ASroute>\n";
+       
+       print "\t\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^gw_AS_(.*)\$\"\n";
+               print "\t\t\t\t gw_src=\"$cluster-AS_\$1src_router.$site.grid5000.fr\"\n";
+               print "\t\t\t\t gw_dst=\"".$cluster."-AS_".$cluster."_router.".$site.".grid5000.fr\">\n";
+               print "\t\t\t\t\t<link_ctn id=\"switch-$cluster\"/>\n";
+       print "\t\t\t\t</ASroute>\n";
+       
+       print "\t\t\t\t<ASroute src=\"^gw_AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
+               print "\t\t\t\t gw_src=\"".$cluster."-AS_".$cluster."_router.".$site.".grid5000.fr\"\n";
+               print "\t\t\t\t gw_dst=\"$cluster-AS_\$1dst_router.$site.grid5000.fr\">\n";
+               print "\t\t\t\t\t<link_ctn id=\"switch-$cluster\"/>\n";
+       print "\t\t\t\t</ASroute>\n";
+       
+       
+               print "\t\t\t</AS>\n";
+               
+                       
+       }
+       else{
+               print "\t\t\t<cluster id=\"AS_$cluster\" prefix=\"$cluster-\" suffix=\".$site.grid5000.fr\"\n";
+               print "\t\t\t\tradical=\"1-$total\" power=\"";
+               &get_gflops($cluster);
+               print "\" bw=\"1.25E8\" lat=\"1.0E-4\""."\n";
+               print "\t\t\t\tbb_bw=\"1.25E9\" bb_lat=\"1.0E-4\"></cluster>\n";
+       }
+       print "\t\t\t<link   id=\"link_$cluster\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n\n";
+}
+
+
+sub get_gflops {
+       switch ($_[0]) {
+               case "bordeplage" { print "5.2297E9" }
+               case "bordereau"  { print "8.8925E9" }
+               case "borderline" { print "13.357E9" }
+               
+               case "chicon"     { print "8.9618E9" }
+               case "chimint"    { print "23.531E9" }
+               case "chinqchint" { print "22.270E9" }
+               case "chirloute"  { print "24.473E9" }
+               
+               case "adonis"     { print "23.681E9" }
+               case "edel"       { print "23.492E9" }
+               case "genepi"     { print "21.175E9" }
+               
+               case "capricorne" { print "4.7233E9" }
+               case "sagittaire" { print "5.6693E9" }
+               
+               case "graphene"   { print "16.673E9" }
+               case "griffon"    { print "20.678E9" }
+               
+               case "gdx"        { print "4.7153E9" }
+               case "netgdx"     { print "4.7144E9" }
+               
+               case "paradent"   { print "21.496E9" }
+               case "paramount"  { print "12.910E9" }
+               case "parapide"   { print "30.130E9" }
+               case "parapluie"  { print "27.391E9" }
+               
+               case "helios"     { print "7.7318E9" }
+               case "sol"        { print "8.9388E9" }
+               case "suno"       { print "23.530E9" }
+               
+               case "pastel"     { print "9.5674E9" }
+               case "violette"   { print "5.1143E9" }
+               
+               case "default"    {     print "3.542E9" }
+               else                      {     print "xxxxxxx" }
+       }
+}
index 778aa8e..91f8ca5 100755 (executable)
@@ -15,11 +15,18 @@ print "</config>\n\n";
 
 print "\t<AS  id=\"AS0\"  routing=\"Vivaldi\">\n";
 
-for($i=0 ; $i<$nb_peer ; $i++){
-               print "\t\t<peer id=\"$i\" coordinates=\"-12.7 -9.9 2.1\" power=\"730000000.0\"\n";
-               print "\t\tbw_in=\"2250000000\" bw_out=\"2250000000\" lat=\"5E-4\" />\n\n";
-}
+my $line;
 
+open SITES_LIGNE, $ARGV[0] or die "Unable to open $ARGV[1]\n";
+while(defined($line=<SITES_LIGNE>))
+{
+       #278 7.2 -9.4 h 2.3 
+               if($line =~ /^(.*) (.*) (.*) h (.*)$/)
+               {
+               print "\t\t<peer id=\"peer-$1\" coordinates=\"$2 $3 $4\" power=\"730000000.0\"\n";
+               print "\t\tbw_in=\"13380000\" bw_out=\"1024000\" lat=\"5E-4\" />\n\n";
+               }
+}
 print "\t\t<ASroute src=\"(.*)\"\n\t\t\tdst=\"(.*)\"\n\t\t\tgw_src=\"router_\$1src\"\n\t\t\tgw_dst=\"router_\$1dst\">\n\t\t</ASroute>\n";              
                        
 print "\t</AS>\n";
index ed0517f..c58ef93 100644 (file)
@@ -33,6 +33,7 @@
 #cmakedefine _WIN64 @_WIN64@                   //this variable is set if it is a 64 bits  windows platform
 #cmakedefine __VISUALC__ @__VISUALC__@
 #cmakedefine __BORLANDC__ @__BORLANDC__@
+#cmakedefine APPLE @APPLE@
 #ifdef _XBT_WIN32
        #ifndef __GNUC__
                #cmakedefine __GNUC__ @__GNUC__@
 #cmakedefine PROCESSOR_i686 @PROCESSOR_i686@
 #cmakedefine PROCESSOR_x86_64 @PROCESSOR_x86_64@
 #cmakedefine CMAKE_SYSTEM_PROCESSOR @CMAKE_SYSTEM_PROCESSOR@
+#cmakedefine HAVE_RAWCTX @HAVE_RAWCTX@
 
 /* Defined if arrays in struct can straddle struct alignment boundaries. This
    is like than the structure compaction above, but this time, the argument to
diff --git a/buildtools/Cmake/simgrid.nsi.in b/buildtools/Cmake/simgrid.nsi.in
new file mode 100644 (file)
index 0000000..c6b2f4d
--- /dev/null
@@ -0,0 +1,342 @@
+!include "MUI2.nsh"\r
+\r
+;--------------------------------\r
+;Interface Configuration\r
+\r
+  !define MUI_HEADERIMAGE\r
+  !define MUI_HEADERIMAGE_BITMAP "@CMAKE_HOME_DIRECTORY@\doc\webcruft\simgrid_logo_win.bmp" ; optional\r
+  !define MUI_ABORTWARNING\r
+\r
+;--------------------------------\r
+;Pages\r
+\r
+  !insertmacro MUI_PAGE_LICENSE "@CMAKE_HOME_DIRECTORY@\LICENSE-LGPL-2.1"\r
+  !insertmacro MUI_PAGE_COMPONENTS\r
+  !insertmacro MUI_PAGE_DIRECTORY\r
+  !insertmacro MUI_PAGE_INSTFILES\r
+  !insertmacro MUI_PAGE_FINISH\r
+  \r
+  !insertmacro MUI_UNPAGE_CONFIRM\r
+  !insertmacro MUI_UNPAGE_INSTFILES\r
+  !insertmacro MUI_UNPAGE_FINISH\r
+\r
+;--------------------------------\r
+;Languages\r
+  !insertmacro MUI_LANGUAGE "English"\r
+  !insertmacro MUI_LANGUAGE "French"\r
+;--------------------------------\r
+\r
+Name "Simgrid"\r
+outFile "SimGrid@SIMGRID_VERSION_MAJOR@.@SIMGRID_VERSION_MINOR@.@SIMGRID_VERSION_PATCH@_@CMAKE_SYSTEM_PROCESSOR@@BIN_EXE@"\r
+Icon "@CMAKE_HOME_DIRECTORY@\doc\webcruft\SimGrid.ico"\r
+\r
+# set the default installation directory\r
+InstallDir c:\SimGrid@SIMGRID_VERSION_MAJOR@.@SIMGRID_VERSION_MINOR@.@SIMGRID_VERSION_PATCH@\r
+\r
+Section "Libraries and Headers" LibSection\r
+\r
+       # install lib\r
+       CreateDirectory $INSTDIR\lib\r
+       setOutPath $INSTDIR\lib\r
+       file lib\libgras.@LIB_EXE@\r
+       file lib\libsimgrid.@LIB_EXE@\r
+       \r
+       #install headers\r
+       CreateDirectory  $INSTDIR\include\r
+       setOutPath $INSTDIR\include\r
+       file @CMAKE_HOME_DIRECTORY@\include\gras.h \r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt.h\r
+       file include\simgrid_config.h\r
+       \r
+       CreateDirectory  $INSTDIR\include\xbt\r
+       setOutPath $INSTDIR\include\xbt\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\misc.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\sysdep.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\virtu.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\str.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\strbuff.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\hash.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\function_types.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\asserts.h \r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\ex.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\log.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\module.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\mallocator.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\dynar.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\dict.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\set.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\heap.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\graph.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\fifo.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\swag.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\lib.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\matrix.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\peer.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\config.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\cunit.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\graphxml_parse.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\graphxml.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\time.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\synchro.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\synchro_core.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\queue.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\setset.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\mmalloc.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\replay_trace_reader.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\xbt\parmap.h\r
+       \r
+       CreateDirectory  $INSTDIR\include\mc\r
+       setOutPath $INSTDIR\include\mc\r
+       file @CMAKE_HOME_DIRECTORY@\include\mc\modelchecker.h\r
+       \r
+       CreateDirectory  $INSTDIR\include\msg\r
+       setOutPath $INSTDIR\include\msg\r
+       file @CMAKE_HOME_DIRECTORY@\include\msg\msg.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\msg\datatypes.h\r
+       \r
+       CreateDirectory  $INSTDIR\include\simdag\r
+       setOutPath $INSTDIR\include\simdag\r
+       file @CMAKE_HOME_DIRECTORY@\include\simdag\simdag.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\simdag\datatypes.h\r
+       \r
+       CreateDirectory  $INSTDIR\include\smpi\r
+       setOutPath $INSTDIR\include\smpi\r
+       file @CMAKE_HOME_DIRECTORY@\include\smpi\smpi.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\smpi\mpi.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\smpi\mpif.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\smpi\smpi_cocci.h\r
+       file include\smpi\smpif.h\r
+       \r
+       CreateDirectory  $INSTDIR\include\surf\r
+       setOutPath $INSTDIR\include\surf\r
+       file @CMAKE_HOME_DIRECTORY@\include\surf\surfxml_parse.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\surf\simgrid_dtd.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\surf\surf_routing.h\r
+       \r
+       CreateDirectory  $INSTDIR\include\gras\r
+       setOutPath $INSTDIR\include\gras\r
+       file @CMAKE_HOME_DIRECTORY@\include\gras\datadesc.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\gras\transport.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\gras\virtu.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\gras\emul.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\gras\process.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\gras\module.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\gras\messages.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\gras\timer.h\r
+       \r
+       CreateDirectory  $INSTDIR\include\amok\r
+       setOutPath $INSTDIR\include\amok\r
+       file @CMAKE_HOME_DIRECTORY@\include\amok\peermanagement.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\amok\bandwidth.h\r
+       \r
+       CreateDirectory  $INSTDIR\include\instr\r
+       setOutPath $INSTDIR\include\instr\r
+       file @CMAKE_HOME_DIRECTORY@\include\instr\instr.h\r
+       \r
+       CreateDirectory  $INSTDIR\include\simix\r
+       setOutPath $INSTDIR\include\simix\r
+       file @CMAKE_HOME_DIRECTORY@\include\simix\simix.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\simix\datatypes.h\r
+       file @CMAKE_HOME_DIRECTORY@\include\simix\context.h\r
+       \r
+SectionEnd\r
+Section "Binaries" BinSection  \r
+       \r
+       # insatll bin\r
+       CreateDirectory $INSTDIR\bin\r
+       setOutPath $INSTDIR\bin\r
+       file bin\colorize\r
+       file bin\graphicator@BIN_EXE@\r
+       file bin\gras_stub_generator@BIN_EXE@\r
+       file bin\simgrid_update_xml\r
+       file bin\smpicc\r
+       file bin\smpif2c\r
+       file bin\smpiff\r
+       file bin\smpirun\r
+       file bin\tesh\r
+       \r
+SectionEnd\r
+Section "Documentation" DocSection     \r
+       \r
+       # install doc\r
+       CreateDirectory $INSTDIR\doc\r
+       setOutPath $INSTDIR\doc\r
+       file /nonfatal /r @CMAKE_HOME_DIRECTORY@\doc\html\r
+       # create a shortcut in the start menu programs directory\r
+       CreateDirectory "$SMPROGRAMS\SimGrid"\r
+       createShortCut  "$SMPROGRAMS\SimGrid\Documentation.lnk" "$INSTDIR\doc\html\index.html"\r
+       \r
+SectionEnd\r
+Section "Examples" ExamplesSection     \r
+       \r
+       # install examples\r
+       CreateDirectory $INSTDIR\examples\r
+       setOutPath $INSTDIR\examples\r
+       file /r @CMAKE_HOME_DIRECTORY@\examples\platforms\r
+       file /r @CMAKE_HOME_DIRECTORY@\doc\HelloWorld\r
+       # create a shortcut in the start menu programs directory\r
+       createShortCut  "$SMPROGRAMS\SimGrid\HelloWorld project.lnk"    "$INSTDIR\examples\HelloWorld"  \r
+       \r
+SectionEnd\r
+\r
+# default section start\r
+section        \r
+       # define uninstaller name\r
+       writeUninstaller $INSTDIR\uninstaller@BIN_EXE@\r
+\r
+       # create a shortcut in the start menu programs directory\r
+       CreateDirectory "$SMPROGRAMS\SimGrid"\r
+       createShortCut  "$SMPROGRAMS\SimGrid\Uninstall simgrid.lnk" "$INSTDIR\uninstaller@BIN_EXE@"\r
+\r
+       # Include for some of the windows message defines\r
+       !include "winmessages.nsh"\r
+       # HKLM (all users) vs HKCU (current user) defines\r
+       !define env_hklm 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'\r
+       !define env_hkcu 'HKCU "Environment"'\r
+       # Set Variables\r
+       WriteRegExpandStr ${env_hklm} SIMGRID_ROOT $INSTDIR\r
+       WriteRegExpandStr ${env_hklm} SIMGRID_VERSION @SIMGRID_VERSION_MAJOR@.@SIMGRID_VERSION_MINOR@.@SIMGRID_VERSION_PATCH@\r
+\r
+       WriteRegStr HKCU "SOFTWARE\SimGrid" "Version" "@SIMGRID_VERSION_MAJOR@.@SIMGRID_VERSION_MINOR@.@SIMGRID_VERSION_PATCH@"\r
+       WriteRegStr HKCU "SOFTWARE\SimGrid" "InstallPath" "$INSTDIR"\r
+       \r
+       SetRebootFlag true\r
+\r
+# default section end\r
+sectionEnd\r
+\r
+LangString DESC_LibSection             ${LANG_ENGLISH} "Install Simgrid and gras libraries with associated headers."\r
+LangString DESC_BinSection             ${LANG_ENGLISH} "Install some useful tools for Simgrid."\r
+LangString DESC_DocSection             ${LANG_ENGLISH} "Generated (doxygen) documentation."\r
+LangString DESC_ExamplesSection ${LANG_ENGLISH} "Simgrid's HelloWorld example and some classical platforms."\r
+\r
+LangString DESC_LibSection             ${LANG_FRENCH}  "Installer les librairies Simgrid et Gras et leurs Entêtes."\r
+LangString DESC_BinSection             ${LANG_FRENCH}  "Installer les outils optionnels."\r
+LangString DESC_DocSection             ${LANG_FRENCH}  "Installer la documentation."\r
+LangString DESC_ExamplesSection ${LANG_FRENCH}         "Installer un exemple 'HelloWorld' et des fichiers de plate-formes types."\r
+\r
+!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN\r
+  !insertmacro MUI_DESCRIPTION_TEXT ${LibSection}              $(DESC_LibSection)\r
+  !insertmacro MUI_DESCRIPTION_TEXT ${BinSection}              $(DESC_BinSection)\r
+  !insertmacro MUI_DESCRIPTION_TEXT ${DocSection}              $(DESC_DocSection)\r
+  !insertmacro MUI_DESCRIPTION_TEXT ${ExamplesSection}         $(DESC_ExamplesSection)\r
+!insertmacro MUI_FUNCTION_DESCRIPTION_END\r
+\r
+# create a section to define what the uninstaller does.\r
+# the section will always be named "Uninstall"\r
+section "Uninstall"\r
+\r
+       # always delete uninstaller first\r
+       delete $INSTDIR\uninstaller@BIN_EXE@\r
+\r
+       # delete installed libs\r
+       delete $INSTDIR\lib\libgras.@LIB_EXE@\r
+       delete $INSTDIR\lib\libsimgrid.@LIB_EXE@\r
+\r
+       # delete installed bin\r
+       delete $INSTDIR\bin\colorize\r
+       delete $INSTDIR\bin\graphicator@BIN_EXE@\r
+       delete $INSTDIR\bin\gras_stub_generator@BIN_EXE@\r
+       delete $INSTDIR\bin\simgrid_update_xml\r
+       delete $INSTDIR\bin\smpicc\r
+       delete $INSTDIR\bin\smpif2c\r
+       delete $INSTDIR\bin\smpiff\r
+       delete $INSTDIR\bin\smpirun\r
+       delete $INSTDIR\bin\tesh\r
+       \r
+       # delete installed headers\r
+       delete $INSTDIR\include\gras.h \r
+       delete $INSTDIR\include\xbt.h\r
+       delete $INSTDIR\include\simgrid_config.h\r
+       delete $INSTDIR\include\xbt\misc.h\r
+       delete $INSTDIR\include\xbt\sysdep.h\r
+       delete $INSTDIR\include\xbt\virtu.h\r
+       delete $INSTDIR\include\xbt\str.h\r
+       delete $INSTDIR\include\xbt\strbuff.h\r
+       delete $INSTDIR\include\xbt\hash.h\r
+       delete $INSTDIR\include\xbt\function_types.h\r
+       delete $INSTDIR\include\xbt\asserts.h \r
+       delete $INSTDIR\include\xbt\ex.h\r
+       delete $INSTDIR\include\xbt\log.h\r
+       delete $INSTDIR\include\xbt\module.h\r
+       delete $INSTDIR\include\xbt\mallocator.h\r
+       delete $INSTDIR\include\xbt\dynar.h\r
+       delete $INSTDIR\include\xbt\dict.h\r
+       delete $INSTDIR\include\xbt\set.h\r
+       delete $INSTDIR\include\xbt\heap.h\r
+       delete $INSTDIR\include\xbt\graph.h\r
+       delete $INSTDIR\include\xbt\fifo.h\r
+       delete $INSTDIR\include\xbt\swag.h\r
+       delete $INSTDIR\include\xbt\lib.h\r
+       delete $INSTDIR\include\xbt\matrix.h\r
+       delete $INSTDIR\include\xbt\peer.h\r
+       delete $INSTDIR\include\xbt\config.h\r
+       delete $INSTDIR\include\xbt\cunit.h\r
+       delete $INSTDIR\include\xbt\graphxml_parse.h\r
+       delete $INSTDIR\include\xbt\graphxml.h\r
+       delete $INSTDIR\include\xbt\time.h\r
+       delete $INSTDIR\include\xbt\synchro.h\r
+       delete $INSTDIR\include\xbt\synchro_core.h\r
+       delete $INSTDIR\include\xbt\queue.h\r
+       delete $INSTDIR\include\xbt\setset.h\r
+       delete $INSTDIR\include\xbt\mmalloc.h\r
+       delete $INSTDIR\include\xbt\replay_trace_reader.h\r
+       delete $INSTDIR\include\xbt\parmap.h\r
+       delete $INSTDIR\include\mc\modelchecker.h\r
+       delete $INSTDIR\include\msg\msg.h\r
+       delete $INSTDIR\include\msg\datatypes.h \r
+       delete $INSTDIR\include\simdag\simdag.h\r
+       delete $INSTDIR\include\simdag\datatypes.h\r
+       delete $INSTDIR\include\smpi\smpi.h\r
+       delete $INSTDIR\include\smpi\mpi.h\r
+       delete $INSTDIR\include\smpi\mpif.h\r
+       delete $INSTDIR\include\smpi\smpi_cocci.h\r
+       delete $INSTDIR\include\smpi\smpif.h\r
+       delete $INSTDIR\include\surf\surfxml_parse.h\r
+       delete $INSTDIR\include\surf\simgrid_dtd.h\r
+       delete $INSTDIR\include\surf\surf_routing.h\r
+       delete $INSTDIR\include\gras\datadesc.h\r
+       delete $INSTDIR\include\gras\transport.h\r
+       delete $INSTDIR\include\gras\virtu.h\r
+       delete $INSTDIR\include\gras\emul.h\r
+       delete $INSTDIR\include\gras\process.h\r
+       delete $INSTDIR\include\gras\module.h\r
+       delete $INSTDIR\include\gras\messages.h\r
+       delete $INSTDIR\include\gras\timer.h\r
+       delete $INSTDIR\include\amok\peermanagement.h\r
+       delete $INSTDIR\include\amok\bandwidth.h\r
+       delete $INSTDIR\include\instr\instr.h\r
+       delete $INSTDIR\include\simix\simix.h\r
+       delete $INSTDIR\include\simix\datatypes.h\r
+       delete $INSTDIR\include\simix\context.h\r
+               \r
+       # delete link\r
+       delete "$SMPROGRAMS\SimGrid\Uninstall simgrid.lnk"\r
+       delete "$SMPROGRAMS\SimGrid\Documentation.lnk"\r
+       delete "$SMPROGRAMS\SimGrid\HelloWorld project.lnk"\r
+       \r
+       # now delete directories\r
+       RMDir  "$INSTDIR\bin"\r
+       RMDir  "$INSTDIR\lib"\r
+       RMDir  "$INSTDIR\include\simix"\r
+       RMDir  "$INSTDIR\include\instr"\r
+       RMDir  "$INSTDIR\include\amok"\r
+       RMDir  "$INSTDIR\include\gras"\r
+       RMDir  "$INSTDIR\include\surf"\r
+       RMDir  "$INSTDIR\include\smpi"\r
+       RMDir  "$INSTDIR\include\simdag"\r
+       RMDir  "$INSTDIR\include\msg"\r
+       RMDir  "$INSTDIR\include\mc"\r
+       RMDir  "$INSTDIR\include\xbt"\r
+       RMDir  "$INSTDIR\include"\r
+       RMDir  /r "$INSTDIR\doc"\r
+       RMDir  /r "$INSTDIR\examples"\r
+       RMDir  "$SMPROGRAMS\SimGrid"\r
+       \r
+       # Delete variable\r
+       DeleteRegValue ${env_hklm} SIMGRID_ROOT\r
+       DeleteRegValue ${env_hklm} SIMGRID_VERSION\r
+      DeleteRegKey HKCU "SOFTWARE\SimGrid"\r
+    \r
+# uninstall section end\r
+sectionEnd
\ No newline at end of file
index 28296d6..a5b53c4 100755 (executable)
@@ -32,6 +32,8 @@ else{
        $OS = "WIN";
 }
 
+print "OS: ".$OS."\n";
+
 # make sure we received a tesh file
 scalar @ARGV > 0 || die "Usage:\n    tesh [*options*] *tesh_file*\n";
 
@@ -175,6 +177,8 @@ sub exec_cmd {
     # cleanup the command line
     if($OS eq "WIN"){
                $cmd{'cmd'} =~ s/\${EXEEXT:=}/.exe/g;
+               $cmd{'cmd'} =~ s/\${EXEEXT}/.exe/g;
+               $cmd{'cmd'} =~ s/\$EXEEXT/.exe/g;
        }
        else{
                $cmd{'cmd'} =~ s/\${EXEEXT:=}//g;
index 1b0664a..8c394ed 100644 (file)
@@ -6,9 +6,10 @@
 
 #include <pthread.h>
 
-void main(void)
+int main(void)
 {
   pthread_mutex_t s;
   const struct timespec t;
   sem_timedlock(&s, &t);
+  return 0;
 }
index 9027c47..5302a80 100644 (file)
@@ -6,7 +6,7 @@
 
 #include <semaphore.h>
 
-void main(void)
+int main(void)
 {
   sem_t s;
   if (sem_init(&s, 0, 0) != 0) 
diff --git a/buildtools/Cmake/test_prog/prog_sem_open.c b/buildtools/Cmake/test_prog/prog_sem_open.c
new file mode 100644 (file)
index 0000000..4679c32
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright (c) 2010. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <semaphore.h>
+#include <stdio.h>
+
+int main(void) {   
+   sem_t * s;
+   
+   s = sem_open("/0", O_CREAT, 0644, 10);
+   if (s == SEM_FAILED){
+//     printf("sem_open failed\n");
+     return 1;
+   }
+//   printf("sem_open succeeded\n");   
+   return 0;
+}
index 785475d..aea016b 100644 (file)
@@ -33,7 +33,7 @@ ssh pipol pipol-sub esn amd64_kvm-linux-debian-testing none 02:00 "~/Experimenta
 #___________________________________________________________________________________________________
 #MacOS Snow Leopard 10.6____________________________________________________________________________
 #ssh pipol pipol-sub esn x86_64_mac-mac-osx-server-snow-leopard.dd.gz none 02:00 "~/Experimental_bindings.sh" # PASSE PAS
-ssh pipol pipol-sub esn x86_mac-mac-osx-server-snow-leopard.dd.gz none 02:00 "~/Experimental_bindings.sh"
+ssh pipol pipol-sub esn x86_mac-mac-osx-server-snow-leopard-navarro-2011-06-22-203726.dd.gz none 02:00 "~/Experimental_bindings.sh"
 
 #___________________________________________________________________________________________________
 #windows-server-2008-64bits_________________________________________________________________________
index 351cfa3..4666fe6 100755 (executable)
--- a/configure
+++ b/configure
@@ -2,4 +2,4 @@
 
 echo "THIS COMMAND IS NOT AVAILABLE!"
 echo "Since v3.4 we use cmake. Now use:"
-echo -e "\tcmake -DCMAKE_INSTALL_PREFIX=<where_you_want> .\n\tmake\n\tmake install."
+echo -e "\tcmake -DCMAKE_INSTALL_PREFIX=<where_you_want> .\n\tmake\n\tmake install"
index 255096d..ee1b029 100644 (file)
@@ -1512,7 +1512,8 @@ INCLUDE_FILE_PATTERNS  =
 
 PREDEFINED             = DOXYGEN \
                          DOXYGEN_SKIP_IT \
-                         XBT_PUBLIC=
+                         XBT_PUBLIC= \
+                         XBT_INLINE=
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
 # this tag can be used to specify a list of macro names that should be expanded.
index f48d3fa..f0889d3 100644 (file)
@@ -5,9 +5,9 @@
 \section faq_simgrid I'm new to SimGrid. I have some questions. Where should I start?
 
 You are at the right  place... Having a look to these
-<a href="http://www.loria.fr/~quinson/articles/simgrid-tutorial.pdf">the tutorial slides</a> 
-(or to these <a href="http://graal.ens-lyon.fr/~alegrand/articles/slides_g5k_simul.pdf">old slides</a>,
-or to these
+<a href="http://www.loria.fr/~quinson/blog/2010/06/28/Tutorial_at_HPCS/">the slides of the HPCS'10 tutorial</a>
+(or to these <a href="http://graal.ens-lyon.fr/~alegrand/articles/slides_g5k_simul.pdf">ancient
+slides</a>, or to these
 <a href="http://graal.ens-lyon.fr/~alegrand/articles/Simgrid-Introduction.pdf">"obsolete" slides</a>)
 may give you some insights on what SimGrid can help you to do and what
 are its limitations. Then you definitely should read the \ref
@@ -115,7 +115,8 @@ For Windows :
   \li cmake 2.8 <a href="http://www.cmake.org/cmake/resources/software.html">(download page)</a>
   \li perl strawberry <a href="http://www.strawberryperl.com/download/5.12.2.0/strawberry-perl-5.12.2.0.msi">(download page)</a>
   \li pcre-7.0 <a href="http://sourceforge.net/projects/gnuwin32/files/pcre/7.0/pcre-7.0.exe/download">(download page)</a>
-
+  \li git <a href="http://msysgit.googlecode.com/files/Git-1.7.4-preview20110204.exe">(download page)</a>
+  
 \subsubsection faq_cmakeoption1 Liste of options
 
 \verbatim
@@ -228,6 +229,7 @@ make
 
 On Windows
 
+Open the "Git Bash" window.
 \verbatim
 cmake -G"Unix Makefiles" -D[name]=[value] ... ./
 gmake
@@ -632,7 +634,7 @@ one). That means that using this development releases should be safe for most
 users. 
 
 These archives can be found on 
-<a href="http://www.loria.fr/~quinson/simgrid.html">this web page</a>. Once you 
+<a href="http://www.loria.fr/~quinson/Research/SimGrid/">this web page</a>. Once you 
 got the lastest archive, you can compile it just like any archive (see above).
 
 \subsection faq_compiling_svn Compiling SimGrid from the SVN
diff --git a/doc/HelloWorld/CMakeLists.txt b/doc/HelloWorld/CMakeLists.txt
new file mode 100644 (file)
index 0000000..cfeb963
--- /dev/null
@@ -0,0 +1,41 @@
+### This is a template for building targets with simgrid
+cmake_minimum_required(VERSION 2.8)
+
+### Need to set rc ccompiler before enable language
+if(WIN32)
+    SET(CMAKE_RC_COMPILER "windres")
+endif(WIN32)
+
+project(HelloWorld C)
+set(CMAKE_C_FLAGS "" CACHE TYPE INTERNAL FORCE)
+set(CMAKE_EXE_LINKER_FLAGS "" CACHE TYPE INTERNAL FORCE)
+
+###############################
+# Test the build dependencies #
+###############################
+include(FindPCRE.cmake)
+message(STATUS "Looking for lib Simgrid")
+if("$ENV{SIMGRID_ROOT}" STREQUAL "")
+    message(STATUS "Looking for lib Simgrid - Not found")
+    message(FATAL_ERROR "Simgrid not found, reinstall it or set SIMGRID_ROOT")
+else("$ENV{SIMGRID_ROOT}" STREQUAL "")
+    link_directories($ENV{SIMGRID_ROOT}/lib)
+    include_directories($ENV{SIMGRID_ROOT}/include)
+    include_directories($ENV{SIMGRID_ROOT}/src)
+    include_directories($ENV{SIMGRID_ROOT}/src/include)
+    add_library(libsimgrid STATIC IMPORTED)
+    message(STATUS "Looking for lib Simgrid - found") 
+endif("$ENV{SIMGRID_ROOT}" STREQUAL "")
+
+###########
+# TARGETS #
+###########
+
+#########################
+# add_executable        #
+#    args1 target name  #
+#    args2 sources      #
+#########################
+add_executable(HelloWorld HelloWorld.c)
+# Any targets need to be linked with simgrid and pcre
+target_link_libraries(HelloWorld simgrid pcre) 
diff --git a/doc/HelloWorld/FindPCRE.cmake b/doc/HelloWorld/FindPCRE.cmake
new file mode 100644 (file)
index 0000000..9454da7
--- /dev/null
@@ -0,0 +1,71 @@
+### SET THE LIBRARY EXTENSION AND GCC VERSION
+if(APPLE) #MAC
+       set(LIB_EXE "dylib")
+else(APPLE)
+    if(WIN32) #WINDOWS
+        set(LIB_EXE "a")
+        set(BIN_EXE ".exe")
+    else(WIN32) #UNIX
+           set(LIB_EXE "so")
+    endif(WIN32)
+endif(APPLE)
+
+find_library(PATH_PCRE_LIB 
+       NAMES pcre
+    HINTS
+    $ENV{LD_LIBRARY_PATH}
+    $ENV{PCRE_LIBRARY_PATH}
+    PATH_SUFFIXES lib/ GnuWin32/lib
+    PATHS
+    /opt
+    /opt/local
+    /opt/csw
+    /sw
+    /usr)
+    
+find_path(PATH_PCRE_H "pcre.h"
+    HINTS
+    $ENV{LD_LIBRARY_PATH}
+    $ENV{PCRE_LIBRARY_PATH}
+    PATH_SUFFIXES include/ GnuWin32/include
+    PATHS
+    /opt
+    /opt/local
+    /opt/csw
+    /sw
+    /usr)
+    
+set(HAVE_PCRE_LIB 0)
+
+message(STATUS "Looking for pcre.h")
+if(PATH_PCRE_H)
+message(STATUS "Looking for pcre.h - found")
+else(PATH_PCRE_H)
+message(STATUS "Looking for pcre.h - not found")
+endif(PATH_PCRE_H)
+
+message(STATUS "Looking for lib pcre")
+if(PATH_PCRE_LIB)
+message(STATUS "Looking for lib pcre - found")
+else(PATH_PCRE_LIB)
+message(STATUS "Looking for lib pcre - not found")
+endif(PATH_PCRE_LIB)
+
+if(PATH_PCRE_LIB AND PATH_PCRE_H)
+    string(REGEX REPLACE "/libpcre.*[.]${LIB_EXE}$" "" PATHLIBPCRE "${PATH_PCRE_LIB}")
+    string(REGEX REPLACE "/pcre.h" "" PATH_PCRE_H "${PATH_PCRE_H}")
+    string(REGEX MATCH "-L${PATHLIBPCRE} " operation "${CMAKE_C_FLAGS}")
+       if(NOT operation)
+           SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-L${PATHLIBPCRE} ")
+       endif(NOT operation)
+       string(REGEX MATCH "-I${PATH_PCRE_H} " operation "${CMAKE_C_FLAGS}")
+       if(NOT operation)
+           SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-I${PATH_PCRE_H} ")
+       endif(NOT operation)       
+    set(HAVE_PCRE_LIB 1)
+else(PATH_PCRE_LIB)
+    message(FATAL_ERROR "Please install the libpcre3-dev package or equivalent before using it.")
+endif(PATH_PCRE_LIB AND PATH_PCRE_H)
+    
+mark_as_advanced(PATH_PCRE_H)
+mark_as_advanced(PATH_PCRE_LIB)
\ No newline at end of file
diff --git a/doc/HelloWorld/HelloWorld.c b/doc/HelloWorld/HelloWorld.c
new file mode 100644 (file)
index 0000000..796b67a
--- /dev/null
@@ -0,0 +1,7 @@
+#include "xbt/log.h"
+XBT_LOG_NEW_DEFAULT_CATEGORY(HelloWorld,
+                             "Messages specific for this Hello World example");
+void main()
+{
+       XBT_INFO("Hello World !!!");
+}
diff --git a/doc/HelloWorld/README b/doc/HelloWorld/README
new file mode 100644 (file)
index 0000000..2fcbf69
--- /dev/null
@@ -0,0 +1,35 @@
+This is a very simple example to explain how to compile with simgrid.
+
+1) How to compile an example: (HelloWorld)
+
+- Run "Git bash" (installed with git).
+- Open HelloWorld Directory ('cd' command line).
+- Create a build directory and change directory. (optional)
+- Type 'cmake -G"Unix Makefiles" <path_to_HelloWorld_project>'
+- Run gmake
+- You should obtain a runnable example ("HelloWorld.exe").
+
+2) Content of this directory
+
+- HelloWorld.c 
+       The example source file.
+- CMakeLists.txt
+       It allows to configure the project.
+- FindPCRE.cmake
+       Simgrid needs pcre regular expression.
+       This finds and links to the pcre library.
+- README
+       This explaination.
+       
+3) How to add and compile a new example
+
+- Put your source file into the helloWord directory.
+- Edit CMakeLists.txt :
+       * In the Targets section add those two lines:
+               add_executable(TARGET_NAME SOURCES)
+               target_link_libraries(TARGET_NAME simgrid pcre) 
+       * It creates a target called 'TARGET_NAME.exe' with the sources 'SOURCES'.
+- To initialize your project, you'll need to run 'cmake -G"Unix Makefiles" <path_to_HelloWorld_project>.'
+- To build you project, run "cmake ." 
+- Run "gmake"
+- You should obtain "TARGET_NAME.exe".
\ No newline at end of file
index e8a2e48..365eb28 100644 (file)
@@ -438,7 +438,7 @@ category = {extern}
   year =      {2006},
   address = {Dallas, TX},
   month = Nov,
-  pdf = {http://www.loria.fr/~quinson/articles/gras-iasted06.pdf},
+  pdf = {http://www.loria.fr/~quinson/Research/Publications/2006-PDCS.pdf},
   note = {Best paper},
   category = {core}
 }
index a428e8d..bc01cbf 100644 (file)
@@ -128,7 +128,8 @@ int client(int argc, char *argv[])
   TRY {
     gras_msg_rpccall(toserver, 60, "convert a2i", &string_to_convert,
                      &long_result);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     XBT_INFO
         ("The server refuses to convert %s. Here is the received exception:",
          string_to_convert);
index 9e89785..f53224e 100644 (file)
@@ -310,8 +310,8 @@ reach the machine on which B is running from the machine running on A. The time
 (2) is mainly given by the network bandwidth. This is the time for all bytes of
 the messages to travel from one machine to the other. Please note that the
 models used by SimGrid are a bit more complicated to keep realistic, as
-explained in <a href="http://www.loria.fr/~quinson/articles/simgrid-tutorial.pdf">the 
-tutorial slides</a>, but this not that important here. The time (3) is mainly
+explained in <a href="http://www.loria.fr/~quinson/blog/2010/06/28/Tutorial_at_HPCS/">the
+slides of the HPCS'10</a>, but this not that important here. The time (3) is mainly
 found in the SG version and not in RL (and that's a bug). This is the time to
 make sure that message were received on machine B. In real life, some buffering
 at system and network level may give the illusion to machine A that the message
index 6a9c15c..057e9bf 100644 (file)
@@ -54,7 +54,8 @@ its own arguments. So, you may have something like the following:
 Then, you simply add a #TRY/#CATCH block around your code:
 \verbatim TRY{ 
   /* your code */ 
-} CATCH(e) { 
+}
+CATCH(e) {
   /* error handling code */
 } \endverbatim
 
index 130e6d1..951effb 100644 (file)
@@ -31,7 +31,7 @@ Generic Framework for Large-Scale Distributed Experimentations</i>.
     new user interfaces were added to broaden the targeted research
     community. After surveying existing tools and methodologies we
     describe the key features and benefits of SimGrid.\n
-    http://www.loria.fr/~quinson/articles/SimGrid-uksim08.pdf
+    http://www.loria.fr/~quinson/Research/Publications/2008-uksim.pdf
 
 \verbatim
 @InProceedings{simgrid,
diff --git a/doc/webcruft/SimGrid.ico b/doc/webcruft/SimGrid.ico
new file mode 100644 (file)
index 0000000..619a707
Binary files /dev/null and b/doc/webcruft/SimGrid.ico differ
diff --git a/doc/webcruft/simgrid_logo_win.bmp b/doc/webcruft/simgrid_logo_win.bmp
new file mode 100644 (file)
index 0000000..bb32bad
Binary files /dev/null and b/doc/webcruft/simgrid_logo_win.bmp differ
index 533b03a..d2e2325 100644 (file)
@@ -39,7 +39,8 @@ int sensor(int argc, char *argv[])
     TRY {
       master = gras_socket_client_from_string(argv[1]);
       connected = 1;
-    } CATCH(e) {
+    }
+    CATCH(e) {
       xbt_ex_free(e);
     }
     if (!connected) {
index 5ad45e3..e2d00f5 100644 (file)
@@ -67,8 +67,6 @@ static void env_hosttohost_bw(int argc, char *argv[])
 /********************************************************************************************/
 static void env_Pairwisehost_bw(int argc, char *argv[])
 {
-  xbt_ex_t e;
-
   /* where are the sensors */
   xbt_dynar_t hosts = xbt_dynar_new(sizeof(xbt_host_t), &free_host);
   int nb_hosts;
@@ -107,7 +105,7 @@ static void env_Pairwisehost_bw(int argc, char *argv[])
       amok_bw_saturate_start(h1->name, h1->port, host_test, h1->port,   //"Ginette"
                              msg_size, 120);    // sturation of the link with msg_size to compute a concurent bandwidth MA //MB
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       RETHROWF("Cannot ask hosts to saturate the link: %s");
     }
     // gras_os_sleep(1.0);
index 8c033b1..b89dccc 100644 (file)
@@ -171,7 +171,6 @@ static void simple_saturation(int argc, char *argv[])
 /********************************************************************************************/
 static void full_fledged_saturation(int argc, char *argv[])
 {
-  xbt_ex_t e;
   double time1 = 5.0, bw1 = 5.0;        // 0.5 for test
   /* timers */
   double begin_simulated;
@@ -220,7 +219,7 @@ static void full_fledged_saturation(int argc, char *argv[])
         amok_bw_saturate_start(h1->name, h1->port, h2->name, h2->port, 0,       /* Be nice, compute msg_size yourself */
                                0 /* no timeout */ );
       }
-      CATCH(e) {
+      CATCH_ANONYMOUS {
         RETHROWF("Cannot ask peers to saturate the link: %s");
       }
       gras_os_sleep(5);
index 01aa0c7..5b476ed 100644 (file)
@@ -1,3 +1,5 @@
+#! ./tesh
+
 ! output sort
 $ $SG_TEST_EXENV ./all2all_simulator$EXEEXT ${srcdir:=.}/../../msg/small_platform.xml ${srcdir:=.}/all2all.xml "--log=root.fmt:[%10.6r]%e(%.2i:%P@%h)%e%m%n"
 > [  0.000000] (01:sender@Tremblay) Launch current node
@@ -32,31 +34,31 @@ $ $SG_TEST_EXENV ./all2all_simulator$EXEEXT ${srcdir:=.}/../../msg/small_platfor
 > [  0.072245] (04:receiver@Jupiter) Got Data from Fafard:5000 (still 2 to go)
 > [  0.072245] (05:sender@Fafard)   Sent Data from Fafard to Jupiter
 > [  0.072245] (06:receiver@Fafard) Got Data from Jupiter:5000 (still 2 to go)
+> [  0.085572] (05:sender@Fafard)   Sent Data from Fafard to Ginette
+> [  0.085572] (08:receiver@Ginette) Got Data from Fafard:5000 (still 2 to go)
+> [  0.091209] (05:sender@Fafard)   Sent Data from Fafard to Bourassa
+> [  0.091209] (05:sender@Fafard) Exiting GRAS
+> [  0.091209] (10:receiver@Bourassa) Got Data from Fafard:5000 (still 2 to go)
 > [  0.100817] (04:receiver@Jupiter) Got Data from Ginette:5000 (still 1 to go)
 > [  0.100817] (07:sender@Ginette)   Sent Data from Ginette to Jupiter
-> [  0.100973] (03:sender@Jupiter)   Sent Data from Jupiter to Ginette
-> [  0.100973] (08:receiver@Ginette) Got Data from Jupiter:5000 (still 2 to go)
-> [  0.114212] (05:sender@Fafard)   Sent Data from Fafard to Ginette
-> [  0.114212] (06:receiver@Fafard) Got Data from Ginette:5000 (still 1 to go)
-> [  0.114212] (07:sender@Ginette)   Sent Data from Ginette to Fafard
-> [  0.114212] (08:receiver@Ginette) Got Data from Fafard:5000 (still 1 to go)
+> [  0.114144] (03:sender@Jupiter)   Sent Data from Jupiter to Ginette
+> [  0.114144] (06:receiver@Fafard) Got Data from Ginette:5000 (still 1 to go)
+> [  0.114144] (07:sender@Ginette)   Sent Data from Ginette to Fafard
+> [  0.114144] (08:receiver@Ginette) Got Data from Jupiter:5000 (still 1 to go)
 > [  0.136528] (04:receiver@Jupiter) Got Data from Bourassa:5000 (still 0 to go)
 > [  0.136528] (04:receiver@Jupiter) Exiting GRAS
 > [  0.136528] (09:sender@Bourassa)   Sent Data from Bourassa to Jupiter
-> [  0.136840] (03:sender@Jupiter)   Sent Data from Jupiter to Bourassa
-> [  0.136840] (03:sender@Jupiter) Exiting GRAS
-> [  0.136840] (10:receiver@Bourassa) Got Data from Jupiter:5000 (still 2 to go)
 > [  0.142165] (06:receiver@Fafard) Got Data from Bourassa:5000 (still 0 to go)
 > [  0.142165] (06:receiver@Fafard) Exiting GRAS
 > [  0.142165] (09:sender@Bourassa)   Sent Data from Bourassa to Fafard
-> [  0.142321] (05:sender@Fafard)   Sent Data from Fafard to Bourassa
-> [  0.142321] (05:sender@Fafard) Exiting GRAS
-> [  0.142321] (10:receiver@Bourassa) Got Data from Fafard:5000 (still 1 to go)
-> [  0.155305] (07:sender@Ginette)   Sent Data from Ginette to Bourassa
-> [  0.155305] (07:sender@Ginette) Exiting GRAS
-> [  0.155305] (08:receiver@Ginette) Got Data from Bourassa:5000 (still 0 to go)
-> [  0.155305] (08:receiver@Ginette) Exiting GRAS
-> [  0.155305] (09:sender@Bourassa)   Sent Data from Bourassa to Ginette
-> [  0.155305] (09:sender@Bourassa) Exiting GRAS
-> [  0.155305] (10:receiver@Bourassa) Got Data from Ginette:5000 (still 0 to go)
-> [  0.155305] (10:receiver@Bourassa) Exiting GRAS
+> [  0.150011] (03:sender@Jupiter)   Sent Data from Jupiter to Bourassa
+> [  0.150011] (03:sender@Jupiter) Exiting GRAS
+> [  0.150011] (10:receiver@Bourassa) Got Data from Jupiter:5000 (still 1 to go)
+> [  0.155272] (08:receiver@Ginette) Got Data from Bourassa:5000 (still 0 to go)
+> [  0.155272] (08:receiver@Ginette) Exiting GRAS
+> [  0.155272] (09:sender@Bourassa)   Sent Data from Bourassa to Ginette
+> [  0.155272] (09:sender@Bourassa) Exiting GRAS
+> [  0.162962] (07:sender@Ginette)   Sent Data from Ginette to Bourassa
+> [  0.162962] (07:sender@Ginette) Exiting GRAS
+> [  0.162962] (10:receiver@Bourassa) Got Data from Ginette:5000 (still 0 to go)
+> [  0.162962] (10:receiver@Bourassa) Exiting GRAS
index f2dcee7..5b476ed 100644 (file)
@@ -1,64 +1,64 @@
 #! ./tesh
 
 ! output sort
-$ $SG_TEST_EXENV ./all2all_simulator$EXEEXT ${srcdir:=.}/../../msg/small_platform.xml ${srcdir:=.}/all2all.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (1:sender@Tremblay) Launch current node
-> [  0.000000] (3:sender@Jupiter) Launch current node
-> [  0.000000] (5:sender@Fafard) Launch current node
-> [  0.000000] (7:sender@Ginette) Launch current node
-> [  0.000000] (9:sender@Bourassa) Launch current node
+$ $SG_TEST_EXENV ./all2all_simulator$EXEEXT ${srcdir:=.}/../../msg/small_platform.xml ${srcdir:=.}/all2all.xml "--log=root.fmt:[%10.6r]%e(%.2i:%P@%h)%e%m%n"
+> [  0.000000] (01:sender@Tremblay) Launch current node
+> [  0.000000] (03:sender@Jupiter) Launch current node
+> [  0.000000] (05:sender@Fafard) Launch current node
+> [  0.000000] (07:sender@Ginette) Launch current node
+> [  0.000000] (09:sender@Bourassa) Launch current node
+> [  0.000156] (02:receiver@Tremblay) Listening on port 4000 (expecting 4 messages)
+> [  0.000156] (04:receiver@Jupiter) Listening on port 4000 (expecting 4 messages)
+> [  0.000156] (06:receiver@Fafard) Listening on port 4000 (expecting 4 messages)
+> [  0.000156] (08:receiver@Ginette) Listening on port 4000 (expecting 4 messages)
 > [  0.000156] (10:receiver@Bourassa) Listening on port 4000 (expecting 4 messages)
-> [  0.000156] (2:receiver@Tremblay) Listening on port 4000 (expecting 4 messages)
-> [  0.000156] (4:receiver@Jupiter) Listening on port 4000 (expecting 4 messages)
-> [  0.000156] (6:receiver@Fafard) Listening on port 4000 (expecting 4 messages)
-> [  0.000156] (8:receiver@Ginette) Listening on port 4000 (expecting 4 messages)
-> [  0.015510] (1:sender@Tremblay)   Sent Data from Tremblay to Jupiter
-> [  0.015510] (2:receiver@Tremblay) Got Data from Jupiter:5000 (still 3 to go)
-> [  0.015510] (3:sender@Jupiter)   Sent Data from Jupiter to Tremblay
-> [  0.015510] (4:receiver@Jupiter) Got Data from Tremblay:5000 (still 3 to go)
-> [  0.036162] (2:receiver@Tremblay) Got Data from Fafard:5000 (still 2 to go)
-> [  0.036162] (5:sender@Fafard)   Sent Data from Fafard to Tremblay
-> [  0.036318] (1:sender@Tremblay)   Sent Data from Tremblay to Fafard
-> [  0.036318] (6:receiver@Fafard) Got Data from Tremblay:5000 (still 3 to go)
-> [  0.049459] (2:receiver@Tremblay) Got Data from Ginette:5000 (still 1 to go)
-> [  0.049459] (7:sender@Ginette)   Sent Data from Ginette to Tremblay
-> [  0.049771] (1:sender@Tremblay)   Sent Data from Tremblay to Ginette
-> [  0.049771] (8:receiver@Ginette) Got Data from Tremblay:5000 (still 3 to go)
-> [  0.069896] (2:receiver@Tremblay) Got Data from Bourassa:5000 (still 0 to go)
-> [  0.069896] (2:receiver@Tremblay) Exiting GRAS
-> [  0.069896] (9:sender@Bourassa)   Sent Data from Bourassa to Tremblay
+> [  0.015510] (01:sender@Tremblay)   Sent Data from Tremblay to Jupiter
+> [  0.015510] (02:receiver@Tremblay) Got Data from Jupiter:5000 (still 3 to go)
+> [  0.015510] (03:sender@Jupiter)   Sent Data from Jupiter to Tremblay
+> [  0.015510] (04:receiver@Jupiter) Got Data from Tremblay:5000 (still 3 to go)
+> [  0.036162] (02:receiver@Tremblay) Got Data from Fafard:5000 (still 2 to go)
+> [  0.036162] (05:sender@Fafard)   Sent Data from Fafard to Tremblay
+> [  0.036318] (01:sender@Tremblay)   Sent Data from Tremblay to Fafard
+> [  0.036318] (06:receiver@Fafard) Got Data from Tremblay:5000 (still 3 to go)
+> [  0.049459] (02:receiver@Tremblay) Got Data from Ginette:5000 (still 1 to go)
+> [  0.049459] (07:sender@Ginette)   Sent Data from Ginette to Tremblay
+> [  0.049771] (01:sender@Tremblay)   Sent Data from Tremblay to Ginette
+> [  0.049771] (08:receiver@Ginette) Got Data from Tremblay:5000 (still 3 to go)
+> [  0.069896] (02:receiver@Tremblay) Got Data from Bourassa:5000 (still 0 to go)
+> [  0.069896] (02:receiver@Tremblay) Exiting GRAS
+> [  0.069896] (09:sender@Bourassa)   Sent Data from Bourassa to Tremblay
+> [  0.070364] (01:sender@Tremblay)   Sent Data from Tremblay to Bourassa
+> [  0.070364] (01:sender@Tremblay) Exiting GRAS
 > [  0.070364] (10:receiver@Bourassa) Got Data from Tremblay:5000 (still 3 to go)
-> [  0.070364] (1:sender@Tremblay)   Sent Data from Tremblay to Bourassa
-> [  0.070364] (1:sender@Tremblay) Exiting GRAS
-> [  0.072245] (3:sender@Jupiter)   Sent Data from Jupiter to Fafard
-> [  0.072245] (4:receiver@Jupiter) Got Data from Fafard:5000 (still 2 to go)
-> [  0.072245] (5:sender@Fafard)   Sent Data from Fafard to Jupiter
-> [  0.072245] (6:receiver@Fafard) Got Data from Jupiter:5000 (still 2 to go)
-> [  0.100817] (4:receiver@Jupiter) Got Data from Ginette:5000 (still 1 to go)
-> [  0.100817] (7:sender@Ginette)   Sent Data from Ginette to Jupiter
-> [  0.100973] (3:sender@Jupiter)   Sent Data from Jupiter to Ginette
-> [  0.100973] (8:receiver@Ginette) Got Data from Jupiter:5000 (still 2 to go)
-> [  0.114212] (5:sender@Fafard)   Sent Data from Fafard to Ginette
-> [  0.114212] (6:receiver@Fafard) Got Data from Ginette:5000 (still 1 to go)
-> [  0.114212] (7:sender@Ginette)   Sent Data from Ginette to Fafard
-> [  0.114212] (8:receiver@Ginette) Got Data from Fafard:5000 (still 1 to go)
-> [  0.136528] (4:receiver@Jupiter) Got Data from Bourassa:5000 (still 0 to go)
-> [  0.136528] (4:receiver@Jupiter) Exiting GRAS
-> [  0.136528] (9:sender@Bourassa)   Sent Data from Bourassa to Jupiter
-> [  0.136840] (10:receiver@Bourassa) Got Data from Jupiter:5000 (still 2 to go)
-> [  0.136840] (3:sender@Jupiter)   Sent Data from Jupiter to Bourassa
-> [  0.136840] (3:sender@Jupiter) Exiting GRAS
-> [  0.142165] (6:receiver@Fafard) Got Data from Bourassa:5000 (still 0 to go)
-> [  0.142165] (6:receiver@Fafard) Exiting GRAS
-> [  0.142165] (9:sender@Bourassa)   Sent Data from Bourassa to Fafard
-> [  0.142321] (10:receiver@Bourassa) Got Data from Fafard:5000 (still 1 to go)
-> [  0.142321] (5:sender@Fafard)   Sent Data from Fafard to Bourassa
-> [  0.142321] (5:sender@Fafard) Exiting GRAS
-> [  0.155305] (10:receiver@Bourassa) Got Data from Ginette:5000 (still 0 to go)
-> [  0.155305] (10:receiver@Bourassa) Exiting GRAS
-> [  0.155305] (7:sender@Ginette)   Sent Data from Ginette to Bourassa
-> [  0.155305] (7:sender@Ginette) Exiting GRAS
-> [  0.155305] (8:receiver@Ginette) Got Data from Bourassa:5000 (still 0 to go)
-> [  0.155305] (8:receiver@Ginette) Exiting GRAS
-> [  0.155305] (9:sender@Bourassa)   Sent Data from Bourassa to Ginette
-> [  0.155305] (9:sender@Bourassa) Exiting GRAS
+> [  0.072245] (03:sender@Jupiter)   Sent Data from Jupiter to Fafard
+> [  0.072245] (04:receiver@Jupiter) Got Data from Fafard:5000 (still 2 to go)
+> [  0.072245] (05:sender@Fafard)   Sent Data from Fafard to Jupiter
+> [  0.072245] (06:receiver@Fafard) Got Data from Jupiter:5000 (still 2 to go)
+> [  0.085572] (05:sender@Fafard)   Sent Data from Fafard to Ginette
+> [  0.085572] (08:receiver@Ginette) Got Data from Fafard:5000 (still 2 to go)
+> [  0.091209] (05:sender@Fafard)   Sent Data from Fafard to Bourassa
+> [  0.091209] (05:sender@Fafard) Exiting GRAS
+> [  0.091209] (10:receiver@Bourassa) Got Data from Fafard:5000 (still 2 to go)
+> [  0.100817] (04:receiver@Jupiter) Got Data from Ginette:5000 (still 1 to go)
+> [  0.100817] (07:sender@Ginette)   Sent Data from Ginette to Jupiter
+> [  0.114144] (03:sender@Jupiter)   Sent Data from Jupiter to Ginette
+> [  0.114144] (06:receiver@Fafard) Got Data from Ginette:5000 (still 1 to go)
+> [  0.114144] (07:sender@Ginette)   Sent Data from Ginette to Fafard
+> [  0.114144] (08:receiver@Ginette) Got Data from Jupiter:5000 (still 1 to go)
+> [  0.136528] (04:receiver@Jupiter) Got Data from Bourassa:5000 (still 0 to go)
+> [  0.136528] (04:receiver@Jupiter) Exiting GRAS
+> [  0.136528] (09:sender@Bourassa)   Sent Data from Bourassa to Jupiter
+> [  0.142165] (06:receiver@Fafard) Got Data from Bourassa:5000 (still 0 to go)
+> [  0.142165] (06:receiver@Fafard) Exiting GRAS
+> [  0.142165] (09:sender@Bourassa)   Sent Data from Bourassa to Fafard
+> [  0.150011] (03:sender@Jupiter)   Sent Data from Jupiter to Bourassa
+> [  0.150011] (03:sender@Jupiter) Exiting GRAS
+> [  0.150011] (10:receiver@Bourassa) Got Data from Jupiter:5000 (still 1 to go)
+> [  0.155272] (08:receiver@Ginette) Got Data from Bourassa:5000 (still 0 to go)
+> [  0.155272] (08:receiver@Ginette) Exiting GRAS
+> [  0.155272] (09:sender@Bourassa)   Sent Data from Bourassa to Ginette
+> [  0.155272] (09:sender@Bourassa) Exiting GRAS
+> [  0.162962] (07:sender@Ginette)   Sent Data from Ginette to Bourassa
+> [  0.162962] (07:sender@Ginette) Exiting GRAS
+> [  0.162962] (10:receiver@Bourassa) Got Data from Ginette:5000 (still 0 to go)
+> [  0.162962] (10:receiver@Bourassa) Exiting GRAS
index 8489cc3..043fc26 100644 (file)
@@ -62,7 +62,7 @@ int client(int argc, char *argv[])
   TRY {
     gras_msg_send(toserver, "ping", &ping);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     gras_socket_close(toserver);
     RETHROWF("Failed to send PING to server: %s");
   }
@@ -74,7 +74,7 @@ int client(int argc, char *argv[])
   TRY {
     gras_msg_wait(6000, "pong", &from, &pong);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     gras_socket_close(toserver);
     RETHROWF("Why can't I get my PONG message like everyone else: %s");
   }
index 8b52d85..4e2af0a 100644 (file)
@@ -19,8 +19,6 @@ typedef struct {
 
 static int server_cb_ping_handler(gras_msg_cb_ctx_t ctx, void *payload)
 {
-
-  xbt_ex_t e;
   /* 1. Get the payload into the msg variable, and retrieve my caller */
   int msg = *(int *) payload;
   gras_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
@@ -43,7 +41,8 @@ static int server_cb_ping_handler(gras_msg_cb_ctx_t ctx, void *payload)
     gras_msg_send(expeditor, "pong", &msg);
 
     /* 6. Deal with errors: add some details to the exception */
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     gras_socket_close(globals->sock);
     RETHROWF("Unable answer with PONG: %s");
   }
index 8f8e882..5ab834d 100644 (file)
@@ -55,7 +55,6 @@ static int server_cb_request_handler(gras_msg_cb_ctx_t ctx,
 
 int server(int argc, char *argv[])
 {
-  xbt_ex_t e;
   gras_socket_t sock = NULL;
   int port = 4000;
 
@@ -72,7 +71,7 @@ int server(int argc, char *argv[])
   TRY {
     sock = gras_socket_server(port);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     RETHROWF("Unable to establish a server socket: %s");
   }
 
@@ -96,7 +95,6 @@ int server(int argc, char *argv[])
 
 int client(int argc, char *argv[])
 {
-  xbt_ex_t e;
   gras_socket_t toserver = NULL;        /* peer */
 
   gras_socket_t from;
@@ -125,7 +123,7 @@ int client(int argc, char *argv[])
   TRY {
     toserver = gras_socket_client(host, port);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     RETHROWF("Unable to connect to the server: %s");
   }
   XBT_INFO("Connected to %s:%d.", host, port);
index a675d3e..7784d04 100644 (file)
@@ -40,7 +40,6 @@ static int server_cb_request_handler(gras_msg_cb_ctx_t ctx,
 
 int server(int argc, char *argv[])
 {
-  xbt_ex_t e;
   gras_socket_t sock = NULL;
   int port = 4002;
 
@@ -57,7 +56,7 @@ int server(int argc, char *argv[])
   TRY {
     sock = gras_socket_server(port);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     RETHROWF("Unable to establish a server socket: %s");
   }
 
index 65a7d2d..f05e731 100644 (file)
@@ -36,9 +36,6 @@ typedef struct {
 /* Callback function */
 static int node_cb_stoken_handler(gras_msg_cb_ctx_t ctx, void *payload)
 {
-
-  xbt_ex_t e;
-
   /* 1. Get the payload into the msg variable, and retrieve my caller */
   int msg = *(int *) payload;
   gras_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
@@ -77,7 +74,7 @@ static int node_cb_stoken_handler(gras_msg_cb_ctx_t ctx, void *payload)
 
       /* 6. Deal with errors */
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       gras_socket_close(globals->sock);
       RETHROWF("Unable to forward token: %s");
     }
@@ -110,8 +107,6 @@ int node(int argc, char *argv[])
   int myport;
   int peerport;
 
-  xbt_ex_t e;
-
   /* 1. Init the GRAS infrastructure and declare my globals */
   gras_init(&argc, argv);
   globals = gras_userdata_new(node_data_t);
@@ -170,7 +165,8 @@ int node(int argc, char *argv[])
 
     TRY {
       gras_msg_send(globals->tosuccessor, "stoken", &token);
-    } CATCH(e) {
+    }
+    CATCH_ANONYMOUS {
       RETHROWF("Unable to send the freshly created token: %s");
     }
   }
index cde05ab..5c4cb0d 100644 (file)
@@ -53,16 +53,17 @@ static void register_messages()
 static void forward_get_suc(get_suc_t msg, char host[1024], int port)
 {
   gras_socket_t temp_sock = NULL;
-  xbt_ex_t e;                   // the error variable used in TRY.. CATCH tokens.
   //XBT_INFO("Transmiting message to %s:%d",host,port);
   TRY {
     temp_sock = gras_socket_client(host, port);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROWF("Unable to connect!: %s");
   }
   TRY {
     gras_msg_send(temp_sock, "can_get_suc", &msg);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROWF("Unable to send!: %s");
   }
   XBT_INFO("Forwarding a get_successor message to %s for (%d;%d)", host,
@@ -179,7 +180,7 @@ static int node_get_suc_handler(gras_msg_cb_ctx_t ctx, void *payload_data)
       TRY {
         temp_sock = gras_socket_client(incoming->host, incoming->port);
       }
-      CATCH(e) {
+      CATCH_ANONYMOUS {
         RETHROWF
             ("Unable to connect to the node wich has requested for an area!: %s");
       }
@@ -187,7 +188,7 @@ static int node_get_suc_handler(gras_msg_cb_ctx_t ctx, void *payload_data)
         gras_msg_send(temp_sock, "can_rep_suc", &outgoing);
         XBT_INFO("Environment informations sent!");
       }
-      CATCH(e) {
+      CATCH_ANONYMOUS {
         RETHROWF("%s:Timeout sending environment informations to %s: %s",
                  globals->host, gras_socket_peer_name(expeditor));
       }
@@ -204,6 +205,7 @@ static int node_get_suc_handler(gras_msg_cb_ctx_t ctx, void *payload_data)
     XBT_INFO("My area is [%d;%d;%d;%d]", globals->x1, globals->x2,
           globals->y1, globals->y2);
     //XBT_INFO("Closing node, all has been done!");
+    xbt_ex_free(e);
   }
   return 0;
 }
@@ -251,7 +253,7 @@ int node(int argc, char **argv)
     TRY {
       temp_sock = gras_socket_client(argv[4], atoi(argv[5]));
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       RETHROWF("Unable to connect known host to request for an area!: %s");
     }
 
@@ -263,7 +265,7 @@ int node(int argc, char **argv)
     TRY {                       // asking.
       gras_msg_send(temp_sock, "can_get_suc", &get_suc_msg);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       gras_socket_close(temp_sock);
       RETHROWF("Unable to contact known host to get an area!: %s");
     }
@@ -275,7 +277,7 @@ int node(int argc, char **argv)
       XBT_INFO("Waiting for reply!");
       gras_msg_wait(6000, "can_rep_suc", &temp_sock2, &rep_suc_msg);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       RETHROWF("%s: Error waiting for an area:%s", globals->host);
     }
 
@@ -309,6 +311,7 @@ int node(int argc, char **argv)
     XBT_INFO("My area is [%d;%d;%d;%d]", globals->x1, globals->x2,
           globals->y1, globals->y2);
     //XBT_INFO("Closing node, all has been done!");
+    xbt_ex_free(e);
   }
 
   gras_socket_close(globals->sock);     // spare.
index 947be6e..44a7227 100644 (file)
@@ -27,7 +27,6 @@ int start_war(int argc, char **argv)
 {
   gras_socket_t temp_sock = NULL;
   nuke_t nuke_msg;
-  xbt_ex_t e;                   // the error variable used in TRY.. CATCH tokens.
   //return 0; // in order to inhibit the War of the Nodes 
   gras_init(&argc, argv);
   gras_os_sleep((15 - gras_os_getpid()) * 20 + 200);    // wait a bit.
@@ -35,7 +34,8 @@ int start_war(int argc, char **argv)
 
   TRY {                         // contacting the bad guy that will launch the War.
     temp_sock = gras_socket_client(gras_os_myname(), atoi(argv[1]));
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROWF("Unable to connect known host so as to declare WAR!: %s");
   }
 
@@ -48,7 +48,8 @@ int start_war(int argc, char **argv)
 
   TRY {
     gras_msg_send(temp_sock, "can_nuke", &nuke_msg);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     gras_socket_close(temp_sock);
     RETHROWF
         ("Unable to contact known host so as to declare WAR!!!!!!!!!!!!!!!!!!!!!: %s");
@@ -63,7 +64,6 @@ static int send_nuke(nuke_t * msg, int xId, int yId)
 {
   node_data_t *globals = (node_data_t *) gras_userdata_get();
   gras_socket_t temp_sock = NULL;
-  xbt_ex_t e;                   // the error variable used in TRY.. CATCH tokens.
 
   if (xId >= globals->x1 && xId <= globals->x2 && yId >= globals->y1
       && yId <= globals->y2) {
@@ -95,14 +95,14 @@ static int send_nuke(nuke_t * msg, int xId, int yId)
     TRY {                       // sending the nuke.
       temp_sock = gras_socket_client(host, port);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       RETHROWF("Unable to connect the nuke!: %s");
     }
     //XBT_INFO("%s ON %s %d %d <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<",globals->host,host,xId,yId);
     TRY {
       gras_msg_send(temp_sock, "can_nuke", msg);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       RETHROWF("Unable to send the nuke!: %s");
     }
     gras_socket_close(temp_sock);
@@ -190,13 +190,13 @@ static int node_nuke_handler(gras_msg_cb_ctx_t ctx, void *payload_data)
     TRY {
       temp_sock = gras_socket_client(host, port);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       RETHROWF("Unable to connect the nuke!: %s");
     }
     TRY {
       gras_msg_send(temp_sock, "can_nuke", incoming);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       RETHROWF("Unable to send the nuke!: %s");
     }
     XBT_INFO("Nuke re-aimed by %s to %s for (%d;%d)", globals->host, host,
@@ -212,6 +212,7 @@ static int node_nuke_handler(gras_msg_cb_ctx_t ctx, void *payload_data)
     XBT_INFO("My area is [%d;%d;%d;%d]", globals->x1, globals->x2,
           globals->y1, globals->y2);
     //XBT_INFO("Closing node, all has been done!");
+    xbt_ex_free(e);
   }
   return 0;
 }
index cf3d2c0..7060096 100644 (file)
@@ -113,7 +113,6 @@ static int node_cb_get_suc_handler(gras_msg_cb_ctx_t ctx,
                                    void *payload_data)
 {
   gras_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
-  xbt_ex_t e;
   get_suc_t incoming = *(get_suc_t *) payload_data;
   rep_suc_t outgoing;
   node_data_t *globals = (node_data_t *) gras_userdata_get();
@@ -141,13 +140,13 @@ static int node_cb_get_suc_handler(gras_msg_cb_ctx_t ctx,
         temp_sock = gras_socket_client(globals->finger[contact].host,
                                        globals->finger[contact].port);
       }
-      CATCH(e) {
+      CATCH_ANONYMOUS {
         RETHROWF("Unable to connect!: %s");
       }
       TRY {
         gras_msg_send(temp_sock, "chord_get_suc", &asking);
       }
-      CATCH(e) {
+      CATCH_ANONYMOUS {
         RETHROWF("Unable to ask!: %s");
       }
       gras_msg_wait(10., "chord_rep_suc", &temp_sock, &outgoing);
@@ -158,7 +157,7 @@ static int node_cb_get_suc_handler(gras_msg_cb_ctx_t ctx,
     gras_msg_send(expeditor, "chord_rep_suc", &outgoing);
     XBT_INFO("Successor information sent!");
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     RETHROWF("%s:Timeout sending successor information to %s: %s",
              globals->host, gras_socket_peer_name(expeditor));
   }
@@ -201,7 +200,6 @@ static int node_cb_notify_handler(gras_msg_cb_ctx_t ctx,
 static void fix_fingers()
 {
   get_suc_t get_suc_msg;
-  xbt_ex_t e;
   gras_socket_t temp_sock = NULL;
   gras_socket_t temp_sock2 = NULL;
   rep_suc_t rep_suc_msg;
@@ -209,14 +207,16 @@ static void fix_fingers()
 
   TRY {
     temp_sock = gras_socket_client(globals->host, globals->port);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROWF("Unable to contact known host: %s");
   }
 
   get_suc_msg.id = globals->id;
   TRY {
     gras_msg_send(temp_sock, "chord_get_suc", &get_suc_msg);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     gras_socket_close(temp_sock);
     RETHROWF("Unable to contact known host to get successor!: %s");
   }
@@ -224,7 +224,8 @@ static void fix_fingers()
   TRY {
     XBT_INFO("Waiting for reply!");
     gras_msg_wait(6000, "chord_rep_suc", &temp_sock2, &rep_suc_msg);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROWF("%s: Error waiting for successor:%s", globals->host);
   }
   globals->finger[0].id = rep_suc_msg.id;
@@ -254,6 +255,7 @@ static void check_predecessor()
     globals->pre_id = -1;
     globals->pre_host[0] = 0;
     globals->pre_port = 0;
+    xbt_ex_free(e);
   }
 
   ping.id = 0;
@@ -264,6 +266,7 @@ static void check_predecessor()
     globals->pre_id = -1;
     globals->pre_host[0] = 0;
     globals->pre_port = 0;
+    xbt_ex_free(e);
   }
   TRY {
     gras_msg_wait(60, "chord_pong", &temp_sock, &pong);
@@ -272,6 +275,7 @@ static void check_predecessor()
     globals->pre_id = -1;
     globals->pre_host[0] = 0;
     globals->pre_port = 0;
+    xbt_ex_free(e);
   }
   gras_socket_close(temp_sock);
 }
@@ -334,7 +338,7 @@ int node(int argc, char **argv)
     TRY {
       temp_sock = gras_socket_client(other_host, other_port);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       RETHROWF("Unable to contact known host: %s");
     }
 
@@ -342,7 +346,7 @@ int node(int argc, char **argv)
     TRY {
       gras_msg_send(temp_sock, "chord_get_suc", &get_suc_msg);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       gras_socket_close(temp_sock);
       RETHROWF("Unable to contact known host to get successor!: %s");
     }
@@ -351,7 +355,7 @@ int node(int argc, char **argv)
       XBT_INFO("Waiting for reply!");
       gras_msg_wait(10., "chord_rep_suc", &temp_sock2, &rep_suc_msg);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       RETHROWF("%s: Error waiting for successor:%s", globals->host);
     }
     globals->finger[0].id = rep_suc_msg.id;
@@ -364,7 +368,7 @@ int node(int argc, char **argv)
       temp_sock = gras_socket_client(globals->finger[0].host,
                                      globals->finger[0].port);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       RETHROWF("Unable to contact successor: %s");
     }
 
@@ -374,7 +378,7 @@ int node(int argc, char **argv)
     TRY {
       gras_msg_send(temp_sock, "chord_notify", &notify_msg);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       RETHROWF("Unable to notify successor! %s");
     }
   }
@@ -390,6 +394,7 @@ int node(int argc, char **argv)
       gras_msg_handle(6000000.0);
     }
     CATCH(e) {
+      xbt_ex_free(e);
     }
   }
   /*} */
index 1b74e70..e362b44 100644 (file)
@@ -62,7 +62,7 @@ int client(int argc, char *argv[])
   TRY {
     gras_msg_send(toserver, "ping", &ping);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     gras_socket_close(toserver);
     RETHROWF("Failed to send PING to server: %s");
   }
@@ -73,7 +73,7 @@ int client(int argc, char *argv[])
   TRY {
     gras_msg_wait(6000, "pong", &from, &pong);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     gras_socket_close(toserver);
     RETHROWF("Why can't I get my PONG message like everyone else: %s");
   }
index 885b4e5..4167d41 100644 (file)
@@ -19,8 +19,6 @@ typedef struct {
 
 static int server_cb_ping_handler(gras_msg_cb_ctx_t ctx, void *payload)
 {
-
-  xbt_ex_t e;
   /* 1. Get the payload into the msg variable, and retrieve my caller */
   int msg = *(int *) payload;
   gras_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
@@ -43,7 +41,8 @@ static int server_cb_ping_handler(gras_msg_cb_ctx_t ctx, void *payload)
     gras_msg_send(expeditor, "pong", &msg);
 
     /* 6. Deal with errors: add some details to the exception */
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     gras_socket_close(globals->sock);
     RETHROWF("Unable answer with PONG: %s");
   }
index dbc87c6..27b03d1 100644 (file)
@@ -240,8 +240,6 @@ static int pmm_worker_cb(gras_msg_cb_ctx_t ctx, void *payload)
   s_pmm_assignment_t assignment = *(s_pmm_assignment_t *) payload;
   gras_socket_t master = gras_msg_cb_ctx_from(ctx);
 
-  xbt_ex_t e;
-
   int step, l;
   xbt_matrix_t bA = xbt_matrix_new(submatrix_size, submatrix_size,
                                    sizeof(double), NULL);
@@ -311,7 +309,7 @@ static int pmm_worker_cb(gras_msg_cb_ctx_t ctx, void *payload)
         xbt_matrix_free(bB);
         gras_msg_wait(600, "dataB", &from, &bB);
       }
-      CATCH(e) {
+      CATCH_ANONYMOUS {
         RETHROWF("Can't get a data message from line : %s");
       }
       XBT_VERB("LINE: step(%d) <> Myline(%d). Receive data from %s", step,
@@ -334,7 +332,7 @@ static int pmm_worker_cb(gras_msg_cb_ctx_t ctx, void *payload)
         xbt_matrix_free(bA);
         gras_msg_wait(1200, "dataA", &from, &bA);
       }
-      CATCH(e) {
+      CATCH_ANONYMOUS {
         RETHROWF("Can't get a data message from row : %s");
       }
       XBT_VERB("ROW: step(%d)<>myrow(%d). Receive data from %s", step, myrow,
@@ -352,7 +350,7 @@ static int pmm_worker_cb(gras_msg_cb_ctx_t ctx, void *payload)
   TRY {
     gras_msg_send(master, "result", &result);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     RETHROWF("Failed to send answer to server: %s");
   }
   XBT_VERB(">>>>>>>> Result sent to %s:%d <<<<<<<<",
index 6a79238..dbe3c90 100644 (file)
@@ -54,8 +54,6 @@ int master(int argc, char *argv[])
   xbt_workload_sort_who_date(cmds);
   unsigned int cursor;
   xbt_workload_elm_t cmd;
-
-  xbt_ex_t e;
   xbt_dict_cursor_t dict_cursor;
 
   xbt_dict_t pals_int = xbt_dict_new();
@@ -74,7 +72,7 @@ int master(int argc, char *argv[])
     TRY {
       gras_msg_handle(20);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       xbt_dynar_foreach(peers, cursor, peer) {
         xbt_dict_remove(pals_int, peer->name);
       }
@@ -159,7 +157,6 @@ static int worker_commands_cb(gras_msg_cb_ctx_t ctx, void *payload)
 
 static void do_command(int rank, void *c)
 {
-  xbt_ex_t e;
   xbt_workload_elm_t cmd = *(xbt_workload_elm_t *) c;
   xbt_workload_data_chunk_t chunk;
 
@@ -176,7 +173,7 @@ static void do_command(int rank, void *c)
     TRY {
       gras_msg_wait(1000000, "chunk", NULL, &chunk);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       SIMIX_display_process_status();
       RETHROWF("Exception while waiting for %f bytes from %s: %s",
                cmd->d_arg, cmd->str_arg);
@@ -249,6 +246,7 @@ int worker(int argc, char *argv[])
             }
             CATCH(e) {
               SIMIX_display_process_status();
+              xbt_ex_free(e);
             }
             XBT_INFO("Communications all done");
             xbt_dynar_reset(cmd_to_go);
index 9086454..fe0c62b 100644 (file)
@@ -42,17 +42,17 @@ static void exception_catching(void)
     }
     CATCH(e) {
       gotit = 1;
+      xbt_assert(e.category == unknown_error,
+                 "Got wrong category: %d (instead of %d)", e.category,
+                 unknown_error);
+      xbt_assert(e.value == 42, "Got wrong value: %d (!=42)", e.value);
+      xbt_assert(!strncmp(e.msg, exception_msg, strlen(exception_msg)),
+                 "Got wrong message: %s", e.msg);
+      xbt_ex_free(e);
     }
     if (!gotit) {
       THROWF(unknown_error, 0, "Didn't got the remote exception!");
     }
-    xbt_assert(e.category == unknown_error,
-                "Got wrong category: %d (instead of %d)", e.category,
-                unknown_error);
-    xbt_assert(e.value == 42, "Got wrong value: %d (!=42)", e.value);
-    xbt_assert(!strncmp(e.msg, exception_msg, strlen(exception_msg)),
-                "Got wrong message: %s", e.msg);
-    xbt_ex_free(e);
   }
 }
 
@@ -97,7 +97,7 @@ int client(int argc, char *argv[])
     toserver = gras_socket_client(host, port);
     toforwarder = gras_socket_client(argv[3], atoi(argv[4]));
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     RETHROWF("Unable to connect to the server: %s");
   }
   XBT_INFO("Connected to %s:%d.", host, port);
@@ -119,7 +119,7 @@ int client(int argc, char *argv[])
     exception_catching();
     gras_msg_rpccall(toserver, 6000.0, "plain ping", &ping, &pong);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     gras_socket_close(toserver);
     RETHROWF("Failed to execute a PING rpc on the server: %s");
   }
@@ -181,19 +181,19 @@ int client(int argc, char *argv[])
     }
     CATCH(e) {
       gotit = 1;
+      xbt_assert(e.value == 42, "Got wrong value: %d (!=42)", e.value);
+      xbt_assert(!strncmp(e.msg, exception_msg, strlen(exception_msg)),
+                 "Got wrong message: %s", e.msg);
+      xbt_assert(e.category == unknown_error,
+                 "Got wrong category: %d (instead of %d)",
+                 e.category, unknown_error);
+      XBT_INFO
+        ("Got the expected exception when calling the exception raising RPC");
+      xbt_ex_free(e);
     }
     if (!gotit) {
       THROWF(unknown_error, 0, "Didn't got the remote exception!");
     }
-    xbt_assert(e.value == 42, "Got wrong value: %d (!=42)", e.value);
-    xbt_assert(!strncmp(e.msg, exception_msg, strlen(exception_msg)),
-                "Got wrong message: %s", e.msg);
-    xbt_assert(e.category == unknown_error,
-                "Got wrong category: %d (instead of %d)",
-                e.category, unknown_error);
-    XBT_INFO
-        ("Got the expected exception when calling the exception raising RPC");
-    xbt_ex_free(e);
     exception_catching();
   }
 
index 0e00594..badbded 100755 (executable)
@@ -1,3 +1,5 @@
+! timeout 10
+
 & $SG_TEST_EXENV ./rpc_server$EXEEXT 4202 --log=root.fmt:%m%n $@
 > Launch server (port=4202)
 > Listening on port 4202
index 77b70a9..77e0c65 100644 (file)
@@ -1,62 +1,68 @@
 #! ./tesh
 
+# There is no timestamp in this test, because we exchange exceptions,
+# which contain not only the filename (which could change in case of
+# VPATH builds), but also the function name (which changes with the
+# optimization level: if inlining, gcc changes it).
+
+! timeout 10
 ! output sort
-$ $SG_TEST_EXENV ./rpc_simulator$EXEEXT ${srcdir:=.}/../../msg/small_platform.xml ${srcdir:=.}/rpc.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (1:server@Tremblay) Launch server (port=4000)
-> [  0.000000] (2:forwarder@Ginette) Launch forwarder (port=4000)
-> [  0.000000] (3:client@Fafard) Launch client (server on Tremblay:4000)
-> [  0.000156] (1:server@Tremblay) Listening on port 4000
-> [  2.000312] (3:client@Fafard) Connected to Tremblay:4000.
-> [  2.000312] (3:client@Fafard) Connected to server which is on Tremblay:4000
-> [  2.020863] (1:server@Tremblay) Got message PING(1234) from Fafard:5000
-> [  2.041415] (1:server@Tremblay) Answered with PONG(4321)
-> [  2.041415] (3:client@Fafard) The answer to PING(1234) on Tremblay:4000 is PONG(4321)
-> [  2.041415] (3:client@Fafard) Call the exception raising RPC
-> [  2.061966] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
-> [  2.082607] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
-> [  2.082607] (3:client@Fafard) Called the exception raising RPC
-> [  2.082607] (3:client@Fafard) Call the exception raising RPC (i=0)
-> [  2.103157] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
-> [  2.123799] (3:client@Fafard) Call the exception raising RPC (i=1)
-> [  2.144349] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
-> [  2.164990] (3:client@Fafard) Call the exception raising RPC (i=2)
-> [  2.185541] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
-> [  2.206182] (3:client@Fafard) Call the exception raising RPC (i=3)
-> [  2.226733] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
-> [  2.247374] (3:client@Fafard) Call the exception raising RPC (i=4)
-> [  2.267925] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
-> [  2.288566] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=0)
-> [  2.301669] (2:forwarder@Ginette) Forward a request
-> [  2.314900] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
-> [  2.328190] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
-> [  2.341354] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
-> [  2.341354] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=1)
-> [  2.354457] (2:forwarder@Ginette) Forward a request
-> [  2.367688] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
-> [  2.380978] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
-> [  2.394142] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
-> [  2.394142] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=2)
-> [  2.407245] (2:forwarder@Ginette) Forward a request
-> [  2.420477] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
-> [  2.433767] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
-> [  2.446930] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
-> [  2.446930] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=3)
-> [  2.460033] (2:forwarder@Ginette) Forward a request
-> [  2.473265] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
-> [  2.486555] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
-> [  2.499718] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
-> [  2.499718] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=4)
-> [  2.512821] (2:forwarder@Ginette) Forward a request
-> [  2.526053] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
-> [  2.539343] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
-> [  2.552507] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
-> [  2.552507] (3:client@Fafard) Ask Ginette:4000 to die
-> [  2.565609] (2:forwarder@Ginette) Asked to die by Fafard:5000
-> [  2.565609] (2:forwarder@Ginette) Done.
-> [  2.565609] (2:forwarder@Ginette) Exiting GRAS
-> [  2.565609] (3:client@Fafard) Ask Tremblay:4000 to die
-> [  2.586160] (1:server@Tremblay) Asked to die by Fafard:5000
-> [  2.586160] (1:server@Tremblay) Done.
-> [  2.586160] (1:server@Tremblay) Exiting GRAS
-> [  2.586160] (3:client@Fafard) Done.
-> [  2.586160] (3:client@Fafard) Exiting GRAS
+$ $SG_TEST_EXENV ./rpc_simulator$EXEEXT ${srcdir:=.}/../../msg/small_platform.xml ${srcdir:=.}/rpc.xml "--log=root.fmt:[0]%e(%i:%P@%h)%e%m%n"
+> [0] (1:server@Tremblay) Launch server (port=4000)
+> [0] (1:server@Tremblay) Listening on port 4000
+> [0] (1:server@Tremblay) Got message PING(1234) from Fafard:5000
+> [0] (1:server@Tremblay) Answered with PONG(4321)
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
+> [0] (1:server@Tremblay) Asked to die by Fafard:5000
+> [0] (1:server@Tremblay) Done.
+> [0] (1:server@Tremblay) Exiting GRAS
+> [0] (2:forwarder@Ginette) Launch forwarder (port=4000)
+> [0] (2:forwarder@Ginette) Forward a request
+> [0] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
+> [0] (2:forwarder@Ginette) Forward a request
+> [0] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
+> [0] (2:forwarder@Ginette) Forward a request
+> [0] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
+> [0] (2:forwarder@Ginette) Forward a request
+> [0] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
+> [0] (2:forwarder@Ginette) Forward a request
+> [0] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
+> [0] (2:forwarder@Ginette) Asked to die by Fafard:5000
+> [0] (2:forwarder@Ginette) Done.
+> [0] (2:forwarder@Ginette) Exiting GRAS
+> [0] (3:client@Fafard) Launch client (server on Tremblay:4000)
+> [0] (3:client@Fafard) Connected to Tremblay:4000.
+> [0] (3:client@Fafard) Connected to server which is on Tremblay:4000
+> [0] (3:client@Fafard) The answer to PING(1234) on Tremblay:4000 is PONG(4321)
+> [0] (3:client@Fafard) Call the exception raising RPC
+> [0] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
+> [0] (3:client@Fafard) Called the exception raising RPC
+> [0] (3:client@Fafard) Call the exception raising RPC (i=0)
+> [0] (3:client@Fafard) Call the exception raising RPC (i=1)
+> [0] (3:client@Fafard) Call the exception raising RPC (i=2)
+> [0] (3:client@Fafard) Call the exception raising RPC (i=3)
+> [0] (3:client@Fafard) Call the exception raising RPC (i=4)
+> [0] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=0)
+> [0] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
+> [0] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=1)
+> [0] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
+> [0] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=2)
+> [0] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
+> [0] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=3)
+> [0] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
+> [0] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=4)
+> [0] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
+> [0] (3:client@Fafard) Ask Ginette:4000 to die
+> [0] (3:client@Fafard) Ask Tremblay:4000 to die
+> [0] (3:client@Fafard) Done.
+> [0] (3:client@Fafard) Exiting GRAS
index ad62de8..77e0c65 100755 (executable)
@@ -1,62 +1,68 @@
 #! ./tesh
 
+# There is no timestamp in this test, because we exchange exceptions,
+# which contain not only the filename (which could change in case of
+# VPATH builds), but also the function name (which changes with the
+# optimization level: if inlining, gcc changes it).
+
+! timeout 10
 ! output sort
-$ $SG_TEST_EXENV ./rpc_simulator$EXEEXT ${srcdir:=.}/../../msg/small_platform.xml ${srcdir:=.}/rpc.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (1:server@Tremblay) Launch server (port=4000)
-> [  0.000000] (2:forwarder@Ginette) Launch forwarder (port=4000)
-> [  0.000000] (3:client@Fafard) Launch client (server on Tremblay:4000)
-> [  0.000156] (1:server@Tremblay) Listening on port 4000
-> [  2.000312] (3:client@Fafard) Connected to Tremblay:4000.
-> [  2.000312] (3:client@Fafard) Connected to server which is on Tremblay:4000
-> [  2.020863] (1:server@Tremblay) Got message PING(1234) from Fafard:5000
-> [  2.041415] (1:server@Tremblay) Answered with PONG(4321)
-> [  2.041415] (3:client@Fafard) The answer to PING(1234) on Tremblay:4000 is PONG(4321)
-> [  2.041415] (3:client@Fafard) Call the exception raising RPC
-> [  2.061966] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
-> [  2.082632] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
-> [  2.082632] (3:client@Fafard) Called the exception raising RPC
-> [  2.082632] (3:client@Fafard) Call the exception raising RPC (i=0)
-> [  2.103182] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
-> [  2.123849] (3:client@Fafard) Call the exception raising RPC (i=1)
-> [  2.144399] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
-> [  2.165066] (3:client@Fafard) Call the exception raising RPC (i=2)
-> [  2.185616] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
-> [  2.206283] (3:client@Fafard) Call the exception raising RPC (i=3)
-> [  2.226833] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
-> [  2.247499] (3:client@Fafard) Call the exception raising RPC (i=4)
-> [  2.268050] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
-> [  2.288716] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=0)
-> [  2.301819] (2:forwarder@Ginette) Forward a request
-> [  2.315051] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
-> [  2.328357] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
-> [  2.341538] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
-> [  2.341538] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=1)
-> [  2.354640] (2:forwarder@Ginette) Forward a request
-> [  2.367872] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
-> [  2.381178] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
-> [  2.394359] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
-> [  2.394359] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=2)
-> [  2.407462] (2:forwarder@Ginette) Forward a request
-> [  2.420693] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
-> [  2.433999] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
-> [  2.447180] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
-> [  2.447180] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=3)
-> [  2.460283] (2:forwarder@Ginette) Forward a request
-> [  2.473515] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
-> [  2.486821] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
-> [  2.500001] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
-> [  2.500001] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=4)
-> [  2.513104] (2:forwarder@Ginette) Forward a request
-> [  2.526336] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
-> [  2.539642] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
-> [  2.552823] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
-> [  2.552823] (3:client@Fafard) Ask Ginette:4000 to die
-> [  2.565925] (2:forwarder@Ginette) Asked to die by Fafard:5000
-> [  2.565925] (2:forwarder@Ginette) Done.
-> [  2.565925] (2:forwarder@Ginette) Exiting GRAS
-> [  2.565925] (3:client@Fafard) Ask Tremblay:4000 to die
-> [  2.586476] (1:server@Tremblay) Asked to die by Fafard:5000
-> [  2.586476] (1:server@Tremblay) Done.
-> [  2.586476] (1:server@Tremblay) Exiting GRAS
-> [  2.586476] (3:client@Fafard) Done.
-> [  2.586476] (3:client@Fafard) Exiting GRAS
+$ $SG_TEST_EXENV ./rpc_simulator$EXEEXT ${srcdir:=.}/../../msg/small_platform.xml ${srcdir:=.}/rpc.xml "--log=root.fmt:[0]%e(%i:%P@%h)%e%m%n"
+> [0] (1:server@Tremblay) Launch server (port=4000)
+> [0] (1:server@Tremblay) Listening on port 4000
+> [0] (1:server@Tremblay) Got message PING(1234) from Fafard:5000
+> [0] (1:server@Tremblay) Answered with PONG(4321)
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Fafard:5000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
+> [0] (1:server@Tremblay) Propagate local exception ('Error for the client') from 'raise exception' RPC cb back to Ginette:4000
+> [0] (1:server@Tremblay) Asked to die by Fafard:5000
+> [0] (1:server@Tremblay) Done.
+> [0] (1:server@Tremblay) Exiting GRAS
+> [0] (2:forwarder@Ginette) Launch forwarder (port=4000)
+> [0] (2:forwarder@Ginette) Forward a request
+> [0] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
+> [0] (2:forwarder@Ginette) Forward a request
+> [0] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
+> [0] (2:forwarder@Ginette) Forward a request
+> [0] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
+> [0] (2:forwarder@Ginette) Forward a request
+> [0] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
+> [0] (2:forwarder@Ginette) Forward a request
+> [0] (2:forwarder@Ginette) Propagate remote exception ('Error for the client') from 'forward exception' RPC cb back to Fafard:5000
+> [0] (2:forwarder@Ginette) Asked to die by Fafard:5000
+> [0] (2:forwarder@Ginette) Done.
+> [0] (2:forwarder@Ginette) Exiting GRAS
+> [0] (3:client@Fafard) Launch client (server on Tremblay:4000)
+> [0] (3:client@Fafard) Connected to Tremblay:4000.
+> [0] (3:client@Fafard) Connected to server which is on Tremblay:4000
+> [0] (3:client@Fafard) The answer to PING(1234) on Tremblay:4000 is PONG(4321)
+> [0] (3:client@Fafard) Call the exception raising RPC
+> [0] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
+> [0] (3:client@Fafard) Called the exception raising RPC
+> [0] (3:client@Fafard) Call the exception raising RPC (i=0)
+> [0] (3:client@Fafard) Call the exception raising RPC (i=1)
+> [0] (3:client@Fafard) Call the exception raising RPC (i=2)
+> [0] (3:client@Fafard) Call the exception raising RPC (i=3)
+> [0] (3:client@Fafard) Call the exception raising RPC (i=4)
+> [0] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=0)
+> [0] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
+> [0] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=1)
+> [0] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
+> [0] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=2)
+> [0] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
+> [0] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=3)
+> [0] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
+> [0] (3:client@Fafard) Call the exception raising RPC on the forwarder (i=4)
+> [0] (3:client@Fafard) Got the expected exception when calling the exception raising RPC
+> [0] (3:client@Fafard) Ask Ginette:4000 to die
+> [0] (3:client@Fafard) Ask Tremblay:4000 to die
+> [0] (3:client@Fafard) Done.
+> [0] (3:client@Fafard) Exiting GRAS
index 001abd7..f2d74b1 100644 (file)
@@ -33,7 +33,8 @@ int worker(int argc, char *argv[]) {
     xbt_ex_t e;
     TRY {
       xbt_queue_shift_timed(todo,&chunk,0);
-    } CATCH(e) {
+    }
+    CATCH(e) {
       if (e.category != timeout_error) {
         RETHROW;
       }
index 1fe1849..b5cdddc 100644 (file)
@@ -85,129 +85,129 @@ $ $SG_TEST_EXENV ./synchro_simulator${EXEEXT:=} ${srcdir:=.}/../../msg/small_pla
 > [  0.110000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #2)
 > [  0.120000] (1:thread 1@Tremblay) Thread 1 is full
 > [  0.120000] (1:thread 1@Tremblay) Thread 1 thinks
-> [  0.120000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.120000] (1:thread 3@Tremblay) Thread 3 eats
 > [  0.120000] (1:thread 4@Tremblay) Thread 4 is full
 > [  0.120000] (1:thread 4@Tremblay) Thread 4 thinks
 > [  0.130000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #5)
-> [  0.140000] (1:thread 1@Tremblay) Thread 1 eats
-> [  0.140000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.140000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.140000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.150000] (1:thread 1@Tremblay) Thread 1 is full
-> [  0.150000] (1:thread 1@Tremblay) Thread 1 thinks
-> [  0.160000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #6)
-> [  0.160000] (1:thread 1@Tremblay) Thread 1 eats
-> [  0.160000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #3)
+> [  0.130000] (1:thread 1@Tremblay) Thread 1 eats
+> [  0.140000] (1:thread 1@Tremblay) Thread 1 is full
+> [  0.140000] (1:thread 1@Tremblay) Thread 1 thinks
+> [  0.150000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #6)
+> [  0.150000] (1:thread 1@Tremblay) Thread 1 eats
+> [  0.150000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.150000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.160000] (1:thread 1@Tremblay) Thread 1 is full
+> [  0.160000] (1:thread 1@Tremblay) Thread 1 thinks
+> [  0.160000] (1:thread 2@Tremblay) Thread 2 eats
 > [  0.160000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #2)
-> [  0.170000] (1:thread 1@Tremblay) Thread 1 is full
-> [  0.170000] (1:thread 1@Tremblay) Thread 1 thinks
-> [  0.170000] (1:thread 2@Tremblay) Thread 2 eats
-> [  0.170000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.170000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.170000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.180000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #7)
-> [  0.190000] (1:thread 1@Tremblay) Thread 1 eats
-> [  0.190000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.190000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.200000] (1:thread 1@Tremblay) Thread 1 is full
-> [  0.200000] (1:thread 1@Tremblay) Thread 1 thinks
-> [  0.200000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #2)
-> [  0.210000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #8)
-> [  0.210000] (1:thread 1@Tremblay) Thread 1 eats
-> [  0.210000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #4)
-> [  0.210000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.210000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.210000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.220000] (1:thread 1@Tremblay) Thread 1 is full
-> [  0.220000] (1:thread 1@Tremblay) Thread 1 thinks
-> [  0.230000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #9)
-> [  0.230000] (1:thread 1@Tremblay) Thread 1 eats
-> [  0.240000] (1:thread 1@Tremblay) Thread 1 is full
-> [  0.240000] (1:thread 1@Tremblay) Thread 1 thinks
-> [  0.240000] (1:thread 2@Tremblay) Thread 2 eats
-> [  0.240000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.240000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.250000] (1:thread 1@Tremblay) Thread 1 tries to enter the dead-end; hopefully, the master will cancel it
-> [  0.250000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #3)
+> [  0.160000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.170000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #7)
+> [  0.180000] (1:thread 1@Tremblay) Thread 1 eats
+> [  0.180000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.180000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.180000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #2)
+> [  0.190000] (1:thread 1@Tremblay) Thread 1 is full
+> [  0.190000] (1:thread 1@Tremblay) Thread 1 thinks
+> [  0.200000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #8)
+> [  0.200000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #3)
+> [  0.200000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.200000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.200000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.220000] (1:thread 1@Tremblay) Thread 1 eats
+> [  0.220000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.220000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.220000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.230000] (1:thread 1@Tremblay) Thread 1 is full
+> [  0.230000] (1:thread 1@Tremblay) Thread 1 thinks
+> [  0.240000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #9)
+> [  0.240000] (1:thread 1@Tremblay) Thread 1 eats
+> [  0.240000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #4)
+> [  0.240000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #3)
+> [  0.250000] (1:thread 1@Tremblay) Thread 1 is full
+> [  0.250000] (1:thread 1@Tremblay) Thread 1 thinks
+> [  0.250000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.250000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.250000] (1:thread 3@Tremblay) Thread 3 thinks
 > [  0.250000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.260000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.260000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.270000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #3)
-> [  0.280000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #5)
-> [  0.280000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.260000] (1:thread 1@Tremblay) Thread 1 tries to enter the dead-end; hopefully, the master will cancel it
+> [  0.270000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.270000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.280000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #3)
+> [  0.290000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #5)
+> [  0.290000] (1:thread 2@Tremblay) Thread 2 eats
 > [  0.290000] (1:thread 4@Tremblay) Thread 4 is full
 > [  0.290000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.300000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.300000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.300000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.320000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #6)
-> [  0.330000] (1:thread 2@Tremblay) Thread 2 eats
-> [  0.330000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.330000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.310000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.310000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.310000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.330000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #6)
 > [  0.330000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #4)
-> [  0.330000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.350000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.350000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.360000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #4)
-> [  0.370000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #7)
-> [  0.370000] (1:thread 2@Tremblay) Thread 2 eats
-> [  0.370000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.370000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.390000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.390000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.390000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.410000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #8)
-> [  0.410000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #5)
-> [  0.420000] (1:thread 2@Tremblay) Thread 2 eats
-> [  0.420000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.420000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.420000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.440000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.440000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.450000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #5)
-> [  0.460000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #9)
-> [  0.460000] (1:thread 2@Tremblay) Thread 2 eats
-> [  0.460000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.460000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.480000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.480000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.480000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.500000] (1:thread 2@Tremblay) Thread 2 tries to enter the dead-end; hopefully, the master will cancel it
-> [  0.500000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #6)
-> [  0.510000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.510000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.510000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.540000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #6)
-> [  0.550000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.550000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.550000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.580000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.580000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.590000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #7)
-> [  0.590000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.610000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #7)
-> [  0.630000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.630000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.630000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.660000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.660000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.670000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #8)
-> [  0.670000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.690000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #8)
-> [  0.710000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.710000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.710000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.740000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.740000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.750000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #9)
-> [  0.750000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.770000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #9)
-> [  0.790000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.790000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.790000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.820000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.820000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.830000] (1:thread 4@Tremblay) Thread 4 tries to enter the dead-end; hopefully, the master will cancel it
-> [  0.850000] (1:philosopher@Tremblay) Cancel all childs
-> [  0.850000] (1:philosopher@Tremblay) Exiting GRAS
-> [  0.850000] (1:thread 3@Tremblay) Thread 3 tries to enter the dead-end; hopefully, the master will cancel it
+> [  0.340000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.340000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.340000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.340000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.360000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.360000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.370000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #4)
+> [  0.380000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #7)
+> [  0.380000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.380000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.380000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.400000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.400000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.400000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.420000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #8)
+> [  0.420000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #5)
+> [  0.430000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.430000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.430000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.430000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.450000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.450000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.460000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #5)
+> [  0.470000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #9)
+> [  0.470000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.470000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.470000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.490000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.490000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.490000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.510000] (1:thread 2@Tremblay) Thread 2 tries to enter the dead-end; hopefully, the master will cancel it
+> [  0.510000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #6)
+> [  0.520000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.520000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.520000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.550000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #6)
+> [  0.560000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.560000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.560000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.590000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.590000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.600000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #7)
+> [  0.600000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.620000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #7)
+> [  0.640000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.640000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.640000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.670000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.670000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.680000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #8)
+> [  0.680000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.700000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #8)
+> [  0.720000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.720000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.720000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.750000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.750000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.760000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #9)
+> [  0.760000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.780000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #9)
+> [  0.800000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.800000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.800000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.830000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.830000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.840000] (1:thread 4@Tremblay) Thread 4 tries to enter the dead-end; hopefully, the master will cancel it
+> [  0.860000] (1:philosopher@Tremblay) Cancel all childs
+> [  0.860000] (1:philosopher@Tremblay) Exiting GRAS
+> [  0.860000] (1:thread 3@Tremblay) Thread 3 tries to enter the dead-end; hopefully, the master will cancel it
index 1fe1849..b5cdddc 100755 (executable)
@@ -85,129 +85,129 @@ $ $SG_TEST_EXENV ./synchro_simulator${EXEEXT:=} ${srcdir:=.}/../../msg/small_pla
 > [  0.110000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #2)
 > [  0.120000] (1:thread 1@Tremblay) Thread 1 is full
 > [  0.120000] (1:thread 1@Tremblay) Thread 1 thinks
-> [  0.120000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.120000] (1:thread 3@Tremblay) Thread 3 eats
 > [  0.120000] (1:thread 4@Tremblay) Thread 4 is full
 > [  0.120000] (1:thread 4@Tremblay) Thread 4 thinks
 > [  0.130000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #5)
-> [  0.140000] (1:thread 1@Tremblay) Thread 1 eats
-> [  0.140000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.140000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.140000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.150000] (1:thread 1@Tremblay) Thread 1 is full
-> [  0.150000] (1:thread 1@Tremblay) Thread 1 thinks
-> [  0.160000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #6)
-> [  0.160000] (1:thread 1@Tremblay) Thread 1 eats
-> [  0.160000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #3)
+> [  0.130000] (1:thread 1@Tremblay) Thread 1 eats
+> [  0.140000] (1:thread 1@Tremblay) Thread 1 is full
+> [  0.140000] (1:thread 1@Tremblay) Thread 1 thinks
+> [  0.150000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #6)
+> [  0.150000] (1:thread 1@Tremblay) Thread 1 eats
+> [  0.150000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.150000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.160000] (1:thread 1@Tremblay) Thread 1 is full
+> [  0.160000] (1:thread 1@Tremblay) Thread 1 thinks
+> [  0.160000] (1:thread 2@Tremblay) Thread 2 eats
 > [  0.160000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #2)
-> [  0.170000] (1:thread 1@Tremblay) Thread 1 is full
-> [  0.170000] (1:thread 1@Tremblay) Thread 1 thinks
-> [  0.170000] (1:thread 2@Tremblay) Thread 2 eats
-> [  0.170000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.170000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.170000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.180000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #7)
-> [  0.190000] (1:thread 1@Tremblay) Thread 1 eats
-> [  0.190000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.190000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.200000] (1:thread 1@Tremblay) Thread 1 is full
-> [  0.200000] (1:thread 1@Tremblay) Thread 1 thinks
-> [  0.200000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #2)
-> [  0.210000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #8)
-> [  0.210000] (1:thread 1@Tremblay) Thread 1 eats
-> [  0.210000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #4)
-> [  0.210000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.210000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.210000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.220000] (1:thread 1@Tremblay) Thread 1 is full
-> [  0.220000] (1:thread 1@Tremblay) Thread 1 thinks
-> [  0.230000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #9)
-> [  0.230000] (1:thread 1@Tremblay) Thread 1 eats
-> [  0.240000] (1:thread 1@Tremblay) Thread 1 is full
-> [  0.240000] (1:thread 1@Tremblay) Thread 1 thinks
-> [  0.240000] (1:thread 2@Tremblay) Thread 2 eats
-> [  0.240000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.240000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.250000] (1:thread 1@Tremblay) Thread 1 tries to enter the dead-end; hopefully, the master will cancel it
-> [  0.250000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #3)
+> [  0.160000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.170000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #7)
+> [  0.180000] (1:thread 1@Tremblay) Thread 1 eats
+> [  0.180000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.180000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.180000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #2)
+> [  0.190000] (1:thread 1@Tremblay) Thread 1 is full
+> [  0.190000] (1:thread 1@Tremblay) Thread 1 thinks
+> [  0.200000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #8)
+> [  0.200000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #3)
+> [  0.200000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.200000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.200000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.220000] (1:thread 1@Tremblay) Thread 1 eats
+> [  0.220000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.220000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.220000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.230000] (1:thread 1@Tremblay) Thread 1 is full
+> [  0.230000] (1:thread 1@Tremblay) Thread 1 thinks
+> [  0.240000] (1:thread 1@Tremblay) Thread 1 gets hungry (lunch #9)
+> [  0.240000] (1:thread 1@Tremblay) Thread 1 eats
+> [  0.240000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #4)
+> [  0.240000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #3)
+> [  0.250000] (1:thread 1@Tremblay) Thread 1 is full
+> [  0.250000] (1:thread 1@Tremblay) Thread 1 thinks
+> [  0.250000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.250000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.250000] (1:thread 3@Tremblay) Thread 3 thinks
 > [  0.250000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.260000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.260000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.270000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #3)
-> [  0.280000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #5)
-> [  0.280000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.260000] (1:thread 1@Tremblay) Thread 1 tries to enter the dead-end; hopefully, the master will cancel it
+> [  0.270000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.270000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.280000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #3)
+> [  0.290000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #5)
+> [  0.290000] (1:thread 2@Tremblay) Thread 2 eats
 > [  0.290000] (1:thread 4@Tremblay) Thread 4 is full
 > [  0.290000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.300000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.300000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.300000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.320000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #6)
-> [  0.330000] (1:thread 2@Tremblay) Thread 2 eats
-> [  0.330000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.330000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.310000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.310000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.310000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.330000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #6)
 > [  0.330000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #4)
-> [  0.330000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.350000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.350000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.360000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #4)
-> [  0.370000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #7)
-> [  0.370000] (1:thread 2@Tremblay) Thread 2 eats
-> [  0.370000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.370000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.390000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.390000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.390000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.410000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #8)
-> [  0.410000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #5)
-> [  0.420000] (1:thread 2@Tremblay) Thread 2 eats
-> [  0.420000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.420000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.420000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.440000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.440000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.450000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #5)
-> [  0.460000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #9)
-> [  0.460000] (1:thread 2@Tremblay) Thread 2 eats
-> [  0.460000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.460000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.480000] (1:thread 2@Tremblay) Thread 2 is full
-> [  0.480000] (1:thread 2@Tremblay) Thread 2 thinks
-> [  0.480000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.500000] (1:thread 2@Tremblay) Thread 2 tries to enter the dead-end; hopefully, the master will cancel it
-> [  0.500000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #6)
-> [  0.510000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.510000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.510000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.540000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #6)
-> [  0.550000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.550000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.550000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.580000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.580000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.590000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #7)
-> [  0.590000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.610000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #7)
-> [  0.630000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.630000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.630000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.660000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.660000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.670000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #8)
-> [  0.670000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.690000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #8)
-> [  0.710000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.710000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.710000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.740000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.740000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.750000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #9)
-> [  0.750000] (1:thread 4@Tremblay) Thread 4 eats
-> [  0.770000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #9)
-> [  0.790000] (1:thread 3@Tremblay) Thread 3 eats
-> [  0.790000] (1:thread 4@Tremblay) Thread 4 is full
-> [  0.790000] (1:thread 4@Tremblay) Thread 4 thinks
-> [  0.820000] (1:thread 3@Tremblay) Thread 3 is full
-> [  0.820000] (1:thread 3@Tremblay) Thread 3 thinks
-> [  0.830000] (1:thread 4@Tremblay) Thread 4 tries to enter the dead-end; hopefully, the master will cancel it
-> [  0.850000] (1:philosopher@Tremblay) Cancel all childs
-> [  0.850000] (1:philosopher@Tremblay) Exiting GRAS
-> [  0.850000] (1:thread 3@Tremblay) Thread 3 tries to enter the dead-end; hopefully, the master will cancel it
+> [  0.340000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.340000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.340000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.340000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.360000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.360000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.370000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #4)
+> [  0.380000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #7)
+> [  0.380000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.380000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.380000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.400000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.400000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.400000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.420000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #8)
+> [  0.420000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #5)
+> [  0.430000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.430000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.430000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.430000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.450000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.450000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.460000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #5)
+> [  0.470000] (1:thread 2@Tremblay) Thread 2 gets hungry (lunch #9)
+> [  0.470000] (1:thread 2@Tremblay) Thread 2 eats
+> [  0.470000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.470000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.490000] (1:thread 2@Tremblay) Thread 2 is full
+> [  0.490000] (1:thread 2@Tremblay) Thread 2 thinks
+> [  0.490000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.510000] (1:thread 2@Tremblay) Thread 2 tries to enter the dead-end; hopefully, the master will cancel it
+> [  0.510000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #6)
+> [  0.520000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.520000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.520000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.550000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #6)
+> [  0.560000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.560000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.560000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.590000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.590000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.600000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #7)
+> [  0.600000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.620000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #7)
+> [  0.640000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.640000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.640000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.670000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.670000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.680000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #8)
+> [  0.680000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.700000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #8)
+> [  0.720000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.720000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.720000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.750000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.750000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.760000] (1:thread 4@Tremblay) Thread 4 gets hungry (lunch #9)
+> [  0.760000] (1:thread 4@Tremblay) Thread 4 eats
+> [  0.780000] (1:thread 3@Tremblay) Thread 3 gets hungry (lunch #9)
+> [  0.800000] (1:thread 3@Tremblay) Thread 3 eats
+> [  0.800000] (1:thread 4@Tremblay) Thread 4 is full
+> [  0.800000] (1:thread 4@Tremblay) Thread 4 thinks
+> [  0.830000] (1:thread 3@Tremblay) Thread 3 is full
+> [  0.830000] (1:thread 3@Tremblay) Thread 3 thinks
+> [  0.840000] (1:thread 4@Tremblay) Thread 4 tries to enter the dead-end; hopefully, the master will cancel it
+> [  0.860000] (1:philosopher@Tremblay) Cancel all childs
+> [  0.860000] (1:philosopher@Tremblay) Exiting GRAS
+> [  0.860000] (1:thread 3@Tremblay) Thread 3 tries to enter the dead-end; hopefully, the master will cancel it
index 22be3d2..c2c16d2 100644 (file)
@@ -85,5 +85,6 @@ int client(int argc, char *argv[])
     gras_msg_handle(5.0);
   }
   gras_exit();
+  xbt_free(globals);
   return 0;
 }                               /* end_of_client */
index a3c5364..314c967 100644 (file)
@@ -8,63 +8,64 @@ $ $SG_TEST_EXENV ./masterslave/masterslave_mailbox  ${srcdir:=.}/../platforms/vi
 > [0.000000] [surf_parse/INFO] Configuration change: Set 'coordinates' to 'yes'
 > [100030591:master:(1) 0.000000] [msg_test/INFO] Got 39 slaves and 20 tasks to process
 > [100030591:master:(1) 0.000000] [msg_test/INFO] Sending "Task_0" (of 20) to mailbox "slave-0"
-> [100030591:master:(1) 46.298715] [msg_test/INFO] Sending "Task_1" (of 20) to mailbox "slave-1"
-> [100030591:master:(1) 103.601749] [msg_test/INFO] Sending "Task_2" (of 20) to mailbox "slave-2"
-> [100030591:master:(1) 126.922043] [msg_test/INFO] Sending "Task_3" (of 20) to mailbox "slave-3"
-> [100030591:master:(1) 167.281845] [msg_test/INFO] Sending "Task_4" (of 20) to mailbox "slave-4"
-> [100030591:master:(1) 174.709847] [msg_test/INFO] Sending "Task_5" (of 20) to mailbox "slave-5"
-> [100030591:master:(1) 307.173455] [msg_test/INFO] Sending "Task_6" (of 20) to mailbox "slave-6"
-> [100030591:master:(1) 370.794449] [msg_test/INFO] Sending "Task_7" (of 20) to mailbox "slave-7"
-> [100030591:master:(1) 413.207033] [msg_test/INFO] Sending "Task_8" (of 20) to mailbox "slave-8"
-> [100030591:master:(1) 452.276743] [msg_test/INFO] Sending "Task_9" (of 20) to mailbox "slave-9"
-> [100030591:master:(1) 487.205195] [msg_test/INFO] Sending "Task_10" (of 20) to mailbox "slave-10"
-> [100030591:master:(1) 503.334725] [msg_test/INFO] Sending "Task_11" (of 20) to mailbox "slave-11"
-> [100030591:master:(1) 524.048071] [msg_test/INFO] Sending "Task_12" (of 20) to mailbox "slave-12"
-> [100030591:master:(1) 564.235298] [msg_test/INFO] Sending "Task_13" (of 20) to mailbox "slave-13"
-> [100030591:master:(1) 781.637823] [msg_test/INFO] Sending "Task_14" (of 20) to mailbox "slave-14"
-> [100030591:master:(1) 849.066410] [msg_test/INFO] Sending "Task_15" (of 20) to mailbox "slave-15"
-> [100030591:master:(1) 875.286809] [msg_test/INFO] Sending "Task_16" (of 20) to mailbox "slave-16"
-> [100030591:master:(1) 925.618026] [msg_test/INFO] Sending "Task_17" (of 20) to mailbox "slave-17"
-> [100030591:master:(1) 955.459779] [msg_test/INFO] Sending "Task_18" (of 20) to mailbox "slave-18"
-> [100030591:master:(1) 1125.325477] [msg_test/INFO] Sending "Task_19" (of 20) to mailbox "slave-19"
-> [100030591:master:(1) 1162.951807] [msg_test/INFO] All tasks have been dispatched. Let's tell everybody the computation is over.
-> [100036570:slave:(2) 1209.250522] [msg_test/INFO] I'm done. See you!
-> [100041334:slave:(3) 1266.553556] [msg_test/INFO] I'm done. See you!
-> [100055671:slave:(4) 1289.873850] [msg_test/INFO] I'm done. See you!
-> [100066658:slave:(5) 1330.233653] [msg_test/INFO] I'm done. See you!
-> [100090691:slave:(6) 1337.661654] [msg_test/INFO] I'm done. See you!
-> [100094952:slave:(7) 1470.125262] [msg_test/INFO] I'm done. See you!
-> [100117943:slave:(8) 1533.746256] [msg_test/INFO] I'm done. See you!
-> [100126290:slave:(9) 1576.158840] [msg_test/INFO] I'm done. See you!
-> [100144483:slave:(10) 1615.228550] [msg_test/INFO] I'm done. See you!
-> [100152889:slave:(11) 1650.157002] [msg_test/INFO] I'm done. See you!
-> [100178474:slave:(12) 1666.286532] [msg_test/INFO] I'm done. See you!
-> [100180261:slave:(13) 1686.999878] [msg_test/INFO] I'm done. See you!
-> [100185883:slave:(14) 1727.187106] [msg_test/INFO] I'm done. See you!
-> [100186365:slave:(15) 1944.589630] [msg_test/INFO] I'm done. See you!
-> [100200866:slave:(16) 2012.018217] [msg_test/INFO] I'm done. See you!
-> [100207885:slave:(17) 2038.238617] [msg_test/INFO] I'm done. See you!
-> [100224447:slave:(18) 2088.569833] [msg_test/INFO] I'm done. See you!
-> [100238799:slave:(19) 2118.411586] [msg_test/INFO] I'm done. See you!
-> [100273297:slave:(20) 2288.277284] [msg_test/INFO] I'm done. See you!
-> [100280711:slave:(21) 2325.903615] [msg_test/INFO] I'm done. See you!
-> [100284574:slave:(22) 2544.465027] [msg_test/INFO] I'm done. See you!
-> [100292843:slave:(23) 2630.108510] [msg_test/INFO] I'm done. See you!
-> [100309685:slave:(24) 2668.822631] [msg_test/INFO] I'm done. See you!
-> [100315281:slave:(25) 2720.117353] [msg_test/INFO] I'm done. See you!
-> [100317715:slave:(26) 2757.915482] [msg_test/INFO] I'm done. See you!
-> [100324694:slave:(27) 2843.455198] [msg_test/INFO] I'm done. See you!
-> [100326641:slave:(28) 2895.472176] [msg_test/INFO] I'm done. See you!
-> [100331484:slave:(29) 2933.787292] [msg_test/INFO] I'm done. See you!
-> [100347816:slave:(30) 3065.083370] [msg_test/INFO] I'm done. See you!
-> [100354536:slave:(31) 3102.951662] [msg_test/INFO] I'm done. See you!
-> [100355017:slave:(32) 3165.883487] [msg_test/INFO] I'm done. See you!
-> [100359203:slave:(33) 3184.091818] [msg_test/INFO] I'm done. See you!
-> [100379397:slave:(34) 3445.670206] [msg_test/INFO] I'm done. See you!
-> [100404046:slave:(35) 3460.270206] [msg_test/INFO] I'm done. See you!
-> [100413314:slave:(36) 3543.131128] [msg_test/INFO] I'm done. See you!
-> [100416828:slave:(37) 3558.720375] [msg_test/INFO] I'm done. See you!
-> [100422926:slave:(38) 3651.507849] [msg_test/INFO] I'm done. See you!
-> [100427449:slave:(39) 3850.431291] [msg_test/INFO] I'm done. See you!
-> [100429957:slave:(40) 3879.074632] [msg_test/INFO] I'm done. See you!
-> [3879.074632] [msg_test/INFO] Simulation time 3879.07
+> [100030591:master:(1) 0.046299] [msg_test/INFO] Sending "Task_1" (of 20) to mailbox "slave-1"
+> [100030591:master:(1) 0.103602] [msg_test/INFO] Sending "Task_2" (of 20) to mailbox "slave-2"
+> [100030591:master:(1) 0.126922] [msg_test/INFO] Sending "Task_3" (of 20) to mailbox "slave-3"
+> [100030591:master:(1) 0.167282] [msg_test/INFO] Sending "Task_4" (of 20) to mailbox "slave-4"
+> [100030591:master:(1) 0.174710] [msg_test/INFO] Sending "Task_5" (of 20) to mailbox "slave-5"
+> [100030591:master:(1) 0.307173] [msg_test/INFO] Sending "Task_6" (of 20) to mailbox "slave-6"
+> [100030591:master:(1) 0.370794] [msg_test/INFO] Sending "Task_7" (of 20) to mailbox "slave-7"
+> [100030591:master:(1) 0.413207] [msg_test/INFO] Sending "Task_8" (of 20) to mailbox "slave-8"
+> [100030591:master:(1) 0.452277] [msg_test/INFO] Sending "Task_9" (of 20) to mailbox "slave-9"
+> [100030591:master:(1) 0.487205] [msg_test/INFO] Sending "Task_10" (of 20) to mailbox "slave-10"
+> [100030591:master:(1) 0.503335] [msg_test/INFO] Sending "Task_11" (of 20) to mailbox "slave-11"
+> [100030591:master:(1) 0.524048] [msg_test/INFO] Sending "Task_12" (of 20) to mailbox "slave-12"
+> [100030591:master:(1) 0.564235] [msg_test/INFO] Sending "Task_13" (of 20) to mailbox "slave-13"
+> [100030591:master:(1) 0.781638] [msg_test/INFO] Sending "Task_14" (of 20) to mailbox "slave-14"
+> [100030591:master:(1) 0.849066] [msg_test/INFO] Sending "Task_15" (of 20) to mailbox "slave-15"
+> [100030591:master:(1) 0.875287] [msg_test/INFO] Sending "Task_16" (of 20) to mailbox "slave-16"
+> [100030591:master:(1) 0.925618] [msg_test/INFO] Sending "Task_17" (of 20) to mailbox "slave-17"
+> [100030591:master:(1) 0.955460] [msg_test/INFO] Sending "Task_18" (of 20) to mailbox "slave-18"
+> [100030591:master:(1) 1.125325] [msg_test/INFO] Sending "Task_19" (of 20) to mailbox "slave-19"
+> [100030591:master:(1) 1.162952] [msg_test/INFO] All tasks have been dispatched. Let's tell everybody the computation is over.
+> [100036570:slave:(2) 1.209251] [msg_test/INFO] I'm done. See you!
+> [100041334:slave:(3) 1.266554] [msg_test/INFO] I'm done. See you!
+> [100055671:slave:(4) 1.289874] [msg_test/INFO] I'm done. See you!
+> [100066658:slave:(5) 1.330234] [msg_test/INFO] I'm done. See you!
+> [100090691:slave:(6) 1.337662] [msg_test/INFO] I'm done. See you!
+> [100094952:slave:(7) 1.470125] [msg_test/INFO] I'm done. See you!
+> [100117943:slave:(8) 1.533746] [msg_test/INFO] I'm done. See you!
+> [100126290:slave:(9) 1.576159] [msg_test/INFO] I'm done. See you!
+> [100144483:slave:(10) 1.615229] [msg_test/INFO] I'm done. See you!
+> [100152889:slave:(11) 1.650157] [msg_test/INFO] I'm done. See you!
+> [100178474:slave:(12) 1.666287] [msg_test/INFO] I'm done. See you!
+> [100180261:slave:(13) 1.687000] [msg_test/INFO] I'm done. See you!
+> [100185883:slave:(14) 1.727187] [msg_test/INFO] I'm done. See you!
+> [100186365:slave:(15) 1.944590] [msg_test/INFO] I'm done. See you!
+> [100200866:slave:(16) 2.012018] [msg_test/INFO] I'm done. See you!
+> [100207885:slave:(17) 2.038239] [msg_test/INFO] I'm done. See you!
+> [100224447:slave:(18) 2.088570] [msg_test/INFO] I'm done. See you!
+> [100238799:slave:(19) 2.118412] [msg_test/INFO] I'm done. See you!
+> [100273297:slave:(20) 2.288277] [msg_test/INFO] I'm done. See you!
+> [100280711:slave:(21) 2.325904] [msg_test/INFO] I'm done. See you!
+> [100284574:slave:(22) 2.544465] [msg_test/INFO] I'm done. See you!
+> [100292843:slave:(23) 2.630109] [msg_test/INFO] I'm done. See you!
+> [100309685:slave:(24) 2.668823] [msg_test/INFO] I'm done. See you!
+> [100315281:slave:(25) 2.720117] [msg_test/INFO] I'm done. See you!
+> [100317715:slave:(26) 2.757915] [msg_test/INFO] I'm done. See you!
+> [100324694:slave:(27) 2.843455] [msg_test/INFO] I'm done. See you!
+> [100326641:slave:(28) 2.895472] [msg_test/INFO] I'm done. See you!
+> [100331484:slave:(29) 2.933787] [msg_test/INFO] I'm done. See you!
+> [100347816:slave:(30) 3.065083] [msg_test/INFO] I'm done. See you!
+> [100354536:slave:(31) 3.102952] [msg_test/INFO] I'm done. See you!
+> [100355017:slave:(32) 3.165883] [msg_test/INFO] I'm done. See you!
+> [100359203:slave:(33) 3.184092] [msg_test/INFO] I'm done. See you!
+> [100379397:slave:(34) 3.445670] [msg_test/INFO] I'm done. See you!
+> [100404046:slave:(35) 3.460270] [msg_test/INFO] I'm done. See you!
+> [100413314:slave:(36) 3.543131] [msg_test/INFO] I'm done. See you!
+> [100416828:slave:(37) 3.558720] [msg_test/INFO] I'm done. See you!
+> [100422926:slave:(38) 3.651508] [msg_test/INFO] I'm done. See you!
+> [100427449:slave:(39) 3.850431] [msg_test/INFO] I'm done. See you!
+> [100429957:slave:(40) 3.879075] [msg_test/INFO] I'm done. See you!
+> [3.879075] [msg_test/INFO] Simulation time 3.87907
+
index 7f7b933..8263239 100644 (file)
@@ -29,8 +29,8 @@ $ $SG_TEST_EXENV token_ring ${srcdir:=.}/two_clusters.xml "--log=root.fmt:[%10.6
 $ $SG_TEST_EXENV token_ring ${srcdir:=.}/two_peers.xml --cfg=coordinates:yes "--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n"
 > [    0.000000] (0:@) Configuration change: Set 'coordinates' to 'yes'
 > [    0.000000] (0:@) Bypassing the XML parser since surf_parse_open received a NULL pointer. If it is not what you want, go fix your code.
-> [ 5111.488529] (1:master@peer_100030591) Send Data to "host1"
-> [ 5111.488529] (2:slave@peer_100036570) Received "Token"
-> [10222.977057] (0:@) Simulation time 10223
-> [10222.977057] (1:master@peer_100030591) Received "Token"
-> [10222.977057] (2:slave@peer_100036570) Send Data to "host0"
+> [    5.221778] (1:master@peer_100030591) Send Data to "host1"
+> [    5.221778] (2:slave@peer_100036570) Received "Token"
+> [   10.443556] (0:@) Simulation time 10.4436
+> [   10.443556] (1:master@peer_100030591) Received "Token"
+> [   10.443556] (2:slave@peer_100036570) Send Data to "host0"
\ No newline at end of file
index 400de0a..08d4b3b 100644 (file)
@@ -56,10 +56,9 @@ int master(int argc, char *argv[])
 int slave(int argc, char *argv[])
 {
   m_task_t task = NULL;
-  int res;
 
   while (1) {
-    res = MSG_task_receive(&(task), "master_mailbox");
+    MSG_task_receive(&(task), "master_mailbox");
 
     if (!strcmp(MSG_task_get_name(task), "finalize")) {
       MSG_task_destroy(task);
index 54661e0..77e586b 100644 (file)
@@ -59,11 +59,10 @@ int master(int argc, char *argv[])
 int slave(int argc, char *argv[])
 {
   m_task_t task = NULL;
-  int res;
 
   TRACE_host_variable_set(MSG_host_self()->name, "is_slave", 1);
   while (1) {
-    res = MSG_task_receive(&(task), "master_mailbox");
+    MSG_task_receive(&(task), "master_mailbox");
 
     if (!strcmp(MSG_task_get_name(task), "finalize")) {
       MSG_task_destroy(task);
similarity index 50%
rename from examples/platforms/cluster_with_100_hosts.xml
rename to examples/platforms/One_cluster.xml
index 6b4354d..a638eae 100644 (file)
@@ -1,5 +1,15 @@
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<!--              _________
+                               |              |
+                               |  router  |
+       ____________|__________|_____________ backbone
+         |   |   |              |     |   |    
+    l0|        l1|     l2|           l97| l96 |   | l99
+      |          |       |   ........   |     |   |
+      |                                |
+   c-0.me                             c-99.me  
+-->
 <platform version="3">
 <AS  id="AS0"  routing="Full">
   <cluster id="my_cluster_1" prefix="c-" suffix=".me"
diff --git a/examples/platforms/One_cluster_no_backbone.xml b/examples/platforms/One_cluster_no_backbone.xml
new file mode 100644 (file)
index 0000000..3e470a9
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+
+<!--              _________
+                               |              |
+                               |  router  |
+                               |__________|
+                                       / | \
+                                  /  |  \
+                          l0 / l1|   \l2 
+                                /    |    \
+                               /         |     \
+                       host0   host1   host2   
+-->
+
+<platform version="3">
+<AS  id="AS0"  routing="Full">
+  <cluster id="my_cluster_1" prefix="c-" suffix=".me"
+               radical="0-2"   power="1000000000"    bw="125000000"     lat="5E-5"/>
+</AS>
+</platform>
similarity index 84%
rename from examples/platforms/2_clusters_with_30000_hosts.xml
rename to examples/platforms/Two_clusters.xml
index 551dcba..fc63a07 100644 (file)
@@ -3,11 +3,11 @@
 <platform version="3">
 <AS  id="AS0"  routing="Full">
   <cluster id="my_cluster_1" prefix="c-" suffix=".me"
-               radical="0-14999"       power="1000000000"    bw="125000000"     lat="5E-5"
+               radical="0-149" power="1000000000"    bw="125000000"     lat="5E-5"
         bb_bw="2250000000" bb_lat="5E-4"/>
                
   <cluster id="my_cluster_2" prefix="c-" suffix=".me"
-           radical="15000-29999" power="1000000000"    bw="125000000"  lat="5E-5"
+           radical="150-299" power="1000000000"        bw="125000000"  lat="5E-5"
            bb_bw="2250000000" bb_lat="5E-4"/>  
        
      <link id="backbone" bandwidth="1250000000" latency="5E-4"/>  
diff --git a/examples/platforms/cluster_with_100000_hosts.xml b/examples/platforms/cluster_with_100000_hosts.xml
deleted file mode 100644 (file)
index 83e9d27..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-<platform version="3">
-<AS  id="AS0"  routing="Full">
-  <cluster id="my_cluster_1" prefix="c-" suffix=".me"
-               radical="0-99999"       power="1000000000"    bw="125000000"     lat="5E-5"
-        bb_bw="2250000000" bb_lat="5E-4"/>
-</AS>
-</platform>
diff --git a/examples/platforms/cluster_with_10000_hosts.xml b/examples/platforms/cluster_with_10000_hosts.xml
deleted file mode 100644 (file)
index d958dfa..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-<platform version="3">
-<AS  id="AS0"  routing="Full">
-  <cluster id="my_cluster_1" prefix="c-" suffix=".me"
-               radical="0-9999"        power="1000000000"    bw="125000000"     lat="5E-5"
-        bb_bw="2250000000" bb_lat="5E-4"/>
-</AS>
-</platform>
diff --git a/examples/platforms/cluster_with_1000_hosts.xml b/examples/platforms/cluster_with_1000_hosts.xml
deleted file mode 100644 (file)
index b4a0eb1..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-<platform version="3">
-<AS  id="AS0"  routing="Full">
-  <cluster id="my_cluster_1" prefix="c-" suffix=".me"
-               radical="0-999" power="1000000000"    bw="125000000"     lat="5E-5"
-        bb_bw="2250000000" bb_lat="5E-4"/>
-</AS>
-</platform>
diff --git a/examples/platforms/cluster_with_300000_hosts.xml b/examples/platforms/cluster_with_300000_hosts.xml
deleted file mode 100644 (file)
index efed72f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-<platform version="3">
-<AS  id="AS0"  routing="Full">
-  <cluster id="my_cluster_1" prefix="c-" suffix=".me"
-               radical="0-299999"      power="1000000000"    bw="125000000"     lat="5E-5"
-        bb_bw="2250000000" bb_lat="5E-4"/>
-</AS>
-</platform>
diff --git a/examples/platforms/cluster_with_30000_hosts.xml b/examples/platforms/cluster_with_30000_hosts.xml
deleted file mode 100644 (file)
index ac0f24e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-<platform version="3">
-<AS  id="AS0"  routing="Full">
-  <cluster id="my_cluster_1" prefix="c-" suffix=".me"
-               radical="0-29999"       power="1000000000"    bw="125000000"     lat="5E-5"
-        bb_bw="2250000000" bb_lat="5E-4"/>
-</AS>
-</platform>
index c0a6832..664ae30 100644 (file)
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-<!-- ...................................................................... -->
-<!-- ... Platform description file for GRID5000 ........................... -->
-<!-- ....................................................... 24/09/2010 ... -->
-<!-- ...................................................................... -->
-<!--
-     ../ AS file structure /............................................... 
-
-   AS_grid5000(Floyd)
-                                      _______________
-                                     |               |
-                                     | AS_chinqchint |
-                                     |_______________|
-                           _______________   |   _______________
-                          |               |  |  |               |
-                          | AS_chti       |  |  | AS_sagittaire |
-                          |_______________|  .  |_______________|
-               _______________   |    _______________   |   _______________    
-              |               |  |   |               |  |  |               |   
-              | AS_chicon     |  |   | AS_chuque     |  |  | AS_capricorne |   
-              |_______________|  |   |_______________|  |  |_______________|   
-  _______________           |    |     |     .          |    |       _______________
- |               |          |    |     |     |          |    |      |               |
- | AS_bordemer   |     _____|____|_____|_____|__________|____|_     | AS_grelon     |
- |_______________|____|                                        |____|_______________|
-  _______________     |          AS_network(Floyd)             |     _______________
- |               |    |                                        |    |               |
- | AS_bordeplage |____|                                        |____| AS_griffon    |
- |_______________|    |                                        |    |_______________|
-  _______________     |                                        |     _______________
- |               |    |                                        |    |               |
- | AS_bordereau  |____|                                        |____| AS_gdx        |
- |_______________|    |                                        |    |_______________|
-  _______________     |                                        |     _______________
- |               |    |                                        |    |               |
- | AS_borderline |____|                                        |____| AS_gdx2       |
- |_______________|    |                                        |    |_______________|
-  _______________     |                                        |     _______________ 
- |               |    |                                        |    |               | 
- | AS_pastel     |____|                                        |____| AS_azur       | 
- |_______________|    |                                        |    |_______________| 
-  _______________     |                                        |     _______________
- |               |____|                                        |    |               |
- | AS_violette   |    |________________________________________|____| AS_helios     |
- |_______________|       |     |     |     |               | |      |_______________| 
-                         |     |     |     |               | |      _______________
-             ____________|__   |     |   __|____________   | |     |               |
-            |               |  |     |  |               |  | \____-| AS_sol        |
-            | AS_paramount  |  |     |  | AS_paraquad   |  |       |_______________| 
-            |_______________|  |     |  |_______________|  |       _______________     
-                  _____________|_   _|_____________        |      |               |
-                 |               | |               |       \______| AS_suno       |
-                 | AS_paradent   | | AS_parapide   |              |_______________|
-                 |_______________| |_______________| 
-                 
-     ../ Cluster description /............................................. 
-
-        bordemer   - bordeaux | nodes=48    power=3.542E9 
-        bordeplage - bordeaux | nodes=51    power=3.464E9
-        bordereau  - bordeaux | nodes=93    power=4.389E9
-        borderline - bordeaux | nodes=10    power=4.389E9
-        chicon     - lille    | nodes=26    power=4.384E9
-        chti       - lille    | nodes=20    power=4.311E9
-        chuque     - lille    | nodes=53    power=3.647E9
-        chinqchint - lille    | nodes=46    power=5.0E9     <- not correct
-        capricorne - lyon     | nodes=56    power=3.254E9
-        sagittaire - lyon     | nodes=79    power=3.865E9
-        grelon     - nancy    | nodes=120   power=3.185E9
-        griffon    - nancy    | nodes=92    power=5.0E9     <- not correct
-        gdx        - orsay    | nodes=216   power=3.388E9
-        gdx2       - orsay    | nodes=126   power=4.04E9
-        paramount  - rennes   | nodes=33    power=4.603E9
-        paraquad   - rennes   | nodes=64    power=4.603E9
-        paradent   - rennes   | nodes=64    power=5.0E9     <- not correct
-        parapide   - rennes   | nodes=25    power=5.0E9     <- not correct
-        azur       - sophia   | nodes=48    power=3.258E9
-        helios     - sophia   | nodes=56    power=3.675E9
-        sol        - sophia   | nodes=50    power=4.389E9
-        suno       - sophia   | nodes=45    power=5.0E9     <- not correct
-        pastel     - toulouse | nodes=80    power=4.389E9
-        violette   - toulouse | nodes=57    power=3.586E9
--->
 <platform version="3">
-<AS id="AS_grid5000" routing="Floyd" >
-
-  <cluster id="AS_bordemer" prefix="bordemer-" suffix=".bordeaux.grid5000.fr"
-   radical="1-48" power="3.542E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_bordeplage" prefix="bordeplage-" suffix=".bordeaux.grid5000.fr"
-   radical="1-51" power="3.464E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_bordereau" prefix="bordereau-" suffix=".bordeaux.grid5000.fr"
-   radical="1-93" power="4.389E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_borderline" prefix="borderline-" suffix=".bordeaux.grid5000.fr"
-   radical="1-10" power="4.389E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_chicon" prefix="chicon-" suffix=".lille.grid5000.fr"
-   radical="1-26" power="4.384E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_chti" prefix="chti-" suffix=".lille.grid5000.fr"
-   radical="1-20" power="4.311E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_chuque" prefix="chuque-" suffix=".lille.grid5000.fr"
-   radical="1-53" power="3.647E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_chinqchint" prefix="chinqchint-" suffix=".lille.grid5000.fr"
-   radical="1-46" power="5.0E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_capricorne" prefix="capricorne-" suffix=".lyon.grid5000.fr"
-   radical="1-56" power="3.254E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_sagittaire" prefix="sagittaire-" suffix=".lyon.grid5000.fr"
-   radical="1-79" power="3.865E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_grelon" prefix="grelon-" suffix=".nancy.grid5000.fr"
-   radical="1-120" power="3.185E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_griffon" prefix="griffon-" suffix=".nancy.grid5000.fr"
-   radical="1-92" power="5.0E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_gdx" prefix="gdx-" suffix=".orsay.grid5000.fr"
-   radical="1-216" power="3.388E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_gdx2" prefix="gdx2-" suffix=".orsay.grid5000.fr"
-   radical="1-126" power="4.04E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_paramount" prefix="paramount-" suffix=".rennes.grid5000.fr"
-   radical="1-33" power="4.603E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_paraquad" prefix="paraquad-" suffix=".rennes.grid5000.fr"
-   radical="1-64" power="4.603E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-  
-  <cluster id="AS_paradent" prefix="paradent-" suffix=".rennes.grid5000.fr"
-   radical="1-64" power="3.364E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_parapide" prefix="parapide-" suffix=".rennes.grid5000.fr"
-   radical="1-25" power="5.0E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>   
-   
-  <cluster id="AS_azur" prefix="azur-" suffix=".sophia.grid5000.fr"
-   radical="1-48" power="3.258E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_helios" prefix="helios-" suffix=".sophia.grid5000.fr"
-   radical="1-56" power="3.675E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_sol" prefix="sol-" suffix=".sophia.grid5000.fr"
-   radical="1-50" power="4.389E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_suno" prefix="suno-" suffix=".sophia.grid5000.fr"
-   radical="1-45" power="5.0E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>  
-   
-  <cluster id="AS_pastel" prefix="pastel-" suffix=".toulouse.grid5000.fr"
-   radical="1-80" power="4.389E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-   
-  <cluster id="AS_violette" prefix="violette-" suffix=".toulouse.grid5000.fr"
-   radical="1-57" power="3.586E9" bw="1.25E8" lat="1.0E-4"
-   bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
-
-  
-  <AS id="AS_network" routing="Floyd" >
-  
-    <router id="Lille_sw"/>
-    <router id="Paris_sw"/>
-    <router id="Luxemburg_sw"/>
-    <router id="Nancy_sw"/>
-    <router id="Rennes_sw"/>
-    <router id="Bordeaux_sw"/>
-    <router id="Lyon_sw"/>
-    <router id="Grenoble_sw"/>
-    <router id="Marseille_sw"/>
-    <router id="Sophia_sw"/>
-    <router id="Toulouse_sw"/>
-    
-    <router id="Lille_gw"/>
-    <router id="Orsay_gw"/>
-    <router id="Luxemburg_gw"/>
-    <router id="Nancy_gw"/>
-    <router id="Rennes_gw"/>
-    <router id="Bordeaux_gw"/>
-    <router id="Lyon_gw"/>
-    <router id="Grenoble_gw"/>
-    <router id="Sophia_gw"/>
-    <router id="Toulouse_gw"/>
-    
-    <link id="Lille_Paris"        bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Luxemburg_Nancy"    bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Paris_Nancy"        bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Paris_Rennes"       bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Paris_Lyon"         bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Bordeaux_Lyon"      bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Lyon_Grenoble"      bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Lyon_Marseille"     bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Marseille_Sophia"   bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Marseille_Toulouse" bandwidth="1.25E9" latency="1.0E-4"/>
-    
-    <link id="Lille_sw_gw"     bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Orsay_sw_gw"     bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Luxemburg_sw_gw" bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Nancy_sw_gw"     bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Rennes_sw_gw"    bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Bordeaux_sw_gw"  bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Lyon_sw_gw"      bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Grenoble_sw_gw"  bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Sophia_sw_gw"    bandwidth="1.25E9" latency="1.0E-4"/>
-    <link id="Toulouse_sw_gw"  bandwidth="1.25E9" latency="1.0E-4"/>
-    
-    <route src="Lille_sw"     dst="Paris_sw"     ><link_ctn id="Lille_Paris"/></route>
-    <route src="Paris_sw"     dst="Lille_sw"     ><link_ctn id="Lille_Paris"/></route>
-    <route src="Luxemburg_sw" dst="Nancy_sw"     ><link_ctn id="Luxemburg_Nancy"/></route>
-    <route src="Nancy_sw"     dst="Luxemburg_sw" ><link_ctn id="Luxemburg_Nancy"/></route>
-    <route src="Paris_sw"     dst="Nancy_sw"     ><link_ctn id="Paris_Nancy"/></route>
-    <route src="Nancy_sw"     dst="Paris_sw"     ><link_ctn id="Paris_Nancy"/></route>
-    <route src="Paris_sw"     dst="Rennes_sw"    ><link_ctn id="Paris_Rennes"/></route>
-    <route src="Rennes_sw"    dst="Paris_sw"     ><link_ctn id="Paris_Rennes"/></route>
-    <route src="Paris_sw"     dst="Lyon_sw"      ><link_ctn id="Paris_Lyon"/></route>
-    <route src="Lyon_sw"      dst="Paris_sw"     ><link_ctn id="Paris_Lyon"/></route>
-    <route src="Bordeaux_sw"  dst="Lyon_sw"      ><link_ctn id="Bordeaux_Lyon"/></route>
-    <route src="Lyon_sw"      dst="Bordeaux_sw"  ><link_ctn id="Bordeaux_Lyon"/></route>
-    <route src="Lyon_sw"      dst="Grenoble_sw"  ><link_ctn id="Lyon_Grenoble"/></route>
-    <route src="Grenoble_sw"  dst="Lyon_sw"      ><link_ctn id="Lyon_Grenoble"/></route>
-    <route src="Lyon_sw"      dst="Marseille_sw" ><link_ctn id="Lyon_Marseille"/></route>
-    <route src="Marseille_sw" dst="Lyon_sw"      ><link_ctn id="Lyon_Marseille"/></route>
-    <route src="Marseille_sw" dst="Sophia_sw"    ><link_ctn id="Marseille_Sophia"/></route>
-    <route src="Sophia_sw"    dst="Marseille_sw" ><link_ctn id="Marseille_Sophia"/></route>
-    <route src="Marseille_sw" dst="Toulouse_sw"  ><link_ctn id="Marseille_Toulouse"/></route>
-    <route src="Toulouse_sw"  dst="Marseille_sw" ><link_ctn id="Marseille_Toulouse"/></route>
-    
-    <route src="Lille_gw"     dst="Lille_sw"     ><link_ctn id="Lille_sw_gw"/></route>
-    <route src="Lille_sw"     dst="Lille_gw"     ><link_ctn id="Lille_sw_gw"/></route>
-    <route src="Orsay_gw"     dst="Paris_sw"     ><link_ctn id="Orsay_sw_gw"/></route>
-    <route src="Paris_sw"     dst="Orsay_gw"     ><link_ctn id="Orsay_sw_gw"/></route>
-    <route src="Luxemburg_gw" dst="Luxemburg_sw" ><link_ctn id="Luxemburg_sw_gw"/></route>
-    <route src="Luxemburg_sw" dst="Luxemburg_gw" ><link_ctn id="Luxemburg_sw_gw"/></route>
-    <route src="Rennes_gw"    dst="Rennes_sw"    ><link_ctn id="Rennes_sw_gw"/></route>
-    <route src="Rennes_sw"    dst="Rennes_gw"    ><link_ctn id="Rennes_sw_gw"/></route>
-    <route src="Nancy_gw"     dst="Nancy_sw"     ><link_ctn id="Nancy_sw_gw"/></route>
-    <route src="Nancy_sw"     dst="Nancy_gw"     ><link_ctn id="Nancy_sw_gw"/></route>
-    <route src="Bordeaux_gw"  dst="Bordeaux_sw"  ><link_ctn id="Bordeaux_sw_gw"/></route>
-    <route src="Bordeaux_sw"  dst="Bordeaux_gw"  ><link_ctn id="Bordeaux_sw_gw"/></route>
-    <route src="Lyon_gw"      dst="Lyon_sw"      ><link_ctn id="Lyon_sw_gw"/></route>
-    <route src="Lyon_sw"      dst="Lyon_gw"      ><link_ctn id="Lyon_sw_gw"/></route>
-    <route src="Grenoble_gw"  dst="Grenoble_sw"  ><link_ctn id="Grenoble_sw_gw"/></route>
-    <route src="Grenoble_sw"  dst="Grenoble_gw"  ><link_ctn id="Grenoble_sw_gw"/></route>
-    <route src="Sophia_gw"    dst="Sophia_sw"    ><link_ctn id="Sophia_sw_gw"/></route>
-    <route src="Sophia_sw"    dst="Sophia_gw"    ><link_ctn id="Sophia_sw_gw"/></route>
-    <route src="Toulouse_gw"  dst="Toulouse_sw"  ><link_ctn id="Toulouse_sw_gw"/></route>
-    <route src="Toulouse_sw"  dst="Toulouse_gw"  ><link_ctn id="Toulouse_sw_gw"/></route>
-    
-  </AS>
-  
-  <link id="bordemer_gw"   bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="bordeplage_gw" bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="bordereau_gw"  bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="borderline_gw" bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="chicon_gw"     bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="chti_gw"       bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="chuque_gw"     bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="chinqchint_gw" bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="capricorne_gw" bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="sagittaire_gw" bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="grelon_gw"     bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="griffon_gw"    bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="gdx_gw"        bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="gdx2_gw"       bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="paramount_gw"  bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="paraquad_gw"   bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="paradent_gw"   bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="parapide_gw"   bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="azur_gw"       bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="helios_gw"     bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="sol_gw"        bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="suno_gw"       bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="pastel_gw"     bandwidth="1.25E8" latency="1.0E-4"/>
-  <link id="violette_gw"   bandwidth="1.25E8" latency="1.0E-4"/>
-  
-  <ASroute src="AS_bordemer"    dst="AS_network"     gw_src="bordemer-AS_bordemer_router.bordeaux.grid5000.fr"  gw_dst="Bordeaux_gw"    ><link_ctn id="bordemer_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_bordemer"    gw_src="Bordeaux_gw"  gw_dst="bordemer-AS_bordemer_router.bordeaux.grid5000.fr"    ><link_ctn id="bordemer_gw"/></ASroute>
-  <ASroute src="AS_bordeplage"  dst="AS_network"     gw_src="bordeplage-AS_bordeplage_router.bordeaux.grid5000.fr"   gw_dst="Bordeaux_gw" ><link_ctn id="bordeplage_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_bordeplage"  gw_src="Bordeaux_gw"  gw_dst="bordeplage-AS_bordeplage_router.bordeaux.grid5000.fr"  ><link_ctn id="bordeplage_gw"/></ASroute>
-  <ASroute src="AS_bordereau"   dst="AS_network"     gw_src="bordereau-AS_bordereau_router.bordeaux.grid5000.fr"    gw_dst="Bordeaux_gw" ><link_ctn id="bordereau_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_bordereau"   gw_src="Bordeaux_gw"  gw_dst="bordereau-AS_bordereau_router.bordeaux.grid5000.fr"   ><link_ctn id="bordereau_gw"/></ASroute>
-  <ASroute src="AS_borderline"  dst="AS_network"     gw_src="borderline-AS_borderline_router.bordeaux.grid5000.fr"   gw_dst="Bordeaux_gw" ><link_ctn id="borderline_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_borderline"  gw_src="Bordeaux_gw"  gw_dst="borderline-AS_borderline_router.bordeaux.grid5000.fr"  ><link_ctn id="borderline_gw"/></ASroute>
-  <ASroute src="AS_chicon"      dst="AS_network"     gw_src="chicon-AS_chicon_router.lille.grid5000.fr"       gw_dst="Lille_gw"       ><link_ctn id="chicon_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_chicon"      gw_src="Lille_gw"     gw_dst="chicon-AS_chicon_router.lille.grid5000.fr"         ><link_ctn id="chicon_gw"/></ASroute>
-  <ASroute src="AS_chti"        dst="AS_network"     gw_src="chti-AS_chti_router.lille.grid5000.fr"         gw_dst="Lille_gw"       ><link_ctn id="chti_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_chti"        gw_src="Lille_gw"     gw_dst="chti-AS_chti_router.lille.grid5000.fr"           ><link_ctn id="chti_gw"/></ASroute>
-  <ASroute src="AS_chuque"      dst="AS_network"     gw_src="chuque-AS_chuque_router.lille.grid5000.fr"       gw_dst="Lille_gw"       ><link_ctn id="chuque_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_chuque"      gw_src="Lille_gw"     gw_dst="chuque-AS_chuque_router.lille.grid5000.fr"         ><link_ctn id="chuque_gw"/></ASroute>
-  <ASroute src="AS_chinqchint"  dst="AS_network"     gw_src="chinqchint-AS_chinqchint_router.lille.grid5000.fr"       gw_dst="Lille_gw"   ><link_ctn id="chinqchint_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_chinqchint"  gw_src="Lille_gw"     gw_dst="chinqchint-AS_chinqchint_router.lille.grid5000.fr"     ><link_ctn id="chinqchint_gw"/></ASroute>
-  <ASroute src="AS_capricorne"  dst="AS_network"     gw_src="capricorne-AS_capricorne_router.lyon.grid5000.fr"   gw_dst="Lyon_gw"         ><link_ctn id="capricorne_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_capricorne"  gw_src="Lyon_gw"      gw_dst="capricorne-AS_capricorne_router.lyon.grid5000.fr"      ><link_ctn id="capricorne_gw"/></ASroute>
-  <ASroute src="AS_sagittaire"  dst="AS_network"     gw_src="sagittaire-AS_sagittaire_router.lyon.grid5000.fr"   gw_dst="Lyon_gw"         ><link_ctn id="sagittaire_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_sagittaire"  gw_src="Lyon_gw"      gw_dst="sagittaire-AS_sagittaire_router.lyon.grid5000.fr"      ><link_ctn id="sagittaire_gw"/></ASroute>
-  <ASroute src="AS_grelon"      dst="AS_network"     gw_src="grelon-AS_grelon_router.nancy.grid5000.fr"       gw_dst="Nancy_gw"       ><link_ctn id="grelon_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_grelon"      gw_src="Nancy_gw"     gw_dst="grelon-AS_grelon_router.nancy.grid5000.fr"         ><link_ctn id="grelon_gw"/></ASroute>
-  <ASroute src="AS_griffon"     dst="AS_network"     gw_src="griffon-AS_griffon_router.nancy.grid5000.fr"      gw_dst="Nancy_gw"       ><link_ctn id="griffon_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_griffon"     gw_src="Nancy_gw"     gw_dst="griffon-AS_griffon_router.nancy.grid5000.fr"        ><link_ctn id="griffon_gw"/></ASroute>
-  <ASroute src="AS_gdx"         dst="AS_network"     gw_src="gdx-AS_gdx_router.orsay.grid5000.fr"          gw_dst="Orsay_gw"       ><link_ctn id="gdx_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_gdx"         gw_src="Orsay_gw"     gw_dst="gdx-AS_gdx_router.orsay.grid5000.fr"            ><link_ctn id="gdx_gw"/></ASroute>
-  <ASroute src="AS_gdx2"        dst="AS_network"     gw_src="gdx2-AS_gdx2_router.orsay.grid5000.fr"         gw_dst="Orsay_gw"       ><link_ctn id="gdx2_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_gdx2"        gw_src="Orsay_gw"     gw_dst="gdx2-AS_gdx2_router.orsay.grid5000.fr"           ><link_ctn id="gdx2_gw"/></ASroute>
-  <ASroute src="AS_paramount"   dst="AS_network"     gw_src="paramount-AS_paramount_router.rennes.grid5000.fr"    gw_dst="Rennes_gw"     ><link_ctn id="paramount_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_paramount"   gw_src="Rennes_gw"    gw_dst="paramount-AS_paramount_router.rennes.grid5000.fr"     ><link_ctn id="paramount_gw"/></ASroute>
-  <ASroute src="AS_paraquad"    dst="AS_network"     gw_src="paraquad-AS_paraquad_router.rennes.grid5000.fr"     gw_dst="Rennes_gw"     ><link_ctn id="paraquad_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_paraquad"    gw_src="Rennes_gw"    gw_dst="paraquad-AS_paraquad_router.rennes.grid5000.fr"      ><link_ctn id="paraquad_gw"/></ASroute>
-  <ASroute src="AS_paradent"     dst="AS_network"     gw_src="paradent-AS_paradent_router.rennes.grid5000.fr"      gw_dst="Rennes_gw"   ><link_ctn id="paradent_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_paradent"     gw_src="Rennes_gw"    gw_dst="paradent-AS_paradent_router.rennes.grid5000.fr"     ><link_ctn id="paradent_gw"/></ASroute>
-  <ASroute src="AS_parapide"    dst="AS_network"     gw_src="parapide-AS_parapide_router.rennes.grid5000.fr"     gw_dst="Rennes_gw"     ><link_ctn id="parapide_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_parapide"    gw_src="Rennes_gw"    gw_dst="parapide-AS_parapide_router.rennes.grid5000.fr"      ><link_ctn id="parapide_gw"/></ASroute>
-  <ASroute src="AS_azur"        dst="AS_network"     gw_src="azur-AS_azur_router.sophia.grid5000.fr"         gw_dst="Sophia_gw"     ><link_ctn id="azur_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_azur"        gw_src="Sophia_gw"    gw_dst="azur-AS_azur_router.sophia.grid5000.fr"          ><link_ctn id="azur_gw"/></ASroute>
-  <ASroute src="AS_helios"      dst="AS_network"     gw_src="helios-AS_helios_router.sophia.grid5000.fr"       gw_dst="Sophia_gw"     ><link_ctn id="helios_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_helios"      gw_src="Sophia_gw"    gw_dst="helios-AS_helios_router.sophia.grid5000.fr"        ><link_ctn id="helios_gw"/></ASroute>
-  <ASroute src="AS_sol"         dst="AS_network"     gw_src="sol-AS_sol_router.sophia.grid5000.fr"          gw_dst="Sophia_gw"     ><link_ctn id="sol_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_sol"         gw_src="Sophia_gw"    gw_dst="sol-AS_sol_router.sophia.grid5000.fr"           ><link_ctn id="sol_gw"/></ASroute>
-  <ASroute src="AS_suno"        dst="AS_network"     gw_src="suno-AS_suno_router.sophia.grid5000.fr"          gw_dst="Sophia_gw"    ><link_ctn id="suno_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_suno"        gw_src="Sophia_gw"    gw_dst="suno-AS_suno_router.sophia.grid5000.fr"          ><link_ctn id="suno_gw"/></ASroute>
-  <ASroute src="AS_pastel"      dst="AS_network"     gw_src="pastel-AS_pastel_router.toulouse.grid5000.fr"       gw_dst="Toulouse_gw" ><link_ctn id="pastel_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_pastel"      gw_src="Toulouse_gw"  gw_dst="pastel-AS_pastel_router.toulouse.grid5000.fr"      ><link_ctn id="pastel_gw"/></ASroute>
-  <ASroute src="AS_violette"    dst="AS_network"     gw_src="violette-AS_violette_router.toulouse.grid5000.fr"     gw_dst="Toulouse_gw" ><link_ctn id="violette_gw"/></ASroute>
-  <ASroute src="AS_network"     dst="AS_violette"    gw_src="Toulouse_gw"  gw_dst="violette-AS_violette_router.toulouse.grid5000.fr"    ><link_ctn id="violette_gw"/></ASroute>
-    
-</AS>
+       <AS id="AS_grid5000" routing="Floyd" >
+               <AS id="AS_interne" routing="Floyd">
+                       <router id="lille"/>
+                       <router id="paris"/>
+                       <router id="nancy"/>
+                       <router id="rennes"/>
+                       <router id="lyon"/>
+                       <router id="bordeaux"/>
+                       <router id="grenoble"/>
+                       <router id="marseille"/>
+                       <router id="toulouse"/>
+                       <router id="sophia"/>
 
+                       <link id="Lille_Paris"        bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Paris_Nancy"        bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Paris_Rennes"       bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Paris_Lyon"         bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Bordeaux_Lyon"      bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Lyon_Grenoble"      bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Lyon_Marseille"     bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Marseille_Sophia"   bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Marseille_Toulouse" bandwidth="1.25E9" latency="1.0E-4"/>
+
+               <route src="lille"     dst="paris"     ><link_ctn id="Lille_Paris"/></route>
+               <route src="paris"     dst="nancy"     ><link_ctn id="Paris_Nancy"/></route>
+               <route src="paris"     dst="rennes"    ><link_ctn id="Paris_Rennes"/></route>
+               <route src="paris"     dst="lyon"      ><link_ctn id="Paris_Lyon"/></route>
+               <route src="bordeaux"  dst="lyon"      ><link_ctn id="Bordeaux_Lyon"/></route>
+               <route src="lyon"      dst="grenoble"  ><link_ctn id="Lyon_Grenoble"/></route>
+               <route src="lyon"      dst="marseille" ><link_ctn id="Lyon_Marseille"/></route>
+               <route src="marseille" dst="sophia"    ><link_ctn id="Marseille_Sophia"/></route>
+               <route src="marseille" dst="toulouse"  ><link_ctn id="Marseille_Toulouse"/></route>
+               </AS>
+               <AS id="AS_bordeaux" routing="RuleBased" >
+                       <cluster id="AS_bordeplage" prefix="bordeplage-" suffix=".bordeaux.grid5000.fr"
+                               radical="1-51" power="5.2297E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_bordeplage" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_bordereau" prefix="bordereau-" suffix=".bordeaux.grid5000.fr"
+                               radical="1-93" power="8.8925E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_bordereau" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_borderline" prefix="borderline-" suffix=".bordeaux.grid5000.fr"
+                               radical="1-10" power="13.357E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_borderline" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_bordeaux" routing="Full">
+                               <router id="gw_bordeaux"/>
+                       </AS>
+                       <link   id="link_gw_bordeaux" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.bordeaux.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.bordeaux.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.bordeaux.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.bordeaux.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_grenoble" routing="RuleBased" >
+                       <cluster id="AS_adonis" prefix="adonis-" suffix=".grenoble.grid5000.fr"
+                               radical="1-12" power="23.681E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_adonis" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_edel" prefix="edel-" suffix=".grenoble.grid5000.fr"
+                               radical="1-72" power="23.492E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_edel" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_genepi" prefix="genepi-" suffix=".grenoble.grid5000.fr"
+                               radical="1-34" power="21.175E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_genepi" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_grenoble" routing="Full">
+                               <router id="gw_grenoble"/>
+                       </AS>
+                       <link   id="link_gw_grenoble" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.grenoble.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.grenoble.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.grenoble.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.grenoble.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_lille" routing="RuleBased" >
+                       <cluster id="AS_chicon" prefix="chicon-" suffix=".lille.grid5000.fr"
+                               radical="1-26" power="8.9618E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_chicon" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_chimint" prefix="chimint-" suffix=".lille.grid5000.fr"
+                               radical="1-20" power="23.531E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_chimint" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_chinqchint" prefix="chinqchint-" suffix=".lille.grid5000.fr"
+                               radical="1-46" power="22.270E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_chinqchint" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_chirloute" prefix="chirloute-" suffix=".lille.grid5000.fr"
+                               radical="1-8" power="24.473E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_chirloute" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_lille" routing="Full">
+                               <router id="gw_lille"/>
+                       </AS>
+                       <link   id="link_gw_lille" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.lille.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.lille.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.lille.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.lille.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_lyon" routing="RuleBased" >
+                       <cluster id="AS_capricorne" prefix="capricorne-" suffix=".lyon.grid5000.fr"
+                               radical="1-56" power="4.7233E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_capricorne" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_sagittaire" prefix="sagittaire-" suffix=".lyon.grid5000.fr"
+                               radical="1-79" power="5.6693E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_sagittaire" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_lyon" routing="Full">
+                               <router id="gw_lyon"/>
+                       </AS>
+                       <link   id="link_gw_lyon" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.lyon.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.lyon.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.lyon.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.lyon.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_nancy" routing="RuleBased" >
+                       <cluster id="AS_graphene" prefix="graphene-" suffix=".nancy.grid5000.fr"
+                               radical="1-144" power="16.673E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_graphene" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_griffon" prefix="griffon-" suffix=".nancy.grid5000.fr"
+                               radical="1-92" power="20.678E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_griffon" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_nancy" routing="Full">
+                               <router id="gw_nancy"/>
+                       </AS>
+                       <link   id="link_gw_nancy" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.nancy.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.nancy.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.nancy.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.nancy.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_orsay" routing="RuleBased" >
+                       <cluster id="AS_gdx" prefix="gdx-" suffix=".orsay.grid5000.fr"
+                               radical="1-310" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_gdx" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_netgdx" prefix="netgdx-" suffix=".orsay.grid5000.fr"
+                               radical="1-30" power="4.7144E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_netgdx" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_orsay" routing="Full">
+                               <router id="gw_orsay"/>
+                       </AS>
+                       <link   id="link_gw_orsay" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.orsay.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.orsay.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.orsay.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.orsay.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_rennes" routing="RuleBased" >
+                       <cluster id="AS_paradent" prefix="paradent-" suffix=".rennes.grid5000.fr"
+                               radical="1-64" power="21.496E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_paradent" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_paramount" prefix="paramount-" suffix=".rennes.grid5000.fr"
+                               radical="1-33" power="12.910E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_paramount" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_parapide" prefix="parapide-" suffix=".rennes.grid5000.fr"
+                               radical="1-25" power="30.130E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_parapide" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_parapluie" prefix="parapluie-" suffix=".rennes.grid5000.fr"
+                               radical="1-40" power="27.391E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_parapluie" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_rennes" routing="Full">
+                               <router id="gw_rennes"/>
+                       </AS>
+                       <link   id="link_gw_rennes" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.rennes.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.rennes.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.rennes.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.rennes.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_sophia" routing="RuleBased" >
+                       <cluster id="AS_helios" prefix="helios-" suffix=".sophia.grid5000.fr"
+                               radical="1-56" power="7.7318E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_helios" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_sol" prefix="sol-" suffix=".sophia.grid5000.fr"
+                               radical="1-50" power="8.9388E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_sol" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_suno" prefix="suno-" suffix=".sophia.grid5000.fr"
+                               radical="1-45" power="23.530E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_suno" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_sophia" routing="Full">
+                               <router id="gw_sophia"/>
+                       </AS>
+                       <link   id="link_gw_sophia" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.sophia.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.sophia.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.sophia.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.sophia.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_toulouse" routing="RuleBased" >
+                       <cluster id="AS_pastel" prefix="pastel-" suffix=".toulouse.grid5000.fr"
+                               radical="1-80" power="9.5674E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_pastel" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_violette" prefix="violette-" suffix=".toulouse.grid5000.fr"
+                               radical="1-52" power="5.1143E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_violette" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_toulouse" routing="Full">
+                               <router id="gw_toulouse"/>
+                       </AS>
+                       <link   id="link_gw_toulouse" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.toulouse.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.toulouse.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.toulouse.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.toulouse.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <ASroute src="AS_toulouse" dst="AS_interne" gw_src="gw_toulouse" gw_dst="toulouse" symmetrical="YES">
+                       <link_ctn id="link_gw_toulouse"/>
+               </ASroute>
+               <ASroute src="AS_sophia" dst="AS_interne" gw_src="gw_sophia" gw_dst="sophia" symmetrical="YES">
+                       <link_ctn id="link_gw_sophia"/>
+               </ASroute>
+               <ASroute src="AS_rennes" dst="AS_interne" gw_src="gw_rennes" gw_dst="rennes" symmetrical="YES">
+                       <link_ctn id="link_gw_rennes"/>
+               </ASroute>
+               <ASroute src="AS_orsay" dst="AS_interne" gw_src="gw_orsay" gw_dst="paris" symmetrical="YES">
+                       <link_ctn id="link_gw_orsay"/>
+               </ASroute>
+               <ASroute src="AS_nancy" dst="AS_interne" gw_src="gw_nancy" gw_dst="nancy" symmetrical="YES">
+                       <link_ctn id="link_gw_nancy"/>
+               </ASroute>
+               <ASroute src="AS_lyon" dst="AS_interne" gw_src="gw_lyon" gw_dst="lyon" symmetrical="YES">
+                       <link_ctn id="link_gw_lyon"/>
+               </ASroute>
+               <ASroute src="AS_lille" dst="AS_interne" gw_src="gw_lille" gw_dst="lille" symmetrical="YES">
+                       <link_ctn id="link_gw_lille"/>
+               </ASroute>
+               <ASroute src="AS_grenoble" dst="AS_interne" gw_src="gw_grenoble" gw_dst="grenoble" symmetrical="YES">
+                       <link_ctn id="link_gw_grenoble"/>
+               </ASroute>
+               <ASroute src="AS_bordeaux" dst="AS_interne" gw_src="gw_bordeaux" gw_dst="bordeaux" symmetrical="YES">
+                       <link_ctn id="link_gw_bordeaux"/>
+               </ASroute>
+       </AS>
 </platform>
diff --git a/examples/platforms/g5k_cabinets.xml b/examples/platforms/g5k_cabinets.xml
new file mode 100644 (file)
index 0000000..dfb9502
--- /dev/null
@@ -0,0 +1,565 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+       <AS id="AS_grid5000" routing="Floyd" >
+               <AS id="AS_interne" routing="Floyd">
+                       <router id="lille"/>
+                       <router id="paris"/>
+                       <router id="nancy"/>
+                       <router id="rennes"/>
+                       <router id="lyon"/>
+                       <router id="bordeaux"/>
+                       <router id="grenoble"/>
+                       <router id="marseille"/>
+                       <router id="toulouse"/>
+                       <router id="sophia"/>
+
+                       <link id="Lille_Paris"        bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Paris_Nancy"        bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Paris_Rennes"       bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Paris_Lyon"         bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Bordeaux_Lyon"      bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Lyon_Grenoble"      bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Lyon_Marseille"     bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Marseille_Sophia"   bandwidth="1.25E9" latency="1.0E-4"/>
+                       <link id="Marseille_Toulouse" bandwidth="1.25E9" latency="1.0E-4"/>
+
+               <route src="lille"     dst="paris"     ><link_ctn id="Lille_Paris"/></route>
+               <route src="paris"     dst="nancy"     ><link_ctn id="Paris_Nancy"/></route>
+               <route src="paris"     dst="rennes"    ><link_ctn id="Paris_Rennes"/></route>
+               <route src="paris"     dst="lyon"      ><link_ctn id="Paris_Lyon"/></route>
+               <route src="bordeaux"  dst="lyon"      ><link_ctn id="Bordeaux_Lyon"/></route>
+               <route src="lyon"      dst="grenoble"  ><link_ctn id="Lyon_Grenoble"/></route>
+               <route src="lyon"      dst="marseille" ><link_ctn id="Lyon_Marseille"/></route>
+               <route src="marseille" dst="sophia"    ><link_ctn id="Marseille_Sophia"/></route>
+               <route src="marseille" dst="toulouse"  ><link_ctn id="Marseille_Toulouse"/></route>
+               </AS>
+               <AS id="AS_bordeaux" routing="RuleBased" >
+                       <cluster id="AS_bordeplage" prefix="bordeplage-" suffix=".bordeaux.grid5000.fr"
+                               radical="1-51" power="5.2297E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_bordeplage" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_bordereau" prefix="bordereau-" suffix=".bordeaux.grid5000.fr"
+                               radical="1-93" power="8.8925E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_bordereau" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_borderline" prefix="borderline-" suffix=".bordeaux.grid5000.fr"
+                               radical="1-10" power="13.357E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_borderline" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_bordeaux" routing="Full">
+                               <router id="gw_bordeaux"/>
+                       </AS>
+                       <link   id="link_gw_bordeaux" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.bordeaux.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.bordeaux.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.bordeaux.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.bordeaux.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_grenoble" routing="RuleBased" >
+                       <cluster id="AS_adonis" prefix="adonis-" suffix=".grenoble.grid5000.fr"
+                               radical="1-12" power="23.681E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_adonis" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_edel" prefix="edel-" suffix=".grenoble.grid5000.fr"
+                               radical="1-72" power="23.492E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_edel" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_genepi" prefix="genepi-" suffix=".grenoble.grid5000.fr"
+                               radical="1-34" power="21.175E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_genepi" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_grenoble" routing="Full">
+                               <router id="gw_grenoble"/>
+                       </AS>
+                       <link   id="link_gw_grenoble" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.grenoble.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.grenoble.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.grenoble.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.grenoble.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_lille" routing="RuleBased" >
+                       <cluster id="AS_chicon" prefix="chicon-" suffix=".lille.grid5000.fr"
+                               radical="1-26" power="8.9618E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_chicon" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_chimint" prefix="chimint-" suffix=".lille.grid5000.fr"
+                               radical="1-20" power="23.531E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_chimint" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_chinqchint" prefix="chinqchint-" suffix=".lille.grid5000.fr"
+                               radical="1-46" power="22.270E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_chinqchint" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_chirloute" prefix="chirloute-" suffix=".lille.grid5000.fr"
+                               radical="1-8" power="24.473E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_chirloute" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_lille" routing="Full">
+                               <router id="gw_lille"/>
+                       </AS>
+                       <link   id="link_gw_lille" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.lille.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.lille.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.lille.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.lille.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_lyon" routing="RuleBased" >
+                       <cluster id="AS_capricorne" prefix="capricorne-" suffix=".lyon.grid5000.fr"
+                               radical="1-56" power="4.7233E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_capricorne" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_sagittaire" prefix="sagittaire-" suffix=".lyon.grid5000.fr"
+                               radical="1-79" power="5.6693E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_sagittaire" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_lyon" routing="Full">
+                               <router id="gw_lyon"/>
+                       </AS>
+                       <link   id="link_gw_lyon" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.lyon.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.lyon.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.lyon.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.lyon.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_nancy" routing="RuleBased" >
+                       <AS id="AS_graphene" routing="RuleBased" >
+                               <cluster id="AS_sgraphene1" prefix="graphene-" suffix=".nancy.grid5000.fr"
+                                       radical="1-39" power="16.673E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_sgraphene2" prefix="graphene-" suffix=".nancy.grid5000.fr"
+                                       radical="40-74" power="16.673E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_sgraphene3" prefix="graphene-" suffix=".nancy.grid5000.fr"
+                                       radical="75-104" power="16.673E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_sgraphene4" prefix="graphene-" suffix=".nancy.grid5000.fr"
+                                       radical="105-144" power="16.673E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+
+                               <AS id="gw_AS_graphene" routing="Full">
+                                       <router id="graphene-AS_graphene_router.nancy.grid5000.fr"/>
+                               </AS>
+                               <link id="switch-graphene" bandwidth="1250000000" latency="5E-4"/>
+
+                               <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                                gw_src="graphene-AS_$1src_router.nancy.grid5000.fr"
+                                gw_dst="graphene-AS_$1dst_router.nancy.grid5000.fr">
+                                       <link_ctn id="switch-graphene"/>
+                               </ASroute>
+                               <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                                gw_src="graphene-AS_$1src_router.nancy.grid5000.fr"
+                                gw_dst="graphene-AS_graphene_router.nancy.grid5000.fr">
+                                       <link_ctn id="switch-graphene"/>
+                               </ASroute>
+                               <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                                gw_src="graphene-AS_graphene_router.nancy.grid5000.fr"
+                                gw_dst="graphene-AS_$1dst_router.nancy.grid5000.fr">
+                                       <link_ctn id="switch-graphene"/>
+                               </ASroute>
+                       </AS>
+                       <link   id="link_graphene" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="AS_griffon" routing="RuleBased" >
+                               <cluster id="AS_sgriffon1" prefix="griffon-" suffix=".nancy.grid5000.fr"
+                                       radical="1-29;58-60" power="20.678E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_sgriffon2" prefix="griffon-" suffix=".nancy.grid5000.fr"
+                                       radical="30-57" power="20.678E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_sgriffon3" prefix="griffon-" suffix=".nancy.grid5000.fr"
+                                       radical="61-92" power="20.678E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+
+                               <AS id="gw_AS_griffon" routing="Full">
+                                       <router id="griffon-AS_griffon_router.nancy.grid5000.fr"/>
+                               </AS>
+                               <link id="switch-griffon" bandwidth="1250000000" latency="5E-4"/>
+
+                               <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                                gw_src="griffon-AS_$1src_router.nancy.grid5000.fr"
+                                gw_dst="griffon-AS_$1dst_router.nancy.grid5000.fr">
+                                       <link_ctn id="switch-griffon"/>
+                               </ASroute>
+                               <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                                gw_src="griffon-AS_$1src_router.nancy.grid5000.fr"
+                                gw_dst="griffon-AS_griffon_router.nancy.grid5000.fr">
+                                       <link_ctn id="switch-griffon"/>
+                               </ASroute>
+                               <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                                gw_src="griffon-AS_griffon_router.nancy.grid5000.fr"
+                                gw_dst="griffon-AS_$1dst_router.nancy.grid5000.fr">
+                                       <link_ctn id="switch-griffon"/>
+                               </ASroute>
+                       </AS>
+                       <link   id="link_griffon" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_nancy" routing="Full">
+                               <router id="gw_nancy"/>
+                       </AS>
+                       <link   id="link_gw_nancy" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.nancy.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.nancy.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.nancy.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.nancy.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_orsay" routing="RuleBased" >
+                       <AS id="AS_gdx" routing="RuleBased" >
+                               <cluster id="AS_netgear01.orsay.grid5000.fr" prefix="gdx-" suffix=".orsay.grid5000.fr"
+                                       radical="1-36" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_netgear02.orsay.grid5000.fr" prefix="gdx-" suffix=".orsay.grid5000.fr"
+                                       radical="37-72" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_netgear03.orsay.grid5000.fr" prefix="gdx-" suffix=".orsay.grid5000.fr"
+                                       radical="73-108" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_netgear04.orsay.grid5000.fr" prefix="gdx-" suffix=".orsay.grid5000.fr"
+                                       radical="109-144" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_netgear05.orsay.grid5000.fr" prefix="gdx-" suffix=".orsay.grid5000.fr"
+                                       radical="145-180" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_netgear06.orsay.grid5000.fr" prefix="gdx-" suffix=".orsay.grid5000.fr"
+                                       radical="193-216" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_netgear07.orsay.grid5000.fr" prefix="gdx-" suffix=".orsay.grid5000.fr"
+                                       radical="217-252" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_netgear08.orsay.grid5000.fr" prefix="gdx-" suffix=".orsay.grid5000.fr"
+                                       radical="253-288" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_procurve-bmc-09.orsay.grid5000.fr" prefix="gdx-" suffix=".orsay.grid5000.fr"
+                                       radical="289-310" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_switch14.orsay.grid5000.fr" prefix="gdx-" suffix=".orsay.grid5000.fr"
+                                       radical="181-186" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                               <cluster id="AS_switch15.orsay.grid5000.fr" prefix="gdx-" suffix=".orsay.grid5000.fr"
+                                       radical="187-192" power="4.7153E9" bw="1.25E8" lat="1.0E-4"
+                                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+
+                               <AS id="gw_AS_gdx" routing="Full">
+                                       <router id="gdx-AS_gdx_router.orsay.grid5000.fr"/>
+                               </AS>
+                               <link id="switch-gdx" bandwidth="1250000000" latency="5E-4"/>
+
+                               <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                                gw_src="gdx-AS_$1src_router.orsay.grid5000.fr"
+                                gw_dst="gdx-AS_$1dst_router.orsay.grid5000.fr">
+                                       <link_ctn id="switch-gdx"/>
+                               </ASroute>
+                               <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                                gw_src="gdx-AS_$1src_router.orsay.grid5000.fr"
+                                gw_dst="gdx-AS_gdx_router.orsay.grid5000.fr">
+                                       <link_ctn id="switch-gdx"/>
+                               </ASroute>
+                               <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                                gw_src="gdx-AS_gdx_router.orsay.grid5000.fr"
+                                gw_dst="gdx-AS_$1dst_router.orsay.grid5000.fr">
+                                       <link_ctn id="switch-gdx"/>
+                               </ASroute>
+                       </AS>
+                       <link   id="link_gdx" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_netgdx" prefix="netgdx-" suffix=".orsay.grid5000.fr"
+                               radical="1-30" power="4.7144E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_netgdx" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_orsay" routing="Full">
+                               <router id="gw_orsay"/>
+                       </AS>
+                       <link   id="link_gw_orsay" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.orsay.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.orsay.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.orsay.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.orsay.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_rennes" routing="RuleBased" >
+                       <cluster id="AS_paradent" prefix="paradent-" suffix=".rennes.grid5000.fr"
+                               radical="1-64" power="21.496E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_paradent" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_paramount" prefix="paramount-" suffix=".rennes.grid5000.fr"
+                               radical="1-33" power="12.910E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_paramount" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_parapide" prefix="parapide-" suffix=".rennes.grid5000.fr"
+                               radical="1-25" power="30.130E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_parapide" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_parapluie" prefix="parapluie-" suffix=".rennes.grid5000.fr"
+                               radical="1-40" power="27.391E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_parapluie" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_rennes" routing="Full">
+                               <router id="gw_rennes"/>
+                       </AS>
+                       <link   id="link_gw_rennes" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.rennes.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.rennes.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.rennes.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.rennes.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_sophia" routing="RuleBased" >
+                       <cluster id="AS_helios" prefix="helios-" suffix=".sophia.grid5000.fr"
+                               radical="1-56" power="7.7318E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_helios" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_sol" prefix="sol-" suffix=".sophia.grid5000.fr"
+                               radical="1-50" power="8.9388E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_sol" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_suno" prefix="suno-" suffix=".sophia.grid5000.fr"
+                               radical="1-45" power="23.530E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_suno" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_sophia" routing="Full">
+                               <router id="gw_sophia"/>
+                       </AS>
+                       <link   id="link_gw_sophia" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.sophia.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.sophia.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.sophia.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.sophia.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <AS id="AS_toulouse" routing="RuleBased" >
+                       <cluster id="AS_pastel" prefix="pastel-" suffix=".toulouse.grid5000.fr"
+                               radical="1-80" power="9.5674E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_pastel" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <cluster id="AS_violette" prefix="violette-" suffix=".toulouse.grid5000.fr"
+                               radical="1-52" power="5.1143E9" bw="1.25E8" lat="1.0E-4"
+                               bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+                       <link   id="link_violette" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <AS id="gw_AS_toulouse" routing="Full">
+                               <router id="gw_toulouse"/>
+                       </AS>
+                       <link   id="link_gw_toulouse" bandwidth="1.25E9" latency="1.0E-4"/>
+
+                       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.toulouse.grid5000.fr"
+                               gw_dst="$1dst-AS_$1dst_router.toulouse.grid5000.fr"
+                               symmetrical="YES">
+                                       <link_ctn id="link_$1src"/>
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+                       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                               gw_src="$1src-AS_$1src_router.toulouse.grid5000.fr"
+                               gw_dst="gw_$1dst"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1src"/>
+                       </ASroute>
+
+                       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                               gw_src="gw_$1src"
+                               gw_dst="$1dst-AS_$1dst_router.toulouse.grid5000.fr"
+                               symmetrical="NO">
+                                       <link_ctn id="link_$1dst"/>
+                       </ASroute>
+
+               </AS>
+               <ASroute src="AS_toulouse" dst="AS_interne" gw_src="gw_toulouse" gw_dst="toulouse" symmetrical="YES">
+                       <link_ctn id="link_gw_toulouse"/>
+               </ASroute>
+               <ASroute src="AS_sophia" dst="AS_interne" gw_src="gw_sophia" gw_dst="sophia" symmetrical="YES">
+                       <link_ctn id="link_gw_sophia"/>
+               </ASroute>
+               <ASroute src="AS_rennes" dst="AS_interne" gw_src="gw_rennes" gw_dst="rennes" symmetrical="YES">
+                       <link_ctn id="link_gw_rennes"/>
+               </ASroute>
+               <ASroute src="AS_orsay" dst="AS_interne" gw_src="gw_orsay" gw_dst="paris" symmetrical="YES">
+                       <link_ctn id="link_gw_orsay"/>
+               </ASroute>
+               <ASroute src="AS_nancy" dst="AS_interne" gw_src="gw_nancy" gw_dst="nancy" symmetrical="YES">
+                       <link_ctn id="link_gw_nancy"/>
+               </ASroute>
+               <ASroute src="AS_lyon" dst="AS_interne" gw_src="gw_lyon" gw_dst="lyon" symmetrical="YES">
+                       <link_ctn id="link_gw_lyon"/>
+               </ASroute>
+               <ASroute src="AS_lille" dst="AS_interne" gw_src="gw_lille" gw_dst="lille" symmetrical="YES">
+                       <link_ctn id="link_gw_lille"/>
+               </ASroute>
+               <ASroute src="AS_grenoble" dst="AS_interne" gw_src="gw_grenoble" gw_dst="grenoble" symmetrical="YES">
+                       <link_ctn id="link_gw_grenoble"/>
+               </ASroute>
+               <ASroute src="AS_bordeaux" dst="AS_interne" gw_src="gw_bordeaux" gw_dst="bordeaux" symmetrical="YES">
+                       <link_ctn id="link_gw_bordeaux"/>
+               </ASroute>
+       </AS>
+</platform>
diff --git a/examples/platforms/gdx.xml b/examples/platforms/gdx.xml
new file mode 100644 (file)
index 0000000..1ab2acc
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+<AS id="AS_orsay" routing="RuleBased">
+
+       <cluster id="AS_gdx-switch15" prefix="gdx-" suffix=".orsay.grid5000.fr"
+       radical="181-186" power="3.388E9" bw="1.25E8" lat="17.8E-6"
+       bb_bw="1.25E8" bb_lat="17.8E-6"/>
+       <cluster id="AS_gdx-switch18" prefix="gdx-" suffix=".orsay.grid5000.fr"
+       radical="145-162" power="3.388E9" bw="1.25E8" lat="17.8E-6"
+       bb_bw="1.25E8" bb_lat="17.8E-6"/>
+       <cluster id="AS_gdx-switch17" prefix="gdx-" suffix=".orsay.grid5000.fr"
+       radical="163-180" power="3.388E9" bw="1.25E8" lat="17.8E-6"
+       bb_bw="1.25E8" bb_lat="17.8E-6"/>       
+       <cluster id="AS_gdx-switch05" prefix="gdx-" suffix=".orsay.grid5000.fr"
+       radical="91-108" power="3.388E9" bw="1.25E8" lat="17.8E-6"
+       bb_bw="1.25E8" bb_lat="17.8E-6"/>
+       <cluster id="AS_gdx-switch03" prefix="gdx-" suffix=".orsay.grid5000.fr"
+       radical="109-126" power="3.388E9" bw="1.25E8" lat="17.8E-6"
+       bb_bw="1.25E8" bb_lat="17.8E-6"/>
+       <cluster id="AS_gdx-switch02" prefix="gdx-" suffix=".orsay.grid5000.fr"
+       radical="127-144" power="3.388E9" bw="1.25E8" lat="17.8E-6"
+       bb_bw="1.25E8" bb_lat="17.8E-6"/>
+       <cluster id="AS_gdx-switch08" prefix="gdx-" suffix=".orsay.grid5000.fr"
+       radical="55-72" power="3.388E9" bw="1.25E8" lat="17.8E-6"
+       bb_bw="1.25E8" bb_lat="17.8E-6"/>
+       <cluster id="AS_gdx-switch06" prefix="gdx-" suffix=".orsay.grid5000.fr"
+       radical="73-90" power="3.388E9" bw="1.25E8" lat="17.8E-6"
+       bb_bw="1.25E8" bb_lat="17.8E-6"/>
+       <cluster id="AS_gdx-switch09" prefix="gdx-" suffix=".orsay.grid5000.fr"
+       radical="37-54" power="3.388E9" bw="1.25E8" lat="17.8E-6"
+       bb_bw="1.25E8" bb_lat="17.8E-6"/>
+       <cluster id="AS_gdx-switch12" prefix="gdx-" suffix=".orsay.grid5000.fr"
+       radical="19-36" power="3.388E9" bw="1.25E8" lat="17.8E-6"
+       bb_bw="1.25E8" bb_lat="17.8E-6"/>
+       <cluster id="AS_gdx-switch11" prefix="gdx-" suffix=".orsay.grid5000.fr"
+       radical="1-18" power="3.388E9" bw="1.25E8" lat="17.8E-6"
+       bb_bw="1.25E8" bb_lat="17.8E-6"/>
+
+       <AS id="AS_network" routing="Floyd" >
+       <link id="gdx_main" bandwidth="1.25E8" latency="17.8E-6"/>
+       </AS>
+       
+       <ASroute src="AS_(.*)"    dst="AS_(.*)"
+         gw_src="gdx-AS_$1src_router.orsay.grid5000.fr"
+         gw_dst="gdx-AS_$1dst_router.orsay.grid5000.fr">
+               <link_ctn id="gdx_main"/>
+       </ASroute>
+
+</AS>
+</platform>
diff --git a/examples/platforms/griffon.xml b/examples/platforms/griffon.xml
new file mode 100644 (file)
index 0000000..1ecc498
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+<AS  id="AS_griffon"  routing="Full">
+       
+     <cluster id="griffon_cluster_cabinet1" prefix="griffon-" suffix=".nancy.grid5000.fr"
+           radical="1-29,58,59,60" power="286087" bw="1.25e8" lat="2.4e-5"
+           bb_bw="1.25e9" bb_lat="0" sharing_policy="FULLDUPLEX" bb_sharing_policy="SHARED"/> 
+     <cluster id="griffon_cluster_cabinet2" prefix="griffon-" suffix=".nancy.grid5000.fr"
+           radical="30-57" power="286087" bw="1.25e8" lat="2.4e-5" 
+           bb_bw="1.25e9" bb_lat="0" sharing_policy="FULLDUPLEX" bb_sharing_policy="SHARED"/>    
+     <cluster id="griffon_cluster_cabinet3" prefix="griffon-" suffix=".nancy.grid5000.fr"
+           radical="61-92" power="286087" bw="1.25e8" lat="2.4e-5" 
+           bb_bw="1.25e9" bb_lat="0" sharing_policy="FULLDUPLEX" bb_sharing_policy="SHARED"/>
+
+     <link id="backbone" bandwidth="1.25e9" latency="2.4e-5" sharing_policy="SHARED"/>
+       
+     <ASroute src="griffon_cluster_cabinet1" dst="griffon_cluster_cabinet2" 
+        gw_src="griffon-griffon_cluster_cabinet1_router.nancy.grid5000.fr" 
+        gw_dst="griffon-griffon_cluster_cabinet2_router.nancy.grid5000.fr" 
+        symmetrical="YES">
+               <link_ctn id="backbone"/>
+     </ASroute>     
+     <ASroute src="griffon_cluster_cabinet2" dst="griffon_cluster_cabinet3" 
+        gw_src="griffon-griffon_cluster_cabinet2_router.nancy.grid5000.fr" 
+        gw_dst="griffon-griffon_cluster_cabinet3_router.nancy.grid5000.fr" 
+        symmetrical="YES">
+               <link_ctn id="backbone"/>
+     </ASroute>      
+     <ASroute src="griffon_cluster_cabinet1" dst="griffon_cluster_cabinet3" 
+        gw_src="griffon-griffon_cluster_cabinet1_router.nancy.grid5000.fr" 
+        gw_dst="griffon-griffon_cluster_cabinet3_router.nancy.grid5000.fr" 
+        symmetrical="YES">
+               <link_ctn id="backbone"/>
+     </ASroute> 
+               
+</AS>
+</platform>
+
diff --git a/examples/platforms/median_harvard.syscoord b/examples/platforms/median_harvard.syscoord
new file mode 100644 (file)
index 0000000..13cf361
--- /dev/null
@@ -0,0 +1,226 @@
+0 173.0 96.8 h 0.1 
+1 247.0 57.3 h 0.6 
+2 243.4 58.8 h 1.4 
+3 -42.0 -35.2 h 1.5 
+4 170.4 78.2 h 11.0 
+5 116.3 -51.1 h 79.0 
+6 240.7 73.1 h 42.4 
+7 248.1 66.0 h 12.0 
+8 -136.1 31.0 h 59.1 
+9 -138.9 38.1 h 57.3 
+10 275.8 43.3 h 1.4 
+11 41.7 -10.3 h 0.8 
+12 262.3 31.0 h 1.0 
+13 251.8 79.9 h 2.3 
+14 251.7 64.5 h 8.5 
+15 -16.0 -13.4 h 9.3 
+16 250.1 67.1 h 18.5 
+17 264.4 77.6 h 0.5 
+18 247.1 62.5 h 7.9 
+19 19.4 -26.5 h 5.5 
+20 0.8 -42.7 h 11.0 
+21 241.2 62.5 h 2.5 
+22 -25.9 -16.1 h 9.6 
+23 -29.3 5.3 h 6.3 
+24 -41.9 -6.2 h 0.1 
+25 -28.5 0.3 h 0.3 
+26 31.4 -7.5 h 2.1 
+27 21.9 21.5 h 1.1 
+28 -21.5 -7.5 h 4.5 
+29 -34.2 -8.2 h 3.8 
+30 33.6 -22.7 h 2.8 
+31 -40.0 -26.3 h 11.5 
+32 -146.7 15.9 h 45.2 
+33 -42.5 3.8 h 11.4 
+34 -44.2 -13.8 h 4.3 
+35 43.9 3.6 h 0.8 
+36 -37.1 24.3 h 3.2 
+37 -7.7 11.2 h 1.2 
+38 -50.1 -21.1 h 3.5 
+39 13.4 22.5 h 2.0 
+40 -166.0 48.5 h 29.7 
+41 -33.8 -8.5 h 9.6 
+42 29.9 -18.7 h 0.9 
+43 -52.0 -5.7 h 34.2 
+44 -197.4 8.2 h 0.1 
+45 -40.6 10.3 h 9.0 
+46 -31.9 21.1 h 5.4 
+47 -44.7 -6.9 h 1.1 
+48 45.2 5.1 h 0.9 
+49 -40.2 14.6 h 17.8 
+50 -7.1 4.0 h 5.9 
+51 19.5 3.6 h 1.9 
+52 -216.1 3.4 h 6.0 
+53 -40.4 3.4 h 1.6 
+54 -194.1 16.3 h 6.6 
+55 -24.1 -6.7 h 5.0 
+56 -50.1 -12.8 h 4.9 
+57 -138.6 53.1 h 0.9 
+58 -48.1 -3.0 h 1.6 
+59 28.9 -6.5 h 1.5 
+60 24.1 3.5 h 1.8 
+61 -137.6 41.0 h 6.1 
+62 35.5 -30.7 h 1.6 
+63 34.5 -25.3 h 0.2 
+64 31.7 -31.2 h 4.0 
+65 33.9 -17.3 h 1.1 
+66 35.9 -10.6 h 3.5 
+67 33.1 -13.0 h 6.5 
+68 0.4 -10.7 h 17.3 
+69 -27.3 -8.0 h 0.3 
+70 -194.3 72.7 h 5.0 
+71 -19.0 -2.9 h 0.7 
+72 -45.2 -12.3 h 1.5 
+73 -45.2 -6.9 h 0.4 
+74 -45.2 -11.2 h 4.6 
+75 -24.4 -12.8 h 2.5 
+76 -21.7 -14.9 h 5.1 
+77 -9.8 -28.5 h 9.3 
+78 19.1 10.4 h 19.1 
+79 -192.7 21.5 h 0.6 
+80 -28.0 -12.7 h 6.9 
+81 -45.4 -2.9 h 6.0 
+82 -42.1 -2.8 h 2.7 
+83 -41.1 -1.2 h 9.4 
+84 -153.6 19.1 h 0.8 
+85 -125.7 16.6 h 3.8 
+86 -151.0 41.0 h 19.2 
+87 39.4 -27.4 h 0.7 
+88 -21.6 -8.5 h 11.7 
+89 -16.9 -10.5 h 8.2 
+90 10.3 -9.3 h 24.3 
+91 -13.6 16.9 h 10.5 
+92 -48.2 4.3 h 12.3 
+93 -11.5 -34.5 h 0.7 
+94 26.7 -26.3 h 7.8 
+95 -145.3 17.7 h 29.4 
+96 218.2 129.0 h 69.0 
+97 -47.4 -20.3 h 97.9 
+98 -19.5 -5.0 h 0.4 
+99 -13.0 -3.9 h 1.3 
+100 39.2 -5.2 h 1.2 
+101 35.4 11.4 h 1.4 
+102 -45.6 -10.7 h 1.1 
+103 -148.9 29.0 h 5.0 
+104 -109.9 52.6 h 0.8 
+105 -151.2 28.8 h 44.0 
+106 -151.9 44.4 h 0.1 
+107 108.3 88.7 h 58.0 
+108 25.1 -12.2 h 0.1 
+109 22.4 -29.2 h 17.4 
+110 24.3 -32.3 h 1.2 
+111 -40.6 -10.4 h 1.3 
+112 -11.4 -17.8 h 4.2 
+113 -118.7 50.3 h 1.2 
+114 -3.1 -39.2 h 1.2 
+115 -27.6 -15.3 h 0.9 
+116 -21.6 -8.1 h 3.1 
+117 -48.7 1.8 h 0.6 
+118 -45.9 -9.0 h 0.1 
+119 -43.0 -0.4 h 16.9 
+120 -45.5 -16.9 h 6.5 
+121 -22.0 -5.3 h 5.8 
+122 -116.4 53.5 h 4.5 
+123 -175.6 -9.6 h 2.0 
+124 -17.8 -17.9 h 2.6 
+125 -7.8 -29.9 h 9.4 
+126 16.1 16.9 h 4.1 
+127 -140.6 34.1 h 45.6 
+128 -45.6 -12.4 h 3.8 
+129 -43.6 -9.8 h 3.9 
+130 -41.2 -18.4 h 4.7 
+131 37.0 -5.4 h 0.3 
+132 -130.3 24.0 h 0.8 
+133 -109.0 65.9 h 1.8 
+134 -3.7 -16.7 h 5.1 
+135 25.2 -16.1 h 21.6 
+136 -17.8 -0.6 h 10.7 
+137 -16.3 -9.2 h 7.5 
+138 16.9 25.3 h 10.6 
+139 -11.3 -3.6 h 17.9 
+140 -9.7 -19.6 h 11.2 
+141 202.6 100.2 h 1.7 
+142 -169.7 15.3 h 0.3 
+143 117.2 64.5 h 29.6 
+144 -137.8 62.2 h 8.3 
+145 -19.5 -7.5 h 2.3 
+146 33.5 -15.5 h 0.4 
+147 -150.9 18.4 h 0.2 
+148 -326.8 -126.8 h 0.7 
+149 -87.5 83.1 h 0.7 
+150 -164.6 8.4 h 41.0 
+151 -153.2 46.9 h 3.8 
+152 -168.9 12.3 h 0.7 
+153 87.5 155.6 h 4.0 
+154 29.7 -12.2 h 0.2 
+155 35.6 -28.8 h 0.6 
+156 -22.5 -5.3 h 15.0 
+157 29.8 -20.4 h 4.5 
+158 -44.5 -7.9 h 0.9 
+159 -15.2 -8.5 h 14.1 
+160 -103.1 44.0 h 0.2 
+161 -42.6 -4.1 h 12.3 
+162 -47.1 8.9 h 2.6 
+163 -49.0 -14.9 h 1.7 
+164 -42.9 -1.9 h 6.0 
+165 -50.0 -5.9 h 1.2 
+166 -8.3 -38.2 h 0.9 
+167 33.7 -8.4 h 7.0 
+168 -13.2 -34.3 h 1.0 
+169 39.7 -27.8 h 0.6 
+170 35.5 0.4 h 0.7 
+171 139.5 107.5 h 9.9 
+172 16.2 32.5 h 20.7 
+173 -42.1 -4.2 h 6.6 
+174 -50.5 -7.3 h 1.6 
+175 33.5 -27.2 h 2.3 
+176 -146.7 37.2 h 27.7 
+177 -46.5 -17.1 h 0.5 
+178 41.5 -22.8 h 0.3 
+179 40.1 -5.5 h 12.0 
+180 -142.5 16.7 h 37.6 
+181 -53.6 -10.3 h 0.7 
+182 30.7 -21.0 h 1.4 
+183 24.0 -29.0 h 4.0 
+184 -144.7 14.3 h 35.0 
+185 -45.5 -7.8 h 2.6 
+186 -42.7 -5.2 h 4.2 
+187 33.0 -33.2 h 0.9 
+188 -46.9 -4.3 h 1.6 
+189 -46.9 -2.3 h 0.6 
+190 36.0 -29.9 h 1.0 
+191 29.8 -36.8 h 0.6 
+192 42.7 -23.2 h 0.3 
+193 -117.6 48.0 h 3.7 
+194 -124.3 45.2 h 0.1 
+195 37.1 -6.1 h 0.3 
+196 40.9 -4.1 h 0.8 
+197 28.6 -2.8 h 0.9 
+198 -111.0 24.8 h 5.0 
+199 -112.0 33.4 h 1.0 
+200 25.4 -23.7 h 2.7 
+201 33.7 -25.7 h 2.6 
+202 32.2 -26.7 h 0.6 
+203 193.3 -4.6 h 0.7 
+204 -8.0 -35.4 h 0.2 
+205 -11.7 -33.4 h 4.2 
+206 -43.8 -1.7 h 4.5 
+207 251.0 54.7 h 26.3 
+208 252.9 85.9 h 10.5 
+209 261.1 66.2 h 3.5 
+210 247.6 63.0 h 8.0 
+211 256.6 109.7 h 0.9 
+212 246.4 78.1 h 10.8 
+213 258.8 61.8 h 9.3 
+214 245.5 62.7 h 0.4 
+215 235.0 69.5 h 0.1 
+216 284.3 47.1 h 0.8 
+217 245.2 55.4 h 37.0 
+218 252.9 69.6 h 6.2 
+219 -21.8 -10.4 h 6.0 
+220 -18.5 -10.7 h 14.0 
+221 235.1 88.4 h 0.2 
+222 259.9 65.1 h 38.0 
+223 265.7 80.7 h 15.1 
+224 267.3 107.0 h 0.2 
+225 268.1 60.1 h 0.2 
diff --git a/examples/platforms/median_harvard.xml b/examples/platforms/median_harvard.xml
new file mode 100644 (file)
index 0000000..2620fd8
--- /dev/null
@@ -0,0 +1,694 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+
+<config id="General">
+       <prop id="coordinates" value="yes"></prop>
+</config>
+
+       <AS  id="AS0"  routing="Vivaldi">
+               <peer id="peer-0" coordinates="173.0 96.8 0.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-1" coordinates="247.0 57.3 0.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-2" coordinates="243.4 58.8 1.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-3" coordinates="-42.0 -35.2 1.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-4" coordinates="170.4 78.2 11.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-5" coordinates="116.3 -51.1 79.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-6" coordinates="240.7 73.1 42.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-7" coordinates="248.1 66.0 12.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-8" coordinates="-136.1 31.0 59.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-9" coordinates="-138.9 38.1 57.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-10" coordinates="275.8 43.3 1.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-11" coordinates="41.7 -10.3 0.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-12" coordinates="262.3 31.0 1.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-13" coordinates="251.8 79.9 2.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-14" coordinates="251.7 64.5 8.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-15" coordinates="-16.0 -13.4 9.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-16" coordinates="250.1 67.1 18.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-17" coordinates="264.4 77.6 0.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-18" coordinates="247.1 62.5 7.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-19" coordinates="19.4 -26.5 5.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-20" coordinates="0.8 -42.7 11.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-21" coordinates="241.2 62.5 2.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-22" coordinates="-25.9 -16.1 9.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-23" coordinates="-29.3 5.3 6.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-24" coordinates="-41.9 -6.2 0.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-25" coordinates="-28.5 0.3 0.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-26" coordinates="31.4 -7.5 2.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-27" coordinates="21.9 21.5 1.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-28" coordinates="-21.5 -7.5 4.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-29" coordinates="-34.2 -8.2 3.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-30" coordinates="33.6 -22.7 2.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-31" coordinates="-40.0 -26.3 11.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-32" coordinates="-146.7 15.9 45.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-33" coordinates="-42.5 3.8 11.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-34" coordinates="-44.2 -13.8 4.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-35" coordinates="43.9 3.6 0.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-36" coordinates="-37.1 24.3 3.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-37" coordinates="-7.7 11.2 1.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-38" coordinates="-50.1 -21.1 3.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-39" coordinates="13.4 22.5 2.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-40" coordinates="-166.0 48.5 29.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-41" coordinates="-33.8 -8.5 9.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-42" coordinates="29.9 -18.7 0.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-43" coordinates="-52.0 -5.7 34.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-44" coordinates="-197.4 8.2 0.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-45" coordinates="-40.6 10.3 9.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-46" coordinates="-31.9 21.1 5.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-47" coordinates="-44.7 -6.9 1.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-48" coordinates="45.2 5.1 0.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-49" coordinates="-40.2 14.6 17.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-50" coordinates="-7.1 4.0 5.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-51" coordinates="19.5 3.6 1.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-52" coordinates="-216.1 3.4 6.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-53" coordinates="-40.4 3.4 1.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-54" coordinates="-194.1 16.3 6.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-55" coordinates="-24.1 -6.7 5.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-56" coordinates="-50.1 -12.8 4.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-57" coordinates="-138.6 53.1 0.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-58" coordinates="-48.1 -3.0 1.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-59" coordinates="28.9 -6.5 1.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-60" coordinates="24.1 3.5 1.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-61" coordinates="-137.6 41.0 6.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-62" coordinates="35.5 -30.7 1.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-63" coordinates="34.5 -25.3 0.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-64" coordinates="31.7 -31.2 4.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-65" coordinates="33.9 -17.3 1.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-66" coordinates="35.9 -10.6 3.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-67" coordinates="33.1 -13.0 6.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-68" coordinates="0.4 -10.7 17.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-69" coordinates="-27.3 -8.0 0.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-70" coordinates="-194.3 72.7 5.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-71" coordinates="-19.0 -2.9 0.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-72" coordinates="-45.2 -12.3 1.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-73" coordinates="-45.2 -6.9 0.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-74" coordinates="-45.2 -11.2 4.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-75" coordinates="-24.4 -12.8 2.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-76" coordinates="-21.7 -14.9 5.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-77" coordinates="-9.8 -28.5 9.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-78" coordinates="19.1 10.4 19.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-79" coordinates="-192.7 21.5 0.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-80" coordinates="-28.0 -12.7 6.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-81" coordinates="-45.4 -2.9 6.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-82" coordinates="-42.1 -2.8 2.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-83" coordinates="-41.1 -1.2 9.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-84" coordinates="-153.6 19.1 0.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-85" coordinates="-125.7 16.6 3.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-86" coordinates="-151.0 41.0 19.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-87" coordinates="39.4 -27.4 0.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-88" coordinates="-21.6 -8.5 11.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-89" coordinates="-16.9 -10.5 8.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-90" coordinates="10.3 -9.3 24.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-91" coordinates="-13.6 16.9 10.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-92" coordinates="-48.2 4.3 12.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-93" coordinates="-11.5 -34.5 0.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-94" coordinates="26.7 -26.3 7.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-95" coordinates="-145.3 17.7 29.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-96" coordinates="218.2 129.0 69.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-97" coordinates="-47.4 -20.3 97.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-98" coordinates="-19.5 -5.0 0.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-99" coordinates="-13.0 -3.9 1.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-100" coordinates="39.2 -5.2 1.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-101" coordinates="35.4 11.4 1.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-102" coordinates="-45.6 -10.7 1.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-103" coordinates="-148.9 29.0 5.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-104" coordinates="-109.9 52.6 0.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-105" coordinates="-151.2 28.8 44.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-106" coordinates="-151.9 44.4 0.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-107" coordinates="108.3 88.7 58.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-108" coordinates="25.1 -12.2 0.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-109" coordinates="22.4 -29.2 17.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-110" coordinates="24.3 -32.3 1.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-111" coordinates="-40.6 -10.4 1.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-112" coordinates="-11.4 -17.8 4.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-113" coordinates="-118.7 50.3 1.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-114" coordinates="-3.1 -39.2 1.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-115" coordinates="-27.6 -15.3 0.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-116" coordinates="-21.6 -8.1 3.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-117" coordinates="-48.7 1.8 0.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-118" coordinates="-45.9 -9.0 0.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-119" coordinates="-43.0 -0.4 16.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-120" coordinates="-45.5 -16.9 6.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-121" coordinates="-22.0 -5.3 5.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-122" coordinates="-116.4 53.5 4.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-123" coordinates="-175.6 -9.6 2.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-124" coordinates="-17.8 -17.9 2.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-125" coordinates="-7.8 -29.9 9.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-126" coordinates="16.1 16.9 4.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-127" coordinates="-140.6 34.1 45.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-128" coordinates="-45.6 -12.4 3.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-129" coordinates="-43.6 -9.8 3.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-130" coordinates="-41.2 -18.4 4.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-131" coordinates="37.0 -5.4 0.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-132" coordinates="-130.3 24.0 0.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-133" coordinates="-109.0 65.9 1.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-134" coordinates="-3.7 -16.7 5.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-135" coordinates="25.2 -16.1 21.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-136" coordinates="-17.8 -0.6 10.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-137" coordinates="-16.3 -9.2 7.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-138" coordinates="16.9 25.3 10.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-139" coordinates="-11.3 -3.6 17.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-140" coordinates="-9.7 -19.6 11.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-141" coordinates="202.6 100.2 1.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-142" coordinates="-169.7 15.3 0.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-143" coordinates="117.2 64.5 29.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-144" coordinates="-137.8 62.2 8.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-145" coordinates="-19.5 -7.5 2.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-146" coordinates="33.5 -15.5 0.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-147" coordinates="-150.9 18.4 0.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-148" coordinates="-326.8 -126.8 0.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-149" coordinates="-87.5 83.1 0.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-150" coordinates="-164.6 8.4 41.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-151" coordinates="-153.2 46.9 3.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-152" coordinates="-168.9 12.3 0.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-153" coordinates="87.5 155.6 4.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-154" coordinates="29.7 -12.2 0.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-155" coordinates="35.6 -28.8 0.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-156" coordinates="-22.5 -5.3 15.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-157" coordinates="29.8 -20.4 4.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-158" coordinates="-44.5 -7.9 0.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-159" coordinates="-15.2 -8.5 14.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-160" coordinates="-103.1 44.0 0.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-161" coordinates="-42.6 -4.1 12.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-162" coordinates="-47.1 8.9 2.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-163" coordinates="-49.0 -14.9 1.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-164" coordinates="-42.9 -1.9 6.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-165" coordinates="-50.0 -5.9 1.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-166" coordinates="-8.3 -38.2 0.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-167" coordinates="33.7 -8.4 7.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-168" coordinates="-13.2 -34.3 1.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-169" coordinates="39.7 -27.8 0.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-170" coordinates="35.5 0.4 0.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-171" coordinates="139.5 107.5 9.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-172" coordinates="16.2 32.5 20.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-173" coordinates="-42.1 -4.2 6.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-174" coordinates="-50.5 -7.3 1.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-175" coordinates="33.5 -27.2 2.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-176" coordinates="-146.7 37.2 27.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-177" coordinates="-46.5 -17.1 0.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-178" coordinates="41.5 -22.8 0.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-179" coordinates="40.1 -5.5 12.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-180" coordinates="-142.5 16.7 37.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-181" coordinates="-53.6 -10.3 0.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-182" coordinates="30.7 -21.0 1.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-183" coordinates="24.0 -29.0 4.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-184" coordinates="-144.7 14.3 35.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-185" coordinates="-45.5 -7.8 2.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-186" coordinates="-42.7 -5.2 4.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-187" coordinates="33.0 -33.2 0.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-188" coordinates="-46.9 -4.3 1.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-189" coordinates="-46.9 -2.3 0.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-190" coordinates="36.0 -29.9 1.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-191" coordinates="29.8 -36.8 0.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-192" coordinates="42.7 -23.2 0.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-193" coordinates="-117.6 48.0 3.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-194" coordinates="-124.3 45.2 0.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-195" coordinates="37.1 -6.1 0.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-196" coordinates="40.9 -4.1 0.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-197" coordinates="28.6 -2.8 0.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-198" coordinates="-111.0 24.8 5.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-199" coordinates="-112.0 33.4 1.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-200" coordinates="25.4 -23.7 2.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-201" coordinates="33.7 -25.7 2.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-202" coordinates="32.2 -26.7 0.6 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-203" coordinates="193.3 -4.6 0.7 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-204" coordinates="-8.0 -35.4 0.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-205" coordinates="-11.7 -33.4 4.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-206" coordinates="-43.8 -1.7 4.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-207" coordinates="251.0 54.7 26.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-208" coordinates="252.9 85.9 10.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-209" coordinates="261.1 66.2 3.5 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-210" coordinates="247.6 63.0 8.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-211" coordinates="256.6 109.7 0.9 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-212" coordinates="246.4 78.1 10.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-213" coordinates="258.8 61.8 9.3 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-214" coordinates="245.5 62.7 0.4 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-215" coordinates="235.0 69.5 0.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-216" coordinates="284.3 47.1 0.8 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-217" coordinates="245.2 55.4 37.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-218" coordinates="252.9 69.6 6.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-219" coordinates="-21.8 -10.4 6.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-220" coordinates="-18.5 -10.7 14.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-221" coordinates="235.1 88.4 0.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-222" coordinates="259.9 65.1 38.0 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-223" coordinates="265.7 80.7 15.1 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-224" coordinates="267.3 107.0 0.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <peer id="peer-225" coordinates="268.1 60.1 0.2 " power="730000000.0"
+               bw_in="13380000" bw_out="1024000" lat="5E-4" />
+
+               <ASroute src="(.*)"
+                       dst="(.*)"
+                       gw_src="router_$1src"
+                       gw_dst="router_$1dst">
+               </ASroute>
+       </AS>
+</platform> 
diff --git a/examples/platforms/median_meridian.syscoord b/examples/platforms/median_meridian.syscoord
new file mode 100644 (file)
index 0000000..427656d
--- /dev/null
@@ -0,0 +1,2500 @@
+0 25.5 9.4 h 1.4 
+1 -12.7 -9.9 h 2.1 
+2 -15.7 9.9 h 14.7 
+3 27.1 7.2 h 19.2 
+4 11.4 10.7 h 24.8 
+5 27.1 14.9 h 0.3 
+6 110.1 31.2 h 43.7 
+7 -21.2 -25.2 h 4.1 
+8 -2.3 1.1 h 12.0 
+9 16.8 -11.1 h 15.4 
+10 -6.8 1.6 h 0.3 
+11 23.0 -4.1 h 1.0 
+12 29.9 -9.2 h 0.2 
+13 -2.2 7.2 h 11.0 
+14 26.1 -61.9 h 144.7 
+15 -39.4 1.1 h 0.6 
+16 26.5 -15.1 h 0.3 
+17 15.0 -0.5 h 34.5 
+18 16.5 11.5 h 19.2 
+19 -37.9 85.0 h 69.8 
+20 -2.6 19.4 h 6.4 
+21 -104.4 -162.5 h 1.7 
+22 -41.8 -30.9 h 5.8 
+23 -9.9 10.4 h 1.9 
+24 8.5 15.3 h 31.9 
+25 6.0 -12.6 h 7.0 
+26 89.6 26.1 h 17.9 
+27 13.9 -31.4 h 8.2 
+28 13.6 10.0 h 25.0 
+29 32.2 34.0 h 104.4 
+30 23.5 21.2 h 24.5 
+31 -27.0 -12.1 h 4.8 
+32 18.4 -4.5 h 1.2 
+33 109.3 253.6 h 2.0 
+34 16.5 9.4 h 4.2 
+35 -35.9 -42.6 h 1.0 
+36 30.4 18.9 h 3.5 
+37 -23.1 -7.6 h 39.9 
+38 135.5 -21.0 h 83.4 
+39 17.5 6.7 h 18.8 
+40 22.3 13.6 h 21.7 
+41 -2.5 8.3 h 7.0 
+42 -10.3 -8.8 h 2.0 
+43 142.5 63.5 h 0.3 
+44 5.1 -2.9 h 10.6 
+45 -18.4 23.5 h 8.4 
+46 -26.3 -3.2 h 7.1 
+47 -21.6 11.6 h 89.2 
+48 -44.3 17.0 h 0.5 
+49 -59.8 -16.8 h 1.0 
+50 23.9 35.4 h 8.1 
+51 22.9 10.1 h 8.9 
+52 27.6 25.7 h 0.4 
+53 9.5 13.3 h 10.3 
+54 -34.2 20.0 h 1.8 
+55 -58.7 -11.7 h 2.1 
+56 -40.3 -27.4 h 0.3 
+57 19.7 -15.1 h 3.5 
+58 8.4 17.5 h 32.4 
+59 25.1 8.8 h 16.6 
+60 25.3 13.9 h 21.8 
+61 29.5 -58.9 h 17.0 
+62 -48.1 -6.8 h 0.3 
+63 -17.2 -1.2 h 0.4 
+64 10.6 18.7 h 33.4 
+65 1.9 -3.5 h 2.5 
+66 -3.6 1.6 h 6.7 
+67 -20.1 8.7 h 8.7 
+68 -22.0 5.6 h 31.9 
+69 -32.4 -9.4 h 2.5 
+70 13.3 7.2 h 20.3 
+71 23.2 10.9 h 12.3 
+72 7.0 17.8 h 4.0 
+73 34.1 37.7 h 0.9 
+74 -55.4 -5.1 h 8.7 
+75 -3.4 -4.4 h 0.4 
+76 22.6 0.8 h 5.1 
+77 23.2 15.6 h 0.3 
+78 21.6 16.4 h 6.1 
+79 12.0 14.2 h 20.4 
+80 90.3 79.5 h 66.6 
+81 -3.0 2.5 h 7.2 
+82 -7.2 19.4 h 3.6 
+83 5.9 15.2 h 3.9 
+84 -208.1 -127.0 h 325.6 
+85 0.6 8.0 h 8.0 
+86 16.3 17.6 h 29.2 
+87 -0.6 8.6 h 32.5 
+88 -1.8 6.5 h 18.4 
+89 -6.8 22.6 h 1.1 
+90 17.0 20.6 h 9.8 
+91 -39.1 -30.5 h 1.2 
+92 110.1 57.3 h 30.3 
+93 21.1 -4.7 h 8.6 
+94 -36.4 -12.8 h 3.5 
+95 33.2 -20.1 h 1.2 
+96 25.9 15.4 h 6.5 
+97 -1.0 3.8 h 0.3 
+98 -19.4 1.4 h 23.4 
+99 17.1 9.8 h 8.3 
+100 5.5 -16.5 h 1.1 
+101 3.3 1.8 h 12.3 
+102 1.4 23.0 h 3.3 
+103 -48.5 -29.4 h 1.3 
+104 7.6 -4.5 h 19.2 
+105 0.2 15.1 h 30.5 
+106 6.3 10.6 h 0.3 
+107 24.4 9.9 h 1.4 
+108 19.1 11.4 h 5.8 
+109 29.7 12.3 h 5.9 
+110 -0.9 13.4 h 6.8 
+111 19.3 -9.3 h 3.0 
+112 15.8 14.7 h 18.7 
+113 2.8 13.2 h 8.6 
+114 18.8 11.5 h 4.1 
+115 -10.4 -2.2 h 3.6 
+116 -45.7 -10.4 h 1.5 
+117 25.7 16.9 h 0.7 
+118 -0.7 17.5 h 5.2 
+119 30.2 1.9 h 22.3 
+120 0.1 2.7 h 38.6 
+121 3.0 19.1 h 3.1 
+122 -6.6 15.4 h 2.4 
+123 10.9 14.3 h 21.9 
+124 3.3 21.0 h 14.4 
+125 29.9 8.1 h 0.5 
+126 -43.0 -18.3 h 1.4 
+127 29.8 8.1 h 6.8 
+128 36.7 17.1 h 0.8 
+129 106.8 34.2 h 23.7 
+130 -29.1 -20.5 h 10.1 
+131 13.1 22.0 h 0.5 
+132 78.7 137.3 h 0.3 
+133 100.2 -6.3 h 185.7 
+134 0.4 20.3 h 10.3 
+135 24.0 -2.4 h 38.2 
+136 -4.1 1.1 h 1.2 
+137 7.7 19.2 h 10.7 
+138 -19.6 -5.6 h 0.7 
+139 9.7 3.1 h 24.4 
+140 112.9 69.0 h 0.8 
+141 -8.8 -9.0 h 3.2 
+142 26.2 12.9 h 2.0 
+143 32.9 0.6 h 3.7 
+144 -33.5 -9.2 h 16.9 
+145 21.8 13.6 h 0.5 
+146 29.9 14.0 h 99.7 
+147 -33.3 -41.3 h 10.9 
+148 12.1 14.0 h 21.0 
+149 12.6 4.8 h 28.6 
+150 -21.0 -24.0 h 5.3 
+151 13.1 13.2 h 0.5 
+152 20.1 23.0 h 4.7 
+153 6.4 15.0 h 30.2 
+154 25.1 4.0 h 0.4 
+155 28.8 29.7 h 3.2 
+156 10.5 -8.2 h 13.6 
+157 13.7 3.1 h 0.7 
+158 24.0 23.1 h 10.9 
+159 53.0 55.5 h 18.2 
+160 10.8 5.4 h 38.2 
+161 -74.9 -31.9 h 6.6 
+162 2.5 8.3 h 15.7 
+163 85.6 28.1 h 90.0 
+164 8.1 9.4 h 8.5 
+165 18.0 8.9 h 6.1 
+166 -6.4 0.1 h 7.9 
+167 23.9 29.7 h 0.4 
+168 19.2 19.4 h 40.2 
+169 4.1 9.2 h 7.3 
+170 2.5 32.5 h 1.6 
+171 2.5 0.2 h 30.2 
+172 -5.1 7.5 h 1.5 
+173 35.8 27.0 h 0.6 
+174 -35.4 2.7 h 2.0 
+175 27.0 9.4 h 0.9 
+176 9.5 5.3 h 17.3 
+177 -36.1 -15.7 h 14.9 
+178 -22.5 74.1 h 0.7 
+179 6.3 14.3 h 16.7 
+180 -23.3 -18.3 h 0.2 
+181 19.4 10.3 h 6.2 
+182 -16.7 37.0 h 5.9 
+183 12.5 13.7 h 1.2 
+184 14.5 14.1 h 14.6 
+185 28.9 15.3 h 0.6 
+186 -5.9 -4.6 h 15.4 
+187 -11.1 7.8 h 18.9 
+188 1.1 -2.9 h 13.8 
+189 -13.8 -5.3 h 47.8 
+190 28.1 38.3 h 3.4 
+191 35.0 16.3 h 4.8 
+192 -7.5 -5.1 h 12.3 
+193 52.3 60.9 h 3.9 
+194 0.6 2.3 h 22.1 
+195 22.9 3.2 h 2.1 
+196 17.8 6.7 h 0.6 
+197 9.0 13.0 h 71.9 
+198 -51.7 44.4 h 0.9 
+199 -40.8 -10.6 h 3.7 
+200 15.8 10.6 h 13.3 
+201 -25.4 8.9 h 5.2 
+202 -60.4 100.1 h 0.3 
+203 25.5 23.0 h 1.3 
+204 38.4 26.8 h 2.1 
+205 9.0 20.5 h 2.6 
+206 39.1 16.7 h 1.7 
+207 19.1 18.2 h 4.6 
+208 7.7 8.5 h 12.6 
+209 20.0 11.4 h 0.9 
+210 19.5 12.6 h 2.3 
+211 -22.5 14.0 h 17.3 
+212 -2.4 2.2 h 7.8 
+213 12.8 6.7 h 29.1 
+214 0.1 -2.0 h 9.4 
+215 7.7 -8.6 h 0.8 
+216 -11.1 -8.0 h 0.5 
+217 6.2 -7.1 h 9.2 
+218 -49.1 -25.9 h 23.2 
+219 15.0 19.0 h 34.8 
+220 -38.7 -6.1 h 0.9 
+221 6.0 -2.0 h 26.8 
+222 -47.5 -29.5 h 0.3 
+223 -27.4 2.5 h 1.7 
+224 29.8 3.1 h 0.3 
+225 -40.9 -3.1 h 0.5 
+226 35.1 35.6 h 2.7 
+227 -37.0 -6.4 h 3.2 
+228 15.9 5.1 h 4.8 
+229 -38.5 -8.6 h 0.7 
+230 32.0 4.9 h 1.4 
+231 -29.6 -2.4 h 5.4 
+232 3.7 8.6 h 31.5 
+233 9.9 2.0 h 6.6 
+234 -8.2 -2.6 h 3.4 
+235 18.9 -2.8 h 7.2 
+236 -18.0 -5.7 h 0.1 
+237 19.3 -1.6 h 0.2 
+238 14.8 23.7 h 29.1 
+239 -0.0 8.2 h 52.9 
+240 -22.4 -40.7 h 1.9 
+241 -13.3 -0.5 h 21.8 
+242 9.8 7.8 h 18.3 
+243 -25.7 -20.9 h 19.9 
+244 25.0 10.0 h 1.2 
+245 19.1 22.1 h 145.8 
+246 7.4 16.1 h 16.3 
+247 7.4 -2.7 h 22.4 
+248 4.9 19.9 h 11.5 
+249 12.3 -12.4 h 9.2 
+250 -19.9 11.6 h 6.0 
+251 2.1 2.3 h 8.8 
+252 0.1 3.6 h 4.0 
+253 24.5 26.8 h 1.1 
+254 -10.5 4.5 h 17.4 
+255 -17.4 33.1 h 8.4 
+256 17.6 1.7 h 27.9 
+257 -48.0 1.9 h 3.5 
+258 25.9 2.3 h 0.5 
+259 0.9 3.8 h 26.2 
+260 -70.8 21.0 h 1.9 
+261 17.1 1.8 h 18.5 
+262 3.3 -13.1 h 0.2 
+263 -49.1 -4.1 h 0.6 
+264 -28.0 8.0 h 48.8 
+265 2.9 2.7 h 0.7 
+266 113.8 15.0 h 2.0 
+267 32.1 13.9 h 12.2 
+268 -13.1 -33.9 h 30.1 
+269 -17.5 18.3 h 4.6 
+270 29.7 22.7 h 3.1 
+271 6.6 15.5 h 7.9 
+272 1.9 3.1 h 32.6 
+273 21.6 2.6 h 15.8 
+274 12.7 14.0 h 1.5 
+275 17.3 14.3 h 8.2 
+276 32.0 12.8 h 68.0 
+277 -30.2 -0.1 h 1.8 
+278 -12.5 1.7 h 10.3 
+279 31.1 22.2 h 0.5 
+280 24.0 11.6 h 7.8 
+281 52.9 2.7 h 0.4 
+282 23.1 18.8 h 17.9 
+283 -17.6 -36.1 h 8.4 
+284 14.1 -21.4 h 1.5 
+285 9.0 1.3 h 11.9 
+286 28.4 -14.6 h 3.0 
+287 27.1 8.6 h 0.8 
+288 3.7 7.1 h 11.6 
+289 -31.8 -34.4 h 0.1 
+290 19.9 20.1 h 4.8 
+291 25.5 18.9 h 7.2 
+292 -5.2 8.7 h 0.6 
+293 11.0 3.2 h 22.4 
+294 -6.4 12.2 h 12.0 
+295 29.9 13.3 h 1.3 
+296 9.7 6.8 h 31.0 
+297 -30.7 -29.5 h 0.7 
+298 3.7 31.4 h 2.6 
+299 6.5 19.8 h 0.6 
+300 25.0 3.6 h 0.2 
+301 -32.8 -7.0 h 20.3 
+302 7.2 13.4 h 9.2 
+303 15.1 16.1 h 39.9 
+304 -28.8 14.5 h 0.3 
+305 8.3 22.8 h 13.2 
+306 -1.1 8.6 h 27.8 
+307 -23.1 -9.6 h 33.2 
+308 13.7 -15.2 h 8.3 
+309 13.8 -5.1 h 0.7 
+310 10.9 -23.2 h 0.8 
+311 -14.2 24.1 h 1.8 
+312 17.9 14.3 h 37.0 
+313 -29.2 -21.6 h 9.5 
+314 -41.8 -11.4 h 0.4 
+315 -18.9 -1.0 h 2.3 
+316 -21.8 52.0 h 2.4 
+317 23.3 10.4 h 3.1 
+318 4.0 0.8 h 0.8 
+319 8.0 26.9 h 3.1 
+320 -24.9 -4.2 h 2.9 
+321 95.4 56.7 h 51.0 
+322 -17.5 44.3 h 7.1 
+323 22.4 19.4 h 22.6 
+324 18.3 9.6 h 21.9 
+325 12.9 5.8 h 13.5 
+326 45.6 -7.2 h 4.9 
+327 35.6 18.7 h 1.0 
+328 -13.4 8.4 h 12.7 
+329 -12.1 -1.4 h 1.0 
+330 14.6 4.6 h 16.1 
+331 17.3 14.7 h 7.7 
+332 27.3 36.8 h 1.3 
+333 -4.6 9.6 h 15.0 
+334 -38.9 15.2 h 0.6 
+335 13.9 9.9 h 5.6 
+336 85.9 60.8 h 1.1 
+337 -31.1 12.5 h 27.1 
+338 17.3 -5.5 h 2.4 
+339 -30.4 0.5 h 4.3 
+340 14.5 5.6 h 9.2 
+341 47.7 -30.5 h 1.0 
+342 31.0 11.5 h 8.7 
+343 -1.2 5.1 h 1.5 
+344 -30.2 40.2 h 0.5 
+345 -35.9 -17.4 h 4.7 
+346 -0.1 25.1 h 3.4 
+347 31.9 18.7 h 7.2 
+348 27.6 17.0 h 12.3 
+349 32.1 23.8 h 0.2 
+350 21.6 -21.4 h 0.8 
+351 52.6 9.8 h 2.3 
+352 -30.9 -16.7 h 0.5 
+353 23.8 20.9 h 46.3 
+354 19.7 16.9 h 14.7 
+355 -21.1 -19.7 h 31.7 
+356 -19.6 -26.2 h 1.0 
+357 -40.4 -18.4 h 3.6 
+358 33.4 17.2 h 2.1 
+359 -11.4 -20.0 h 20.2 
+360 -5.1 19.5 h 9.4 
+361 11.2 -2.4 h 0.7 
+362 -3.9 4.2 h 7.4 
+363 3.9 -3.8 h 0.4 
+364 -34.3 -18.6 h 17.9 
+365 29.3 18.3 h 1.9 
+366 25.7 26.8 h 9.1 
+367 19.3 16.2 h 6.7 
+368 30.9 -3.3 h 0.3 
+369 5.7 2.1 h 14.2 
+370 15.9 9.3 h 14.6 
+371 7.2 27.5 h 31.5 
+372 -28.1 -20.7 h 0.7 
+373 13.5 -3.0 h 0.4 
+374 20.6 31.6 h 9.9 
+375 -37.4 4.1 h 3.7 
+376 -47.4 -34.1 h 1.5 
+377 -22.7 -1.4 h 15.2 
+378 22.5 4.2 h 14.2 
+379 3.0 22.3 h 21.7 
+380 21.9 22.7 h 8.4 
+381 -38.8 -11.8 h 23.1 
+382 11.8 5.7 h 3.8 
+383 -4.2 14.4 h 0.6 
+384 34.4 9.0 h 1.1 
+385 24.2 9.9 h 0.8 
+386 38.1 -29.4 h 0.6 
+387 28.6 5.5 h 20.4 
+388 36.8 44.0 h 4.7 
+389 -5.1 1.1 h 42.3 
+390 -24.2 -33.5 h 200.3 
+391 9.5 8.6 h 22.4 
+392 0.4 8.6 h 4.0 
+393 17.5 5.9 h 2.9 
+394 11.8 5.2 h 15.6 
+395 -13.9 -38.6 h 7.4 
+396 14.5 -72.0 h 0.6 
+397 -15.0 -3.4 h 2.1 
+398 62.4 -2.0 h 1.4 
+399 -38.3 14.4 h 51.9 
+400 64.4 38.3 h 33.6 
+401 -1.3 22.5 h 21.6 
+402 18.3 28.9 h 8.7 
+403 -32.6 18.5 h 25.1 
+404 16.9 11.5 h 18.6 
+405 18.8 4.0 h 2.3 
+406 9.4 17.0 h 2.1 
+407 10.6 25.1 h 1.2 
+408 25.0 6.1 h 0.5 
+409 18.0 15.7 h 14.9 
+410 28.3 10.8 h 17.7 
+411 6.4 0.3 h 21.7 
+412 31.5 20.3 h 47.8 
+413 21.0 -3.9 h 0.6 
+414 -25.7 -15.3 h 120.8 
+415 -30.4 23.8 h 0.3 
+416 37.9 -4.0 h 0.7 
+417 24.1 5.5 h 5.9 
+418 -3.2 11.3 h 5.7 
+419 32.2 21.0 h 2.8 
+420 21.1 17.3 h 15.5 
+421 2.2 17.2 h 16.3 
+422 -23.1 -2.6 h 0.8 
+423 31.3 18.9 h 29.3 
+424 29.9 11.3 h 3.4 
+425 20.0 21.4 h 6.7 
+426 -41.9 -4.7 h 0.9 
+427 -5.8 0.7 h 14.1 
+428 2.6 4.9 h 5.7 
+429 23.0 11.3 h 0.9 
+430 139.7 149.8 h 80.0 
+431 -20.4 -15.7 h 33.0 
+432 -8.9 26.1 h 38.3 
+433 26.8 -15.0 h 9.3 
+434 -16.9 -6.5 h 0.7 
+435 28.1 14.7 h 3.9 
+436 23.0 22.9 h 1.6 
+437 23.6 16.6 h 6.9 
+438 16.7 8.4 h 3.6 
+439 3.4 -10.3 h 32.9 
+440 7.1 39.0 h 4.1 
+441 -61.7 7.4 h 0.3 
+442 -24.4 -4.0 h 1.9 
+443 45.2 48.7 h 115.2 
+444 13.1 -10.4 h 7.0 
+445 -26.9 -22.4 h 49.2 
+446 5.6 6.1 h 19.7 
+447 -10.6 4.3 h 16.8 
+448 -32.8 -21.5 h 15.9 
+449 16.0 10.6 h 0.8 
+450 -45.4 -21.1 h 0.7 
+451 11.9 11.7 h 23.3 
+452 13.0 -6.5 h 1.7 
+453 13.5 6.4 h 5.7 
+454 -5.1 8.4 h 14.9 
+455 11.4 12.6 h 20.2 
+456 9.5 9.6 h 8.6 
+457 -59.7 -32.3 h 1.9 
+458 37.7 17.6 h 1.6 
+459 7.6 11.8 h 0.7 
+460 -1.5 5.3 h 19.2 
+461 33.8 11.8 h 1.3 
+462 -14.5 36.2 h 0.9 
+463 94.6 120.0 h 105.8 
+464 -3.4 -5.6 h 5.0 
+465 -165.4 -67.3 h 80.0 
+466 23.1 -2.1 h 5.8 
+467 10.0 3.4 h 1.4 
+468 7.2 14.0 h 11.5 
+469 -68.2 10.8 h 1.0 
+470 132.0 25.5 h 32.5 
+471 31.7 1.6 h 1.0 
+472 26.9 33.4 h 10.2 
+473 29.9 21.2 h 5.0 
+474 27.4 26.3 h 0.1 
+475 99.9 77.7 h 3.3 
+476 39.3 20.8 h 1.8 
+477 35.2 4.3 h 0.7 
+478 29.0 10.9 h 0.3 
+479 -6.0 23.4 h 4.3 
+480 -1.6 7.7 h 28.1 
+481 29.3 19.5 h 1.1 
+482 -1.4 4.4 h 29.7 
+483 4.6 1.9 h 12.8 
+484 11.6 -1.5 h 0.8 
+485 18.9 15.7 h 8.8 
+486 -30.4 -31.6 h 6.9 
+487 15.0 1.8 h 25.9 
+488 9.6 3.9 h 10.9 
+489 30.9 20.4 h 0.4 
+490 245.2 137.8 h 24.3 
+491 -19.7 -2.9 h 256.9 
+492 -23.8 -2.8 h 0.2 
+493 29.5 26.7 h 0.2 
+494 34.3 10.2 h 2.6 
+495 33.5 12.0 h 0.7 
+496 -16.4 -77.3 h 2.0 
+497 5.4 8.7 h 25.9 
+498 2.9 46.7 h 1.2 
+499 13.0 58.7 h 53.4 
+500 26.9 -0.9 h 19.1 
+501 22.8 9.3 h 0.8 
+502 -11.4 4.9 h 0.7 
+503 -45.9 8.4 h 0.6 
+504 26.1 10.0 h 0.4 
+505 9.1 12.3 h 1.1 
+506 124.5 16.5 h 6.0 
+507 14.5 -1.3 h 4.7 
+508 10.3 -1.0 h 8.2 
+509 10.7 9.1 h 8.7 
+510 17.3 8.4 h 2.1 
+511 16.6 -1.2 h 12.2 
+512 22.2 21.5 h 0.1 
+513 -0.0 6.7 h 7.6 
+514 22.5 9.5 h 0.5 
+515 9.9 -53.5 h 364.0 
+516 3.6 7.5 h 6.2 
+517 15.0 2.0 h 6.6 
+518 -51.3 -2.5 h 0.9 
+519 105.9 15.3 h 1.3 
+520 2.0 19.8 h 0.0 
+521 10.9 10.0 h 12.0 
+522 7.5 14.9 h 17.2 
+523 -14.3 18.9 h 11.8 
+524 -25.1 -21.0 h 14.3 
+525 -4.9 21.2 h 3.0 
+526 19.4 15.8 h 23.6 
+527 26.3 14.2 h 14.4 
+528 12.5 16.2 h 10.3 
+529 -29.4 -4.1 h 3.5 
+530 -31.8 5.5 h 8.2 
+531 0.5 -1.6 h 17.0 
+532 -21.1 50.6 h 0.1 
+533 -5.1 9.9 h 18.7 
+534 26.2 16.4 h 1.0 
+535 79.7 103.3 h 126.4 
+536 -25.8 -3.9 h 6.7 
+537 -20.6 -20.5 h 48.4 
+538 37.8 5.7 h 0.0 
+539 -17.0 -7.4 h 0.2 
+540 -6.3 29.6 h 39.7 
+541 -43.3 -1.4 h 7.4 
+542 25.3 -13.7 h 0.7 
+543 -24.1 -27.4 h 22.2 
+544 11.3 17.1 h 9.6 
+545 -6.4 -38.5 h 4.9 
+546 11.9 17.7 h 23.7 
+547 18.3 -12.3 h 15.9 
+548 -33.2 -13.5 h 1.5 
+549 -6.5 -2.3 h 1.0 
+550 -0.3 -5.0 h 9.1 
+551 16.7 -1.0 h 30.5 
+552 21.8 5.9 h 11.2 
+553 -21.2 -21.6 h 3.2 
+554 34.7 15.8 h 0.4 
+555 18.4 23.7 h 0.8 
+556 29.1 8.7 h 1.0 
+557 28.5 19.9 h 0.7 
+558 24.5 8.6 h 0.8 
+559 48.5 16.1 h 1.4 
+560 31.8 2.8 h 15.0 
+561 -0.5 6.3 h 7.4 
+562 -9.4 -39.4 h 0.2 
+563 22.6 18.1 h 0.4 
+564 33.0 14.7 h 34.9 
+565 9.5 -47.8 h 7.3 
+566 -18.1 -6.4 h 3.7 
+567 4.6 0.0 h 30.6 
+568 44.7 14.2 h 81.5 
+569 12.4 34.4 h 0.9 
+570 4.3 4.1 h 6.6 
+571 222.6 -77.4 h 4.3 
+572 -19.2 -5.2 h 14.4 
+573 18.5 -1.9 h 15.8 
+574 11.1 -1.7 h 6.2 
+575 28.9 11.2 h 73.2 
+576 7.9 -3.5 h 2.3 
+577 2.4 32.5 h 33.7 
+578 -14.1 -2.8 h 34.0 
+579 15.5 12.5 h 22.1 
+580 -8.6 2.8 h 7.5 
+581 -27.7 -16.6 h 0.5 
+582 -36.1 -0.1 h 0.6 
+583 20.6 10.1 h 5.6 
+584 13.5 -19.9 h 7.2 
+585 -40.2 2.0 h 27.1 
+586 -33.5 14.5 h 1.6 
+587 0.6 27.4 h 6.9 
+588 24.4 41.5 h 6.7 
+589 20.3 9.8 h 12.1 
+590 -8.4 -0.8 h 12.5 
+591 36.4 4.4 h 12.4 
+592 6.6 12.4 h 14.1 
+593 20.0 7.9 h 3.6 
+594 -15.7 -9.5 h 206.5 
+595 70.4 84.5 h 31.5 
+596 -6.3 9.5 h 3.5 
+597 25.4 1.8 h 19.5 
+598 -5.6 9.0 h 6.6 
+599 -27.3 -13.6 h 38.5 
+600 11.1 15.3 h 19.8 
+601 24.3 4.7 h 0.9 
+602 11.9 -6.7 h 32.0 
+603 10.1 15.0 h 6.4 
+604 42.4 33.2 h 11.2 
+605 32.3 18.7 h 74.1 
+606 -8.7 0.3 h 9.1 
+607 -32.5 6.7 h 228.4 
+608 -101.6 -63.6 h 101.3 
+609 -11.8 3.1 h 11.2 
+610 15.4 -1.7 h 16.4 
+611 5.5 -5.2 h 20.0 
+612 -6.3 -16.2 h 22.1 
+613 -17.5 -0.9 h 7.5 
+614 39.1 10.7 h 55.6 
+615 24.6 8.9 h 92.1 
+616 23.2 -34.3 h 0.6 
+617 28.1 16.7 h 6.7 
+618 90.3 59.6 h 1.8 
+619 7.3 17.2 h 27.0 
+620 -163.6 -102.5 h 34.4 
+621 16.9 14.6 h 0.1 
+622 2.9 9.5 h 24.7 
+623 -6.6 0.8 h 8.5 
+624 7.0 -0.8 h 3.9 
+625 -41.9 -6.5 h 0.6 
+626 -1.9 36.6 h 25.5 
+627 18.4 14.2 h 0.4 
+628 -43.3 -68.2 h 2.0 
+629 121.1 78.7 h 0.5 
+630 -10.1 8.3 h 3.1 
+631 25.5 24.5 h 77.5 
+632 -35.8 -10.0 h 215.2 
+633 -33.7 5.5 h 1.5 
+634 32.8 14.7 h 0.4 
+635 -51.5 3.0 h 10.3 
+636 21.4 39.6 h 0.9 
+637 16.4 6.7 h 0.5 
+638 25.9 20.7 h 0.4 
+639 19.4 37.6 h 0.1 
+640 -34.6 -30.5 h 1.0 
+641 62.5 4.1 h 4.0 
+642 31.5 -9.7 h 0.5 
+643 21.3 10.3 h 12.7 
+644 36.1 3.9 h 1.6 
+645 -6.2 2.5 h 16.5 
+646 20.4 9.4 h 6.2 
+647 -28.5 -16.8 h 0.1 
+648 -8.0 8.9 h 0.4 
+649 -19.5 -4.3 h 47.7 
+650 -15.5 -33.1 h 0.3 
+651 12.1 4.6 h 6.2 
+652 11.8 7.5 h 13.5 
+653 6.2 2.6 h 13.7 
+654 6.1 22.5 h 14.5 
+655 -7.0 5.9 h 0.5 
+656 115.5 41.3 h 0.5 
+657 29.7 7.2 h 12.2 
+658 21.2 16.0 h 67.3 
+659 -43.2 -5.7 h 0.3 
+660 23.3 10.7 h 0.9 
+661 -29.5 -13.3 h 8.0 
+662 -13.4 5.6 h 0.5 
+663 -11.3 -6.6 h 31.6 
+664 -26.5 -5.1 h 13.9 
+665 -8.2 -3.7 h 0.3 
+666 2.3 13.4 h 1.3 
+667 17.6 15.3 h 8.5 
+668 87.4 59.6 h 0.3 
+669 20.1 -4.0 h 26.4 
+670 -38.5 -21.6 h 1.0 
+671 11.8 7.3 h 3.7 
+672 2.1 -2.0 h 0.1 
+673 -10.6 10.4 h 2.3 
+674 -8.4 -32.4 h 159.9 
+675 -27.9 -20.3 h 21.2 
+676 253.9 -129.4 h 295.5 
+677 -8.9 17.8 h 6.6 
+678 -187.7 -99.1 h 21.3 
+679 27.9 11.3 h 5.1 
+680 13.8 -10.1 h 0.1 
+681 -25.5 -7.1 h 20.8 
+682 21.9 28.2 h 0.3 
+683 -47.2 -7.5 h 1.6 
+684 22.4 26.7 h 5.8 
+685 95.4 -9.9 h 71.4 
+686 -0.2 6.4 h 4.2 
+687 -5.3 14.6 h 38.2 
+688 -25.7 6.6 h 177.8 
+689 -40.3 -2.1 h 3.0 
+690 0.4 -1.4 h 17.8 
+691 24.8 1.3 h 0.9 
+692 10.7 -7.0 h 0.9 
+693 24.3 7.5 h 5.9 
+694 33.3 18.7 h 0.8 
+695 -30.8 8.4 h 41.3 
+696 -39.4 -12.5 h 0.5 
+697 -26.3 -13.2 h 10.9 
+698 -1.1 1.2 h 6.8 
+699 -49.4 -9.4 h 4.6 
+700 -5.3 -0.1 h 7.6 
+701 17.8 6.8 h 0.2 
+702 20.2 22.8 h 2.8 
+703 107.7 7.4 h 65.0 
+704 -1.5 6.2 h 13.1 
+705 -28.9 -1.8 h 9.9 
+706 -15.8 8.4 h 61.3 
+707 -32.7 -49.6 h 4.1 
+708 59.1 20.5 h 70.6 
+709 23.9 22.5 h 0.8 
+710 -34.0 2.2 h 7.2 
+711 9.1 4.6 h 0.6 
+712 37.2 -3.0 h 0.1 
+713 -21.7 -11.4 h 20.4 
+714 18.1 7.9 h 0.3 
+715 28.4 18.9 h 2.2 
+716 -16.9 -2.2 h 0.4 
+717 -4.6 -5.3 h 0.4 
+718 24.8 15.5 h 3.7 
+719 -42.9 -16.5 h 6.9 
+720 29.0 12.2 h 0.9 
+721 -99.5 -134.2 h 42.1 
+722 26.6 35.8 h 11.5 
+723 19.1 9.9 h 0.3 
+724 -3.0 -1.4 h 36.2 
+725 -24.9 13.3 h 13.5 
+726 -49.3 -25.6 h 4.1 
+727 35.8 20.7 h 1.8 
+728 -46.9 -35.8 h 146.4 
+729 13.5 42.2 h 20.9 
+730 -12.7 -18.2 h 16.1 
+731 -4.4 -1.1 h 6.4 
+732 -20.1 29.7 h 11.6 
+733 -3.9 10.2 h 18.1 
+734 13.5 -9.3 h 2.1 
+735 2.4 1.7 h 46.0 
+736 30.9 19.6 h 0.4 
+737 -6.7 17.3 h 0.2 
+738 -3.7 4.6 h 27.1 
+739 8.7 -19.0 h 13.0 
+740 13.9 25.7 h 9.2 
+741 -24.6 -20.7 h 5.8 
+742 27.0 14.8 h 51.6 
+743 0.1 4.0 h 2.6 
+744 1.4 2.2 h 24.7 
+745 3.0 -22.1 h 25.7 
+746 -27.2 21.5 h 36.5 
+747 26.6 19.6 h 6.5 
+748 -30.9 -30.2 h 0.3 
+749 -82.8 -30.3 h 136.5 
+750 -6.5 3.5 h 7.8 
+751 4.5 7.3 h 1.3 
+752 12.7 -17.7 h 0.6 
+753 -1.2 9.6 h 2.1 
+754 90.2 51.5 h 4.3 
+755 14.4 -1.1 h 10.7 
+756 32.2 22.1 h 0.9 
+757 15.4 11.1 h 18.7 
+758 122.1 82.0 h 0.9 
+759 -27.9 -3.4 h 1.5 
+760 -40.2 -3.5 h 1.7 
+761 33.6 12.7 h 5.6 
+762 19.0 -0.4 h 4.0 
+763 -0.0 30.5 h 0.9 
+764 8.2 4.6 h 13.8 
+765 15.6 4.3 h 23.7 
+766 -4.6 8.1 h 10.9 
+767 23.2 14.8 h 10.4 
+768 34.1 10.5 h 1.1 
+769 11.4 9.2 h 26.2 
+770 13.4 30.3 h 7.1 
+771 -13.9 2.3 h 30.4 
+772 -39.5 -3.3 h 8.3 
+773 -129.4 103.9 h 0.5 
+774 9.3 12.0 h 20.3 
+775 29.4 21.5 h 0.3 
+776 23.9 12.9 h 4.3 
+777 -1.3 3.1 h 30.8 
+778 15.2 11.2 h 19.9 
+779 -15.8 -4.1 h 60.9 
+780 14.2 25.9 h 16.9 
+781 25.8 9.7 h 1.9 
+782 117.3 31.7 h 39.4 
+783 4.5 4.6 h 43.1 
+784 9.1 -5.4 h 21.6 
+785 -34.0 -26.9 h 2.0 
+786 -24.4 -2.7 h 5.5 
+787 23.6 14.0 h 0.2 
+788 15.7 3.1 h 23.8 
+789 -4.5 11.1 h 34.2 
+790 9.0 12.8 h 1.1 
+791 -1.2 -3.6 h 0.5 
+792 -175.6 52.3 h 12.5 
+793 -37.5 -15.6 h 0.2 
+794 2.9 10.6 h 5.8 
+795 29.3 7.4 h 11.9 
+796 12.0 1.7 h 70.6 
+797 23.8 18.7 h 10.5 
+798 -116.2 111.3 h 41.1 
+799 9.8 2.4 h 28.8 
+800 6.7 18.4 h 0.5 
+801 30.9 37.4 h 2.3 
+802 25.0 9.7 h 5.1 
+803 -26.0 -11.2 h 24.7 
+804 19.3 7.6 h 1.6 
+805 -18.4 -15.6 h 3.1 
+806 16.3 10.8 h 4.7 
+807 15.7 20.2 h 16.3 
+808 -1.9 0.6 h 20.1 
+809 -67.8 -7.5 h 1.3 
+810 10.9 7.9 h 4.0 
+811 -29.0 -40.2 h 0.2 
+812 24.7 22.3 h 2.2 
+813 -12.9 -13.1 h 11.6 
+814 41.8 4.6 h 0.3 
+815 2.5 12.5 h 4.3 
+816 -14.2 -10.5 h 4.4 
+817 -56.0 2.7 h 0.6 
+818 -3.5 11.9 h 8.6 
+819 8.8 30.6 h 0.2 
+820 26.5 18.5 h 0.8 
+821 -30.4 -11.8 h 9.2 
+822 -34.2 -7.7 h 1.1 
+823 22.8 19.5 h 0.4 
+824 -38.3 74.0 h 31.6 
+825 23.3 9.9 h 0.5 
+826 -8.4 11.1 h 1.9 
+827 -40.7 -11.4 h 0.3 
+828 -50.1 -18.4 h 0.2 
+829 35.2 46.3 h 0.6 
+830 23.5 -0.2 h 0.7 
+831 -8.4 4.2 h 15.9 
+832 20.4 18.6 h 13.7 
+833 15.4 3.1 h 13.1 
+834 -46.3 -5.9 h 0.4 
+835 -36.8 -26.1 h 1.3 
+836 13.3 12.1 h 34.3 
+837 -18.8 -23.9 h 19.3 
+838 14.2 4.6 h 6.0 
+839 27.9 11.8 h 2.8 
+840 23.7 7.1 h 5.2 
+841 1.9 -6.7 h 59.8 
+842 32.0 14.1 h 10.5 
+843 -52.1 -7.7 h 11.9 
+844 -9.3 -14.9 h 23.0 
+845 13.8 16.8 h 2.1 
+846 -22.4 0.2 h 3.2 
+847 -4.5 -18.9 h 1.9 
+848 32.6 26.0 h 0.9 
+849 -35.2 -16.4 h 0.9 
+850 18.7 11.9 h 1.8 
+851 -2.7 21.1 h 6.3 
+852 0.2 0.2 h 2.0 
+853 27.6 11.0 h 0.4 
+854 -32.1 -11.1 h 0.7 
+855 -5.8 1.1 h 8.8 
+856 -39.7 5.4 h 15.5 
+857 -15.9 -21.4 h 0.4 
+858 26.6 20.8 h 0.2 
+859 -7.6 6.2 h 5.7 
+860 -14.5 8.5 h 2.6 
+861 12.0 13.7 h 19.7 
+862 101.0 83.3 h 1.1 
+863 12.5 3.6 h 0.4 
+864 -41.0 -2.5 h 0.7 
+865 28.0 14.0 h 7.6 
+866 -11.3 -19.8 h 8.0 
+867 0.8 12.8 h 5.6 
+868 -18.8 -26.6 h 2.3 
+869 17.4 4.4 h 11.3 
+870 0.5 3.6 h 3.2 
+871 -26.2 -17.0 h 1.3 
+872 7.8 7.8 h 25.7 
+873 -40.8 -4.5 h 13.0 
+874 8.1 1.5 h 47.1 
+875 10.9 3.3 h 21.4 
+876 13.9 20.5 h 2.0 
+877 1.7 3.7 h 19.4 
+878 -40.7 4.3 h 1.1 
+879 -36.0 -13.0 h 0.6 
+880 -0.0 4.5 h 3.8 
+881 -5.5 14.2 h 9.8 
+882 -34.4 -24.3 h 0.9 
+883 5.9 -11.2 h 13.9 
+884 28.2 11.0 h 0.2 
+885 26.1 25.7 h 26.9 
+886 -16.8 2.9 h 0.1 
+887 -35.5 -23.1 h 5.5 
+888 25.9 18.8 h 0.6 
+889 2.2 27.2 h 6.6 
+890 24.7 5.6 h 11.1 
+891 38.9 18.2 h 3.8 
+892 -124.4 -126.9 h 0.4 
+893 26.4 2.8 h 4.6 
+894 33.5 6.6 h 105.5 
+895 25.0 21.5 h 24.2 
+896 -19.1 -6.8 h 36.6 
+897 43.5 18.8 h 67.3 
+898 -47.6 -2.4 h 2.0 
+899 61.1 -38.0 h 12.3 
+900 31.6 9.8 h 9.4 
+901 116.2 7.9 h 0.8 
+902 111.3 -29.7 h 0.5 
+903 -0.3 19.8 h 1.4 
+904 116.8 19.3 h 1.0 
+905 -6.4 5.1 h 4.2 
+906 10.4 8.3 h 29.0 
+907 26.0 9.4 h 1.2 
+908 29.2 22.3 h 0.5 
+909 -8.4 -40.4 h 26.0 
+910 -78.7 -27.2 h 1.4 
+911 19.8 10.7 h 3.3 
+912 10.3 7.4 h 8.9 
+913 -69.3 -31.8 h 15.6 
+914 10.9 48.7 h 2.8 
+915 6.0 7.3 h 12.6 
+916 -27.8 -5.5 h 1.0 
+917 -5.1 -4.5 h 12.1 
+918 16.8 -67.6 h 0.2 
+919 -29.2 -22.0 h 0.4 
+920 24.6 19.5 h 0.6 
+921 -36.8 -1.4 h 6.4 
+922 -48.9 -34.4 h 1.9 
+923 22.1 21.4 h 5.1 
+924 22.6 3.2 h 13.4 
+925 9.3 20.0 h 87.2 
+926 3.4 4.6 h 16.1 
+927 9.2 17.4 h 37.0 
+928 34.6 8.0 h 2.8 
+929 -26.0 -32.0 h 0.3 
+930 -3.3 5.3 h 11.4 
+931 20.0 15.4 h 7.8 
+932 26.2 6.8 h 13.9 
+933 -30.3 -27.6 h 10.1 
+934 107.3 101.2 h 2.6 
+935 13.2 21.1 h 7.6 
+936 32.8 5.7 h 8.4 
+937 13.3 41.7 h 63.0 
+938 24.0 11.2 h 3.0 
+939 2.1 -3.3 h 4.7 
+940 -143.7 -120.0 h 0.4 
+941 66.9 -180.8 h 100.4 
+942 28.0 9.5 h 0.4 
+943 -40.6 -16.4 h 48.2 
+944 102.0 37.0 h 0.1 
+945 20.2 23.2 h 3.3 
+946 -72.4 9.6 h 1.4 
+947 1.5 12.0 h 6.9 
+948 29.1 16.0 h 1.7 
+949 20.1 21.0 h 10.6 
+950 6.8 6.1 h 1.4 
+951 10.7 5.0 h 31.5 
+952 17.3 13.1 h 0.1 
+953 99.1 75.7 h 1.0 
+954 5.2 31.0 h 1.3 
+955 27.9 17.9 h 15.7 
+956 23.9 13.4 h 3.9 
+957 13.8 13.8 h 22.8 
+958 25.4 20.8 h 3.7 
+959 -38.1 -17.7 h 1.0 
+960 23.2 5.0 h 0.9 
+961 1.7 24.6 h 6.8 
+962 37.4 15.0 h 13.6 
+963 9.8 -3.4 h 22.3 
+964 13.0 5.2 h 6.6 
+965 -5.2 6.2 h 6.7 
+966 19.7 16.1 h 0.2 
+967 15.3 12.0 h 29.8 
+968 20.3 13.6 h 27.8 
+969 -31.0 -8.5 h 19.3 
+970 6.0 4.6 h 1.4 
+971 -1.0 2.1 h 9.9 
+972 -15.0 -1.9 h 18.9 
+973 -5.4 0.7 h 1.6 
+974 1.1 -5.6 h 9.6 
+975 9.7 -14.3 h 0.4 
+976 -27.5 6.2 h 68.7 
+977 29.6 25.4 h 8.5 
+978 -45.4 36.5 h 1.2 
+979 6.3 24.3 h 17.7 
+980 32.2 9.0 h 0.3 
+981 -42.5 -15.2 h 2.4 
+982 14.5 12.9 h 5.0 
+983 19.4 -24.8 h 0.3 
+984 -43.4 -17.5 h 3.7 
+985 31.3 5.0 h 9.6 
+986 17.9 20.3 h 2.8 
+987 6.9 6.3 h 8.9 
+988 129.1 -23.7 h 0.2 
+989 11.1 -9.0 h 3.7 
+990 -53.0 1.3 h 6.3 
+991 42.1 36.1 h 1.9 
+992 305.6 294.6 h 229.2 
+993 18.2 6.4 h 36.0 
+994 15.3 -3.6 h 11.2 
+995 -14.4 3.2 h 19.4 
+996 12.3 -3.9 h 5.8 
+997 40.3 -41.5 h 0.4 
+998 8.6 21.5 h 21.0 
+999 20.3 11.1 h 16.4 
+1000 17.7 25.0 h 0.3 
+1001 -35.3 -8.4 h 1.4 
+1002 -25.3 -20.8 h 6.8 
+1003 11.7 -3.5 h 10.4 
+1004 -29.6 -13.1 h 12.3 
+1005 22.3 7.7 h 8.0 
+1006 -14.3 33.6 h 2.7 
+1007 23.1 20.4 h 4.5 
+1008 31.1 -11.0 h 17.6 
+1009 15.2 8.5 h 7.5 
+1010 -13.4 4.3 h 10.3 
+1011 38.3 31.4 h 23.2 
+1012 128.8 -216.3 h 0.6 
+1013 9.6 5.4 h 23.7 
+1014 -9.6 -12.8 h 15.3 
+1015 18.1 16.7 h 24.3 
+1016 -8.5 16.2 h 6.0 
+1017 15.5 -12.3 h 8.1 
+1018 5.4 20.2 h 0.5 
+1019 7.8 18.6 h 13.0 
+1020 20.0 5.5 h 2.8 
+1021 16.6 21.6 h 14.0 
+1022 52.8 75.3 h 9.9 
+1023 -3.0 4.2 h 33.7 
+1024 16.0 16.6 h 6.1 
+1025 -0.6 16.4 h 9.2 
+1026 -3.7 -1.5 h 6.0 
+1027 66.1 112.9 h 0.2 
+1028 20.8 8.0 h 5.8 
+1029 -1.7 4.0 h 1.1 
+1030 -21.4 61.3 h 8.3 
+1031 24.5 18.2 h 1.3 
+1032 9.8 17.4 h 24.7 
+1033 -32.2 -18.4 h 0.2 
+1034 -4.9 4.5 h 23.5 
+1035 10.7 -4.8 h 15.5 
+1036 -61.4 -57.4 h 99.6 
+1037 17.5 12.8 h 8.2 
+1038 -36.0 2.7 h 10.6 
+1039 11.6 23.9 h 0.6 
+1040 2.6 11.8 h 8.3 
+1041 11.1 1.6 h 12.0 
+1042 4.5 12.1 h 32.1 
+1043 19.4 11.2 h 1.1 
+1044 1.2 17.4 h 0.9 
+1045 -5.0 14.6 h 8.1 
+1046 35.0 -2.0 h 0.3 
+1047 86.5 60.4 h 1.1 
+1048 20.5 37.4 h 0.8 
+1049 34.0 38.2 h 1.2 
+1050 -49.7 -8.2 h 0.2 
+1051 9.0 4.8 h 22.2 
+1052 34.4 10.8 h 0.2 
+1053 -32.8 -12.6 h 1.9 
+1054 -8.9 3.4 h 0.2 
+1055 21.4 12.3 h 3.2 
+1056 -17.0 -3.2 h 0.6 
+1057 -35.0 -15.8 h 3.1 
+1058 35.6 22.6 h 7.9 
+1059 -7.8 6.5 h 15.7 
+1060 6.5 10.4 h 7.1 
+1061 1.9 -10.8 h 18.7 
+1062 25.7 54.7 h 0.2 
+1063 14.2 6.6 h 15.2 
+1064 1.4 5.5 h 13.2 
+1065 -3.6 -57.0 h 1.7 
+1066 153.2 68.2 h 69.8 
+1067 0.7 -8.8 h 0.1 
+1068 -12.7 -6.1 h 24.3 
+1069 1.6 7.6 h 17.2 
+1070 -36.5 -22.2 h 31.7 
+1071 15.9 15.3 h 17.5 
+1072 -44.5 -12.7 h 2.4 
+1073 30.2 -8.7 h 0.8 
+1074 32.1 -13.0 h 2.7 
+1075 85.8 1.6 h 7.8 
+1076 -20.7 -19.2 h 14.7 
+1077 27.8 -8.3 h 0.9 
+1078 -26.1 -23.1 h 25.2 
+1079 -7.4 14.6 h 3.4 
+1080 22.6 5.9 h 27.6 
+1081 -20.2 -23.5 h 174.6 
+1082 5.5 3.0 h 2.3 
+1083 -25.7 -19.2 h 30.9 
+1084 -19.9 -24.8 h 16.9 
+1085 36.6 25.2 h 0.9 
+1086 28.5 13.3 h 12.1 
+1087 -27.2 -16.1 h 2.4 
+1088 35.8 3.4 h 4.9 
+1089 12.6 10.2 h 150.5 
+1090 16.1 15.4 h 2.1 
+1091 -10.5 4.1 h 1.0 
+1092 -28.1 -11.9 h 0.0 
+1093 -105.6 -89.8 h 98.9 
+1094 -0.2 10.1 h 14.4 
+1095 -2.1 6.4 h 7.1 
+1096 11.0 14.9 h 7.2 
+1097 46.6 125.1 h 69.0 
+1098 124.8 74.7 h 4.1 
+1099 11.3 -1.8 h 3.7 
+1100 17.6 6.6 h 1.9 
+1101 19.5 19.6 h 12.7 
+1102 12.2 37.4 h 3.6 
+1103 28.5 12.3 h 0.8 
+1104 35.7 9.2 h 3.9 
+1105 18.7 1.9 h 4.7 
+1106 23.0 5.5 h 13.5 
+1107 33.4 13.5 h 8.4 
+1108 -61.3 -55.6 h 103.7 
+1109 -57.4 16.3 h 5.8 
+1110 18.0 -2.5 h 1.2 
+1111 23.5 16.0 h 50.3 
+1112 6.0 4.0 h 19.7 
+1113 -21.0 -3.4 h 3.4 
+1114 -88.8 -60.6 h 29.0 
+1115 72.7 47.2 h 0.1 
+1116 1.9 19.7 h 9.2 
+1117 4.6 4.7 h 53.8 
+1118 36.3 17.9 h 0.0 
+1119 -19.3 -27.6 h 0.5 
+1120 20.7 14.4 h 1.0 
+1121 5.1 -1.2 h 7.1 
+1122 95.3 43.9 h 0.1 
+1123 22.6 13.5 h 0.9 
+1124 6.7 17.3 h 13.4 
+1125 37.2 12.5 h 3.2 
+1126 -31.0 -39.1 h 11.0 
+1127 120.5 12.6 h 5.5 
+1128 -35.5 8.1 h 1.0 
+1129 21.7 2.6 h 3.1 
+1130 9.9 5.1 h 34.6 
+1131 5.7 24.7 h 5.7 
+1132 24.6 26.8 h 2.0 
+1133 3.3 4.9 h 24.8 
+1134 43.2 15.0 h 0.2 
+1135 -17.1 -2.6 h 0.2 
+1136 33.2 14.8 h 10.4 
+1137 -0.2 9.9 h 16.2 
+1138 2.8 -19.1 h 0.5 
+1139 -37.2 -7.4 h 12.0 
+1140 8.7 63.2 h 27.9 
+1141 22.1 15.4 h 15.6 
+1142 4.9 3.1 h 0.0 
+1143 19.7 -13.4 h 38.5 
+1144 -19.7 -10.8 h 52.1 
+1145 -49.1 -13.3 h 63.7 
+1146 -6.5 -51.7 h 3.7 
+1147 128.6 60.5 h 1.3 
+1148 13.6 23.2 h 0.6 
+1149 -4.7 -2.9 h 19.0 
+1150 17.1 13.6 h 28.9 
+1151 33.6 3.3 h 0.7 
+1152 3.9 19.3 h 15.8 
+1153 -3.1 4.7 h 13.0 
+1154 -30.1 -25.3 h 0.5 
+1155 -22.6 14.8 h 0.6 
+1156 17.3 38.2 h 0.9 
+1157 4.8 -15.1 h 0.8 
+1158 -39.3 -26.2 h 12.5 
+1159 35.6 18.7 h 2.3 
+1160 -1.1 9.7 h 22.2 
+1161 -46.2 -15.8 h 0.8 
+1162 -1.5 6.3 h 11.7 
+1163 24.8 0.4 h 7.4 
+1164 7.8 12.7 h 14.7 
+1165 -4.0 9.6 h 2.4 
+1166 25.8 -4.4 h 22.5 
+1167 23.1 21.1 h 10.1 
+1168 -53.4 -16.2 h 7.5 
+1169 -40.5 -9.5 h 0.5 
+1170 24.3 10.1 h 1.0 
+1171 -40.8 -10.7 h 0.7 
+1172 14.3 21.8 h 1.1 
+1173 15.6 11.8 h 3.7 
+1174 20.1 35.0 h 6.7 
+1175 7.4 -12.5 h 3.1 
+1176 21.5 2.6 h 130.7 
+1177 -50.8 -104.8 h 94.4 
+1178 10.6 2.3 h 20.0 
+1179 -84.3 -31.2 h 97.4 
+1180 23.4 7.7 h 5.8 
+1181 -126.8 -134.0 h 26.7 
+1182 22.2 12.2 h 15.4 
+1183 27.0 21.5 h 17.3 
+1184 13.4 11.2 h 3.8 
+1185 2.7 -0.5 h 4.4 
+1186 12.2 2.3 h 19.3 
+1187 29.0 -1.4 h 2.9 
+1188 32.2 3.7 h 5.5 
+1189 25.8 11.6 h 2.8 
+1190 -43.2 -9.9 h 1.2 
+1191 14.8 6.5 h 24.2 
+1192 -18.5 -12.7 h 14.4 
+1193 23.2 18.2 h 2.5 
+1194 31.4 8.1 h 2.9 
+1195 3.4 9.5 h 20.2 
+1196 16.0 2.0 h 3.1 
+1197 5.1 4.9 h 27.2 
+1198 15.2 10.8 h 21.1 
+1199 26.6 16.3 h 2.9 
+1200 -5.3 2.0 h 3.9 
+1201 30.8 -11.0 h 130.7 
+1202 -13.4 17.7 h 1.9 
+1203 -9.4 0.9 h 0.4 
+1204 114.5 -2.2 h 40.4 
+1205 25.7 31.3 h 0.7 
+1206 12.7 8.3 h 5.1 
+1207 26.6 11.0 h 4.1 
+1208 -39.7 83.7 h 85.4 
+1209 23.9 12.9 h 25.9 
+1210 -9.1 17.3 h 15.7 
+1211 25.9 22.0 h 4.0 
+1212 17.7 12.2 h 10.5 
+1213 52.4 -53.2 h 8.3 
+1214 5.0 8.2 h 19.0 
+1215 8.7 -4.8 h 0.4 
+1216 -6.1 7.7 h 6.7 
+1217 -7.8 53.5 h 0.4 
+1218 109.1 -10.9 h 4.7 
+1219 -11.8 0.6 h 0.3 
+1220 22.1 14.8 h 10.3 
+1221 -25.5 -37.4 h 5.6 
+1222 20.0 19.0 h 93.4 
+1223 7.1 4.4 h 6.5 
+1224 -7.6 -3.4 h 0.1 
+1225 -10.0 14.3 h 5.5 
+1226 31.2 10.8 h 1.3 
+1227 -151.3 -75.0 h 6.0 
+1228 -26.6 -2.0 h 19.9 
+1229 -131.4 -72.1 h 70.9 
+1230 -24.1 -13.2 h 61.5 
+1231 27.6 5.0 h 0.9 
+1232 -16.2 11.5 h 1.6 
+1233 -28.5 -8.1 h 1.1 
+1234 -39.2 -1.4 h 2.4 
+1235 -20.9 -15.4 h 0.1 
+1236 -27.5 13.9 h 1.3 
+1237 8.7 21.3 h 19.1 
+1238 3.6 3.6 h 10.6 
+1239 -158.9 -37.6 h 0.2 
+1240 -47.4 -20.7 h 0.4 
+1241 4.0 19.2 h 8.1 
+1242 7.1 5.1 h 20.3 
+1243 3.1 -19.3 h 0.8 
+1244 -3.2 1.7 h 6.2 
+1245 17.9 33.7 h 4.5 
+1246 18.8 11.4 h 1.7 
+1247 22.2 12.3 h 11.8 
+1248 -74.4 -8.6 h 138.3 
+1249 10.0 38.8 h 2.5 
+1250 21.7 12.5 h 10.7 
+1251 -4.2 22.3 h 1.0 
+1252 -16.8 7.7 h 21.1 
+1253 -43.8 -9.3 h 0.6 
+1254 -68.9 -49.2 h 83.9 
+1255 -1.8 7.9 h 7.8 
+1256 31.0 -7.0 h 21.1 
+1257 29.9 12.8 h 19.0 
+1258 -8.0 14.3 h 6.8 
+1259 14.4 -2.9 h 6.3 
+1260 -39.1 2.4 h 3.5 
+1261 13.0 20.5 h 9.6 
+1262 94.4 24.5 h 9.5 
+1263 10.3 13.3 h 0.5 
+1264 7.9 6.1 h 4.6 
+1265 17.2 13.3 h 10.4 
+1266 18.6 -9.6 h 0.9 
+1267 22.8 -3.3 h 2.4 
+1268 11.4 0.2 h 11.2 
+1269 -15.1 10.2 h 1.0 
+1270 -107.5 164.1 h 0.5 
+1271 14.6 -9.3 h 0.6 
+1272 -4.0 -1.9 h 8.1 
+1273 12.9 7.1 h 2.9 
+1274 -0.8 -16.7 h 0.6 
+1275 -14.0 -0.6 h 23.2 
+1276 91.5 45.7 h 35.8 
+1277 24.9 -4.9 h 3.5 
+1278 -7.5 7.9 h 19.5 
+1279 23.3 22.3 h 6.1 
+1280 20.3 27.2 h 32.2 
+1281 22.8 7.1 h 5.3 
+1282 30.7 13.7 h 0.6 
+1283 -7.4 -11.7 h 0.6 
+1284 16.2 6.4 h 14.8 
+1285 -36.6 13.0 h 1.2 
+1286 24.2 15.5 h 3.6 
+1287 -6.1 -15.6 h 5.6 
+1288 -42.5 -51.2 h 216.8 
+1289 10.9 34.7 h 0.4 
+1290 21.5 17.9 h 6.2 
+1291 18.7 -0.4 h 2.5 
+1292 21.7 12.9 h 3.5 
+1293 -10.3 15.1 h 0.4 
+1294 13.9 8.5 h 18.2 
+1295 28.3 5.6 h 7.2 
+1296 -18.4 -18.2 h 0.7 
+1297 -28.5 8.2 h 99.1 
+1298 16.0 8.4 h 21.4 
+1299 14.6 13.0 h 25.4 
+1300 22.6 4.9 h 1.4 
+1301 13.8 2.5 h 22.3 
+1302 7.1 11.0 h 5.5 
+1303 72.3 -14.2 h 26.6 
+1304 14.7 7.5 h 19.1 
+1305 35.2 16.3 h 0.1 
+1306 -21.8 -6.1 h 0.7 
+1307 35.2 25.1 h 3.9 
+1308 -55.3 -27.3 h 0.6 
+1309 -16.1 11.8 h 0.7 
+1310 -33.5 -31.2 h 0.2 
+1311 -30.2 -11.8 h 0.8 
+1312 39.4 2.7 h 1.5 
+1313 21.3 -2.0 h 12.8 
+1314 9.7 -41.3 h 3.1 
+1315 24.0 6.8 h 15.9 
+1316 -34.8 -5.7 h 3.1 
+1317 -47.4 1.3 h 11.4 
+1318 36.5 12.0 h 2.4 
+1319 25.4 17.2 h 7.3 
+1320 27.8 20.3 h 36.1 
+1321 27.4 1.4 h 0.6 
+1322 45.3 17.2 h 198.3 
+1323 51.8 19.7 h 99.3 
+1324 -6.5 10.5 h 2.5 
+1325 18.0 -34.0 h 0.6 
+1326 -10.1 20.6 h 2.7 
+1327 -6.2 28.8 h 13.3 
+1328 11.5 5.2 h 48.4 
+1329 28.1 -6.0 h 26.2 
+1330 4.4 -9.2 h 2.8 
+1331 -35.1 -2.9 h 2.6 
+1332 -183.5 -17.6 h 0.1 
+1333 27.9 23.3 h 0.9 
+1334 -42.6 -2.0 h 3.1 
+1335 25.2 5.4 h 7.5 
+1336 27.1 10.2 h 5.8 
+1337 -19.7 -9.0 h 4.8 
+1338 20.3 14.7 h 48.9 
+1339 -20.6 -7.4 h 0.0 
+1340 23.2 21.9 h 3.1 
+1341 -4.8 7.0 h 9.4 
+1342 24.4 9.1 h 3.1 
+1343 30.5 19.2 h 0.2 
+1344 -14.1 12.3 h 5.6 
+1345 -36.3 -14.7 h 1.6 
+1346 71.0 42.7 h 1.5 
+1347 48.1 33.1 h 85.5 
+1348 -50.9 -0.9 h 1.9 
+1349 4.5 33.2 h 0.1 
+1350 -13.6 10.3 h 6.1 
+1351 18.0 8.0 h 1.7 
+1352 -5.5 5.0 h 9.9 
+1353 -6.2 -4.5 h 27.6 
+1354 15.1 9.7 h 9.0 
+1355 -29.9 -8.8 h 0.2 
+1356 -6.6 18.0 h 2.3 
+1357 7.0 58.7 h 0.3 
+1358 3.0 -6.0 h 9.1 
+1359 21.0 22.5 h 111.8 
+1360 5.4 17.6 h 6.5 
+1361 -41.9 -11.7 h 4.6 
+1362 5.4 15.0 h 12.4 
+1363 16.6 15.2 h 1.8 
+1364 -4.3 -10.9 h 25.1 
+1365 -15.8 10.2 h 27.9 
+1366 -29.5 -25.8 h 2.5 
+1367 -9.7 1.2 h 13.2 
+1368 11.6 10.9 h 26.7 
+1369 -1.5 24.2 h 16.9 
+1370 16.9 9.5 h 12.2 
+1371 1.8 3.7 h 1.4 
+1372 -33.4 -17.0 h 12.4 
+1373 11.4 5.1 h 0.7 
+1374 22.4 -25.2 h 1.9 
+1375 29.7 22.5 h 2.6 
+1376 21.2 54.8 h 2.3 
+1377 -39.6 -18.0 h 1.5 
+1378 92.2 -20.1 h 63.1 
+1379 29.0 -3.4 h 5.3 
+1380 -32.3 6.4 h 14.5 
+1381 18.3 47.0 h 0.5 
+1382 -42.5 -21.5 h 0.5 
+1383 -178.1 -77.0 h 0.5 
+1384 21.8 13.8 h 6.1 
+1385 20.7 17.5 h 2.7 
+1386 -39.5 -5.6 h 2.4 
+1387 22.7 19.3 h 1.3 
+1388 -35.5 4.5 h 9.5 
+1389 24.6 -4.0 h 19.4 
+1390 28.1 16.7 h 0.4 
+1391 3.2 -2.7 h 10.8 
+1392 9.1 6.1 h 3.2 
+1393 27.5 17.8 h 11.2 
+1394 23.1 15.7 h 5.1 
+1395 13.8 22.2 h 7.3 
+1396 9.4 22.3 h 4.5 
+1397 69.6 29.1 h 0.7 
+1398 37.6 -42.7 h 1.0 
+1399 24.2 15.8 h 6.5 
+1400 31.4 -6.5 h 7.3 
+1401 -58.6 -18.8 h 0.5 
+1402 15.8 44.9 h 22.6 
+1403 28.6 -80.0 h 85.1 
+1404 12.8 -1.8 h 2.2 
+1405 -51.6 10.1 h 5.0 
+1406 4.0 12.3 h 17.6 
+1407 -7.2 20.4 h 0.9 
+1408 12.4 13.5 h 3.1 
+1409 28.7 11.2 h 0.2 
+1410 25.3 21.5 h 4.5 
+1411 22.7 16.7 h 0.0 
+1412 -14.1 -7.9 h 9.8 
+1413 7.6 21.5 h 12.3 
+1414 -40.7 3.9 h 7.1 
+1415 22.7 5.3 h 6.3 
+1416 17.7 -0.9 h 25.2 
+1417 34.6 21.8 h 37.0 
+1418 4.8 -15.4 h 1.9 
+1419 24.7 9.0 h 1.7 
+1420 37.1 28.9 h 3.9 
+1421 -14.8 -36.0 h 0.3 
+1422 1.7 -16.3 h 2.2 
+1423 17.0 9.2 h 17.1 
+1424 -38.7 14.2 h 11.7 
+1425 -36.4 12.2 h 17.7 
+1426 -14.9 1.8 h 27.2 
+1427 -25.8 5.1 h 188.2 
+1428 13.4 8.9 h 20.0 
+1429 25.2 15.0 h 8.0 
+1430 -1.5 0.5 h 4.2 
+1431 -13.3 7.2 h 0.3 
+1432 15.8 16.1 h 17.7 
+1433 25.7 6.0 h 0.9 
+1434 -38.9 -2.8 h 5.6 
+1435 26.9 -1.2 h 0.2 
+1436 -19.7 -28.5 h 23.8 
+1437 2.1 5.6 h 23.7 
+1438 29.3 6.2 h 13.0 
+1439 23.9 19.4 h 2.5 
+1440 -12.3 8.1 h 9.4 
+1441 8.6 -2.8 h 16.7 
+1442 -46.4 -2.3 h 3.0 
+1443 13.6 -8.1 h 14.0 
+1444 3.6 8.6 h 26.1 
+1445 15.4 15.6 h 12.4 
+1446 13.8 45.9 h 2.0 
+1447 -34.1 -26.8 h 0.9 
+1448 -33.1 -16.1 h 9.4 
+1449 26.8 10.2 h 5.7 
+1450 56.9 40.4 h 25.6 
+1451 1.0 6.1 h 9.9 
+1452 -3.9 42.7 h 1.0 
+1453 9.1 3.1 h 25.6 
+1454 38.0 17.0 h 64.0 
+1455 13.9 -19.8 h 4.4 
+1456 -31.8 33.5 h 0.2 
+1457 68.0 31.2 h 40.5 
+1458 19.3 6.8 h 0.5 
+1459 25.3 5.7 h 11.3 
+1460 27.5 7.8 h 1.1 
+1461 21.5 20.5 h 1.3 
+1462 46.9 28.2 h 2.5 
+1463 35.2 11.3 h 5.3 
+1464 20.2 8.3 h 5.6 
+1465 -34.6 -23.3 h 156.9 
+1466 -28.7 -22.5 h 2.4 
+1467 -27.0 -5.6 h 1.2 
+1468 43.0 -11.2 h 3.2 
+1469 -39.0 -18.0 h 0.9 
+1470 19.0 -23.4 h 3.0 
+1471 -34.5 -25.7 h 1.6 
+1472 -23.8 2.9 h 8.8 
+1473 -50.5 -16.8 h 0.5 
+1474 -51.4 -25.0 h 1.6 
+1475 28.4 -14.9 h 1.3 
+1476 -21.9 -1.6 h 0.1 
+1477 28.3 35.6 h 2.6 
+1478 20.3 18.4 h 1.1 
+1479 18.4 20.6 h 0.5 
+1480 -3.8 -38.8 h 13.9 
+1481 -41.9 -13.5 h 1.2 
+1482 1.0 -9.2 h 13.0 
+1483 3.9 9.2 h 5.0 
+1484 -40.3 3.6 h 198.6 
+1485 -7.9 24.8 h 0.7 
+1486 99.5 65.8 h 0.6 
+1487 -171.9 -49.3 h 43.5 
+1488 -33.9 -37.9 h 21.0 
+1489 -40.2 -34.2 h 0.6 
+1490 25.0 7.3 h 36.5 
+1491 26.7 -5.3 h 1.9 
+1492 16.9 14.1 h 9.6 
+1493 14.5 21.6 h 19.5 
+1494 -40.6 -9.1 h 3.6 
+1495 31.0 4.9 h 17.2 
+1496 13.1 121.2 h 137.7 
+1497 -42.6 -23.6 h 0.2 
+1498 13.0 15.8 h 24.0 
+1499 -8.1 29.1 h 2.7 
+1500 -14.0 -29.4 h 1.3 
+1501 -22.8 -6.9 h 9.5 
+1502 19.2 11.5 h 4.4 
+1503 32.8 12.7 h 1.4 
+1504 -46.9 10.2 h 1.3 
+1505 -6.3 -4.8 h 1.4 
+1506 21.0 18.3 h 0.4 
+1507 20.2 26.4 h 1.2 
+1508 -149.5 -48.1 h 0.8 
+1509 -25.4 -3.7 h 15.2 
+1510 25.0 16.1 h 4.8 
+1511 -10.3 5.6 h 15.7 
+1512 -36.5 -16.2 h 6.0 
+1513 9.3 12.0 h 16.3 
+1514 8.4 -2.7 h 26.4 
+1515 26.7 47.7 h 80.4 
+1516 8.6 22.6 h 34.2 
+1517 9.6 -13.4 h 1.1 
+1518 29.7 26.5 h 27.5 
+1519 -10.3 -31.2 h 0.6 
+1520 -17.9 10.4 h 8.4 
+1521 11.5 13.2 h 67.8 
+1522 1.2 5.4 h 18.6 
+1523 4.8 2.4 h 9.2 
+1524 10.8 -10.9 h 8.5 
+1525 -53.1 6.2 h 3.5 
+1526 -8.2 15.0 h 22.1 
+1527 13.6 29.8 h 0.1 
+1528 2.9 -5.0 h 39.6 
+1529 43.9 16.2 h 2.2 
+1530 -36.3 -20.1 h 17.4 
+1531 19.1 5.1 h 4.6 
+1532 120.9 -143.0 h 106.0 
+1533 -22.4 12.7 h 1.1 
+1534 -57.4 -142.0 h 1.6 
+1535 -19.9 -24.6 h 20.0 
+1536 11.0 19.1 h 216.3 
+1537 -38.5 -20.4 h 0.4 
+1538 -28.6 -2.8 h 29.2 
+1539 153.8 14.4 h 1.4 
+1540 8.2 32.9 h 16.9 
+1541 55.9 -38.2 h 4.1 
+1542 27.9 11.7 h 4.9 
+1543 7.2 14.5 h 32.0 
+1544 9.4 23.6 h 0.9 
+1545 25.9 8.0 h 5.8 
+1546 27.5 21.9 h 1.9 
+1547 9.3 7.4 h 37.2 
+1548 512.9 90.2 h 0.9 
+1549 9.5 8.4 h 11.2 
+1550 4.0 0.1 h 8.0 
+1551 -45.2 -11.6 h 0.8 
+1552 40.0 -8.5 h 0.6 
+1553 93.0 67.6 h 72.9 
+1554 4.9 17.0 h 7.0 
+1555 -1.2 9.6 h 5.7 
+1556 -17.6 -18.2 h 3.0 
+1557 -24.3 -25.8 h 42.3 
+1558 -38.2 -7.0 h 18.6 
+1559 -2.1 5.7 h 12.0 
+1560 101.4 103.4 h 1.0 
+1561 27.8 12.4 h 1.0 
+1562 4.8 8.0 h 9.0 
+1563 -6.0 81.6 h 63.2 
+1564 33.1 -6.2 h 4.4 
+1565 -38.9 -7.2 h 0.7 
+1566 -29.0 -7.9 h 10.2 
+1567 13.1 20.3 h 1.1 
+1568 -17.9 -27.7 h 0.5 
+1569 19.1 26.5 h 5.2 
+1570 45.5 46.9 h 45.9 
+1571 -5.2 17.8 h 16.4 
+1572 0.8 13.4 h 67.2 
+1573 20.4 10.0 h 0.0 
+1574 26.8 15.6 h 0.9 
+1575 29.2 25.9 h 0.9 
+1576 -11.5 -10.7 h 0.4 
+1577 -23.2 -35.5 h 3.5 
+1578 -40.5 -15.3 h 0.7 
+1579 22.8 -12.7 h 21.4 
+1580 38.3 -5.3 h 1.5 
+1581 23.8 16.7 h 10.7 
+1582 -31.3 0.5 h 5.7 
+1583 32.3 10.6 h 0.6 
+1584 -22.2 3.8 h 67.9 
+1585 50.5 8.6 h 4.8 
+1586 -112.7 -32.1 h 103.8 
+1587 34.6 -4.0 h 3.9 
+1588 -79.2 -11.4 h 0.8 
+1589 6.6 -8.6 h 15.4 
+1590 21.6 1.8 h 6.0 
+1591 -36.1 -9.9 h 3.2 
+1592 11.2 2.6 h 24.0 
+1593 -51.7 -5.1 h 1.0 
+1594 15.5 21.4 h 4.5 
+1595 4.5 1.1 h 0.8 
+1596 18.9 34.6 h 3.0 
+1597 -14.2 -5.9 h 8.1 
+1598 16.0 10.8 h 5.6 
+1599 24.8 22.6 h 26.3 
+1600 6.7 -11.4 h 0.7 
+1601 5.5 3.5 h 7.4 
+1602 -16.0 9.8 h 16.9 
+1603 -4.3 12.8 h 54.3 
+1604 21.7 -7.6 h 0.7 
+1605 0.3 3.5 h 1.5 
+1606 30.4 9.9 h 4.7 
+1607 -1.7 15.9 h 6.8 
+1608 -51.7 17.7 h 14.5 
+1609 65.4 26.6 h 0.3 
+1610 20.1 10.8 h 13.3 
+1611 102.9 -7.5 h 0.5 
+1612 43.1 3.9 h 0.7 
+1613 -44.3 13.6 h 1.0 
+1614 -35.5 -22.0 h 0.1 
+1615 25.4 53.6 h 0.3 
+1616 32.5 -23.0 h 0.2 
+1617 22.7 24.8 h 2.8 
+1618 -41.9 -2.1 h 0.4 
+1619 -0.1 19.7 h 8.5 
+1620 -25.1 34.7 h 3.9 
+1621 16.8 10.8 h 0.3 
+1622 14.8 6.7 h 31.8 
+1623 -26.7 -1.1 h 0.4 
+1624 13.0 6.8 h 26.8 
+1625 18.9 3.8 h 17.2 
+1626 2.8 -19.5 h 5.4 
+1627 32.6 12.8 h 4.7 
+1628 -40.4 -4.5 h 0.6 
+1629 -15.0 0.5 h 25.6 
+1630 116.3 14.7 h 37.1 
+1631 50.1 -7.6 h 9.0 
+1632 -28.0 -29.7 h 0.6 
+1633 102.9 7.2 h 6.9 
+1634 -20.8 -15.3 h 5.9 
+1635 21.2 14.6 h 18.0 
+1636 33.1 4.5 h 5.6 
+1637 -110.2 -72.1 h 85.2 
+1638 94.0 33.6 h 41.9 
+1639 11.2 1.1 h 25.3 
+1640 -35.0 31.5 h 0.5 
+1641 4.2 -17.1 h 0.1 
+1642 -4.1 22.8 h 0.4 
+1643 17.5 36.6 h 0.3 
+1644 -45.6 -7.4 h 0.9 
+1645 25.7 8.7 h 1.0 
+1646 -8.0 -11.1 h 0.7 
+1647 14.3 14.8 h 15.4 
+1648 6.9 8.6 h 16.6 
+1649 -64.0 -53.1 h 0.7 
+1650 9.5 6.1 h 25.1 
+1651 -44.9 11.2 h 1.3 
+1652 -12.2 -15.5 h 1.1 
+1653 22.6 1.6 h 16.2 
+1654 -37.3 -21.2 h 1.3 
+1655 30.7 7.6 h 0.2 
+1656 -21.2 -8.2 h 22.3 
+1657 24.6 21.2 h 2.8 
+1658 -2.9 -37.3 h 4.8 
+1659 19.8 12.8 h 2.9 
+1660 18.7 -9.6 h 1.9 
+1661 15.9 8.5 h 11.2 
+1662 5.3 -4.3 h 13.3 
+1663 -45.6 19.7 h 5.1 
+1664 0.4 9.7 h 8.2 
+1665 50.2 38.4 h 0.6 
+1666 -3.0 0.7 h 6.8 
+1667 57.1 57.1 h 47.5 
+1668 -27.9 -64.0 h 1.0 
+1669 9.3 6.3 h 52.0 
+1670 22.2 -25.3 h 0.9 
+1671 4.2 10.1 h 47.6 
+1672 21.4 7.2 h 2.1 
+1673 14.8 15.8 h 37.9 
+1674 10.0 -0.2 h 13.0 
+1675 15.1 2.0 h 27.1 
+1676 -13.7 -34.2 h 159.9 
+1677 -13.2 -8.4 h 14.7 
+1678 -149.3 56.1 h 85.9 
+1679 12.9 30.6 h 1.3 
+1680 24.3 12.9 h 0.6 
+1681 -14.5 3.8 h 0.8 
+1682 -2.4 -30.4 h 15.3 
+1683 18.0 25.5 h 9.5 
+1684 -25.4 -21.1 h 14.0 
+1685 26.6 10.1 h 0.8 
+1686 -6.6 -15.7 h 26.0 
+1687 2.3 -18.5 h 51.3 
+1688 6.7 22.7 h 0.2 
+1689 -32.8 -12.5 h 0.9 
+1690 14.1 11.1 h 29.3 
+1691 21.9 16.1 h 7.8 
+1692 22.6 12.1 h 5.0 
+1693 28.2 -11.1 h 25.1 
+1694 -0.4 3.0 h 15.8 
+1695 -44.6 -7.1 h 1.4 
+1696 24.4 29.0 h 12.8 
+1697 28.4 -14.9 h 17.7 
+1698 22.5 22.2 h 7.9 
+1699 23.3 15.5 h 1.5 
+1700 4.8 10.6 h 7.0 
+1701 -10.8 -1.7 h 5.7 
+1702 35.7 5.6 h 4.2 
+1703 -25.0 -5.2 h 46.9 
+1704 -28.3 -28.5 h 11.6 
+1705 18.2 4.2 h 17.9 
+1706 -29.1 -14.4 h 1.5 
+1707 -24.2 1.5 h 12.6 
+1708 12.6 11.1 h 27.6 
+1709 24.2 -105.6 h 3.0 
+1710 31.1 29.1 h 1.0 
+1711 22.5 3.0 h 0.1 
+1712 15.2 10.2 h 25.6 
+1713 -187.8 -159.6 h 5.7 
+1714 31.1 10.2 h 1.2 
+1715 26.6 10.0 h 0.5 
+1716 89.5 27.4 h 2.3 
+1717 -3.6 25.6 h 12.4 
+1718 28.9 -5.8 h 0.9 
+1719 34.3 10.2 h 7.4 
+1720 13.2 -4.7 h 0.2 
+1721 -12.8 7.1 h 1.4 
+1722 52.6 68.6 h 103.4 
+1723 -39.8 -32.8 h 12.5 
+1724 26.3 11.2 h 0.7 
+1725 -62.2 -39.3 h 206.1 
+1726 5.0 12.4 h 25.5 
+1727 24.7 -73.6 h 0.8 
+1728 -5.6 -29.1 h 5.1 
+1729 -21.1 -20.3 h 6.5 
+1730 -6.5 -10.3 h 5.0 
+1731 -4.5 7.0 h 9.6 
+1732 -14.0 -21.3 h 9.4 
+1733 -12.4 23.6 h 1.0 
+1734 9.8 0.2 h 22.8 
+1735 16.0 13.0 h 7.4 
+1736 33.4 -5.5 h 1.5 
+1737 13.9 13.7 h 24.0 
+1738 -40.2 -9.2 h 2.3 
+1739 -39.8 8.0 h 33.8 
+1740 14.3 7.5 h 8.1 
+1741 19.0 5.3 h 10.3 
+1742 -4.6 0.2 h 14.9 
+1743 16.1 18.7 h 10.0 
+1744 25.5 11.0 h 6.6 
+1745 2.1 -3.9 h 14.3 
+1746 26.8 17.4 h 4.5 
+1747 18.6 28.7 h 25.0 
+1748 26.0 23.6 h 0.5 
+1749 2.1 37.1 h 0.2 
+1750 0.4 -3.1 h 0.4 
+1751 18.9 -1.8 h 5.1 
+1752 33.3 13.9 h 3.4 
+1753 12.9 7.1 h 49.2 
+1754 114.2 28.6 h 0.8 
+1755 65.0 52.7 h 89.4 
+1756 -28.7 -10.4 h 13.9 
+1757 31.7 18.2 h 0.2 
+1758 30.2 9.2 h 2.4 
+1759 17.7 21.0 h 10.8 
+1760 4.0 -7.3 h 1.6 
+1761 5.0 20.6 h 0.5 
+1762 -4.7 -71.8 h 92.0 
+1763 -34.9 -18.3 h 2.3 
+1764 9.9 14.5 h 20.3 
+1765 4.2 -1.7 h 5.2 
+1766 22.2 -1.3 h 0.8 
+1767 17.1 9.6 h 6.8 
+1768 35.8 -13.2 h 0.4 
+1769 24.0 2.8 h 1.3 
+1770 15.8 13.8 h 26.1 
+1771 20.0 8.0 h 19.5 
+1772 45.0 -0.3 h 113.1 
+1773 7.7 1.0 h 12.8 
+1774 21.9 13.4 h 5.9 
+1775 -36.0 -19.5 h 4.6 
+1776 26.6 12.6 h 0.5 
+1777 15.0 33.3 h 13.1 
+1778 15.5 -7.7 h 7.6 
+1779 2.9 7.6 h 0.7 
+1780 -10.9 3.0 h 8.3 
+1781 41.2 27.4 h 27.0 
+1782 -58.5 -2.0 h 0.6 
+1783 101.2 -12.8 h 113.9 
+1784 14.9 7.8 h 21.5 
+1785 11.6 12.2 h 16.7 
+1786 -12.7 -5.1 h 1.0 
+1787 15.0 9.7 h 8.3 
+1788 -2.2 19.5 h 11.2 
+1789 15.2 -3.8 h 4.1 
+1790 1.6 -3.1 h 1.3 
+1791 30.6 7.5 h 5.8 
+1792 16.1 18.4 h 9.8 
+1793 -22.7 4.1 h 3.2 
+1794 21.3 14.8 h 1.7 
+1795 13.4 8.4 h 12.1 
+1796 21.6 63.6 h 0.5 
+1797 -13.2 12.4 h 26.5 
+1798 -32.4 2.2 h 34.2 
+1799 2.5 1.6 h 12.4 
+1800 -9.5 19.7 h 0.7 
+1801 -3.0 30.9 h 6.2 
+1802 -20.7 -10.7 h 25.6 
+1803 9.6 4.9 h 20.7 
+1804 0.8 4.7 h 20.0 
+1805 -0.8 10.9 h 6.9 
+1806 24.9 32.6 h 2.0 
+1807 7.0 20.0 h 22.1 
+1808 1.5 18.4 h 4.3 
+1809 -40.6 -11.6 h 0.5 
+1810 -16.2 -20.2 h 4.4 
+1811 -48.5 12.9 h 16.0 
+1812 25.3 12.1 h 7.8 
+1813 -38.1 -16.7 h 9.9 
+1814 -12.7 -5.7 h 0.3 
+1815 16.2 12.6 h 21.2 
+1816 1.5 -2.1 h 17.9 
+1817 9.5 19.3 h 15.3 
+1818 -150.5 -287.8 h 2.9 
+1819 -21.3 -1.6 h 21.9 
+1820 4.9 -8.6 h 0.9 
+1821 -48.9 -19.6 h 4.6 
+1822 21.5 14.1 h 6.5 
+1823 16.6 9.8 h 0.8 
+1824 -9.5 16.5 h 2.2 
+1825 -16.6 -39.2 h 6.3 
+1826 -9.7 6.9 h 11.4 
+1827 19.4 12.5 h 7.8 
+1828 -45.0 4.0 h 14.6 
+1829 33.2 -22.3 h 0.8 
+1830 -0.4 1.3 h 8.6 
+1831 15.9 41.2 h 0.5 
+1832 12.1 7.8 h 26.9 
+1833 -3.3 11.2 h 0.6 
+1834 10.7 20.8 h 5.9 
+1835 45.6 17.1 h 0.2 
+1836 54.1 -4.6 h 2.3 
+1837 24.4 8.2 h 3.8 
+1838 -32.6 -12.7 h 5.2 
+1839 31.7 8.9 h 5.5 
+1840 -43.0 0.8 h 10.0 
+1841 38.0 -1.8 h 6.6 
+1842 -3.6 12.8 h 0.7 
+1843 140.1 154.0 h 1.0 
+1844 33.0 9.5 h 15.1 
+1845 14.5 11.8 h 18.8 
+1846 -0.7 2.1 h 1.5 
+1847 17.6 9.2 h 17.6 
+1848 -6.4 15.8 h 1.9 
+1849 8.3 13.0 h 9.1 
+1850 31.9 26.1 h 2.5 
+1851 8.8 15.4 h 10.3 
+1852 24.0 20.6 h 0.5 
+1853 -0.1 -0.8 h 0.3 
+1854 -8.5 -3.1 h 0.9 
+1855 14.9 9.2 h 15.6 
+1856 27.4 11.8 h 1.1 
+1857 27.0 3.7 h 0.3 
+1858 5.9 9.4 h 7.0 
+1859 4.5 5.4 h 19.5 
+1860 -1.9 4.4 h 8.2 
+1861 21.6 5.2 h 4.0 
+1862 6.6 21.3 h 8.6 
+1863 5.1 -7.8 h 1.2 
+1864 -5.5 9.9 h 13.0 
+1865 23.9 15.5 h 9.7 
+1866 -6.7 21.6 h 0.6 
+1867 18.2 7.5 h 19.7 
+1868 -35.6 -26.6 h 2.4 
+1869 16.6 -0.5 h 23.4 
+1870 27.9 1.4 h 9.1 
+1871 32.0 16.9 h 5.8 
+1872 -20.4 15.2 h 5.9 
+1873 -6.7 -16.6 h 3.2 
+1874 -34.5 -9.9 h 0.6 
+1875 -33.5 -17.5 h 0.8 
+1876 22.9 12.1 h 0.0 
+1877 9.7 12.2 h 1.3 
+1878 35.4 7.5 h 1.3 
+1879 22.6 9.5 h 10.7 
+1880 32.8 12.2 h 4.0 
+1881 43.5 11.4 h 0.7 
+1882 26.0 17.3 h 2.1 
+1883 34.5 8.3 h 0.2 
+1884 22.7 24.2 h 2.9 
+1885 24.5 17.6 h 0.9 
+1886 70.1 57.7 h 11.9 
+1887 6.9 10.9 h 22.4 
+1888 -13.3 -12.9 h 11.9 
+1889 0.1 12.2 h 2.6 
+1890 26.2 11.0 h 0.9 
+1891 16.2 -12.9 h 1.0 
+1892 26.1 13.3 h 21.2 
+1893 26.0 13.7 h 0.7 
+1894 30.3 11.1 h 9.3 
+1895 -16.9 1.6 h 0.8 
+1896 20.8 14.4 h 22.4 
+1897 24.4 17.5 h 8.0 
+1898 23.0 25.9 h 3.6 
+1899 -44.2 -16.2 h 13.3 
+1900 -47.2 -0.9 h 1.5 
+1901 -37.9 12.0 h 4.3 
+1902 -3.6 19.3 h 3.2 
+1903 23.3 4.9 h 16.4 
+1904 5.1 17.2 h 0.3 
+1905 4.3 5.3 h 0.8 
+1906 2.6 -13.3 h 8.4 
+1907 -5.3 13.0 h 11.2 
+1908 -41.4 -8.2 h 0.1 
+1909 2.8 42.0 h 14.9 
+1910 55.0 22.0 h 52.4 
+1911 -17.9 -5.9 h 1.0 
+1912 3.4 -16.3 h 16.5 
+1913 16.7 11.8 h 4.5 
+1914 10.6 25.9 h 37.0 
+1915 24.9 23.4 h 0.0 
+1916 10.5 14.0 h 6.5 
+1917 -36.7 -0.9 h 15.8 
+1918 11.4 -3.6 h 15.1 
+1919 -0.5 -3.7 h 13.3 
+1920 11.6 7.5 h 29.0 
+1921 -28.0 32.8 h 28.3 
+1922 -187.1 -61.8 h 0.1 
+1923 30.3 4.5 h 0.0 
+1924 -13.7 10.3 h 14.4 
+1925 -4.5 -7.6 h 0.6 
+1926 5.7 4.4 h 33.9 
+1927 27.3 11.3 h 9.8 
+1928 -1.8 6.3 h 7.2 
+1929 -43.8 19.1 h 7.7 
+1930 23.8 17.2 h 0.8 
+1931 10.6 1.5 h 28.4 
+1932 -8.2 1.8 h 0.5 
+1933 -42.2 8.0 h 0.2 
+1934 -14.5 -2.2 h 0.6 
+1935 -35.7 -22.5 h 4.9 
+1936 -8.9 50.1 h 0.8 
+1937 0.5 10.3 h 11.7 
+1938 7.2 12.2 h 4.8 
+1939 -38.2 -3.8 h 2.1 
+1940 -34.1 -21.9 h 2.6 
+1941 31.0 -9.5 h 16.5 
+1942 -46.3 120.8 h 4.0 
+1943 17.1 11.4 h 2.1 
+1944 22.1 26.6 h 0.2 
+1945 -22.4 -21.5 h 4.7 
+1946 129.3 -38.0 h 53.0 
+1947 -19.5 -12.7 h 1.6 
+1948 115.9 88.9 h 7.6 
+1949 22.9 12.4 h 7.2 
+1950 5.9 -41.7 h 0.1 
+1951 12.1 -5.0 h 5.6 
+1952 19.7 11.3 h 6.0 
+1953 -15.4 16.0 h 17.4 
+1954 14.3 2.9 h 15.4 
+1955 13.7 20.3 h 13.6 
+1956 -13.2 -7.8 h 27.9 
+1957 -24.3 -24.0 h 1.4 
+1958 26.9 -2.8 h 1.7 
+1959 6.7 21.3 h 5.5 
+1960 26.8 4.1 h 0.2 
+1961 -11.8 -6.7 h 3.4 
+1962 -37.0 6.3 h 19.0 
+1963 25.7 14.2 h 105.2 
+1964 33.6 10.2 h 2.0 
+1965 9.8 21.7 h 11.3 
+1966 27.9 6.0 h 10.4 
+1967 11.9 19.8 h 23.5 
+1968 17.1 -4.2 h 3.1 
+1969 26.2 22.9 h 2.5 
+1970 25.0 6.6 h 1.2 
+1971 9.4 -6.7 h 3.0 
+1972 -0.2 -3.5 h 7.6 
+1973 26.0 19.7 h 10.5 
+1974 5.9 -17.0 h 1.0 
+1975 39.9 8.2 h 6.9 
+1976 -35.4 24.9 h 0.8 
+1977 -32.6 -16.4 h 0.6 
+1978 9.3 63.8 h 44.6 
+1979 -41.1 -6.0 h 2.4 
+1980 -26.8 -10.7 h 17.3 
+1981 11.3 -13.2 h 0.0 
+1982 9.9 -1.2 h 0.3 
+1983 -35.3 -1.8 h 0.4 
+1984 -27.2 -22.5 h 15.8 
+1985 42.9 46.0 h 76.8 
+1986 27.8 12.4 h 3.4 
+1987 6.5 24.9 h 22.2 
+1988 -28.3 -26.1 h 12.1 
+1989 12.1 20.5 h 17.8 
+1990 -19.9 2.5 h 12.3 
+1991 -40.7 -8.8 h 9.5 
+1992 -28.6 -12.2 h 29.1 
+1993 3.2 -1.2 h 5.1 
+1994 -27.5 -13.6 h 3.7 
+1995 3.3 4.8 h 3.3 
+1996 20.7 13.4 h 7.7 
+1997 -68.1 65.5 h 109.7 
+1998 38.1 13.9 h 4.3 
+1999 -36.0 -15.3 h 9.7 
+2000 -33.5 -10.8 h 6.6 
+2001 9.9 3.5 h 8.2 
+2002 -2.0 10.3 h 4.7 
+2003 25.3 10.5 h 5.2 
+2004 2.2 24.5 h 1.6 
+2005 48.9 40.2 h 55.0 
+2006 -39.4 -14.7 h 3.9 
+2007 14.1 4.1 h 15.2 
+2008 36.4 15.9 h 13.1 
+2009 -20.6 24.2 h 22.5 
+2010 86.6 61.2 h 0.2 
+2011 21.4 14.1 h 5.1 
+2012 -42.0 -11.2 h 6.0 
+2013 24.5 14.8 h 15.0 
+2014 -39.2 -22.5 h 0.7 
+2015 63.2 30.9 h 4.3 
+2016 4.3 -4.5 h 13.6 
+2017 -9.5 -14.0 h 4.9 
+2018 -49.6 -26.2 h 0.4 
+2019 26.2 3.8 h 6.6 
+2020 -9.6 -14.8 h 1.0 
+2021 14.1 64.2 h 0.9 
+2022 -10.4 15.0 h 19.2 
+2023 5.4 6.2 h 17.8 
+2024 12.0 15.1 h 0.1 
+2025 10.8 -1.3 h 2.6 
+2026 -32.1 -5.7 h 9.3 
+2027 30.2 12.0 h 0.8 
+2028 -24.9 80.1 h 0.3 
+2029 84.6 12.1 h 0.1 
+2030 11.4 32.3 h 0.6 
+2031 -0.1 -1.2 h 0.9 
+2032 -11.5 6.0 h 6.8 
+2033 12.4 10.6 h 1.6 
+2034 -39.9 7.0 h 13.3 
+2035 -12.7 -4.1 h 0.3 
+2036 -52.9 -25.1 h 0.8 
+2037 -41.4 -4.2 h 15.3 
+2038 34.2 7.4 h 0.3 
+2039 9.4 13.4 h 12.2 
+2040 26.4 9.7 h 11.4 
+2041 23.8 31.1 h 2.1 
+2042 26.2 6.9 h 1.9 
+2043 36.2 -18.9 h 0.5 
+2044 15.5 14.5 h 1.9 
+2045 13.4 -57.6 h 0.4 
+2046 23.1 -6.1 h 5.2 
+2047 -30.5 -0.0 h 0.3 
+2048 26.6 13.1 h 1.6 
+2049 30.2 9.6 h 4.8 
+2050 8.8 23.0 h 11.9 
+2051 13.4 23.5 h 31.7 
+2052 8.5 -16.8 h 19.9 
+2053 26.9 14.7 h 2.6 
+2054 9.3 -15.8 h 2.9 
+2055 9.8 4.4 h 22.4 
+2056 1.0 12.4 h 9.8 
+2057 4.6 13.6 h 6.4 
+2058 22.3 17.9 h 5.1 
+2059 15.1 16.7 h 10.6 
+2060 73.7 130.2 h 0.9 
+2061 -18.8 -0.6 h 37.6 
+2062 -211.8 -33.1 h 13.2 
+2063 15.0 22.1 h 14.9 
+2064 8.3 4.5 h 22.1 
+2065 -16.2 -19.1 h 0.3 
+2066 21.9 5.6 h 3.9 
+2067 -25.1 -53.8 h 23.3 
+2068 33.3 37.9 h 1.0 
+2069 22.2 8.9 h 18.4 
+2070 -4.7 11.3 h 1.1 
+2071 -3.3 2.9 h 15.1 
+2072 11.7 9.7 h 10.9 
+2073 34.0 13.1 h 1.6 
+2074 -28.8 -13.6 h 3.7 
+2075 24.0 18.3 h 7.1 
+2076 -16.1 -335.1 h 78.9 
+2077 -38.3 -18.6 h 8.0 
+2078 2.8 -14.8 h 17.7 
+2079 78.0 50.1 h 40.3 
+2080 -54.8 -45.1 h 5.8 
+2081 20.7 18.4 h 0.3 
+2082 11.9 41.3 h 0.2 
+2083 -46.6 -4.0 h 0.1 
+2084 -15.6 7.2 h 37.7 
+2085 21.2 -7.1 h 3.3 
+2086 18.7 -9.2 h 5.5 
+2087 25.5 11.4 h 9.6 
+2088 -2.5 12.8 h 38.2 
+2089 -42.0 -1.4 h 0.6 
+2090 25.3 45.6 h 0.3 
+2091 -42.7 1.8 h 5.3 
+2092 -70.9 -1.4 h 0.2 
+2093 36.0 7.4 h 0.5 
+2094 -4.7 2.0 h 28.2 
+2095 4.0 4.4 h 4.4 
+2096 24.7 30.8 h 0.8 
+2097 5.0 -3.8 h 2.6 
+2098 -34.8 -6.2 h 1.9 
+2099 -12.1 -2.9 h 19.2 
+2100 36.6 19.9 h 2.1 
+2101 -44.0 -17.2 h 0.2 
+2102 -18.0 1.0 h 14.1 
+2103 26.2 12.4 h 1.1 
+2104 -35.7 1.6 h 7.3 
+2105 -20.0 -3.2 h 10.8 
+2106 5.2 17.7 h 0.7 
+2107 -2.4 7.3 h 3.0 
+2108 -11.1 7.3 h 7.2 
+2109 -4.4 7.4 h 2.7 
+2110 28.8 -13.5 h 4.1 
+2111 25.4 -0.0 h 0.3 
+2112 29.1 37.1 h 10.0 
+2113 23.0 3.5 h 19.2 
+2114 -36.4 -29.2 h 0.3 
+2115 28.7 11.4 h 6.7 
+2116 17.0 18.0 h 9.8 
+2117 99.4 24.2 h 2.7 
+2118 12.5 25.1 h 0.2 
+2119 -28.3 -16.7 h 1.4 
+2120 5.5 6.7 h 17.4 
+2121 -1.4 2.0 h 7.5 
+2122 23.3 38.3 h 0.2 
+2123 21.9 -1.6 h 15.7 
+2124 83.3 63.4 h 43.1 
+2125 24.3 -31.0 h 0.5 
+2126 -2.6 -7.5 h 14.3 
+2127 23.5 11.0 h 6.9 
+2128 22.8 7.8 h 14.0 
+2129 -43.0 -6.0 h 2.5 
+2130 4.1 13.1 h 9.0 
+2131 18.1 12.8 h 24.6 
+2132 -13.4 -4.1 h 27.2 
+2133 12.8 7.4 h 1.6 
+2134 16.3 11.3 h 14.3 
+2135 24.2 15.3 h 7.3 
+2136 23.6 1.4 h 10.5 
+2137 17.6 49.7 h 1.8 
+2138 12.4 18.7 h 7.4 
+2139 13.4 7.9 h 8.2 
+2140 31.5 14.4 h 1.4 
+2141 17.5 -5.1 h 5.0 
+2142 3.6 -45.7 h 2.8 
+2143 22.0 23.4 h 8.6 
+2144 -91.6 -31.9 h 134.9 
+2145 2.6 2.9 h 7.8 
+2146 27.0 15.5 h 0.8 
+2147 14.5 20.3 h 7.2 
+2148 -30.0 17.8 h 9.1 
+2149 -4.7 -2.3 h 12.7 
+2150 -41.4 -10.4 h 6.3 
+2151 -43.2 -35.3 h 173.6 
+2152 22.9 9.8 h 16.5 
+2153 29.7 14.7 h 10.0 
+2154 -114.2 114.5 h 66.9 
+2155 50.6 -8.7 h 0.7 
+2156 -59.9 -26.2 h 1.6 
+2157 32.8 25.0 h 8.1 
+2158 16.0 23.4 h 3.1 
+2159 -39.1 -2.3 h 8.3 
+2160 -4.3 -13.1 h 36.9 
+2161 -48.7 -2.4 h 0.4 
+2162 31.1 5.8 h 0.9 
+2163 36.0 13.8 h 1.3 
+2164 -18.5 11.5 h 0.4 
+2165 -25.2 -19.4 h 0.7 
+2166 0.9 82.7 h 173.3 
+2167 14.4 18.2 h 2.6 
+2168 -5.5 13.0 h 2.1 
+2169 7.2 12.7 h 4.2 
+2170 -21.2 -18.0 h 8.4 
+2171 26.7 9.1 h 0.8 
+2172 14.4 -4.7 h 0.1 
+2173 -6.6 3.3 h 0.4 
+2174 15.0 11.3 h 17.6 
+2175 11.8 5.0 h 0.8 
+2176 -33.0 -5.2 h 40.5 
+2177 80.3 81.0 h 11.1 
+2178 2.9 -37.1 h 0.3 
+2179 -3.2 20.8 h 7.1 
+2180 -8.2 -4.5 h 0.8 
+2181 -29.7 -7.5 h 3.3 
+2182 -40.9 6.4 h 1.1 
+2183 136.0 -22.9 h 1.4 
+2184 83.1 48.6 h 0.6 
+2185 17.0 13.9 h 10.6 
+2186 -38.9 -32.7 h 0.5 
+2187 -4.7 4.9 h 5.7 
+2188 -21.9 22.4 h 0.7 
+2189 -12.9 -9.2 h 16.9 
+2190 16.6 1.9 h 23.5 
+2191 6.3 0.9 h 6.1 
+2192 -20.6 -7.9 h 0.5 
+2193 23.4 17.8 h 6.2 
+2194 -49.8 23.9 h 2.5 
+2195 15.6 10.4 h 19.4 
+2196 -42.3 6.2 h 0.6 
+2197 40.4 7.0 h 1.1 
+2198 -28.0 -22.8 h 2.2 
+2199 33.6 25.7 h 0.7 
+2200 32.1 14.6 h 3.1 
+2201 27.8 13.4 h 1.0 
+2202 18.0 15.2 h 2.2 
+2203 53.8 114.7 h 0.4 
+2204 21.1 11.7 h 13.0 
+2205 -13.2 13.5 h 8.5 
+2206 -11.2 12.9 h 10.0 
+2207 9.3 23.2 h 3.7 
+2208 10.7 -39.0 h 0.4 
+2209 -43.5 -1.6 h 0.5 
+2210 22.0 10.1 h 9.2 
+2211 19.4 18.0 h 3.8 
+2212 13.6 4.3 h 1.2 
+2213 13.1 16.1 h 8.5 
+2214 23.7 17.5 h 5.8 
+2215 2.8 -2.2 h 1.1 
+2216 9.9 7.8 h 0.8 
+2217 102.1 4.1 h 2.9 
+2218 -16.2 19.4 h 4.7 
+2219 2.5 15.6 h 9.6 
+2220 28.3 1.3 h 1.5 
+2221 -54.2 -5.7 h 3.5 
+2222 -2.3 2.5 h 4.9 
+2223 20.9 8.3 h 2.6 
+2224 4.9 2.0 h 9.6 
+2225 13.8 7.9 h 7.9 
+2226 -47.3 -13.2 h 0.4 
+2227 70.8 81.3 h 0.2 
+2228 17.2 12.5 h 1.0 
+2229 22.8 18.1 h 18.4 
+2230 -30.6 -13.4 h 12.0 
+2231 17.6 21.4 h 57.7 
+2232 -0.4 3.3 h 9.4 
+2233 35.1 -27.4 h 158.7 
+2234 8.5 10.1 h 24.5 
+2235 -7.1 9.2 h 2.4 
+2236 20.8 9.2 h 7.0 
+2237 11.6 3.8 h 31.5 
+2238 38.5 3.6 h 261.5 
+2239 20.0 15.3 h 10.1 
+2240 27.4 18.9 h 4.3 
+2241 11.1 13.3 h 16.0 
+2242 -33.8 -15.4 h 1.3 
+2243 -41.3 -14.4 h 1.9 
+2244 -38.4 -13.4 h 0.5 
+2245 14.6 -4.7 h 7.5 
+2246 17.5 33.6 h 5.9 
+2247 5.7 1.5 h 19.6 
+2248 -52.9 -2.8 h 0.5 
+2249 -8.9 38.2 h 4.1 
+2250 -36.2 2.4 h 5.9 
+2251 33.3 18.8 h 1.4 
+2252 25.2 20.1 h 0.1 
+2253 -31.7 -26.4 h 2.8 
+2254 11.5 10.0 h 15.0 
+2255 25.6 0.4 h 2.6 
+2256 -24.4 -13.9 h 0.5 
+2257 25.3 15.7 h 0.2 
+2258 23.6 6.7 h 2.6 
+2259 -6.2 19.2 h 0.3 
+2260 -11.0 6.6 h 0.6 
+2261 10.9 19.1 h 22.6 
+2262 -5.1 6.0 h 21.5 
+2263 13.9 22.3 h 23.4 
+2264 9.2 -7.8 h 18.0 
+2265 -37.5 -49.5 h 0.8 
+2266 15.6 3.5 h 24.3 
+2267 40.0 22.2 h 0.1 
+2268 -25.4 0.2 h 30.5 
+2269 29.8 22.9 h 8.0 
+2270 -44.8 -16.7 h 0.1 
+2271 31.9 16.1 h 2.2 
+2272 6.8 3.5 h 14.3 
+2273 29.6 17.1 h 0.4 
+2274 -2.8 20.0 h 3.8 
+2275 4.2 7.2 h 23.5 
+2276 -17.2 -6.4 h 17.2 
+2277 50.9 37.4 h 0.6 
+2278 32.4 -10.7 h 2.0 
+2279 47.8 16.3 h 73.8 
+2280 -50.3 -18.4 h 1.0 
+2281 -51.1 -8.7 h 4.2 
+2282 -2.0 -1.5 h 6.1 
+2283 4.6 -6.9 h 2.0 
+2284 5.0 22.9 h 10.8 
+2285 -17.3 -14.6 h 66.2 
+2286 23.7 9.8 h 10.5 
+2287 19.6 25.6 h 0.9 
+2288 26.6 -6.8 h 0.3 
+2289 5.8 -3.5 h 2.5 
+2290 36.9 5.5 h 1.0 
+2291 32.4 9.2 h 16.8 
+2292 27.3 4.6 h 1.0 
+2293 -36.1 -14.1 h 0.9 
+2294 6.9 -1.7 h 16.7 
+2295 16.3 6.2 h 13.5 
+2296 29.6 7.4 h 2.8 
+2297 19.7 17.4 h 0.4 
+2298 -49.7 -30.7 h 1.4 
+2299 34.8 20.4 h 20.8 
+2300 -50.4 20.9 h 0.5 
+2301 -51.2 -9.9 h 0.8 
+2302 7.0 4.7 h 17.1 
+2303 10.8 2.5 h 8.2 
+2304 25.1 13.7 h 0.0 
+2305 9.5 21.3 h 4.1 
+2306 7.9 11.0 h 24.9 
+2307 35.6 75.8 h 36.5 
+2308 25.9 0.5 h 28.1 
+2309 -29.5 -9.2 h 4.4 
+2310 205.7 90.4 h 2.0 
+2311 -39.3 -4.6 h 0.7 
+2312 23.4 13.6 h 4.5 
+2313 -48.6 -1.7 h 0.6 
+2314 -31.6 -8.2 h 86.3 
+2315 -49.0 5.3 h 0.2 
+2316 -14.2 -13.4 h 15.3 
+2317 26.3 8.7 h 10.7 
+2318 -25.1 -28.1 h 15.8 
+2319 -5.2 14.8 h 7.6 
+2320 41.8 73.2 h 107.5 
+2321 -9.9 -2.3 h 0.0 
+2322 24.3 13.2 h 0.4 
+2323 31.7 19.2 h 1.1 
+2324 -12.6 -1.6 h 4.4 
+2325 -31.7 -18.5 h 0.3 
+2326 -67.8 -35.9 h 149.9 
+2327 33.7 -19.2 h 0.3 
+2328 17.3 22.4 h 0.3 
+2329 6.3 10.2 h 18.9 
+2330 -37.7 -41.6 h 156.3 
+2331 -41.4 26.3 h 33.3 
+2332 -40.9 1.0 h 2.7 
+2333 32.0 -21.1 h 1.0 
+2334 44.8 30.7 h 103.5 
+2335 11.5 0.6 h 20.1 
+2336 23.5 -2.9 h 7.9 
+2337 18.3 17.5 h 0.3 
+2338 25.1 12.2 h 10.4 
+2339 -24.5 -13.4 h 39.4 
+2340 -34.7 -4.4 h 1.7 
+2341 -34.8 -36.1 h 0.7 
+2342 45.2 12.6 h 1.1 
+2343 -40.9 -13.2 h 11.0 
+2344 37.2 29.4 h 1.1 
+2345 -39.8 -5.8 h 1.4 
+2346 -79.7 196.5 h 105.9 
+2347 -2.2 10.7 h 0.3 
+2348 32.9 4.9 h 12.8 
+2349 34.1 14.3 h 4.5 
+2350 4.3 7.2 h 24.8 
+2351 -6.8 9.7 h 9.8 
+2352 -52.6 -15.7 h 0.7 
+2353 38.5 44.1 h 54.2 
+2354 -35.7 -11.6 h 55.3 
+2355 6.0 4.4 h 7.6 
+2356 24.4 19.0 h 0.7 
+2357 22.2 13.7 h 3.7 
+2358 -1.7 8.1 h 0.3 
+2359 -31.9 -10.9 h 5.0 
+2360 -22.7 10.3 h 23.9 
+2361 -28.2 -9.7 h 0.4 
+2362 21.5 21.9 h 8.9 
+2363 6.8 -8.6 h 18.3 
+2364 22.5 25.3 h 0.8 
+2365 16.3 2.2 h 17.0 
+2366 10.8 6.2 h 17.6 
+2367 0.0 -52.8 h 0.1 
+2368 -46.1 -19.3 h 1.9 
+2369 42.2 11.2 h 3.5 
+2370 17.3 -2.7 h 3.4 
+2371 -49.7 -9.9 h 2.0 
+2372 26.9 18.9 h 0.9 
+2373 11.6 13.7 h 65.0 
+2374 33.5 9.5 h 1.9 
+2375 0.3 12.9 h 1.9 
+2376 20.3 -3.1 h 36.9 
+2377 14.2 16.7 h 24.2 
+2378 -7.5 -18.4 h 38.5 
+2379 7.8 17.4 h 5.2 
+2380 76.6 -63.8 h 0.1 
+2381 -42.9 0.0 h 1.1 
+2382 17.0 -10.8 h 11.0 
+2383 -2.1 0.3 h 16.4 
+2384 -2.9 -7.8 h 0.7 
+2385 -26.8 -23.7 h 3.4 
+2386 19.1 0.6 h 6.5 
+2387 -13.3 3.3 h 17.4 
+2388 21.4 1.7 h 20.1 
+2389 -38.1 -21.5 h 0.5 
+2390 35.4 -30.1 h 0.9 
+2391 28.8 6.0 h 10.4 
+2392 -31.1 11.9 h 0.9 
+2393 -8.5 3.9 h 1.0 
+2394 10.7 -10.6 h 3.4 
+2395 -2.3 -106.9 h 2.7 
+2396 -33.8 -6.1 h 22.8 
+2397 9.2 -14.8 h 3.8 
+2398 17.7 18.2 h 4.4 
+2399 -12.7 -18.5 h 25.3 
+2400 39.1 11.5 h 0.1 
+2401 17.3 36.2 h 5.7 
+2402 15.4 18.1 h 20.5 
+2403 64.3 47.4 h 118.6 
+2404 -8.4 -8.5 h 20.5 
+2405 6.0 10.4 h 1.9 
+2406 14.5 2.6 h 18.4 
+2407 -16.1 3.6 h 0.7 
+2408 31.5 14.6 h 0.6 
+2409 -0.4 51.0 h 1.0 
+2410 13.8 -6.0 h 3.3 
+2411 -6.4 -1.2 h 48.8 
+2412 34.4 14.3 h 0.1 
+2413 17.9 2.2 h 34.7 
+2414 8.0 8.4 h 21.9 
+2415 -34.1 -31.1 h 23.9 
+2416 20.9 20.2 h 0.7 
+2417 -21.5 6.2 h 7.3 
+2418 -4.6 -9.3 h 0.3 
+2419 -24.9 2.3 h 0.9 
+2420 36.6 21.8 h 71.4 
+2421 -43.6 -10.6 h 3.2 
+2422 9.1 2.7 h 12.2 
+2423 -39.4 -1.8 h 1.7 
+2424 1.6 18.7 h 0.4 
+2425 -33.8 -37.9 h 7.6 
+2426 -42.1 21.4 h 1.1 
+2427 15.8 -0.1 h 6.1 
+2428 10.5 4.5 h 4.5 
+2429 28.1 12.2 h 2.9 
+2430 25.7 15.0 h 1.8 
+2431 -45.4 -34.0 h 11.1 
+2432 8.7 11.3 h 28.9 
+2433 2.6 5.0 h 31.1 
+2434 -41.0 -21.0 h 0.5 
+2435 11.7 8.8 h 1.1 
+2436 -9.3 16.7 h 2.0 
+2437 4.9 3.0 h 5.5 
+2438 -0.7 -13.3 h 0.9 
+2439 21.7 9.1 h 3.4 
+2440 14.0 20.8 h 13.8 
+2441 28.6 16.1 h 4.9 
+2442 27.5 21.9 h 2.2 
+2443 28.7 9.5 h 2.3 
+2444 -5.8 9.9 h 6.3 
+2445 -5.0 -1.7 h 47.1 
+2446 24.4 -1.0 h 6.7 
+2447 4.7 -22.8 h 2.9 
+2448 -13.9 -10.2 h 0.4 
+2449 10.6 17.0 h 20.4 
+2450 -3.3 -1.7 h 16.2 
+2451 5.1 18.7 h 9.5 
+2452 11.3 12.2 h 17.3 
+2453 -12.7 -13.3 h 0.6 
+2454 -21.9 3.0 h 13.6 
+2455 -43.4 -3.0 h 1.7 
+2456 18.0 22.4 h 14.9 
+2457 -2.3 23.9 h 11.3 
+2458 -52.3 12.5 h 1.4 
+2459 6.5 27.3 h 8.3 
+2460 2.0 19.6 h 26.4 
+2461 12.5 85.7 h 62.8 
+2462 -22.0 39.1 h 0.8 
+2463 -11.3 -6.2 h 3.1 
+2464 -11.5 2.5 h 6.8 
+2465 21.6 -3.1 h 0.0 
+2466 3.5 14.2 h 15.1 
+2467 188.4 210.2 h 442.7 
+2468 -41.9 0.9 h 0.4 
+2469 26.7 23.4 h 1.2 
+2470 21.4 18.4 h 0.2 
+2471 30.0 -3.9 h 23.2 
+2472 -5.5 -22.0 h 0.3 
+2473 22.7 -2.9 h 9.3 
+2474 28.2 19.2 h 0.6 
+2475 17.8 12.9 h 1.4 
+2476 -33.1 -22.9 h 47.6 
+2477 10.5 13.6 h 77.4 
+2478 27.8 -28.0 h 3.6 
+2479 11.7 -6.4 h 10.8 
+2480 9.5 18.6 h 21.5 
+2481 -26.5 1.2 h 12.7 
+2482 3.4 12.4 h 19.3 
+2483 -40.8 0.9 h 132.9 
+2484 -38.5 20.7 h 10.6 
+2485 71.7 86.2 h 1.8 
+2486 5.2 16.9 h 2.0 
+2487 35.7 9.6 h 18.1 
+2488 15.9 15.7 h 23.9 
+2489 28.8 29.2 h 1.0 
+2490 25.4 23.5 h 0.6 
+2491 7.7 3.1 h 1.1 
+2492 15.3 -7.2 h 16.2 
+2493 -3.1 6.7 h 9.4 
+2494 23.5 13.1 h 0.2 
+2495 24.0 13.3 h 3.8 
+2496 23.1 15.1 h 5.6 
+2497 22.6 13.7 h 8.8 
+2498 12.1 4.1 h 18.4 
+2499 -32.7 -13.3 h 1.4 
diff --git a/examples/platforms/median_p2psim.syscoord b/examples/platforms/median_p2psim.syscoord
new file mode 100644 (file)
index 0000000..2d72aed
--- /dev/null
@@ -0,0 +1,1740 @@
+0 -30.8 -183.3 h 0.4 
+1 -1.3 3.4 h 5.4 
+2 6.6 6.7 h 7.7 
+3 -16.7 19.8 h 0.7 
+4 7.8 5.6 h 6.9 
+5 -5.9 -4.4 h 6.0 
+6 0.0 -5.0 h 11.6 
+7 0.3 -4.1 h 2.3 
+8 -1.3 -10.9 h 0.8 
+9 2.3 -5.9 h 4.6 
+10 2.9 -3.0 h 8.9 
+11 4.3 4.7 h 10.5 
+12 3.0 -1.0 h 8.4 
+13 8.2 -4.9 h 8.6 
+14 6.5 -0.9 h 16.5 
+15 9.1 -3.9 h 9.1 
+16 -6.0 18.8 h 10.0 
+17 4.6 1.3 h 6.0 
+18 6.0 -12.0 h 1.0 
+19 3.3 10.1 h 6.8 
+20 10.6 0.8 h 2.7 
+21 -6.3 15.6 h 3.0 
+22 -1.6 2.5 h 6.2 
+23 -3.4 1.9 h 5.3 
+24 -10.0 -1.7 h 9.2 
+25 -8.7 -2.3 h 5.9 
+26 -10.6 -9.4 h 2.7 
+27 -0.6 -0.2 h 15.7 
+28 8.4 -11.4 h 18.1 
+29 0.3 8.6 h 12.6 
+30 5.5 -10.3 h 0.4 
+31 -0.2 -4.9 h 4.4 
+32 5.2 5.2 h 6.1 
+33 9.4 -9.5 h 6.9 
+34 5.8 -4.9 h 11.9 
+35 1.9 -7.6 h 22.3 
+36 -1.1 0.7 h 15.3 
+37 7.6 -0.2 h 44.6 
+38 8.9 19.6 h 23.3 
+39 0.3 0.3 h 12.7 
+40 7.0 12.5 h 9.4 
+41 4.2 6.9 h 7.6 
+42 1.4 -9.6 h 0.2 
+43 0.6 1.4 h 1.6 
+44 0.4 -5.5 h 2.2 
+45 6.9 2.6 h 9.1 
+46 6.9 3.0 h 10.2 
+47 1.4 -6.6 h 30.3 
+48 3.4 17.4 h 8.1 
+49 10.5 -6.6 h 1.2 
+50 -17.2 19.6 h 4.1 
+51 8.5 24.4 h 9.6 
+52 -4.0 -1.1 h 9.3 
+53 -4.3 -17.1 h 12.0 
+54 -5.7 -1.2 h 15.0 
+55 -6.4 35.2 h 0.8 
+56 -0.3 1.1 h 31.4 
+57 1.8 -8.2 h 6.2 
+58 2.3 2.6 h 7.4 
+59 3.6 0.3 h 9.7 
+60 13.8 -10.9 h 3.8 
+61 -1.0 -9.6 h 18.6 
+62 14.1 20.7 h 12.7 
+63 18.3 -11.0 h 2.4 
+64 7.0 -1.6 h 12.8 
+65 -6.8 -13.5 h 0.3 
+66 10.6 -9.6 h 2.3 
+67 -0.5 -3.8 h 13.0 
+68 8.5 -8.8 h 1.8 
+69 1.4 -6.1 h 4.0 
+70 0.6 -2.5 h 10.1 
+71 -11.5 -6.8 h 24.7 
+72 1.0 20.4 h 14.5 
+73 -2.2 19.5 h 3.7 
+74 -9.6 -5.1 h 13.8 
+75 -0.6 0.6 h 13.1 
+76 8.6 24.5 h 13.7 
+77 -0.4 8.6 h 1.2 
+78 -11.7 34.5 h 5.2 
+79 -10.6 22.8 h 4.0 
+80 9.1 -15.4 h 45.6 
+81 20.3 -5.0 h 35.4 
+82 -3.0 -6.1 h 0.2 
+83 0.4 30.1 h 1.0 
+84 24.2 -9.9 h 2.1 
+85 2.6 -8.5 h 3.9 
+86 4.7 -8.7 h 0.3 
+87 -2.9 23.9 h 29.1 
+88 1.7 -5.0 h 9.2 
+89 77.3 8.0 h 4.7 
+90 11.6 -8.9 h 0.3 
+91 10.1 -9.9 h 2.6 
+92 2.0 -62.0 h 3.8 
+93 12.5 6.8 h 1.2 
+94 -8.1 -10.2 h 0.3 
+95 16.4 -6.3 h 0.5 
+96 -11.8 25.7 h 1.6 
+97 -12.3 24.3 h 0.7 
+98 -0.2 25.3 h 0.1 
+99 7.2 -16.5 h 3.5 
+100 11.7 -7.9 h 1.1 
+101 0.1 -14.6 h 29.5 
+102 7.1 -2.5 h 12.4 
+103 0.4 -54.7 h 9.0 
+104 -0.8 0.8 h 6.0 
+105 -5.6 -4.8 h 1.4 
+106 13.8 2.3 h 9.3 
+107 -0.4 -12.9 h 1.6 
+108 -3.0 17.7 h 7.5 
+109 -13.3 8.2 h 14.1 
+110 28.3 51.7 h 50.7 
+111 -3.6 3.8 h 16.9 
+112 8.6 20.3 h 5.8 
+113 6.2 -8.3 h 9.0 
+114 -3.6 12.6 h 4.3 
+115 -1.6 21.5 h 7.3 
+116 -4.7 -1.4 h 9.2 
+117 21.7 -12.0 h 0.1 
+118 9.4 -1.3 h 0.9 
+119 24.1 -66.1 h 0.6 
+120 0.9 -41.4 h 28.3 
+121 3.6 -70.6 h 0.5 
+122 26.4 -63.9 h 0.9 
+123 -13.6 -63.4 h 9.4 
+124 19.6 -55.9 h 2.1 
+125 12.3 -62.6 h 6.7 
+126 -7.7 -64.3 h 1.4 
+127 10.6 -76.6 h 0.6 
+128 -55.2 82.5 h 5.2 
+129 -46.5 83.3 h 9.6 
+130 -54.6 125.3 h 7.8 
+131 3.0 -5.7 h 1.4 
+132 7.6 0.9 h 17.5 
+133 26.6 -4.8 h 4.3 
+134 -5.6 -47.0 h 2.5 
+135 13.4 -56.7 h 1.6 
+136 7.3 -3.1 h 7.0 
+137 5.7 -54.4 h 0.3 
+138 18.6 1.7 h 1.6 
+139 17.2 -6.8 h 1.1 
+140 6.8 -6.8 h 10.9 
+141 4.1 -2.7 h 10.4 
+142 7.1 -8.1 h 10.6 
+143 -0.4 2.7 h 9.2 
+144 24.2 -4.7 h 0.3 
+145 -0.4 -2.7 h 11.0 
+146 32.9 -24.9 h 1.3 
+147 22.5 -42.6 h 2.6 
+148 10.6 -54.9 h 0.7 
+149 -12.7 75.5 h 10.3 
+150 -10.6 73.4 h 12.7 
+151 70.5 94.3 h 11.1 
+152 122.9 -24.7 h 0.0 
+153 -47.3 61.8 h 15.9 
+154 -31.3 81.5 h 0.8 
+155 -15.0 23.7 h 57.1 
+156 48.3 105.0 h 4.7 
+157 10.0 -14.1 h 117.8 
+158 2.8 -57.8 h 5.0 
+159 -10.2 0.1 h 14.8 
+160 4.8 -51.0 h 10.0 
+161 1.9 -47.5 h 0.5 
+162 3.6 -12.0 h 1.4 
+163 31.3 -11.8 h 2.7 
+164 2.2 18.2 h 12.2 
+165 -9.7 25.4 h 4.3 
+166 -11.1 -48.9 h 7.2 
+167 8.7 -1.3 h 22.5 
+168 59.8 101.1 h 1.0 
+169 -0.3 -9.0 h 2.2 
+170 18.2 -60.5 h 0.6 
+171 6.4 -54.9 h 10.0 
+172 12.8 -52.7 h 2.8 
+173 -4.5 -47.8 h 0.5 
+174 6.7 -7.9 h 8.9 
+175 11.8 -52.7 h 0.0 
+176 9.9 94.6 h 4.9 
+177 9.7 126.7 h 0.2 
+178 -17.5 52.9 h 53.0 
+179 -30.1 63.8 h 51.1 
+180 -24.4 52.4 h 48.3 
+181 -8.8 27.4 h 73.5 
+182 14.4 59.2 h 42.1 
+183 -20.0 101.7 h 3.2 
+184 6.4 -16.6 h 1.0 
+185 1.7 -7.5 h 20.2 
+186 -27.4 27.5 h 0.9 
+187 -0.3 4.5 h 4.5 
+188 1.6 29.0 h 3.0 
+189 -4.4 -6.9 h 1.3 
+190 8.2 -60.4 h 0.8 
+191 -1.6 3.1 h 3.2 
+192 0.5 1.5 h 8.3 
+193 1.0 -58.1 h 0.5 
+194 -17.8 -59.9 h 1.2 
+195 8.7 -58.9 h 2.6 
+196 22.8 -10.7 h 1.1 
+197 2.7 -5.8 h 14.3 
+198 7.2 -9.6 h 7.7 
+199 5.8 26.9 h 6.7 
+200 30.6 12.8 h 64.8 
+201 -0.1 -3.3 h 85.0 
+202 4.0 5.3 h 1.5 
+203 -4.0 -49.9 h 0.4 
+204 7.9 -51.6 h 8.7 
+205 2.4 -53.0 h 0.8 
+206 4.8 -1.5 h 8.2 
+207 1.4 16.1 h 81.1 
+208 52.3 79.2 h 0.4 
+209 11.5 -18.0 h 65.5 
+210 -6.0 -64.0 h 1.5 
+211 -0.7 7.9 h 25.2 
+212 25.3 -61.2 h 0.9 
+213 5.6 -58.1 h 0.6 
+214 -39.5 100.5 h 3.2 
+215 5.8 21.1 h 13.3 
+216 -12.0 -4.3 h 79.9 
+217 5.2 -6.8 h 15.4 
+218 2.6 6.5 h 13.8 
+219 -0.0 4.6 h 12.6 
+220 -6.8 -47.6 h 10.3 
+221 23.7 -34.1 h 30.9 
+222 -55.1 64.6 h 0.5 
+223 -0.6 76.7 h 3.0 
+224 -36.0 97.2 h 0.6 
+225 -16.1 -58.9 h 0.1 
+226 -0.2 -9.1 h 2.0 
+227 7.3 -6.5 h 0.6 
+228 37.7 46.5 h 54.9 
+229 32.3 -63.6 h 0.3 
+230 2.6 27.1 h 8.9 
+231 -7.5 20.0 h 11.0 
+232 3.0 -12.4 h 0.3 
+233 16.4 -6.5 h 0.4 
+234 -3.6 28.6 h 0.9 
+235 1.5 -5.4 h 6.8 
+236 5.7 -5.4 h 12.7 
+237 6.1 0.0 h 13.6 
+238 -4.2 23.4 h 4.3 
+239 -0.1 -9.3 h 3.6 
+240 -0.3 -1.5 h 18.0 
+241 -5.6 21.8 h 0.7 
+242 8.2 -18.2 h 2.3 
+243 -4.6 20.7 h 5.0 
+244 9.5 -57.3 h 8.4 
+245 -30.4 -38.8 h 1.8 
+246 -16.7 23.9 h 0.5 
+247 -13.2 -82.6 h 1.0 
+248 -7.4 -62.9 h 0.4 
+249 11.0 -51.3 h 13.8 
+250 14.5 -50.5 h 35.6 
+251 35.2 7.8 h 89.7 
+252 1.6 6.3 h 7.0 
+253 -7.0 38.9 h 93.4 
+254 12.8 -0.1 h 8.2 
+255 3.3 -10.6 h 0.8 
+256 2.0 -14.7 h 0.3 
+257 9.6 18.7 h 6.2 
+258 -9.5 3.3 h 19.0 
+259 -2.9 -4.9 h 15.9 
+260 -24.1 79.3 h 6.0 
+261 3.9 -57.9 h 15.4 
+262 3.1 -9.1 h 5.0 
+263 -3.8 9.3 h 6.0 
+264 -1.4 25.6 h 1.2 
+265 -6.9 24.2 h 6.7 
+266 10.1 2.0 h 5.3 
+267 -9.6 3.1 h 8.1 
+268 23.8 -0.5 h 1.3 
+269 9.6 8.7 h 13.1 
+270 -6.1 -10.8 h 0.4 
+271 5.0 -9.6 h 2.0 
+272 3.8 21.8 h 8.5 
+273 10.7 -5.1 h 1.2 
+274 -1.8 -8.2 h 4.2 
+275 -2.2 4.6 h 7.6 
+276 -0.3 -12.8 h 0.1 
+277 11.7 -10.1 h 0.2 
+278 7.2 -9.4 h 2.3 
+279 3.9 -8.5 h 0.7 
+280 7.4 26.3 h 0.5 
+281 0.7 29.3 h 0.9 
+282 -5.1 1.2 h 48.3 
+283 2.8 -9.5 h 4.8 
+284 -20.6 62.4 h 40.2 
+285 -7.3 -5.4 h 1.6 
+286 12.2 -2.3 h 19.1 
+287 8.1 -2.9 h 5.0 
+288 -10.9 -7.6 h 2.4 
+289 8.2 2.2 h 1.9 
+290 9.8 2.9 h 1.7 
+291 13.3 -6.0 h 17.2 
+292 10.1 -15.3 h 19.0 
+293 7.2 -14.2 h 1.8 
+294 8.3 28.2 h 0.6 
+295 -2.9 24.7 h 1.6 
+296 13.7 12.8 h 9.9 
+297 -6.2 25.2 h 0.9 
+298 5.9 -22.1 h 20.7 
+299 10.7 15.5 h 16.9 
+300 5.8 19.5 h 8.7 
+301 4.9 13.8 h 19.9 
+302 -15.9 -68.6 h 0.7 
+303 6.8 -10.3 h 12.4 
+304 1.6 -49.5 h 49.5 
+305 18.7 -48.7 h 40.2 
+306 28.2 -85.8 h 0.4 
+307 -49.7 67.4 h 35.8 
+308 -2.1 -52.3 h 8.1 
+309 2.7 32.6 h 6.0 
+310 3.8 5.7 h 8.7 
+311 1.9 -10.0 h 9.8 
+312 17.5 27.3 h 1.4 
+313 5.7 -12.0 h 0.3 
+314 1.3 21.8 h 5.1 
+315 -34.6 6.1 h 1.8 
+316 15.9 22.4 h 1.8 
+317 9.5 -8.6 h 0.8 
+318 12.6 -16.9 h 0.3 
+319 12.6 10.5 h 9.6 
+320 3.5 2.5 h 3.9 
+321 -4.5 -37.7 h 54.4 
+322 16.9 -6.7 h 11.5 
+323 1.9 2.6 h 11.9 
+324 1.2 12.4 h 15.0 
+325 -85.9 72.5 h 0.4 
+326 -0.9 -2.8 h 5.5 
+327 2.1 -2.9 h 16.6 
+328 1.1 -5.1 h 9.7 
+329 6.1 -0.4 h 21.5 
+330 3.2 28.5 h 8.2 
+331 5.6 21.6 h 1.5 
+332 6.8 -9.5 h 3.4 
+333 -3.8 -4.7 h 11.4 
+334 -3.2 9.3 h 27.7 
+335 -3.0 -12.5 h 2.4 
+336 6.5 -2.6 h 4.0 
+337 5.2 -0.9 h 11.3 
+338 6.0 -1.2 h 20.2 
+339 -7.7 19.9 h 4.8 
+340 41.5 8.0 h 2.4 
+341 -8.7 2.6 h 13.0 
+342 0.8 -60.0 h 2.6 
+343 50.5 -23.4 h 10.6 
+344 -1.1 -5.8 h 3.0 
+345 -0.5 3.0 h 9.5 
+346 3.0 9.9 h 6.1 
+347 11.6 -57.6 h 3.5 
+348 18.6 -49.2 h 10.7 
+349 38.7 -59.5 h 1.4 
+350 -3.7 -58.8 h 0.5 
+351 5.6 -58.2 h 1.2 
+352 233.1 75.6 h 1.5 
+353 -0.9 -49.5 h 4.7 
+354 5.2 -49.9 h 15.0 
+355 7.7 -45.9 h 2.9 
+356 22.1 -61.8 h 0.1 
+357 10.4 -73.3 h 1.3 
+358 -0.2 -56.2 h 4.8 
+359 -5.0 -54.7 h 0.2 
+360 -12.8 -81.0 h 0.6 
+361 11.0 -57.1 h 4.2 
+362 23.8 -65.7 h 2.4 
+363 24.0 -81.9 h 73.2 
+364 10.8 -46.7 h 18.4 
+365 11.6 -47.7 h 14.8 
+366 -6.1 -55.9 h 10.5 
+367 -105.0 -55.6 h 0.2 
+368 -18.0 -86.0 h 7.2 
+369 0.8 -54.4 h 7.8 
+370 -10.7 -48.7 h 14.3 
+371 8.1 -31.8 h 73.9 
+372 -15.7 -65.2 h 7.4 
+373 7.6 -58.8 h 13.5 
+374 5.2 -44.5 h 33.1 
+375 7.9 -71.5 h 1.2 
+376 -2.1 -54.5 h 2.0 
+377 -2.5 -26.0 h 46.1 
+378 39.2 -53.6 h 0.4 
+379 -26.6 -66.9 h 0.5 
+380 -22.1 -65.8 h 1.5 
+381 21.1 -46.4 h 22.0 
+382 -1.1 -60.0 h 25.4 
+383 -49.1 -51.7 h 0.1 
+384 21.2 -51.7 h 0.0 
+385 -0.9 -50.1 h 2.9 
+386 0.3 -65.8 h 0.6 
+387 -3.4 -65.7 h 0.9 
+388 0.4 -53.2 h 1.0 
+389 20.8 -60.3 h 7.4 
+390 5.7 -25.3 h 44.8 
+391 18.9 -47.0 h 16.7 
+392 -0.6 -56.7 h 1.3 
+393 6.5 -42.5 h 11.3 
+394 0.1 -51.0 h 4.5 
+395 0.1 -47.6 h 7.9 
+396 13.5 -65.6 h 1.1 
+397 -7.7 -48.3 h 19.5 
+398 -16.7 -70.5 h 0.9 
+399 36.8 -65.7 h 1.4 
+400 -15.3 -74.9 h 0.9 
+401 -4.9 -61.8 h 10.3 
+402 0.0 -59.5 h 16.8 
+403 8.9 -60.4 h 12.8 
+404 10.9 -29.9 h 46.5 
+405 4.1 -70.4 h 0.2 
+406 -9.1 -54.6 h 16.3 
+407 27.4 -55.8 h 1.5 
+408 2.4 -78.2 h 1.0 
+409 8.8 -48.6 h 0.2 
+410 11.1 -49.8 h 21.7 
+411 0.2 -51.2 h 16.4 
+412 -278.9 -96.9 h 0.8 
+413 25.3 -51.5 h 16.5 
+414 13.2 -62.2 h 0.3 
+415 2.4 -59.8 h 0.8 
+416 -14.3 -57.5 h 0.7 
+417 -0.4 -66.1 h 1.0 
+418 3.1 -9.3 h 57.6 
+419 -2.9 -49.7 h 2.1 
+420 10.8 -48.2 h 1.0 
+421 34.2 -55.4 h 2.4 
+422 6.1 -45.9 h 20.1 
+423 22.5 -59.2 h 0.2 
+424 -0.2 -50.5 h 0.8 
+425 -15.7 -47.6 h 0.9 
+426 3.6 -75.1 h 0.6 
+427 9.2 -50.6 h 1.7 
+428 6.6 -58.4 h 1.3 
+429 -0.8 -50.1 h 0.0 
+430 16.3 -64.4 h 0.7 
+431 -102.2 -106.7 h 151.8 
+432 -3.7 -53.5 h 18.0 
+433 14.5 -55.1 h 0.6 
+434 3.9 -46.0 h 1.2 
+435 9.4 -51.6 h 0.8 
+436 6.7 -49.2 h 16.2 
+437 28.5 -49.2 h 0.2 
+438 -5.7 -55.3 h 26.0 
+439 -13.0 -52.3 h 4.0 
+440 8.2 -50.5 h 7.1 
+441 -3.0 -47.9 h 23.3 
+442 9.0 -57.1 h 1.8 
+443 3.6 -41.7 h 0.3 
+444 -77.6 19.1 h 103.5 
+445 7.8 -44.3 h 24.7 
+446 -18.2 -42.2 h 18.1 
+447 1.5 -46.9 h 0.8 
+448 22.6 -48.4 h 0.6 
+449 6.6 -49.8 h 1.0 
+450 7.4 -41.3 h 8.5 
+451 10.4 -54.5 h 0.9 
+452 6.8 -53.2 h 14.1 
+453 -10.2 -57.6 h 16.7 
+454 6.1 -70.3 h 4.2 
+455 -5.1 -53.7 h 5.9 
+456 -9.7 -70.4 h 0.1 
+457 30.6 -65.0 h 2.0 
+458 -4.9 -63.4 h 0.7 
+459 8.5 -71.1 h 16.6 
+460 54.3 -0.6 h 87.9 
+461 -19.4 -65.9 h 0.3 
+462 15.2 -71.3 h 2.3 
+463 8.9 -65.7 h 1.1 
+464 -5.6 -61.5 h 10.3 
+465 1.2 -55.4 h 2.5 
+466 -7.4 -57.0 h 16.8 
+467 2.0 -63.5 h 0.9 
+468 21.0 -55.7 h 1.2 
+469 12.5 -60.5 h 132.7 
+470 -20.7 -59.1 h 0.4 
+471 10.7 -43.7 h 20.2 
+472 -1.3 -47.3 h 0.4 
+473 -9.1 -59.9 h 2.9 
+474 7.1 -48.3 h 1.9 
+475 30.0 -67.8 h 3.1 
+476 5.7 -54.6 h 0.7 
+477 1.7 -50.2 h 3.3 
+478 6.4 -62.3 h 6.4 
+479 2.7 -52.5 h 2.7 
+480 -0.4 -50.6 h 0.0 
+481 -4.9 -61.6 h 12.3 
+482 94.1 -11.7 h 0.3 
+483 119.0 -138.5 h 6.6 
+484 -32.9 -62.0 h 0.1 
+485 -3.6 -60.2 h 20.9 
+486 73.6 -65.8 h 103.9 
+487 -2.2 -59.6 h 0.7 
+488 7.5 -53.5 h 0.4 
+489 0.1 -51.0 h 26.5 
+490 1.4 -11.9 h 68.0 
+491 -1.0 -71.2 h 1.5 
+492 25.0 -66.0 h 0.6 
+493 31.6 -43.4 h 30.6 
+494 -104.4 13.8 h 30.6 
+495 -1.4 -54.3 h 12.5 
+496 -40.1 -68.3 h 2.7 
+497 18.9 -57.4 h 10.2 
+498 15.6 -49.6 h 17.0 
+499 8.0 -38.8 h 54.8 
+500 6.0 -54.4 h 5.9 
+501 21.7 -59.7 h 25.4 
+502 27.0 -40.4 h 32.7 
+503 7.6 -63.6 h 0.9 
+504 -29.1 -97.7 h 7.9 
+505 10.9 -47.6 h 17.2 
+506 19.8 -45.2 h 0.1 
+507 21.6 -67.5 h 2.2 
+508 -8.3 -63.8 h 0.1 
+509 -2.9 -64.8 h 4.0 
+510 -2.1 -47.6 h 0.7 
+511 15.3 -53.2 h 1.3 
+512 -9.1 -48.2 h 2.8 
+513 7.8 -56.1 h 3.4 
+514 -12.2 -52.9 h 1.4 
+515 14.9 -41.7 h 34.2 
+516 -1.0 -48.1 h 32.9 
+517 22.1 -57.1 h 0.8 
+518 -5.9 -53.7 h 1.2 
+519 -0.8 -56.1 h 0.5 
+520 35.6 0.1 h 266.5 
+521 -13.2 28.5 h 127.8 
+522 -2.0 -31.7 h 116.8 
+523 10.6 -2.4 h 84.5 
+524 42.9 -10.6 h 171.2 
+525 39.2 1.6 h 0.8 
+526 33.0 14.0 h 257.0 
+527 -56.3 -64.4 h 2.1 
+528 48.0 -43.3 h 93.6 
+529 34.3 -25.0 h 2.8 
+530 -17.3 -10.6 h 23.2 
+531 -2.8 -2.4 h 5.7 
+532 -3.1 -1.1 h 4.5 
+533 3.4 -1.6 h 11.3 
+534 1.9 4.2 h 32.5 
+535 -15.0 -3.7 h 2.6 
+536 6.2 21.4 h 2.6 
+537 2.2 -3.6 h 8.0 
+538 -4.2 34.6 h 0.2 
+539 7.3 -7.1 h 11.8 
+540 -6.1 15.5 h 10.4 
+541 3.3 17.7 h 16.7 
+542 -7.4 -4.0 h 21.4 
+543 8.1 3.3 h 3.9 
+544 2.2 25.0 h 5.9 
+545 -3.2 29.6 h 1.7 
+546 -13.9 26.1 h 0.8 
+547 2.9 5.9 h 3.3 
+548 -9.1 2.4 h 4.0 
+549 4.6 -7.4 h 4.6 
+550 2.9 5.0 h 7.4 
+551 -12.0 2.2 h 0.3 
+552 -0.3 3.7 h 8.4 
+553 -2.1 3.5 h 9.6 
+554 -6.5 25.4 h 10.1 
+555 5.9 -9.4 h 5.3 
+556 8.0 -20.6 h 3.8 
+557 6.9 -10.4 h 2.8 
+558 9.5 -3.5 h 11.6 
+559 31.0 39.8 h 0.8 
+560 15.9 21.0 h 2.2 
+561 3.3 -0.1 h 18.6 
+562 -1.1 -2.5 h 3.0 
+563 -0.3 -11.6 h 0.5 
+564 7.8 11.0 h 7.8 
+565 2.2 2.3 h 0.6 
+566 17.4 -6.7 h 3.5 
+567 4.1 -2.0 h 0.3 
+568 1.4 -9.0 h 2.7 
+569 11.1 -13.1 h 0.7 
+570 -2.4 -4.0 h 7.3 
+571 16.3 32.7 h 6.2 
+572 1.5 5.6 h 6.7 
+573 -4.7 5.8 h 4.4 
+574 1.4 -1.0 h 8.0 
+575 4.2 -1.5 h 7.7 
+576 4.9 9.8 h 3.1 
+577 -1.0 -0.5 h 6.9 
+578 8.1 2.2 h 6.9 
+579 2.8 2.6 h 9.8 
+580 -1.7 9.6 h 6.5 
+581 6.8 22.5 h 7.3 
+582 4.8 -10.1 h 13.7 
+583 3.0 -17.5 h 0.8 
+584 -6.0 5.2 h 24.3 
+585 1.7 -0.3 h 8.8 
+586 6.6 30.1 h 8.4 
+587 -0.9 -7.7 h 4.1 
+588 7.9 -2.5 h 5.6 
+589 4.6 -0.7 h 5.4 
+590 4.3 1.6 h 14.6 
+591 -0.4 -10.4 h 6.7 
+592 12.8 -13.7 h 0.3 
+593 7.6 2.6 h 12.6 
+594 10.7 -14.2 h 19.1 
+595 8.1 0.9 h 25.5 
+596 7.9 27.9 h 7.8 
+597 -7.6 20.0 h 26.0 
+598 9.2 -9.0 h 3.6 
+599 -12.0 0.8 h 16.8 
+600 14.3 30.6 h 0.5 
+601 -10.1 22.1 h 14.6 
+602 2.5 29.4 h 12.2 
+603 -6.7 26.2 h 19.1 
+604 -2.2 -4.7 h 8.4 
+605 -8.3 19.7 h 6.1 
+606 9.1 26.7 h 16.3 
+607 5.0 -10.9 h 2.6 
+608 5.4 -8.8 h 9.4 
+609 6.8 -11.2 h 13.4 
+610 4.9 1.6 h 7.0 
+611 18.9 2.7 h 4.4 
+612 -2.7 22.4 h 19.2 
+613 17.3 -6.5 h 4.4 
+614 3.0 -8.1 h 75.6 
+615 0.5 -8.7 h 74.3 
+616 0.9 -1.9 h 58.9 
+617 -8.6 -2.3 h 22.7 
+618 1.1 -15.4 h 33.2 
+619 -2.2 -0.3 h 40.1 
+620 16.7 -3.9 h 76.0 
+621 3.1 -6.0 h 78.4 
+622 74.8 14.8 h 28.5 
+623 -26.4 -6.0 h 44.7 
+624 -54.0 -6.8 h 24.1 
+625 -0.3 0.1 h 82.8 
+626 -58.7 12.6 h 9.0 
+627 75.8 -3.9 h 20.9 
+628 70.1 -30.1 h 2.5 
+629 62.9 -28.5 h 21.0 
+630 -0.3 -4.4 h 69.0 
+631 -67.8 -16.0 h 1.1 
+632 33.3 -19.0 h 45.2 
+633 82.9 2.4 h 1.2 
+634 81.9 -39.7 h 7.4 
+635 60.9 -71.4 h 0.4 
+636 4.8 -1.4 h 79.6 
+637 0.3 -0.8 h 78.5 
+638 0.7 -0.3 h 76.2 
+639 12.5 -6.4 h 98.2 
+640 13.8 3.1 h 75.7 
+641 74.4 -37.1 h 24.0 
+642 1.7 -2.3 h 64.9 
+643 -69.6 -22.0 h 25.2 
+644 -64.9 23.2 h 27.1 
+645 4.8 -7.6 h 61.1 
+646 31.6 2.4 h 45.7 
+647 24.5 -1.5 h 57.4 
+648 62.8 -12.8 h 0.2 
+649 1.9 -3.0 h 68.1 
+650 51.9 -37.5 h 18.8 
+651 -8.1 -4.2 h 72.6 
+652 2.4 -12.0 h 54.2 
+653 -33.8 -10.8 h 29.7 
+654 83.7 -26.3 h 0.5 
+655 -46.7 -50.4 h 4.8 
+656 7.0 3.5 h 69.8 
+657 4.9 -7.8 h 58.7 
+658 -18.2 -2.0 h 61.9 
+659 -0.7 1.2 h 45.0 
+660 2.9 -1.2 h 43.9 
+661 -2.9 10.0 h 34.7 
+662 14.2 20.5 h 25.8 
+663 -21.9 -10.2 h 35.1 
+664 5.6 -3.8 h 75.8 
+665 9.7 -4.0 h 12.4 
+666 15.6 -4.1 h 89.1 
+667 11.9 -6.5 h 71.6 
+668 -13.9 -4.7 h 79.2 
+669 -0.6 -12.7 h 25.5 
+670 21.2 3.9 h 65.6 
+671 1.2 -7.4 h 42.8 
+672 73.2 -68.7 h 17.0 
+673 -66.2 -11.2 h 0.7 
+674 -29.0 -7.9 h 30.4 
+675 3.7 -1.6 h 76.0 
+676 6.9 -2.1 h 74.6 
+677 3.7 -1.7 h 104.2 
+678 26.5 -12.0 h 1.3 
+679 2.7 0.5 h 59.3 
+680 9.5 -9.0 h 56.3 
+681 15.9 2.4 h 10.6 
+682 -1.7 2.0 h 85.1 
+683 5.4 5.2 h 68.0 
+684 -4.9 -8.6 h 72.2 
+685 78.5 13.4 h 15.0 
+686 -0.4 -6.0 h 75.7 
+687 23.7 -9.2 h 43.9 
+688 20.6 -2.0 h 74.2 
+689 11.1 -2.6 h 69.5 
+690 8.0 -5.4 h 70.8 
+691 19.6 6.2 h 74.1 
+692 5.9 -5.3 h 70.2 
+693 -11.7 -7.8 h 34.6 
+694 10.3 -9.6 h 57.9 
+695 15.0 10.3 h 60.9 
+696 -3.4 -1.0 h 67.6 
+697 -39.6 -13.5 h 232.6 
+698 -10.8 -7.1 h 23.6 
+699 64.5 129.6 h 0.6 
+700 57.6 59.7 h 48.6 
+701 -53.7 86.6 h 2.3 
+702 -26.9 128.6 h 6.0 
+703 147.4 37.9 h 1.7 
+704 -24.4 -91.9 h 63.8 
+705 -268.9 -66.0 h 57.3 
+706 -21.4 10.5 h 73.7 
+707 204.7 266.5 h 3.3 
+708 -22.7 101.1 h 1.1 
+709 40.2 92.1 h 18.4 
+710 42.8 0.7 h 130.9 
+711 -51.3 82.2 h 0.2 
+712 -123.4 5.2 h 198.2 
+713 -8.5 114.5 h 1.3 
+714 -11.6 95.5 h 0.7 
+715 18.9 87.2 h 14.2 
+716 49.8 102.7 h 0.0 
+717 -21.6 34.0 h 116.9 
+718 -132.9 80.5 h 191.8 
+719 -20.4 84.8 h 30.7 
+720 88.2 54.3 h 0.4 
+721 -34.0 41.9 h 46.6 
+722 5.6 88.5 h 34.5 
+723 -20.7 67.8 h 53.9 
+724 -33.9 100.5 h 29.0 
+725 22.1 28.6 h 73.4 
+726 4.7 27.4 h 88.6 
+727 -5.2 57.5 h 39.7 
+728 -109.2 59.1 h 12.2 
+729 28.4 32.1 h 86.7 
+730 -10.2 85.1 h 0.2 
+731 9.1 91.0 h 0.7 
+732 11.8 80.8 h 1.5 
+733 -38.5 80.0 h 0.4 
+734 77.3 94.7 h 1.1 
+735 37.4 80.5 h 0.8 
+736 -22.7 81.2 h 0.5 
+737 -72.9 60.0 h 0.1 
+738 32.4 79.7 h 0.2 
+739 25.0 97.2 h 1.7 
+740 -15.8 90.9 h 4.6 
+741 -25.9 86.1 h 2.4 
+742 -39.7 70.5 h 1.3 
+743 14.4 80.2 h 0.3 
+744 9.1 30.2 h 74.0 
+745 11.1 -11.5 h 92.6 
+746 -45.0 78.6 h 26.4 
+747 -8.2 79.3 h 3.5 
+748 42.8 -37.8 h 82.9 
+749 -5.4 21.2 h 271.9 
+750 -9.5 66.1 h 27.2 
+751 49.0 82.2 h 0.6 
+752 32.0 56.3 h 20.5 
+753 9.3 103.8 h 0.7 
+754 -133.9 -21.1 h 190.1 
+755 11.1 28.0 h 116.3 
+756 155.5 161.6 h 6.3 
+757 20.9 70.9 h 53.2 
+758 57.3 77.3 h 18.8 
+759 53.5 90.4 h 0.2 
+760 77.4 73.6 h 9.8 
+761 89.7 125.6 h 1.7 
+762 -20.4 104.4 h 18.8 
+763 -24.7 90.7 h 1.1 
+764 -27.9 92.8 h 3.4 
+765 -24.7 100.6 h 0.9 
+766 -92.9 47.3 h 6.7 
+767 61.1 69.6 h 60.1 
+768 -19.9 55.8 h 59.5 
+769 90.0 87.4 h 5.1 
+770 -31.3 93.7 h 2.0 
+771 32.3 24.1 h 58.1 
+772 7.3 42.3 h 86.5 
+773 -15.3 3.2 h 113.2 
+774 40.5 51.8 h 48.5 
+775 14.7 105.3 h 0.7 
+776 93.7 42.6 h 229.8 
+777 89.1 76.4 h 1.1 
+778 -184.0 66.0 h 140.3 
+779 -11.1 91.2 h 12.9 
+780 -6.1 120.6 h 7.9 
+781 58.3 71.3 h 73.0 
+782 55.9 79.2 h 37.4 
+783 16.2 104.4 h 2.1 
+784 -17.1 20.1 h 291.6 
+785 -3.4 70.5 h 0.3 
+786 2.4 117.9 h 0.4 
+787 72.2 137.7 h 1.1 
+788 -2.5 102.5 h 1.0 
+789 -6.8 58.8 h 64.0 
+790 43.1 97.7 h 0.6 
+791 53.6 93.9 h 0.5 
+792 -38.2 70.8 h 0.9 
+793 -91.0 97.2 h 3.1 
+794 -80.6 91.1 h 3.5 
+795 8.0 117.4 h 1.1 
+796 25.0 56.0 h 52.0 
+797 71.3 78.9 h 0.6 
+798 -10.7 65.1 h 86.1 
+799 138.7 96.0 h 1.2 
+800 -95.0 130.5 h 1.3 
+801 -14.4 -10.9 h 107.9 
+802 17.8 -23.0 h 110.8 
+803 -31.8 40.3 h 86.8 
+804 1.4 27.5 h 75.7 
+805 -3.0 53.3 h 104.2 
+806 62.5 47.6 h 74.4 
+807 36.8 79.1 h 3.8 
+808 -3.9 74.8 h 8.2 
+809 -120.0 82.0 h 4.8 
+810 33.0 24.6 h 93.1 
+811 -4.8 61.6 h 50.9 
+812 16.8 69.0 h 38.5 
+813 16.4 76.8 h 2.6 
+814 -88.7 38.2 h 15.6 
+815 42.1 103.5 h 7.9 
+816 85.3 81.3 h 17.1 
+817 -10.2 29.6 h 71.3 
+818 0.9 55.6 h 81.7 
+819 -15.6 54.6 h 44.1 
+820 0.1 30.0 h 98.1 
+821 119.6 79.5 h 0.1 
+822 23.3 116.2 h 0.1 
+823 37.7 69.1 h 53.8 
+824 72.8 117.5 h 0.9 
+825 -10.5 87.7 h 44.1 
+826 3.8 26.6 h 74.0 
+827 -8.2 40.7 h 63.5 
+828 108.4 99.7 h 3.5 
+829 64.8 113.6 h 3.2 
+830 -14.3 88.2 h 41.9 
+831 9.6 111.0 h 1.6 
+832 -11.3 102.8 h 14.3 
+833 -25.1 88.9 h 0.7 
+834 72.9 96.7 h 1.2 
+835 -34.2 42.4 h 68.4 
+836 13.4 78.1 h 24.2 
+837 12.7 75.1 h 71.4 
+838 34.0 39.2 h 81.5 
+839 57.1 119.7 h 1.9 
+840 34.6 54.7 h 61.6 
+841 39.0 134.3 h 9.7 
+842 67.4 116.9 h 0.7 
+843 -3.1 54.5 h 54.6 
+844 -26.3 60.3 h 66.9 
+845 27.8 119.5 h 0.2 
+846 52.4 134.8 h 0.4 
+847 44.6 47.4 h 76.8 
+848 46.2 76.0 h 79.8 
+849 66.9 72.5 h 40.5 
+850 46.8 118.3 h 0.3 
+851 53.8 161.0 h 7.1 
+852 95.8 116.1 h 1.1 
+853 7.4 129.2 h 6.0 
+854 31.9 133.6 h 0.4 
+855 76.0 87.4 h 0.1 
+856 -37.8 98.8 h 0.3 
+857 -18.4 20.7 h 85.4 
+858 58.0 101.4 h 1.6 
+859 17.3 68.5 h 37.7 
+860 55.6 79.0 h 3.6 
+861 -20.0 44.5 h 54.0 
+862 -51.0 105.5 h 1.6 
+863 38.6 22.2 h 69.9 
+864 -13.9 106.9 h 3.0 
+865 -8.3 21.4 h 1.6 
+866 1.7 -8.4 h 8.5 
+867 2.3 -3.4 h 7.0 
+868 -4.8 3.9 h 1.6 
+869 8.9 -13.9 h 3.9 
+870 -2.5 24.0 h 3.9 
+871 1.8 0.0 h 8.8 
+872 17.0 22.3 h 0.9 
+873 11.7 7.6 h 2.5 
+874 -0.2 1.9 h 24.9 
+875 6.4 2.6 h 7.0 
+876 6.9 17.6 h 11.9 
+877 -0.5 26.0 h 8.6 
+878 2.8 -2.8 h 14.4 
+879 3.1 -3.1 h 2.1 
+880 -1.0 -16.8 h 2.0 
+881 -0.8 -4.7 h 6.8 
+882 12.0 -10.2 h 11.0 
+883 -47.7 24.5 h 2.8 
+884 6.9 -9.4 h 2.6 
+885 -4.3 -6.9 h 15.9 
+886 -19.7 29.9 h 1.0 
+887 21.3 4.7 h 0.4 
+888 11.5 1.5 h 9.9 
+889 4.9 22.3 h 7.7 
+890 -0.7 3.2 h 2.8 
+891 0.5 22.0 h 3.7 
+892 24.0 18.5 h 12.9 
+893 7.2 -8.9 h 4.1 
+894 1.5 -12.0 h 1.0 
+895 2.8 6.0 h 12.0 
+896 17.2 4.2 h 32.9 
+897 6.8 -6.1 h 9.7 
+898 1.6 -3.8 h 21.6 
+899 8.3 8.6 h 0.2 
+900 3.2 -15.2 h 18.4 
+901 -5.1 24.5 h 2.3 
+902 5.3 6.7 h 1.2 
+903 3.9 -0.6 h 8.7 
+904 2.6 -13.4 h 4.8 
+905 8.6 6.3 h 17.0 
+906 2.6 -21.6 h 1.9 
+907 10.2 -11.7 h 24.1 
+908 2.6 -3.1 h 7.5 
+909 5.7 3.8 h 4.4 
+910 8.1 -4.0 h 17.1 
+911 -0.8 -2.4 h 3.5 
+912 7.1 -10.3 h 1.3 
+913 1.8 -14.1 h 5.0 
+914 -0.9 2.9 h 4.6 
+915 6.9 -12.6 h 2.8 
+916 -11.2 20.9 h 8.0 
+917 12.7 -5.9 h 13.1 
+918 -1.1 -13.7 h 5.2 
+919 -25.6 4.5 h 6.3 
+920 17.1 1.6 h 1.2 
+921 6.6 8.1 h 5.7 
+922 -6.1 26.0 h 9.2 
+923 -4.7 20.9 h 12.1 
+924 -0.5 -11.4 h 6.7 
+925 -15.6 -5.9 h 39.6 
+926 8.9 13.4 h 7.0 
+927 11.1 12.9 h 11.2 
+928 13.6 -7.1 h 15.6 
+929 4.7 -10.6 h 18.1 
+930 1.2 7.0 h 7.3 
+931 6.0 5.9 h 5.5 
+932 0.1 3.6 h 10.3 
+933 -2.7 2.9 h 10.5 
+934 0.6 -5.5 h 9.0 
+935 -10.6 -9.9 h 3.0 
+936 7.8 -7.8 h 30.2 
+937 -7.4 -9.7 h 31.7 
+938 11.2 -7.3 h 22.6 
+939 -0.7 -8.0 h 10.8 
+940 2.7 -2.1 h 7.7 
+941 -15.1 4.3 h 5.2 
+942 -0.4 1.0 h 11.3 
+943 -6.9 0.9 h 0.4 
+944 3.9 -12.0 h 7.9 
+945 -17.2 3.0 h 0.6 
+946 4.2 -1.4 h 0.5 
+947 18.1 -4.9 h 0.5 
+948 4.5 3.6 h 2.5 
+949 2.8 -12.7 h 6.3 
+950 14.6 6.4 h 0.2 
+951 16.1 0.2 h 1.1 
+952 -9.3 30.6 h 7.1 
+953 4.3 32.5 h 0.6 
+954 0.3 -9.3 h 15.0 
+955 2.4 14.8 h 16.9 
+956 -9.6 21.0 h 9.7 
+957 10.3 -2.1 h 10.7 
+958 -1.3 19.5 h 5.5 
+959 -9.1 19.7 h 4.3 
+960 20.2 -8.1 h 13.1 
+961 1.9 29.6 h 24.6 
+962 0.1 -1.1 h 8.0 
+963 12.8 -0.1 h 0.5 
+964 -7.0 65.4 h 1.0 
+965 1.4 16.8 h 26.0 
+966 -7.4 10.5 h 2.1 
+967 7.4 -11.1 h 2.6 
+968 8.4 22.6 h 8.8 
+969 2.5 1.8 h 4.8 
+970 -0.7 -1.0 h 12.3 
+971 7.7 -9.6 h 7.2 
+972 -18.2 10.8 h 0.5 
+973 4.0 -4.8 h 1.3 
+974 9.8 -4.2 h 0.1 
+975 4.8 -13.1 h 12.6 
+976 -3.0 13.8 h 5.2 
+977 9.4 24.2 h 6.0 
+978 1.6 25.6 h 13.2 
+979 2.2 25.3 h 7.0 
+980 -3.5 0.1 h 4.0 
+981 -0.3 -5.1 h 4.9 
+982 4.7 -10.1 h 6.0 
+983 10.6 -1.4 h 4.8 
+984 -4.3 27.4 h 0.6 
+985 -1.4 -3.5 h 8.2 
+986 -10.0 -11.8 h 9.9 
+987 -1.7 -0.3 h 12.1 
+988 10.9 26.4 h 0.2 
+989 5.8 1.6 h 9.1 
+990 -0.6 2.9 h 28.1 
+991 8.3 22.7 h 15.8 
+992 -8.1 -9.6 h 6.5 
+993 5.4 -9.8 h 3.8 
+994 -3.0 13.4 h 3.8 
+995 -8.6 5.2 h 4.9 
+996 3.1 -12.4 h 34.3 
+997 0.1 -7.8 h 3.3 
+998 -0.8 2.6 h 3.1 
+999 -241.9 -50.8 h 74.2 
+1000 5.2 10.1 h 1.2 
+1001 36.0 -11.1 h 1.5 
+1002 7.6 32.0 h 0.5 
+1003 3.9 4.2 h 11.4 
+1004 1.5 5.5 h 12.7 
+1005 -18.2 27.8 h 7.3 
+1006 3.6 -10.8 h 4.2 
+1007 -6.4 -11.6 h 5.9 
+1008 5.8 8.4 h 10.3 
+1009 18.0 13.5 h 14.6 
+1010 10.3 -7.4 h 9.8 
+1011 -8.7 -9.2 h 4.0 
+1012 5.3 0.4 h 12.0 
+1013 -3.1 26.4 h 1.4 
+1014 7.8 6.2 h 3.4 
+1015 14.0 14.6 h 1.3 
+1016 12.5 -8.5 h 32.3 
+1017 -4.3 12.4 h 15.5 
+1018 -3.5 16.8 h 1.4 
+1019 17.8 23.8 h 12.1 
+1020 10.9 -5.3 h 18.9 
+1021 5.0 1.7 h 6.4 
+1022 -13.4 4.4 h 29.7 
+1023 27.2 27.9 h 2.7 
+1024 -0.1 -4.4 h 6.4 
+1025 2.3 27.4 h 1.0 
+1026 5.1 7.3 h 5.7 
+1027 7.3 3.2 h 8.3 
+1028 6.1 9.5 h 1.9 
+1029 -26.7 1.6 h 16.9 
+1030 2.4 -3.9 h 16.1 
+1031 -2.1 -1.0 h 13.2 
+1032 5.8 -9.6 h 7.4 
+1033 -1.5 -3.3 h 1.7 
+1034 9.3 26.9 h 0.3 
+1035 -1.1 0.4 h 15.1 
+1036 11.4 18.1 h 5.7 
+1037 18.4 5.0 h 1.4 
+1038 2.7 1.3 h 6.1 
+1039 -1.6 3.1 h 10.3 
+1040 -1.6 -3.0 h 14.4 
+1041 19.0 -6.9 h 0.5 
+1042 3.1 25.6 h 1.8 
+1043 -2.0 3.2 h 1.4 
+1044 6.0 -4.7 h 0.6 
+1045 1.8 24.6 h 0.9 
+1046 -2.3 26.2 h 11.0 
+1047 7.8 -0.2 h 17.5 
+1048 4.0 -0.2 h 8.7 
+1049 4.8 4.7 h 8.1 
+1050 9.2 -0.4 h 1.7 
+1051 -8.1 23.3 h 9.0 
+1052 -1.4 -1.7 h 16.4 
+1053 -10.3 -10.2 h 11.8 
+1054 6.7 -1.3 h 12.5 
+1055 -2.1 5.6 h 17.2 
+1056 -1.3 25.0 h 5.2 
+1057 4.0 -6.7 h 22.4 
+1058 4.8 -10.9 h 6.9 
+1059 5.7 12.9 h 12.8 
+1060 -9.2 -6.4 h 1.7 
+1061 5.5 3.5 h 7.9 
+1062 -7.9 -0.6 h 3.0 
+1063 8.2 -12.5 h 1.0 
+1064 9.9 -12.3 h 1.5 
+1065 -0.9 28.6 h 8.3 
+1066 -12.8 -3.2 h 5.7 
+1067 -0.6 -12.5 h 3.8 
+1068 37.0 -15.6 h 2.4 
+1069 -3.8 -10.3 h 0.6 
+1070 11.9 -10.1 h 29.8 
+1071 -12.1 -1.6 h 1.0 
+1072 4.7 -3.0 h 8.3 
+1073 6.8 -1.8 h 1.6 
+1074 -1.2 25.0 h 9.4 
+1075 -14.2 -2.6 h 7.8 
+1076 14.3 -5.6 h 6.8 
+1077 12.7 -12.5 h 1.6 
+1078 -6.0 4.8 h 10.5 
+1079 10.4 -2.4 h 4.6 
+1080 -5.5 21.8 h 5.1 
+1081 7.0 3.5 h 6.6 
+1082 5.5 -0.9 h 8.8 
+1083 6.6 -4.2 h 9.3 
+1084 13.7 7.6 h 8.4 
+1085 0.5 -5.9 h 1.4 
+1086 -34.9 -19.1 h 64.2 
+1087 6.6 10.8 h 2.2 
+1088 4.3 -14.2 h 3.3 
+1089 12.3 -1.1 h 16.0 
+1090 6.6 -18.7 h 0.9 
+1091 -1.8 33.5 h 222.8 
+1092 -2.0 -8.8 h 3.8 
+1093 -12.2 0.7 h 5.8 
+1094 -6.4 -4.8 h 0.0 
+1095 18.0 40.1 h 48.2 
+1096 19.8 0.3 h 1.7 
+1097 8.8 -6.8 h 7.9 
+1098 10.5 5.9 h 17.1 
+1099 4.8 20.2 h 11.6 
+1100 24.6 7.2 h 82.6 
+1101 -7.6 5.7 h 3.4 
+1102 2.1 -6.0 h 2.5 
+1103 -22.9 -9.1 h 6.1 
+1104 -6.8 -0.9 h 4.0 
+1105 -3.9 -6.9 h 6.4 
+1106 14.6 19.4 h 18.5 
+1107 11.6 22.8 h 7.2 
+1108 8.2 25.2 h 5.2 
+1109 3.1 16.9 h 15.7 
+1110 -27.0 -8.9 h 0.7 
+1111 -18.9 23.4 h 0.1 
+1112 4.5 2.3 h 14.3 
+1113 30.9 -19.9 h 1.3 
+1114 8.6 3.2 h 2.8 
+1115 11.2 -20.4 h 25.7 
+1116 -0.1 20.7 h 11.1 
+1117 16.6 4.6 h 1.8 
+1118 1.2 -0.4 h 0.7 
+1119 3.4 -8.0 h 5.6 
+1120 5.2 -10.9 h 3.4 
+1121 7.7 -15.0 h 5.0 
+1122 3.6 5.8 h 13.3 
+1123 2.3 -7.1 h 5.2 
+1124 0.2 -0.3 h 2.4 
+1125 3.3 3.1 h 6.6 
+1126 -11.2 10.3 h 3.3 
+1127 -9.4 0.5 h 3.2 
+1128 0.5 -11.9 h 9.0 
+1129 2.9 -9.1 h 5.1 
+1130 13.8 2.1 h 0.9 
+1131 0.4 4.2 h 2.3 
+1132 -4.0 -5.7 h 12.5 
+1133 -0.5 -14.4 h 32.4 
+1134 8.9 -2.6 h 4.7 
+1135 -7.8 -13.2 h 0.7 
+1136 -0.4 2.1 h 2.7 
+1137 -6.5 21.6 h 3.5 
+1138 3.0 27.6 h 1.8 
+1139 8.2 -9.1 h 3.2 
+1140 6.1 -14.4 h 0.1 
+1141 -1.1 -13.1 h 2.2 
+1142 8.4 -9.2 h 10.7 
+1143 15.8 5.9 h 0.7 
+1144 7.2 9.1 h 1.6 
+1145 13.1 2.1 h 0.6 
+1146 -3.7 7.7 h 3.2 
+1147 8.2 1.5 h 3.4 
+1148 4.7 -11.4 h 3.6 
+1149 1.1 0.1 h 9.7 
+1150 4.0 -11.8 h 5.5 
+1151 5.3 1.5 h 5.2 
+1152 18.4 -4.2 h 0.2 
+1153 1.2 32.2 h 20.7 
+1154 -2.1 6.8 h 7.3 
+1155 7.6 -1.3 h 10.3 
+1156 6.7 2.6 h 5.3 
+1157 1.7 21.2 h 35.7 
+1158 2.2 9.6 h 35.0 
+1159 7.2 -8.7 h 1.2 
+1160 5.0 3.9 h 0.1 
+1161 1.6 1.4 h 2.3 
+1162 9.2 -5.7 h 16.8 
+1163 16.0 14.8 h 11.2 
+1164 -16.4 40.4 h 0.7 
+1165 -2.3 1.6 h 36.2 
+1166 5.4 26.7 h 0.3 
+1167 -17.2 -10.6 h 2.1 
+1168 2.4 -1.7 h 0.5 
+1169 0.4 4.9 h 9.5 
+1170 -14.5 5.8 h 26.4 
+1171 13.6 12.8 h 2.5 
+1172 11.2 -9.0 h 3.1 
+1173 8.5 -10.4 h 10.9 
+1174 5.9 -11.5 h 4.1 
+1175 7.1 -4.2 h 0.8 
+1176 -3.4 1.0 h 8.6 
+1177 20.7 -13.6 h 4.5 
+1178 -4.0 17.8 h 5.2 
+1179 16.0 8.3 h 15.8 
+1180 7.3 36.0 h 3.0 
+1181 7.8 -10.4 h 0.3 
+1182 10.0 -8.4 h 10.3 
+1183 76.4 59.5 h 0.1 
+1184 17.1 26.9 h 3.2 
+1185 -4.8 0.2 h 5.9 
+1186 -2.3 -0.7 h 2.3 
+1187 -6.0 1.1 h 1.3 
+1188 -2.0 7.8 h 12.7 
+1189 4.3 1.3 h 11.6 
+1190 -1.9 5.3 h 8.8 
+1191 4.1 -13.7 h 5.9 
+1192 2.6 5.0 h 17.4 
+1193 2.6 17.6 h 17.9 
+1194 7.3 14.6 h 4.2 
+1195 5.9 4.1 h 5.8 
+1196 7.3 -1.7 h 10.5 
+1197 3.6 0.8 h 8.0 
+1198 -5.5 21.7 h 11.9 
+1199 -4.3 14.7 h 9.3 
+1200 0.1 -0.6 h 10.1 
+1201 -5.2 -6.4 h 7.3 
+1202 7.7 4.4 h 15.4 
+1203 -19.7 6.3 h 6.3 
+1204 3.3 -3.0 h 5.1 
+1205 6.7 18.7 h 8.5 
+1206 6.3 31.7 h 0.7 
+1207 -17.0 17.1 h 1.3 
+1208 -5.5 16.7 h 18.1 
+1209 -13.5 -5.3 h 2.0 
+1210 -3.0 -13.5 h 2.8 
+1211 0.3 -9.5 h 7.2 
+1212 5.7 -1.1 h 1.6 
+1213 -0.1 -12.5 h 1.8 
+1214 60.7 -9.5 h 0.5 
+1215 2.1 7.5 h 14.2 
+1216 4.9 22.3 h 0.5 
+1217 -0.4 26.4 h 0.6 
+1218 -10.0 0.6 h 4.0 
+1219 -7.0 28.1 h 1.4 
+1220 1.7 2.0 h 0.7 
+1221 19.5 -3.4 h 1.4 
+1222 6.5 -8.3 h 15.7 
+1223 -5.0 4.5 h 6.7 
+1224 1.1 1.0 h 0.3 
+1225 0.5 3.5 h 7.8 
+1226 4.5 -1.4 h 21.5 
+1227 16.0 -3.9 h 18.5 
+1228 11.7 8.2 h 2.1 
+1229 13.8 28.5 h 44.2 
+1230 10.0 -5.0 h 0.6 
+1231 1.2 27.3 h 5.4 
+1232 -4.0 -14.0 h 2.3 
+1233 13.6 -4.7 h 0.6 
+1234 4.8 -10.1 h 6.6 
+1235 19.4 -8.7 h 2.9 
+1236 13.3 10.9 h 1.2 
+1237 -8.0 23.8 h 10.6 
+1238 11.4 -5.4 h 9.9 
+1239 -273.2 -20.4 h 42.1 
+1240 5.1 20.9 h 0.8 
+1241 15.8 -2.5 h 5.8 
+1242 11.8 6.8 h 6.1 
+1243 5.7 32.0 h 0.6 
+1244 1.6 -0.2 h 14.9 
+1245 5.5 -12.7 h 20.4 
+1246 -6.1 21.1 h 1.3 
+1247 7.0 7.8 h 5.4 
+1248 13.2 -5.6 h 21.4 
+1249 -0.5 -11.4 h 0.3 
+1250 7.0 1.6 h 6.1 
+1251 6.1 -6.6 h 78.9 
+1252 0.8 3.1 h 5.8 
+1253 -15.2 99.7 h 6.2 
+1254 10.8 94.9 h 9.7 
+1255 -32.4 72.8 h 0.7 
+1256 39.2 59.4 h 18.2 
+1257 2.4 47.6 h 65.4 
+1258 -25.5 75.9 h 0.2 
+1259 -1.0 77.5 h 2.8 
+1260 19.1 91.4 h 0.6 
+1261 3.1 91.8 h 0.6 
+1262 -9.3 78.1 h 3.8 
+1263 -3.3 22.2 h 64.7 
+1264 -42.8 74.2 h 28.2 
+1265 -13.3 61.0 h 30.9 
+1266 -1.6 83.8 h 12.4 
+1267 -19.5 67.6 h 4.7 
+1268 -57.2 70.2 h 4.5 
+1269 -5.7 81.6 h 1.7 
+1270 12.3 74.8 h 0.1 
+1271 -10.1 87.4 h 0.2 
+1272 14.0 80.4 h 0.7 
+1273 -15.6 53.2 h 40.8 
+1274 44.2 109.5 h 1.1 
+1275 -8.2 89.6 h 1.8 
+1276 -78.7 68.7 h 4.9 
+1277 1.6 79.4 h 2.0 
+1278 11.1 85.7 h 3.4 
+1279 -8.1 99.7 h 0.6 
+1280 78.4 53.8 h 35.1 
+1281 -39.7 66.5 h 0.4 
+1282 -44.5 79.6 h 1.6 
+1283 -18.4 70.1 h 0.4 
+1284 9.9 21.8 h 76.5 
+1285 -51.0 70.5 h 1.6 
+1286 -44.0 84.1 h 0.4 
+1287 10.5 69.3 h 13.0 
+1288 -6.1 77.6 h 1.5 
+1289 22.8 94.4 h 0.2 
+1290 96.1 121.1 h 0.3 
+1291 -76.8 80.9 h 5.7 
+1292 18.2 82.0 h 0.2 
+1293 12.7 80.6 h 0.3 
+1294 -19.9 92.0 h 0.2 
+1295 -48.0 57.2 h 0.3 
+1296 68.7 85.0 h 2.6 
+1297 100.5 29.2 h 0.8 
+1298 1.6 84.9 h 0.3 
+1299 0.9 60.3 h 25.1 
+1300 -42.3 88.1 h 5.5 
+1301 6.0 19.4 h 67.9 
+1302 16.3 90.8 h 2.1 
+1303 -36.3 77.0 h 1.0 
+1304 -25.6 69.6 h 12.2 
+1305 -5.5 83.9 h 4.3 
+1306 -28.8 66.7 h 13.9 
+1307 -50.8 64.8 h 1.1 
+1308 -22.9 77.3 h 2.4 
+1309 -5.7 79.6 h 0.5 
+1310 -53.7 58.3 h 1.2 
+1311 -12.1 93.9 h 0.1 
+1312 18.0 98.6 h 0.4 
+1313 -20.4 92.9 h 10.6 
+1314 3.8 20.8 h 81.5 
+1315 -8.9 54.9 h 26.0 
+1316 -33.6 81.9 h 11.4 
+1317 -19.4 86.8 h 3.2 
+1318 14.8 76.1 h 0.7 
+1319 11.8 -50.8 h 4.2 
+1320 -0.8 -56.2 h 4.5 
+1321 39.6 -40.5 h 14.7 
+1322 -20.2 -69.5 h 2.4 
+1323 9.1 -48.8 h 4.6 
+1324 -0.9 -63.7 h 13.5 
+1325 195.2 -155.7 h 56.6 
+1326 18.6 -59.2 h 0.5 
+1327 34.9 -78.3 h 0.3 
+1328 11.2 -53.2 h 43.0 
+1329 8.8 -59.0 h 9.2 
+1330 0.9 -53.6 h 0.6 
+1331 1.7 -69.9 h 0.5 
+1332 29.1 -29.5 h 74.4 
+1333 4.3 -52.3 h 16.1 
+1334 -12.0 -62.7 h 157.7 
+1335 5.8 -50.9 h 0.6 
+1336 -1.8 -62.4 h 6.1 
+1337 7.7 -61.8 h 10.9 
+1338 -11.0 -66.6 h 4.0 
+1339 15.6 -62.9 h 30.1 
+1340 6.1 -45.5 h 0.3 
+1341 -11.1 -73.8 h 83.8 
+1342 48.0 -39.0 h 0.6 
+1343 -5.3 -74.9 h 1.4 
+1344 23.7 -47.9 h 0.7 
+1345 4.7 -57.4 h 1.0 
+1346 6.1 -62.1 h 48.5 
+1347 -6.1 -71.4 h 0.5 
+1348 -2.8 -56.4 h 25.1 
+1349 4.6 -57.1 h 0.7 
+1350 -19.7 -62.3 h 0.2 
+1351 12.4 -48.0 h 0.1 
+1352 -3.3 -46.9 h 1.8 
+1353 12.1 -61.0 h 7.6 
+1354 16.9 -66.3 h 0.9 
+1355 40.4 -56.5 h 3.8 
+1356 1.9 -57.7 h 0.4 
+1357 -59.0 -109.1 h 76.7 
+1358 0.4 -61.5 h 1.6 
+1359 30.1 -48.3 h 0.1 
+1360 -4.3 -59.5 h 0.9 
+1361 1.5 -48.0 h 25.5 
+1362 207.1 -30.8 h 109.7 
+1363 9.7 -61.2 h 0.9 
+1364 2.5 -51.2 h 7.5 
+1365 -25.2 -77.4 h 0.6 
+1366 17.3 -72.7 h 0.7 
+1367 -2.4 -52.6 h 0.8 
+1368 31.4 -57.7 h 0.2 
+1369 13.8 -62.8 h 4.1 
+1370 31.2 -59.4 h 26.0 
+1371 -20.5 -60.9 h 151.9 
+1372 -13.7 -54.9 h 0.7 
+1373 0.7 -47.7 h 78.5 
+1374 5.3 -52.1 h 0.6 
+1375 14.7 -87.3 h 11.0 
+1376 31.5 -85.4 h 3.0 
+1377 -4.3 -61.9 h 0.3 
+1378 10.0 -71.9 h 0.8 
+1379 54.7 -66.8 h 3.9 
+1380 -9.1 -48.8 h 0.1 
+1381 6.1 -48.7 h 4.2 
+1382 -4.8 -50.3 h 39.6 
+1383 -8.5 -67.4 h 1.1 
+1384 5.7 -55.1 h 5.5 
+1385 39.1 -89.2 h 0.6 
+1386 34.2 -60.2 h 29.2 
+1387 16.6 -64.3 h 0.8 
+1388 -2.1 -62.0 h 5.1 
+1389 -1.3 -52.6 h 0.7 
+1390 9.2 -61.1 h 8.3 
+1391 20.6 -60.5 h 1.1 
+1392 10.1 -66.8 h 6.9 
+1393 -9.9 -58.5 h 9.4 
+1394 9.2 -52.1 h 0.4 
+1395 38.0 -27.4 h 3.6 
+1396 -1.8 -63.1 h 1.0 
+1397 11.6 -55.9 h 19.0 
+1398 2.6 -36.5 h 64.8 
+1399 -12.9 -46.7 h 1.9 
+1400 7.2 -75.4 h 4.0 
+1401 0.5 -50.1 h 17.7 
+1402 15.4 -47.8 h 16.3 
+1403 8.5 -51.7 h 12.4 
+1404 -5.2 -51.6 h 10.7 
+1405 -77.0 -17.5 h 141.6 
+1406 33.7 -87.4 h 1.9 
+1407 54.3 -41.4 h 82.3 
+1408 2.0 -27.2 h 78.6 
+1409 0.8 -18.4 h 56.8 
+1410 -92.0 -40.5 h 2.5 
+1411 17.5 -60.8 h 0.3 
+1412 2.2 -41.8 h 27.1 
+1413 -5.0 -61.2 h 1.6 
+1414 33.8 -58.3 h 0.5 
+1415 33.7 -54.6 h 12.4 
+1416 -7.0 -52.7 h 9.5 
+1417 -2.6 -53.1 h 27.3 
+1418 19.6 -62.1 h 1.7 
+1419 7.9 -67.8 h 0.6 
+1420 5.3 -49.3 h 0.1 
+1421 10.8 -70.5 h 2.7 
+1422 -0.4 -60.3 h 4.4 
+1423 3.0 -62.5 h 8.3 
+1424 -11.5 -54.1 h 6.7 
+1425 22.4 -52.5 h 19.1 
+1426 10.4 -45.3 h 63.3 
+1427 8.1 -82.7 h 10.0 
+1428 -3.3 -55.2 h 0.5 
+1429 15.6 -69.8 h 0.7 
+1430 -4.8 -49.9 h 6.1 
+1431 -12.5 -29.8 h 61.4 
+1432 29.7 -36.9 h 40.4 
+1433 18.6 -43.6 h 26.9 
+1434 31.7 -58.3 h 0.6 
+1435 16.6 -61.8 h 0.9 
+1436 19.3 -61.9 h 0.2 
+1437 1.7 -60.8 h 0.2 
+1438 15.5 -51.8 h 14.2 
+1439 13.3 -70.5 h 15.0 
+1440 7.9 -64.6 h 10.2 
+1441 4.1 -51.9 h 2.7 
+1442 -11.4 -65.5 h 3.5 
+1443 2.9 -45.8 h 24.8 
+1444 -2.3 -57.8 h 5.3 
+1445 -9.2 -25.2 h 17.0 
+1446 5.8 -49.7 h 13.0 
+1447 4.2 -57.1 h 21.7 
+1448 -1.2 -37.4 h 5.8 
+1449 12.1 -52.9 h 0.1 
+1450 2.9 -49.4 h 0.9 
+1451 49.3 -56.5 h 1.5 
+1452 6.3 -58.3 h 20.9 
+1453 -1.9 -47.3 h 8.4 
+1454 12.8 -55.3 h 20.1 
+1455 -1.5 3.7 h 229.4 
+1456 -13.3 -13.6 h 4.0 
+1457 -2.7 -1.9 h 2.2 
+1458 -14.2 20.6 h 10.7 
+1459 10.3 -24.7 h 4.6 
+1460 4.3 -10.1 h 1.1 
+1461 22.8 18.2 h 20.6 
+1462 1.7 28.0 h 2.2 
+1463 15.9 -0.9 h 6.9 
+1464 -2.8 22.5 h 0.6 
+1465 2.6 -0.9 h 1.1 
+1466 -4.9 -8.2 h 18.3 
+1467 -3.6 22.9 h 6.3 
+1468 -5.1 15.9 h 4.7 
+1469 0.0 -0.2 h 13.1 
+1470 1.7 -5.7 h 4.4 
+1471 -1.5 2.1 h 9.3 
+1472 -0.3 -1.9 h 18.8 
+1473 2.9 1.4 h 9.5 
+1474 2.7 -6.6 h 0.5 
+1475 -5.5 19.1 h 6.4 
+1476 -0.0 -3.7 h 13.5 
+1477 2.9 -4.3 h 9.4 
+1478 10.0 -9.0 h 1.6 
+1479 10.9 -5.1 h 3.8 
+1480 -0.1 2.7 h 6.6 
+1481 -4.1 1.9 h 6.6 
+1482 9.1 1.9 h 8.3 
+1483 9.0 10.6 h 3.3 
+1484 -11.6 5.6 h 1.4 
+1485 -11.9 26.8 h 0.6 
+1486 1.5 2.1 h 12.9 
+1487 1.8 -5.6 h 13.4 
+1488 19.5 1.0 h 3.1 
+1489 5.5 -1.8 h 5.8 
+1490 0.5 -7.8 h 5.9 
+1491 9.7 -4.1 h 2.8 
+1492 2.5 8.9 h 14.2 
+1493 12.5 -2.2 h 61.6 
+1494 -3.2 -12.6 h 0.4 
+1495 2.6 -0.8 h 30.4 
+1496 7.2 1.3 h 12.4 
+1497 2.9 1.1 h 4.5 
+1498 24.0 -11.8 h 3.6 
+1499 -26.3 -10.6 h 0.8 
+1500 25.9 18.0 h 1.5 
+1501 -13.6 30.3 h 0.1 
+1502 3.4 -16.6 h 1.1 
+1503 0.3 -6.6 h 7.6 
+1504 2.4 -4.4 h 3.9 
+1505 3.6 -1.0 h 11.6 
+1506 0.8 8.2 h 9.3 
+1507 -1.8 5.1 h 10.9 
+1508 7.9 2.0 h 3.7 
+1509 -11.6 -40.5 h 0.2 
+1510 3.9 13.3 h 1.6 
+1511 2.0 3.2 h 0.8 
+1512 24.1 -4.3 h 21.1 
+1513 -14.9 14.3 h 5.5 
+1514 3.4 2.7 h 8.9 
+1515 7.4 8.0 h 7.8 
+1516 2.9 0.3 h 2.4 
+1517 8.6 -8.3 h 2.9 
+1518 0.8 7.9 h 2.0 
+1519 5.3 -9.7 h 2.3 
+1520 -13.2 27.1 h 1.5 
+1521 4.0 -0.6 h 9.6 
+1522 4.5 7.7 h 4.6 
+1523 11.5 7.2 h 8.4 
+1524 6.4 -6.4 h 12.2 
+1525 -3.3 21.9 h 11.3 
+1526 6.1 23.9 h 5.0 
+1527 -3.1 26.9 h 19.8 
+1528 -6.5 29.4 h 4.2 
+1529 -0.6 4.9 h 8.3 
+1530 -3.2 -2.6 h 13.5 
+1531 -35.4 19.3 h 4.0 
+1532 4.9 5.7 h 5.5 
+1533 -1.8 -5.1 h 9.8 
+1534 8.4 -2.2 h 10.4 
+1535 2.6 -11.7 h 0.5 
+1536 -1.8 -9.4 h 1.5 
+1537 2.0 0.2 h 16.5 
+1538 0.1 16.7 h 7.7 
+1539 -7.6 8.1 h 9.9 
+1540 -8.8 0.9 h 1.0 
+1541 13.4 -6.0 h 9.3 
+1542 0.4 3.5 h 2.3 
+1543 5.6 23.0 h 11.4 
+1544 3.7 -7.2 h 13.6 
+1545 -23.6 17.7 h 0.5 
+1546 -3.9 13.4 h 0.7 
+1547 -3.1 -10.1 h 10.5 
+1548 5.0 -0.2 h 29.1 
+1549 6.5 17.6 h 5.1 
+1550 10.3 3.2 h 4.5 
+1551 14.1 -11.2 h 0.8 
+1552 3.7 -1.5 h 6.2 
+1553 4.5 27.0 h 0.8 
+1554 -3.3 -4.3 h 64.4 
+1555 0.6 -4.9 h 7.0 
+1556 8.0 -6.0 h 74.8 
+1557 4.1 -1.0 h 4.1 
+1558 58.6 -3.1 h 4.3 
+1559 -12.0 -13.9 h 5.3 
+1560 -295.5 15.4 h 10.7 
+1561 -36.4 -12.1 h 246.1 
+1562 -18.7 11.6 h 2.1 
+1563 17.8 28.5 h 1.2 
+1564 8.0 5.4 h 8.1 
+1565 -13.7 28.9 h 0.9 
+1566 0.3 -3.9 h 6.0 
+1567 5.2 21.5 h 1.4 
+1568 7.3 -0.4 h 5.2 
+1569 22.5 24.4 h 0.3 
+1570 0.6 -8.0 h 13.5 
+1571 2.7 5.4 h 21.3 
+1572 -5.0 23.3 h 0.3 
+1573 5.7 -10.0 h 2.8 
+1574 -0.6 -4.0 h 3.8 
+1575 6.7 21.1 h 13.8 
+1576 12.8 4.9 h 2.6 
+1577 -2.5 -12.9 h 0.9 
+1578 -7.5 -0.9 h 12.8 
+1579 4.8 29.0 h 13.7 
+1580 19.2 -6.0 h 1.5 
+1581 -0.6 5.5 h 5.2 
+1582 -3.8 4.8 h 0.6 
+1583 -0.9 21.5 h 2.7 
+1584 -0.1 29.1 h 0.6 
+1585 -3.6 -5.7 h 5.2 
+1586 -2.2 -11.4 h 3.8 
+1587 8.1 17.4 h 4.8 
+1588 9.3 -4.6 h 3.6 
+1589 5.8 25.6 h 1.0 
+1590 18.9 0.2 h 8.8 
+1591 11.7 3.0 h 11.9 
+1592 3.6 -9.6 h 13.7 
+1593 -5.9 -9.4 h 2.2 
+1594 -3.3 -0.4 h 12.8 
+1595 10.8 -7.8 h 6.6 
+1596 9.4 -8.9 h 3.2 
+1597 11.6 -0.6 h 3.0 
+1598 -19.2 4.1 h 10.1 
+1599 18.3 13.5 h 2.7 
+1600 -9.2 -0.6 h 8.2 
+1601 6.0 -9.5 h 5.1 
+1602 5.9 -9.5 h 20.9 
+1603 9.0 -8.5 h 10.3 
+1604 4.1 27.3 h 0.1 
+1605 13.6 -5.0 h 6.3 
+1606 5.9 -7.1 h 9.3 
+1607 0.3 -5.8 h 0.3 
+1608 1.5 4.6 h 7.3 
+1609 20.0 12.9 h 0.5 
+1610 4.8 3.5 h 9.2 
+1611 10.8 20.6 h 6.1 
+1612 8.4 8.4 h 2.9 
+1613 4.5 -65.8 h 0.9 
+1614 12.9 -53.6 h 9.7 
+1615 4.2 -64.1 h 0.3 
+1616 2.4 -54.9 h 0.1 
+1617 -7.1 -68.5 h 0.6 
+1618 -6.3 -56.8 h 20.2 
+1619 3.3 -45.7 h 20.8 
+1620 8.3 -47.0 h 24.6 
+1621 -12.5 -37.6 h 10.3 
+1622 2.5 -59.5 h 0.8 
+1623 -44.4 -87.8 h 0.0 
+1624 -4.0 -54.8 h 18.9 
+1625 36.5 -76.2 h 3.8 
+1626 5.6 -40.8 h 11.2 
+1627 2.0 -43.2 h 2.4 
+1628 -3.0 -57.3 h 0.6 
+1629 6.7 -69.7 h 4.0 
+1630 7.2 -76.4 h 3.6 
+1631 -18.4 -90.2 h 0.4 
+1632 -16.0 -82.9 h 16.2 
+1633 -3.6 -61.0 h 0.6 
+1634 19.1 -82.9 h 2.0 
+1635 13.8 -48.5 h 1.6 
+1636 8.2 -101.8 h 0.8 
+1637 14.2 -56.8 h 10.9 
+1638 14.4 -48.4 h 24.3 
+1639 -1.0 -48.8 h 29.1 
+1640 -17.4 -59.4 h 8.6 
+1641 0.7 -48.6 h 41.9 
+1642 14.5 -47.9 h 0.5 
+1643 -21.6 -56.3 h 6.7 
+1644 -5.8 -63.2 h 3.7 
+1645 -8.2 -47.1 h 18.3 
+1646 10.5 -55.2 h 22.5 
+1647 -3.8 -55.9 h 35.4 
+1648 7.6 -82.2 h 1.1 
+1649 -8.7 85.0 h 1.2 
+1650 -1.5 91.4 h 0.5 
+1651 -25.1 81.8 h 0.2 
+1652 -24.3 84.1 h 1.2 
+1653 -11.9 70.3 h 21.5 
+1654 -65.6 49.8 h 5.8 
+1655 -27.0 88.4 h 0.0 
+1656 -9.6 75.5 h 8.9 
+1657 -12.8 94.8 h 1.2 
+1658 6.1 90.3 h 0.9 
+1659 -8.9 78.9 h 1.7 
+1660 -10.9 83.9 h 0.4 
+1661 -13.3 87.4 h 1.3 
+1662 -31.4 68.0 h 13.4 
+1663 16.4 -5.4 h 2.4 
+1664 0.4 -11.0 h 12.0 
+1665 12.4 -3.8 h 9.1 
+1666 5.5 -1.7 h 1.9 
+1667 -5.6 7.5 h 5.2 
+1668 7.4 -13.4 h 1.2 
+1669 -7.2 4.1 h 1.8 
+1670 5.1 0.1 h 9.9 
+1671 -15.9 -1.7 h 0.8 
+1672 4.6 -7.6 h 9.4 
+1673 10.9 -2.9 h 2.4 
+1674 10.0 -6.8 h 22.4 
+1675 -0.3 -6.5 h 15.8 
+1676 -1.4 5.3 h 0.4 
+1677 18.4 -4.3 h 3.4 
+1678 4.8 26.2 h 9.0 
+1679 2.5 -9.8 h 3.7 
+1680 4.8 16.8 h 9.2 
+1681 -1.7 -9.9 h 10.7 
+1682 1.9 -11.4 h 4.6 
+1683 2.4 -7.2 h 1.0 
+1684 3.8 0.9 h 5.8 
+1685 -10.0 -73.5 h 2.7 
+1686 -5.0 -51.0 h 19.7 
+1687 5.4 26.4 h 55.4 
+1688 2.3 78.2 h 4.9 
+1689 -15.2 92.2 h 1.3 
+1690 -19.2 81.0 h 5.0 
+1691 1.6 53.9 h 28.3 
+1692 -46.7 62.9 h 2.2 
+1693 12.1 88.7 h 0.2 
+1694 29.5 42.4 h 46.5 
+1695 -2.8 31.1 h 50.1 
+1696 -15.0 90.0 h 4.9 
+1697 -5.1 46.7 h 36.1 
+1698 -4.9 71.0 h 61.4 
+1699 -14.6 96.7 h 1.0 
+1700 -32.7 96.9 h 10.8 
+1701 10.0 -40.2 h 10.5 
+1702 6.0 -51.8 h 0.3 
+1703 9.1 -59.3 h 4.9 
+1704 4.5 -11.7 h 3.3 
+1705 -7.0 22.9 h 17.4 
+1706 4.7 -3.8 h 7.8 
+1707 9.5 -9.1 h 3.0 
+1708 35.8 25.5 h 1.5 
+1709 29.1 11.1 h 1.0 
+1710 -0.2 -2.0 h 40.6 
+1711 -1.2 -9.3 h 2.8 
+1712 -5.4 -7.7 h 13.4 
+1713 9.9 -10.7 h 7.7 
+1714 8.3 -9.9 h 13.2 
+1715 -1.2 -3.4 h 6.8 
+1716 3.1 0.9 h 5.2 
+1717 5.0 -10.2 h 4.3 
+1718 5.0 4.2 h 4.2 
+1719 -10.5 4.8 h 24.7 
+1720 1.6 -1.6 h 1.0 
+1721 13.4 -1.6 h 21.6 
+1722 3.7 -2.2 h 1.7 
+1723 1.5 -6.5 h 2.9 
+1724 -5.6 24.5 h 5.1 
+1725 -2.8 -12.8 h 4.9 
+1726 8.8 -0.8 h 14.3 
+1727 0.1 4.1 h 11.3 
+1728 6.8 -1.5 h 10.4 
+1729 11.5 17.8 h 1.9 
+1730 -26.3 -10.6 h 0.2 
+1731 -0.1 6.9 h 4.6 
+1732 5.7 23.3 h 0.1 
+1733 29.0 12.7 h 0.2 
+1734 37.4 -11.5 h 57.7 
+1735 -9.0 63.3 h 53.8 
+1736 1.6 11.6 h 1.6 
+1737 -14.8 -64.6 h 2.1 
+1738 21.3 -77.5 h 0.5 
+1739 36.2 -52.2 h 0.7 
diff --git a/examples/platforms/nancy.xml b/examples/platforms/nancy.xml
new file mode 100644 (file)
index 0000000..f21a9b1
--- /dev/null
@@ -0,0 +1,106 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+
+<AS id="AS_nancy" routing="RuleBased" >
+       <AS id="AS_graphene" routing="RuleBased" >
+               <cluster id="AS_sgraphene1" prefix="graphene-" suffix=".nancy.grid5000.fr"
+                       radical="1-39" power="16.673E9" bw="1.25E8" lat="1.0E-4"
+                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+               <cluster id="AS_sgraphene2" prefix="graphene-" suffix=".nancy.grid5000.fr"
+                       radical="40-74" power="16.673E9" bw="1.25E8" lat="1.0E-4"
+                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+               <cluster id="AS_sgraphene3" prefix="graphene-" suffix=".nancy.grid5000.fr"
+                       radical="75-104" power="16.673E9" bw="1.25E8" lat="1.0E-4"
+                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+               <cluster id="AS_sgraphene4" prefix="graphene-" suffix=".nancy.grid5000.fr"
+                       radical="105-144" power="16.673E9" bw="1.25E8" lat="1.0E-4"
+                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+
+               <AS id="gw_AS_graphene" routing="Full">
+                       <router id="graphene-AS_graphene_router.nancy.grid5000.fr"/>
+               </AS>
+               <link id="switch-graphene" bandwidth="1250000000" latency="5E-4"/>
+
+               <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                gw_src="graphene-AS_$1src_router.nancy.grid5000.fr"
+                gw_dst="graphene-AS_$1dst_router.nancy.grid5000.fr">
+                       <link_ctn id="switch-graphene"/>
+               </ASroute>
+               <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                gw_src="graphene-AS_$1src_router.nancy.grid5000.fr"
+                gw_dst="graphene-AS_graphene_router.nancy.grid5000.fr">
+                       <link_ctn id="switch-graphene"/>
+               </ASroute>
+               <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                gw_src="graphene-AS_graphene_router.nancy.grid5000.fr"
+                gw_dst="graphene-AS_$1dst_router.nancy.grid5000.fr">
+                       <link_ctn id="switch-graphene"/>
+               </ASroute>
+       </AS>
+       <link   id="link_graphene" bandwidth="1.25E9" latency="1.0E-4"/>
+
+       <AS id="AS_griffon" routing="RuleBased" >
+               <cluster id="AS_sgriffon1" prefix="griffon-" suffix=".nancy.grid5000.fr"
+                       radical="1-29;58-60" power="20.678E9" bw="1.25E8" lat="1.0E-4"
+                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+               <cluster id="AS_sgriffon2" prefix="griffon-" suffix=".nancy.grid5000.fr"
+                       radical="30-57" power="20.678E9" bw="1.25E8" lat="1.0E-4"
+                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+               <cluster id="AS_sgriffon3" prefix="griffon-" suffix=".nancy.grid5000.fr"
+                       radical="61-92" power="20.678E9" bw="1.25E8" lat="1.0E-4"
+                       bb_bw="1.25E9" bb_lat="1.0E-4"></cluster>
+
+               <AS id="gw_AS_griffon" routing="Full">
+                       <router id="griffon-AS_griffon_router.nancy.grid5000.fr"/>
+               </AS>
+               <link id="switch-griffon" bandwidth="1250000000" latency="5E-4"/>
+
+               <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+                gw_src="griffon-AS_$1src_router.nancy.grid5000.fr"
+                gw_dst="griffon-AS_$1dst_router.nancy.grid5000.fr">
+                       <link_ctn id="switch-griffon"/>
+               </ASroute>
+               <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+                gw_src="griffon-AS_$1src_router.nancy.grid5000.fr"
+                gw_dst="griffon-AS_griffon_router.nancy.grid5000.fr">
+                       <link_ctn id="switch-griffon"/>
+               </ASroute>
+               <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+                gw_src="griffon-AS_griffon_router.nancy.grid5000.fr"
+                gw_dst="griffon-AS_$1dst_router.nancy.grid5000.fr">
+                       <link_ctn id="switch-griffon"/>
+               </ASroute>
+       </AS>
+       <link   id="link_griffon" bandwidth="1.25E9" latency="1.0E-4"/>
+
+       <AS id="gw_AS_nancy" routing="Full">
+               <router id="gw_nancy"/>
+       </AS>
+       <link   id="link_gw_nancy" bandwidth="1.25E9" latency="1.0E-4"/>
+
+       <ASroute src="^AS_(.*)$" dst="^AS_(.*)$"
+               gw_src="$1src-AS_$1src_router.nancy.grid5000.fr"
+               gw_dst="$1dst-AS_$1dst_router.nancy.grid5000.fr"
+               symmetrical="YES">
+                       <link_ctn id="link_$1src"/>
+                       <link_ctn id="link_$1dst"/>
+       </ASroute>
+
+       <ASroute src="^AS_(.*)$" dst="^gw_AS_(.*)$"
+               gw_src="$1src-AS_$1src_router.nancy.grid5000.fr"
+               gw_dst="gw_$1dst"
+               symmetrical="NO">
+                       <link_ctn id="link_$1src"/>
+       </ASroute>
+
+       <ASroute src="^gw_AS_(.*)$" dst="^AS_(.*)$"
+               gw_src="gw_$1src"
+               gw_dst="$1dst-AS_$1dst_router.nancy.grid5000.fr"
+               symmetrical="NO">
+                       <link_ctn id="link_$1dst"/>
+       </ASroute>
+
+</AS>
+
+</platform>
index 08d324e..0890665 100644 (file)
@@ -80,7 +80,6 @@ static double finish_on_at(SD_task_t task, SD_workstation_t workstation)
   SD_task_t parent, grand_parent;
   xbt_dynar_t parents, grand_parents;
 
-  int grand_parent_nworkstations;
   SD_workstation_t *grand_parent_workstation_list;
 
   parents = SD_task_get_parents(task);
@@ -100,8 +99,6 @@ static double finish_on_at(SD_task_t task, SD_workstation_t workstation)
         }
         xbt_dynar_get_cpy(grand_parents, 0, &grand_parent);
 
-        grand_parent_nworkstations =
-            SD_task_get_workstation_count(grand_parent);
         grand_parent_workstation_list =
             SD_task_get_workstation_list(grand_parent);
         /* Estimate the redistribution time from this parent */
@@ -236,7 +233,7 @@ static void output_xml(FILE * out, xbt_dynar_t dax)
 
 int main(int argc, char **argv)
 {
-  unsigned int cursor, selected_idx = 0;
+  unsigned int cursor;
   double finish_time, min_finish_time = -1.0;
   SD_task_t task, selected_task = NULL;
   xbt_dynar_t ready_tasks;
@@ -314,7 +311,6 @@ int main(int argc, char **argv)
         min_finish_time = finish_time;
         selected_task = task;
         selected_workstation = workstation;
-        selected_idx = cursor;
       }
     }
 
index 1c97865..7a76692 100644 (file)
@@ -35,6 +35,7 @@ XBT_PUBLIC(void) TRACE_platform_graph_export_graphviz (xbt_graph_t g, const char
  */
 /* for host variables */
 XBT_PUBLIC(void) TRACE_host_variable_declare (const char *var);
+XBT_PUBLIC(void) TRACE_host_variable_declare_with_color (const char *var, const char *color);
 XBT_PUBLIC(void) TRACE_host_variable_set (const char *host, const char *variable, double value);
 XBT_PUBLIC(void) TRACE_host_variable_add (const char *host, const char *variable, double value);
 XBT_PUBLIC(void) TRACE_host_variable_sub (const char *host, const char *variable, double value);
@@ -44,6 +45,7 @@ XBT_PUBLIC(void) TRACE_host_variable_sub_with_time (double time, const char *hos
 
 /* for link variables */
 XBT_PUBLIC(void) TRACE_link_variable_declare (const char *var);
+XBT_PUBLIC(void) TRACE_link_variable_declare_with_color (const char *var, const char *color);
 XBT_PUBLIC(void) TRACE_link_variable_set (const char *link, const char *variable, double value);
 XBT_PUBLIC(void) TRACE_link_variable_add (const char *link, const char *variable, double value);
 XBT_PUBLIC(void) TRACE_link_variable_sub (const char *link, const char *variable, double value);
@@ -76,6 +78,7 @@ XBT_PUBLIC(void) TRACE_link_srcdst_variable_sub_with_time (double time, const ch
 #define TRACE_platform_graph_export_graphviz(g,filename)
 
 #define TRACE_host_variable_declare(var)
+#define TRACE_host_variable_declare_with_color(var,color)
 #define TRACE_host_variable_set(host,var,value)
 #define TRACE_host_variable_add(host,var,value)
 #define TRACE_host_variable_sub(host,var,value)
@@ -84,6 +87,7 @@ XBT_PUBLIC(void) TRACE_link_srcdst_variable_sub_with_time (double time, const ch
 #define TRACE_host_variable_sub_with_time(time,host,var,value)
 
 #define TRACE_link_variable_declare(var)
+#define TRACE_link_variable_declare_with_color(var,color)
 #define TRACE_link_variable_set(link,var,value)
 #define TRACE_link_variable_add(link,var,value)
 #define TRACE_link_variable_sub(link,var,value)
index 210efb7..67418d1 100644 (file)
@@ -69,13 +69,7 @@ XBT_PUBLIC(xbt_dynar_t) xbt_dynar_new_sync(const unsigned long elm_size,
 XBT_INLINE XBT_PUBLIC(void) xbt_dynar_free(xbt_dynar_t * dynar);
 XBT_PUBLIC(void) xbt_dynar_free_voidp(void *dynar);
 XBT_PUBLIC(void) xbt_dynar_free_container(xbt_dynar_t * dynar);
-
-XBT_INLINE XBT_PUBLIC(unsigned long) xbt_dynar_length(const xbt_dynar_t
-                                                      dynar);
-XBT_INLINE XBT_PUBLIC(int) xbt_dynar_is_empty(const xbt_dynar_t dynar);
-XBT_PUBLIC(void) xbt_dynar_reset(xbt_dynar_t const dynar);
 XBT_PUBLIC(void) xbt_dynar_shrink(xbt_dynar_t dynar, int empty_slots);
-
 XBT_PUBLIC(void) xbt_dynar_dump(xbt_dynar_t dynar);
 
 /** @} */
@@ -108,6 +102,19 @@ XBT_INLINE XBT_PUBLIC(int) xbt_dynar_compare(xbt_dynar_t d1, xbt_dynar_t d2,
                                        int(*compar)(const void *, const void *));
 XBT_INLINE XBT_PUBLIC(void *) xbt_dynar_to_array (xbt_dynar_t dynar);
 
+/** @} */
+/** @defgroup XBT_dynar_misc Dynar miscellaneous functions
+ *  @ingroup XBT_dynar
+ *
+ *  @{
+ */
+
+XBT_INLINE XBT_PUBLIC(unsigned long) xbt_dynar_length(const xbt_dynar_t
+                                                      dynar);
+XBT_INLINE XBT_PUBLIC(int) xbt_dynar_is_empty(const xbt_dynar_t dynar);
+XBT_PUBLIC(void) xbt_dynar_reset(xbt_dynar_t const dynar);
+
+
 /** @} */
 /** @defgroup XBT_dynar_perl Perl-like use of dynars
  *  @ingroup XBT_dynar
index ae391fa..50ef63e 100644 (file)
@@ -64,7 +64,7 @@ SG_BEGIN_DECL()
                                   ),
 #  define MAYDAY_CATCH(e)   printf("%d %s:%d Catched '%s'\n",           \
                                    (*xbt_getpid)(),__FILE__,__LINE__,  \
-                                   e.msg                                \
+                                   (e).msg                              \
                                  ),
 #else
 #  define MAYDAY_SAVE(m)
@@ -385,6 +385,17 @@ extern void __xbt_ex_terminate_default(xbt_ex_t * e);
  *  @hideinitializer
  */
 #define CATCH(e) \
+  DO_CATCH((e) = XBT_EX_T_CPLUSPLUSCAST __xbt_running_ctx_fetch()->exception)
+
+/** @brief like CATCH(e) but without argument
+ *  @hideinitializer
+ *
+ *  Useful if you only want to rethrow the exception caught, and do not want to
+ *  bother with an unused variable.
+ */
+#define CATCH_ANONYMOUS DO_CATCH(0)
+
+#define DO_CATCH(_xbt_do_catch_set_e) \
             else { \
             } \
             if (!(__ex_cleanup)) \
@@ -398,7 +409,8 @@ extern void __xbt_ex_terminate_default(xbt_ex_t * e);
         __xbt_ex_ctx_ptr->ctx_mctx = __ex_mctx_en; \
     } \
     if (   !(__xbt_running_ctx_fetch()->ctx_caught) \
-        || ((e) = XBT_EX_T_CPLUSPLUSCAST __xbt_running_ctx_fetch()->exception, MAYDAY_CATCH(e) 0)) { \
+        || ((void)(_xbt_do_catch_set_e),                             \
+            MAYDAY_CATCH(__xbt_running_ctx_fetch()->exception) 0)) {    \
     } \
     else
 
index eeabf72..9364c2e 100644 (file)
@@ -176,7 +176,7 @@ void amok_bw_test(gras_socket_t peer,
   TRY {
     gras_msg_rpccall(peer, 15, "BW handshake", &request, &request_ack);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     RETHROWF("Error encountered while sending the BW request: %s");
   }
   measIn = gras_socket_meas_accept(measMasterIn);
@@ -186,7 +186,7 @@ void amok_bw_test(gras_socket_t peer,
                                      request_ack->peer.port,
                                      request->buf_size, 1);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     RETHROWF
         ("Error encountered while opening the measurement socket to %s:%d for BW test: %s",
          gras_socket_peer_name(peer), request_ack->peer.port);
@@ -244,7 +244,8 @@ void amok_bw_test(gras_socket_t peer,
                             request->msg_amount);
       XBT_DEBUG("Data sent. Wait ACK");
       gras_socket_meas_recv(measIn, 120, 1, 1);
-    } CATCH(e) {
+    }
+    CATCH_ANONYMOUS {
       gras_socket_close(measOut);
       gras_socket_close(measMasterIn);
       gras_socket_close(measIn);
@@ -328,7 +329,7 @@ int amok_bw_cb_bw_handshake(gras_msg_cb_ctx_t ctx, void *payload)
   TRY {
     gras_msg_rpcreturn(60, ctx, &answer);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     gras_socket_close(measMasterIn);
     /* FIXME: tell error to remote */
     RETHROWF("Error encountered while sending the answer: %s");
@@ -341,7 +342,7 @@ int amok_bw_cb_bw_handshake(gras_msg_cb_ctx_t ctx, void *payload)
                                      request->peer.port,
                                      request->buf_size, 1);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     RETHROWF
         ("Error encountered while opening a measurement socket back to %s:%d : %s",
          gras_socket_peer_name(expeditor), request->peer.port);
@@ -355,7 +356,7 @@ int amok_bw_cb_bw_handshake(gras_msg_cb_ctx_t ctx, void *payload)
          answer->buf_size, answer->msg_size, answer->msg_amount,
          answer->peer.port);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     gras_socket_close(measMasterIn);
     gras_socket_close(measIn);
     gras_socket_close(measOut);
@@ -376,7 +377,8 @@ int amok_bw_cb_bw_handshake(gras_msg_cb_ctx_t ctx, void *payload)
       gras_socket_meas_recv(measIn, 120, request->msg_size,
                             request->msg_amount);
       gras_socket_meas_send(measOut, 120, 1, 1);
-    } CATCH(e) {
+    }
+    CATCH_ANONYMOUS {
       gras_socket_close(measMasterIn);
       gras_socket_close(measIn);
       gras_socket_close(measOut);
index 9b94199..78e022e 100644 (file)
@@ -294,7 +294,7 @@ static int amok_bw_cb_sat_begin(gras_msg_cb_ctx_t ctx, void *payload)
     meas = gras_socket_meas_accept(measMaster);
     XBT_DEBUG("saturation handshake answered");
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     gras_socket_close(measMaster);
     RETHROWF("Error during saturation handshake: %s");
   }
@@ -330,16 +330,14 @@ static int amok_bw_cb_sat_begin(gras_msg_cb_ctx_t ctx, void *payload)
 void amok_bw_saturate_stop(const char *from_name, unsigned int from_port,
                            /*out */ double *time, double *bw)
 {
-  xbt_ex_t e;
-
   gras_socket_t sock = gras_socket_client(from_name, from_port);
   bw_res_t answer;
   XBT_VERB("Ask %s:%d to stop the saturation", from_name, from_port);
   TRY {
     gras_msg_rpccall(sock, 60, "amok_bw_sat stop", NULL, &answer);
-  } CATCH(e) {
-    RETHROWF("Cannot ask %s:%d to stop saturation: %s", from_name,
-             from_port);
+  }
+  CATCH_ANONYMOUS {
+    RETHROWF("Cannot ask %s:%d to stop saturation: %s", from_name, from_port);
   }
   gras_socket_close(sock);
   if (time)
index f5d1d13..4584b19 100644 (file)
@@ -87,7 +87,8 @@ gras_cbps_v_push(gras_cbps_t ps,
 
   TRY {
     varstack = xbt_dict_get(ps->space, name);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category != mismatch_error)
       RETHROW;
 
@@ -128,7 +129,8 @@ gras_cbps_v_pop(gras_cbps_t ps,
   XBT_DEBUG("pop(%s)", name);
   TRY {
     varstack = xbt_dict_get(ps->space, name);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category != mismatch_error)
       RETHROW;
 
index 1a10ad2..1a7052d 100644 (file)
@@ -39,7 +39,7 @@ void gras_ddt_freev(void *ddt);
  * Descriptions of all known architectures *
  *******************************************/
 
-#define gras_arch_count 11
+#define gras_arch_count 12
 typedef enum {
   gras_ddt_scalar_char = 0,
   gras_ddt_scalar_short = 1,
index cb02afe..e329d76 100644 (file)
@@ -18,18 +18,25 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(gras_ddt_convert, gras_ddt,
 /***
  *** Table of all known architectures:
  ***
-  l_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/8:) gras_arch=0; gras_arch_name=little32;;
-  l_C:1/1:_I:2/2:4/4:4/4:8/4:_P:4/4:4/4:_D:4/4:8/4:) gras_arch=1; gras_arch_name=little32_4;;
-
-  l_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/8:) gras_arch=2; gras_arch_name=little64;;
-
-  B_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/8:) gras_arch=3; gras_arch_name=big32;;
-  B_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/4:) gras_arch=4; gras_arch_name=big32_8_4;;
-  B_C:1/1:_I:2/2:4/4:4/4:8/4:_P:4/4:4/4:_D:4/4:8/4:) gras_arch=5; gras_arch_name=big32_4;;
-  B_C:1/1:_I:2/2:4/2:4/2:8/2:_P:4/2:4/2:_D:4/2:8/2:) gras_arch=6; gras_arch_name=big32_2;;
-
-  B_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/8:) gras_arch=7; gras_arch_name=big64;;
-
+l_C:1/1:_I:2/1:4/1:4/1:8/1:_P:4/1:4/1:_D:4/1:8/1: #gras_arch=0;  gras_size=32; gras_arch_name=little32_1;
+l_C:1/1:_I:2/2:4/2:4/2:8/2:_P:4/2:4/2:_D:4/2:8/2: #gras_arch=1;  gras_size=32; gras_arch_name=little32_2;
+l_C:1/1:_I:2/2:4/4:4/4:8/4:_P:4/4:4/4:_D:4/4:8/4: #gras_arch=2;  gras_size=32; gras_arch_name=little32_4;
+l_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/8: #gras_arch=3;  gras_size=32; gras_arch_name=little32_8;
+l_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/8: #gras_arch=4;  gras_size=64; gras_arch_name=little64;
+l_C:1/1:_I:2/2:4/4:4/4:8/8:_P:8/8:8/8:_D:4/4:8/8: #gras_arch=5;  gras_size=64; gras_arch_name=little64_2;
+
+B_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/8: #gras_arch=6;  gras_size=32; gras_arch_name=big32_8;
+B_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/4: #gras_arch=7;  gras_size=32; gras_arch_name=big32_8_4;
+B_C:1/1:_I:2/2:4/4:4/4:8/4:_P:4/4:4/4:_D:4/4:8/4: #gras_arch=8;  gras_size=32; gras_arch_name=big32_4;
+B_C:1/1:_I:2/2:4/2:4/2:8/2:_P:4/2:4/2:_D:4/2:8/2: #gras_arch=9;  gras_size=32; gras_arch_name=big32_2;
+B_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/8: #gras_arch=10; gras_size=64; gras_arch_name=big64;
+B_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/4: #gras_arch=11; gras_size=64; gras_arch_name=big64_8_4;
+
+  PLEASE DO NOT MESS WITH THESE HARDCODED VALUES
+  
+  
+  Grep GRAS_THISARCH in buildtools/Cmake/CompleteInFiles.cmake for details
+  
  ***/
 
 const gras_arch_desc_t gras_arches[gras_arch_count] = {
@@ -49,6 +56,9 @@ const gras_arch_desc_t gras_arches[gras_arch_count] = {
   {"little64", 0, {1, 2, 4, 8, 8, 8, 8, 4, 8},  /* alpha, ia64 */
    {1, 2, 4, 8, 8, 8, 8, 4, 8}},
 
+  {"little64_2", 0, {1, 2, 4, 4, 8, 8, 8, 4, 8},  /* win64 */
+   {1, 2, 4, 4, 8, 8, 8, 4, 8}},
+
   {"big32_8", 1, {1, 2, 4, 4, 8, 4, 4, 4, 8},
    {1, 2, 4, 4, 8, 4, 4, 4, 8}},
 
index 51f37af..05eb79e 100644 (file)
@@ -55,7 +55,8 @@ gras_datadesc_type_t gras_datadesc_by_name_or_null(const char *name)
 
   TRY {
     res = gras_datadesc_by_name(name);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     res = NULL;
     xbt_ex_free(e);
   }
@@ -75,7 +76,8 @@ gras_datadesc_type_t gras_datadesc_by_name(const char *name)
         (gras_datadesc_type_t) xbt_set_get_by_name(gras_datadesc_set_local,
                                                    name);
     found = 1;
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category != not_found_error)
       RETHROW;
     xbt_ex_free(e);
@@ -98,7 +100,8 @@ gras_datadesc_type_t gras_datadesc_by_id(long int code)
     res =
         (gras_datadesc_type_t) xbt_set_get_by_id(gras_datadesc_set_local,
                                                  code);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category != not_found_error)
       RETHROW;
     xbt_ex_free(e);
index 8069511..60b1943 100644 (file)
@@ -385,7 +385,6 @@ gras_datadesc_memcpy_rec(gras_cbps_t state,
  */
 int gras_datadesc_memcpy(gras_datadesc_type_t type, void *src, void *dst)
 {
-  xbt_ex_t e;
   static gras_cbps_t state = NULL;
   static xbt_dict_t refs = NULL;        /* all references already sent */
   int size = 0;
@@ -403,10 +402,12 @@ int gras_datadesc_memcpy(gras_datadesc_type_t type, void *src, void *dst)
     size =
         gras_datadesc_memcpy_rec(state, refs, type, (char *) src,
                                  (char *) dst, 0, type->cycle);
-  } TRY_CLEANUP {
+  }
+  TRY_CLEANUP {
     xbt_dict_reset(refs);
     gras_cbps_reset(state);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROW;
   }
   return size;
@@ -630,8 +631,6 @@ gras_datadesc_send_rec(gras_socket_t sock,
 void gras_datadesc_send(gras_socket_t sock,
                         gras_datadesc_type_t type, void *src)
 {
-
-  xbt_ex_t e;
   static gras_cbps_t state = NULL;
   static xbt_dict_t refs = NULL;        /* all references already sent */
 
@@ -645,10 +644,12 @@ void gras_datadesc_send(gras_socket_t sock,
   TRY {
     gras_datadesc_send_rec(sock, state, refs, type, (char *) src,
                            type->cycle);
-  } TRY_CLEANUP {
+  }
+  TRY_CLEANUP {
     xbt_dict_reset(refs);
     gras_cbps_reset(state);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROW;
   }
 }
@@ -970,8 +971,6 @@ void
 gras_datadesc_recv(gras_socket_t sock,
                    gras_datadesc_type_t type, int r_arch, void *dst)
 {
-
-  xbt_ex_t e;
   static gras_cbps_t state = NULL;      /* callback persistent state */
   static xbt_dict_t refs = NULL;        /* all references already sent */
 
@@ -984,10 +983,12 @@ gras_datadesc_recv(gras_socket_t sock,
   TRY {
     gras_datadesc_recv_rec(sock, state, refs, type,
                            r_arch, NULL, 0, (char *) dst, -1, type->cycle);
-  } TRY_CLEANUP {
+  }
+  TRY_CLEANUP {
     xbt_dict_reset(refs);
     gras_cbps_reset(state);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROW;
   }
 }
index 2c2aef2..fbf04a7 100644 (file)
@@ -85,7 +85,8 @@ gras_msgtype_declare_ext(const char *name,
     msgtype =
         (gras_msgtype_t) xbt_set_get_by_name(_gras_msgtype_set, namev);
     found = 1;
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category != not_found_error) {
       xbt_free(namev);
       RETHROW;
@@ -182,7 +183,8 @@ gras_msgtype_t gras_msgtype_by_name_or_null(const char *name)
 
   TRY {
     res = gras_msgtype_by_namev(name, 0);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     res = NULL;
     xbt_ex_free(e);
   }
@@ -200,7 +202,8 @@ gras_msgtype_t gras_msgtype_by_namev(const char *name, short int version)
   TRY {
     res = (gras_msgtype_t) xbt_set_get_by_name(_gras_msgtype_set, namev);
     found = 1;
-  } CATCH(e) {
+  }
+  CATCH(e) {
     xbt_ex_free(e);
   }
   if (!found)
index 2905b0c..b0c9543 100644 (file)
@@ -50,7 +50,10 @@ void gras_msg_send_namev(gras_socket_t sock,
 void gras_msg_listener_awake(void);
 void gras_msg_listener_close_socket(int sd);
 
-#define GRAS_PROTOCOL_VERSION '\1';
+#define GRAS_PROTOCOL_VERSION '\2';
+/* The difference between GRAS_PROTOCOL_VERSION=\1 (in SimGrid 3.6.1) and \2 (afterward) is that 
+   the architectures were renumbered (GRAS_THISARCH were shifted by 1) to insert WIN64 near to WIN32. 
+   See commit 27cbb00affed384593925fc5af6d5533d0a7ef09 */
 
 
 #endif                          /* GRAS_MSG_INTERFACE_H */
index 5d5b48d..d395371 100644 (file)
@@ -117,7 +117,7 @@ void gras_msg_recv(gras_socket_t sock, gras_msg_t msg)
     gras_trp_recv(sock, &c_kind, 1);
     msg->kind = (e_gras_msg_kind_t) c_kind;
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     RETHROWF
         ("Exception caught while trying to get the message header: %s");
   }
@@ -155,7 +155,8 @@ void gras_msg_recv(gras_socket_t sock, gras_msg_t msg)
   TRY {
     msg->type =
         (gras_msgtype_t) xbt_set_get_by_name(_gras_msgtype_set, msg_name);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     /* FIXME: Survive unknown messages */
     if (e.category == not_found_error) {
       xbt_ex_free(e);
index 2036788..ef7e7cc 100644 (file)
@@ -38,7 +38,8 @@ static void gras_trp_plugin_new(const char *name, gras_trp_setup_t setup)
 
   TRY {
     setup(plug);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category == mismatch_error) {
       /* SG plugin raise mismatch when in RL mode (and vice versa) */
       free(plug->name);
@@ -187,8 +188,6 @@ gras_socket_t
 gras_socket_server_ext(unsigned short port,
                        unsigned long int buf_size, int measurement)
 {
-
-  xbt_ex_t e;
   gras_trp_plugin_t trp;
   gras_socket_t sock;
 
@@ -209,8 +208,8 @@ gras_socket_server_ext(unsigned short port,
     XBT_DEBUG("in=%c out=%c accept=%c",
            sock->incoming ? 'y' : 'n',
            sock->outgoing ? 'y' : 'n', sock->accepting ? 'y' : 'n');
-  } CATCH(e) {
-
+  }
+  CATCH_ANONYMOUS {
     free(sock);
     RETHROW;
   }
@@ -274,8 +273,6 @@ gras_socket_client_ext(const char *host,
                        unsigned short port,
                        unsigned long int buf_size, int measurement)
 {
-
-  xbt_ex_t e;
   gras_trp_plugin_t trp;
   gras_socket_t sock;
 
@@ -295,7 +292,8 @@ gras_socket_client_ext(const char *host,
     XBT_DEBUG("in=%c out=%c accept=%c",
            sock->incoming ? 'y' : 'n',
            sock->outgoing ? 'y' : 'n', sock->accepting ? 'y' : 'n');
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     free(sock);
     RETHROW;
   }
index f560472..de2085b 100644 (file)
@@ -89,7 +89,6 @@ void *gras_libdata_by_name_from_procdata(const char *name,
                                          gras_procdata_t * pd)
 {
   void *res = NULL;
-  xbt_ex_t e;
   if (xbt_set_length(pd->libdata) <
       xbt_dynar_length(_gras_procdata_fabrics)) {
     /* Damn, some new modules were added since procdata_init(). Amok? */
@@ -99,7 +98,7 @@ void *gras_libdata_by_name_from_procdata(const char *name,
   TRY {
     res = xbt_set_get_by_name(pd->libdata, name);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     RETHROWF("Cannot retrieve the libdata associated to %s: %s", name);
   }
   return res;
index 33adad5..503651b 100644 (file)
@@ -145,11 +145,9 @@ void gras_init(int *argc, char **argv)
 
 void gras_exit(void)
 {
-  gras_procdata_t *pd;
   XBT_INFO("Exiting GRAS");
   amok_exit();
   gras_moddata_leave();
-  pd = gras_procdata_get();
   gras_msg_listener_shutdown();
   gras_process_exit();
   if (--gras_running_process == 0) {
index 4601fb6..10e9b3a 100644 (file)
@@ -501,6 +501,9 @@ XBT_PUBLIC(void) parse_ns3_add_route(void);
 XBT_PUBLIC(void) parse_ns3_add_ASroute(void);
 XBT_PUBLIC(void) parse_ns3_add_cluster(void);
 XBT_PUBLIC(void) parse_ns3_end_platform(void);
+XBT_PUBLIC(void) create_ns3_topology(void);
+XBT_PUBLIC(double) ns3_get_link_latency(const void *link);
+XBT_PUBLIC(double) ns3_get_link_bandwidth(const void *link);
 
 #endif
 
index 1bd308f..fa2569b 100644 (file)
@@ -23,6 +23,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_config, instr, "Configuration");
 #define OPT_TRACING_FILENAME      "tracing/filename"
 #define OPT_TRACING_BUFFER        "tracing/buffer"
 #define OPT_TRACING_ONELINK_ONLY  "tracing/onelink_only"
+#define OPT_TRACING_DISABLE_DESTROY "tracing/disable_destroy"
 #define OPT_TRIVA_UNCAT_CONF      "triva/uncategorized"
 #define OPT_TRIVA_CAT_CONF        "triva/categorized"
 
@@ -36,6 +37,7 @@ static int trace_msg_task_enabled;
 static int trace_msg_process_enabled;
 static int trace_buffer;
 static int trace_onelink_only;
+static int trace_disable_destroy;
 
 static int trace_configured = 0;
 static int trace_active = 0;
@@ -54,6 +56,7 @@ static void TRACE_getopts(void)
   trace_msg_process_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_PROCESS);
   trace_buffer = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_BUFFER);
   trace_onelink_only = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_ONELINK_ONLY);
+  trace_disable_destroy = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_DISABLE_DESTROY);
 }
 
 int TRACE_start()
@@ -183,6 +186,11 @@ int TRACE_onelink_only (void)
   return trace_onelink_only && TRACE_is_enabled();
 }
 
+int TRACE_disable_destroy (void)
+{
+  return trace_disable_destroy && TRACE_is_enabled();
+}
+
 char *TRACE_get_filename(void)
 {
   return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_FILENAME);
@@ -278,6 +286,13 @@ void TRACE_global_init(int *argc, char **argv)
                    xbt_cfgelm_int, &default_onelink_only, 0, 1,
                    NULL, NULL);
 
+  /* disable destroy */
+  int default_disable_destroy = 0;
+  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_DISABLE_DESTROY,
+                   "Disable platform containers destruction.",
+                   xbt_cfgelm_int, &default_disable_destroy, 0, 1,
+                   NULL, NULL);
+
   /* Triva graph configuration for uncategorized tracing */
   char *default_triva_uncat_conf_file = xbt_strdup ("");
   xbt_cfg_register(&_surf_cfg_set, OPT_TRIVA_UNCAT_CONF,
@@ -365,6 +380,11 @@ void TRACE_help (int detailed)
       "  only the routes with one link are used to register the topology within an AS.\n"
       "  Routes among AS continue to be traced as usual.",
       detailed);
+  print_line (OPT_TRACING_DISABLE_DESTROY, "Disable platform containers destruction",
+      "  Disable the destruction of containers at the end of simulation. This can be"
+      "  used with simulators that have a different notion of time (different from"
+      "  the simulated time).",
+      detailed);
   print_line (OPT_TRIVA_UNCAT_CONF, "Generate graph configuration for Triva",
       "  This option can be used in all types of simulators build with SimGrid\n"
       "  to generate a uncategorized resource utilization graph to be used as\n"
@@ -505,9 +525,10 @@ void TRACE_generate_triva_cat_conf (void)
 #undef OPT_TRACING_UNCATEGORIZED
 #undef OPT_TRACING_MSG_TASK
 #undef OPT_TRACING_MSG_PROCESS
-#undef OPT_TRACING_MSG_VOLUME
 #undef OPT_TRACING_FILENAME
-#undef OPT_TRACING_PLATFORM_METHOD
+#undef OPT_TRACING_BUFFER
+#undef OPT_TRACING_ONELINK_ONLY
+#undef OPT_TRACING_DISABLE_DESTROY
 #undef OPT_TRIVA_UNCAT_CONF
 #undef OPT_TRIVA_CAT_CONF
 
index 936c5f5..fabcf00 100644 (file)
@@ -87,7 +87,8 @@ static void instr_user_variable(double time,
                          const char *variable,
                          const char *father_type,
                          double value,
-                         InstrUserVariable what)
+                         InstrUserVariable what,
+                         const char *color)
 {
   /* safe switch */
   if (!TRACE_is_enabled()) return;
@@ -100,7 +101,7 @@ static void instr_user_variable(double time,
 
   switch (what){
   case INSTR_US_DECLARE:
-    instr_new_user_variable_type (father_type, variable, NULL);
+    instr_new_user_variable_type (father_type, variable, color);
     break;
   case INSTR_US_SET:
   {
@@ -142,7 +143,7 @@ static void instr_user_srcdst_variable(double time,
   void *link;
   xbt_dynar_foreach (route, i, link) {
     char *link_name = ((link_CM02_t)link)->lmm_resource.generic_resource.name;
-    instr_user_variable (time, link_name, variable, father_type, value, what);
+    instr_user_variable (time, link_name, variable, father_type, value, what, NULL);
   }
 }
 
@@ -174,7 +175,12 @@ void TRACE_platform_graph_export_graphviz (xbt_graph_t g, const char *filename)
 /* for host variables */
 void TRACE_host_variable_declare (const char *var)
 {
-  instr_user_variable(0, NULL, var, "HOST", 0, INSTR_US_DECLARE);
+  instr_user_variable(0, NULL, var, "HOST", 0, INSTR_US_DECLARE, NULL);
+}
+
+void TRACE_host_variable_declare_with_color (const char *var, const char *color)
+{
+  instr_user_variable(0, NULL, var, "HOST", 0, INSTR_US_DECLARE, color);
 }
 
 void TRACE_host_variable_set (const char *host, const char *variable, double value)
@@ -194,23 +200,28 @@ void TRACE_host_variable_sub (const char *host, const char *variable, double val
 
 void TRACE_host_variable_set_with_time (double time, const char *host, const char *variable, double value)
 {
-  instr_user_variable(time, host, variable, "HOST", value, INSTR_US_SET);
+  instr_user_variable(time, host, variable, "HOST", value, INSTR_US_SET, NULL);
 }
 
 void TRACE_host_variable_add_with_time (double time, const char *host, const char *variable, double value)
 {
-  instr_user_variable(time, host, variable, "HOST", value, INSTR_US_ADD);
+  instr_user_variable(time, host, variable, "HOST", value, INSTR_US_ADD, NULL);
 }
 
 void TRACE_host_variable_sub_with_time (double time, const char *host, const char *variable, double value)
 {
-  instr_user_variable(time, host, variable, "HOST", value, INSTR_US_SUB);
+  instr_user_variable(time, host, variable, "HOST", value, INSTR_US_SUB, NULL);
 }
 
 /* for link variables */
 void TRACE_link_variable_declare (const char *var)
 {
-  instr_user_variable (0, NULL, var, "LINK", 0, INSTR_US_DECLARE);
+  instr_user_variable (0, NULL, var, "LINK", 0, INSTR_US_DECLARE, NULL);
+}
+
+void TRACE_link_variable_declare_with_color (const char *var, const char *color)
+{
+  instr_user_variable (0, NULL, var, "LINK", 0, INSTR_US_DECLARE, color);
 }
 
 void TRACE_link_variable_set (const char *link, const char *variable, double value)
@@ -230,17 +241,17 @@ void TRACE_link_variable_sub (const char *link, const char *variable, double val
 
 void TRACE_link_variable_set_with_time (double time, const char *link, const char *variable, double value)
 {
-  instr_user_variable (time, link, variable, "LINK", value, INSTR_US_SET);
+  instr_user_variable (time, link, variable, "LINK", value, INSTR_US_SET, NULL);
 }
 
 void TRACE_link_variable_add_with_time (double time, const char *link, const char *variable, double value)
 {
-  instr_user_variable (time, link, variable, "LINK", value, INSTR_US_ADD);
+  instr_user_variable (time, link, variable, "LINK", value, INSTR_US_ADD, NULL);
 }
 
 void TRACE_link_variable_sub_with_time (double time, const char *link, const char *variable, double value)
 {
-  instr_user_variable (time, link, variable, "LINK", value, INSTR_US_SUB);
+  instr_user_variable (time, link, variable, "LINK", value, INSTR_US_SUB, NULL);
 }
 
 /* for link variables, but with src and dst used for get_route */
index 1bc7133..3c1591c 100644 (file)
@@ -310,7 +310,10 @@ void destroyContainer (container_t container)
   TRACE_paje_dump_buffer(1);
 
   //trace my destruction
-  new_pajeDestroyContainer(container);
+  if (!TRACE_disable_destroy()){
+    //do not trace the container destruction if user requests
+    new_pajeDestroyContainer(container);
+  }
 
   //free
   xbt_free (container->name);
index c6960bc..842dc7f 100644 (file)
 
 #ifdef HAVE_TRACING
 
+/* Need to define function drand48 for Windows */
+#ifdef _WIN32
+#  define drand48() (rand()/(RAND_MAX + 1.0))
+#endif
+
 #define INSTR_DEFAULT_STR_SIZE 500
 
 #include "instr/instr.h"
@@ -159,6 +164,7 @@ int TRACE_msg_task_is_enabled(void);
 int TRACE_msg_process_is_enabled(void);
 int TRACE_buffer (void);
 int TRACE_onelink_only (void);
+int TRACE_disable_destroy (void);
 char *TRACE_get_filename(void);
 char *TRACE_get_triva_uncat_conf (void);
 char *TRACE_get_triva_cat_conf (void);
index 71c6cc4..71be0c0 100644 (file)
@@ -148,7 +148,9 @@ xbt_dynar_t SD_dotload_with_sched(const char *filename){
 xbt_dynar_t SD_dotload_generic(const char * filename)
 {
   xbt_assert(filename, "Unable to use a null file descriptor\n");
-  dag_dot =  agopen((char*)filename,Agstrictdirected,0);
+//dag_dot =  agopen((char*)filename,Agstrictdirected,0);
+  FILE *in_file = fopen(filename, "r");
+  dag_dot = agread(in_file, NIL(Agdisc_t *));
 
   result = xbt_dynar_new(sizeof(SD_task_t), dot_task_free);
   files = xbt_dict_new();
@@ -228,6 +230,7 @@ xbt_dynar_t SD_dotload_generic(const char * filename)
 
   /* Free previous copy of the files */
   xbt_dict_free(&files);
+  fclose(in_file);
   if(acyclic_graph_detail(result))
     return result;
   acyclic_graph_detail(result);
index 93b294d..c832f6d 100644 (file)
@@ -9,11 +9,9 @@
 
 #include "simix/datatypes.h"
 #include "smurf_private.h"
-#include "xbt/setset.h"
 
 /** @brief Process datatype */
 typedef struct s_smx_process {
-  XBT_SETSET_HEADERS;
   s_xbt_swag_hookup_t process_hookup;
   s_xbt_swag_hookup_t synchro_hookup;   /* process_to_run or mutex->sleeping and co */
   s_xbt_swag_hookup_t host_proc_hookup;
index ca29ef5..9fc1b5d 100644 (file)
@@ -43,15 +43,17 @@ void SIMIX_context_mod_init(void)
     }
     else { /* use the factory specified by --cfg=contexts/factory:value */
 
-      if (smx_context_factory_name == NULL) {
+    if (smx_context_factory_name == NULL) {
         /* use the default factory */
-#ifdef CONTEXT_UCONTEXT
-        SIMIX_ctx_sysv_factory_init(&simix_global->context_factory);
-#else
-        SIMIX_ctx_thread_factory_init(&simix_global->context_factory);
-#endif
-      }
-      else if (!strcmp(smx_context_factory_name, "ucontext")) {
+       #ifdef HAVE_RAWCTX
+       SIMIX_ctx_raw_factory_init(&simix_global->context_factory);
+       #elif CONTEXT_UCONTEXT
+               SIMIX_ctx_sysv_factory_init(&simix_global->context_factory);
+       #else
+               SIMIX_ctx_thread_factory_init(&simix_global->context_factory);
+       #endif
+    }
+    else if (!strcmp(smx_context_factory_name, "ucontext")) {
         /* use ucontext */
 #ifdef CONTEXT_UCONTEXT
         SIMIX_ctx_sysv_factory_init(&simix_global->context_factory);
index e22ac1f..059870e 100644 (file)
@@ -38,10 +38,16 @@ extern void raw_swapcontext(raw_stack_t* old, raw_stack_t new);
 
 #ifdef PROCESSOR_i686
 __asm__ (
+#if defined(APPLE) || defined(_WIN32)
+   ".text\n"
+   ".globl _raw_makecontext\n"
+   "_raw_makecontext:\n"
+#else
    ".text\n"
    ".globl raw_makecontext\n"
    ".type raw_makecontext,@function\n"
    "raw_makecontext:\n"
+#endif
    "   movl 4(%esp),%eax\n"   /* stack */
    "   addl 8(%esp),%eax\n"   /* size  */
    "   movl 12(%esp),%ecx\n"  /* func  */
@@ -58,10 +64,16 @@ __asm__ (
 );
 
 __asm__ (
+#if defined(APPLE) || defined(_WIN32)
+   ".text\n"
+   ".globl _raw_swapcontext\n"
+   "_raw_swapcontext:\n"
+#else
    ".text\n"
    ".globl raw_swapcontext\n"
    ".type raw_swapcontext,@function\n"
    "raw_swapcontext:\n"
+#endif
    "   movl 4(%esp),%eax\n" /* old */
    "   movl 8(%esp),%edx\n" /* new */
    "   pushl %ebp\n"
@@ -78,10 +90,16 @@ __asm__ (
 );
 #elif PROCESSOR_x86_64
 __asm__ (
+#if defined(APPLE) || defined(_WIN32)
+   ".text\n"
+   ".globl _raw_makecontext\n"
+   "_raw_makecontext:\n"
+#else
    ".text\n"
    ".globl raw_makecontext\n"
    ".type raw_makecontext,@function\n"
-   "raw_makecontext:\n" /* Calling convention sets the arguments in rdi, rsi, rdx and rcx, respectively */
+   "raw_makecontext:\n"/* Calling convention sets the arguments in rdi, rsi, rdx and rcx, respectively */
+#endif
    "   movq %rdi,%rax\n"      /* stack */
    "   addq %rsi,%rax\n"      /* size  */
    "   movq $0,   -8(%rax)\n" /* @return for func */
@@ -103,10 +121,16 @@ __asm__ (
 );
 
 __asm__ (
+#if defined(APPLE) || defined(_WIN32)
+   ".text\n"
+   ".globl _raw_swapcontext\n"
+   "_raw_swapcontext:\n"
+#else
    ".text\n"
    ".globl raw_swapcontext\n"
    ".type raw_swapcontext,@function\n"
-   "raw_swapcontext:\n" /* Calling convention sets the arguments in rdi and rsi, respectively */
+   "raw_swapcontext:\n"        /* Calling convention sets the arguments in rdi and rsi, respectively */
+#endif
    "   pushq %rdi\n"
    "   pushq %rsi\n"
    "   pushq %rdx\n"
index c1f8dd5..4a21d8c 100644 (file)
@@ -21,9 +21,10 @@ static double kill_time = -1.0;
 
 static void parse_process_init(void)
 {
-  parse_host = xbt_strdup(A_surfxml_process_host);
-  xbt_assert(SIMIX_host_get_by_name(parse_host),
-              "Host '%s' unknown", parse_host);
+  smx_host_t host = SIMIX_host_get_by_name(A_surfxml_process_host);
+  if (!host)
+    THROWF(arg_error, 0, "Host '%s' unknown", A_surfxml_process_host);
+  parse_host = host->name;
   parse_code = SIMIX_get_registered_function(A_surfxml_process_function);
   xbt_assert(parse_code, "Function '%s' unknown",
               A_surfxml_process_function);
@@ -76,7 +77,6 @@ static void parse_process_finalize(void)
                                current_property_set);
     /* verify if process has been created (won't be the case if the host is currently dead, but that's fine) */
     if (!process) {
-      xbt_free(parse_host);
       return;
     }
     if (kill_time > SIMIX_get_clock()) {
@@ -84,7 +84,6 @@ static void parse_process_finalize(void)
         SIMIX_timer_set(start_time, simix_global->kill_process_function, process);
       }
     }
-    xbt_free(parse_host);
   }
   current_property_set = NULL;
 }
@@ -189,9 +188,10 @@ void SIMIX_process_set_function(const char *process_host,
   char *arg;
 
   /* init process */
-  parse_host = xbt_strdup(process_host);
-  xbt_assert(SIMIX_host_get_by_name(parse_host),
-              "Host '%s' unknown", parse_host);
+  smx_host_t host = SIMIX_host_get_by_name(process_host);
+  if (!host)
+    THROWF(arg_error, 0, "Host '%s' unknown", process_host);
+  parse_host = host->name;
   parse_code = SIMIX_get_registered_function(process_function);
   xbt_assert(parse_code, "Function '%s' unknown", process_function);
 
index 8ea578f..ca8f8dc 100644 (file)
@@ -99,7 +99,8 @@ static void SIMIX_synchro_finish(smx_action_t action)
     case SIMIX_SRC_TIMEOUT:
       TRY {
         THROWF(timeout_error, 0, "Synchro's wait timeout");
-      } CATCH(req->issuer->running_ctx->exception) {
+      }
+      CATCH(req->issuer->running_ctx->exception) {
         req->issuer->doexception = 1;
       }
       break;
@@ -107,7 +108,8 @@ static void SIMIX_synchro_finish(smx_action_t action)
     case SIMIX_FAILED:
       TRY {
         THROWF(host_error, 0, "Host failed");
-      } CATCH(req->issuer->running_ctx->exception) {
+      }
+      CATCH(req->issuer->running_ctx->exception) {
         req->issuer->doexception = 1;
       }
       break;
index e91f9c7..195aa72 100644 (file)
@@ -368,7 +368,8 @@ int smpi_shared_known_call(const char* func, const char* input) {
    TRY {
       xbt_dict_get(calls, loc); /* Succeed or throw */
       known = 1;
-   } CATCH(ex) {
+   }
+   CATCH(ex) {
       if(ex.category == not_found_error) {
          known = 0;
          xbt_ex_free(ex);
index cc85e55..700870d 100644 (file)
@@ -129,7 +129,7 @@ int smpi_datatype_extent(MPI_Datatype datatype, MPI_Aint * lb,
     *extent = datatype->ub - datatype->lb;
     retval = MPI_SUCCESS;
   }
-  return MPI_SUCCESS;
+  return retval;
 }
 
 int smpi_datatype_copy(void *sendbuf, int sendcount, MPI_Datatype sendtype,
index 9ddb5a6..ce44b58 100644 (file)
@@ -27,7 +27,6 @@ void bottleneck_solve(lmm_system_t sys)
   xbt_swag_t cnst_list = NULL;
   xbt_swag_t var_list = NULL;
   xbt_swag_t elem_list = NULL;
-  double min_usage = -1;
   int i;
 
   static s_xbt_swag_t cnst_to_update;
@@ -87,7 +86,6 @@ void bottleneck_solve(lmm_system_t sys)
     }
     XBT_DEBUG("******* Constraints to process: %d *******",
            xbt_swag_size(cnst_list));
-    min_usage = -1;
     xbt_swag_foreach_safe(cnst, cnst_next, cnst_list) {
       int nb = 0;
       XBT_DEBUG("Processing cnst %p ", cnst);
index 01a4336..50cf119 100644 (file)
@@ -7,6 +7,8 @@
 #include "surf_private.h"
 #include "surf/ns3/ns3_interface.h"
 #include "xbt/lib.h"
+#include "surf/network_ns3_private.h"
+#include "xbt/str.h"
 
 extern xbt_lib_t host_lib;
 extern xbt_lib_t link_lib;
@@ -17,6 +19,39 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_ns3, surf,
 
 extern routing_global_t global_routing;
 
+static void replace_str(char *str, const char *orig, const char *rep)
+{
+  char buffer[30];
+  char *p;
+
+  if(!(p = strstr(str, orig)))  // Is 'orig' even in 'str'?
+    return;
+
+  strncpy(buffer, str, p-str); // Copy characters from 'str' start to 'orig' st$
+  buffer[p-str] = '\0';
+
+  sprintf(buffer+(p-str), "%s%s", rep, p+strlen(orig));
+  xbt_free(str);
+  str = xbt_strdup(buffer);
+}
+
+static void replace_bdw_ns3(char * bdw)
+{
+       char *temp = xbt_strdup(bdw);
+       xbt_free(bdw);
+       bdw = bprintf("%fbps",atof(temp));
+       xbt_free(temp);
+
+}
+
+static void replace_lat_ns3(char * lat)
+{
+       char *temp = xbt_strdup(lat);
+       xbt_free(lat);
+       lat = bprintf("%fs",atof(temp));
+       xbt_free(temp);
+}
+
 void parse_ns3_add_host(void)
 {
        XBT_DEBUG("NS3_ADD_HOST '%s'",A_surfxml_host_id);
@@ -29,11 +64,35 @@ void parse_ns3_add_host(void)
 void parse_ns3_add_link(void)
 {
        XBT_DEBUG("NS3_ADD_LINK '%s'",A_surfxml_link_id);
-       xbt_lib_set(link_lib,
-                               A_surfxml_link_id,
-                               NS3_LINK_LEVEL,
-                               ns3_add_link(A_surfxml_link_id)
-                               );
+
+       tmgr_trace_t bw_trace;
+       tmgr_trace_t state_trace;
+       tmgr_trace_t lat_trace;
+
+       bw_trace = tmgr_trace_new(A_surfxml_link_bandwidth_file);
+       lat_trace = tmgr_trace_new(A_surfxml_link_latency_file);
+       state_trace = tmgr_trace_new(A_surfxml_link_state_file);
+
+       if (bw_trace)
+               XBT_INFO("The NS3 network model doesn't support bandwidth state traces");
+       if (lat_trace)
+               XBT_INFO("The NS3 network model doesn't support latency state traces");
+       if (state_trace)
+               XBT_INFO("The NS3 network model doesn't support link state traces");
+
+       ns3_link_t link_ns3 = xbt_new0(s_ns3_link_t,1);;
+       link_ns3->id = xbt_strdup(A_surfxml_link_id);
+       link_ns3->bdw = xbt_strdup(A_surfxml_link_bandwidth);
+       link_ns3->lat = xbt_strdup(A_surfxml_link_latency);
+
+       surf_ns3_link_t link = xbt_new0(s_surf_ns3_link_t,1);
+       link->generic_resource.name = xbt_strdup(A_surfxml_link_id);
+       link->generic_resource.properties = current_property_set;
+       link->data = link_ns3;
+       link->created = 1;
+
+       xbt_lib_set(link_lib,A_surfxml_link_id,NS3_LINK_LEVEL,link_ns3);
+       xbt_lib_set(link_lib,A_surfxml_link_id,SURF_LINK_LEVEL,link);
 }
 void parse_ns3_add_router(void)
 {
@@ -53,71 +112,249 @@ void parse_ns3_add_AS(void)
                                ns3_add_AS(A_surfxml_AS_id)
                                );
 }
-void parse_ns3_add_route(void)
+void parse_ns3_add_cluster(void)
+{
+       char *cluster_prefix = A_surfxml_cluster_prefix;
+       char *cluster_suffix = A_surfxml_cluster_suffix;
+       char *cluster_radical = A_surfxml_cluster_radical;
+       char *cluster_bb_bw = A_surfxml_cluster_bb_bw;
+       char *cluster_bb_lat = A_surfxml_cluster_bb_lat;
+       char *cluster_bw = A_surfxml_cluster_bw;
+       char *cluster_lat = A_surfxml_cluster_lat;
+       char *groups = NULL;
+
+       int start, end, i;
+       unsigned int iter;
+
+       xbt_dynar_t radical_elements;
+       xbt_dynar_t radical_ends;
+       xbt_dynar_t tab_elements_num = xbt_dynar_new(sizeof(int), NULL);
+
+       char *router_id,*host_id;
+
+       radical_elements = xbt_str_split(cluster_radical, ",");
+       xbt_dynar_foreach(radical_elements, iter, groups) {
+               radical_ends = xbt_str_split(groups, "-");
+
+               switch (xbt_dynar_length(radical_ends)) {
+               case 1:
+                 surf_parse_get_int(&start,xbt_dynar_get_as(radical_ends, 0, char *));
+                 xbt_dynar_push_as(tab_elements_num, int, start);
+                 router_id = bprintf("ns3_%s%d%s", cluster_prefix, start, cluster_suffix);
+                 xbt_lib_set(host_lib,
+                                               router_id,
+                                               NS3_HOST_LEVEL,
+                                               ns3_add_host_cluster(router_id)
+                                               );
+                 XBT_DEBUG("NS3_ADD_ROUTER '%s'",router_id);
+                 free(router_id);
+                 break;
+
+               case 2:
+                 surf_parse_get_int(&start,xbt_dynar_get_as(radical_ends, 0, char *));
+                 surf_parse_get_int(&end, xbt_dynar_get_as(radical_ends, 1, char *));
+                 for (i = start; i <= end; i++){
+                       xbt_dynar_push_as(tab_elements_num, int, i);
+                       router_id = bprintf("ns3_%s%d%s", cluster_prefix, i, cluster_suffix);
+                       xbt_lib_set(host_lib,
+                                               router_id,
+                                               NS3_HOST_LEVEL,
+                                               ns3_add_host_cluster(router_id)
+                                               );
+                       XBT_DEBUG("NS3_ADD_ROUTER '%s'",router_id);
+                       free(router_id);
+                 }
+                 break;
+
+               default:
+                 XBT_DEBUG("Malformed radical");
+               }
+       }
+
+
+
+       //Create links
+       unsigned int cpt;
+       int elmts;
+       char * lat = xbt_strdup(cluster_lat);
+       char * bw =  xbt_strdup(cluster_bw);
+       replace_lat_ns3(lat);
+       replace_bdw_ns3(bw);
+
+       xbt_dynar_foreach(tab_elements_num,cpt,elmts)
+       {
+               host_id   = bprintf("%s%d%s", cluster_prefix, elmts, cluster_suffix);
+               router_id = bprintf("ns3_%s%d%s", cluster_prefix, elmts, cluster_suffix);
+               XBT_DEBUG("Create link from '%s' to '%s'",host_id,router_id);
+
+               ns3_nodes_t host_src = xbt_lib_get_or_null(host_lib,host_id,  NS3_HOST_LEVEL);
+               ns3_nodes_t host_dst = xbt_lib_get_or_null(host_lib,router_id,NS3_HOST_LEVEL);
+
+               if(host_src && host_dst){}
+               else xbt_die("\tns3_add_link from %d to %d",host_src->node_num,host_dst->node_num);
+
+               ns3_add_link(host_src->node_num,host_dst->node_num,bw,lat);
+
+               free(router_id);
+               free(host_id);
+       }
+       xbt_dynar_free(&tab_elements_num);
+
+
+       //Create link backbone
+       lat = xbt_strdup(cluster_bb_lat);
+       bw =  xbt_strdup(cluster_bb_bw);
+       replace_lat_ns3(lat);
+       replace_bdw_ns3(bw);
+       ns3_add_cluster(bw,lat,A_surfxml_cluster_id);
+       xbt_free(lat);
+       xbt_free(bw);   
+}
+
+double ns3_get_link_latency (const void *link)
 {
-       XBT_DEBUG("NS3_ADD_ROUTE from '%s' to '%s'",A_surfxml_route_src,A_surfxml_route_dst);
-       ns3_add_route(A_surfxml_route_src,A_surfxml_route_dst);
+       double lat;
+       //XBT_DEBUG("link_id:%s link_lat:%s link_bdw:%s",((surf_ns3_link_t)link)->data->id,((surf_ns3_link_t)link)->data->lat,((surf_ns3_link_t)link)->data->bdw);
+       sscanf(((surf_ns3_link_t)link)->data->lat,"%lg",&lat);
+       return lat;
 }
-void parse_ns3_add_ASroute(void)
+double ns3_get_link_bandwidth (const void *link)
 {
-       XBT_DEBUG("NS3_ADD_ASROUTE from '%s' to '%s'",A_surfxml_ASroute_src,A_surfxml_ASroute_dst);
-       ns3_add_ASroute(A_surfxml_ASroute_src,A_surfxml_ASroute_dst);
+       double bdw;
+       //XBT_DEBUG("link_id:%s link_lat:%s link_bdw:%s",((surf_ns3_link_t)link)->data->id,((surf_ns3_link_t)link)->data->lat,((surf_ns3_link_t)link)->data->bdw);
+       sscanf(((surf_ns3_link_t)link)->data->bdw,"%lg",&bdw);
+       return bdw;
 }
-void parse_ns3_add_cluster(void)
+
+static xbt_dynar_t ns3_get_route(const char *src, const char *dst)
 {
-       XBT_DEBUG("NS3_ADD_CLUSTER '%s'",A_surfxml_cluster_id);
-       routing_parse_Scluster();
+  return global_routing->get_route(src, dst);
 }
 
 void parse_ns3_end_platform(void)
 {
+       ns3_end_platform();
+
          xbt_lib_cursor_t cursor = NULL;
          char *name = NULL;
          void **data = NULL;
-         XBT_INFO("link_lib");
+         XBT_DEBUG("link_lib");
          xbt_lib_foreach(link_lib, cursor, name, data) {
-                       XBT_INFO("\tSee link '%s'\t--> NS3_LEVEL %p",
+                       XBT_DEBUG("\tSee link '%s'\t--> NS3_LEVEL %p",
                                        name,
                                        data[NS3_LINK_LEVEL]);
          }
-         XBT_INFO(" ");
-         XBT_INFO("host_lib");
+         XBT_DEBUG(" ");
+         XBT_DEBUG("host_lib");
          xbt_lib_foreach(host_lib, cursor, name, data) {
-                       XBT_INFO("\tSee host '%s'\t--> NS3_LEVEL %p",
+                       XBT_DEBUG("\tSee host '%s'\t--> NS3_LEVEL %p",
                                        name,
                                        data[NS3_HOST_LEVEL]);
          }
-         XBT_INFO(" ");
-         XBT_INFO("as_router_lib");
+         XBT_DEBUG(" ");
+         XBT_DEBUG("as_router_lib");
          xbt_lib_foreach(as_router_lib, cursor, name, data) {
-                       XBT_INFO("\tSee ASR '%s'\t--> NS3_LEVEL %p",
+                       XBT_DEBUG("\tSee ASR '%s'\t--> NS3_LEVEL %p",
                                        name,
                                        data[NS3_ASR_LEVEL]);
          }
+
+         XBT_DEBUG(" ");
+}
+
+/* Create the ns3 topology based on routing strategy */
+void create_ns3_topology()
+{
+   XBT_INFO("Starting topology generation");
+
+   //get the onelinks from the parsed platform
+   xbt_dynar_t onelink_routes = global_routing->get_onelink_routes();
+   if (!onelink_routes)
+     xbt_die("There is no routes!");
+   XBT_INFO("Have get_onelink_routes, found %ld routes",onelink_routes->used);
+   //save them in trace file
+   onelink_t onelink;
+   unsigned int iter;
+   xbt_dynar_foreach(onelink_routes, iter, onelink) {
+     char *src = onelink->src;
+     char *dst = onelink->dst;
+     void *link = onelink->link_ptr;
+
+     if( strcmp(src,dst) && ((surf_ns3_link_t)link)->created){
+     XBT_INFO("Route from '%s' to '%s' with link '%s'",src,dst,((surf_ns3_link_t)link)->data->id);
+     char * link_bdw = xbt_strdup(((surf_ns3_link_t)link)->data->bdw);
+        char * link_lat = xbt_strdup(((surf_ns3_link_t)link)->data->lat);
+        ((surf_ns3_link_t)link)->created = 0;
+
+        replace_bdw_ns3(link_bdw);
+        replace_lat_ns3(link_lat);
+//      XBT_INFO("src (%s), dst (%s), src_id = %d, dst_id = %d",src,dst, src_id, dst_id);
+     XBT_INFO("\tLink (%s) bdw:%s->%s lat:%s->%s",((surf_ns3_link_t)link)->data->id,
+                ((surf_ns3_link_t)link)->data->bdw,link_bdw,
+                ((surf_ns3_link_t)link)->data->lat,link_lat
+                );
+
+     //create link ns3
+     ns3_nodes_t host_src = xbt_lib_get_or_null(host_lib,src,NS3_HOST_LEVEL);
+     if(!host_src) host_src = xbt_lib_get_or_null(as_router_lib,src,NS3_ASR_LEVEL);
+     ns3_nodes_t host_dst = xbt_lib_get_or_null(host_lib,dst,NS3_HOST_LEVEL);
+     if(!host_dst) host_dst = xbt_lib_get_or_null(as_router_lib,dst,NS3_ASR_LEVEL);
+
+     if(host_src && host_dst){}
+     else xbt_die("\tns3_add_link from %d to %d",host_src->node_num,host_dst->node_num);
+
+     ns3_add_link(host_src->node_num,host_dst->node_num,link_bdw,link_lat);
+
+     xbt_free(link_bdw);
+     xbt_free(link_lat);
+     }
+   }
 }
 
 static void define_callbacks_ns3(const char *filename)
 {
-  surfxml_add_callback(STag_surfxml_host_cb_list, &parse_ns3_add_host);        //HOST
-  surfxml_add_callback(STag_surfxml_router_cb_list, &parse_ns3_add_router);    //ROUTER
-  surfxml_add_callback(STag_surfxml_link_cb_list, &parse_ns3_add_link);        //LINK
-  surfxml_add_callback(STag_surfxml_AS_cb_list, &parse_ns3_add_AS);            //AS
-  surfxml_add_callback(STag_surfxml_route_cb_list, &parse_ns3_add_route);      //ROUTE
-  surfxml_add_callback(STag_surfxml_ASroute_cb_list, &parse_ns3_add_ASroute);  //ASROUTE
+  surfxml_add_callback(STag_surfxml_host_cb_list, &parse_ns3_add_host);              //HOST
+  surfxml_add_callback(STag_surfxml_router_cb_list, &parse_ns3_add_router);      //ROUTER
+  surfxml_add_callback(STag_surfxml_link_cb_list, &parse_ns3_add_link);              //LINK
+  surfxml_add_callback(STag_surfxml_AS_cb_list, &parse_ns3_add_AS);                  //AS
   surfxml_add_callback(STag_surfxml_cluster_cb_list, &parse_ns3_add_cluster); //CLUSTER
 
-  surfxml_add_callback(ETag_surfxml_platform_cb_list, &parse_ns3_end_platform); //DEBUG
+  surfxml_add_callback(ETag_surfxml_platform_cb_list, &create_ns3_topology);    //get_one_link_routes
+  surfxml_add_callback(ETag_surfxml_platform_cb_list, &parse_ns3_end_platform); //InitializeRoutes
+}
+
+static void free_ns3_elmts(void * elmts)
+{
+}
+
+static void free_ns3_link(void * elmts)
+{
+       ns3_link_t link = elmts;
+       free(link->id);
+       free(link->bdw);
+       free(link->lat);
+       free(link);
+}
+
+static void free_ns3_host(void * elmts)
+{
+       ns3_nodes_t host = elmts;
+       free(host);
 }
 
 void surf_network_model_init_NS3(const char *filename)
 {
-       define_callbacks_ns3(filename);
        surf_network_model = surf_model_init();
        surf_network_model->name = "network NS3";
+       surf_network_model->extension.network.get_link_latency = ns3_get_link_latency;
+       surf_network_model->extension.network.get_link_bandwidth = ns3_get_link_bandwidth;
+       surf_network_model->extension.network.get_route = ns3_get_route;
+       routing_model_create(sizeof(s_surf_ns3_link_t), NULL, NULL);
+       define_callbacks_ns3(filename);
 
-       NS3_HOST_LEVEL = xbt_lib_add_level(host_lib,(void_f_pvoid_t)free_ns3_elmts);
-       NS3_ASR_LEVEL  = xbt_lib_add_level(as_router_lib,(void_f_pvoid_t)free_ns3_elmts);
-       NS3_LINK_LEVEL = xbt_lib_add_level(link_lib,(void_f_pvoid_t)free_ns3_elmts);
+       NS3_HOST_LEVEL = xbt_lib_add_level(host_lib,(void_f_pvoid_t)free_ns3_host);
+       NS3_ASR_LEVEL  = xbt_lib_add_level(as_router_lib,(void_f_pvoid_t)free_ns3_host);
+       NS3_LINK_LEVEL = xbt_lib_add_level(link_lib,(void_f_pvoid_t)free_ns3_link);
 
        update_model_description(surf_network_model_description,
                    "NS3", surf_network_model);
diff --git a/src/surf/network_ns3_private.h b/src/surf/network_ns3_private.h
new file mode 100644 (file)
index 0000000..03a27ee
--- /dev/null
@@ -0,0 +1,25 @@
+/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#ifndef _SURF_NETWORK_NS3_PRIVATE_H
+#define _SURF_NETWORK_NS3_PRIVATE_H
+
+#include "surf_private.h"
+#include "xbt/dict.h"
+
+typedef struct ns3_link{
+       char * id;
+       char * lat;
+       char * bdw;
+}s_ns3_link_t, *ns3_link_t;
+
+typedef struct surf_ns3_link{
+       s_surf_resource_t generic_resource;
+       ns3_link_t data;
+       int created;
+}s_surf_ns3_link_t, *surf_ns3_link_t;
+
+#endif                          /* _SURF_NETWORK_NS3_PRIVATE_H */
index 404f321..4542034 100644 (file)
@@ -4,32 +4,55 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "surf/ns3/ns3_interface.h"
+#include "ns3_interface.h"
 #include "ns3/core-module.h"
 #include "ns3/simulator-module.h"
 #include "ns3/node-module.h"
 #include "ns3/helper-module.h"
 #include "ns3/global-route-manager.h"
+#include "ns3/global-route-manager.h"
+#include "ns3/ipv4-global-routing-helper.h"
 
 using namespace ns3;
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(interface_ns3, surf,
                                 "Logging specific to the SURF network NS3 module");
 
+InternetStackHelper stack;
 NodeContainer nodes;
+NodeContainer Cluster_nodes;
+Ipv4InterfaceContainer interfaces;
+
 int number_of_nodes = 0;
+int number_of_clusters_nodes = 0;
+int number_of_links = 1;
+int number_of_networks = 1;
 
 void * ns3_add_host(char * id)
 {
        ns3_nodes_t host  = xbt_new0(s_ns3_nodes_t,1);
-       XBT_INFO("Interface ns3 add host '%s'",id);
+       XBT_INFO("Interface ns3 add host[%d] '%s'",number_of_nodes,id);
        Ptr<Node> node =  CreateObject<Node> (0);
+       stack.Install(node);
        nodes.Add(node);
+       host->node_num = number_of_nodes;
+       host->type = NS3_NETWORK_ELEMENT_HOST;
+       host->data = node;
+       number_of_nodes++;
+       return host;
+}
 
+void * ns3_add_host_cluster(char * id)
+{
+       ns3_nodes_t host  = xbt_new0(s_ns3_nodes_t,1);
+       XBT_INFO("Interface ns3 add host[%d] '%s'",number_of_nodes,id);
+       Ptr<Node> node =  CreateObject<Node> (0);
+       stack.Install(node);
+       Cluster_nodes.Add(node);
+       nodes.Add(node);
        host->node_num = number_of_nodes;
        host->type = NS3_NETWORK_ELEMENT_HOST;
-       host->data = nodes.Get(number_of_nodes);
-       XBT_INFO("node %p",host->data);
+       host->data = node;
        number_of_nodes++;
        return host;
 }
@@ -37,8 +60,9 @@ void * ns3_add_host(char * id)
 void * ns3_add_router(char * id)
 {
        ns3_nodes_t router  = xbt_new0(s_ns3_nodes_t,1);
-       XBT_INFO("Interface ns3 add router '%s'",id);
+       XBT_INFO("Interface ns3 add router[%d] '%s'",number_of_nodes,id);
        Ptr<Node> node =  CreateObject<Node> (0);
+       stack.Install(node);
        nodes.Add(node);
        router->node_num = number_of_nodes;
        router->type = NS3_NETWORK_ELEMENT_ROUTER;
@@ -47,13 +71,49 @@ void * ns3_add_router(char * id)
        return router;
 }
 
-void * ns3_add_link(char * id)
+void * ns3_add_cluster(char * bw,char * lat,char *id)
 {
-       XBT_INFO("Interface ns3 add link '%s'",id);
-       PointToPointHelper pointToPoint_5Mbps;
-       pointToPoint_5Mbps.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
-       pointToPoint_5Mbps.SetChannelAttribute ("Delay", StringValue ("2ms"));
-       return  NULL;//&pointToPoint_5Mbps;
+
+       XBT_DEBUG("cluster_id: %s",id);
+       XBT_DEBUG("bw: %s lat: %s",bw,lat);
+       XBT_DEBUG("Number of %s nodes: %d",id,Cluster_nodes.GetN() - number_of_clusters_nodes);
+
+       NodeContainer Nodes;
+       int i;
+
+       for(i = number_of_clusters_nodes; i < Cluster_nodes.GetN() ; i++){
+               Nodes.Add(Cluster_nodes.Get(i));
+               XBT_DEBUG("Add node %d to cluster",i);
+       }
+       number_of_clusters_nodes = Cluster_nodes.GetN();
+
+       XBT_DEBUG("Add router %d to cluster",nodes.GetN()-Nodes.GetN()-1);
+       Nodes.Add(nodes.Get(nodes.GetN()-Nodes.GetN()-1));
+
+       if(Nodes.GetN() > 65000)
+               xbt_die("Cluster with NS3 is limited to 65000 nodes");
+       CsmaHelper csma;
+       csma.SetChannelAttribute ("DataRate", StringValue (bw));
+       csma.SetChannelAttribute ("Delay", StringValue (lat));
+       NetDeviceContainer devices = csma.Install (Nodes);
+       XBT_DEBUG("Create CSMA");
+
+       char * adr = bprintf("%d.%d.0.0",number_of_networks,number_of_links);
+       XBT_DEBUG("Assign IP Addresses %s to CSMA.",adr);
+       Ipv4AddressHelper ipv4;
+       ipv4.SetBase (adr, "255.255.0.0");
+       interfaces.Add(ipv4.Assign (devices));
+
+       if(number_of_links == 255){
+               if(number_of_networks == 255)
+                       xbt_die("Number of links and networks exceed 255*255");
+               number_of_links = 1;
+               number_of_networks++;
+       }else{
+               number_of_links++;
+       }
+       XBT_DEBUG("Number of nodes in Cluster_nodes: %d",Cluster_nodes.GetN());
+
 }
 
 void * ns3_add_AS(char * id)
@@ -62,17 +122,87 @@ void * ns3_add_AS(char * id)
        return NULL;
 }
 
-void ns3_add_route(char * src,char * dst)
+void * ns3_add_link(int src,int dst,char * bw,char * lat)
 {
-       XBT_INFO("Interface ns3 add route from '%s' to '%s'",src,dst);
-}
+       if(number_of_links == 1 ) {
+               LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
+               LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);
+       }
 
-void ns3_add_ASroute(char * src,char * dst)
-{
-       XBT_INFO("Interface ns3 add ASroute from '%s' to '%s'",src,dst);
+       PointToPointHelper pointToPoint;
+       NetDeviceContainer netA;
+       Ipv4AddressHelper address;
+
+       Ptr<Node> a = nodes.Get(src);
+       Ptr<Node> b = nodes.Get(dst);
+
+       XBT_DEBUG("\tAdd PTP from %d to %d bw:'%s' lat:'%s'",src,dst,bw,lat);
+       pointToPoint.SetDeviceAttribute ("DataRate", StringValue (bw));
+       pointToPoint.SetChannelAttribute ("Delay", StringValue (lat));
+       //pointToPoint.EnablePcapAll("test_ns3_trace"); //DEBUG
+
+       netA.Add(pointToPoint.Install (a, b));
+
+       char * adr = bprintf("%d.%d.0.0",number_of_networks,number_of_links);
+       address.SetBase (adr, "255.255.0.0");
+       XBT_DEBUG("\tInterface stack '%s'",adr);
+       interfaces.Add(address.Assign (netA));
+
+       XBT_DEBUG(" ");
+       if(number_of_links == 255){
+               if(number_of_networks == 255)
+                       xbt_die("Number of links and networks exceed 255*255");
+               number_of_links = 1;
+               number_of_networks++;
+       }else{
+               number_of_links++;
+       }
 }
 
-void free_ns3_elmts(void * elmts)
+void * ns3_end_platform(void)
 {
-       XBT_INFO("Free ns3 elmts");
+       XBT_INFO("InitializeRoutes");
+       GlobalRouteManager::BuildGlobalRoutingDatabase();
+       GlobalRouteManager::InitializeRoutes();
+
+       //TODO REMOVE ;)
+       Ptr<Node> a = nodes.Get(0);
+       Ptr<Node> b = nodes.Get(1);
+       Ptr<Node> c = nodes.Get(2);
+       Ptr<Node> d = nodes.Get(3);
+
+       UdpEchoServerHelper echoServer (9);
+
+       ApplicationContainer serverApps = echoServer.Install (a);
+       serverApps.Start (Seconds (1.0));
+       serverApps.Stop (Seconds (20.0));
+
+       UdpEchoClientHelper echoClient (interfaces.GetAddress (0), 9);
+       echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
+       echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.)));
+       echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
+       ApplicationContainer clientApps_b = echoClient.Install (b);
+       clientApps_b.Start (Seconds (2.0));
+       clientApps_b.Stop (Seconds (10.0));
+
+       UdpEchoClientHelper echoClient2 (interfaces.GetAddress (0), 9);
+       echoClient2.SetAttribute ("MaxPackets", UintegerValue (1));
+       echoClient2.SetAttribute ("Interval", TimeValue (Seconds (1.)));
+       echoClient2.SetAttribute ("PacketSize", UintegerValue (512));
+       ApplicationContainer clientApps_c = echoClient2.Install (c);
+       clientApps_c.Start (Seconds (3.0));
+       clientApps_c.Stop (Seconds (10.0));
+
+       UdpEchoClientHelper echoClient3 (interfaces.GetAddress (0), 9);
+       echoClient3.SetAttribute ("MaxPackets", UintegerValue (1));
+       echoClient3.SetAttribute ("Interval", TimeValue (Seconds (1.)));
+       echoClient3.SetAttribute ("PacketSize", UintegerValue (256));
+       ApplicationContainer clientApps_d = echoClient3.Install (d);
+       clientApps_d.Start (Seconds (4.0));
+       clientApps_d.Stop (Seconds (10.0));
+
+       Simulator::Run ();
+       Simulator::Destroy ();
+
+       //HEEEEEEE
 }
index fa1a630..73780c0 100644 (file)
@@ -8,6 +8,7 @@
 #define _NS3_INTERFACE_H
 
 #include "xbt/log.h"
+#include "xbt/dynar.h"
 #include "xbt/misc.h"
 #include "xbt/sysdep.h"
 
@@ -29,14 +30,12 @@ extern "C" {
 #endif
 
 XBT_PUBLIC(void *) ns3_add_host(char * id);
+XBT_PUBLIC(void *) ns3_add_host_cluster(char * id);
 XBT_PUBLIC(void *) ns3_add_router(char * id);
-XBT_PUBLIC(void *) ns3_add_link(char * id);
 XBT_PUBLIC(void *) ns3_add_AS(char * id);
-XBT_PUBLIC(void) ns3_add_cluster(char * id);
-XBT_PUBLIC(void) ns3_add_route(char * src,char * dst);
-XBT_PUBLIC(void) ns3_add_ASroute(char * src,char * dst);
-XBT_PUBLIC(void) free_ns3_elmts(void *);
-
+XBT_PUBLIC(void *) ns3_add_link(int src,int dst,char * bw,char * lat);
+XBT_PUBLIC(void *) ns3_end_platform(void);
+XBT_PUBLIC(void *) ns3_add_cluster(char * bw,char * lat,char *id);
 #ifdef __cplusplus
 }
 #endif
index b833698..83cc58e 100644 (file)
@@ -50,8 +50,8 @@
 <!ATTLIST cluster bw CDATA #REQUIRED>
 <!ATTLIST cluster lat CDATA #REQUIRED>
 <!ATTLIST cluster sharing_policy (SHARED|FULLDUPLEX|FATPIPE) "SHARED">
-<!ATTLIST cluster bb_bw CDATA #REQUIRED>
-<!ATTLIST cluster bb_lat CDATA #REQUIRED>
+<!ATTLIST cluster bb_bw CDATA "">
+<!ATTLIST cluster bb_lat CDATA "">
 <!ATTLIST cluster bb_sharing_policy (SHARED|FATPIPE) "SHARED">
 <!ATTLIST cluster availability_file CDATA "">
 <!ATTLIST cluster state_file CDATA "">
index fda8136..ad68b8b 100644 (file)
@@ -5183,8 +5183,6 @@ YY_RULE_SETUP
   if (!AX_surfxml_cluster_power) FAIL("Required attribute `power' not set for `cluster' element.");
   if (!AX_surfxml_cluster_bw) FAIL("Required attribute `bw' not set for `cluster' element.");
   if (!AX_surfxml_cluster_lat) FAIL("Required attribute `lat' not set for `cluster' element.");
-  if (!AX_surfxml_cluster_bb_bw) FAIL("Required attribute `bb_bw' not set for `cluster' element.");
-  if (!AX_surfxml_cluster_bb_lat) FAIL("Required attribute `bb_lat' not set for `cluster' element.");
   LEAVE; STag_surfxml_cluster();surfxml_pcdata_ix = 0; ENTER(E_surfxml_cluster);
  }
        YY_BREAK
@@ -5198,8 +5196,6 @@ YY_RULE_SETUP
   if (!AX_surfxml_cluster_power) FAIL("Required attribute `power' not set for `cluster' element.");
   if (!AX_surfxml_cluster_bw) FAIL("Required attribute `bw' not set for `cluster' element.");
   if (!AX_surfxml_cluster_lat) FAIL("Required attribute `lat' not set for `cluster' element.");
-  if (!AX_surfxml_cluster_bb_bw) FAIL("Required attribute `bb_bw' not set for `cluster' element.");
-  if (!AX_surfxml_cluster_bb_lat) FAIL("Required attribute `bb_lat' not set for `cluster' element.");
   LEAVE; STag_surfxml_cluster(); surfxml_pcdata_ix = 0; ETag_surfxml_cluster(); popbuffer(); /* attribute */
   switch (YY_START) {
    case S_surfxml_AS_2: case S_surfxml_AS: case S_surfxml_AS_3: SET(S_surfxml_AS_3); break;
index 4f07216..e684a0a 100644 (file)
@@ -1098,8 +1098,6 @@ const char* *surfxml_statenames=NULL;
   if (!AX_surfxml_cluster_power) FAIL("Required attribute `power' not set for `cluster' element.");
   if (!AX_surfxml_cluster_bw) FAIL("Required attribute `bw' not set for `cluster' element.");
   if (!AX_surfxml_cluster_lat) FAIL("Required attribute `lat' not set for `cluster' element.");
-  if (!AX_surfxml_cluster_bb_bw) FAIL("Required attribute `bb_bw' not set for `cluster' element.");
-  if (!AX_surfxml_cluster_bb_lat) FAIL("Required attribute `bb_lat' not set for `cluster' element.");
   LEAVE; STag_surfxml_cluster();surfxml_pcdata_ix = 0; ENTER(E_surfxml_cluster);
  }
  "/>" {
@@ -1110,8 +1108,6 @@ const char* *surfxml_statenames=NULL;
   if (!AX_surfxml_cluster_power) FAIL("Required attribute `power' not set for `cluster' element.");
   if (!AX_surfxml_cluster_bw) FAIL("Required attribute `bw' not set for `cluster' element.");
   if (!AX_surfxml_cluster_lat) FAIL("Required attribute `lat' not set for `cluster' element.");
-  if (!AX_surfxml_cluster_bb_bw) FAIL("Required attribute `bb_bw' not set for `cluster' element.");
-  if (!AX_surfxml_cluster_bb_lat) FAIL("Required attribute `bb_lat' not set for `cluster' element.");
   LEAVE; STag_surfxml_cluster(); surfxml_pcdata_ix = 0; ETag_surfxml_cluster(); popbuffer(); /* attribute */
   switch (YY_START) {
    case S_surfxml_AS_2: case S_surfxml_AS: case S_surfxml_AS_3: SET(S_surfxml_AS_3); break;
index 702ef14..2f2c375 100644 (file)
@@ -127,7 +127,8 @@ static double base_vivaldi_get_latency (const char *src, const char *dst)
 
   xbt_assert(euclidean_dist>=0, "Euclidean Dist is less than 0\"%s\" and \"%.2f\"", src, euclidean_dist);
 
-  return euclidean_dist;
+  //From .ms to .s
+  return euclidean_dist / 1000;
 }
 
 static double vivaldi_get_link_latency (routing_component_t rc,const char *src, const char *dst, route_extended_t e_route)
@@ -1179,9 +1180,8 @@ route_extended_t generic_get_bypassroute(routing_component_t rc,
   current_src = xbt_dynar_get_ptr(path_src, index_src);
   current_dst = xbt_dynar_get_ptr(path_dst, index_dst);
   while (index_src >= 0 && index_dst >= 0 && *current_src == *current_dst) {
-    routing_component_t *tmp_src, *tmp_dst;
-    tmp_src = xbt_dynar_pop_ptr(path_src);
-    tmp_dst = xbt_dynar_pop_ptr(path_dst);
+    xbt_dynar_pop_ptr(path_src);
+    xbt_dynar_pop_ptr(path_dst);
     index_src--;
     index_dst--;
     current_src = xbt_dynar_get_ptr(path_src, index_src);
@@ -1507,7 +1507,7 @@ void routing_parse_Scluster(void)
   char *cluster_availability_file = A_surfxml_cluster_availability_file;
   char *cluster_state_file = A_surfxml_cluster_state_file;
   char *host_id, *groups, *link_id = NULL;
-  char *router_id, *link_backbone;
+  char *router_id;
   char *availability_file = xbt_strdup(cluster_availability_file);
   char *state_file = xbt_strdup(cluster_state_file);
 
@@ -1689,8 +1689,6 @@ void routing_parse_Scluster(void)
   router_id =
       bprintf("%s%s_router%s", cluster_prefix, cluster_id,
               cluster_suffix);
-  //link_router = bprintf("%s_link_%s_router", cluster_id, cluster_id);
-  link_backbone = bprintf("%s_backbone", cluster_id);
 
   XBT_DEBUG("<router id=\"%s\"/>", router_id);
   SURFXML_BUFFER_SET(router_id, router_id);
@@ -1698,31 +1696,8 @@ void routing_parse_Scluster(void)
   SURFXML_START_TAG(router);
   SURFXML_END_TAG(router);
 
-  //TODO
-//  xbt_dict_set(patterns, "radical", xbt_strdup("_router"), xbt_free);
-//  temp_cluster_bw = xbt_strdup(cluster_bw);
-//  temp_cluster_bw = replace_random_parameter(temp_cluster_bw);
-//  temp_cluster_lat = xbt_strdup(cluster_lat);
-//  temp_cluster_lat = replace_random_parameter(temp_cluster_lat);
-//  XBT_DEBUG("<link\tid=\"%s\" bw=\"%s\" lat=\"%s\"/>", link_router,temp_cluster_bw, temp_cluster_lat);
-//  A_surfxml_link_state = A_surfxml_link_state_ON;
-//  A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
-//  if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
-//  {A_surfxml_link_sharing_policy =  A_surfxml_link_sharing_policy_FULLDUPLEX;}
-//  if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE)
-//  {A_surfxml_link_sharing_policy =  A_surfxml_link_sharing_policy_FATPIPE;}
-//  SURFXML_BUFFER_SET(link_id, link_router);
-//  SURFXML_BUFFER_SET(link_bandwidth, temp_cluster_bw);
-//  SURFXML_BUFFER_SET(link_latency, temp_cluster_lat);
-//  SURFXML_BUFFER_SET(link_bandwidth_file, "");
-//  SURFXML_BUFFER_SET(link_latency_file, "");
-//  SURFXML_BUFFER_SET(link_state_file, "");
-//  SURFXML_START_TAG(link);
-//  SURFXML_END_TAG(link);
-
-//  xbt_free(temp_cluster_bw);
-//  xbt_free(temp_cluster_lat);
-
+  if(strcmp(cluster_bb_bw,"") && strcmp(cluster_bb_lat,"")){
+  char *link_backbone = bprintf("%s_backbone", cluster_id);
   XBT_DEBUG("<link\tid=\"%s\" bw=\"%s\" lat=\"%s\"/>", link_backbone,cluster_bb_bw, cluster_bb_lat);
   A_surfxml_link_state = A_surfxml_link_state_ON;
   A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
@@ -1736,6 +1711,8 @@ void routing_parse_Scluster(void)
   SURFXML_BUFFER_SET(link_state_file, "");
   SURFXML_START_TAG(link);
   SURFXML_END_TAG(link);
+  free(link_backbone);
+  }
 
   XBT_DEBUG(" ");
 
@@ -1766,11 +1743,13 @@ void routing_parse_Scluster(void)
   A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
   SURFXML_START_TAG(route);
 
+  if(strcmp(cluster_bb_bw,"") && strcmp(cluster_bb_lat,"")){
   XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_backbone);
   SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone);
   A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
   SURFXML_START_TAG(link_ctn);
   SURFXML_END_TAG(link_ctn);
+  }
 
   XBT_DEBUG("</route>");
   SURFXML_END_TAG(route);
@@ -1791,11 +1770,13 @@ void routing_parse_Scluster(void)
   SURFXML_START_TAG(link_ctn);
   SURFXML_END_TAG(link_ctn);
 
+  if(strcmp(cluster_bb_bw,"") && strcmp(cluster_bb_lat,"")){
   XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_backbone);
   SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone);
   A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
   SURFXML_START_TAG(link_ctn);
   SURFXML_END_TAG(link_ctn);
+  }
 
   XBT_DEBUG("</route>");
   SURFXML_END_TAG(route);
@@ -1808,11 +1789,13 @@ void routing_parse_Scluster(void)
   A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
   SURFXML_START_TAG(route);
 
+  if(strcmp(cluster_bb_bw,"") && strcmp(cluster_bb_lat,"")){
   XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_backbone);
   SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone);
   A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
   SURFXML_START_TAG(link_ctn);
   SURFXML_END_TAG(link_ctn);
+  }
 
   XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_dst);
   SURFXML_BUFFER_SET(link_ctn_id, pcre_link_dst);
@@ -1841,11 +1824,13 @@ void routing_parse_Scluster(void)
   SURFXML_START_TAG(link_ctn);
   SURFXML_END_TAG(link_ctn);
 
+  if(strcmp(cluster_bb_bw,"") && strcmp(cluster_bb_lat,"")){
   XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_backbone);
   SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone);
   A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
   SURFXML_START_TAG(link_ctn);
   SURFXML_END_TAG(link_ctn);
+  }
 
   XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_dst);
   SURFXML_BUFFER_SET(link_ctn_id, pcre_link_dst);
@@ -1862,6 +1847,7 @@ void routing_parse_Scluster(void)
   free(pcre_link_backbone);
   free(pcre_link_src);
   free(route_src_dst);
+
 #else
   for (i = 0; i <= xbt_dynar_length(tab_elements_num); i++) {
     for (j = 0; j <= xbt_dynar_length(tab_elements_num); j++) {
@@ -1904,11 +1890,13 @@ void routing_parse_Scluster(void)
                  free(route_src);
       }
 
+      if(strcmp(cluster_bb_bw,"") && strcmp(cluster_bb_lat,"")){
       XBT_DEBUG("<link_ctn\tid=\"%s_backbone\"/>", cluster_id);
       SURFXML_BUFFER_SET(link_ctn_id, bprintf("%s_backbone", cluster_id));
       A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
       SURFXML_START_TAG(link_ctn);
       SURFXML_END_TAG(link_ctn);
+      }
 
       if (j != xbt_dynar_length(tab_elements_num)) {
           route_dst =
@@ -1933,8 +1921,6 @@ void routing_parse_Scluster(void)
 #endif
 
   free(router_id);
-  free(link_backbone);
-  //free(link_router);
   xbt_dict_free(&patterns);
   free(availability_file);
   free(state_file);
index 60e055b..6a89c34 100644 (file)
@@ -180,10 +180,43 @@ static void add_loopback_dijkstra(routing_component_dijkstra_t rc)
   }
 }
 
-/* Business methods */
+static route_extended_t dijkstra_get_route(routing_component_t rc,
+        const char *src,
+        const char *dst);
+
 static xbt_dynar_t dijkstra_get_onelink_routes(routing_component_t rc)
 {
-  xbt_die("\"dijkstra_get_onelink_routes\" function not implemented yet");
+ // xbt_die("\"dijkstra_get_onelink_routes\" function not implemented yet");
+         xbt_dynar_t ret = xbt_dynar_new(sizeof(onelink_t), xbt_free);
+
+         routing_component_dijkstra_t routing = (routing_component_dijkstra_t) rc;
+         //size_t table_size = xbt_dict_length(routing->generic_routing.to_index);
+         xbt_dict_cursor_t c1 = NULL, c2 = NULL;
+         char *k1, *d1, *k2, *d2;
+         xbt_dict_foreach(routing->generic_routing.to_index, c1, k1, d1) {
+           xbt_dict_foreach(routing->generic_routing.to_index, c2, k2, d2) {
+             route_extended_t route = dijkstra_get_route(rc, k1, k2);
+             if (route) {
+               if (xbt_dynar_length(route->generic_route.link_list) == 1) {
+                 void *link =
+                     *(void **) xbt_dynar_get_ptr(route->generic_route.link_list,
+                                                  0);
+                 onelink_t onelink = xbt_new0(s_onelink_t, 1);
+                 onelink->link_ptr = link;
+                 if (routing->generic_routing.hierarchy == SURF_ROUTING_BASE) {
+                   onelink->src = xbt_strdup(k1);
+                   onelink->dst = xbt_strdup(k2);
+                 } else if (routing->generic_routing.hierarchy ==
+                            SURF_ROUTING_RECURSIVE) {
+                   onelink->src = xbt_strdup(route->src_gateway);
+                   onelink->dst = xbt_strdup(route->dst_gateway);
+                 }
+                 xbt_dynar_push(ret, &onelink);
+               }
+             }
+           }
+         }
+         return ret;
 }
 
 static route_extended_t dijkstra_get_route(routing_component_t rc,
@@ -330,8 +363,7 @@ static route_extended_t dijkstra_get_route(routing_component_t rc,
   }
 
   /* compose route path with links */
-  char *gw_src = NULL, *gw_dst =
-      NULL, *prev_gw_src, *prev_gw_dst, *first_gw = NULL;
+  char *gw_src = NULL, *gw_dst = NULL, *prev_gw_src, *first_gw = NULL;
 
   for (v = dst_node_id; v != src_node_id; v = pred_arr[v]) {
     xbt_node_t node_pred_v =
@@ -344,7 +376,6 @@ static route_extended_t dijkstra_get_route(routing_component_t rc,
                 *dst_id);
 
     prev_gw_src = gw_src;
-    prev_gw_dst = gw_dst;
 
     e_route = (route_extended_t) xbt_graph_edge_get_data(edge);
     gw_src = e_route->src_gateway;
index bda5d5f..e744b86 100644 (file)
@@ -95,8 +95,7 @@ static route_extended_t floyd_get_route(routing_component_t rc,
   int first = 1;
   int pred = *dst_id;
   int prev_pred = 0;
-  char *gw_src = NULL, *gw_dst =
-      NULL, *prev_gw_src, *prev_gw_dst, *first_gw = NULL;
+  char *gw_src = NULL, *gw_dst = NULL, *prev_gw_src, *first_gw = NULL;
   unsigned int cpt;
   void *link;
   xbt_dynar_t links;
@@ -111,7 +110,6 @@ static route_extended_t floyd_get_route(routing_component_t rc,
                 dst);
 
     prev_gw_src = gw_src;
-    prev_gw_dst = gw_dst;
 
     route_extended_t e_route = TO_FLOYD_LINK(pred, prev_pred);
     gw_src = e_route->src_gateway;
index a74ae31..fad6426 100644 (file)
@@ -221,6 +221,11 @@ static route_extended_t rulebased_get_route(routing_component_t rc,
 static xbt_dynar_t rulebased_get_onelink_routes(routing_component_t rc)
 {
   xbt_dynar_t ret = xbt_dynar_new (sizeof(onelink_t), xbt_free);
+
+  //We have already bypass cluster routes with network NS3
+  if(!strcmp(surf_network_model->name,"network NS3"))
+       return ret;
+
   routing_component_rulebased_t routing = (routing_component_rulebased_t)rc;
 
   xbt_dict_cursor_t c1 = NULL;
index 9309801..9244f2d 100644 (file)
@@ -456,7 +456,8 @@ void surfxml_del_callback(xbt_dynar_t cb_list, void_f_void_t function)
 
   TRY {
     it = xbt_dynar_search(cb_list,&function);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category == not_found_error) {
       xbt_ex_free(e);
       xbt_die("Trying to remove a callback that is not here! This should not happen");
index 1892aa1..e57e486 100644 (file)
@@ -185,10 +185,8 @@ void xbt_ex_setup_backtrace(xbt_ex_t * e)
       maps_name = bprintf("/proc/%d/maps", (int) getpid());
       maps = fopen(maps_name, "r");
 
-      sscanf(addrs[i], "%lx", &addr);
-      sprintf(maps_buff, "%#lx", addr);
-
-      if (strcmp(addrs[i], maps_buff)) {
+      addr = strtol(addrs[i], &p, 16);
+      if (*p != '\0') {
         XBT_CRITICAL("Cannot parse backtrace address '%s' (addr=%#lx)",
                   addrs[i], addr);
       }
index 4aa81d7..a9071df 100644 (file)
@@ -515,7 +515,8 @@ void xbt_cfg_set_vargs(xbt_cfg_t cfg, const char *name, va_list pa)
 
   TRY {
     type = xbt_cfg_get_type(cfg, name);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category == not_found_error) {
       xbt_ex_free(e);
       THROWF(not_found_error, 0,
@@ -719,7 +720,7 @@ void xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options)
                name);
       }
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       free(optionlist_cpy);
       RETHROW;
     }
@@ -1132,7 +1133,8 @@ void xbt_cfg_empty(xbt_cfg_t cfg, const char *name)
 
   TRY {
     variable = xbt_dict_get((xbt_dict_t) cfg, name);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category != not_found_error)
       RETHROW;
 
@@ -1293,7 +1295,8 @@ xbt_dynar_t xbt_cfg_get_dynar(xbt_cfg_t cfg, const char *name)
 
   TRY {
     variable = xbt_dict_get((xbt_dict_t) cfg, name);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category == not_found_error) {
       xbt_ex_free(e);
       THROWF(not_found_error, 0,
@@ -1472,7 +1475,8 @@ XBT_TEST_UNIT("use", test_config_use, "Data retrieving tests")
 
     TRY {
       xbt_cfg_set_parse(myset, "color:blue");
-    } CATCH(e) {
+    }
+    CATCH(e) {
       if (e.category != not_found_error)
         xbt_test_exception(e);
       xbt_ex_free(e);
index 82c8a9c..d432000 100644 (file)
@@ -941,7 +941,8 @@ static void search_not_found(xbt_dict_t head, const char *data)
     data = xbt_dict_get(head, data);
     THROWF(unknown_error, 0,
            "Found something which shouldn't be there (%s)", data);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category != not_found_error)
       xbt_test_exception(e);
     xbt_ex_free(e);
@@ -1014,7 +1015,8 @@ XBT_TEST_UNIT("basic", test_dict_basic, "Basic usage: change, retrieve, traverse
   traverse(head);
   TRY {
     debuged_remove(head, "12346");
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category != not_found_error)
       xbt_test_exception(e);
     xbt_ex_free(e);
@@ -1248,7 +1250,7 @@ static int countelems(xbt_dict_t head)
 XBT_TEST_UNIT("crash", test_dict_crash, "Crash test")
 {
   xbt_dict_t head = NULL;
-  int i, j, k, nb;
+  int i, j, k;
   char *key;
   void *data;
 
@@ -1263,7 +1265,6 @@ XBT_TEST_UNIT("crash", test_dict_crash, "Crash test")
          SIZEOFKEY);
     head = xbt_dict_new();
     /* if (i%10) printf("."); else printf("%d",i/10); fflush(stdout); */
-    nb = 0;
     for (j = 0; j < 1000; j++) {
       char *data = NULL;
       key = xbt_malloc(SIZEOFKEY);
index a11b2c9..6dc05e0 100644 (file)
@@ -85,7 +85,6 @@ xbt_multidict_set(xbt_dict_t mdict,
 {
   xbt_dynar_t lens = xbt_dynar_new(sizeof(unsigned long int), NULL);
   unsigned long i;
-  xbt_ex_t e;
 
   for (i = 0; i < xbt_dynar_length(keys); i++) {
     char *thiskey = xbt_dynar_get_as(keys, i, char *);
@@ -96,9 +95,11 @@ xbt_multidict_set(xbt_dict_t mdict,
 
   TRY {
     xbt_multidict_set_ext(mdict, keys, lens, data, free_ctn);
-  } TRY_CLEANUP {
+  }
+  TRY_CLEANUP {
     xbt_dynar_free(&lens);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROW;
   }
 }
@@ -221,8 +222,6 @@ xbt_multidict_remove_ext(xbt_dict_t mdict, xbt_dynar_t keys,
 
 void xbt_multidict_remove(xbt_dict_t mdict, xbt_dynar_t keys)
 {
-
-  xbt_ex_t e;
   xbt_dynar_t lens = xbt_dynar_new(sizeof(unsigned long int), NULL);
   unsigned long i;
 
@@ -234,9 +233,11 @@ void xbt_multidict_remove(xbt_dict_t mdict, xbt_dynar_t keys)
 
   TRY {
     xbt_multidict_remove_ext(mdict, keys, lens);
-  } TRY_CLEANUP {
+  }
+  TRY_CLEANUP {
     xbt_dynar_free(&lens);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROW;
   }
 }
index 20b9ec9..b5468e3 100644 (file)
@@ -574,7 +574,8 @@ int xbt_dynar_member(xbt_dynar_t const dynar, void *const elem)
 
   TRY {
     xbt_dynar_search(dynar, elem);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category == not_found_error) {
       xbt_ex_free(e);
       return 0;
index 5087b0c..b2052e1 100644 (file)
@@ -266,7 +266,7 @@ XBT_TEST_UNIT("controlflow", test_controlflow, "basic nested control flow")
       n++;
       THROWF(unknown_error, 0, "something");
     }
-    CATCH(ex) {
+    CATCH_ANONYMOUS {
       if (n != 6)
         xbt_test_fail("M3: n=%d (!= 6)", n);
       n++;
@@ -315,7 +315,8 @@ XBT_TEST_UNIT("variables", test_variables, "variable value preservation")
     r2 = 5678;
     v2 = 5678;
     THROWF(unknown_error, 0, "toto");
-  } CATCH(ex) {
+  }
+  CATCH(ex) {
     xbt_test_add("variable preservation");
     if (r1 != 1234)
       xbt_test_fail("r1=%d (!= 1234)", r1);
@@ -341,7 +342,8 @@ XBT_TEST_UNIT("cleanup", test_cleanup, "cleanup handling")
   TRY {
     v1 = 5678;
     THROWF(1, 2, "blah");
-  } TRY_CLEANUP {
+  }
+  TRY_CLEANUP {
     if (v1 != 5678)
       xbt_test_fail("v1 = %d (!= 5678)", v1);
     c = 1;
@@ -389,7 +391,8 @@ static void bad_example(void)
     cp3 = mallocex(SMALLAMOUNT);
     strcpy(cp1, "foo");
     strcpy(cp2, "bar");
-  } TRY_CLEANUP {
+  }
+  TRY_CLEANUP {
     if (cp3 != NULL)
       free(cp3);
     if (cp2 != NULL)
@@ -397,7 +400,7 @@ static void bad_example(void)
     if (cp1 != NULL)
       free(cp1);
   }
-  CATCH(ex) {
+  CATCH_ANONYMOUS {
     printf("cp3=%s", cp3);
     RETHROW;
   }
@@ -411,7 +414,6 @@ typedef struct {
 static void good_example(void)
 {
   global_context_t *global_context = malloc(sizeof(global_context_t));
-  xbt_ex_t ex;
 
   /* GOOD_EXAMPLE */
   {                             /*01 */
@@ -426,7 +428,8 @@ static void good_example(void)
       cp3 = mallocex(SMALLAMOUNT);
       strcpy(cp1, "foo");
       strcpy(cp2, "bar");
-    } TRY_CLEANUP {             /*04 */
+    }
+    TRY_CLEANUP {               /*04 */
       printf("cp3=%s", cp3 == NULL /*02 */ ? "" : cp3);
       if (cp3 != NULL)
         free(cp3);
@@ -434,7 +437,7 @@ static void good_example(void)
         free(cp2);
       /*05 cp1 was given away */
     }
-    CATCH(ex) {
+    CATCH_ANONYMOUS {
       /*05 global context untouched */
       RETHROW;
     }
index f103366..14ed08d 100644 (file)
@@ -7,6 +7,7 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "simgrid_config.h" /* getline */
+#include <errno.h>
 #include <stdlib.h>
 #include "xbt/sysdep.h"
 #include "xbt/log.h"
@@ -743,6 +744,8 @@ xbt_graph_t xbt_graph_load (const char *filename)
   size_t size;
   char *nnodes_str = NULL;
   read = getline (&nnodes_str, &size, file);
+  if (read == -1)
+    THROWF(system_error, 0, "getline failed to read the number of nodes (errno = %d)", errno);
   int i, nnodes = atoi (nnodes_str);
   free (nnodes_str);
 
@@ -750,6 +753,8 @@ xbt_graph_t xbt_graph_load (const char *filename)
   for (i = 0; i < nnodes; i++){
     char *node_str = NULL;
     read = getline (&node_str, &size, file);
+    if (read == -1)
+      THROWF(system_error, 0, "getline failed to read all nodes (errno = %d)", errno);
     xbt_node_t n;
     char *name = xbt_strdup (node_str);
     xbt_str_subst (name, '\n', '\0', 0);
@@ -761,6 +766,8 @@ xbt_graph_t xbt_graph_load (const char *filename)
   //read the number of edges
   char *nedges_str = NULL;
   read = getline (&nedges_str, &size, file);
+  if (read == -1)
+    THROWF(system_error, 0, "getline failed to read the number of edges (errno = %d)", errno);
   int nedges = atoi (nedges_str);
   free (nedges_str);
 
@@ -768,6 +775,8 @@ xbt_graph_t xbt_graph_load (const char *filename)
   for (i = 0; i < nedges; i++){
     char *edge_str = NULL, edge_id[200], node_source[200], node_target[200];
     read = getline (&edge_str, &size, file);
+    if (read == -1)
+      THROWF(system_error, 0, "getline failed to read all edges (errno = %d)", errno);
     sscanf (edge_str, "%s %s %s", edge_id, node_source, node_target);
     free (edge_str);
     xbt_str_subst (edge_id, '\n', '\0', 0);
@@ -776,8 +785,7 @@ xbt_graph_t xbt_graph_load (const char *filename)
 
     xbt_node_t source = xbt_dict_get (nodes_dict, node_source);
     xbt_node_t target = xbt_dict_get (nodes_dict, node_target);
-    xbt_edge_t e;
-    e = xbt_graph_new_edge (ret, source, target, xbt_strdup(edge_id));
+    xbt_graph_new_edge (ret, source, target, xbt_strdup(edge_id));
   }
   xbt_dict_free (&nodes_dict);
   return ret;
index f1972a0..1b0a3ce 100644 (file)
@@ -111,17 +111,27 @@ void *xbt_mallocator_get(xbt_mallocator_t m)
 {
   void *object;
 
-  if (m->current_size > 0) {
-    /* there is at least an available object */
-    /* XBT_DEBUG("Reuse an old object for mallocator %p (size:%d/%d)", m,
-           m->current_size, m->max_size); */
-    object = m->objects[--m->current_size];
-  } else {
-    /* otherwise we must allocate a new object */
+  if (m->current_size <= 0) {
+    /* No object is ready yet. Create a bunch of them to try to group the mallocs
+     *  on the same memory pages (to help the cache lines) */
+
     /* XBT_DEBUG("Create a new object for mallocator %p (size:%d/%d)", m,
            m->current_size, m->max_size); */
-    object = (*(m->new_f)) ();
+    int i;
+    int amount=MIN( (m->max_size) /2,1000);
+    for (i=0;i<amount;i++)
+      m->objects[i] = (*(m->new_f)) ();
+    m->current_size=amount;
   }
+
+  /* there is at least an available object, now */
+  /* XBT_DEBUG("Reuse an old object for mallocator %p (size:%d/%d)", m,
+           m->current_size, m->max_size); */
+  if (MC_IS_ENABLED) /* no mallocator with MC */
+    object = (*(m->new_f)) ();
+  else
+    object = m->objects[--m->current_size];
+
   (*(m->reset_f)) (object);
   return object;
 }
index ad2692c..28f89bc 100644 (file)
@@ -109,9 +109,11 @@ void *__mmalloc_mmap_morecore(struct mdesc *mdp, int size)
       foffset = (char *) mdp->top - (char *) mdp->base;
 
       if (mdp->fd > 0) {
-        /* FIXME:  Test results of lseek() and write() */
+        /* FIXME:  Test results of lseek() */
         lseek(mdp->fd, foffset + mapbytes - 1, SEEK_SET);
         test = write(mdp->fd, &buf, 1);
+        if (test == -1)
+          THROWF(system_error, 0, "write to mmap'ed fd failed! error: %s", strerror(errno));
       }
 
       /* Let's call mmap. Note that it is possible that mdp->top
index a472c2f..c88a26b 100644 (file)
@@ -163,10 +163,8 @@ void xbt_event_wait(xbt_event_t event)
 
 void xbt_event_end(xbt_event_t event)
 {
-  int myflag;
   unsigned int mycount;
 
-  myflag = event->work;
   mycount = __sync_add_and_fetch(&event->thread_counter, 1);
   if(mycount == event->threads_to_wait){
     event->done++;
index f0d6b90..8b3efbf 100644 (file)
@@ -434,7 +434,8 @@ static void search_not_found(xbt_set_t set, const char *data)
     xbt_set_get_by_name(set, data);
     THROWF(unknown_error, 0,
            "Found something which shouldn't be there (%s)", data);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category != not_found_error)
       xbt_test_exception(e);
     xbt_ex_free(e);
index b020ebd..b2be4c7 100644 (file)
@@ -495,7 +495,7 @@ xbt_os_sem_t xbt_os_sem_init(unsigned int value)
   if ((res->ps == (sem_t *) SEM_FAILED) && (errno == ENAMETOOLONG)) {
     /* Old darwins only allow 13 chars. Did you create *that* amount of semaphores? */
     res->name[13] = '\0';
-    res->ps = sem_open(res->name, O_CREAT, 0644, 1);
+    res->ps = sem_open(res->name, O_CREAT, 0644, value);
   }
   if ((res->ps == (sem_t *) SEM_FAILED))
     THROWF(system_error, errno, "sem_open() failed: %s", strerror(errno));
index ad6027b..7a38199 100644 (file)
@@ -159,7 +159,6 @@ void xbt_queue_shift(xbt_queue_t queue, void *const dst)
 void xbt_queue_push_timed(xbt_queue_t queue, const void *src, double delay)
 {
   double begin = xbt_time();
-  xbt_ex_t e;
 
   xbt_mutex_acquire(queue->mutex);
 
@@ -183,7 +182,7 @@ void xbt_queue_push_timed(xbt_queue_t queue, const void *src, double delay)
         xbt_cond_timedwait(queue->not_full, queue->mutex,
                            delay < 0 ? -1 : delay - (xbt_time() - begin));
       }
-      CATCH(e) {
+      CATCH_ANONYMOUS {
         xbt_mutex_release(queue->mutex);
         RETHROW;
       }
@@ -204,7 +203,6 @@ void xbt_queue_push_timed(xbt_queue_t queue, const void *src, double delay)
 void xbt_queue_pop_timed(xbt_queue_t queue, void *const dst, double delay)
 {
   double begin = xbt_time();
-  xbt_ex_t e;
 
   xbt_mutex_acquire(queue->mutex);
 
@@ -221,7 +219,7 @@ void xbt_queue_pop_timed(xbt_queue_t queue, void *const dst, double delay)
         xbt_cond_timedwait(queue->not_empty, queue->mutex,
                            delay < 0 ? -1 : delay - (xbt_time() - begin));
       }
-      CATCH(e) {
+      CATCH_ANONYMOUS {
         xbt_mutex_release(queue->mutex);
         RETHROW;
       }
@@ -241,7 +239,6 @@ void xbt_queue_unshift_timed(xbt_queue_t queue, const void *src,
                              double delay)
 {
   double begin = xbt_time();
-  xbt_ex_t e;
 
   xbt_mutex_acquire(queue->mutex);
 
@@ -265,7 +262,7 @@ void xbt_queue_unshift_timed(xbt_queue_t queue, const void *src,
         xbt_cond_timedwait(queue->not_full, queue->mutex,
                            delay < 0 ? -1 : delay - (xbt_time() - begin));
       }
-      CATCH(e) {
+      CATCH_ANONYMOUS {
         xbt_mutex_release(queue->mutex);
         RETHROW;
       }
@@ -287,7 +284,6 @@ void xbt_queue_shift_timed(xbt_queue_t queue, void *const dst,
                            double delay)
 {
   double begin = xbt_time();
-  xbt_ex_t e;
 
   xbt_mutex_acquire(queue->mutex);
 
@@ -304,7 +300,7 @@ void xbt_queue_shift_timed(xbt_queue_t queue, void *const dst,
         xbt_cond_timedwait(queue->not_empty, queue->mutex,
                            delay < 0 ? -1 : delay - (xbt_time() - begin));
       }
-      CATCH(e) {
+      CATCH_ANONYMOUS {
         xbt_mutex_release(queue->mutex);
         RETHROW;
       }
index be8283c..f230874 100644 (file)
Binary files a/teshsuite/gras/datadesc/datadesc.big32_8_4 and b/teshsuite/gras/datadesc/datadesc.big32_8_4 differ
index f291d4d..84dcda7 100644 (file)
Binary files a/teshsuite/gras/datadesc/datadesc.little32_4 and b/teshsuite/gras/datadesc/datadesc.little32_4 differ
index b7bd066..b3e5e7d 100644 (file)
Binary files a/teshsuite/gras/datadesc/datadesc.little64 and b/teshsuite/gras/datadesc/datadesc.little64 differ
index 8b2013f..2d11d91 100644 (file)
@@ -1,7 +1,8 @@
 
 p Check the marshaling facilities (trying to read the result of AIX)
-$ gras/datadesc/datadesc_usage --read ${srcdir:=.}/gras/datadesc/datadesc.big32_8_4 "--log=root.fmt:%m%n"
+$ gras/datadesc/datadesc_usage --read ${srcdir:=.}/gras/datadesc/datadesc.big32_8_4 --log=test.thres:verbose --log=structs.thres:info "--log=root.fmt:%m%n"
 > Read from file datadesc.big32_8_4
+> This file was generated on big32_8_4 (7)
 > ---- Test on integer ----
 > ---- Test on float ----
 > ---- Test on double ----
index 53ffc59..00e76fb 100644 (file)
@@ -1,7 +1,8 @@
 
 p Check the marshaling facilities (trying to read the result of linux/x86)
-$ gras/datadesc/datadesc_usage --read ${srcdir:=.}/gras/datadesc/datadesc.little32_4 "--log=root.fmt:%m%n"
+$ gras/datadesc/datadesc_usage --read ${srcdir:=.}/gras/datadesc/datadesc.little32_4  --log=test.thres:verbose --log=structs.thres:info "--log=root.fmt:%m%n"
 > Read from file datadesc.little32_4
+> This file was generated on little32_4 (2)
 > ---- Test on integer ----
 > ---- Test on float ----
 > ---- Test on double ----
index b07c87b..3c61b65 100644 (file)
@@ -1,7 +1,8 @@
 
 p Check the marshaling facilities (trying to read the result of linux/amd64)
-$ $SG_TEST_EXENV gras/datadesc/datadesc_usage --read ${srcdir:=.}/gras/datadesc/datadesc.little64 "--log=root.fmt:%m%n" $ARGS
+$ $SG_TEST_EXENV gras/datadesc/datadesc_usage --read ${srcdir:=.}/gras/datadesc/datadesc.little64  --log=test.thres:verbose --log=structs.thres:info "--log=root.fmt:%m%n" $ARGS
 > Read from file datadesc.little64
+> This file was generated on little64 (4)
 > ---- Test on integer ----
 > ---- Test on float ----
 > ---- Test on double ----
index dcc37ce..08f00ce 100644 (file)
@@ -46,13 +46,15 @@ int server(int argc, char *argv[])
   XBT_INFO("Launch server (port=%d)", myport);
   TRY {
     me = gras_socket_server(myport);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROWF("Unable to establish a server socket: %s");
   }
   gras_os_sleep(1);             /* Wait for pal to startup */
   TRY {
     pal = gras_socket_client_from_string(palstr);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROWF("Unable to establish a socket to %s: %s", palstr);
   }
   XBT_INFO("Initialization done.");
@@ -62,7 +64,8 @@ int server(int argc, char *argv[])
   got_expected = 0;
   TRY {
     gras_msg_handle(0);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     if (e.category == timeout_error) {
       got_expected = 1;
       xbt_ex_free(e);
@@ -117,10 +120,6 @@ int client(int argc, char *argv[])
   int myport;
   char *palstr;
 
-  xbt_ex_t e;
-  int got_expected;
-
-
   gras_init(&argc, argv);
   xbt_assert(argc == 3, "Usage: client <myport> <server>");
   myport = atoi(argv[1]);
@@ -132,22 +131,24 @@ int client(int argc, char *argv[])
   XBT_INFO("Launch client (port=%d)", myport);
   TRY {
     me = gras_socket_server(myport);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROWF("Unable to establish a server socket: %s");
   }
   gras_os_sleep(1);             /* Wait for pal to startup */
   TRY {
     pal = gras_socket_client_from_string(palstr);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROWF("Unable to establish a socket to %s: %s", palstr);
   }
   XBT_INFO("Initialization done.");
 
   /* Launch handle(-1). Lock until message from server expected */
-  got_expected = 0;
   TRY {
     gras_msg_handle(-1);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     RETHROWF("No exception expected during handle(-1), but got %s");
   }
   XBT_INFO("gras_msg_handle(-1) works as expected (locked)");
index 4e960d0..5c1d5d4 100644 (file)
@@ -5,13 +5,19 @@ set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
 add_executable(basic_parsing_test basic_parsing_test.c)
 add_executable(is_router_test is_router_test.c)
 add_executable(flatifier flatifier.c)
+add_executable(evaluate_parse_time Evaluate_parse_time.c)
+add_executable(evaluate_get_route_time Evaluate_get_route_time.c)
 
 ### Add definitions for compile
 if(NOT WIN32)
-target_link_libraries(basic_parsing_test simgrid m pthread )
-target_link_libraries(is_router_test simgrid m pthread )
-target_link_libraries(flatifier simgrid m pthread )
+target_link_libraries(evaluate_get_route_time simgrid m)
+target_link_libraries(evaluate_parse_time simgrid m)
+target_link_libraries(basic_parsing_test simgrid m)
+target_link_libraries(is_router_test simgrid m)
+target_link_libraries(flatifier simgrid m)
 else(NOT WIN32)
+target_link_libraries(evaluate_get_route_time simgrid)
+target_link_libraries(evaluate_parse_time simgrid)
 target_link_libraries(basic_parsing_test simgrid)
 target_link_libraries(is_router_test simgrid)
 target_link_libraries(flatifier simgrid)
diff --git a/teshsuite/simdag/platforms/Evaluate_get_route_time.c b/teshsuite/simdag/platforms/Evaluate_get_route_time.c
new file mode 100644 (file)
index 0000000..828b4ca
--- /dev/null
@@ -0,0 +1,73 @@
+/* Copyright (c) 2008, 2009, 2010. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+//for i in $(seq 1 100); do teshsuite/simdag/platforms/evaluate_get_route_time ../examples/platforms/One_cluster.xml 1 2> /tmp/null ; done
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "simdag/simdag.h"
+#include "surf/surf_private.h"
+#include <time.h>
+
+#define BILLION  1000000000L;
+extern routing_global_t global_routing;
+
+int main(int argc, char **argv)
+{
+       SD_workstation_t w1, w2;
+       const SD_workstation_t *workstations;
+       int i, j;
+       int list_size;
+       struct timespec start, stop;
+       double accum;
+
+       /* initialisation of SD */
+       SD_init(&argc, argv);
+
+       /* creation of the environment */
+       SD_create_environment(argv[1]);
+
+       workstations = SD_workstation_get_list();
+       list_size = SD_workstation_get_number();
+
+       unsigned int seed;
+       struct timespec time;
+       clock_gettime( CLOCK_REALTIME, &time);
+       seed = time.tv_nsec;
+
+       srand(seed);
+
+       do{
+               i = rand()%list_size;
+               j = rand()%list_size;
+       }while(i==j);
+
+       w1 = workstations[i];
+       w2 = workstations[j];
+       printf("%d\tand\t%d\t\t",i,j);
+
+       if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
+       perror( "clock gettime" );
+       return EXIT_FAILURE;
+       }
+
+       SD_route_get_list(w1, w2);
+
+       if( clock_gettime( CLOCK_REALTIME, &stop) == -1 ) {
+       perror( "clock gettime" );
+       return EXIT_FAILURE;
+       }
+
+       accum = ( stop.tv_sec - start.tv_sec )
+          + (double)( stop.tv_nsec - start.tv_nsec )
+                / (double)BILLION;
+       printf("%lf\n", accum);
+
+       SD_exit();
+
+       return 0;
+}
diff --git a/teshsuite/simdag/platforms/Evaluate_parse_time.c b/teshsuite/simdag/platforms/Evaluate_parse_time.c
new file mode 100644 (file)
index 0000000..11ffd3d
--- /dev/null
@@ -0,0 +1,50 @@
+/* Copyright (c) 2008, 2009, 2010. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+//teshsuite/simdag/platforms/evaluate_parse_time ../examples/platforms/nancy.xml
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "simdag/simdag.h"
+#include "surf/surf_private.h"
+#include <time.h>
+
+#define BILLION  1000000000L;
+extern routing_global_t global_routing;
+
+int main(int argc, char **argv)
+{
+       struct timespec start, stop;
+       double accum;
+
+       /* initialisation of SD */
+       SD_init(&argc, argv);
+
+       if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
+       perror( "clock gettime" );
+       return EXIT_FAILURE;
+       }
+
+       /* creation of the environment */
+       SD_create_environment(argv[1]);
+
+       if( clock_gettime( CLOCK_REALTIME, &stop) == -1 ) {
+       perror( "clock gettime" );
+       return EXIT_FAILURE;
+       }
+
+       accum = ( stop.tv_sec - start.tv_sec )
+                  + (double)( stop.tv_nsec - start.tv_nsec )
+                        / (double)BILLION;
+
+       printf( "%lf\n", accum );
+
+       sleep(20);
+
+       SD_exit();
+
+       return 0;
+}
index 907169a..8b5fb69 100644 (file)
@@ -65,7 +65,8 @@ int main(int argc, char **argv)
   XBT_DEBUG("%s", platformFile);
   TRY {
     SD_create_environment(platformFile);
-  } CATCH(e) {
+  }
+  CATCH(e) {
     xbt_die("Error while loading %s: %s",platformFile,e.msg);
   }
 
diff --git a/teshsuite/simdag/platforms/four_hosts_Dijkstra_ns3.xml b/teshsuite/simdag/platforms/four_hosts_Dijkstra_ns3.xml
new file mode 100644 (file)
index 0000000..a700f82
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version='1.0'?>
+ <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+ <platform version="3">
+ <AS  id="AS0"  routing="Dijkstra">
+       <host id="host1" power="1000000000"/>
+       <host id="host2" power="1000000000"/>
+       <host id="host3" power="1000000000"/>
+       <host id="host4" power="1000000000"/>
+       <link id="link1" bandwidth="125000000000" latency="5E-5"/>
+       <link id="link2" bandwidth="125000000" latency="5E-6"/>
+       <link id="link3" bandwidth="125000" latency="5E-7"/>
+       <link id="link4" bandwidth="125" latency="5E-9"/>  
+        
+   <route src="host1" dst="host2" symmetrical="NO">
+     <link_ctn id="link1"/>
+   </route>
+   <route src="host2" dst="host1" symmetrical="NO">
+     <link_ctn id="link1"/>
+   </route> 
+   
+   <route src="host1" dst="host3" symmetrical="NO">
+     <link_ctn id="link2"/>
+   </route>
+   <route src="host3" dst="host1" symmetrical="NO">
+     <link_ctn id="link2"/>
+   </route>
+   
+ </AS>
+ </platform>
\ No newline at end of file
diff --git a/teshsuite/simdag/platforms/four_hosts_floyd_ns3.xml b/teshsuite/simdag/platforms/four_hosts_floyd_ns3.xml
new file mode 100644 (file)
index 0000000..381e5e4
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version='1.0'?>
+ <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+ <platform version="3">
+ <AS  id="AS0"  routing="Floyd">
+       <host id="host1" power="1000000000"/>
+       <host id="host2" power="1000000000"/>
+       <host id="host3" power="1000000000"/>
+       <host id="host4" power="1000000000"/>
+       <link id="link1" bandwidth="125000000000" latency="5E-5"/>
+       <link id="link2" bandwidth="125000000" latency="5E-6"/>
+       <link id="link3" bandwidth="125000" latency="5E-7"/>
+       <link id="link4" bandwidth="1250" latency="5E-9"/>  
+        
+   <route src="host1" dst="host2">
+     <link_ctn id="link1"/>
+   </route>
+   
+   <route src="host2" dst="host3">
+     <link_ctn id="link3"/>
+   </route>
+      
+   <route src="host3" dst="host4">
+     <link_ctn id="link4"/>
+   </route>
+
+ </AS>
+ </platform>
\ No newline at end of file
index 2d88528..a3dc2ca 100644 (file)
@@ -47,7 +47,6 @@ void test(char *platform)
   surf_action_t actionA = NULL;
   surf_action_t actionB = NULL;
   surf_action_t actionC = NULL;
-  surf_action_t commAB = NULL;
   e_surf_action_state_t stateActionA;
   e_surf_action_state_t stateActionB;
   e_surf_action_state_t stateActionC;
@@ -91,9 +90,8 @@ void test(char *platform)
   XBT_DEBUG("%s : %p", surf_resource_name(cardB), cardB);
 
   /* Let's do something on it */
-  commAB =
-      surf_network_model->extension.network.communicate("Cpu A", "Cpu B",
-                                                        150.0, -1.0);
+  surf_network_model->extension.network.communicate("Cpu A", "Cpu B",
+                                                    150.0, -1.0);
 
   surf_solve(-1.0);                 /* Takes traces into account. Returns 0.0 */
   do {
index 5c10de0..3dcab96 100644 (file)
@@ -42,10 +42,6 @@ void test(char *platform)
 {
   void *workstationA = NULL;
   void *workstationB = NULL;
-  surf_action_t actionA = NULL;
-  surf_action_t actionB = NULL;
-  surf_action_t actionC = NULL;
-  surf_action_t commAB = NULL;
   double now = -1.0;
   int running;
 
@@ -71,18 +67,11 @@ void test(char *platform)
   XBT_DEBUG("%s : %p", surf_resource_name(workstationB), workstationB);
 
   /* Let's do something on it */
-  actionA =
-      surf_workstation_model->extension.workstation.execute(workstationA,
-                                                            1000.0);
-  actionB =
-      surf_workstation_model->extension.workstation.execute(workstationB,
-                                                            1000.0);
-  actionC =
-      surf_workstation_model->extension.workstation.sleep(workstationB,
-                                                          7.32);
-
-  commAB =
-      surf_workstation_model->extension.workstation.
+  surf_workstation_model->extension.workstation.execute(workstationA, 1000.0);
+  surf_workstation_model->extension.workstation.execute(workstationB, 1000.0);
+      surf_workstation_model->extension.workstation.sleep(workstationB, 7.32);
+
+  surf_workstation_model->extension.workstation.
       communicate(workstationA, workstationB, 150.0, -1.0);
 
   surf_solve(-1.0);                 /* Takes traces into account. Returns 0.0 */