teshsuite/smpi/struct_test
teshsuite/smpi/ttest01
teshsuite/smpi/vector_test
+teshsuite/smpi/mpich-test/*/*.out
+teshsuite/smpi/mpich-test/*/*.stdo
+teshsuite/smpi/mpich-test/coll/allgatherf
+teshsuite/smpi/mpich-test/coll/allred
+teshsuite/smpi/mpich-test/coll/allred2
+teshsuite/smpi/mpich-test/coll/allredf
+teshsuite/smpi/mpich-test/coll/allredmany
+teshsuite/smpi/mpich-test/coll/alltoallv_mpich
+teshsuite/smpi/mpich-test/coll/assocf
+teshsuite/smpi/mpich-test/coll/barrier
+teshsuite/smpi/mpich-test/coll/bcast_mpich
+teshsuite/smpi/mpich-test/coll/bcastbug
+teshsuite/smpi/mpich-test/coll/bcastbug2
+teshsuite/smpi/mpich-test/coll/bcastlog
+teshsuite/smpi/mpich-test/coll/bcastvec
+teshsuite/smpi/mpich-test/coll/coll1
+teshsuite/smpi/mpich-test/coll/coll10
+teshsuite/smpi/mpich-test/coll/coll11
+teshsuite/smpi/mpich-test/coll/coll12
+teshsuite/smpi/mpich-test/coll/coll13
+teshsuite/smpi/mpich-test/coll/coll2
+teshsuite/smpi/mpich-test/coll/coll3
+teshsuite/smpi/mpich-test/coll/coll4
+teshsuite/smpi/mpich-test/coll/coll5
+teshsuite/smpi/mpich-test/coll/coll6
+teshsuite/smpi/mpich-test/coll/coll7
+teshsuite/smpi/mpich-test/coll/coll8
+teshsuite/smpi/mpich-test/coll/coll9
+teshsuite/smpi/mpich-test/coll/grouptest
+teshsuite/smpi/mpich-test/coll/longuser
+teshsuite/smpi/mpich-test/coll/redscat
+teshsuite/smpi/mpich-test/coll/redtst
+teshsuite/smpi/mpich-test/coll/scantst
+teshsuite/smpi/mpich-test/coll/scattern
+teshsuite/smpi/mpich-test/coll/scatterv
+teshsuite/smpi/mpich-test/context/attrerr
+teshsuite/smpi/mpich-test/context/groupcreate
+teshsuite/smpi/mpich-test/context/grouptest_mpich
+teshsuite/smpi/mpich-test/context/icdup
+teshsuite/smpi/mpich-test/context/ictest
+teshsuite/smpi/mpich-test/context/ictest2
+teshsuite/smpi/mpich-test/context/ictest3
+teshsuite/smpi/mpich-test/env/aborttest
+teshsuite/smpi/mpich-test/env/baseattr
+teshsuite/smpi/mpich-test/env/env.diff
+teshsuite/smpi/mpich-test/env/errhand
+teshsuite/smpi/mpich-test/env/getproc
+teshsuite/smpi/mpich-test/env/getprocf
+teshsuite/smpi/mpich-test/env/gtime
+teshsuite/smpi/mpich-test/env/init
+teshsuite/smpi/mpich-test/env/sigchk
+teshsuite/smpi/mpich-test/env/testerr
+teshsuite/smpi/mpich-test/env/timers
+teshsuite/smpi/mpich-test/env/timertest
+teshsuite/smpi/mpich-test/profile/colluses
+teshsuite/smpi/mpich-test/profile/ptest
+teshsuite/smpi/mpich-test/pt2pt/bsendtest
+teshsuite/smpi/mpich-test/pt2pt/cancel
+teshsuite/smpi/mpich-test/pt2pt/cancel2
+teshsuite/smpi/mpich-test/pt2pt/cancel3
+teshsuite/smpi/mpich-test/pt2pt/cancelibm
+teshsuite/smpi/mpich-test/pt2pt/cancelissend
+teshsuite/smpi/mpich-test/pt2pt/cancelmessages
+teshsuite/smpi/mpich-test/pt2pt/commit
+teshsuite/smpi/mpich-test/pt2pt/dataalign
+teshsuite/smpi/mpich-test/pt2pt/dtypelife
+teshsuite/smpi/mpich-test/pt2pt/dtyperecv
+teshsuite/smpi/mpich-test/pt2pt/exittest
+teshsuite/smpi/mpich-test/pt2pt/fifth
+teshsuite/smpi/mpich-test/pt2pt/flood
+teshsuite/smpi/mpich-test/pt2pt/flood2
+teshsuite/smpi/mpich-test/pt2pt/fourth
+teshsuite/smpi/mpich-test/pt2pt/getelm
+teshsuite/smpi/mpich-test/pt2pt/hindexed
+teshsuite/smpi/mpich-test/pt2pt/htmsg
+teshsuite/smpi/mpich-test/pt2pt/hvec
+teshsuite/smpi/mpich-test/pt2pt/hvectest
+teshsuite/smpi/mpich-test/pt2pt/hvectest2
+teshsuite/smpi/mpich-test/pt2pt/irecvtest
+teshsuite/smpi/mpich-test/pt2pt/irsend
+teshsuite/smpi/mpich-test/pt2pt/irsendinit
+teshsuite/smpi/mpich-test/pt2pt/isendf
+teshsuite/smpi/mpich-test/pt2pt/isendtest
+teshsuite/smpi/mpich-test/pt2pt/isndrcv
+teshsuite/smpi/mpich-test/pt2pt/issend2
+teshsuite/smpi/mpich-test/pt2pt/issendinit
+teshsuite/smpi/mpich-test/pt2pt/issendtest
+teshsuite/smpi/mpich-test/pt2pt/longmsgs
+teshsuite/smpi/mpich-test/pt2pt/nblock
+teshsuite/smpi/mpich-test/pt2pt/nbtest
+teshsuite/smpi/mpich-test/pt2pt/nullproc
+teshsuite/smpi/mpich-test/pt2pt/nullproc2
+teshsuite/smpi/mpich-test/pt2pt/order
+teshsuite/smpi/mpich-test/pt2pt/overtake
+teshsuite/smpi/mpich-test/pt2pt/pack
+teshsuite/smpi/mpich-test/pt2pt/persist
+teshsuite/smpi/mpich-test/pt2pt/persist2
+teshsuite/smpi/mpich-test/pt2pt/persistent
+teshsuite/smpi/mpich-test/pt2pt/pingpong_f
+teshsuite/smpi/mpich-test/pt2pt/probe
+teshsuite/smpi/mpich-test/pt2pt/probe1
+teshsuite/smpi/mpich-test/pt2pt/relrank
+teshsuite/smpi/mpich-test/pt2pt/reqcreate
+teshsuite/smpi/mpich-test/pt2pt/reqfree
+teshsuite/smpi/mpich-test/pt2pt/secondf
+teshsuite/smpi/mpich-test/pt2pt/self
+teshsuite/smpi/mpich-test/pt2pt/selfvsworld
+teshsuite/smpi/mpich-test/pt2pt/send1
+teshsuite/smpi/mpich-test/pt2pt/sendcplx
+teshsuite/smpi/mpich-test/pt2pt/sendfort
+teshsuite/smpi/mpich-test/pt2pt/sendmany
+teshsuite/smpi/mpich-test/pt2pt/sendorder
+teshsuite/smpi/mpich-test/pt2pt/sendrecv2
+teshsuite/smpi/mpich-test/pt2pt/sendrecv3
+teshsuite/smpi/mpich-test/pt2pt/sendrecv4
+teshsuite/smpi/mpich-test/pt2pt/sendrecv_mpich
+teshsuite/smpi/mpich-test/pt2pt/sixth
+teshsuite/smpi/mpich-test/pt2pt/sndrcv
+teshsuite/smpi/mpich-test/pt2pt/sndrcvrep
+teshsuite/smpi/mpich-test/pt2pt/sndrcvrpl2
+teshsuite/smpi/mpich-test/pt2pt/ssendtest
+teshsuite/smpi/mpich-test/pt2pt/ssendtest2
+teshsuite/smpi/mpich-test/pt2pt/structlb
+teshsuite/smpi/mpich-test/pt2pt/testall_mpich
+teshsuite/smpi/mpich-test/pt2pt/testsome
+teshsuite/smpi/mpich-test/pt2pt/testtest1
+teshsuite/smpi/mpich-test/pt2pt/testtypes
+teshsuite/smpi/mpich-test/pt2pt/third
+teshsuite/smpi/mpich-test/pt2pt/trunc
+teshsuite/smpi/mpich-test/pt2pt/truncmult
+teshsuite/smpi/mpich-test/pt2pt/typebase
+teshsuite/smpi/mpich-test/pt2pt/typebasef
+teshsuite/smpi/mpich-test/pt2pt/typecreate
+teshsuite/smpi/mpich-test/pt2pt/typelb
+teshsuite/smpi/mpich-test/pt2pt/typetest
+teshsuite/smpi/mpich-test/pt2pt/typeub
+teshsuite/smpi/mpich-test/pt2pt/typeub2
+teshsuite/smpi/mpich-test/pt2pt/typeub3
+teshsuite/smpi/mpich-test/pt2pt/waitall
+teshsuite/smpi/mpich-test/pt2pt/waitall2
+teshsuite/smpi/mpich-test/pt2pt/waitall3
+teshsuite/smpi/mpich-test/pt2pt/waitall4
+teshsuite/smpi/mpich-test/pt2pt/waitany
teshsuite/msg/get_sender
teshsuite/msg/trace/test_trace_integration
teshsuite/simdag/basic0
cmake_minimum_required(VERSION 2.6)
-
-IF(CMAKE_BUILD_TYPE STREQUAL "ModelChecker")
- SET(enable_coverage ON)
- SET(enable_model-checking ON)
- SET(enable_lua ON)
- SET(enable_compile_optimization OFF)
-ENDIF()
-
### Need to set rc ccompiler before enable language
if(WIN32)
SET(CMAKE_RC_COMPILER "windres")
endif()
set(libsimgrid_version "${release_version}")
set(libsmpi_version "${release_version}")
+set(libSG_java_version "${release_version}")
set(GCC_NEED_VERSION "4.0")
set(APPLE_NEED_GCC_VERSION "4.6")
--- /dev/null
+ChangeLog for SimGrid-java, before its integration into the main source tree.
+
+SimGrid-java (3.9) stable; urgency=low
+
+ -- 2013-01-30 Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
+
+SimGrid-java (3.8.1) stable; urgency=low
+
+ * New module: org.simgrid.trace.Trace (SimGrid trace bindings)
+ Warning: all methods are visible, but only some of them are
+ implemented so far. Check the source (src/jtrace.c)
+ for further information.
+ * New module: org.simgrid.msg.File (SimGrid File management functions)
+ * New Module: org.simgrid.msg.VM (SimGrid interface to mimick IAAS clouds)
+ * Change the meaning of Process.restart: now restart the process from
+ the begining, like MSG_process_restart in C.
+ * Add Process.setAutoRestart: handling of process restart when failed
+ host comes back.
+ * Add Process.getProperty, Host.getProperty, Host.getProperty: allows
+ you to retrieve the properties of the processes/hosts
+ * Deprecate Msg.clean(): you can just forget about it now.
+ * New function Process.getCount(), that only works when compiling
+ with the not yet released version 3.9 of the C library.
+
+ * New context factory based on Coroutines. It mandates a modified JVM
+ but then, the simulations run about five times faster, and there is
+ no limit to the amount of processes (beside of the available memory).
+
+ -- 2012-12-04 Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
+
+SimGrid-java (3.7.1) stable; urgency=low
+
+ The "Java aint got to be bloated and slow" release
+
+ Major cleanups:
+ * Various internal cleanups and performance improvement
+ Simulations are expected to run up to twice faster or so
+ * Make Process.kill(process) an instance method, not a static one
+ * User processes are not java.lang.Thread subclasses.
+ This breaks the compatibility (sorry), but previous API was
+ brain-dead, making it impossible to have non-trivial
+ initializations in the process constructor.
+ * Require a full constructor per Process sub-class.
+ Kinda breaks the compatibility (sorry), but this allows a much more
+ efficient way to launch the processes at simulation startup.
+ * Do not embeed our version of semaphores, java 1.5 can be considered
+ as sufficiently prevalent for us to not dupplicate its features.
+ * Lot of bug fixes
+
+ Extend the API:
+ * Add examples for almost every part of the API
+ We spotted and fixed a lot of bugs in the process
+
+ * New module: asynchronous communication API
+ * New function: Process.sleep()
+ It takes milliseconds as argument, just as java.lang.Thread.sleep()
+ * New module: org.simgrid.msg.Mutex (SimGrid mutexes)
+ * New module: org.simgrid.msg.RngStream (RngStreams random generators)
+
+ -- 2012-06-12 Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
+
+SimGrid-java (1.0 (3.6) unstable; urgency=low
+
+ * Initial release.
+ * Split of every thing from simgrid v3.5 into a separate package.
+
+ -- 2011-10-05 Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
--- /dev/null
+On Debian-like systems (which includes ubuntu), you need the following
+packages: sun-java6-jdk libgcj10-dev. If you cannot find the
+libgcj10-dev, try another version, like libgcj9-dev (on Ubuntu before
+9.10) or libgcj11-dev (not released yet, but certainly one day).
+Please note that you need to activate the contrib and non-free
+repositories in Debian, and the universe ones in Ubuntu. Java comes at
+this price...
ADD_TEST(tesh-msg-get-sender-ucontext ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/get_sender.tesh)
endif()
+ ADD_TEST(tesh-msg-pid-thread ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/pid.tesh)
+ if(HAVE_RAWCTX)
+ ADD_TEST(tesh-msg-pid-raw ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/pid.tesh)
+ endif()
+ if(CONTEXT_UCONTEXT)
+ ADD_TEST(tesh-msg-pid-ucontext ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/pid.tesh)
+ endif()
+
+
IF(enable_debug) # these tests need the assertion mechanism
ADD_TEST(tesh-simdag-parser-bogus-symmetric ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms two_hosts_asymetric.tesh)
ENDIF()
ADD_TEST(graphicator ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} --setenv bindir=${CMAKE_BINARY_DIR}/bin --cd ${CMAKE_HOME_DIRECTORY}/tools/graphicator graphicator.tesh)
ENDIF()
+ # Java examples
+ set(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/java/:${CMAKE_BINARY_DIR}/simgrid.jar")
+ if(enable_java)
+ ADD_TEST(java-bittorrent ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java bittorrent/bittorrent.tesh)
+ endif()
+
# Lua examples
if(HAVE_LUA)
ADD_TEST(lua-duplicated-globals ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/state_cloner duplicated_globals.tesh)
include(FindF2c)
SET(HAVE_SMPI 1)
endif()
+if(enable_java)
+ find_package(Java REQUIRED COMPONENTS Runtime Development)
+ find_package(JNI REQUIRED)
+ include(UseJava)
+ set(HAVE_Java 1)
+endif()
if(enable_lua)
include(FindLua51Simgrid)
endif()
set(EXTRA_DIST
include/xbt/win32_ucontext.h
+ src/bindings/java/MANIFEST.MF
src/include/instr/instr_interface.h
src/include/mc/datatypes.h
src/include/mc/mc.h
#* ****************************************************************************************** *#
set(SIMDAG_SRC
+ src/simdag/instr_sd_task.c
src/simdag/sd_daxloader.c
src/simdag/sd_global.c
src/simdag/sd_link.c
src/bindings/lua/simgrid_lua.h
)
+set(JMSG_C_SRC
+ src/bindings/java/jmsg.c
+ src/bindings/java/jmsg.h
+ src/bindings/java/jmsg_comm.c
+ src/bindings/java/jmsg_comm.h
+ src/bindings/java/jmsg_file.c
+ src/bindings/java/jmsg_file.h
+ src/bindings/java/jmsg_host.c
+ src/bindings/java/jmsg_host.h
+ src/bindings/java/jmsg_process.c
+ src/bindings/java/jmsg_process.h
+ src/bindings/java/jmsg_rngstream.c
+ src/bindings/java/jmsg_rngstream.h
+ src/bindings/java/jmsg_synchro.c
+ src/bindings/java/jmsg_synchro.h
+ src/bindings/java/jmsg_task.c
+ src/bindings/java/jmsg_task.h
+ src/bindings/java/jmsg_vm.c
+ src/bindings/java/jmsg_vm.h
+ src/bindings/java/jxbt_utilities.c
+ src/bindings/java/jxbt_utilities.h
+ src/bindings/java/smx_context_cojava.c
+ src/bindings/java/smx_context_cojava.h
+ src/bindings/java/smx_context_java.c
+ src/bindings/java/smx_context_java.h
+)
+
+set(JMSG_JAVA_SRC
+ src/bindings/java/org/simgrid/msg/Comm.java
+ src/bindings/java/org/simgrid/msg/File.java
+ src/bindings/java/org/simgrid/msg/Host.java
+ src/bindings/java/org/simgrid/msg/HostFailureException.java
+ src/bindings/java/org/simgrid/msg/HostNotFoundException.java
+ src/bindings/java/org/simgrid/msg/JniException.java
+ src/bindings/java/org/simgrid/msg/Msg.java
+ src/bindings/java/org/simgrid/msg/MsgException.java
+ src/bindings/java/org/simgrid/msg/Mutex.java
+ src/bindings/java/org/simgrid/msg/NativeException.java
+ src/bindings/java/org/simgrid/msg/Process.java
+ src/bindings/java/org/simgrid/msg/ProcessKilledError.java
+ src/bindings/java/org/simgrid/msg/ProcessNotFoundException.java
+ src/bindings/java/org/simgrid/msg/RngStream.java
+ src/bindings/java/org/simgrid/msg/Task.java
+ src/bindings/java/org/simgrid/msg/TaskCancelledException.java
+ src/bindings/java/org/simgrid/msg/TimeoutException.java
+ src/bindings/java/org/simgrid/msg/TransferFailureException.java
+ src/bindings/java/org/simgrid/msg/VM.java
+)
+
+set(JTRACE_C_SRC
+ src/bindings/java/jtrace.c
+ src/bindings/java/jtrace.h
+)
+
+set(JTRACE_JAVA_SRC
+ src/bindings/java/org/simgrid/trace/Trace.java
+)
+
+if(HAVE_TRACING)
+ list(APPEND JMSG_C_SRC ${JTRACE_C_SRC})
+else()
+ list(APPEND EXTRA_DIST ${JTRACE_C_SRC})
+endif()
+
set(LUA_SRC
src/bindings/lua/lua_comm.c
src/bindings/lua/lua_host.c
)
set(EXAMPLES_CMAKEFILES_TXT
+ examples/java/bittorrent/CMakeLists.txt
examples/lua/CMakeLists.txt
examples/msg/CMakeLists.txt
examples/msg/actions/CMakeLists.txt
buildtools/Cmake/test_prog/prog_stackgrowth.c
buildtools/Cmake/test_prog/prog_stacksetup.c
buildtools/Cmake/test_prog/prog_thread_storage.c
- buildtools/Cmake/test_prog/prog_va_copy.c
buildtools/Cmake/test_prog/prog_vsnprintf.c
)
${BINDINGS_SRC}
${GTNETS_SRC}
${JEDULE_SRC}
+ ${JMSG_C_SRC}
+ ${JMSG_JAVA_SRC}
${LUA_SRC}
${MC_SRC}
${MSG_SRC}
add_custom_target(dist
COMMENT "Removing the distribution directory"
DEPENDS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${release_version}.tar.gz
+ COMMAND ${CMAKE_COMMAND} -E echo ${PROJECT_NAME}-${release_version} > ${CMAKE_BINARY_DIR}/VERSION
COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_NAME}-${release_version}/
)
# Allow to test the "make dist"
add_custom_target(distcheck
+ COMMAND ${CMAKE_COMMAND} -E echo "XXX compare archive with git repository"
+ COMMAND ${CMAKE_HOME_DIRECTORY}/tools/check_dist_archive -batch ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}.tar.gz
+
COMMAND ${CMAKE_COMMAND} -E echo "XXX remove old copy"
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}
endif()
set(CMAKE_Fortran_FLAGS "-Wall") # FIXME: Q&D hack
+
+ set(CMAKE_JAVA_COMPILE_FLAGS "-Xlint")
endif()
if(enable_compile_optimizations)
#### Generate the whole html documentation
find_path(DOXYGEN_PATH NAMES doxygen PATHS NO_DEFAULT_PATHS)
+find_path(JAVADOC_PATH NAMES javadoc PATHS NO_DEFAULT_PATHS)
find_path(FIG2DEV_PATH NAMES fig2dev PATHS NO_DEFAULT_PATHS)
if(DOXYGEN_PATH)
COMMAND ${CMAKE_COMMAND} -E echo "XX Run doxygen again"
COMMAND ${DOXYGEN_PATH}/doxygen Doxyfile
COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_HOME_DIRECTORY}/doc/simgrid_modules.map
+ COMMAND ${CMAKE_COMMAND} -E echo "XX Javadoc pass"
+ COMMAND ${JAVADOC_PATH}/javadoc -d ${CMAKE_HOME_DIRECTORY}/doc/html/javadoc/ ${CMAKE_HOME_DIRECTORY}/src/bindings/java/org/simgrid/msg/*.java
WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/doc
)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/trace)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/bittorrent)
+
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/properties)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/actions)
add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/migration)
endif()
endif()
+if(enable_java)
+ add_library(SG_java SHARED ${JMSG_C_SRC})
+ set_target_properties(SG_java PROPERTIES VERSION ${libSG_java_version})
+ get_target_property(COMMON_INCLUDES SG_java INCLUDE_DIRECTORIES)
+ set_target_properties(SG_java PROPERTIES
+ INCLUDE_DIRECTORIES "${COMMON_INCLUDES};${JNI_INCLUDE_DIRS}")
+ add_dependencies(SG_java simgrid)
+
+ if(WIN32)
+ get_target_property(SIMGRID_LIB_NAME_NAME SG_java LIBRARY_OUTPUT_NAME)
+ set_target_properties(SG_java PROPERTIES
+ LINK_FLAGS "-Wl,--subsystem,windows,--kill-at ${SIMGRID_LIB_NAME}"
+ PREFIX "")
+ find_path(PEXPORTS_PATH NAMES pexports.exe PATHS NO_DEFAULT_PATHS)
+ message(STATUS "pexports: ${PEXPORTS_PATH}")
+ if(PEXPORTS_PATH)
+ add_custom_command(TARGET SG_java POST_BUILD
+ COMMAND ${PEXPORTS_PATH}/pexports.exe ${CMAKE_BINARY_DIR}/SG_java.dll > ${CMAKE_BINARY_DIR}/SG_java.def)
+ endif(PEXPORTS_PATH)
+ else()
+ target_link_libraries(SG_java simgrid)
+ endif()
+
+ set(CMAKE_JAVA_TARGET_OUTPUT_NAME simgrid)
+ set(MANIFEST_FILE ${CMAKE_HOME_DIRECTORY}/src/bindings/java/MANIFEST.MF)
+ add_jar(SG_java_jar ${JMSG_JAVA_SRC})
+ add_custom_command(TARGET SG_java_jar POST_BUILD
+ COMMENT "Update file MANIFEST.MF in simgrid.jar..."
+ DEPENDS ${MANIFEST_FILE}
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
+ COMMAND ${JAVA_ARCHIVE} -uvmf ${MANIFEST_FILE} simgrid.jar
+ )
+
+ if(CMAKE_SYSTEM_PROCESSOR MATCHES ".86")
+ if(${ARCH_32_BITS})
+ set(JSG_BUNDLE "NATIVE/${CMAKE_SYSTEM_NAME}/x86/")
+ else()
+ set(JSG_BUNDLE "NATIVE/${CMAKE_SYSTEM_NAME}/amd64/")
+ endif()
+ else()
+ error("Unknown system type. Processor: ${CMAKE_SYSTEM_PROCESSOR}; System: ${CMAKE_SYSTEM_NAME}")
+ endif()
+ message("Native libraries bundeled into: ${JSG_BUNDLE}")
+
+ add_custom_command(TARGET SG_java_jar POST_BUILD
+ COMMENT "Combine native libraries in simgrid.jar..."
+ DEPENDS simgrid SG_java
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
+ COMMAND ${CMAKE_COMMAND} -E remove_directory "NATIVE"
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${JSG_BUNDLE}"
+ COMMAND ${CMAKE_COMMAND} -E copy ./lib/libsimgrid.so "${JSG_BUNDLE}"
+ COMMAND strip --strip-debug "${JSG_BUNDLE}/libsimgrid.so"
+ COMMAND ${CMAKE_COMMAND} -E copy ./lib/libSG_java.so "${JSG_BUNDLE}"
+ COMMAND strip --strip-debug "${JSG_BUNDLE}/libSG_java.so"
+ COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_HOME_DIRECTORY}/ChangeLog" "${JSG_BUNDLE}"
+ COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_HOME_DIRECTORY}/ChangeLog.SimGrid-java" "${JSG_BUNDLE}"
+ COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_HOME_DIRECTORY}/COPYING" "${JSG_BUNDLE}"
+ COMMAND ${JAVA_ARCHIVE} -uvf simgrid.jar "NATIVE"
+ )
+endif()
+
add_dependencies(simgrid maintainer_files)
# if supernovaeing, we need some depends to make sure that the source gets generated
option(enable_gtnets "Whether gtnets model is activated." off)
option(enable_ns3 "Whether ns3 model is activated." off)
-option(enable_lua "Whether the lua bindings are activated." off)
+option(enable_java "Whether the Java bindings are activated." off)
+option(enable_lua "Whether the lua bindings are activated." off)
option(enable_compile_warnings "Whether compilation warnings should be turned into errors." off)
option(enable_maintainer_mode "Whether flex and flexml files should be rebuilt." off)
option(enable_tracing "Tracing simulations for visualization." on)
message(" Compiler: C++ .......: ${CMAKE_CXX_COMPILER} (${CMAKE_CXX_COMPILER_ID})")
message(" version .....: ${COMPILER_CXX_VERSION}")
endif()
+if(CMAKE_Java_COMPILER)
+ message(" Compiler: Java ......: ${CMAKE_Java_COMPILER} (${CMAKE_Java_COMPILER_ID})")
+ message(" version .....: ${COMPILER_Java_VERSION}")
+endif()
if(CMAKE_Fortran_COMPILER)
message(" Compiler: Fortran ...: ${CMAKE_Fortran_COMPILER} (${CMAKE_Fortran_COMPILER_ID})")
message(" version .....: ${COMPILER_Fortran_VERSION}")
message(" Gtnets path .........: ${gtnets_path}")
message(" NS-3 path ...........: ${ns3_path}")
endif()
+message(" Compile Java ........: ${HAVE_Java}")
message(" Compile Lua .........: ${HAVE_LUA}")
message(" Compile Smpi ........: ${HAVE_SMPI}")
message(" Compile Smpi f77 ....: ${SMPI_F2C}")
/*! \page bindings Bindings
+\section bindings_binding_Ruby Ruby Binding
+Check online for our specific [Simgrid-Ruby documentation](http://simgrid.gforge.inria.fr/documentation.html).
\section bindings_binding_Java Java Binding
-Check online for our specific <a href="http://simgrid.gforge.inria.fr/documentation.html">Simgrid-Java documentation</a>.
-
-\section bindings_binding_Ruby Ruby Binding
-Check online for our specific <a href="http://simgrid.gforge.inria.fr/documentation.html">Simgrid-Ruby documentation</a>.
+Simgrid-java is a java API that let you use [Simgrid](http://simgrid.gforge.inria.fr/)
+MSG API in your favorite language (java). Without it, you would be forced to
+use C or one of the other bindings provided.
+
+MSG was the first distributed programming environment provided within SimGrid.
+While almost realistic, it remains quite simple. This describes the Java
+bindings to this interface.
+
+The javadoc is accessible [here](javadoc/index.html)
+
+\subsection bindings_binding_Java_jMSG_who Who should use this (and who shouldn't)
+You should use MSG if you want to study some heuristics for a given problem you
+don't really want to implement. SimGrid-java let you use MSG while coding in
+Java. So if your need is MSG + Java, you're in the right section!
+
+\subsection SimGrid-java Usage overview
+
+To make a long story short, it's a JNI binding, so it implies that:
+- Most of the MSG and SimGrid documentation about behavioral aspects applies
+ directly to what you are programming.
+- MSG data structures are mapped to Java objects. So it means that from the
+ syntax point of view, you have to know how those objects are. Fortunately,
+ we have generated the Javadoc for those objects. So take a look at it
+
+Finally, it implies also that your program can crash for 3 main reasons:
+- Your Java part is not good: you'll have a good old java exception thrown,
+ and hence you should be able to correct it by yourself.
+- Our java part is not good: you'll also have a java exception thrown, but
+ we have real doubts this can happen, since the java part is only a JNI
+ binding. The other option is that it crashed because you used incorrectly
+ the MSG API, so this means also you should have an MSGException. It means
+ you should read carefully MSG samples and/or documentation.
+- Something has crashed in the C part. Okay, here comes the tricky thing.
+
+C crashes mainly for 2 reasons:
+- When something goes wrong in your simulation, sometimes the C part stops
+ because you used SimGrid incorrectly, and JNI bindings are not fond of that.
+ It means that you'll have something that looks ugly, but you should be able
+ to identify what's going wrong in your code by carefully reading the whole
+ error message
+- It may happen that the problem comes directly from SimGrid: in this case,
+ the error should be uglier. In that case, you may submit a bug directly to
+ SimGrid.
+
+\subsection bindings_binding_java_install How to install Simgrid-java
+
+To use java with Simgrid you have to install some dependencies:
+- Simgrid (see [install Simgrid](http://simgrid.gforge.inria.fr/simgrid/latest/doc/install.html).
+ You should set the `SIMGRID_ROOT` environment variable to the path where you installed SimGrid.
+- Java JDK packages, such as `openjdk7` or `sun-java6-jdk` (with `libgcj10-dev` or another
+ version of gcj). For maximal performance and scalability, use a coroutine-enabled JVM (see
+ \ref bindings_binding_java_coroutines).
+
+Then Download and install package Simgrid-java:
+~~~~{.sh}
+git clone git://scm.gforge.inria.fr/simgrid/simgrid-java.git
+cd simgrid-java
+cmake -DCMAKE_INSTALL_PREFIX=$HOME/Install/simgrid-java/ .
+make install
+~~~~
+
+Cmake output
+~~~~{.sh}
+-- SITE : Linux_2.6.38-8-generic_x86_64
+-- BUILDNAME : Simgrid-Java
+-- Looking for lib SimGrid
+-- Looking for lib SimGrid - found
+-- Simgrid version : 3.8.1
+-- Looking for gras.h
+-- Looking for gras.h - found
+-- Found Tesh: /home/user/Bureau/simgrid/git/bin/tesh
+-- Found gras_stub_generator: /home/user/Bureau/simgrid/git/bin/gras_stub_generator
+-- Java version 1.6.0.22 configured successfully!
+-- Looking for jni.h
+-- Looking for jni.h - found
+-- Add flags -I/usr/lib/jvm/java-6-openjdk/include
+-- Looking for jni_md.h
+-- Looking for jni_md.h - found
+-- Found javac: /usr/bin/javac
+-- Found jar: /usr/bin/jar
+-- Configuring done
+-- Generating done
+-- Build files have been written to: /home/user/workspace/simgrid-java/build
+~~~~
+
+If cmake complains that **jni could not be found**, you need to tell it where
+JNI header files are located. the following command should tell you:
+
+~~~~{.sh}
+$ locate jni.h
+/usr/lib/jvm/java-6-openjdk-amd64/include/jni.h
+/usr/lib/jvm/java-7-openjdk-amd64/include/jni.h
+~~~~
+
+If you have several version of jni installed (as in the example
+above), you need to check the version of java that is used by default
+on your machine (using javac -version), and pick the right one. Then
+set the `JAVA_INCLUDE_PATH` environment variable to the right path (note
+that we remove the filename `jni.h` from that path), and relaunch cmake.
+
+~~~~{.sh}
+$ export JAVA_INCLUDE_PATH=/usr/lib/jvm/java-6-openjdk-amd64/include/
+$ cmake .
+~~~~
+
+\subsubsection bindings_binding_java_use How to use Simgrid-java
+
+To execute the examples you need to add the path where you installed
+the generated `libSG_java` library (`<build_dir>/lib`) and `libsimgrid`
+(`$SIMGRID_ROOT/lib`) into the `LD_LIBRARY_PATH`.
+
+Be careful on Mac, this variable is called `DYLD_LIBRARY_PATH` and not
+`LD_LIBRARY_PATH`.
+
+~~~~{.sh}
+$ export SIMGRID_ROOT="$HOME/Install/simgrid/" # change it to the path where you installed the SimGrid library
+$ export SIMGRID_JAVA_ROOT="$HOME/Install/simgrid-java" # change it to the path where you installed the java bindings of SimGrid
+$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$SIMGRID_ROOT/lib:$SIMGRID_JAVA_ROOT/java
+$ cd examples
+$ java -cp .:../simgrid.jar basic/BasicTest platform.xml basic/basicDeployment.xml
+~~~~
+
+If you want to make these settings permanent even after a reboot, you
+need to add the export lines into your `~/.bashrc` file, or equivalent.
+
+\subsubsection bindings_binding_java_coroutines How to use the coroutines context factory
+
+There is two main motivations to use the coroutine variant of SimGrid
+Java bindings: it's about 5 times faster than the default thread-based
+context factory, and the amount of runnable processes is then only
+limited by the amount of RAM that you have. The drawbacks are that it
+requires a specific and rather experimental JVM to run, and that this
+context factory itself remains a bit experimental so far.
+
+\subsubsection bindings_java_coro_install Getting a mlvm JVM
+
+You need to get a patched JVM from [here](http://ssw.jku.at/General/Staff/LS/coro/)
+(many thanks to Lukas Stadler for this work!).
+
+You can either get a prebuilt binary, or recompile your own JVM. Make
+sure to get a coro-simple version, as we don't need to serialize nor
+migrate stacks in SimGrid. You should be able to follow the `README.txt`
+that you'll get in the repository, but here is how we did it, just in
+case. The instructions are given for a debian or Ubuntu box, but I
+think you should manage to convert it to your system quite easily.
+Finally, if you're really stuck, you can get the version compiled by
+Jonathan Rouzaud-Cornabas from his web page. This version is known to
+work with SimGrid for sure!
+http://graal.ens-lyon.fr/~jrouzaud/files/corosimple-linux-amd64-20120914.tgz
+
+ -# Install mercurial and some dependencies
+~~~~{.sh}
+sudo apt-get install mercurial ksh libfreetype6-dev libcups2-dev libasound2-dev gawk openjdk-7-jdk libxext-dev libxrender-dev libxtst-dev
+# Grab the forest extension: we need to source-install it
+hg clone https://bitbucket.org/gxti/hgforest hgforest \endverbatim
+~~~~
+ -# Configure the mercurial extensions: Edit ~/.hgrc and paste the
+ following lines. Don't forget to change the /path/to/forest.py to
+ point to where you just downloaded the source.
+
+ Forest extension is needed to download the openjdk source code and
+ patches while the mq line is needed to apply the patches. The
+ username is needed at the step "preparing the sources", not sure why.
+~~~~
+[ui]
+username = YouUserameWithoutSpaces
+[extensions]
+forest=/path/to/forest.py
+mq=
+~~~~
+ -# Prepare the source code
+~~~~{.sh}
+# create a working directory, and enter it
+mkdir davinci; cd davinci
+
+# Grab the sources
+hg fclone http://hg.openjdk.java.net/hsx/hotspot-comp sources
+# Grab the patches
+hg fclone http://hg.openjdk.java.net/mlvm/mlvm patches
+
+# Link the patch directories into the sources
+bash patches/make/link-patch-dirs.sh sources patches
+# Test wether the previous command worked with
+ls -i patches/hotspot/series sources/hotspot/.hg/patches/series
+# It should display something like the following.
+# (note that both file share the same inode number)
+# 9707849 patches/hotspot/series
+# 9707849 sources/hotspot/.hg/patches/series
+
+
+# Specify what to compile.
+export davinci=$(pwd) guards="buildable testable coro-simple"
+# Apply the patches
+sh patches/make/each-patch-repo.sh hg qselect --reapply $guards '$(sh $davinci/patches/make/current-release.sh)'
+# Check that it understood that you want the patch applied:
+grep GLOBAL_GUARDS patches/make/* -r
+# this should display something like the following (maybe amonst other unrelated lines)
+# GLOBAL_GUARDS=buildable testable coro-simple
+# If this does not work, edit patches/make/Makefile,
+# manually coro-simple to GLOBAL_GUARDS and then
+# rerun the patches/make/each-patch-repo.sh script as earlier
+
+
+# Finish the setup
+(cd patches/make; make setup && make force && make && make FORCE_VERSIONS=1 && echo "Sources are properly setup")
+#Â If this last command failed, check your mercurial config within ~/.hgrc (see above)
+~~~~
+ -# Compile it all
+~~~~{.sh}
+unset LD_LIBRARY_PATH
+export ALT_BOOTDIR=/usr/lib/jvm/java-7-openjdk-amd64/
+cd sources
+# Check that everything is fine
+make sanity
+# Go for it (it takes about half an hour on my machine)
+make all
+
+# Check that the coroutine library got compiled in
+ls sources/build/linux-amd64/classes/java/dyn/
+# This should display a bunch of class files. If not, something went wrong, you need to investigate further
+~~~~
+
+\subsubsection bindings_java_coro_use Using coroutine contexts
+
+SimGrid Java will automatically switch to the coroutine context
+factory if your JVM support it, so you will just need to execute your
+simulation with the correct JVM. The selected context factory gets
+displayed automatically.
+~~~~{.sh}
+export LD_LIBRARY_PATH=/path/to/simgrid.so:/path/to/libSG_java.so
+cd examples
+$PATH_TO_COROUTINE_JVM/java -cp .:../simgrid.jar masterslave.Masterslave masterslave/ masterslaveDeployment.xml platform.xml
+~~~~
+
+Note that you may have to adjust the "coro.stacksPerThread"
+configuration option to run large simulations. The default is 100 and
+you want to increase it to run more processes.
+~~~~{.sh}
+$ $PATH_TO_COROUTINE_JVM/java -Dcoro.stacksPerThread=$STACKS_NUMBER -cp .:../simgrid.jar basic/BasicTest platform.xml basic/basicDeployment.xml
+~~~~
+
+If you reach the point where the creation of new simulated processes
+fail with the message "Can't create coroutine object", you may need to
+increase the relevant system limit with the following command.
+~~~~{.sh}
+sysctl -w vm.max_map_count = 131072
+~~~~
+
+The full story is that each coroutine requires two memory maps, and
+that Linux puts a limit on the total amount of memory maps that each
+process can manage (by default, this limit is often at 65535). Since
+the JVM needs a few dozen of such maps on its own (three maps per
+dynamic library -- check `/proc/the_pid/maps` if you don't believe it),
+this is enough to create over 30,000 simulated processes. But to go
+futher, that limit must be modified.
+
+If you want to make this change permanent on your machine, edit your
+`/etc/sysctl.conf` file. Otherwise, you have to redo it by calling
+sysctl after each reboot.
\section bindings_binding_lua Lua Binding
Besides Java Binding, Lua and Ruby bindings are available since version 3.4 of Simgrid
for MSG Module, and we are currenlty working on bindings for other modules.
-
\subsection bindings_binding_lua_about What is lua ?
Lua is a lightweight, reflective, imperative and functional programming language,
designed as a scripting language with extensible semantics as a primary goal (see official web site <a href="http://www.lua.org">here</a>).
7 include/surf/surf.h 661 /* TUTORIAL: New model*/
\endverbatim
+\section simgrid_dev_guide_simcall How to add a new simcall?
+To add a simcall called `<name>` with three arguments `arg1`, `arg2` and `arg3`
+of type `targ1`, `targ2`, `targ3` respectively and which return a value of
+type `tret` you must first define the simcall function in the the
+`include/simgrid/simix.h` and make it call the automatically generated `BODY`
+function which will do all the bad stuff.
+
+~~~~{.c}
+tret simcall_<NAME>(targ1 arg1, targ2 arg2, targ3 arg3){
+ return simcall_BODY_<NAME>(arg1, arg2, arg3);
+}
+~~~~
+
+Then you must add an new line in the list `SIMCALL_LIST1` of simcall actions in
+`src/simix/smx_smurf_private.h`. The arguments of the `ACTION` are:
+- the simcall enum name,
+- the `<name>` of the simcall,
+- if the result must be automatically saved in the simcall
+ (`WITH_ANSWER`/`WITHOUT_ANSWER`)
+- the return type,
+- the arguments.
+
+The return type and the arguments must be define by using `TSPEC(name, type)`,
+or one of the predefined type (e.g., `TSTRING(n)`, `TINT(n)`, `TVOID(n)`,
+`TPTR(n)`, …). You must get something like this:
+
+~~~~{.c}
+ACTION(SIMCALL_<NAME>, <name>, WITH_ANSWER, TSPEC(result, tret), TSPEC(arg1, targ1), TSPEC(arg2, targ2), TSPEC(arg3, targ3)) sep \
+~~~~
+
+Finaly you have to define the kernel code in a `SIMIX_pre_<name>` in the
+corresponding src/simix/smx_*.c file:
+
+~~~~{.c}
+tret SIMIX_pre_<name>(smx_simcall_t simcall, targ1 arg1, targ2 arg2, targ3 arg3) {
+ SIMIX_<NAME>(arg1, arg2, arg3);
+}
+
+tret SIMIX_<name>(targ1 arg1, targ2 arg2, targ3 arg3) {
+ // Your code in kernel mode
+}
+~~~~
+
\section simgrid_dev_guide_tag What is How to add a new tag for xml files?
Search for expression \"TUTORIAL: New TAG\".
\verbatim
--- /dev/null
+cmake_minimum_required(VERSION 2.6)
+
+set(tesh_files
+ ${tesh_files}
+ PARENT_SCOPE
+ )
+set(xml_files
+ ${xml_files}
+ ${CMAKE_CURRENT_SOURCE_DIR}/platform.xml
+ PARENT_SCOPE
+ )
+set(examples_src
+ ${examples_src}
+ PARENT_SCOPE
+ )
+set(bin_files
+ ${bin_files}
+ PARENT_SCOPE
+ )
+set(txt_files
+ ${txt_files}
+ PARENT_SCOPE
+ )
+
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+
+package async;
+
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.NativeException;
+
+public class AsyncTest {
+
+ /* This only contains the launcher. If you do nothing more than than you can run
+ * java simgrid.msg.Msg
+ * which also contains such a launcher
+ */
+
+ public static void main(String[] args) throws NativeException {
+
+ /* initialize the MSG simulation. Must be done before anything else (even logging). */
+ Msg.init(args);
+
+ if (args.length < 2) {
+ Msg.info("Usage : Async platform_file deployment_file");
+ Msg.info("example : Async basic_platform.xml basic_deployment.xml");
+ System.exit(1);
+ }
+
+ /* construct the platform and deploy the application */
+ Msg.createEnvironment(args[0]);
+ Msg.deployApplication(args[1]);
+
+ /* execute the simulation. */
+ Msg.run();
+ }
+}
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+
+package async;
+import org.simgrid.msg.Task;
+
+public class FinalizeTask extends Task {
+ public FinalizeTask() {
+ super("finalize",0,0);
+ }
+}
+
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+
+package async;
+import org.simgrid.msg.Host;
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.MsgException;
+import org.simgrid.msg.Task;
+import org.simgrid.msg.Process;
+
+
+public class Forwarder extends Process {
+ public Forwarder(Host host, String name, String[]args) {
+ super(host,name,args);
+ }
+ public void main(String[] args) throws MsgException {
+ if (args.length < 3) {
+ Msg.info("Forwarder needs 3 arguments (input mailbox, first output mailbox, last one)");
+ Msg.info("Got "+args.length+" instead");
+ System.exit(1);
+ }
+ int input = Integer.valueOf(args[0]).intValue();
+ int firstOutput = Integer.valueOf(args[1]).intValue();
+ int lastOutput = Integer.valueOf(args[2]).intValue();
+
+ int taskCount = 0;
+ int slavesCount = lastOutput - firstOutput + 1;
+ Msg.info("Receiving on 'slave_"+input+"'");
+ while(true) {
+ Task task = Task.receive("slave_"+input);
+
+ if (task instanceof FinalizeTask) {
+ Msg.info("Got a finalize task. Let's forward (asynchronously) that we're done, and then sleep 20 seconds so that nobody gets a message from a terminated process.");
+
+ for (int cpt = firstOutput; cpt<=lastOutput; cpt++) {
+ Task tf = new FinalizeTask();
+ tf.dsend("slave_"+cpt);
+ }
+ waitFor(20);
+ break;
+ }
+ int dest = firstOutput + (taskCount % slavesCount);
+
+ Msg.info("Sending \"" + task.getName() + "\" to \"slave_" + dest + "\"");
+ task.send("slave_"+dest);
+
+ taskCount++;
+ }
+
+
+ Msg.info("I'm done. See you!");
+ }
+}
+
--- /dev/null
+/*
+ * Master of a basic master/slave example in Java
+ *
+ * Copyright 2006-2012 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.
+ */
+
+package async;
+import java.util.ArrayList;
+
+import org.simgrid.msg.Comm;
+import org.simgrid.msg.Host;
+import org.simgrid.msg.Process;
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.MsgException;
+import org.simgrid.msg.Task;
+import org.simgrid.msg.Process;;
+
+public class Master extends Process {
+ public Master(Host host, String name, String[]args) {
+ super(host,name,args);
+ }
+ public void main(String[] args) throws MsgException {
+ if (args.length < 4) {
+ Msg.info("Master needs 4 arguments");
+ System.exit(1);
+ }
+
+ int tasksCount = Integer.valueOf(args[0]).intValue();
+ double taskComputeSize = Double.valueOf(args[1]).doubleValue();
+ double taskCommunicateSize = Double.valueOf(args[2]).doubleValue();
+
+ int slavesCount = Integer.valueOf(args[3]).intValue();
+
+ Msg.info("Hello! Got "+ slavesCount + " slaves and "+tasksCount+" tasks to process");
+ ArrayList<Comm> comms = new ArrayList<Comm>();
+
+ for (int i = 0; i < tasksCount; i++) {
+ Task task = new Task("Task_" + i, taskComputeSize, taskCommunicateSize);
+ Msg.info("Sending \"" + task.getName()+ "\" to \"slave_" + i % slavesCount + "\"");
+ //task.send("slave_"+(i%slavesCount));
+ Comm comm = task.isend("slave_"+(i%slavesCount));
+ comms.add(comm);
+ }
+
+ while (comms.size() > 0) {
+ for (int i = 0; i < comms.size(); i++) {
+ try {
+ if (comms.get(i).test()) {
+ comms.remove(i);
+ i--;
+ }
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ waitFor(1);
+ }
+
+ Msg.info("All tasks have been dispatched. Let's tell (asynchronously) everybody the computation is over, and sleep 20s so that nobody gets a message from a terminated process.");
+
+ for (int i = 0; i < slavesCount; i++) {
+ FinalizeTask task = new FinalizeTask();
+ task.dsend("slave_"+(i%slavesCount));
+ }
+ waitFor(20);
+
+ Msg.info("Goodbye now!");
+ }
+}
--- /dev/null
+This is another version of the master/slaves example, using asynchronous communications.
+
+There is 3 kind of processes:
+ * Master: creates some tasks, and dispatches them to its slaves
+ * Forwarder: get tasks from master, and dispatch them further
+ * Slave: get tasks from either master or forwarder, and run them
+
+At the end of the execution:
+ - the master sends FinalizeTask to every known slave to stop them,
+ using dsend instead of send. That's non-blocking with no way to
+ know if/when the communication succeeds. It is intended for
+ communications where you don't care to know whether your message got
+ received or not. The process then sleeps 20 seconds because we have
+ a strange bug for now when the receiver gets a message from a
+ terminated process. This should not be the case, actually, that's a
+ JAVA specific bug, but I don't really have the time to dig in right
+ now.
+
+ - On reception of FT, forwarders dsend FT to every slave, and stop
+ after a little while.
+ - On reception of FinalizeTask, slaves stop.
+
+Other non-blocking primitives will get used here as soon as they are
+added to the bindings.
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2006,2007,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.
+ */
+package async;
+import org.simgrid.msg.Comm;
+import org.simgrid.msg.Host;
+import org.simgrid.msg.HostFailureException;
+import org.simgrid.msg.HostNotFoundException;
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.Task;
+import org.simgrid.msg.TaskCancelledException;
+import org.simgrid.msg.TimeoutException;
+import org.simgrid.msg.TransferFailureException;
+import org.simgrid.msg.Process;
+
+public class Slave extends Process {
+ public Slave(Host host, String name, String[]args) {
+ super(host,name,args);
+ }
+ public void main(String[] args) throws TransferFailureException, HostFailureException, TimeoutException {
+ if (args.length < 1) {
+ Msg.info("Slave needs 1 argument (its number)");
+ System.exit(1);
+ }
+
+ int num = Integer.valueOf(args[0]).intValue();
+ Comm comm = null;
+ boolean slaveFinished = false;
+ while(!slaveFinished) {
+ try
+ {
+ if (comm == null) {
+ Msg.info("Receiving on 'slave_" + num + "'");
+ comm = Task.irecv("slave_" + num);
+ }
+ else {
+ if (comm.test()) {
+ Task task = comm.getTask();
+
+ if (task instanceof FinalizeTask) {
+ comm = null;
+ break;
+ }
+ Msg.info("Received a task");
+ Msg.info("Received \"" + task.getName() + "\". Processing it.");
+ try {
+ task.execute();
+ } catch (TaskCancelledException e) {
+
+ }
+ comm = null;
+ }
+ else {
+ waitFor(1);
+ }
+ }
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ Msg.info("Received Finalize. I'm done. See you!");
+ waitFor(20);
+ }
+}
\ No newline at end of file
--- /dev/null
+#! ./tesh
+
+! output sort
+
+$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar async/AsyncTest ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/async/asyncDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+> [ 0.000000] (10:async.Slave@Robert) Receiving on 'slave_8'
+> [ 0.000000] (11:async.Slave@Sirois) Receiving on 'slave_9'
+> [ 0.000000] (12:async.Slave@Monique) Receiving on 'slave_10'
+> [ 0.000000] (1:async.Master@Jacquelin) Hello! Got 7 slaves and 5 tasks to process
+> [ 0.000000] (1:async.Master@Jacquelin) Sending "Task_0" to "slave_0"
+> [ 0.000000] (1:async.Master@Jacquelin) Sending "Task_1" to "slave_1"
+> [ 0.000000] (1:async.Master@Jacquelin) Sending "Task_2" to "slave_2"
+> [ 0.000000] (1:async.Master@Jacquelin) Sending "Task_3" to "slave_3"
+> [ 0.000000] (1:async.Master@Jacquelin) Sending "Task_4" to "slave_4"
+> [ 0.000000] (2:async.Forwarder@Jackson) Receiving on 'slave_0'
+> [ 0.000000] (3:async.Forwarder@Casavant) Receiving on 'slave_1'
+> [ 0.000000] (4:async.Slave@iRMX) Receiving on 'slave_2'
+> [ 0.000000] (5:async.Slave@Bousquet) Receiving on 'slave_3'
+> [ 0.000000] (6:async.Slave@Soucy) Receiving on 'slave_4'
+> [ 0.000000] (7:async.Slave@Kuenning) Receiving on 'slave_5'
+> [ 0.000000] (8:async.Slave@Browne) Receiving on 'slave_6'
+> [ 0.000000] (9:async.Slave@Stephen) Receiving on 'slave_7'
+> [ 0.851467] (2:async.Forwarder@Jackson) Sending "Task_0" to "slave_7"
+> [ 1.357014] (3:async.Forwarder@Casavant) Sending "Task_1" to "slave_9"
+> [ 2.000000] (11:async.Slave@Sirois) Received a task
+> [ 2.000000] (11:async.Slave@Sirois) Received "Task_1". Processing it.
+> [ 2.000000] (5:async.Slave@Bousquet) Received a task
+> [ 2.000000] (5:async.Slave@Bousquet) Received "Task_3". Processing it.
+> [ 2.000000] (6:async.Slave@Soucy) Received a task
+> [ 2.000000] (6:async.Slave@Soucy) Received "Task_4". Processing it.
+> [ 2.000364] (6:async.Slave@Soucy) Receiving on 'slave_4'
+> [ 2.000437] (11:async.Slave@Sirois) Receiving on 'slave_9'
+> [ 2.001165] (5:async.Slave@Bousquet) Receiving on 'slave_3'
+> [ 4.000000] (4:async.Slave@iRMX) Received a task
+> [ 4.000000] (4:async.Slave@iRMX) Received "Task_2". Processing it.
+> [ 4.000000] (9:async.Slave@Stephen) Received a task
+> [ 4.000000] (9:async.Slave@Stephen) Received "Task_0". Processing it.
+> [ 4.000728] (4:async.Slave@iRMX) Receiving on 'slave_2'
+> [ 4.000728] (9:async.Slave@Stephen) Receiving on 'slave_7'
+> [ 5.000000] (1:async.Master@Jacquelin) All tasks have been dispatched. Let's tell (asynchronously) everybody the computation is over, and sleep 20s so that nobody gets a message from a terminated process.
+> [ 5.851463] (2:async.Forwarder@Jackson) Got a finalize task. Let's forward (asynchronously) that we're done, and then sleep 20 seconds so that nobody gets a message from a terminated process.
+> [ 6.000000] (7:async.Slave@Kuenning) Received Finalize. I'm done. See you!
+> [ 6.000000] (8:async.Slave@Browne) Received Finalize. I'm done. See you!
+> [ 6.357007] (3:async.Forwarder@Casavant) Got a finalize task. Let's forward (asynchronously) that we're done, and then sleep 20 seconds so that nobody gets a message from a terminated process.
+> [ 7.000364] (6:async.Slave@Soucy) Received Finalize. I'm done. See you!
+> [ 7.000437] (11:async.Slave@Sirois) Received Finalize. I'm done. See you!
+> [ 7.001165] (5:async.Slave@Bousquet) Received Finalize. I'm done. See you!
+> [ 8.000000] (12:async.Slave@Monique) Received Finalize. I'm done. See you!
+> [ 9.000000] (10:async.Slave@Robert) Received Finalize. I'm done. See you!
+> [ 9.000728] (4:async.Slave@iRMX) Received Finalize. I'm done. See you!
+> [ 9.000728] (9:async.Slave@Stephen) Received Finalize. I'm done. See you!
+> [ 25.000000] (1:async.Master@Jacquelin) Goodbye now!
+> [ 25.851463] (2:async.Forwarder@Jackson) I'm done. See you!
+> [ 26.357007] (3:async.Forwarder@Casavant) I'm done. See you!
+> [ 29.000728] (0:@) MSG_main finished; Cleaning up the simulation...
+> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+ <process host="Jacquelin" function="async.Master">
+ <argument value="5"/> <!-- Amount of tasks to dispatch -->
+ <argument value="50000"/> <!-- Computation size of each task -->
+ <argument value="10"/> <!-- Communication size of each one -->
+ <argument value="7"/> <!-- Amount of slaves waiting for orders -->
+ </process>
+
+ <process host="Jackson" function="async.Forwarder">
+ <argument value="0"/> <!-- Input mailbox -->
+ <argument value="7"/> <!-- First output mailbox -->
+ <argument value="8"/> <!-- Last output mailbox -->
+ </process>
+ <process host="Casavant" function="async.Forwarder">
+ <argument value="1"/> <!-- Input mailbox -->
+ <argument value="9"/> <!-- First output mailbox -->
+ <argument value="10"/> <!-- Last output mailbox -->
+ </process>
+
+ <process host="iRMX" function="async.Slave">
+ <argument value="2"/> <!-- Input mailbox -->
+ </process>
+ <process host="Bousquet" function="async.Slave">
+ <argument value="3"/> <!-- Input mailbox -->
+ </process>
+ <process host="Soucy" function="async.Slave">
+ <argument value="4"/> <!-- Input mailbox -->
+ </process>
+ <process host="Kuenning" function="async.Slave">
+ <argument value="5"/> <!-- Input mailbox -->
+ </process>
+ <process host="Browne" function="async.Slave">
+ <argument value="6"/> <!-- Input mailbox -->
+ </process>
+ <process host="Stephen" function="async.Slave">
+ <argument value="7"/> <!-- Input mailbox -->
+ </process>
+ <process host="Robert" function="async.Slave">
+ <argument value="8"/> <!-- Input mailbox -->
+ </process>
+ <process host="Sirois" function="async.Slave">
+ <argument value="9"/> <!-- Input mailbox -->
+ </process>
+ <process host="Monique" function="async.Slave">
+ <argument value="10"/> <!-- Input mailbox -->
+ </process>
+</platform>
--- /dev/null
+/**
+* Copyright 2012 The SimGrid team. All right 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.
+*
+*/
+package bittorrent;
+
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.MsgException;
+
+public class Bittorrent {
+ public static void main(String[] args) throws MsgException {
+ /* initialize the MSG simulation. Must be done before anything else (even logging). */
+ Msg.init(args);
+ if(args.length < 2) {
+ Msg.info("Usage : Bittorrent platform_file deployment_file");
+ Msg.info("example : Bittorrent platform.xml deployment.xml");
+ System.exit(1);
+ }
+
+ /* construct the platform and deploy the application */
+ Msg.createEnvironment(args[0]);
+ Msg.deployApplication(args[1]);
+
+ /* execute the simulation. */
+ Msg.run();
+ }
+
+}
--- /dev/null
+cmake_minimum_required(VERSION 2.6)
+
+set(sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/Bittorrent.java
+ ${CMAKE_CURRENT_SOURCE_DIR}/Common.java
+ ${CMAKE_CURRENT_SOURCE_DIR}/Connection.java
+ ${CMAKE_CURRENT_SOURCE_DIR}/MessageTask.java
+ ${CMAKE_CURRENT_SOURCE_DIR}/Peer.java
+ ${CMAKE_CURRENT_SOURCE_DIR}/Tracker.java
+ ${CMAKE_CURRENT_SOURCE_DIR}/TrackerTask.java
+ )
+
+if(enable_java)
+ add_custom_target(java_bittorrent ALL
+ COMMAND ${JAVA_COMPILE} -cp ${CMAKE_BINARY_DIR}/simgrid.jar
+ -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources})
+ add_dependencies(java_bittorrent SG_java_jar)
+endif()
+
+set(tesh_files
+ ${tesh_files}
+ ${CMAKE_CURRENT_SOURCE_DIR}/bittorrent.tesh
+ PARENT_SCOPE
+ )
+set(xml_files
+ ${xml_files}
+ ${CMAKE_CURRENT_SOURCE_DIR}/bittorrent.xml
+ PARENT_SCOPE
+ )
+set(examples_src
+ ${examples_src}
+ ${sources}
+ PARENT_SCOPE
+ )
+set(bin_files
+ ${bin_files}
+ PARENT_SCOPE
+ )
+set(txt_files
+ ${txt_files}
+ ${CMAKE_CURRENT_SOURCE_DIR}/generate.py
+ PARENT_SCOPE
+ )
+
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package bittorrent;
+/**
+ * Common constants for use in the simulation
+ */
+public class Common {
+
+ public static String TRACKER_MAILBOX = "tracker_mailbox";
+
+ public static int FILE_SIZE = 5120;
+ public static int FILE_PIECE_SIZE = 512;
+ public static int FILE_PIECES = 10;
+ public static int PIECES_BLOCKS = 5;
+
+ public static int BLOCKS_REQUESTED = 2;
+
+ public static int PIECE_COMM_SIZE = 1;
+ /**
+ * Information message size
+ */
+ public static int MESSAGE_SIZE = 1;
+ /**
+ * Max number of pairs sent by the tracker to clients
+ */
+ public static int MAXIMUM_PEERS = 50;
+ /**
+ * Interval of time where the peer should send a request to the tracker
+ */
+ public static int TRACKER_QUERY_INTERVAL = 1000;
+ /**
+ * Communication size for a task to the tracker
+ */
+ public static double TRACKER_COMM_SIZE = 0.01;
+ /**
+ * Timeout for the get peers data
+ */
+ public static int GET_PEERS_TIMEOUT = 10000;
+ /**
+ * Timeout for "standard" messages.
+ */
+ public static int TIMEOUT_MESSAGE = 10;
+ /**
+ * Timeout for tracker receive.
+ */
+ public static int TRACKER_RECEIVE_TIMEOUT = 10;
+ /**
+ * Number of peers that can be unchocked at a given time
+ */
+ public static int MAX_UNCHOKED_PEERS = 4;
+ /**
+ * Interval between each update of the choked peers
+ */
+ public static int UPDATE_CHOKED_INTERVAL = 30;
+ /**
+ * Number of pieces the peer asks for simultaneously
+ */
+ public static int MAX_PIECES = 1;
+}
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package bittorrent;
+
+import java.util.Arrays;
+import org.simgrid.msg.Msg;
+public class Connection {
+ /**
+ * Remote peer id
+ */
+ public int id;
+ /**
+ * Remote peer bitfield.
+ */
+ public char bitfield[];
+ /**
+ * Remote peer mailbox
+ */
+ public String mailbox;
+ /**
+ * Indicates if we are interested in something this peer has
+ */
+ public boolean amInterested = false;
+ /**
+ * Indicates if the peer is interested in one of our pieces
+ */
+ public boolean interested = false;
+ /**
+ * Indicates if the peer is choked for the current peer
+ */
+ public boolean chokedUpload = true;
+ /**
+ * Indicates if the peer has choked the current peer
+ */
+ public boolean chokedDownload = true;
+ /**
+ * Number of messages we have received from the peer
+ */
+ public int messagesCount = 0;
+ /**
+ * Peer speed.
+ */
+ public double peerSpeed = 0;
+ /**
+ * Last time the peer was unchoked
+ */
+ public double lastUnchoke = 0;
+ /**
+ * Constructor
+ */
+ public Connection(int id) {
+ this.id = id;
+ this.mailbox = Integer.toString(id);
+ }
+ /**
+ * Add a new value to the peer speed average
+ */
+ public void addSpeedValue(double speed) {
+ peerSpeed = peerSpeed * 0.55 + speed * 0.45;
+ // peerSpeed = (peerSpeed * messagesCount + speed) / (++messagesCount);
+ }
+
+ @Override
+ public String toString() {
+ return "Connection [id=" + id + ", bitfield="
+ + Arrays.toString(bitfield) + ", mailbox=" + mailbox
+ + ", amInterested=" + amInterested + ", interested="
+ + interested + ", chokedUpload=" + chokedUpload
+ + ", chokedDownload=" + chokedDownload + "]";
+ }
+
+
+}
+
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package bittorrent;
+
+import org.simgrid.msg.Task;
+/**
+ * Tasks sent between peers
+ */
+public class MessageTask extends Task {
+ public enum Type {
+ HANDSHAKE,
+ CHOKE,
+ UNCHOKE,
+ INTERESTED,
+ NOTINTERESTED,
+ HAVE,
+ BITFIELD,
+ REQUEST,
+ PIECE
+ };
+ public Type type;
+ public String issuerHostname;
+ public String mailbox;
+ public int peerId;
+ public char bitfield[];
+ public int index;
+ public int blockIndex;
+ public int blockLength;
+ public boolean stalled;
+ /**
+ * Constructor, builds a value-less message
+ * @param type
+ * @param issuerHostname
+ * @param mailbox
+ * @param peerId
+ */
+ public MessageTask(Type type, String issuerHostname, String mailbox, int peerId) {
+ this(type,issuerHostname,mailbox,peerId,-1,false,-1,-1);
+ }
+ /**
+ * Constructor, builds a new "have/request/piece" message
+ * @param type
+ * @param issuerHostname
+ * @param mailbox
+ * @param peerId
+ * @param index
+ */
+ public MessageTask(Type type, String issuerHostname, String mailbox, int peerId, int index) {
+ this(type,issuerHostname,mailbox,peerId,index,false,-1,-1);
+ }
+ /**
+ * Constructor, builds a new bitfield message
+ */
+ public MessageTask(Type type, String issuerHostname, String mailbox, int peerId, char bitfield[]) {
+ this(type,issuerHostname,mailbox,peerId,-1,false,-1,-1);
+ this.bitfield = bitfield;
+ }
+ /**
+ * Constructor, build a new "request" message
+ */
+ public MessageTask(Type type, String issuerHostname, String mailbox, int peerId, int index, int blockIndex, int blockLength) {
+ this(type,issuerHostname,mailbox,peerId,index,false,blockIndex,blockLength);
+ }
+ /**
+ * Constructor, build a new "piece" message
+ */
+ public MessageTask(Type type, String issuerHostname, String mailbox, int peerId, int index, boolean stalled, int blockIndex, int blockLength) {
+ this.type = type;
+ this.issuerHostname = issuerHostname;
+ this.mailbox = mailbox;
+ this.peerId = peerId;
+ this.index = index;
+ this.stalled = stalled;
+ this.blockIndex = blockIndex;
+ this.blockLength = blockLength;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package bittorrent;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map.Entry;
+
+import org.simgrid.msg.Comm;
+import org.simgrid.msg.Host;
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.MsgException;
+import org.simgrid.msg.RngStream;
+import org.simgrid.msg.Process;
+import org.simgrid.msg.Task;
+
+import bittorrent.Connection;
+
+/**
+ * Main class for peers execution
+ */
+public class Peer extends Process {
+ protected int round = 0;
+
+ protected double beginReceiveTime;
+ protected double deadline;
+
+ protected static RngStream stream = new RngStream();
+
+ protected int id;
+ protected String mailbox;
+ protected String mailboxTracker;
+ protected String hostname;
+ protected int pieces = 0;
+ protected char[] bitfield = new char[Common.FILE_PIECES];
+ protected char[][] bitfieldBlocks = new char[Common.FILE_PIECES][Common.PIECES_BLOCKS];
+
+ protected short[] piecesCount = new short[Common.FILE_PIECES];
+
+ protected int piecesRequested = 0;
+
+ protected ArrayList<Integer> currentPieces = new ArrayList<Integer>();
+ protected int currentPiece = -1;
+
+ protected HashMap<Integer, Connection> activePeers = new HashMap<Integer, Connection>();
+ protected HashMap<Integer, Connection> peers = new HashMap<Integer, Connection>();
+
+ protected Comm commReceived = null;
+
+ public Peer(Host host, String name, String[]args) {
+ super(host,name,args);
+ }
+
+ @Override
+ public void main(String[] args) throws MsgException {
+ //Check arguments
+ if (args.length != 3 && args.length != 2) {
+ Msg.info("Wrong number of arguments");
+ }
+ if (args.length == 3) {
+ init(Integer.valueOf(args[0]),true);
+ }
+ else {
+ init(Integer.valueOf(args[0]),false);
+ }
+ //Retrieve the deadline
+ deadline = Double.valueOf(args[1]);
+ if (deadline < 0) {
+ Msg.info("Wrong deadline supplied");
+ return;
+ }
+ Msg.info("Hi, I'm joining the network with id " + id);
+ //Getting peer data from the tracker
+ if (getPeersData()) {
+ Msg.debug("Got " + peers.size() + " peers from the tracker");
+ Msg.debug("Here is my current status: " + getStatus());
+ beginReceiveTime = Msg.getClock();
+ if (hasFinished()) {
+ pieces = Common.FILE_PIECES;
+ sendHandshakeAll();
+ seedLoop();
+ }
+ else {
+ leechLoop();
+ seedLoop();
+ }
+ }
+ else {
+ Msg.info("Couldn't contact the tracker.");
+ }
+ Msg.info("Here is my current status: " + getStatus());
+ }
+ /**
+ * Peer main loop when it is leeching.
+ */
+ private void leechLoop() {
+ double nextChokedUpdate = Msg.getClock() + Common.UPDATE_CHOKED_INTERVAL;
+ Msg.debug("Start downloading.");
+ /**
+ * Send a "handshake" message to all the peers it got
+ * (it couldn't have gotten more than 50 peers anyway)
+ */
+ sendHandshakeAll();
+ //Wait for at least one "bitfield" message.
+ waitForPieces();
+ Msg.debug("Starting main leech loop");
+ while (Msg.getClock() < deadline && pieces < Common.FILE_PIECES) {
+ if (commReceived == null) {
+ commReceived = Task.irecv(mailbox);
+ }
+ try {
+ if (commReceived.test()) {
+ handleMessage(commReceived.getTask());
+ commReceived = null;
+ }
+ else {
+ //If the user has a pending interesting
+ if (currentPiece != -1) {
+ sendInterestedToPeers();
+ }
+ else {
+ if (currentPieces.size() < Common.MAX_PIECES) {
+ updateCurrentPiece();
+ }
+ }
+ //We don't execute the choke algorithm if we don't already have a piece
+ if (Msg.getClock() >= nextChokedUpdate && pieces > 0) {
+ updateChokedPeers();
+ nextChokedUpdate += Common.UPDATE_CHOKED_INTERVAL;
+ }
+ else {
+ waitFor(1);
+ }
+ }
+ }
+ catch (MsgException e) {
+ commReceived = null;
+ }
+ }
+ }
+
+ /**
+ * Peer main loop when it is seeding
+ */
+ private void seedLoop() {
+ double nextChokedUpdate = Msg.getClock() + Common.UPDATE_CHOKED_INTERVAL;
+ Msg.debug("Start seeding.");
+ //start the main seed loop
+ while (Msg.getClock() < deadline) {
+ if (commReceived == null) {
+ commReceived = Task.irecv(mailbox);
+ }
+ try {
+ if (commReceived.test()) {
+ handleMessage(commReceived.getTask());
+ commReceived = null;
+ }
+ else {
+ if (Msg.getClock() >= nextChokedUpdate) {
+ updateChokedPeers();
+ //TODO: Change the choked peer algorithm when seeding
+ nextChokedUpdate += Common.UPDATE_CHOKED_INTERVAL;
+ }
+ else {
+ waitFor(1);
+ }
+ }
+ }
+ catch (MsgException e) {
+ commReceived = null;
+ }
+
+ }
+ }
+
+ /**
+ * Initialize the various peer data
+ * @param id id of the peer to take in the network
+ * @param seed indicates if the peer is a seed
+ */
+ private void init(int id, boolean seed) {
+ this.id = id;
+ this.mailbox = Integer.toString(id);
+ this.mailboxTracker = "tracker_" + Integer.toString(id);
+ if (seed) {
+ for (int i = 0; i < bitfield.length; i++) {
+ bitfield[i] = '1';
+ for (int j = 0; j < bitfieldBlocks[i].length; j++) {
+ bitfieldBlocks[i][j] = '1';
+ }
+ }
+ }
+ else {
+ for (int i = 0; i < bitfield.length; i++) {
+ bitfield[i] = '0';
+ for (int j = 0; j < bitfieldBlocks[i].length; j++) {
+ bitfieldBlocks[i][j] = '0' ;
+ }
+ }
+ }
+ this.hostname = host.getName();
+ }
+ /**
+ * Retrieves the peer list from the tracker
+ */
+ private boolean getPeersData() {
+
+ boolean success = false, sendSuccess = false;
+ double timeout = Msg.getClock() + Common.GET_PEERS_TIMEOUT;
+ //Build the task to send to the tracker
+ TrackerTask taskSend = new TrackerTask(hostname, mailboxTracker, id);
+
+ while (!sendSuccess && Msg.getClock() < timeout) {
+ try {
+ Msg.debug("Sending a peer request to the tracker.");
+ taskSend.send(Common.TRACKER_MAILBOX,Common.GET_PEERS_TIMEOUT);
+ sendSuccess = true;
+ }
+ catch (MsgException e) {
+
+ }
+ }
+ while (!success && Msg.getClock() < timeout) {
+ commReceived = Task.irecv(this.mailboxTracker);
+ try {
+ commReceived.waitCompletion(Common.GET_PEERS_TIMEOUT);
+ if (commReceived.getTask() instanceof TrackerTask) {
+ TrackerTask task = (TrackerTask)commReceived.getTask();
+ for (Integer peerId: task.peers) {
+ if (peerId != this.id) {
+ peers.put(peerId, new Connection(peerId));
+ }
+ }
+ success = true;
+ }
+ }
+ catch (MsgException e) {
+
+ }
+ commReceived = null;
+ }
+ commReceived = null;
+ return success;
+ }
+ /**
+ * Handle a received message sent by another peer
+ * @param task task received.
+ */
+ void handleMessage(Task task) {
+ MessageTask message = (MessageTask)task;
+ Connection remotePeer = peers.get(message.peerId);
+ switch (message.type) {
+ case HANDSHAKE:
+ Msg.debug("Received a HANDSHAKE message from " + message.mailbox);
+ //Check if the peer is in our connection list
+ if (remotePeer == null) {
+ peers.put(message.peerId, new Connection(message.peerId));
+ sendHandshake(message.mailbox);
+ }
+ //Send our bitfield to the pair
+ sendBitfield(message.mailbox);
+ break;
+ case BITFIELD:
+ Msg.debug("Received a BITFIELD message from " + message.peerId + " (" + message.issuerHostname + ")");
+ //update the pieces list
+ updatePiecesCountFromBitfield(message.bitfield);
+ //Update the current piece
+ if (currentPiece == -1 && pieces < Common.FILE_PIECES && currentPieces.size() < Common.MAX_PIECES) {
+ updateCurrentPiece();
+ }
+ remotePeer.bitfield = message.bitfield.clone();
+ break;
+ case INTERESTED:
+ Msg.debug("Received an INTERESTED message from " + message.peerId + " (" + message.issuerHostname + ")");
+ assert remotePeer != null;
+ remotePeer.interested = true;
+ break;
+ case NOTINTERESTED:
+ Msg.debug("Received a NOTINTERESTED message from " + message.peerId + " (" + message.issuerHostname + ")");
+ assert remotePeer != null;
+ remotePeer.interested = false;
+ break;
+ case UNCHOKE:
+ Msg.debug("Received an UNCHOKE message from " + message.peerId + "(" + message.issuerHostname + ")");
+ assert remotePeer != null;
+ remotePeer.chokedDownload = false;
+ activePeers.put(remotePeer.id,remotePeer);
+ sendRequestsToPeer(remotePeer);
+ break;
+ case CHOKE:
+ Msg.debug("Received a CHOKE message from " + message.peerId + " (" + message.issuerHostname + ")");
+ assert remotePeer != null;
+ remotePeer.chokedDownload = true;
+ activePeers.remove(remotePeer.id);
+ break;
+ case HAVE:
+ if (remotePeer.bitfield == null) {
+ return;
+ }
+ Msg.debug("Received a HAVE message from " + message.peerId + " (" + message.issuerHostname + ")");
+ assert message.index >= 0 && message.index < Common.FILE_PIECES;
+ assert remotePeer.bitfield != null;
+ remotePeer.bitfield[message.index] = '1';
+ piecesCount[message.index]++;
+ //Send interested message to the peer if he has what we want
+ if (!remotePeer.amInterested && currentPieces.contains(message.index) ) {
+ remotePeer.amInterested = true;
+ sendInterested(remotePeer.mailbox);
+ }
+
+ if (currentPieces.contains(message.index)) {
+ int blockIndex = getFirstBlock(message.index);
+ int blockLength = Common.PIECES_BLOCKS - blockIndex ;
+ blockLength = blockLength > Common.BLOCKS_REQUESTED ? Common.BLOCKS_REQUESTED : blockLength;
+ sendRequest(message.mailbox,message.index,blockIndex,blockLength);
+ }
+ break;
+ case REQUEST:
+ assert message.index >= 0 && message.index < Common.FILE_PIECES;
+ if (!remotePeer.chokedUpload) {
+ Msg.debug("Received a REQUEST from " + message.peerId + "(" + message.issuerHostname + ") for " + message.peerId);
+ if (bitfield[message.index] == '1') {
+ sendPiece(message.mailbox,message.index,false,message.blockIndex,message.blockLength);
+ }
+ else {
+ Msg.debug("Received a REQUEST from " + message.peerId + " (" + message.issuerHostname + ") but he is choked" );
+ }
+ }
+ break;
+ case PIECE:
+ if (message.stalled) {
+ Msg.debug("The received piece " + message.index + " from " + message.peerId + " (" + message.issuerHostname + ") is stalled");
+ }
+ else {
+ Msg.debug("Received piece " + message.index + " from " + message.peerId + " (" + message.issuerHostname + ")");
+ if (bitfield[message.index] == '0') {
+ updateBitfieldBlocks(message.index,message.blockIndex,message.blockLength);
+ if (pieceComplete(message.index)) {
+ piecesRequested--;
+ //Removing the piece from our piece list.
+ if (!currentPieces.remove((Object)Integer.valueOf(message.index))) {
+ }
+ //Setting the fact that we have the piece
+ bitfield[message.index] = '1';
+ pieces++;
+ Msg.debug("My status is now " + getStatus());
+ //Sending the information to all the peers we are connected to
+ sendHave(message.index);
+ //sending UNINTERESTED to peers that doesn't have what we want.
+ updateInterestedAfterReceive();
+ }
+ }
+ else {
+ Msg.debug("However, we already have it.");
+ }
+ }
+ break;
+ }
+ if (remotePeer != null) {
+ remotePeer.addSpeedValue(1 / (Msg.getClock() - beginReceiveTime));
+ }
+ beginReceiveTime = Msg.getClock();
+ }
+ /**
+ * Wait for the node to receive interesting bitfield messages (ie: non empty)
+ * to be received
+ */
+ void waitForPieces() {
+ boolean finished = false;
+ while (Msg.getClock() < deadline && !finished) {
+ if (commReceived == null) {
+ commReceived = Task.irecv(mailbox);
+ }
+ try {
+ commReceived.waitCompletion(Common.TIMEOUT_MESSAGE);
+ handleMessage(commReceived.getTask());
+ if (currentPiece != -1) {
+ finished = true;
+ }
+ commReceived = null;
+ }
+ catch (MsgException e) {
+ commReceived = null;
+ }
+ }
+ }
+
+ private boolean hasFinished() {
+ for (int i = 0; i < bitfield.length; i++) {
+ if (bitfield[i] == '1') {
+ return true;
+ }
+ }
+ return false;
+ }
+ /**
+ * Updates the list of who has a piece from a bitfield
+ * @param bitfield bitfield
+ */
+ private void updatePiecesCountFromBitfield(char bitfield[]) {
+ for (int i = 0; i < Common.FILE_PIECES; i++) {
+ if (bitfield[i] == '1') {
+ piecesCount[i]++;
+ }
+ }
+ }
+ /**
+ * Update the piece the peer is currently interested in.
+ * There is two cases (as described in "Bittorrent Architecture Protocol", Ryan Toole :
+ * If the peer has less than 3 pieces, he chooses a piece at random.
+ * If the peer has more than pieces, he downloads the pieces that are the less
+ * replicated
+ */
+ void updateCurrentPiece() {
+ if (currentPieces.size() >= (Common.FILE_PIECES - pieces)) {
+ return;
+ }
+ if (true || pieces < 3) {
+ int i = 0, peerPiece;
+ do {
+ currentPiece = stream.randInt(0,Common.FILE_PIECES - 1);
+ i++;
+ } while (!(bitfield[currentPiece] == '0' && !currentPieces.contains(currentPiece)));
+ }
+ else {
+ //trivial min algorithm.
+ //TODO
+ }
+ currentPieces.add(currentPiece);
+ Msg.debug("New interested piece: " + currentPiece);
+ assert currentPiece >= 0 && currentPiece < Common.FILE_PIECES;
+ }
+ /**
+ * Update the list of current choked and unchoked peers, using the
+ * choke algorithm
+ */
+ private void updateChokedPeers() {
+ round = (round + 1) % 3;
+ if (peers.size() == 0) {
+ return;
+ }
+ //remove a peer from the list
+ Iterator<Entry<Integer, Connection>> it = activePeers.entrySet().iterator();
+ if (it.hasNext()) {
+ Entry<Integer,Connection> e = it.next();
+ Connection peerChoked = e.getValue();
+ peerChoked.chokedUpload = true;
+ sendChoked(peerChoked.mailbox);
+ activePeers.remove(e.getKey());
+ }
+ Connection peerChoosed = null;
+ //Separate the case from when the peer is seeding.
+ if (pieces == Common.FILE_PIECES) {
+ //Find the last unchoked peer.
+ double unchokeTime = deadline + 1;
+ for (Connection connection : peers.values()) {
+ if (connection.lastUnchoke < unchokeTime && connection.interested) {
+ peerChoosed = connection;
+ unchokeTime = connection.lastUnchoke;
+ }
+ }
+ }
+ else {
+ //Random optimistic unchoking
+ if (round == 0) {
+ int j = 0, i;
+ do {
+ i = 0;
+ int idChosen = stream.randInt(0,peers.size() - 1);
+ for (Connection connection : peers.values()) {
+ if (i == idChosen) {
+ peerChoosed = connection;
+ break;
+ }
+ i++;
+ } //TODO: Not really the best way ever
+ if (!peerChoosed.interested) {
+ peerChoosed = null;
+ }
+ j++;
+ } while (peerChoosed == null && j <
+ Common.MAXIMUM_PEERS);
+ }
+ else {
+ Connection fastest = null;
+ double fastestSpeed = 0;
+ for (Connection c : peers.values()) {
+ if (c.peerSpeed > fastestSpeed && c.interested && c.chokedUpload) {
+ fastest = c;
+ fastestSpeed = c.peerSpeed;
+ }
+ }
+ peerChoosed = fastest;
+ }
+ }
+ if (peerChoosed != null) {
+ activePeers.put(peerChoosed.id,peerChoosed);
+ peerChoosed.chokedUpload = false;
+ peerChoosed.lastUnchoke = Msg.getClock();
+ sendUnchoked(peerChoosed.mailbox);
+ }
+ }
+ /**
+ * Updates our "interested" state about peers: send "not interested" to peers
+ * that don't have any more pieces we want.
+ */
+ private void updateInterestedAfterReceive() {
+ boolean interested;
+ for (Connection connection : peers.values()) {
+ interested = false;
+ if (connection.amInterested) {
+ for (Integer piece : currentPieces) {
+ if (connection.bitfield[piece] == '1') {
+ interested = true;
+ break;
+ }
+ }
+ if (!interested) {
+ connection.amInterested = false;
+ sendNotInterested(connection.mailbox);
+ }
+ }
+ }
+ }
+ private void updateBitfieldBlocks(int index, int blockIndex, int blockLength) {
+ for (int i = blockIndex; i < (blockIndex + blockLength); i++) {
+ bitfieldBlocks[index][i] = '1';
+ }
+ }
+ /**
+ * Returns if a piece is complete in the peer's bitfield.
+ * @param index the index of the piece.
+ */
+ private boolean pieceComplete(int index) {
+ for (int i = 0; i < bitfieldBlocks[index].length; i++) {
+ if (bitfieldBlocks[index][i] == '0') {
+ return false;
+ }
+ }
+ return true;
+ }
+ /**
+ * Returns the first block of a piece that we don't have.
+ */
+ private int getFirstBlock(int piece) {
+ int blockIndex = -1;
+ for (int i = 0; i < Common.PIECES_BLOCKS; i++) {
+ if (bitfieldBlocks[piece][i] == '0') {
+ blockIndex = i;
+ break;
+ }
+ }
+ return blockIndex;
+ }
+ /**
+ * Send request messages to a peer that have unchoked us
+ * @param remotePeer peer data to the peer we want to send the request
+ */
+ private void sendRequestsToPeer(Connection remotePeer) {
+ if (remotePeer.bitfield == null) {
+ return;
+ }
+ for (Integer piece : currentPieces) {
+ //Getting the block to send.
+ int blockIndex = -1, blockLength = 0;
+ blockIndex = getFirstBlock(piece);
+ blockLength = Common.PIECES_BLOCKS - blockIndex ;
+ blockLength = blockLength > Common.BLOCKS_REQUESTED ? Common.BLOCKS_REQUESTED : blockLength;
+ if (remotePeer.bitfield[piece] == '1') {
+ sendRequest(remotePeer.mailbox, piece, blockIndex, blockLength);
+ }
+ }
+ }
+ /**
+ * Find the peers that have the current interested piece and send them
+ * the "interested" message
+ */
+ private void sendInterestedToPeers() {
+ if (currentPiece == -1) {
+ return;
+ }
+ for (Connection connection : peers.values()) {
+ if (connection.bitfield != null && connection.bitfield[currentPiece] == '1' && !connection.amInterested) {
+ connection.amInterested = true;
+ MessageTask task = new MessageTask(MessageTask.Type.INTERESTED, hostname, this.mailbox, this.id);
+ task.dsend(connection.mailbox);
+ }
+ }
+ currentPiece = -1;
+ piecesRequested++;
+ }
+ /**
+ * Send a "interested" message to a peer.
+ */
+ private void sendInterested(String mailbox) {
+ MessageTask task = new MessageTask(MessageTask.Type.INTERESTED, hostname, this.mailbox, this.id);
+ task.dsend(mailbox);
+ }
+ /**
+ * Send a "not interested" message to a peer
+ * @param mailbox mailbox destination mailbox
+ */
+ private void sendNotInterested(String mailbox) {
+ MessageTask task = new MessageTask(MessageTask.Type.NOTINTERESTED, hostname, this.mailbox, this.id);
+ task.dsend(mailbox);
+ }
+ /**
+ * Send a handshake message to all the peers the peer has.
+ * @param peer peer data
+ */
+ private void sendHandshakeAll() {
+ for (Connection remotePeer : peers.values()) {
+ MessageTask task = new MessageTask(MessageTask.Type.HANDSHAKE, hostname, mailbox,
+ id);
+ task.dsend(remotePeer.mailbox);
+ }
+ }
+ /**
+ * Send a "handshake" message to an user
+ * @param mailbox mailbox where to we send the message
+ */
+ private void sendHandshake(String mailbox) {
+ Msg.debug("Sending a HANDSHAKE to " + mailbox);
+ MessageTask task = new MessageTask(MessageTask.Type.HANDSHAKE, hostname, this.mailbox, this.id);
+ task.dsend(mailbox);
+ }
+ /**
+ * Send a "choked" message to a peer
+ */
+ private void sendChoked(String mailbox) {
+ Msg.debug("Sending a CHOKE to " + mailbox);
+ MessageTask task = new MessageTask(MessageTask.Type.CHOKE, hostname, this.mailbox, this.id);
+ task.dsend(mailbox);
+ }
+ /**
+ * Send a "unchoked" message to a peer
+ */
+ private void sendUnchoked(String mailbox) {
+ Msg.debug("Sending a UNCHOKE to " + mailbox);
+ MessageTask task = new MessageTask(MessageTask.Type.UNCHOKE, hostname, this.mailbox, this.id);
+ task.dsend(mailbox);
+ }
+ /**
+ * Send a "HAVE" message to all peers we are connected to
+ */
+ private void sendHave(int piece) {
+ Msg.debug("Sending HAVE message to all my peers");
+ for (Connection remotePeer : peers.values()) {
+ MessageTask task = new MessageTask(MessageTask.Type.HAVE, hostname, this.mailbox, this.id, piece);
+ task.dsend(remotePeer.mailbox);
+ }
+ }
+ /**
+ * Send a bitfield message to all the peers the peer has.
+ * @param peer peer data
+ */
+ private void sendBitfield(String mailbox) {
+ Msg.debug("Sending a BITFIELD to " + mailbox);
+ MessageTask task = new MessageTask(MessageTask.Type.BITFIELD, hostname, this.mailbox, this.id, this.bitfield);
+ task.dsend(mailbox);
+ }
+ /**
+ * Send a "request" message to a pair, containing a request for a piece
+ */
+ private void sendRequest(String mailbox, int piece, int blockIndex, int blockLength) {
+ Msg.debug("Sending a REQUEST to " + mailbox + " for piece " + piece + " and blocks " + blockIndex + "," + (blockIndex + blockLength));
+ MessageTask task = new MessageTask(MessageTask.Type.REQUEST, hostname, this.mailbox, this.id, piece, blockIndex, blockLength);
+ task.dsend(mailbox);
+ }
+ /**
+ * Send a "piece" message to a pair, containing a piece of the file
+ */
+ private void sendPiece(String mailbox, int piece, boolean stalled, int blockIndex, int blockLength) {
+ Msg.debug("Sending the PIECE " + piece + " to " + mailbox);
+ MessageTask task = new MessageTask(MessageTask.Type.PIECE, hostname, this.mailbox, this.id, piece, stalled, blockIndex, blockLength);
+ task.dsend(mailbox);
+ }
+
+ private String getStatus() {
+ String s = "";
+ for (int i = 0; i < Common.FILE_PIECES; i++) {
+ s = s + bitfield[i];
+ }
+ return s;
+ }
+}
+
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package bittorrent;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.simgrid.msg.Comm;
+import org.simgrid.msg.Host;
+import org.simgrid.msg.Process;
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.MsgException;
+import org.simgrid.msg.Task;
+
+import org.simgrid.msg.RngStream;
+/**
+ * Tracker, handle requests from peers.
+ */
+public class Tracker extends Process {
+ protected RngStream stream;
+ /**
+ * Peers list
+ */
+ protected ArrayList<Integer> peersList;
+ /**
+ * End time for the simulation
+ */
+ protected double deadline;
+ /**
+ * Current comm received
+ */
+ protected Comm commReceived = null;
+
+ public Tracker(Host host, String name, String[]args) {
+ super(host,name,args);
+ }
+
+ @Override
+ public void main(String[] args) throws MsgException {
+ if (args.length != 1) {
+ Msg.info("Wrong number of arguments for the tracker.");
+ return;
+ }
+ //Build the RngStream object for randomness
+ stream = new RngStream("tracker");
+ //Retrieve the end time
+ deadline = Double.valueOf(args[0]);
+ //Building peers array
+ peersList = new ArrayList<Integer>();
+
+ Msg.info("Tracker launched.");
+ while (Msg.getClock() < deadline) {
+ if (commReceived == null) {
+ commReceived = Task.irecv(Common.TRACKER_MAILBOX);
+ }
+ try {
+ if (commReceived.test()) {
+ Task task = commReceived.getTask();
+ if (task instanceof TrackerTask) {
+ TrackerTask tTask = (TrackerTask)task;
+ //Sending peers to the peer
+ int nbPeers = 0;
+ while (nbPeers < Common.MAXIMUM_PEERS && nbPeers < peersList.size()) {
+ int nextPeer;
+ do {
+ nextPeer = stream.randInt(0, peersList.size() - 1);
+ } while (tTask.peers.contains(nextPeer));
+ tTask.peers.add(peersList.get(nextPeer));
+ nbPeers++;
+ }
+ //Adding the peer to our list
+ peersList.add(tTask.peerId);
+ tTask.type = TrackerTask.Type.ANSWER;
+ //Setting the interval
+ tTask.interval = Common.TRACKER_QUERY_INTERVAL;
+ //Sending the task back to the peer
+ tTask.dsend(tTask.mailbox);
+ }
+ commReceived = null;
+ }
+ else {
+ waitFor(1);
+ }
+ }
+ catch (MsgException e) {
+ commReceived = null;
+ }
+ }
+ Msg.info("Tracker is leaving");
+ }
+
+}
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package bittorrent;
+import java.util.ArrayList;
+
+import org.simgrid.msg.Task;
+
+/**
+ * Task exchanged between the tracker
+ * and the peers.
+ */
+public class TrackerTask extends Task {
+ /**
+ * Type of the tasks
+ */
+ public enum Type {
+ REQUEST,
+ ANSWER
+ };
+ public Type type;
+ public String hostname;
+ public String mailbox;
+ public int peerId;
+ public int uploaded;
+ public int downloaded;
+ public int left;
+ public double interval;
+ public ArrayList<Integer> peers;
+
+ public TrackerTask(String hostname, String mailbox, int peerId) {
+ this(hostname, mailbox, peerId, 0, 0, Common.FILE_SIZE);
+ }
+ public TrackerTask(String hostname, String mailbox, int peerId, int uploaded, int downloaded, int left) {
+ super("", 0, Common.TRACKER_COMM_SIZE);
+ this.type = Type.REQUEST;
+ this.hostname = hostname;
+ this.mailbox = mailbox;
+ this.peerId = peerId;
+ this.uploaded = uploaded;
+ this.downloaded = downloaded;
+ this.left = left;
+ this.peers = new ArrayList<Integer>();
+ }
+
+}
--- /dev/null
+#! ./tesh
+
+! output sort
+
+$ java -cp ${classpath:=.} bittorrent/Bittorrent ./platform.xml ./bittorrent/bittorrent.xml
+> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [5000.832370] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
+> [Boivin:bittorrent.Peer:(2) 0.000000] [jmsg/INFO] Hi, I'm joining the network with id 2
+> [Boivin:bittorrent.Peer:(2) 5000.048881] [jmsg/INFO] Here is my current status: 1111111111
+> [Disney:bittorrent.Peer:(6) 0.000000] [jmsg/INFO] Hi, I'm joining the network with id 6
+> [Disney:bittorrent.Peer:(6) 5000.131405] [jmsg/INFO] Here is my current status: 1111111111
+> [Geoff:bittorrent.Peer:(5) 0.000000] [jmsg/INFO] Hi, I'm joining the network with id 5
+> [Geoff:bittorrent.Peer:(5) 5000.764583] [jmsg/INFO] Here is my current status: 1111111111
+> [Jacquelin:bittorrent.Tracker:(1) 0.000000] [jmsg/INFO] Tracker launched.
+> [Jacquelin:bittorrent.Tracker:(1) 3000.000000] [jmsg/INFO] Tracker is leaving
+> [Jean_Yves:bittorrent.Peer:(3) 0.000000] [jmsg/INFO] Hi, I'm joining the network with id 3
+> [Jean_Yves:bittorrent.Peer:(3) 5000.832370] [jmsg/INFO] Here is my current status: 1111111111
+> [McGee:bittorrent.Peer:(8) 0.000000] [jmsg/INFO] Hi, I'm joining the network with id 8
+> [McGee:bittorrent.Peer:(8) 5000.783574] [jmsg/INFO] Here is my current status: 1111111111
+> [TeX:bittorrent.Peer:(4) 0.000000] [jmsg/INFO] Hi, I'm joining the network with id 4
+> [TeX:bittorrent.Peer:(4) 5000.304959] [jmsg/INFO] Here is my current status: 1111111111
+> [iRMX:bittorrent.Peer:(7) 0.000000] [jmsg/INFO] Hi, I'm joining the network with id 7
+> [iRMX:bittorrent.Peer:(7) 5000.729205] [jmsg/INFO] Here is my current status: 1111111111
+
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+
+ <process host="Jacquelin" function="bittorrent.Tracker">
+ <argument value="3000" />
+ </process>
+
+ <process host="Boivin" function="bittorrent.Peer">
+ <argument value="00000002"/> <!-- my id -->
+ <argument value="5000" /> <!-- end time -->
+ <argument value="1" /> <!-- indicates if the bittorrent.Peer is a seed at the begining of the simulation -->
+ </process>
+ <process host="Jean_Yves" function="bittorrent.Peer">
+ <argument value="00000003"/> <!-- my id -->
+ <argument value="5000" /> <!-- end time -->
+ </process>
+ <process host="TeX" function="bittorrent.Peer">
+ <argument value="00000004"/> <!-- my id -->
+ <argument value="5000" /> <!-- end time -->
+ </process>
+ <process host="Geoff" function="bittorrent.Peer">
+ <argument value="00000005"/> <!-- my id -->
+ <argument value="5000" /> <!-- end time -->
+ </process>
+ <process host="Disney" function="bittorrent.Peer">
+ <argument value="00000006"/> <!-- my id -->
+ <argument value="5000" /> <!-- end time -->
+ </process>
+ <process host="iRMX" function="bittorrent.Peer">
+ <argument value="00000007"/> <!-- my id -->
+ <argument value="5000" /> <!-- end time -->
+ </process>
+ <process host="McGee" function="bittorrent.Peer">
+ <argument value="00000008"/> <!-- my id -->
+ <argument value="5000" /> <!-- end time -->
+ </process>
+
+</platform>
--- /dev/null
+#!/usr/bin/python
+
+# This script generates a specific deployment file for the Bittorrent example.
+# It assumes that the platform will be a cluster.
+# Usage: python generate.py nb_nodes nb_bits end_date percentage
+# Example: python generate.py 10000 5000
+
+import sys, random
+
+if len(sys.argv) != 4:
+ print("Usage: python generate.py nb_nodes end_date seed_percentage > deployment_file.xml")
+ sys.exit(1)
+
+nb_nodes = int(sys.argv[1])
+end_date = int(sys.argv[2])
+seed_percentage = int(sys.argv[3]);
+
+nb_bits = 24
+max_id = 2 ** nb_bits - 1
+all_ids = [42]
+
+sys.stdout.write("<?xml version='1.0'?>\n"
+"<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n"
+"<platform version=\"3\">\n"
+" <process host=\"c-0.me\" function=\"bittorrent.Tracker\"><argument value=\"%d\"/></process>\n" % end_date)
+
+for i in range(1, nb_nodes):
+
+ ok = False
+ while not ok:
+ my_id = random.randint(0, max_id)
+ ok = not my_id in all_ids
+ start_date = i * 10
+ line = " <process host=\"c-%d.me\" function=\"bittorrent.Peer\"><argument value=\"%d\" /><argument value=\"%d\" />" % (i, my_id, end_date)
+ if random.randint(0,100) < seed_percentage:
+ line += "<argument value=\"1\" />"
+ line += "</process>\n";
+ sys.stdout.write(line)
+ all_ids.append(my_id)
+sys.stdout.write("</platform>")
+
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package chord;
+
+import org.simgrid.msg.Msg;
+
+public class Chord {
+ public static void main(String[] args) {
+ /* initialize the MSG simulation. Must be done before anything else (even logging). */
+ Msg.init(args);
+ if(args.length < 2) {
+ Msg.info("Usage : Chord platform_file deployment_file");
+ Msg.info("example : Chord platform.xml deployment.xml");
+ System.exit(1);
+ }
+ /* construct the platform and deploy the application */
+ Msg.createEnvironment(args[0]);
+ Msg.deployApplication(args[1]);
+
+ /* execute the simulation. */
+ Msg.run();
+ }
+}
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package chord;
+
+import org.simgrid.msg.Task;
+
+import chord.Common;
+/**
+ * Base class for all Tasks in Chord.
+ */
+public class ChordTask extends Task {
+ public String issuerHostName;
+ public String answerTo;
+ public ChordTask() {
+ this(null,null);
+ }
+ public ChordTask(String issuerHostName, String answerTo) {
+ super(null, Common.COMP_SIZE, Common.COMM_SIZE);
+ this.issuerHostName = issuerHostName;
+ this.answerTo = answerTo;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package chord;
+/**
+ * Common constants used over the simulation
+ */
+public class Common {
+ public final static int COMM_SIZE = 10;
+ public final static int COMP_SIZE = 0;
+
+ public final static int NB_BITS = 24;
+ public final static int NB_KEYS = 16777216;
+ public final static int TIMEOUT = 50;
+ public final static int MAX_SIMULATION_TIME = 1000;
+ public final static int PERIODIC_STABILIZE_DELAY = 20;
+ public final static int PERIODIC_FIX_FINGERS_DELAY = 120;
+ public final static int PERIODIC_CHECK_PREDECESSOR_DELAY = 120;
+ public final static int PERIODIC_LOOKUP_DELAY = 10;
+}
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package chord;
+
+public class FindSuccessorAnswerTask extends ChordTask {
+ public int answerId;
+
+ public FindSuccessorAnswerTask(String issuerHostname, String answerTo, int answerId) {
+ super(issuerHostname,answerTo);
+ this.answerId = answerId;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package chord;
+
+public class FindSuccessorTask extends ChordTask {
+ public int requestId;
+
+ public FindSuccessorTask(String issuerHostname, String answerTo, int requestId) {
+ super(issuerHostname, answerTo);
+ this.requestId = requestId;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package chord;
+
+public class GetPredecessorAnswerTask extends ChordTask {
+ public int answerId;
+ public GetPredecessorAnswerTask(String issuerHostname, String answerTo, int answerId) {
+ super(issuerHostname,answerTo);
+ this.answerId = answerId;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package chord;
+
+public class GetPredecessorTask extends ChordTask {
+ public GetPredecessorTask(String issuerHostName, String answerTo) {
+ super(issuerHostName, answerTo);
+ }
+}
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package chord;
+
+import org.simgrid.msg.Comm;
+import org.simgrid.msg.Host;
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.MsgException;
+import org.simgrid.msg.Process;
+import org.simgrid.msg.Task;
+import org.simgrid.msg.TimeoutException;
+/**
+ * Node data
+ */
+public class Node extends Process {
+ /**
+ * Node id
+ */
+ protected int id;
+ /**
+ * Node mailbox
+ */
+ protected String mailbox;
+ /**
+ * Predecessor id
+ */
+ protected int predId;
+ /**
+ * Predecessor mailbox
+ */
+ protected String predMailbox;
+ /**
+ * Index of the next finger to fix
+ */
+ protected int nextFingerToFix;
+ /**
+ * Current communication
+ */
+ protected Comm commReceive;
+ /**
+ * Last time I changed a finger or my predecessor
+ */
+ protected double lastChangeDate;
+ /**
+ * Node fingers
+ */
+ int fingers[];
+ /**
+ * Constructor
+ */
+ public Node(Host host, String name, String[] args) {
+ super(host,name,args);
+ }
+ @Override
+ public void main(String[] args) throws MsgException {
+ if (args.length != 2 && args.length != 4) {
+ Msg.info("You need to provide 2 or 4 arguments.");
+ return;
+ }
+ double initTime = Msg.getClock();
+ int i;
+ boolean joinSuccess = false;
+ double deadline;
+
+ double nextStabilizeDate = initTime + Common.PERIODIC_STABILIZE_DELAY;
+ double nextFixFingersDate = initTime + Common.PERIODIC_FIX_FINGERS_DELAY;
+ double nextCheckPredecessorDate = initTime + Common.PERIODIC_CHECK_PREDECESSOR_DELAY;
+ double nextLookupDate = initTime + Common.PERIODIC_LOOKUP_DELAY;
+
+ id = Integer.valueOf(args[0]);
+ mailbox = Integer.toString(id);
+
+ fingers = new int[Common.NB_BITS];
+ for (i = 0; i < Common.NB_BITS; i++) {
+ fingers[i] = -1;
+ setFinger(i,this.id);
+ }
+
+ //First node
+ if (args.length == 2) {
+ deadline = Integer.valueOf(args[1]);
+ create();
+ joinSuccess = true;
+ }
+ else {
+ int knownId = Integer.valueOf(args[1]);
+ deadline = Integer.valueOf(args[3]);
+ //Msg.info("Hey! Let's join the system with the id " + id + ".");
+
+ joinSuccess = join(knownId);
+ }
+ if (joinSuccess) {
+ double currentClock = Msg.getClock();
+ while (currentClock < (initTime + deadline) && currentClock < Common.MAX_SIMULATION_TIME) {
+ if (commReceive == null) {
+ commReceive = Task.irecv(this.mailbox);
+ }
+ try {
+ if (!commReceive.test()) {
+ if (currentClock >= nextStabilizeDate) {
+ stabilize();
+ nextStabilizeDate = Msg.getClock() + Common.PERIODIC_STABILIZE_DELAY;
+ }
+ else if (currentClock >= nextFixFingersDate) {
+ fixFingers();
+ nextFixFingersDate = Msg.getClock() + Common.PERIODIC_FIX_FINGERS_DELAY;
+ }
+ else if (currentClock >= nextCheckPredecessorDate) {
+ this.checkPredecessor();
+ nextCheckPredecessorDate = Msg.getClock() + Common.PERIODIC_CHECK_PREDECESSOR_DELAY;
+ }
+ else if (currentClock >= nextLookupDate) {
+ this.randomLookup();
+ nextLookupDate = Msg.getClock() + Common.PERIODIC_LOOKUP_DELAY;
+ }
+ else {
+ waitFor(5);
+ }
+ currentClock = Msg.getClock();
+ }
+ else {
+ handleTask(commReceive.getTask());
+ currentClock = Msg.getClock();
+ commReceive = null;
+
+ }
+ }
+ catch (Exception e) {
+ currentClock = Msg.getClock();
+ commReceive = null;
+ }
+
+ }
+ leave();
+ if (commReceive != null) {
+ commReceive = null;
+ }
+ }
+ else {
+ Msg.info("I couldn't join the ring");
+ }
+ }
+ void handleTask(Task task) {
+ if (task instanceof FindSuccessorTask) {
+ FindSuccessorTask fTask = (FindSuccessorTask)task;
+ Msg.debug("Receiving a 'Find Successor' request from " + fTask.issuerHostName + " for id " + fTask.requestId);
+ // is my successor the successor?
+ if (isInInterval(fTask.requestId, this.id + 1, fingers[0])) {
+ //Msg.info("Send the request to " + fTask.answerTo + " with answer " + fingers[0]);
+ FindSuccessorAnswerTask answer = new FindSuccessorAnswerTask(host.getName(), mailbox, fingers[0]);
+ answer.dsend(fTask.answerTo);
+ }
+ else {
+ // otherwise, forward the request to the closest preceding finger in my table
+ int closest = closestPrecedingNode(fTask.requestId);
+ //Msg.info("Forward the request to " + closest);
+ fTask.dsend(Integer.toString(closest));
+ }
+ }
+ else if (task instanceof GetPredecessorTask) {
+ GetPredecessorTask gTask = (GetPredecessorTask)(task);
+ Msg.debug("Receiving a 'Get Predecessor' request from " + gTask.issuerHostName);
+ GetPredecessorAnswerTask answer = new GetPredecessorAnswerTask(host.getName(), mailbox, predId);
+ answer.dsend(gTask.answerTo);
+ }
+ else if (task instanceof NotifyTask) {
+ NotifyTask nTask = (NotifyTask)task;
+ notify(nTask.requestId);
+ }
+ else {
+ Msg.debug("Ignoring unexpected task of type:" + task);
+ }
+ }
+ /**
+ * @brief Makes the current node quit the system
+ */
+ void leave() {
+ Msg.debug("Well Guys! I Think it's time for me to quit ;)");
+ quitNotify(1); //Notify my successor
+ quitNotify(-1); //Notify my predecessor.
+ // TODO ...
+ }
+ /**
+ * @brief Notifies the successor or the predecessor of the current node
+ * of the departure
+ * @param to 1 to notify the successor, -1 to notify the predecessor
+ */
+ static void quitNotify( int to) {
+ //TODO
+ }
+ /**
+ * @brief Initializes the current node as the first one of the system.
+ */
+ void create() {
+ Msg.debug("Create a new Chord ring...");
+ setPredecessor(-1);
+
+ }
+ /**
+ * Makes the current node join the ring, knowing the id of a node
+ * already in the ring
+ */
+ boolean join(int knownId) {
+ Msg.info("Joining the ring with id " + this.id + " knowing node " + knownId);
+ setPredecessor(-1);
+ int successorId = remoteFindSuccessor(knownId, this.id);
+ if (successorId == -1) {
+ Msg.info("Cannot join the ring.");
+ }
+ else {
+ setFinger(0, successorId);
+ }
+ return successorId != -1;
+ }
+
+ /**
+ * Sets the node predecessor
+ */
+ void setPredecessor(int predecessorId) {
+ if (predecessorId != predId) {
+ predId = predecessorId;
+ if (predecessorId != -1) {
+ predMailbox = Integer.toString(predId);
+ }
+ lastChangeDate = Msg.getClock();
+ }
+ }
+ /**
+ * @brief Asks another node its predecessor.
+ * @param askTo the node to ask to
+ * @return the id of its predecessor node, or -1 if the request failed
+ * (or if the node does not know its predecessor)
+ */
+ int remoteGetPredecessor(int askTo) {
+ int predecessorId = -1;
+ boolean stop = false;
+ Msg.debug("Sending a 'Get Predecessor' request to " + askTo);
+ String mailboxTo = Integer.toString(askTo);
+ GetPredecessorTask sendTask = new GetPredecessorTask(host.getName(), this.mailbox);
+ try {
+ sendTask.send(mailboxTo, Common.TIMEOUT);
+ try {
+ do {
+ if (commReceive == null) {
+ commReceive = Task.irecv(this.mailbox);
+ }
+ commReceive.waitCompletion(Common.TIMEOUT);
+ Task taskReceived = commReceive.getTask();
+ if (taskReceived instanceof GetPredecessorAnswerTask) {
+ predecessorId = ((GetPredecessorAnswerTask) taskReceived).answerId;
+ stop = true;
+ }
+ else {
+ handleTask(taskReceived);
+ }
+ commReceive = null;
+ } while (!stop);
+
+ }
+ catch (MsgException e) {
+ commReceive = null;
+ stop = true;
+ }
+ }
+ catch (MsgException e) {
+ Msg.debug("Failed to send the Get Predecessor request");
+ }
+
+
+ return predecessorId;
+ }
+ /**
+ * @brief Makes the current node find the successor node of an id.
+ * @param node the current node
+ * @param id the id to find
+ * @return the id of the successor node, or -1 if the request failed
+ */
+ int findSuccessor(int id) {
+ if (isInInterval(id, this.id + 1, fingers[0])) {
+ return fingers[0];
+ }
+
+ int closest = this.closestPrecedingNode(id);
+ return remoteFindSuccessor(closest, id);
+ }
+ /**
+ * @brief Asks another node the successor node of an id.
+ */
+ int remoteFindSuccessor(int askTo, int id) {
+ int successor = -1;
+ boolean stop = false;
+ String mailbox = Integer.toString(askTo);
+ Task sendTask = new FindSuccessorTask(host.getName(), this.mailbox, id);
+ Msg.debug("Sending a 'Find Successor' request to " + mailbox + " for id " + id);
+ try {
+ sendTask.send(mailbox, Common.TIMEOUT);
+ do {
+ if (commReceive == null) {
+ commReceive = Task.irecv(this.mailbox);
+ }
+ try {
+ commReceive.waitCompletion(Common.TIMEOUT);
+ Task task = commReceive.getTask();
+ if (task instanceof FindSuccessorAnswerTask) {
+ //TODO: Check if this this our answer.
+ FindSuccessorAnswerTask fTask = (FindSuccessorAnswerTask) task;
+ stop = true;
+ successor = fTask.answerId;
+ }
+ else {
+ handleTask(task);
+ }
+ commReceive = null;
+ }
+ catch (TimeoutException e) {
+ stop = true;
+ commReceive = null;
+ }
+ } while (!stop);
+ }
+ catch (TimeoutException e) {
+ Msg.debug("Failed to send the 'Find Successor' request");
+ }
+ catch (MsgException e) {
+ Msg.debug("Failed to receive Find Successor");
+ }
+
+ return successor;
+
+ }
+ /**
+ * @brief This function is called periodically. It checks the immediate
+ * successor of the current node.
+ */
+ void stabilize() {
+ Msg.debug("Stabilizing node");
+ int candidateId;
+ int successorId = fingers[0];
+ if (successorId != this.id){
+ candidateId = remoteGetPredecessor(successorId);
+ }
+ else {
+ candidateId = predId;
+ }
+ //This node is a candidate to become my new successor
+ if (candidateId != -1 && isInInterval(candidateId, this.id + 1, successorId - 1)) {
+ setFinger(0, candidateId);
+ }
+ if (successorId != this.id) {
+ remoteNotify(successorId, this.id);
+ }
+
+ }
+ /**
+ * \brief Notifies the current node that its predecessor may have changed.
+ * \param candidate_id the possible new predecessor
+ */
+ void notify(int predecessorCandidateId) {
+ if (predId == -1 || isInInterval(predecessorCandidateId, predId + 1, this.id - 1 )) {
+ setPredecessor(predecessorCandidateId);
+ }
+ else {
+ //Don't have to change the predecessor.
+ }
+ }
+ /**
+ * \brief Notifies a remote node that its predecessor may have changed.
+ * \param notify_id id of the node to notify
+ * \param candidate_id the possible new predecessor
+ */
+ void remoteNotify(int notifyId, int predecessorCandidateId) {
+ Msg.debug("Sending a 'Notify' request to " + notifyId);
+ Task sentTask = new NotifyTask(host.getName(), this.mailbox, predecessorCandidateId);
+ sentTask.dsend(Integer.toString(notifyId));
+ }
+ /**
+ * \brief This function is called periodically.
+ * It refreshes the finger table of the current node.
+ */
+ void fixFingers() {
+ Msg.debug("Fixing fingers");
+ int i = this.nextFingerToFix;
+ int id = this.findSuccessor(this.id + (int)Math.pow(2,i)); //FIXME: SLOW
+ if (id != -1) {
+ if (id != fingers[i]) {
+ setFinger(i, id);
+ }
+ nextFingerToFix = (i + 1) % Common.NB_BITS;
+ }
+ }
+ /**
+ * \brief This function is called periodically.
+ * It checks whether the predecessor has failed
+ */
+ void checkPredecessor() {
+ //TODO
+ }
+ /**
+ * \brief Performs a find successor request to a random id.
+ */
+ void randomLookup() {
+ int id = 1337;
+ //Msg.info("Making a lookup request for id " + id);
+ findSuccessor(id);
+ }
+
+
+
+ /**
+ * @brief Returns the closest preceding finger of an id
+ * with respect to the finger table of the current node.
+ * @param id the id to find
+ * \return the closest preceding finger of that id
+ */
+ int closestPrecedingNode(int id) {
+ int i;
+ for (i = Common.NB_BITS - 1; i >= 0; i--) {
+ if (isInInterval(fingers[i], this.id + 1, id - 1)) {
+ return fingers[i];
+ }
+ }
+ return this.id;
+ }
+ /**
+ * @brief Returns whether an id belongs to the interval [start, end].
+ *
+ * The parameters are noramlized to make sure they are between 0 and nb_keys - 1).
+ * 1 belongs to [62, 3]
+ * 1 does not belong to [3, 62]
+ * 63 belongs to [62, 3]
+ * 63 does not belong to [3, 62]
+ * 24 belongs to [21, 29]
+ * 24 does not belong to [29, 21]
+ *
+ * \param id id to check
+ * \param start lower bound
+ * \param end upper bound
+ * \return a non-zero value if id in in [start, end]
+ */
+ static boolean isInInterval(int id, int start, int end) {
+ id = normalize(id);
+ start = normalize(start);
+ end = normalize(end);
+
+ // make sure end >= start and id >= start
+ if (end < start) {
+ end += Common.NB_KEYS;
+ }
+ if (id < start) {
+ id += Common.NB_KEYS;
+ }
+ return (id <= end);
+
+ }
+ /**
+ * @brief Turns an id into an equivalent id in [0, nb_keys).
+ * @param id an id
+ * @return the corresponding normalized id
+ */
+ static int normalize(int id) {
+ return id & (Common.NB_KEYS - 1);
+ }
+ /**
+ * \brief Sets a finger of the current node.
+ * \param finger_index index of the finger to set (0 to nb_bits - 1)
+ * \param id the id to set for this finger
+ */
+ void setFinger(int fingerIndex, int id) {
+ if (id != fingers[fingerIndex]) {
+ fingers[fingerIndex] = id;
+ lastChangeDate = Msg.getClock();
+ }
+ }
+}
--- /dev/null
+/*
+ * Copyright 2006-2012. 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.
+ */
+package chord;
+
+public class NotifyTask extends ChordTask {
+ public int requestId;
+ public NotifyTask(String issuerHostname, String answerTo, int requestId) {
+ super(issuerHostname, answerTo);
+ this.requestId = requestId;
+ }
+}
--- /dev/null
+#! ./tesh
+
+! output sort
+
+$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar chord/Chord ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/chord/chord.xml
+> [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up.
+> [652.540924] [jmsg/INFO] MSG_main finished; Cleaning up the simulation...
+> [Boivin:chord.Node:(7) 0.000000] [jmsg/INFO] Joining the ring with id 8 knowing node 1
+> [Gatien:chord.Node:(1) 0.000000] [jmsg/INFO] Joining the ring with id 48 knowing node 1
+> [Geoff:chord.Node:(4) 0.000000] [jmsg/INFO] Joining the ring with id 32 knowing node 1
+> [Jean_Yves:chord.Node:(6) 0.000000] [jmsg/INFO] Joining the ring with id 14 knowing node 1
+> [McGee:chord.Node:(2) 0.000000] [jmsg/INFO] Joining the ring with id 42 knowing node 1
+> [TeX:chord.Node:(5) 0.000000] [jmsg/INFO] Joining the ring with id 21 knowing node 1
+> [iRMX:chord.Node:(3) 0.000000] [jmsg/INFO] Joining the ring with id 38 knowing node 1
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+
+ <process host="Gatien" function="chord.Node">
+ <argument value="48"/> <!-- my id -->
+ <argument value="1"/> <!-- known id -->
+ <argument value="400"/> <!-- time to sleep before it starts-->
+ <argument value ="600"/> <!-- deadline -->
+ </process>
+
+ <process host="McGee" function="chord.Node">
+ <argument value="42"/> <!-- my id -->
+ <argument value="1"/> <!-- known id -->
+ <argument value="300"/> <!-- time to sleep before it starts-->
+ <argument value ="600"/> <!-- deadline -->
+ </process>
+
+ <process host="iRMX" function="chord.Node">
+ <argument value="38"/> <!-- my id -->
+ <argument value="1"/> <!-- known id -->
+ <argument value="200"/> <!-- time to sleep before it starts-->
+ <argument value ="600"/> <!-- deadline -->
+ </process>
+
+ <process host="Geoff" function="chord.Node">
+ <argument value="32"/> <!-- my id -->
+ <argument value="1"/> <!-- known id -->
+ <argument value="100"/> <!-- time to sleep before it starts-->
+ <argument value ="600"/> <!-- deadline -->
+ </process>
+
+ <process host="TeX" function="chord.Node">
+ <argument value="21"/> <!-- my id -->
+ <argument value="1"/> <!-- known id -->
+ <argument value="40"/> <!-- time to sleep before it starts-->
+ <argument value ="600"/> <!-- deadline -->
+ </process>
+
+ <process host="Jean_Yves" function="chord.Node">
+ <argument value="14"/> <!-- my id -->
+ <argument value="1"/> <!-- known id -->
+ <argument value="16"/> <!-- time to sleep before it starts-->
+ <argument value ="600"/> <!-- deadline -->
+ </process>
+
+ <process host="Boivin" function="chord.Node">
+ <argument value="8"/> <!-- my id -->
+ <argument value="1"/> <!-- known id -->
+ <argument value="1"/> <!-- time to sleep before it starts-->
+ <argument value ="600"/> <!-- deadline -->
+ </process>
+
+ <process host="Jacquelin" function="chord.Node">
+ <argument value="1"/> <!-- my id -->
+ <argument value ="600"/> <!-- deadline -->
+ </process>
+
+</platform>
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+ <process host="c-0.me" function="chord.Node"><argument value="42"/><argument value="6000000"/></process>
+ <process host="c-1.me" function="chord.Node"><argument value="366680" /><argument value="42" /><argument value="10" /><argument value="6000000" /></process>
+ <process host="c-2.me" function="chord.Node"><argument value="533744" /><argument value="366680" /><argument value="20" /><argument value="6000000" /></process>
+ <process host="c-3.me" function="chord.Node"><argument value="1319738" /><argument value="42" /><argument value="30" /><argument value="6000000" /></process>
+ <process host="c-4.me" function="chord.Node"><argument value="16509405" /><argument value="366680" /><argument value="40" /><argument value="6000000" /></process>
+ <process host="c-5.me" function="chord.Node"><argument value="10874876" /><argument value="533744" /><argument value="50" /><argument value="6000000" /></process>
+ <process host="c-6.me" function="chord.Node"><argument value="16728096" /><argument value="1319738" /><argument value="60" /><argument value="6000000" /></process>
+ <process host="c-7.me" function="chord.Node"><argument value="10004760" /><argument value="16509405" /><argument value="70" /><argument value="6000000" /></process>
+ <process host="c-8.me" function="chord.Node"><argument value="6518808" /><argument value="42" /><argument value="80" /><argument value="6000000" /></process>
+ <process host="c-9.me" function="chord.Node"><argument value="2015253" /><argument value="1319738" /><argument value="90" /><argument value="6000000" /></process>
+</platform>
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+ <process host="c-0.me" function="chord.Node"><argument value="42"/><argument value="6000000"/></process>
+ <process host="c-1.me" function="chord.Node"><argument value="366680" /><argument value="42" /><argument value="10" /><argument value="6000000" /></process>
+ <process host="c-2.me" function="chord.Node"><argument value="533744" /><argument value="366680" /><argument value="20" /><argument value="6000000" /></process>
+ <process host="c-3.me" function="chord.Node"><argument value="1319738" /><argument value="42" /><argument value="30" /><argument value="6000000" /></process>
+ <process host="c-4.me" function="chord.Node"><argument value="16509405" /><argument value="366680" /><argument value="40" /><argument value="6000000" /></process>
+ <process host="c-5.me" function="chord.Node"><argument value="10874876" /><argument value="533744" /><argument value="50" /><argument value="6000000" /></process>
+ <process host="c-6.me" function="chord.Node"><argument value="16728096" /><argument value="1319738" /><argument value="60" /><argument value="6000000" /></process>
+ <process host="c-7.me" function="chord.Node"><argument value="10004760" /><argument value="16509405" /><argument value="70" /><argument value="6000000" /></process>
+ <process host="c-8.me" function="chord.Node"><argument value="6518808" /><argument value="42" /><argument value="80" /><argument value="6000000" /></process>
+ <process host="c-9.me" function="chord.Node"><argument value="2015253" /><argument value="1319738" /><argument value="90" /><argument value="6000000" /></process>
+ <process host="c-10.me" function="chord.Node"><argument value="10480191" /><argument value="42" /><argument value="100" /><argument value="6000000" /></process>
+ <process host="c-11.me" function="chord.Node"><argument value="13505621" /><argument value="10004760" /><argument value="110" /><argument value="6000000" /></process>
+ <process host="c-12.me" function="chord.Node"><argument value="13281914" /><argument value="10480191" /><argument value="120" /><argument value="6000000" /></process>
+ <process host="c-13.me" function="chord.Node"><argument value="13493864" /><argument value="6518808" /><argument value="130" /><argument value="6000000" /></process>
+ <process host="c-14.me" function="chord.Node"><argument value="15853741" /><argument value="6518808" /><argument value="140" /><argument value="6000000" /></process>
+ <process host="c-15.me" function="chord.Node"><argument value="12334717" /><argument value="2015253" /><argument value="150" /><argument value="6000000" /></process>
+ <process host="c-16.me" function="chord.Node"><argument value="13082922" /><argument value="2015253" /><argument value="160" /><argument value="6000000" /></process>
+ <process host="c-17.me" function="chord.Node"><argument value="11008018" /><argument value="13082922" /><argument value="170" /><argument value="6000000" /></process>
+ <process host="c-18.me" function="chord.Node"><argument value="14292368" /><argument value="13505621" /><argument value="180" /><argument value="6000000" /></process>
+ <process host="c-19.me" function="chord.Node"><argument value="13213873" /><argument value="16509405" /><argument value="190" /><argument value="6000000" /></process>
+ <process host="c-20.me" function="chord.Node"><argument value="16742003" /><argument value="11008018" /><argument value="200" /><argument value="6000000" /></process>
+ <process host="c-21.me" function="chord.Node"><argument value="8868836" /><argument value="6518808" /><argument value="210" /><argument value="6000000" /></process>
+ <process host="c-22.me" function="chord.Node"><argument value="596034" /><argument value="12334717" /><argument value="220" /><argument value="6000000" /></process>
+ <process host="c-23.me" function="chord.Node"><argument value="12957732" /><argument value="16728096" /><argument value="230" /><argument value="6000000" /></process>
+ <process host="c-24.me" function="chord.Node"><argument value="14183557" /><argument value="12334717" /><argument value="240" /><argument value="6000000" /></process>
+ <process host="c-25.me" function="chord.Node"><argument value="9710252" /><argument value="8868836" /><argument value="250" /><argument value="6000000" /></process>
+ <process host="c-26.me" function="chord.Node"><argument value="9592804" /><argument value="596034" /><argument value="260" /><argument value="6000000" /></process>
+ <process host="c-27.me" function="chord.Node"><argument value="10836171" /><argument value="366680" /><argument value="270" /><argument value="6000000" /></process>
+ <process host="c-28.me" function="chord.Node"><argument value="2610930" /><argument value="10836171" /><argument value="280" /><argument value="6000000" /></process>
+ <process host="c-29.me" function="chord.Node"><argument value="3938816" /><argument value="596034" /><argument value="290" /><argument value="6000000" /></process>
+ <process host="c-30.me" function="chord.Node"><argument value="9207700" /><argument value="1319738" /><argument value="300" /><argument value="6000000" /></process>
+ <process host="c-31.me" function="chord.Node"><argument value="11822289" /><argument value="10004760" /><argument value="310" /><argument value="6000000" /></process>
+ <process host="c-32.me" function="chord.Node"><argument value="6617885" /><argument value="10004760" /><argument value="320" /><argument value="6000000" /></process>
+ <process host="c-33.me" function="chord.Node"><argument value="10798069" /><argument value="366680" /><argument value="330" /><argument value="6000000" /></process>
+ <process host="c-34.me" function="chord.Node"><argument value="16224350" /><argument value="10836171" /><argument value="340" /><argument value="6000000" /></process>
+ <process host="c-35.me" function="chord.Node"><argument value="116769" /><argument value="13082922" /><argument value="350" /><argument value="6000000" /></process>
+ <process host="c-36.me" function="chord.Node"><argument value="8131023" /><argument value="2610930" /><argument value="360" /><argument value="6000000" /></process>
+ <process host="c-37.me" function="chord.Node"><argument value="15470236" /><argument value="116769" /><argument value="370" /><argument value="6000000" /></process>
+ <process host="c-38.me" function="chord.Node"><argument value="10364630" /><argument value="3938816" /><argument value="380" /><argument value="6000000" /></process>
+ <process host="c-39.me" function="chord.Node"><argument value="2379364" /><argument value="8868836" /><argument value="390" /><argument value="6000000" /></process>
+ <process host="c-40.me" function="chord.Node"><argument value="5944675" /><argument value="13281914" /><argument value="400" /><argument value="6000000" /></process>
+ <process host="c-41.me" function="chord.Node"><argument value="2772317" /><argument value="16224350" /><argument value="410" /><argument value="6000000" /></process>
+ <process host="c-42.me" function="chord.Node"><argument value="7514751" /><argument value="42" /><argument value="420" /><argument value="6000000" /></process>
+ <process host="c-43.me" function="chord.Node"><argument value="11363703" /><argument value="13505621" /><argument value="430" /><argument value="6000000" /></process>
+ <process host="c-44.me" function="chord.Node"><argument value="5864403" /><argument value="42" /><argument value="440" /><argument value="6000000" /></process>
+ <process host="c-45.me" function="chord.Node"><argument value="9509382" /><argument value="12957732" /><argument value="450" /><argument value="6000000" /></process>
+ <process host="c-46.me" function="chord.Node"><argument value="3107460" /><argument value="10364630" /><argument value="460" /><argument value="6000000" /></process>
+ <process host="c-47.me" function="chord.Node"><argument value="13568572" /><argument value="42" /><argument value="470" /><argument value="6000000" /></process>
+ <process host="c-48.me" function="chord.Node"><argument value="15651936" /><argument value="9710252" /><argument value="480" /><argument value="6000000" /></process>
+ <process host="c-49.me" function="chord.Node"><argument value="10558377" /><argument value="3938816" /><argument value="490" /><argument value="6000000" /></process>
+ <process host="c-50.me" function="chord.Node"><argument value="4285545" /><argument value="13493864" /><argument value="500" /><argument value="6000000" /></process>
+ <process host="c-51.me" function="chord.Node"><argument value="7467879" /><argument value="10480191" /><argument value="510" /><argument value="6000000" /></process>
+ <process host="c-52.me" function="chord.Node"><argument value="11019172" /><argument value="14183557" /><argument value="520" /><argument value="6000000" /></process>
+ <process host="c-53.me" function="chord.Node"><argument value="2358899" /><argument value="16728096" /><argument value="530" /><argument value="6000000" /></process>
+ <process host="c-54.me" function="chord.Node"><argument value="16134431" /><argument value="11822289" /><argument value="540" /><argument value="6000000" /></process>
+ <process host="c-55.me" function="chord.Node"><argument value="5244089" /><argument value="2015253" /><argument value="550" /><argument value="6000000" /></process>
+ <process host="c-56.me" function="chord.Node"><argument value="15499692" /><argument value="5944675" /><argument value="560" /><argument value="6000000" /></process>
+ <process host="c-57.me" function="chord.Node"><argument value="13922187" /><argument value="366680" /><argument value="570" /><argument value="6000000" /></process>
+ <process host="c-58.me" function="chord.Node"><argument value="12086592" /><argument value="2379364" /><argument value="580" /><argument value="6000000" /></process>
+ <process host="c-59.me" function="chord.Node"><argument value="10579841" /><argument value="8131023" /><argument value="590" /><argument value="6000000" /></process>
+ <process host="c-60.me" function="chord.Node"><argument value="14893867" /><argument value="10798069" /><argument value="600" /><argument value="6000000" /></process>
+ <process host="c-61.me" function="chord.Node"><argument value="11273607" /><argument value="12086592" /><argument value="610" /><argument value="6000000" /></process>
+ <process host="c-62.me" function="chord.Node"><argument value="810112" /><argument value="10558377" /><argument value="620" /><argument value="6000000" /></process>
+ <process host="c-63.me" function="chord.Node"><argument value="10874581" /><argument value="14893867" /><argument value="630" /><argument value="6000000" /></process>
+ <process host="c-64.me" function="chord.Node"><argument value="4339906" /><argument value="2379364" /><argument value="640" /><argument value="6000000" /></process>
+ <process host="c-65.me" function="chord.Node"><argument value="5230199" /><argument value="15651936" /><argument value="650" /><argument value="6000000" /></process>
+ <process host="c-66.me" function="chord.Node"><argument value="3459719" /><argument value="15651936" /><argument value="660" /><argument value="6000000" /></process>
+ <process host="c-67.me" function="chord.Node"><argument value="342511" /><argument value="11363703" /><argument value="670" /><argument value="6000000" /></process>
+ <process host="c-68.me" function="chord.Node"><argument value="12540825" /><argument value="13082922" /><argument value="680" /><argument value="6000000" /></process>
+ <process host="c-69.me" function="chord.Node"><argument value="3915035" /><argument value="16742003" /><argument value="690" /><argument value="6000000" /></process>
+ <process host="c-70.me" function="chord.Node"><argument value="9756331" /><argument value="14893867" /><argument value="700" /><argument value="6000000" /></process>
+ <process host="c-71.me" function="chord.Node"><argument value="1057" /><argument value="16224350" /><argument value="710" /><argument value="6000000" /></process>
+ <process host="c-72.me" function="chord.Node"><argument value="14905830" /><argument value="14292368" /><argument value="720" /><argument value="6000000" /></process>
+ <process host="c-73.me" function="chord.Node"><argument value="15011862" /><argument value="116769" /><argument value="730" /><argument value="6000000" /></process>
+ <process host="c-74.me" function="chord.Node"><argument value="16561708" /><argument value="2358899" /><argument value="740" /><argument value="6000000" /></process>
+ <process host="c-75.me" function="chord.Node"><argument value="15398543" /><argument value="13213873" /><argument value="750" /><argument value="6000000" /></process>
+ <process host="c-76.me" function="chord.Node"><argument value="182864" /><argument value="533744" /><argument value="760" /><argument value="6000000" /></process>
+ <process host="c-77.me" function="chord.Node"><argument value="6530186" /><argument value="13568572" /><argument value="770" /><argument value="6000000" /></process>
+ <process host="c-78.me" function="chord.Node"><argument value="11363165" /><argument value="13213873" /><argument value="780" /><argument value="6000000" /></process>
+ <process host="c-79.me" function="chord.Node"><argument value="8636303" /><argument value="15499692" /><argument value="790" /><argument value="6000000" /></process>
+ <process host="c-80.me" function="chord.Node"><argument value="11606104" /><argument value="5244089" /><argument value="800" /><argument value="6000000" /></process>
+ <process host="c-81.me" function="chord.Node"><argument value="7750053" /><argument value="13505621" /><argument value="810" /><argument value="6000000" /></process>
+ <process host="c-82.me" function="chord.Node"><argument value="15166832" /><argument value="3938816" /><argument value="820" /><argument value="6000000" /></process>
+ <process host="c-83.me" function="chord.Node"><argument value="4096877" /><argument value="11363703" /><argument value="830" /><argument value="6000000" /></process>
+ <process host="c-84.me" function="chord.Node"><argument value="15838695" /><argument value="1319738" /><argument value="840" /><argument value="6000000" /></process>
+ <process host="c-85.me" function="chord.Node"><argument value="16057285" /><argument value="182864" /><argument value="850" /><argument value="6000000" /></process>
+ <process host="c-86.me" function="chord.Node"><argument value="11161393" /><argument value="15166832" /><argument value="860" /><argument value="6000000" /></process>
+ <process host="c-87.me" function="chord.Node"><argument value="7283581" /><argument value="16224350" /><argument value="870" /><argument value="6000000" /></process>
+ <process host="c-88.me" function="chord.Node"><argument value="4769647" /><argument value="7750053" /><argument value="880" /><argument value="6000000" /></process>
+ <process host="c-89.me" function="chord.Node"><argument value="3395518" /><argument value="596034" /><argument value="890" /><argument value="6000000" /></process>
+ <process host="c-90.me" function="chord.Node"><argument value="11275302" /><argument value="10836171" /><argument value="900" /><argument value="6000000" /></process>
+ <process host="c-91.me" function="chord.Node"><argument value="1607535" /><argument value="15398543" /><argument value="910" /><argument value="6000000" /></process>
+ <process host="c-92.me" function="chord.Node"><argument value="9038828" /><argument value="1057" /><argument value="920" /><argument value="6000000" /></process>
+ <process host="c-93.me" function="chord.Node"><argument value="3254523" /><argument value="11363165" /><argument value="930" /><argument value="6000000" /></process>
+ <process host="c-94.me" function="chord.Node"><argument value="10826610" /><argument value="366680" /><argument value="940" /><argument value="6000000" /></process>
+ <process host="c-95.me" function="chord.Node"><argument value="2013580" /><argument value="11363165" /><argument value="950" /><argument value="6000000" /></process>
+ <process host="c-96.me" function="chord.Node"><argument value="4796981" /><argument value="14893867" /><argument value="960" /><argument value="6000000" /></process>
+ <process host="c-97.me" function="chord.Node"><argument value="5518537" /><argument value="4285545" /><argument value="970" /><argument value="6000000" /></process>
+ <process host="c-98.me" function="chord.Node"><argument value="15089786" /><argument value="15166832" /><argument value="980" /><argument value="6000000" /></process>
+ <process host="c-99.me" function="chord.Node"><argument value="8611178" /><argument value="3107460" /><argument value="990" /><argument value="6000000" /></process>
+</platform>
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+ <process host="c-0.me" function="chord.Node"><argument value="42"/><argument value="600"/></process>
+ <process host="c-1.me" function="chord.Node"><argument value="15030895" /><argument value="42" /><argument value="10" /><argument value="600" /></process>
+ <process host="c-2.me" function="chord.Node"><argument value="5473070" /><argument value="15030895" /><argument value="20" /><argument value="600" /></process>
+ <process host="c-3.me" function="chord.Node"><argument value="1698314" /><argument value="5473070" /><argument value="30" /><argument value="600" /></process>
+ <process host="c-4.me" function="chord.Node"><argument value="3357753" /><argument value="15030895" /><argument value="40" /><argument value="600" /></process>
+ <process host="c-5.me" function="chord.Node"><argument value="12820728" /><argument value="3357753" /><argument value="50" /><argument value="600" /></process>
+ <process host="c-6.me" function="chord.Node"><argument value="1675312" /><argument value="1698314" /><argument value="60" /><argument value="600" /></process>
+ <process host="c-7.me" function="chord.Node"><argument value="11322296" /><argument value="12820728" /><argument value="70" /><argument value="600" /></process>
+ <process host="c-8.me" function="chord.Node"><argument value="2101123" /><argument value="12820728" /><argument value="80" /><argument value="600" /></process>
+ <process host="c-9.me" function="chord.Node"><argument value="6597095" /><argument value="15030895" /><argument value="90" /><argument value="600" /></process>
+ <process host="c-10.me" function="chord.Node"><argument value="584392" /><argument value="3357753" /><argument value="100" /><argument value="600" /></process>
+ <process host="c-11.me" function="chord.Node"><argument value="1433361" /><argument value="6597095" /><argument value="110" /><argument value="600" /></process>
+ <process host="c-12.me" function="chord.Node"><argument value="6409915" /><argument value="11322296" /><argument value="120" /><argument value="600" /></process>
+ <process host="c-13.me" function="chord.Node"><argument value="13914475" /><argument value="2101123" /><argument value="130" /><argument value="600" /></process>
+ <process host="c-14.me" function="chord.Node"><argument value="9954221" /><argument value="6597095" /><argument value="140" /><argument value="600" /></process>
+ <process host="c-15.me" function="chord.Node"><argument value="12662990" /><argument value="12820728" /><argument value="150" /><argument value="600" /></process>
+ <process host="c-16.me" function="chord.Node"><argument value="722267" /><argument value="3357753" /><argument value="160" /><argument value="600" /></process>
+ <process host="c-17.me" function="chord.Node"><argument value="2102638" /><argument value="3357753" /><argument value="170" /><argument value="600" /></process>
+ <process host="c-18.me" function="chord.Node"><argument value="1139662" /><argument value="15030895" /><argument value="180" /><argument value="600" /></process>
+ <process host="c-19.me" function="chord.Node"><argument value="5737423" /><argument value="722267" /><argument value="190" /><argument value="600" /></process>
+ <process host="c-20.me" function="chord.Node"><argument value="15006544" /><argument value="13914475" /><argument value="200" /><argument value="600" /></process>
+ <process host="c-21.me" function="chord.Node"><argument value="395854" /><argument value="5737423" /><argument value="210" /><argument value="600" /></process>
+ <process host="c-22.me" function="chord.Node"><argument value="9875617" /><argument value="15006544" /><argument value="220" /><argument value="600" /></process>
+ <process host="c-23.me" function="chord.Node"><argument value="11267801" /><argument value="6409915" /><argument value="230" /><argument value="600" /></process>
+ <process host="c-24.me" function="chord.Node"><argument value="14661364" /><argument value="9954221" /><argument value="240" /><argument value="600" /></process>
+ <process host="c-25.me" function="chord.Node"><argument value="6208086" /><argument value="14661364" /><argument value="250" /><argument value="600" /></process>
+ <process host="c-26.me" function="chord.Node"><argument value="14926836" /><argument value="584392" /><argument value="260" /><argument value="600" /></process>
+ <process host="c-27.me" function="chord.Node"><argument value="5519704" /><argument value="14926836" /><argument value="270" /><argument value="600" /></process>
+ <process host="c-28.me" function="chord.Node"><argument value="1650052" /><argument value="13914475" /><argument value="280" /><argument value="600" /></process>
+ <process host="c-29.me" function="chord.Node"><argument value="2707321" /><argument value="15006544" /><argument value="290" /><argument value="600" /></process>
+ <process host="c-30.me" function="chord.Node"><argument value="233536" /><argument value="3357753" /><argument value="300" /><argument value="600" /></process>
+ <process host="c-31.me" function="chord.Node"><argument value="11921438" /><argument value="15030895" /><argument value="310" /><argument value="600" /></process>
+ <process host="c-32.me" function="chord.Node"><argument value="6420486" /><argument value="5519704" /><argument value="320" /><argument value="600" /></process>
+ <process host="c-33.me" function="chord.Node"><argument value="6609097" /><argument value="12820728" /><argument value="330" /><argument value="600" /></process>
+ <process host="c-34.me" function="chord.Node"><argument value="11874398" /><argument value="15030895" /><argument value="340" /><argument value="600" /></process>
+ <process host="c-35.me" function="chord.Node"><argument value="15549881" /><argument value="11921438" /><argument value="350" /><argument value="600" /></process>
+ <process host="c-36.me" function="chord.Node"><argument value="14482395" /><argument value="11874398" /><argument value="360" /><argument value="600" /></process>
+ <process host="c-37.me" function="chord.Node"><argument value="10961177" /><argument value="1650052" /><argument value="370" /><argument value="600" /></process>
+ <process host="c-38.me" function="chord.Node"><argument value="4136437" /><argument value="2102638" /><argument value="380" /><argument value="600" /></process>
+ <process host="c-39.me" function="chord.Node"><argument value="5203326" /><argument value="11921438" /><argument value="390" /><argument value="600" /></process>
+ <process host="c-40.me" function="chord.Node"><argument value="15690136" /><argument value="1675312" /><argument value="400" /><argument value="600" /></process>
+ <process host="c-41.me" function="chord.Node"><argument value="5969034" /><argument value="6609097" /><argument value="410" /><argument value="600" /></process>
+ <process host="c-42.me" function="chord.Node"><argument value="16742965" /><argument value="1675312" /><argument value="420" /><argument value="600" /></process>
+ <process host="c-43.me" function="chord.Node"><argument value="12179280" /><argument value="16742965" /><argument value="430" /><argument value="600" /></process>
+ <process host="c-44.me" function="chord.Node"><argument value="15230648" /><argument value="11921438" /><argument value="440" /><argument value="600" /></process>
+ <process host="c-45.me" function="chord.Node"><argument value="15077009" /><argument value="5519704" /><argument value="450" /><argument value="600" /></process>
+ <process host="c-46.me" function="chord.Node"><argument value="3492701" /><argument value="2707321" /><argument value="460" /><argument value="600" /></process>
+ <process host="c-47.me" function="chord.Node"><argument value="13913870" /><argument value="12662990" /><argument value="470" /><argument value="600" /></process>
+ <process host="c-48.me" function="chord.Node"><argument value="12271549" /><argument value="14926836" /><argument value="480" /><argument value="600" /></process>
+ <process host="c-49.me" function="chord.Node"><argument value="5587068" /><argument value="5473070" /><argument value="490" /><argument value="600" /></process>
+ <process host="c-50.me" function="chord.Node"><argument value="11182766" /><argument value="15077009" /><argument value="500" /><argument value="600" /></process>
+ <process host="c-51.me" function="chord.Node"><argument value="3221495" /><argument value="584392" /><argument value="510" /><argument value="600" /></process>
+ <process host="c-52.me" function="chord.Node"><argument value="7135313" /><argument value="10961177" /><argument value="520" /><argument value="600" /></process>
+ <process host="c-53.me" function="chord.Node"><argument value="14947389" /><argument value="15230648" /><argument value="530" /><argument value="600" /></process>
+ <process host="c-54.me" function="chord.Node"><argument value="2527708" /><argument value="3221495" /><argument value="540" /><argument value="600" /></process>
+ <process host="c-55.me" function="chord.Node"><argument value="701471" /><argument value="233536" /><argument value="550" /><argument value="600" /></process>
+ <process host="c-56.me" function="chord.Node"><argument value="10342598" /><argument value="12271549" /><argument value="560" /><argument value="600" /></process>
+ <process host="c-57.me" function="chord.Node"><argument value="15213219" /><argument value="4136437" /><argument value="570" /><argument value="600" /></process>
+ <process host="c-58.me" function="chord.Node"><argument value="6942761" /><argument value="10961177" /><argument value="580" /><argument value="600" /></process>
+ <process host="c-59.me" function="chord.Node"><argument value="2664495" /><argument value="15549881" /><argument value="590" /><argument value="600" /></process>
+ <process host="c-60.me" function="chord.Node"><argument value="14750569" /><argument value="13913870" /><argument value="600" /><argument value="600" /></process>
+ <process host="c-61.me" function="chord.Node"><argument value="8540729" /><argument value="14947389" /><argument value="610" /><argument value="600" /></process>
+ <process host="c-62.me" function="chord.Node"><argument value="7453537" /><argument value="7135313" /><argument value="620" /><argument value="600" /></process>
+ <process host="c-63.me" function="chord.Node"><argument value="2005171" /><argument value="1650052" /><argument value="630" /><argument value="600" /></process>
+ <process host="c-64.me" function="chord.Node"><argument value="3405298" /><argument value="14661364" /><argument value="640" /><argument value="600" /></process>
+ <process host="c-65.me" function="chord.Node"><argument value="9749604" /><argument value="2101123" /><argument value="650" /><argument value="600" /></process>
+ <process host="c-66.me" function="chord.Node"><argument value="3825920" /><argument value="11182766" /><argument value="660" /><argument value="600" /></process>
+ <process host="c-67.me" function="chord.Node"><argument value="4209108" /><argument value="1433361" /><argument value="670" /><argument value="600" /></process>
+ <process host="c-68.me" function="chord.Node"><argument value="10561938" /><argument value="395854" /><argument value="680" /><argument value="600" /></process>
+ <process host="c-69.me" function="chord.Node"><argument value="12800566" /><argument value="12179280" /><argument value="690" /><argument value="600" /></process>
+ <process host="c-70.me" function="chord.Node"><argument value="8324575" /><argument value="1139662" /><argument value="700" /><argument value="600" /></process>
+ <process host="c-71.me" function="chord.Node"><argument value="8003794" /><argument value="1650052" /><argument value="710" /><argument value="600" /></process>
+ <process host="c-72.me" function="chord.Node"><argument value="12921239" /><argument value="6420486" /><argument value="720" /><argument value="600" /></process>
+ <process host="c-73.me" function="chord.Node"><argument value="1414264" /><argument value="5587068" /><argument value="730" /><argument value="600" /></process>
+ <process host="c-74.me" function="chord.Node"><argument value="1951719" /><argument value="12179280" /><argument value="740" /><argument value="600" /></process>
+ <process host="c-75.me" function="chord.Node"><argument value="8165011" /><argument value="6409915" /><argument value="750" /><argument value="600" /></process>
+ <process host="c-76.me" function="chord.Node"><argument value="16591723" /><argument value="233536" /><argument value="760" /><argument value="600" /></process>
+ <process host="c-77.me" function="chord.Node"><argument value="1549571" /><argument value="8540729" /><argument value="770" /><argument value="600" /></process>
+ <process host="c-78.me" function="chord.Node"><argument value="229743" /><argument value="15030895" /><argument value="780" /><argument value="600" /></process>
+ <process host="c-79.me" function="chord.Node"><argument value="9132538" /><argument value="6942761" /><argument value="790" /><argument value="600" /></process>
+ <process host="c-80.me" function="chord.Node"><argument value="7518338" /><argument value="12662990" /><argument value="800" /><argument value="600" /></process>
+ <process host="c-81.me" function="chord.Node"><argument value="7457424" /><argument value="7453537" /><argument value="810" /><argument value="600" /></process>
+ <process host="c-82.me" function="chord.Node"><argument value="1147620" /><argument value="5473070" /><argument value="820" /><argument value="600" /></process>
+ <process host="c-83.me" function="chord.Node"><argument value="13360354" /><argument value="10561938" /><argument value="830" /><argument value="600" /></process>
+ <process host="c-84.me" function="chord.Node"><argument value="2896334" /><argument value="5473070" /><argument value="840" /><argument value="600" /></process>
+ <process host="c-85.me" function="chord.Node"><argument value="15495062" /><argument value="3221495" /><argument value="850" /><argument value="600" /></process>
+ <process host="c-86.me" function="chord.Node"><argument value="6017802" /><argument value="15690136" /><argument value="860" /><argument value="600" /></process>
+ <process host="c-87.me" function="chord.Node"><argument value="11502306" /><argument value="5203326" /><argument value="870" /><argument value="600" /></process>
+ <process host="c-88.me" function="chord.Node"><argument value="11193411" /><argument value="3221495" /><argument value="880" /><argument value="600" /></process>
+ <process host="c-89.me" function="chord.Node"><argument value="8518148" /><argument value="13360354" /><argument value="890" /><argument value="600" /></process>
+ <process host="c-90.me" function="chord.Node"><argument value="5616708" /><argument value="3357753" /><argument value="900" /><argument value="600" /></process>
+ <process host="c-91.me" function="chord.Node"><argument value="1877956" /><argument value="15077009" /><argument value="910" /><argument value="600" /></process>
+ <process host="c-92.me" function="chord.Node"><argument value="4832327" /><argument value="1951719" /><argument value="920" /><argument value="600" /></process>
+ <process host="c-93.me" function="chord.Node"><argument value="1361604" /><argument value="1650052" /><argument value="930" /><argument value="600" /></process>
+ <process host="c-94.me" function="chord.Node"><argument value="16009196" /><argument value="9954221" /><argument value="940" /><argument value="600" /></process>
+ <process host="c-95.me" function="chord.Node"><argument value="4232520" /><argument value="11921438" /><argument value="950" /><argument value="600" /></process>
+ <process host="c-96.me" function="chord.Node"><argument value="13340216" /><argument value="11874398" /><argument value="960" /><argument value="600" /></process>
+ <process host="c-97.me" function="chord.Node"><argument value="3539024" /><argument value="10561938" /><argument value="970" /><argument value="600" /></process>
+ <process host="c-98.me" function="chord.Node"><argument value="8129508" /><argument value="8003794" /><argument value="980" /><argument value="600" /></process>
+ <process host="c-99.me" function="chord.Node"><argument value="6418913" /><argument value="1147620" /><argument value="990" /><argument value="600" /></process>
+ <process host="c-100.me" function="chord.Node"><argument value="6385309" /><argument value="10561938" /><argument value="1000" /><argument value="600" /></process>
+ <process host="c-101.me" function="chord.Node"><argument value="1425531" /><argument value="9132538" /><argument value="1010" /><argument value="600" /></process>
+ <process host="c-102.me" function="chord.Node"><argument value="14812706" /><argument value="10561938" /><argument value="1020" /><argument value="600" /></process>
+ <process host="c-103.me" function="chord.Node"><argument value="6426430" /><argument value="11921438" /><argument value="1030" /><argument value="600" /></process>
+ <process host="c-104.me" function="chord.Node"><argument value="3994905" /><argument value="11874398" /><argument value="1040" /><argument value="600" /></process>
+ <process host="c-105.me" function="chord.Node"><argument value="10649272" /><argument value="1698314" /><argument value="1050" /><argument value="600" /></process>
+ <process host="c-106.me" function="chord.Node"><argument value="103219" /><argument value="11193411" /><argument value="1060" /><argument value="600" /></process>
+ <process host="c-107.me" function="chord.Node"><argument value="7646047" /><argument value="14482395" /><argument value="1070" /><argument value="600" /></process>
+ <process host="c-108.me" function="chord.Node"><argument value="197228" /><argument value="9875617" /><argument value="1080" /><argument value="600" /></process>
+ <process host="c-109.me" function="chord.Node"><argument value="4443281" /><argument value="1147620" /><argument value="1090" /><argument value="600" /></process>
+ <process host="c-110.me" function="chord.Node"><argument value="9281086" /><argument value="197228" /><argument value="1100" /><argument value="600" /></process>
+ <process host="c-111.me" function="chord.Node"><argument value="4692999" /><argument value="197228" /><argument value="1110" /><argument value="600" /></process>
+ <process host="c-112.me" function="chord.Node"><argument value="14902009" /><argument value="5587068" /><argument value="1120" /><argument value="600" /></process>
+ <process host="c-113.me" function="chord.Node"><argument value="7983522" /><argument value="15030895" /><argument value="1130" /><argument value="600" /></process>
+ <process host="c-114.me" function="chord.Node"><argument value="6493977" /><argument value="6609097" /><argument value="1140" /><argument value="600" /></process>
+ <process host="c-115.me" function="chord.Node"><argument value="1829446" /><argument value="1139662" /><argument value="1150" /><argument value="600" /></process>
+ <process host="c-116.me" function="chord.Node"><argument value="9352626" /><argument value="9954221" /><argument value="1160" /><argument value="600" /></process>
+ <process host="c-117.me" function="chord.Node"><argument value="13376556" /><argument value="1361604" /><argument value="1170" /><argument value="600" /></process>
+ <process host="c-118.me" function="chord.Node"><argument value="9052096" /><argument value="8540729" /><argument value="1180" /><argument value="600" /></process>
+ <process host="c-119.me" function="chord.Node"><argument value="935561" /><argument value="7457424" /><argument value="1190" /><argument value="600" /></process>
+ <process host="c-120.me" function="chord.Node"><argument value="2365578" /><argument value="11267801" /><argument value="1200" /><argument value="600" /></process>
+ <process host="c-121.me" function="chord.Node"><argument value="3109636" /><argument value="9281086" /><argument value="1210" /><argument value="600" /></process>
+ <process host="c-122.me" function="chord.Node"><argument value="4033198" /><argument value="103219" /><argument value="1220" /><argument value="600" /></process>
+ <process host="c-123.me" function="chord.Node"><argument value="6258230" /><argument value="11921438" /><argument value="1230" /><argument value="600" /></process>
+ <process host="c-124.me" function="chord.Node"><argument value="13937989" /><argument value="1675312" /><argument value="1240" /><argument value="600" /></process>
+ <process host="c-125.me" function="chord.Node"><argument value="3022487" /><argument value="2707321" /><argument value="1250" /><argument value="600" /></process>
+ <process host="c-126.me" function="chord.Node"><argument value="10418072" /><argument value="722267" /><argument value="1260" /><argument value="600" /></process>
+ <process host="c-127.me" function="chord.Node"><argument value="6641412" /><argument value="233536" /><argument value="1270" /><argument value="600" /></process>
+ <process host="c-128.me" function="chord.Node"><argument value="10354580" /><argument value="3357753" /><argument value="1280" /><argument value="600" /></process>
+ <process host="c-129.me" function="chord.Node"><argument value="1146754" /><argument value="15549881" /><argument value="1290" /><argument value="600" /></process>
+ <process host="c-130.me" function="chord.Node"><argument value="12345661" /><argument value="8003794" /><argument value="1300" /><argument value="600" /></process>
+ <process host="c-131.me" function="chord.Node"><argument value="6646839" /><argument value="11193411" /><argument value="1310" /><argument value="600" /></process>
+ <process host="c-132.me" function="chord.Node"><argument value="5285994" /><argument value="6942761" /><argument value="1320" /><argument value="600" /></process>
+ <process host="c-133.me" function="chord.Node"><argument value="15806532" /><argument value="2102638" /><argument value="1330" /><argument value="600" /></process>
+ <process host="c-134.me" function="chord.Node"><argument value="7092394" /><argument value="3357753" /><argument value="1340" /><argument value="600" /></process>
+ <process host="c-135.me" function="chord.Node"><argument value="1618206" /><argument value="15495062" /><argument value="1350" /><argument value="600" /></process>
+ <process host="c-136.me" function="chord.Node"><argument value="9694594" /><argument value="12921239" /><argument value="1360" /><argument value="600" /></process>
+ <process host="c-137.me" function="chord.Node"><argument value="9376851" /><argument value="1139662" /><argument value="1370" /><argument value="600" /></process>
+ <process host="c-138.me" function="chord.Node"><argument value="10020838" /><argument value="12820728" /><argument value="1380" /><argument value="600" /></process>
+ <process host="c-139.me" function="chord.Node"><argument value="4450166" /><argument value="2005171" /><argument value="1390" /><argument value="600" /></process>
+ <process host="c-140.me" function="chord.Node"><argument value="6751289" /><argument value="9749604" /><argument value="1400" /><argument value="600" /></process>
+ <process host="c-141.me" function="chord.Node"><argument value="9474100" /><argument value="9281086" /><argument value="1410" /><argument value="600" /></process>
+ <process host="c-142.me" function="chord.Node"><argument value="16437750" /><argument value="3994905" /><argument value="1420" /><argument value="600" /></process>
+ <process host="c-143.me" function="chord.Node"><argument value="6936216" /><argument value="15006544" /><argument value="1430" /><argument value="600" /></process>
+ <process host="c-144.me" function="chord.Node"><argument value="5743077" /><argument value="12179280" /><argument value="1440" /><argument value="600" /></process>
+ <process host="c-145.me" function="chord.Node"><argument value="14794206" /><argument value="6426430" /><argument value="1450" /><argument value="600" /></process>
+ <process host="c-146.me" function="chord.Node"><argument value="6826716" /><argument value="9694594" /><argument value="1460" /><argument value="600" /></process>
+ <process host="c-147.me" function="chord.Node"><argument value="14524520" /><argument value="13937989" /><argument value="1470" /><argument value="600" /></process>
+ <process host="c-148.me" function="chord.Node"><argument value="10256047" /><argument value="12921239" /><argument value="1480" /><argument value="600" /></process>
+ <process host="c-149.me" function="chord.Node"><argument value="1021671" /><argument value="9376851" /><argument value="1490" /><argument value="600" /></process>
+ <process host="c-150.me" function="chord.Node"><argument value="14227316" /><argument value="13913870" /><argument value="1500" /><argument value="600" /></process>
+ <process host="c-151.me" function="chord.Node"><argument value="5706499" /><argument value="11193411" /><argument value="1510" /><argument value="600" /></process>
+ <process host="c-152.me" function="chord.Node"><argument value="3107999" /><argument value="1877956" /><argument value="1520" /><argument value="600" /></process>
+ <process host="c-153.me" function="chord.Node"><argument value="702830" /><argument value="15213219" /><argument value="1530" /><argument value="600" /></process>
+ <process host="c-154.me" function="chord.Node"><argument value="4945538" /><argument value="6641412" /><argument value="1540" /><argument value="600" /></process>
+ <process host="c-155.me" function="chord.Node"><argument value="10846646" /><argument value="9281086" /><argument value="1550" /><argument value="600" /></process>
+ <process host="c-156.me" function="chord.Node"><argument value="5687549" /><argument value="3492701" /><argument value="1560" /><argument value="600" /></process>
+ <process host="c-157.me" function="chord.Node"><argument value="14197736" /><argument value="14794206" /><argument value="1570" /><argument value="600" /></process>
+ <process host="c-158.me" function="chord.Node"><argument value="11363391" /><argument value="103219" /><argument value="1580" /><argument value="600" /></process>
+ <process host="c-159.me" function="chord.Node"><argument value="11980457" /><argument value="1414264" /><argument value="1590" /><argument value="600" /></process>
+ <process host="c-160.me" function="chord.Node"><argument value="16375132" /><argument value="11502306" /><argument value="1600" /><argument value="600" /></process>
+ <process host="c-161.me" function="chord.Node"><argument value="12792052" /><argument value="15690136" /><argument value="1610" /><argument value="600" /></process>
+ <process host="c-162.me" function="chord.Node"><argument value="9654276" /><argument value="1698314" /><argument value="1620" /><argument value="600" /></process>
+ <process host="c-163.me" function="chord.Node"><argument value="10643900" /><argument value="5519704" /><argument value="1630" /><argument value="600" /></process>
+ <process host="c-164.me" function="chord.Node"><argument value="7072398" /><argument value="4209108" /><argument value="1640" /><argument value="600" /></process>
+ <process host="c-165.me" function="chord.Node"><argument value="7335289" /><argument value="1829446" /><argument value="1650" /><argument value="600" /></process>
+ <process host="c-166.me" function="chord.Node"><argument value="11208324" /><argument value="6942761" /><argument value="1660" /><argument value="600" /></process>
+ <process host="c-167.me" function="chord.Node"><argument value="14125234" /><argument value="4232520" /><argument value="1670" /><argument value="600" /></process>
+ <process host="c-168.me" function="chord.Node"><argument value="10095508" /><argument value="4450166" /><argument value="1680" /><argument value="600" /></process>
+ <process host="c-169.me" function="chord.Node"><argument value="2783698" /><argument value="13376556" /><argument value="1690" /><argument value="600" /></process>
+ <process host="c-170.me" function="chord.Node"><argument value="14934950" /><argument value="1675312" /><argument value="1700" /><argument value="600" /></process>
+ <process host="c-171.me" function="chord.Node"><argument value="10204339" /><argument value="9654276" /><argument value="1710" /><argument value="600" /></process>
+ <process host="c-172.me" function="chord.Node"><argument value="7723482" /><argument value="15006544" /><argument value="1720" /><argument value="600" /></process>
+ <process host="c-173.me" function="chord.Node"><argument value="12592922" /><argument value="2101123" /><argument value="1730" /><argument value="600" /></process>
+ <process host="c-174.me" function="chord.Node"><argument value="9471834" /><argument value="8518148" /><argument value="1740" /><argument value="600" /></process>
+ <process host="c-175.me" function="chord.Node"><argument value="4884753" /><argument value="14926836" /><argument value="1750" /><argument value="600" /></process>
+ <process host="c-176.me" function="chord.Node"><argument value="15982771" /><argument value="11874398" /><argument value="1760" /><argument value="600" /></process>
+ <process host="c-177.me" function="chord.Node"><argument value="7978724" /><argument value="2896334" /><argument value="1770" /><argument value="600" /></process>
+ <process host="c-178.me" function="chord.Node"><argument value="11290721" /><argument value="5519704" /><argument value="1780" /><argument value="600" /></process>
+ <process host="c-179.me" function="chord.Node"><argument value="6794166" /><argument value="3405298" /><argument value="1790" /><argument value="600" /></process>
+ <process host="c-180.me" function="chord.Node"><argument value="8288385" /><argument value="9352626" /><argument value="1800" /><argument value="600" /></process>
+ <process host="c-181.me" function="chord.Node"><argument value="12998550" /><argument value="6936216" /><argument value="1810" /><argument value="600" /></process>
+ <process host="c-182.me" function="chord.Node"><argument value="12396321" /><argument value="16375132" /><argument value="1820" /><argument value="600" /></process>
+ <process host="c-183.me" function="chord.Node"><argument value="3070" /><argument value="7978724" /><argument value="1830" /><argument value="600" /></process>
+ <process host="c-184.me" function="chord.Node"><argument value="3669263" /><argument value="6609097" /><argument value="1840" /><argument value="600" /></process>
+ <process host="c-185.me" function="chord.Node"><argument value="2001584" /><argument value="6646839" /><argument value="1850" /><argument value="600" /></process>
+ <process host="c-186.me" function="chord.Node"><argument value="1372085" /><argument value="12792052" /><argument value="1860" /><argument value="600" /></process>
+ <process host="c-187.me" function="chord.Node"><argument value="12453518" /><argument value="10095508" /><argument value="1870" /><argument value="600" /></process>
+ <process host="c-188.me" function="chord.Node"><argument value="4894707" /><argument value="9694594" /><argument value="1880" /><argument value="600" /></process>
+ <process host="c-189.me" function="chord.Node"><argument value="9093770" /><argument value="10020838" /><argument value="1890" /><argument value="600" /></process>
+ <process host="c-190.me" function="chord.Node"><argument value="1489674" /><argument value="13340216" /><argument value="1900" /><argument value="600" /></process>
+ <process host="c-191.me" function="chord.Node"><argument value="7198125" /><argument value="7092394" /><argument value="1910" /><argument value="600" /></process>
+ <process host="c-192.me" function="chord.Node"><argument value="6858862" /><argument value="11322296" /><argument value="1920" /><argument value="600" /></process>
+ <process host="c-193.me" function="chord.Node"><argument value="978764" /><argument value="14524520" /><argument value="1930" /><argument value="600" /></process>
+ <process host="c-194.me" function="chord.Node"><argument value="4341166" /><argument value="3405298" /><argument value="1940" /><argument value="600" /></process>
+ <process host="c-195.me" function="chord.Node"><argument value="13184914" /><argument value="3109636" /><argument value="1950" /><argument value="600" /></process>
+ <process host="c-196.me" function="chord.Node"><argument value="2096790" /><argument value="5285994" /><argument value="1960" /><argument value="600" /></process>
+ <process host="c-197.me" function="chord.Node"><argument value="8478498" /><argument value="10649272" /><argument value="1970" /><argument value="600" /></process>
+ <process host="c-198.me" function="chord.Node"><argument value="13876983" /><argument value="6641412" /><argument value="1980" /><argument value="600" /></process>
+ <process host="c-199.me" function="chord.Node"><argument value="14996644" /><argument value="6493977" /><argument value="1990" /><argument value="600" /></process>
+ <process host="c-200.me" function="chord.Node"><argument value="9190005" /><argument value="9474100" /><argument value="2000" /><argument value="600" /></process>
+ <process host="c-201.me" function="chord.Node"><argument value="12624929" /><argument value="9281086" /><argument value="2010" /><argument value="600" /></process>
+ <process host="c-202.me" function="chord.Node"><argument value="10702743" /><argument value="15077009" /><argument value="2020" /><argument value="600" /></process>
+ <process host="c-203.me" function="chord.Node"><argument value="15206205" /><argument value="11921438" /><argument value="2030" /><argument value="600" /></process>
+ <process host="c-204.me" function="chord.Node"><argument value="14649055" /><argument value="15006544" /><argument value="2040" /><argument value="600" /></process>
+ <process host="c-205.me" function="chord.Node"><argument value="4530956" /><argument value="14197736" /><argument value="2050" /><argument value="600" /></process>
+ <process host="c-206.me" function="chord.Node"><argument value="4674332" /><argument value="11193411" /><argument value="2060" /><argument value="600" /></process>
+ <process host="c-207.me" function="chord.Node"><argument value="7613952" /><argument value="2001584" /><argument value="2070" /><argument value="600" /></process>
+ <process host="c-208.me" function="chord.Node"><argument value="3440277" /><argument value="1549571" /><argument value="2080" /><argument value="600" /></process>
+ <process host="c-209.me" function="chord.Node"><argument value="3201863" /><argument value="15690136" /><argument value="2090" /><argument value="600" /></process>
+ <process host="c-210.me" function="chord.Node"><argument value="2662428" /><argument value="3669263" /><argument value="2100" /><argument value="600" /></process>
+ <process host="c-211.me" function="chord.Node"><argument value="12125415" /><argument value="1414264" /><argument value="2110" /><argument value="600" /></process>
+ <process host="c-212.me" function="chord.Node"><argument value="13725268" /><argument value="6597095" /><argument value="2120" /><argument value="600" /></process>
+ <process host="c-213.me" function="chord.Node"><argument value="14480613" /><argument value="7335289" /><argument value="2130" /><argument value="600" /></process>
+ <process host="c-214.me" function="chord.Node"><argument value="305689" /><argument value="5587068" /><argument value="2140" /><argument value="600" /></process>
+ <process host="c-215.me" function="chord.Node"><argument value="13509653" /><argument value="1618206" /><argument value="2150" /><argument value="600" /></process>
+ <process host="c-216.me" function="chord.Node"><argument value="3773391" /><argument value="5737423" /><argument value="2160" /><argument value="600" /></process>
+ <process host="c-217.me" function="chord.Node"><argument value="11317893" /><argument value="16437750" /><argument value="2170" /><argument value="600" /></process>
+ <process host="c-218.me" function="chord.Node"><argument value="16581758" /><argument value="13340216" /><argument value="2180" /><argument value="600" /></process>
+ <process host="c-219.me" function="chord.Node"><argument value="12919319" /><argument value="1361604" /><argument value="2190" /><argument value="600" /></process>
+ <process host="c-220.me" function="chord.Node"><argument value="9249542" /><argument value="15213219" /><argument value="2200" /><argument value="600" /></process>
+ <process host="c-221.me" function="chord.Node"><argument value="4692291" /><argument value="7072398" /><argument value="2210" /><argument value="600" /></process>
+ <process host="c-222.me" function="chord.Node"><argument value="385589" /><argument value="13937989" /><argument value="2220" /><argument value="600" /></process>
+ <process host="c-223.me" function="chord.Node"><argument value="10344922" /><argument value="2101123" /><argument value="2230" /><argument value="600" /></process>
+ <process host="c-224.me" function="chord.Node"><argument value="4972191" /><argument value="6409915" /><argument value="2240" /><argument value="600" /></process>
+ <process host="c-225.me" function="chord.Node"><argument value="12815150" /><argument value="3070" /><argument value="2250" /><argument value="600" /></process>
+ <process host="c-226.me" function="chord.Node"><argument value="7564932" /><argument value="9471834" /><argument value="2260" /><argument value="600" /></process>
+ <process host="c-227.me" function="chord.Node"><argument value="9101477" /><argument value="7457424" /><argument value="2270" /><argument value="600" /></process>
+ <process host="c-228.me" function="chord.Node"><argument value="16481633" /><argument value="13360354" /><argument value="2280" /><argument value="600" /></process>
+ <process host="c-229.me" function="chord.Node"><argument value="15970644" /><argument value="15030895" /><argument value="2290" /><argument value="600" /></process>
+ <process host="c-230.me" function="chord.Node"><argument value="3607342" /><argument value="6409915" /><argument value="2300" /><argument value="600" /></process>
+ <process host="c-231.me" function="chord.Node"><argument value="1872015" /><argument value="4972191" /><argument value="2310" /><argument value="600" /></process>
+ <process host="c-232.me" function="chord.Node"><argument value="14994723" /><argument value="2001584" /><argument value="2320" /><argument value="600" /></process>
+ <process host="c-233.me" function="chord.Node"><argument value="12360202" /><argument value="3405298" /><argument value="2330" /><argument value="600" /></process>
+ <process host="c-234.me" function="chord.Node"><argument value="7338154" /><argument value="15230648" /><argument value="2340" /><argument value="600" /></process>
+ <process host="c-235.me" function="chord.Node"><argument value="8047622" /><argument value="12624929" /><argument value="2350" /><argument value="600" /></process>
+ <process host="c-236.me" function="chord.Node"><argument value="2711088" /><argument value="6936216" /><argument value="2360" /><argument value="600" /></process>
+ <process host="c-237.me" function="chord.Node"><argument value="7448847" /><argument value="1361604" /><argument value="2370" /><argument value="600" /></process>
+ <process host="c-238.me" function="chord.Node"><argument value="14361444" /><argument value="3405298" /><argument value="2380" /><argument value="600" /></process>
+ <process host="c-239.me" function="chord.Node"><argument value="212458" /><argument value="10643900" /><argument value="2390" /><argument value="600" /></process>
+ <process host="c-240.me" function="chord.Node"><argument value="15495753" /><argument value="11322296" /><argument value="2400" /><argument value="600" /></process>
+ <process host="c-241.me" function="chord.Node"><argument value="1536550" /><argument value="3492701" /><argument value="2410" /><argument value="600" /></process>
+ <process host="c-242.me" function="chord.Node"><argument value="7177224" /><argument value="11267801" /><argument value="2420" /><argument value="600" /></process>
+ <process host="c-243.me" function="chord.Node"><argument value="16192183" /><argument value="8129508" /><argument value="2430" /><argument value="600" /></process>
+ <process host="c-244.me" function="chord.Node"><argument value="15833989" /><argument value="8540729" /><argument value="2440" /><argument value="600" /></process>
+ <process host="c-245.me" function="chord.Node"><argument value="16728462" /><argument value="1361604" /><argument value="2450" /><argument value="600" /></process>
+ <process host="c-246.me" function="chord.Node"><argument value="15145589" /><argument value="14812706" /><argument value="2460" /><argument value="600" /></process>
+ <process host="c-247.me" function="chord.Node"><argument value="4698866" /><argument value="9052096" /><argument value="2470" /><argument value="600" /></process>
+ <process host="c-248.me" function="chord.Node"><argument value="15254383" /><argument value="5616708" /><argument value="2480" /><argument value="600" /></process>
+ <process host="c-249.me" function="chord.Node"><argument value="6576536" /><argument value="12800566" /><argument value="2490" /><argument value="600" /></process>
+ <process host="c-250.me" function="chord.Node"><argument value="8387279" /><argument value="4450166" /><argument value="2500" /><argument value="600" /></process>
+ <process host="c-251.me" function="chord.Node"><argument value="1332683" /><argument value="2783698" /><argument value="2510" /><argument value="600" /></process>
+ <process host="c-252.me" function="chord.Node"><argument value="6529404" /><argument value="11208324" /><argument value="2520" /><argument value="600" /></process>
+ <process host="c-253.me" function="chord.Node"><argument value="2247155" /><argument value="15806532" /><argument value="2530" /><argument value="600" /></process>
+ <process host="c-254.me" function="chord.Node"><argument value="2418087" /><argument value="1675312" /><argument value="2540" /><argument value="600" /></process>
+ <process host="c-255.me" function="chord.Node"><argument value="13247200" /><argument value="9249542" /><argument value="2550" /><argument value="600" /></process>
+ <process host="c-256.me" function="chord.Node"><argument value="5651288" /><argument value="13913870" /><argument value="2560" /><argument value="600" /></process>
+ <process host="c-257.me" function="chord.Node"><argument value="4814458" /><argument value="8324575" /><argument value="2570" /><argument value="600" /></process>
+ <process host="c-258.me" function="chord.Node"><argument value="206977" /><argument value="4884753" /><argument value="2580" /><argument value="600" /></process>
+ <process host="c-259.me" function="chord.Node"><argument value="5235743" /><argument value="4341166" /><argument value="2590" /><argument value="600" /></process>
+ <process host="c-260.me" function="chord.Node"><argument value="9885453" /><argument value="1951719" /><argument value="2600" /><argument value="600" /></process>
+ <process host="c-261.me" function="chord.Node"><argument value="5459647" /><argument value="2896334" /><argument value="2610" /><argument value="600" /></process>
+ <process host="c-262.me" function="chord.Node"><argument value="7315238" /><argument value="5519704" /><argument value="2620" /><argument value="600" /></process>
+ <process host="c-263.me" function="chord.Node"><argument value="3311258" /><argument value="10342598" /><argument value="2630" /><argument value="600" /></process>
+ <process host="c-264.me" function="chord.Node"><argument value="648392" /><argument value="12453518" /><argument value="2640" /><argument value="600" /></process>
+ <process host="c-265.me" function="chord.Node"><argument value="2384436" /><argument value="7135313" /><argument value="2650" /><argument value="600" /></process>
+ <process host="c-266.me" function="chord.Node"><argument value="5366610" /><argument value="15145589" /><argument value="2660" /><argument value="600" /></process>
+ <process host="c-267.me" function="chord.Node"><argument value="15927382" /><argument value="11322296" /><argument value="2670" /><argument value="600" /></process>
+ <process host="c-268.me" function="chord.Node"><argument value="15014249" /><argument value="12820728" /><argument value="2680" /><argument value="600" /></process>
+ <process host="c-269.me" function="chord.Node"><argument value="1222644" /><argument value="15254383" /><argument value="2690" /><argument value="600" /></process>
+ <process host="c-270.me" function="chord.Node"><argument value="1459408" /><argument value="1872015" /><argument value="2700" /><argument value="600" /></process>
+ <process host="c-271.me" function="chord.Node"><argument value="16142080" /><argument value="1146754" /><argument value="2710" /><argument value="600" /></process>
+ <process host="c-272.me" function="chord.Node"><argument value="9224143" /><argument value="8387279" /><argument value="2720" /><argument value="600" /></process>
+ <process host="c-273.me" function="chord.Node"><argument value="14447811" /><argument value="4136437" /><argument value="2730" /><argument value="600" /></process>
+ <process host="c-274.me" function="chord.Node"><argument value="5516203" /><argument value="5687549" /><argument value="2740" /><argument value="600" /></process>
+ <process host="c-275.me" function="chord.Node"><argument value="6026298" /><argument value="3221495" /><argument value="2750" /><argument value="600" /></process>
+ <process host="c-276.me" function="chord.Node"><argument value="13946489" /><argument value="701471" /><argument value="2760" /><argument value="600" /></process>
+ <process host="c-277.me" function="chord.Node"><argument value="7277284" /><argument value="2365578" /><argument value="2770" /><argument value="600" /></process>
+ <process host="c-278.me" function="chord.Node"><argument value="2651898" /><argument value="5616708" /><argument value="2780" /><argument value="600" /></process>
+ <process host="c-279.me" function="chord.Node"><argument value="10772846" /><argument value="7135313" /><argument value="2790" /><argument value="600" /></process>
+ <process host="c-280.me" function="chord.Node"><argument value="11841923" /><argument value="11921438" /><argument value="2800" /><argument value="600" /></process>
+ <process host="c-281.me" function="chord.Node"><argument value="1332382" /><argument value="10354580" /><argument value="2810" /><argument value="600" /></process>
+ <process host="c-282.me" function="chord.Node"><argument value="16546388" /><argument value="7448847" /><argument value="2820" /><argument value="600" /></process>
+ <process host="c-283.me" function="chord.Node"><argument value="11649148" /><argument value="12179280" /><argument value="2830" /><argument value="600" /></process>
+ <process host="c-284.me" function="chord.Node"><argument value="11677834" /><argument value="1372085" /><argument value="2840" /><argument value="600" /></process>
+ <process host="c-285.me" function="chord.Node"><argument value="6159464" /><argument value="4894707" /><argument value="2850" /><argument value="600" /></process>
+ <process host="c-286.me" function="chord.Node"><argument value="11791531" /><argument value="8324575" /><argument value="2860" /><argument value="600" /></process>
+ <process host="c-287.me" function="chord.Node"><argument value="10986630" /><argument value="2662428" /><argument value="2870" /><argument value="600" /></process>
+ <process host="c-288.me" function="chord.Node"><argument value="1396718" /><argument value="14649055" /><argument value="2880" /><argument value="600" /></process>
+ <process host="c-289.me" function="chord.Node"><argument value="4802345" /><argument value="8165011" /><argument value="2890" /><argument value="600" /></process>
+ <process host="c-290.me" function="chord.Node"><argument value="7243688" /><argument value="9471834" /><argument value="2900" /><argument value="600" /></process>
+ <process host="c-291.me" function="chord.Node"><argument value="7352277" /><argument value="10702743" /><argument value="2910" /><argument value="600" /></process>
+ <process host="c-292.me" function="chord.Node"><argument value="798578" /><argument value="1872015" /><argument value="2920" /><argument value="600" /></process>
+ <process host="c-293.me" function="chord.Node"><argument value="16354805" /><argument value="11363391" /><argument value="2930" /><argument value="600" /></process>
+ <process host="c-294.me" function="chord.Node"><argument value="16118246" /><argument value="10961177" /><argument value="2940" /><argument value="600" /></process>
+ <process host="c-295.me" function="chord.Node"><argument value="10858001" /><argument value="3311258" /><argument value="2950" /><argument value="600" /></process>
+ <process host="c-296.me" function="chord.Node"><argument value="14079556" /><argument value="4443281" /><argument value="2960" /><argument value="600" /></process>
+ <process host="c-297.me" function="chord.Node"><argument value="11149628" /><argument value="5285994" /><argument value="2970" /><argument value="600" /></process>
+ <process host="c-298.me" function="chord.Node"><argument value="410837" /><argument value="3357753" /><argument value="2980" /><argument value="600" /></process>
+ <process host="c-299.me" function="chord.Node"><argument value="15122301" /><argument value="3669263" /><argument value="2990" /><argument value="600" /></process>
+ <process host="c-300.me" function="chord.Node"><argument value="16380062" /><argument value="7613952" /><argument value="3000" /><argument value="600" /></process>
+ <process host="c-301.me" function="chord.Node"><argument value="4511756" /><argument value="15030895" /><argument value="3010" /><argument value="600" /></process>
+ <process host="c-302.me" function="chord.Node"><argument value="14904732" /><argument value="6420486" /><argument value="3020" /><argument value="600" /></process>
+ <process host="c-303.me" function="chord.Node"><argument value="10157950" /><argument value="1372085" /><argument value="3030" /><argument value="600" /></process>
+ <process host="c-304.me" function="chord.Node"><argument value="4309230" /><argument value="15014249" /><argument value="3040" /><argument value="600" /></process>
+ <process host="c-305.me" function="chord.Node"><argument value="2021192" /><argument value="10157950" /><argument value="3050" /><argument value="600" /></process>
+ <process host="c-306.me" function="chord.Node"><argument value="7675570" /><argument value="648392" /><argument value="3060" /><argument value="600" /></process>
+ <process host="c-307.me" function="chord.Node"><argument value="14629708" /><argument value="2418087" /><argument value="3070" /><argument value="600" /></process>
+ <process host="c-308.me" function="chord.Node"><argument value="12933525" /><argument value="12820728" /><argument value="3080" /><argument value="600" /></process>
+ <process host="c-309.me" function="chord.Node"><argument value="6236480" /><argument value="7338154" /><argument value="3090" /><argument value="600" /></process>
+ <process host="c-310.me" function="chord.Node"><argument value="2125529" /><argument value="12125415" /><argument value="3100" /><argument value="600" /></process>
+ <process host="c-311.me" function="chord.Node"><argument value="3216983" /><argument value="701471" /><argument value="3110" /><argument value="600" /></process>
+ <process host="c-312.me" function="chord.Node"><argument value="4526200" /><argument value="722267" /><argument value="3120" /><argument value="600" /></process>
+ <process host="c-313.me" function="chord.Node"><argument value="13502573" /><argument value="6751289" /><argument value="3130" /><argument value="600" /></process>
+ <process host="c-314.me" function="chord.Node"><argument value="289785" /><argument value="4136437" /><argument value="3140" /><argument value="600" /></process>
+ <process host="c-315.me" function="chord.Node"><argument value="7039480" /><argument value="1332683" /><argument value="3150" /><argument value="600" /></process>
+ <process host="c-316.me" function="chord.Node"><argument value="969165" /><argument value="9954221" /><argument value="3160" /><argument value="600" /></process>
+ <process host="c-317.me" function="chord.Node"><argument value="16761413" /><argument value="7092394" /><argument value="3170" /><argument value="600" /></process>
+ <process host="c-318.me" function="chord.Node"><argument value="2440066" /><argument value="2418087" /><argument value="3180" /><argument value="600" /></process>
+ <process host="c-319.me" function="chord.Node"><argument value="13344696" /><argument value="1332683" /><argument value="3190" /><argument value="600" /></process>
+ <process host="c-320.me" function="chord.Node"><argument value="7440076" /><argument value="13913870" /><argument value="3200" /><argument value="600" /></process>
+ <process host="c-321.me" function="chord.Node"><argument value="6238286" /><argument value="9654276" /><argument value="3210" /><argument value="600" /></process>
+ <process host="c-322.me" function="chord.Node"><argument value="16556231" /><argument value="2651898" /><argument value="3220" /><argument value="600" /></process>
+ <process host="c-323.me" function="chord.Node"><argument value="14422882" /><argument value="4443281" /><argument value="3230" /><argument value="600" /></process>
+ <process host="c-324.me" function="chord.Node"><argument value="11242873" /><argument value="2384436" /><argument value="3240" /><argument value="600" /></process>
+ <process host="c-325.me" function="chord.Node"><argument value="11369726" /><argument value="9190005" /><argument value="3250" /><argument value="600" /></process>
+ <process host="c-326.me" function="chord.Node"><argument value="14109542" /><argument value="2418087" /><argument value="3260" /><argument value="600" /></process>
+ <process host="c-327.me" function="chord.Node"><argument value="671344" /><argument value="701471" /><argument value="3270" /><argument value="600" /></process>
+ <process host="c-328.me" function="chord.Node"><argument value="11675101" /><argument value="3201863" /><argument value="3280" /><argument value="600" /></process>
+ <process host="c-329.me" function="chord.Node"><argument value="8732087" /><argument value="14079556" /><argument value="3290" /><argument value="600" /></process>
+ <process host="c-330.me" function="chord.Node"><argument value="8813314" /><argument value="16728462" /><argument value="3300" /><argument value="600" /></process>
+ <process host="c-331.me" function="chord.Node"><argument value="9932377" /><argument value="15030895" /><argument value="3310" /><argument value="600" /></process>
+ <process host="c-332.me" function="chord.Node"><argument value="7710314" /><argument value="6858862" /><argument value="3320" /><argument value="600" /></process>
+ <process host="c-333.me" function="chord.Node"><argument value="5951691" /><argument value="9875617" /><argument value="3330" /><argument value="600" /></process>
+ <process host="c-334.me" function="chord.Node"><argument value="13678295" /><argument value="5706499" /><argument value="3340" /><argument value="600" /></process>
+ <process host="c-335.me" function="chord.Node"><argument value="13509937" /><argument value="14994723" /><argument value="3350" /><argument value="600" /></process>
+ <process host="c-336.me" function="chord.Node"><argument value="13177638" /><argument value="4884753" /><argument value="3360" /><argument value="600" /></process>
+ <process host="c-337.me" function="chord.Node"><argument value="10453727" /><argument value="1332382" /><argument value="3370" /><argument value="600" /></process>
+ <process host="c-338.me" function="chord.Node"><argument value="12462635" /><argument value="10204339" /><argument value="3380" /><argument value="600" /></process>
+ <process host="c-339.me" function="chord.Node"><argument value="9679679" /><argument value="4832327" /><argument value="3390" /><argument value="600" /></process>
+ <process host="c-340.me" function="chord.Node"><argument value="98373" /><argument value="7039480" /><argument value="3400" /><argument value="600" /></process>
+ <process host="c-341.me" function="chord.Node"><argument value="7436193" /><argument value="12800566" /><argument value="3410" /><argument value="600" /></process>
+ <process host="c-342.me" function="chord.Node"><argument value="2479821" /><argument value="11363391" /><argument value="3420" /><argument value="600" /></process>
+ <process host="c-343.me" function="chord.Node"><argument value="756602" /><argument value="11193411" /><argument value="3430" /><argument value="600" /></process>
+ <process host="c-344.me" function="chord.Node"><argument value="4656715" /><argument value="14947389" /><argument value="3440" /><argument value="600" /></process>
+ <process host="c-345.me" function="chord.Node"><argument value="3913113" /><argument value="15549881" /><argument value="3450" /><argument value="600" /></process>
+ <process host="c-346.me" function="chord.Node"><argument value="14580390" /><argument value="14794206" /><argument value="3460" /><argument value="600" /></process>
+ <process host="c-347.me" function="chord.Node"><argument value="8429834" /><argument value="9190005" /><argument value="3470" /><argument value="600" /></process>
+ <process host="c-348.me" function="chord.Node"><argument value="7396153" /><argument value="6576536" /><argument value="3480" /><argument value="600" /></process>
+ <process host="c-349.me" function="chord.Node"><argument value="2520804" /><argument value="1146754" /><argument value="3490" /><argument value="600" /></process>
+ <process host="c-350.me" function="chord.Node"><argument value="11778173" /><argument value="12396321" /><argument value="3500" /><argument value="600" /></process>
+ <process host="c-351.me" function="chord.Node"><argument value="16516247" /><argument value="8165011" /><argument value="3510" /><argument value="600" /></process>
+ <process host="c-352.me" function="chord.Node"><argument value="13354857" /><argument value="15230648" /><argument value="3520" /><argument value="600" /></process>
+ <process host="c-353.me" function="chord.Node"><argument value="15613776" /><argument value="3825920" /><argument value="3530" /><argument value="600" /></process>
+ <process host="c-354.me" function="chord.Node"><argument value="7563765" /><argument value="7448847" /><argument value="3540" /><argument value="600" /></process>
+ <process host="c-355.me" function="chord.Node"><argument value="31357" /><argument value="8324575" /><argument value="3550" /><argument value="600" /></process>
+ <process host="c-356.me" function="chord.Node"><argument value="15894249" /><argument value="4530956" /><argument value="3560" /><argument value="600" /></process>
+ <process host="c-357.me" function="chord.Node"><argument value="12803982" /><argument value="10702743" /><argument value="3570" /><argument value="600" /></process>
+ <process host="c-358.me" function="chord.Node"><argument value="9762404" /><argument value="4945538" /><argument value="3580" /><argument value="600" /></process>
+ <process host="c-359.me" function="chord.Node"><argument value="11954349" /><argument value="8732087" /><argument value="3590" /><argument value="600" /></process>
+ <process host="c-360.me" function="chord.Node"><argument value="8341335" /><argument value="4972191" /><argument value="3600" /><argument value="600" /></process>
+ <process host="c-361.me" function="chord.Node"><argument value="14756686" /><argument value="10649272" /><argument value="3610" /><argument value="600" /></process>
+ <process host="c-362.me" function="chord.Node"><argument value="8745990" /><argument value="1139662" /><argument value="3620" /><argument value="600" /></process>
+ <process host="c-363.me" function="chord.Node"><argument value="672770" /><argument value="7135313" /><argument value="3630" /><argument value="600" /></process>
+ <process host="c-364.me" function="chord.Node"><argument value="11647438" /><argument value="2783698" /><argument value="3640" /><argument value="600" /></process>
+ <process host="c-365.me" function="chord.Node"><argument value="2335101" /><argument value="16375132" /><argument value="3650" /><argument value="600" /></process>
+ <process host="c-366.me" function="chord.Node"><argument value="435798" /><argument value="1536550" /><argument value="3660" /><argument value="600" /></process>
+ <process host="c-367.me" function="chord.Node"><argument value="7304318" /><argument value="13247200" /><argument value="3670" /><argument value="600" /></process>
+ <process host="c-368.me" function="chord.Node"><argument value="11635363" /><argument value="10453727" /><argument value="3680" /><argument value="600" /></process>
+ <process host="c-369.me" function="chord.Node"><argument value="10757464" /><argument value="2520804" /><argument value="3690" /><argument value="600" /></process>
+ <process host="c-370.me" function="chord.Node"><argument value="5142077" /><argument value="4309230" /><argument value="3700" /><argument value="600" /></process>
+ <process host="c-371.me" function="chord.Node"><argument value="7822081" /><argument value="7564932" /><argument value="3710" /><argument value="600" /></process>
+ <process host="c-372.me" function="chord.Node"><argument value="11878038" /><argument value="3109636" /><argument value="3720" /><argument value="600" /></process>
+ <process host="c-373.me" function="chord.Node"><argument value="15681509" /><argument value="11647438" /><argument value="3730" /><argument value="600" /></process>
+ <process host="c-374.me" function="chord.Node"><argument value="721833" /><argument value="9679679" /><argument value="3740" /><argument value="600" /></process>
+ <process host="c-375.me" function="chord.Node"><argument value="14335164" /><argument value="14109542" /><argument value="3750" /><argument value="600" /></process>
+ <process host="c-376.me" function="chord.Node"><argument value="14038546" /><argument value="10354580" /><argument value="3760" /><argument value="600" /></process>
+ <process host="c-377.me" function="chord.Node"><argument value="3173749" /><argument value="1361604" /><argument value="3770" /><argument value="600" /></process>
+ <process host="c-378.me" function="chord.Node"><argument value="9786553" /><argument value="2101123" /><argument value="3780" /><argument value="600" /></process>
+ <process host="c-379.me" function="chord.Node"><argument value="15671308" /><argument value="9932377" /><argument value="3790" /><argument value="600" /></process>
+ <process host="c-380.me" function="chord.Node"><argument value="12280811" /><argument value="15230648" /><argument value="3800" /><argument value="600" /></process>
+ <process host="c-381.me" function="chord.Node"><argument value="15865713" /><argument value="13914475" /><argument value="3810" /><argument value="600" /></process>
+ <process host="c-382.me" function="chord.Node"><argument value="13725826" /><argument value="5235743" /><argument value="3820" /><argument value="600" /></process>
+ <process host="c-383.me" function="chord.Node"><argument value="5022965" /><argument value="6794166" /><argument value="3830" /><argument value="600" /></process>
+ <process host="c-384.me" function="chord.Node"><argument value="8147077" /><argument value="11502306" /><argument value="3840" /><argument value="600" /></process>
+ <process host="c-385.me" function="chord.Node"><argument value="1599493" /><argument value="4802345" /><argument value="3850" /><argument value="600" /></process>
+ <process host="c-386.me" function="chord.Node"><argument value="15512406" /><argument value="14197736" /><argument value="3860" /><argument value="600" /></process>
+ <process host="c-387.me" function="chord.Node"><argument value="16248621" /><argument value="10858001" /><argument value="3870" /><argument value="600" /></process>
+ <process host="c-388.me" function="chord.Node"><argument value="10182987" /><argument value="15681509" /><argument value="3880" /><argument value="600" /></process>
+ <process host="c-389.me" function="chord.Node"><argument value="14798030" /><argument value="7072398" /><argument value="3890" /><argument value="600" /></process>
+ <process host="c-390.me" function="chord.Node"><argument value="5606439" /><argument value="935561" /><argument value="3900" /><argument value="600" /></process>
+ <process host="c-391.me" function="chord.Node"><argument value="6928634" /><argument value="9749604" /><argument value="3910" /><argument value="600" /></process>
+ <process host="c-392.me" function="chord.Node"><argument value="4696190" /><argument value="5951691" /><argument value="3920" /><argument value="600" /></process>
+ <process host="c-393.me" function="chord.Node"><argument value="2127225" /><argument value="10561938" /><argument value="3930" /><argument value="600" /></process>
+ <process host="c-394.me" function="chord.Node"><argument value="11406641" /><argument value="15006544" /><argument value="3940" /><argument value="600" /></process>
+ <process host="c-395.me" function="chord.Node"><argument value="2201622" /><argument value="3607342" /><argument value="3950" /><argument value="600" /></process>
+ <process host="c-396.me" function="chord.Node"><argument value="5218127" /><argument value="11778173" /><argument value="3960" /><argument value="600" /></process>
+ <process host="c-397.me" function="chord.Node"><argument value="7990267" /><argument value="11502306" /><argument value="3970" /><argument value="600" /></process>
+ <process host="c-398.me" function="chord.Node"><argument value="2700613" /><argument value="12919319" /><argument value="3980" /><argument value="600" /></process>
+ <process host="c-399.me" function="chord.Node"><argument value="9128609" /><argument value="10757464" /><argument value="3990" /><argument value="600" /></process>
+ <process host="c-400.me" function="chord.Node"><argument value="5413715" /><argument value="197228" /><argument value="4000" /><argument value="600" /></process>
+ <process host="c-401.me" function="chord.Node"><argument value="3904684" /><argument value="3109636" /><argument value="4010" /><argument value="600" /></process>
+ <process host="c-402.me" function="chord.Node"><argument value="2860436" /><argument value="6258230" /><argument value="4020" /><argument value="600" /></process>
+ <process host="c-403.me" function="chord.Node"><argument value="861081" /><argument value="4894707" /><argument value="4030" /><argument value="600" /></process>
+ <process host="c-404.me" function="chord.Node"><argument value="2102903" /><argument value="5203326" /><argument value="4040" /><argument value="600" /></process>
+ <process host="c-405.me" function="chord.Node"><argument value="13462468" /><argument value="5706499" /><argument value="4050" /><argument value="600" /></process>
+ <process host="c-406.me" function="chord.Node"><argument value="12084108" /><argument value="11242873" /><argument value="4060" /><argument value="600" /></process>
+ <process host="c-407.me" function="chord.Node"><argument value="11043210" /><argument value="11242873" /><argument value="4070" /><argument value="600" /></process>
+ <process host="c-408.me" function="chord.Node"><argument value="1348476" /><argument value="702830" /><argument value="4080" /><argument value="600" /></process>
+ <process host="c-409.me" function="chord.Node"><argument value="773142" /><argument value="8047622" /><argument value="4090" /><argument value="600" /></process>
+ <process host="c-410.me" function="chord.Node"><argument value="3901913" /><argument value="16556231" /><argument value="4100" /><argument value="600" /></process>
+ <process host="c-411.me" function="chord.Node"><argument value="15579910" /><argument value="7072398" /><argument value="4110" /><argument value="600" /></process>
+ <process host="c-412.me" function="chord.Node"><argument value="4179708" /><argument value="3669263" /><argument value="4120" /><argument value="600" /></process>
+ <process host="c-413.me" function="chord.Node"><argument value="13710925" /><argument value="15833989" /><argument value="4130" /><argument value="600" /></process>
+ <process host="c-414.me" function="chord.Node"><argument value="8697753" /><argument value="7457424" /><argument value="4140" /><argument value="600" /></process>
+ <process host="c-415.me" function="chord.Node"><argument value="6900443" /><argument value="98373" /><argument value="4150" /><argument value="600" /></process>
+ <process host="c-416.me" function="chord.Node"><argument value="12441838" /><argument value="16375132" /><argument value="4160" /><argument value="600" /></process>
+ <process host="c-417.me" function="chord.Node"><argument value="14275782" /><argument value="4945538" /><argument value="4170" /><argument value="600" /></process>
+ <process host="c-418.me" function="chord.Node"><argument value="6777604" /><argument value="5022965" /><argument value="4180" /><argument value="600" /></process>
+ <process host="c-419.me" function="chord.Node"><argument value="1929021" /><argument value="10858001" /><argument value="4190" /><argument value="600" /></process>
+ <process host="c-420.me" function="chord.Node"><argument value="5658815" /><argument value="14079556" /><argument value="4200" /><argument value="600" /></process>
+ <process host="c-421.me" function="chord.Node"><argument value="8811158" /><argument value="9694594" /><argument value="4210" /><argument value="600" /></process>
+ <process host="c-422.me" function="chord.Node"><argument value="10331354" /><argument value="435798" /><argument value="4220" /><argument value="600" /></process>
+ <process host="c-423.me" function="chord.Node"><argument value="10835712" /><argument value="6258230" /><argument value="4230" /><argument value="600" /></process>
+ <process host="c-424.me" function="chord.Node"><argument value="4535064" /><argument value="4136437" /><argument value="4240" /><argument value="600" /></process>
+ <process host="c-425.me" function="chord.Node"><argument value="16344054" /><argument value="11502306" /><argument value="4250" /><argument value="600" /></process>
+ <process host="c-426.me" function="chord.Node"><argument value="1295867" /><argument value="648392" /><argument value="4260" /><argument value="600" /></process>
+ <process host="c-427.me" function="chord.Node"><argument value="7513758" /><argument value="7563765" /><argument value="4270" /><argument value="600" /></process>
+ <process host="c-428.me" function="chord.Node"><argument value="15403037" /><argument value="8288385" /><argument value="4280" /><argument value="600" /></process>
+ <process host="c-429.me" function="chord.Node"><argument value="7413167" /><argument value="8813314" /><argument value="4290" /><argument value="600" /></process>
+ <process host="c-430.me" function="chord.Node"><argument value="12935709" /><argument value="8129508" /><argument value="4300" /><argument value="600" /></process>
+ <process host="c-431.me" function="chord.Node"><argument value="14466258" /><argument value="7990267" /><argument value="4310" /><argument value="600" /></process>
+ <process host="c-432.me" function="chord.Node"><argument value="1646195" /><argument value="7277284" /><argument value="4320" /><argument value="600" /></process>
+ <process host="c-433.me" function="chord.Node"><argument value="14418513" /><argument value="9101477" /><argument value="4330" /><argument value="600" /></process>
+ <process host="c-434.me" function="chord.Node"><argument value="13972648" /><argument value="12815150" /><argument value="4340" /><argument value="600" /></process>
+ <process host="c-435.me" function="chord.Node"><argument value="14874127" /><argument value="8518148" /><argument value="4350" /><argument value="600" /></process>
+ <process host="c-436.me" function="chord.Node"><argument value="3090835" /><argument value="4656715" /><argument value="4360" /><argument value="600" /></process>
+ <process host="c-437.me" function="chord.Node"><argument value="1283149" /><argument value="13725826" /><argument value="4370" /><argument value="600" /></process>
+ <process host="c-438.me" function="chord.Node"><argument value="13880814" /><argument value="11317893" /><argument value="4380" /><argument value="600" /></process>
+ <process host="c-439.me" function="chord.Node"><argument value="14094748" /><argument value="2440066" /><argument value="4390" /><argument value="600" /></process>
+ <process host="c-440.me" function="chord.Node"><argument value="14385526" /><argument value="7198125" /><argument value="4400" /><argument value="600" /></process>
+ <process host="c-441.me" function="chord.Node"><argument value="9027011" /><argument value="15512406" /><argument value="4410" /><argument value="600" /></process>
+ <process host="c-442.me" function="chord.Node"><argument value="16620700" /><argument value="14994723" /><argument value="4420" /><argument value="600" /></process>
+ <process host="c-443.me" function="chord.Node"><argument value="9664730" /><argument value="5366610" /><argument value="4430" /><argument value="600" /></process>
+ <process host="c-444.me" function="chord.Node"><argument value="3500428" /><argument value="1599493" /><argument value="4440" /><argument value="600" /></process>
+ <process host="c-445.me" function="chord.Node"><argument value="11272471" /><argument value="14422882" /><argument value="4450" /><argument value="600" /></process>
+ <process host="c-446.me" function="chord.Node"><argument value="5426352" /><argument value="11369726" /><argument value="4460" /><argument value="600" /></process>
+ <process host="c-447.me" function="chord.Node"><argument value="4328458" /><argument value="2384436" /><argument value="4470" /><argument value="600" /></process>
+ <process host="c-448.me" function="chord.Node"><argument value="12755183" /><argument value="1599493" /><argument value="4480" /><argument value="600" /></process>
+ <process host="c-449.me" function="chord.Node"><argument value="16660979" /><argument value="1372085" /><argument value="4490" /><argument value="600" /></process>
+ <process host="c-450.me" function="chord.Node"><argument value="1662538" /><argument value="3773391" /><argument value="4500" /><argument value="600" /></process>
+ <process host="c-451.me" function="chord.Node"><argument value="4520140" /><argument value="4692999" /><argument value="4510" /><argument value="600" /></process>
+ <process host="c-452.me" function="chord.Node"><argument value="7860807" /><argument value="10643900" /><argument value="4520" /><argument value="600" /></process>
+ <process host="c-453.me" function="chord.Node"><argument value="11115123" /><argument value="14335164" /><argument value="4530" /><argument value="600" /></process>
+ <process host="c-454.me" function="chord.Node"><argument value="13068526" /><argument value="13946489" /><argument value="4540" /><argument value="600" /></process>
+ <process host="c-455.me" function="chord.Node"><argument value="11061423" /><argument value="6420486" /><argument value="4550" /><argument value="600" /></process>
+ <process host="c-456.me" function="chord.Node"><argument value="3716755" /><argument value="13344696" /><argument value="4560" /><argument value="600" /></process>
+ <process host="c-457.me" function="chord.Node"><argument value="9942487" /><argument value="15254383" /><argument value="4570" /><argument value="600" /></process>
+ <process host="c-458.me" function="chord.Node"><argument value="7892902" /><argument value="4526200" /><argument value="4580" /><argument value="600" /></process>
+ <process host="c-459.me" function="chord.Node"><argument value="14553257" /><argument value="212458" /><argument value="4590" /><argument value="600" /></process>
+ <process host="c-460.me" function="chord.Node"><argument value="1952937" /><argument value="12755183" /><argument value="4600" /><argument value="600" /></process>
+ <process host="c-461.me" function="chord.Node"><argument value="10222800" /><argument value="15681509" /><argument value="4610" /><argument value="600" /></process>
+ <process host="c-462.me" function="chord.Node"><argument value="10480893" /><argument value="12280811" /><argument value="4620" /><argument value="600" /></process>
+ <process host="c-463.me" function="chord.Node"><argument value="15634875" /><argument value="305689" /><argument value="4630" /><argument value="600" /></process>
+ <process host="c-464.me" function="chord.Node"><argument value="13701043" /><argument value="2418087" /><argument value="4640" /><argument value="600" /></process>
+ <process host="c-465.me" function="chord.Node"><argument value="6349943" /><argument value="6928634" /><argument value="4650" /><argument value="600" /></process>
+ <process host="c-466.me" function="chord.Node"><argument value="14891461" /><argument value="16481633" /><argument value="4660" /><argument value="600" /></process>
+ <process host="c-467.me" function="chord.Node"><argument value="3228117" /><argument value="13876983" /><argument value="4670" /><argument value="600" /></process>
+ <process host="c-468.me" function="chord.Node"><argument value="16050875" /><argument value="15254383" /><argument value="4680" /><argument value="600" /></process>
+ <process host="c-469.me" function="chord.Node"><argument value="4148854" /><argument value="7072398" /><argument value="4690" /><argument value="600" /></process>
+ <process host="c-470.me" function="chord.Node"><argument value="2322105" /><argument value="5413715" /><argument value="4700" /><argument value="600" /></process>
+ <process host="c-471.me" function="chord.Node"><argument value="2463836" /><argument value="435798" /><argument value="4710" /><argument value="600" /></process>
+ <process host="c-472.me" function="chord.Node"><argument value="13254256" /><argument value="7860807" /><argument value="4720" /><argument value="600" /></process>
+ <process host="c-473.me" function="chord.Node"><argument value="15486518" /><argument value="5651288" /><argument value="4730" /><argument value="600" /></process>
+ <process host="c-474.me" function="chord.Node"><argument value="13965863" /><argument value="11267801" /><argument value="4740" /><argument value="600" /></process>
+ <process host="c-475.me" function="chord.Node"><argument value="10379706" /><argument value="3228117" /><argument value="4750" /><argument value="600" /></process>
+ <process host="c-476.me" function="chord.Node"><argument value="13682856" /><argument value="15122301" /><argument value="4760" /><argument value="600" /></process>
+ <process host="c-477.me" function="chord.Node"><argument value="15833788" /><argument value="5142077" /><argument value="4770" /><argument value="600" /></process>
+ <process host="c-478.me" function="chord.Node"><argument value="99291" /><argument value="1146754" /><argument value="4780" /><argument value="600" /></process>
+ <process host="c-479.me" function="chord.Node"><argument value="8728151" /><argument value="9885453" /><argument value="4790" /><argument value="600" /></process>
+ <process host="c-480.me" function="chord.Node"><argument value="15926887" /><argument value="969165" /><argument value="4800" /><argument value="600" /></process>
+ <process host="c-481.me" function="chord.Node"><argument value="7362712" /><argument value="10222800" /><argument value="4810" /><argument value="600" /></process>
+ <process host="c-482.me" function="chord.Node"><argument value="3406740" /><argument value="15512406" /><argument value="4820" /><argument value="600" /></process>
+ <process host="c-483.me" function="chord.Node"><argument value="3450027" /><argument value="7277284" /><argument value="4830" /><argument value="600" /></process>
+ <process host="c-484.me" function="chord.Node"><argument value="1364855" /><argument value="1829446" /><argument value="4840" /><argument value="600" /></process>
+ <process host="c-485.me" function="chord.Node"><argument value="500021" /><argument value="11635363" /><argument value="4850" /><argument value="600" /></process>
+ <process host="c-486.me" function="chord.Node"><argument value="7199154" /><argument value="8478498" /><argument value="4860" /><argument value="600" /></process>
+ <process host="c-487.me" function="chord.Node"><argument value="8111928" /><argument value="14934950" /><argument value="4870" /><argument value="600" /></process>
+ <process host="c-488.me" function="chord.Node"><argument value="8428378" /><argument value="3201863" /><argument value="4880" /><argument value="600" /></process>
+ <process host="c-489.me" function="chord.Node"><argument value="11972882" /><argument value="14794206" /><argument value="4890" /><argument value="600" /></process>
+ <process host="c-490.me" function="chord.Node"><argument value="1248721" /><argument value="3406740" /><argument value="4900" /><argument value="600" /></process>
+ <process host="c-491.me" function="chord.Node"><argument value="14821309" /><argument value="10846646" /><argument value="4910" /><argument value="600" /></process>
+ <process host="c-492.me" function="chord.Node"><argument value="13390365" /><argument value="935561" /><argument value="4920" /><argument value="600" /></process>
+ <process host="c-493.me" function="chord.Node"><argument value="13217516" /><argument value="6258230" /><argument value="4930" /><argument value="600" /></process>
+ <process host="c-494.me" function="chord.Node"><argument value="6225637" /><argument value="773142" /><argument value="4940" /><argument value="600" /></process>
+ <process host="c-495.me" function="chord.Node"><argument value="12314962" /><argument value="10702743" /><argument value="4950" /><argument value="600" /></process>
+ <process host="c-496.me" function="chord.Node"><argument value="4666118" /><argument value="2102903" /><argument value="4960" /><argument value="600" /></process>
+ <process host="c-497.me" function="chord.Node"><argument value="15271447" /><argument value="14361444" /><argument value="4970" /><argument value="600" /></process>
+ <process host="c-498.me" function="chord.Node"><argument value="9371566" /><argument value="10020838" /><argument value="4980" /><argument value="600" /></process>
+ <process host="c-499.me" function="chord.Node"><argument value="6352096" /><argument value="12345661" /><argument value="4990" /><argument value="600" /></process>
+ <process host="c-500.me" function="chord.Node"><argument value="10110616" /><argument value="16050875" /><argument value="5000" /><argument value="600" /></process>
+ <process host="c-501.me" function="chord.Node"><argument value="5484939" /><argument value="7453537" /><argument value="5010" /><argument value="600" /></process>
+ <process host="c-502.me" function="chord.Node"><argument value="9524149" /><argument value="8697753" /><argument value="5020" /><argument value="600" /></process>
+ <process host="c-503.me" function="chord.Node"><argument value="7378805" /><argument value="9249542" /><argument value="5030" /><argument value="600" /></process>
+ <process host="c-504.me" function="chord.Node"><argument value="3038976" /><argument value="7092394" /><argument value="5040" /><argument value="600" /></process>
+ <process host="c-505.me" function="chord.Node"><argument value="6986433" /><argument value="11791531" /><argument value="5050" /><argument value="600" /></process>
+ <process host="c-506.me" function="chord.Node"><argument value="894589" /><argument value="6409915" /><argument value="5060" /><argument value="600" /></process>
+ <process host="c-507.me" function="chord.Node"><argument value="9511753" /><argument value="10182987" /><argument value="5070" /><argument value="600" /></process>
+ <process host="c-508.me" function="chord.Node"><argument value="15283882" /><argument value="7983522" /><argument value="5080" /><argument value="600" /></process>
+ <process host="c-509.me" function="chord.Node"><argument value="9086496" /><argument value="4309230" /><argument value="5090" /><argument value="600" /></process>
+ <process host="c-510.me" function="chord.Node"><argument value="5261542" /><argument value="13972648" /><argument value="5100" /><argument value="600" /></process>
+ <process host="c-511.me" function="chord.Node"><argument value="11438484" /><argument value="6385309" /><argument value="5110" /><argument value="600" /></process>
+ <process host="c-512.me" function="chord.Node"><argument value="3250215" /><argument value="5737423" /><argument value="5120" /><argument value="600" /></process>
+ <process host="c-513.me" function="chord.Node"><argument value="10511073" /><argument value="13344696" /><argument value="5130" /><argument value="600" /></process>
+ <process host="c-514.me" function="chord.Node"><argument value="2425443" /><argument value="4814458" /><argument value="5140" /><argument value="600" /></process>
+ <process host="c-515.me" function="chord.Node"><argument value="15074527" /><argument value="13972648" /><argument value="5150" /><argument value="600" /></process>
+ <process host="c-516.me" function="chord.Node"><argument value="9278592" /><argument value="5218127" /><argument value="5160" /><argument value="600" /></process>
+ <process host="c-517.me" function="chord.Node"><argument value="2406756" /><argument value="11791531" /><argument value="5170" /><argument value="600" /></process>
+ <process host="c-518.me" function="chord.Node"><argument value="460893" /><argument value="5203326" /><argument value="5180" /><argument value="600" /></process>
+ <process host="c-519.me" function="chord.Node"><argument value="1793625" /><argument value="9376851" /><argument value="5190" /><argument value="600" /></process>
+ <process host="c-520.me" function="chord.Node"><argument value="1337865" /><argument value="9875617" /><argument value="5200" /><argument value="600" /></process>
+ <process host="c-521.me" function="chord.Node"><argument value="9911167" /><argument value="2102903" /><argument value="5210" /><argument value="600" /></process>
+ <process host="c-522.me" function="chord.Node"><argument value="11668849" /><argument value="11954349" /><argument value="5220" /><argument value="600" /></process>
+ <process host="c-523.me" function="chord.Node"><argument value="10389098" /><argument value="14524520" /><argument value="5230" /><argument value="600" /></process>
+ <process host="c-524.me" function="chord.Node"><argument value="4330462" /><argument value="16761413" /><argument value="5240" /><argument value="600" /></process>
+ <process host="c-525.me" function="chord.Node"><argument value="16051795" /><argument value="3311258" /><argument value="5250" /><argument value="600" /></process>
+ <process host="c-526.me" function="chord.Node"><argument value="9197489" /><argument value="1433361" /><argument value="5260" /><argument value="600" /></process>
+ <process host="c-527.me" function="chord.Node"><argument value="2479550" /><argument value="16248621" /><argument value="5270" /><argument value="600" /></process>
+ <process host="c-528.me" function="chord.Node"><argument value="5252206" /><argument value="13344696" /><argument value="5280" /><argument value="600" /></process>
+ <process host="c-529.me" function="chord.Node"><argument value="3960891" /><argument value="15014249" /><argument value="5290" /><argument value="600" /></process>
+ <process host="c-530.me" function="chord.Node"><argument value="281329" /><argument value="13701043" /><argument value="5300" /><argument value="600" /></process>
+ <process host="c-531.me" function="chord.Node"><argument value="1145530" /><argument value="4832327" /><argument value="5310" /><argument value="600" /></process>
+ <process host="c-532.me" function="chord.Node"><argument value="99446" /><argument value="2520804" /><argument value="5320" /><argument value="600" /></process>
+ <process host="c-533.me" function="chord.Node"><argument value="3266490" /><argument value="15982771" /><argument value="5330" /><argument value="600" /></process>
+ <process host="c-534.me" function="chord.Node"><argument value="6971171" /><argument value="4330462" /><argument value="5340" /><argument value="600" /></process>
+ <process host="c-535.me" function="chord.Node"><argument value="8889590" /><argument value="2201622" /><argument value="5350" /><argument value="600" /></process>
+ <process host="c-536.me" function="chord.Node"><argument value="7755503" /><argument value="2096790" /><argument value="5360" /><argument value="600" /></process>
+ <process host="c-537.me" function="chord.Node"><argument value="14360314" /><argument value="9954221" /><argument value="5370" /><argument value="600" /></process>
+ <process host="c-538.me" function="chord.Node"><argument value="8005694" /><argument value="13217516" /><argument value="5380" /><argument value="600" /></process>
+ <process host="c-539.me" function="chord.Node"><argument value="9961414" /><argument value="11317893" /><argument value="5390" /><argument value="600" /></process>
+ <process host="c-540.me" function="chord.Node"><argument value="12508084" /><argument value="1872015" /><argument value="5400" /><argument value="600" /></process>
+ <process host="c-541.me" function="chord.Node"><argument value="14666163" /><argument value="3250215" /><argument value="5410" /><argument value="600" /></process>
+ <process host="c-542.me" function="chord.Node"><argument value="10266651" /><argument value="4209108" /><argument value="5420" /><argument value="600" /></process>
+ <process host="c-543.me" function="chord.Node"><argument value="13432148" /><argument value="16516247" /><argument value="5430" /><argument value="600" /></process>
+ <process host="c-544.me" function="chord.Node"><argument value="10599403" /><argument value="3070" /><argument value="5440" /><argument value="600" /></process>
+ <process host="c-545.me" function="chord.Node"><argument value="8795616" /><argument value="4330462" /><argument value="5450" /><argument value="600" /></process>
+ <process host="c-546.me" function="chord.Node"><argument value="5813269" /><argument value="9885453" /><argument value="5460" /><argument value="600" /></process>
+ <process host="c-547.me" function="chord.Node"><argument value="12894114" /><argument value="7978724" /><argument value="5470" /><argument value="600" /></process>
+ <process host="c-548.me" function="chord.Node"><argument value="1529527" /><argument value="3825920" /><argument value="5480" /><argument value="600" /></process>
+ <process host="c-549.me" function="chord.Node"><argument value="12695404" /><argument value="14996644" /><argument value="5490" /><argument value="600" /></process>
+ <process host="c-550.me" function="chord.Node"><argument value="1914810" /><argument value="9224143" /><argument value="5500" /><argument value="600" /></process>
+ <process host="c-551.me" function="chord.Node"><argument value="5184071" /><argument value="6971171" /><argument value="5510" /><argument value="600" /></process>
+ <process host="c-552.me" function="chord.Node"><argument value="734171" /><argument value="1929021" /><argument value="5520" /><argument value="600" /></process>
+ <process host="c-553.me" function="chord.Node"><argument value="5849165" /><argument value="584392" /><argument value="5530" /><argument value="600" /></process>
+ <process host="c-554.me" function="chord.Node"><argument value="12083659" /><argument value="2406756" /><argument value="5540" /><argument value="600" /></process>
+ <process host="c-555.me" function="chord.Node"><argument value="13270615" /><argument value="4945538" /><argument value="5550" /><argument value="600" /></process>
+ <process host="c-556.me" function="chord.Node"><argument value="1317511" /><argument value="6236480" /><argument value="5560" /><argument value="600" /></process>
+ <process host="c-557.me" function="chord.Node"><argument value="10842692" /><argument value="14197736" /><argument value="5570" /><argument value="600" /></process>
+ <process host="c-558.me" function="chord.Node"><argument value="6688594" /><argument value="4945538" /><argument value="5580" /><argument value="600" /></process>
+ <process host="c-559.me" function="chord.Node"><argument value="7481530" /><argument value="9654276" /><argument value="5590" /><argument value="600" /></process>
+ <process host="c-560.me" function="chord.Node"><argument value="9578321" /><argument value="9086496" /><argument value="5600" /><argument value="600" /></process>
+ <process host="c-561.me" function="chord.Node"><argument value="6793589" /><argument value="1793625" /><argument value="5610" /><argument value="600" /></process>
+ <process host="c-562.me" function="chord.Node"><argument value="7479516" /><argument value="5203326" /><argument value="5620" /><argument value="600" /></process>
+ <process host="c-563.me" function="chord.Node"><argument value="4391448" /><argument value="7362712" /><argument value="5630" /><argument value="600" /></process>
+ <process host="c-564.me" function="chord.Node"><argument value="8896387" /><argument value="13177638" /><argument value="5640" /><argument value="600" /></process>
+ <process host="c-565.me" function="chord.Node"><argument value="8214632" /><argument value="10110616" /><argument value="5650" /><argument value="600" /></process>
+ <process host="c-566.me" function="chord.Node"><argument value="11075188" /><argument value="13509653" /><argument value="5660" /><argument value="600" /></process>
+ <process host="c-567.me" function="chord.Node"><argument value="3303119" /><argument value="13068526" /><argument value="5670" /><argument value="600" /></process>
+ <process host="c-568.me" function="chord.Node"><argument value="379201" /><argument value="8795616" /><argument value="5680" /><argument value="600" /></process>
+ <process host="c-569.me" function="chord.Node"><argument value="2665861" /><argument value="1829446" /><argument value="5690" /><argument value="600" /></process>
+ <process host="c-570.me" function="chord.Node"><argument value="15129643" /><argument value="12441838" /><argument value="5700" /><argument value="600" /></process>
+ <process host="c-571.me" function="chord.Node"><argument value="11526696" /><argument value="13682856" /><argument value="5710" /><argument value="600" /></process>
+ <process host="c-572.me" function="chord.Node"><argument value="2402601" /><argument value="4802345" /><argument value="5720" /><argument value="600" /></process>
+ <process host="c-573.me" function="chord.Node"><argument value="4604452" /><argument value="14422882" /><argument value="5730" /><argument value="600" /></process>
+ <process host="c-574.me" function="chord.Node"><argument value="981263" /><argument value="4698866" /><argument value="5740" /><argument value="600" /></process>
+ <process host="c-575.me" function="chord.Node"><argument value="70751" /><argument value="13462468" /><argument value="5750" /><argument value="600" /></process>
+ <process host="c-576.me" function="chord.Node"><argument value="8354442" /><argument value="13217516" /><argument value="5760" /><argument value="600" /></process>
+ <process host="c-577.me" function="chord.Node"><argument value="5063884" /><argument value="1599493" /><argument value="5770" /><argument value="600" /></process>
+ <process host="c-578.me" function="chord.Node"><argument value="11892655" /><argument value="15549881" /><argument value="5780" /><argument value="600" /></process>
+ <process host="c-579.me" function="chord.Node"><argument value="11439505" /><argument value="4884753" /><argument value="5790" /><argument value="600" /></process>
+ <process host="c-580.me" function="chord.Node"><argument value="12429078" /><argument value="4443281" /><argument value="5800" /><argument value="600" /></process>
+ <process host="c-581.me" function="chord.Node"><argument value="10728578" /><argument value="4666118" /><argument value="5810" /><argument value="600" /></process>
+ <process host="c-582.me" function="chord.Node"><argument value="6529946" /><argument value="5616708" /><argument value="5820" /><argument value="600" /></process>
+ <process host="c-583.me" function="chord.Node"><argument value="15651370" /><argument value="5203326" /><argument value="5830" /><argument value="600" /></process>
+ <process host="c-584.me" function="chord.Node"><argument value="16019816" /><argument value="16248621" /><argument value="5840" /><argument value="600" /></process>
+ <process host="c-585.me" function="chord.Node"><argument value="8489520" /><argument value="15671308" /><argument value="5850" /><argument value="600" /></process>
+ <process host="c-586.me" function="chord.Node"><argument value="1152781" /><argument value="6928634" /><argument value="5860" /><argument value="600" /></process>
+ <process host="c-587.me" function="chord.Node"><argument value="12945962" /><argument value="11115123" /><argument value="5870" /><argument value="600" /></process>
+ <process host="c-588.me" function="chord.Node"><argument value="558001" /><argument value="671344" /><argument value="5880" /><argument value="600" /></process>
+ <process host="c-589.me" function="chord.Node"><argument value="1334406" /><argument value="6352096" /><argument value="5890" /><argument value="600" /></process>
+ <process host="c-590.me" function="chord.Node"><argument value="3832232" /><argument value="14197736" /><argument value="5900" /><argument value="600" /></process>
+ <process host="c-591.me" function="chord.Node"><argument value="5654943" /><argument value="12462635" /><argument value="5910" /><argument value="600" /></process>
+ <process host="c-592.me" function="chord.Node"><argument value="11007162" /><argument value="13068526" /><argument value="5920" /><argument value="600" /></process>
+ <process host="c-593.me" function="chord.Node"><argument value="6777448" /><argument value="4692291" /><argument value="5930" /><argument value="600" /></process>
+ <process host="c-594.me" function="chord.Node"><argument value="16424292" /><argument value="1283149" /><argument value="5940" /><argument value="600" /></process>
+ <process host="c-595.me" function="chord.Node"><argument value="562761" /><argument value="10835712" /><argument value="5950" /><argument value="600" /></process>
+ <process host="c-596.me" function="chord.Node"><argument value="15333897" /><argument value="12592922" /><argument value="5960" /><argument value="600" /></process>
+ <process host="c-597.me" function="chord.Node"><argument value="10630103" /><argument value="305689" /><argument value="5970" /><argument value="600" /></process>
+ <process host="c-598.me" function="chord.Node"><argument value="11102181" /><argument value="558001" /><argument value="5980" /><argument value="600" /></process>
+ <process host="c-599.me" function="chord.Node"><argument value="12551173" /><argument value="5587068" /><argument value="5990" /><argument value="600" /></process>
+ <process host="c-600.me" function="chord.Node"><argument value="3042663" /><argument value="12462635" /><argument value="6000" /><argument value="600" /></process>
+ <process host="c-601.me" function="chord.Node"><argument value="8240559" /><argument value="2896334" /><argument value="6010" /><argument value="600" /></process>
+ <process host="c-602.me" function="chord.Node"><argument value="5250686" /><argument value="14275782" /><argument value="6020" /><argument value="600" /></process>
+ <process host="c-603.me" function="chord.Node"><argument value="16034282" /><argument value="103219" /><argument value="6030" /><argument value="600" /></process>
+ <process host="c-604.me" function="chord.Node"><argument value="4414146" /><argument value="3913113" /><argument value="6040" /><argument value="600" /></process>
+ <process host="c-605.me" function="chord.Node"><argument value="2365776" /><argument value="2665861" /><argument value="6050" /><argument value="600" /></process>
+ <process host="c-606.me" function="chord.Node"><argument value="10537615" /><argument value="1650052" /><argument value="6060" /><argument value="600" /></process>
+ <process host="c-607.me" function="chord.Node"><argument value="4194681" /><argument value="2406756" /><argument value="6070" /><argument value="600" /></process>
+ <process host="c-608.me" function="chord.Node"><argument value="6543233" /><argument value="2707321" /><argument value="6080" /><argument value="600" /></process>
+ <process host="c-609.me" function="chord.Node"><argument value="14632348" /><argument value="2520804" /><argument value="6090" /><argument value="600" /></process>
+ <process host="c-610.me" function="chord.Node"><argument value="14850649" /><argument value="15671308" /><argument value="6100" /><argument value="600" /></process>
+ <process host="c-611.me" function="chord.Node"><argument value="3019914" /><argument value="15006544" /><argument value="6110" /><argument value="600" /></process>
+ <process host="c-612.me" function="chord.Node"><argument value="12958829" /><argument value="2664495" /><argument value="6120" /><argument value="600" /></process>
+ <process host="c-613.me" function="chord.Node"><argument value="10072197" /><argument value="3201863" /><argument value="6130" /><argument value="600" /></process>
+ <process host="c-614.me" function="chord.Node"><argument value="10685688" /><argument value="5218127" /><argument value="6140" /><argument value="600" /></process>
+ <process host="c-615.me" function="chord.Node"><argument value="4693560" /><argument value="2418087" /><argument value="6150" /><argument value="600" /></process>
+ <process host="c-616.me" function="chord.Node"><argument value="12047854" /><argument value="3773391" /><argument value="6160" /><argument value="600" /></process>
+ <process host="c-617.me" function="chord.Node"><argument value="390743" /><argument value="7675570" /><argument value="6170" /><argument value="600" /></process>
+ <process host="c-618.me" function="chord.Node"><argument value="9506061" /><argument value="701471" /><argument value="6180" /><argument value="600" /></process>
+ <process host="c-619.me" function="chord.Node"><argument value="5547784" /><argument value="7646047" /><argument value="6190" /><argument value="600" /></process>
+ <process host="c-620.me" function="chord.Node"><argument value="2380390" /><argument value="16142080" /><argument value="6200" /><argument value="600" /></process>
+ <process host="c-621.me" function="chord.Node"><argument value="2489943" /><argument value="14934950" /><argument value="6210" /><argument value="600" /></process>
+ <process host="c-622.me" function="chord.Node"><argument value="12871152" /><argument value="14422882" /><argument value="6220" /><argument value="600" /></process>
+ <process host="c-623.me" function="chord.Node"><argument value="8943068" /><argument value="5849165" /><argument value="6230" /><argument value="600" /></process>
+ <process host="c-624.me" function="chord.Node"><argument value="10964611" /><argument value="14996644" /><argument value="6240" /><argument value="600" /></process>
+ <process host="c-625.me" function="chord.Node"><argument value="4497761" /><argument value="10643900" /><argument value="6250" /><argument value="600" /></process>
+ <process host="c-626.me" function="chord.Node"><argument value="2518397" /><argument value="6971171" /><argument value="6260" /><argument value="600" /></process>
+ <process host="c-627.me" function="chord.Node"><argument value="7094385" /><argument value="1929021" /><argument value="6270" /><argument value="600" /></process>
+ <process host="c-628.me" function="chord.Node"><argument value="8897442" /><argument value="11874398" /><argument value="6280" /><argument value="600" /></process>
+ <process host="c-629.me" function="chord.Node"><argument value="12072711" /><argument value="16742965" /><argument value="6290" /><argument value="600" /></process>
+ <process host="c-630.me" function="chord.Node"><argument value="2923207" /><argument value="98373" /><argument value="6300" /><argument value="600" /></process>
+ <process host="c-631.me" function="chord.Node"><argument value="9382015" /><argument value="10095508" /><argument value="6310" /><argument value="600" /></process>
+ <process host="c-632.me" function="chord.Node"><argument value="14676069" /><argument value="3173749" /><argument value="6320" /><argument value="600" /></process>
+ <process host="c-633.me" function="chord.Node"><argument value="11989707" /><argument value="702830" /><argument value="6330" /><argument value="600" /></process>
+ <process host="c-634.me" function="chord.Node"><argument value="11297628" /><argument value="8489520" /><argument value="6340" /><argument value="600" /></process>
+ <process host="c-635.me" function="chord.Node"><argument value="12597415" /><argument value="10157950" /><argument value="6350" /><argument value="600" /></process>
+ <process host="c-636.me" function="chord.Node"><argument value="8695685" /><argument value="4209108" /><argument value="6360" /><argument value="600" /></process>
+ <process host="c-637.me" function="chord.Node"><argument value="3969519" /><argument value="5261542" /><argument value="6370" /><argument value="600" /></process>
+ <process host="c-638.me" function="chord.Node"><argument value="150673" /><argument value="1829446" /><argument value="6380" /><argument value="600" /></process>
+ <process host="c-639.me" function="chord.Node"><argument value="401197" /><argument value="8540729" /><argument value="6390" /><argument value="600" /></process>
+ <process host="c-640.me" function="chord.Node"><argument value="14237647" /><argument value="2479821" /><argument value="6400" /><argument value="600" /></process>
+ <process host="c-641.me" function="chord.Node"><argument value="15663887" /><argument value="13946489" /><argument value="6410" /><argument value="600" /></process>
+ <process host="c-642.me" function="chord.Node"><argument value="1007996" /><argument value="7723482" /><argument value="6420" /><argument value="600" /></process>
+ <process host="c-643.me" function="chord.Node"><argument value="14852912" /><argument value="6688594" /><argument value="6430" /><argument value="600" /></process>
+ <process host="c-644.me" function="chord.Node"><argument value="11846461" /><argument value="15982771" /><argument value="6440" /><argument value="600" /></process>
+ <process host="c-645.me" function="chord.Node"><argument value="12286446" /><argument value="11322296" /><argument value="6450" /><argument value="600" /></process>
+ <process host="c-646.me" function="chord.Node"><argument value="11732838" /><argument value="16051795" /><argument value="6460" /><argument value="600" /></process>
+ <process host="c-647.me" function="chord.Node"><argument value="907572" /><argument value="9506061" /><argument value="6470" /><argument value="600" /></process>
+ <process host="c-648.me" function="chord.Node"><argument value="572214" /><argument value="15129643" /><argument value="6480" /><argument value="600" /></process>
+ <process host="c-649.me" function="chord.Node"><argument value="6021064" /><argument value="7613952" /><argument value="6490" /><argument value="600" /></process>
+ <process host="c-650.me" function="chord.Node"><argument value="13078891" /><argument value="15833788" /><argument value="6500" /><argument value="600" /></process>
+ <process host="c-651.me" function="chord.Node"><argument value="15147112" /><argument value="4698866" /><argument value="6510" /><argument value="600" /></process>
+ <process host="c-652.me" function="chord.Node"><argument value="1412454" /><argument value="5063884" /><argument value="6520" /><argument value="600" /></process>
+ <process host="c-653.me" function="chord.Node"><argument value="10892064" /><argument value="12271549" /><argument value="6530" /><argument value="600" /></process>
+ <process host="c-654.me" function="chord.Node"><argument value="2882552" /><argument value="8005694" /><argument value="6540" /><argument value="600" /></process>
+ <process host="c-655.me" function="chord.Node"><argument value="9548838" /><argument value="9382015" /><argument value="6550" /><argument value="600" /></process>
+ <process host="c-656.me" function="chord.Node"><argument value="9819453" /><argument value="3070" /><argument value="6560" /><argument value="600" /></process>
+ <process host="c-657.me" function="chord.Node"><argument value="15435608" /><argument value="10157950" /><argument value="6570" /><argument value="600" /></process>
+ <process host="c-658.me" function="chord.Node"><argument value="10276445" /><argument value="5473070" /><argument value="6580" /><argument value="600" /></process>
+ <process host="c-659.me" function="chord.Node"><argument value="15100313" /><argument value="16142080" /><argument value="6590" /><argument value="600" /></process>
+ <process host="c-660.me" function="chord.Node"><argument value="5505295" /><argument value="500021" /><argument value="6600" /><argument value="600" /></process>
+ <process host="c-661.me" function="chord.Node"><argument value="3005317" /><argument value="2700613" /><argument value="6610" /><argument value="600" /></process>
+ <process host="c-662.me" function="chord.Node"><argument value="12027531" /><argument value="13725826" /><argument value="6620" /><argument value="600" /></process>
+ <process host="c-663.me" function="chord.Node"><argument value="7754507" /><argument value="7822081" /><argument value="6630" /><argument value="600" /></process>
+ <process host="c-664.me" function="chord.Node"><argument value="13965971" /><argument value="1793625" /><argument value="6640" /><argument value="600" /></process>
+ <process host="c-665.me" function="chord.Node"><argument value="9456467" /><argument value="9093770" /><argument value="6650" /><argument value="600" /></process>
+ <process host="c-666.me" function="chord.Node"><argument value="12448649" /><argument value="15122301" /><argument value="6660" /><argument value="600" /></process>
+ <process host="c-667.me" function="chord.Node"><argument value="13418855" /><argument value="15926887" /><argument value="6670" /><argument value="600" /></process>
+ <process host="c-668.me" function="chord.Node"><argument value="3806583" /><argument value="14275782" /><argument value="6680" /><argument value="600" /></process>
+ <process host="c-669.me" function="chord.Node"><argument value="14605388" /><argument value="9371566" /><argument value="6690" /><argument value="600" /></process>
+ <process host="c-670.me" function="chord.Node"><argument value="2635140" /><argument value="11297628" /><argument value="6700" /><argument value="600" /></process>
+ <process host="c-671.me" function="chord.Node"><argument value="189336" /><argument value="11242873" /><argument value="6710" /><argument value="600" /></process>
+ <process host="c-672.me" function="chord.Node"><argument value="6241252" /><argument value="14385526" /><argument value="6720" /><argument value="600" /></process>
+ <process host="c-673.me" function="chord.Node"><argument value="9406928" /><argument value="14079556" /><argument value="6730" /><argument value="600" /></process>
+ <process host="c-674.me" function="chord.Node"><argument value="16401068" /><argument value="721833" /><argument value="6740" /><argument value="600" /></process>
+ <process host="c-675.me" function="chord.Node"><argument value="12698353" /><argument value="9093770" /><argument value="6750" /><argument value="600" /></process>
+ <process host="c-676.me" function="chord.Node"><argument value="1948914" /><argument value="70751" /><argument value="6760" /><argument value="600" /></process>
+ <process host="c-677.me" function="chord.Node"><argument value="4922312" /><argument value="7613952" /><argument value="6770" /><argument value="600" /></process>
+ <process host="c-678.me" function="chord.Node"><argument value="13750822" /><argument value="9942487" /><argument value="6780" /><argument value="600" /></process>
+ <process host="c-679.me" function="chord.Node"><argument value="12931659" /><argument value="4497761" /><argument value="6790" /><argument value="600" /></process>
+ <process host="c-680.me" function="chord.Node"><argument value="9298253" /><argument value="5218127" /><argument value="6800" /><argument value="600" /></process>
+ <process host="c-681.me" function="chord.Node"><argument value="13973206" /><argument value="12286446" /><argument value="6810" /><argument value="600" /></process>
+ <process host="c-682.me" function="chord.Node"><argument value="7251426" /><argument value="6646839" /><argument value="6820" /><argument value="600" /></process>
+ <process host="c-683.me" function="chord.Node"><argument value="12168353" /><argument value="701471" /><argument value="6830" /><argument value="600" /></process>
+ <process host="c-684.me" function="chord.Node"><argument value="272025" /><argument value="2440066" /><argument value="6840" /><argument value="600" /></process>
+ <process host="c-685.me" function="chord.Node"><argument value="13909822" /><argument value="12792052" /><argument value="6850" /><argument value="600" /></process>
+ <process host="c-686.me" function="chord.Node"><argument value="12781569" /><argument value="1646195" /><argument value="6860" /><argument value="600" /></process>
+ <process host="c-687.me" function="chord.Node"><argument value="4145179" /><argument value="15663887" /><argument value="6870" /><argument value="600" /></process>
+ <process host="c-688.me" function="chord.Node"><argument value="11220111" /><argument value="3716755" /><argument value="6880" /><argument value="600" /></process>
+ <process host="c-689.me" function="chord.Node"><argument value="11021193" /><argument value="9132538" /><argument value="6890" /><argument value="600" /></process>
+ <process host="c-690.me" function="chord.Node"><argument value="855779" /><argument value="4530956" /><argument value="6900" /><argument value="600" /></process>
+ <process host="c-691.me" function="chord.Node"><argument value="650857" /><argument value="2125529" /><argument value="6910" /><argument value="600" /></process>
+ <process host="c-692.me" function="chord.Node"><argument value="12650112" /><argument value="31357" /><argument value="6920" /><argument value="600" /></process>
+ <process host="c-693.me" function="chord.Node"><argument value="11905524" /><argument value="14237647" /><argument value="6930" /><argument value="600" /></process>
+ <process host="c-694.me" function="chord.Node"><argument value="13925491" /><argument value="6385309" /><argument value="6940" /><argument value="600" /></process>
+ <process host="c-695.me" function="chord.Node"><argument value="16612518" /><argument value="14649055" /><argument value="6950" /><argument value="600" /></process>
+ <process host="c-696.me" function="chord.Node"><argument value="14629172" /><argument value="13725268" /><argument value="6960" /><argument value="600" /></process>
+ <process host="c-697.me" function="chord.Node"><argument value="15466746" /><argument value="7072398" /><argument value="6970" /><argument value="600" /></process>
+ <process host="c-698.me" function="chord.Node"><argument value="15162385" /><argument value="5459647" /><argument value="6980" /><argument value="600" /></process>
+ <process host="c-699.me" function="chord.Node"><argument value="8563371" /><argument value="2896334" /><argument value="6990" /><argument value="600" /></process>
+ <process host="c-700.me" function="chord.Node"><argument value="15174494" /><argument value="3405298" /><argument value="7000" /><argument value="600" /></process>
+ <process host="c-701.me" function="chord.Node"><argument value="16095296" /><argument value="7092394" /><argument value="7010" /><argument value="600" /></process>
+ <process host="c-702.me" function="chord.Node"><argument value="1202054" /><argument value="16019816" /><argument value="7020" /><argument value="600" /></process>
+ <process host="c-703.me" function="chord.Node"><argument value="6014367" /><argument value="2923207" /><argument value="7030" /><argument value="600" /></process>
+ <process host="c-704.me" function="chord.Node"><argument value="14344593" /><argument value="14661364" /><argument value="7040" /><argument value="600" /></process>
+ <process host="c-705.me" function="chord.Node"><argument value="11114927" /><argument value="3607342" /><argument value="7050" /><argument value="600" /></process>
+ <process host="c-706.me" function="chord.Node"><argument value="14549142" /><argument value="7440076" /><argument value="7060" /><argument value="600" /></process>
+ <process host="c-707.me" function="chord.Node"><argument value="2099408" /><argument value="12047854" /><argument value="7070" /><argument value="600" /></process>
+ <process host="c-708.me" function="chord.Node"><argument value="16516136" /><argument value="13390365" /><argument value="7080" /><argument value="600" /></process>
+ <process host="c-709.me" function="chord.Node"><argument value="15286475" /><argument value="9875617" /><argument value="7090" /><argument value="600" /></process>
+ <process host="c-710.me" function="chord.Node"><argument value="9550538" /><argument value="3716755" /><argument value="7100" /><argument value="600" /></process>
+ <process host="c-711.me" function="chord.Node"><argument value="2050159" /><argument value="8428378" /><argument value="7110" /><argument value="600" /></process>
+ <process host="c-712.me" function="chord.Node"><argument value="10104282" /><argument value="4511756" /><argument value="7120" /><argument value="600" /></process>
+ <process host="c-713.me" function="chord.Node"><argument value="8480898" /><argument value="4692291" /><argument value="7130" /><argument value="600" /></process>
+ <process host="c-714.me" function="chord.Node"><argument value="5440276" /><argument value="10630103" /><argument value="7140" /><argument value="600" /></process>
+ <process host="c-715.me" function="chord.Node"><argument value="12297282" /><argument value="9511753" /><argument value="7150" /><argument value="600" /></process>
+ <process host="c-716.me" function="chord.Node"><argument value="3794047" /><argument value="11905524" /><argument value="7160" /><argument value="600" /></process>
+ <process host="c-717.me" function="chord.Node"><argument value="12636106" /><argument value="8047622" /><argument value="7170" /><argument value="600" /></process>
+ <process host="c-718.me" function="chord.Node"><argument value="16439509" /><argument value="15671308" /><argument value="7180" /><argument value="600" /></process>
+ <process host="c-719.me" function="chord.Node"><argument value="15578213" /><argument value="3173749" /><argument value="7190" /><argument value="600" /></process>
+ <process host="c-720.me" function="chord.Node"><argument value="6761575" /><argument value="10961177" /><argument value="7200" /><argument value="600" /></process>
+ <process host="c-721.me" function="chord.Node"><argument value="3498762" /><argument value="395854" /><argument value="7210" /><argument value="600" /></process>
+ <process host="c-722.me" function="chord.Node"><argument value="8409758" /><argument value="1332683" /><argument value="7220" /><argument value="600" /></process>
+ <process host="c-723.me" function="chord.Node"><argument value="5657954" /><argument value="3913113" /><argument value="7230" /><argument value="600" /></process>
+ <process host="c-724.me" function="chord.Node"><argument value="6987029" /><argument value="11363391" /><argument value="7240" /><argument value="600" /></process>
+ <process host="c-725.me" function="chord.Node"><argument value="12054685" /><argument value="11954349" /><argument value="7250" /><argument value="600" /></process>
+ <process host="c-726.me" function="chord.Node"><argument value="6550806" /><argument value="14079556" /><argument value="7260" /><argument value="600" /></process>
+ <process host="c-727.me" function="chord.Node"><argument value="12534524" /><argument value="12933525" /><argument value="7270" /><argument value="600" /></process>
+ <process host="c-728.me" function="chord.Node"><argument value="211353" /><argument value="13725268" /><argument value="7280" /><argument value="600" /></process>
+ <process host="c-729.me" function="chord.Node"><argument value="8302177" /><argument value="11921438" /><argument value="7290" /><argument value="600" /></process>
+ <process host="c-730.me" function="chord.Node"><argument value="9339692" /><argument value="8745990" /><argument value="7300" /><argument value="600" /></process>
+ <process host="c-731.me" function="chord.Node"><argument value="11863381" /><argument value="1489674" /><argument value="7310" /><argument value="600" /></process>
+ <process host="c-732.me" function="chord.Node"><argument value="7484607" /><argument value="10599403" /><argument value="7320" /><argument value="600" /></process>
+ <process host="c-733.me" function="chord.Node"><argument value="1079142" /><argument value="4693560" /><argument value="7330" /><argument value="600" /></process>
+ <process host="c-734.me" function="chord.Node"><argument value="7917121" /><argument value="14812706" /><argument value="7340" /><argument value="600" /></process>
+ <process host="c-735.me" function="chord.Node"><argument value="16196570" /><argument value="14447811" /><argument value="7350" /><argument value="600" /></process>
+ <process host="c-736.me" function="chord.Node"><argument value="12840067" /><argument value="14553257" /><argument value="7360" /><argument value="600" /></process>
+ <process host="c-737.me" function="chord.Node"><argument value="5263813" /><argument value="3539024" /><argument value="7370" /><argument value="600" /></process>
+ <process host="c-738.me" function="chord.Node"><argument value="15141078" /><argument value="7243688" /><argument value="7380" /><argument value="600" /></process>
+ <process host="c-739.me" function="chord.Node"><argument value="16153817" /><argument value="13340216" /><argument value="7390" /><argument value="600" /></process>
+ <process host="c-740.me" function="chord.Node"><argument value="15092805" /><argument value="2102638" /><argument value="7400" /><argument value="600" /></process>
+ <process host="c-741.me" function="chord.Node"><argument value="7633427" /><argument value="2425443" /><argument value="7410" /><argument value="600" /></process>
+ <process host="c-742.me" function="chord.Node"><argument value="7213451" /><argument value="2001584" /><argument value="7420" /><argument value="600" /></process>
+ <process host="c-743.me" function="chord.Node"><argument value="14725691" /><argument value="5849165" /><argument value="7430" /><argument value="600" /></process>
+ <process host="c-744.me" function="chord.Node"><argument value="270321" /><argument value="6987029" /><argument value="7440" /><argument value="600" /></process>
+ <process host="c-745.me" function="chord.Node"><argument value="7617978" /><argument value="13965863" /><argument value="7450" /><argument value="600" /></process>
+ <process host="c-746.me" function="chord.Node"><argument value="9216353" /><argument value="6942761" /><argument value="7460" /><argument value="600" /></process>
+ <process host="c-747.me" function="chord.Node"><argument value="16360172" /><argument value="9954221" /><argument value="7470" /><argument value="600" /></process>
+ <process host="c-748.me" function="chord.Node"><argument value="14903807" /><argument value="11989707" /><argument value="7480" /><argument value="600" /></process>
+ <process host="c-749.me" function="chord.Node"><argument value="9749939" /><argument value="14038546" /><argument value="7490" /><argument value="600" /></process>
+ <process host="c-750.me" function="chord.Node"><argument value="4769261" /><argument value="10964611" /><argument value="7500" /><argument value="600" /></process>
+ <process host="c-751.me" function="chord.Node"><argument value="15886370" /><argument value="6241252" /><argument value="7510" /><argument value="600" /></process>
+ <process host="c-752.me" function="chord.Node"><argument value="7428312" /><argument value="8409758" /><argument value="7520" /><argument value="600" /></process>
+ <process host="c-753.me" function="chord.Node"><argument value="13981117" /><argument value="10204339" /><argument value="7530" /><argument value="600" /></process>
+ <process host="c-754.me" function="chord.Node"><argument value="13581933" /><argument value="10418072" /><argument value="7540" /><argument value="600" /></process>
+ <process host="c-755.me" function="chord.Node"><argument value="4446106" /><argument value="6409915" /><argument value="7550" /><argument value="600" /></process>
+ <process host="c-756.me" function="chord.Node"><argument value="2509062" /><argument value="1877956" /><argument value="7560" /><argument value="600" /></process>
+ <process host="c-757.me" function="chord.Node"><argument value="1159354" /><argument value="8795616" /><argument value="7570" /><argument value="600" /></process>
+ <process host="c-758.me" function="chord.Node"><argument value="11788650" /><argument value="3109636" /><argument value="7580" /><argument value="600" /></process>
+ <process host="c-759.me" function="chord.Node"><argument value="12894545" /><argument value="3450027" /><argument value="7590" /><argument value="600" /></process>
+ <process host="c-760.me" function="chord.Node"><argument value="10555908" /><argument value="14418513" /><argument value="7600" /><argument value="600" /></process>
+ <process host="c-761.me" function="chord.Node"><argument value="8459150" /><argument value="13502573" /><argument value="7610" /><argument value="600" /></process>
+ <process host="c-762.me" function="chord.Node"><argument value="1262816" /><argument value="395854" /><argument value="7620" /><argument value="600" /></process>
+ <process host="c-763.me" function="chord.Node"><argument value="262884" /><argument value="2335101" /><argument value="7630" /><argument value="600" /></process>
+ <process host="c-764.me" function="chord.Node"><argument value="16121947" /><argument value="3090835" /><argument value="7640" /><argument value="600" /></process>
+ <process host="c-765.me" function="chord.Node"><argument value="3170127" /><argument value="16481633" /><argument value="7650" /><argument value="600" /></process>
+ <process host="c-766.me" function="chord.Node"><argument value="3850999" /><argument value="12931659" /><argument value="7660" /><argument value="600" /></process>
+ <process host="c-767.me" function="chord.Node"><argument value="14293629" /><argument value="672770" /><argument value="7670" /><argument value="600" /></process>
+ <process host="c-768.me" function="chord.Node"><argument value="6769022" /><argument value="11635363" /><argument value="7680" /><argument value="600" /></process>
+ <process host="c-769.me" function="chord.Node"><argument value="14544645" /><argument value="12083659" /><argument value="7690" /><argument value="600" /></process>
+ <process host="c-770.me" function="chord.Node"><argument value="34666" /><argument value="4209108" /><argument value="7700" /><argument value="600" /></process>
+ <process host="c-771.me" function="chord.Node"><argument value="14618335" /><argument value="15403037" /><argument value="7710" /><argument value="600" /></process>
+ <process host="c-772.me" function="chord.Node"><argument value="7106177" /><argument value="9749939" /><argument value="7720" /><argument value="600" /></process>
+ <process host="c-773.me" function="chord.Node"><argument value="1484334" /><argument value="2406756" /><argument value="7730" /><argument value="600" /></process>
+ <process host="c-774.me" function="chord.Node"><argument value="13908576" /><argument value="12396321" /><argument value="7740" /><argument value="600" /></process>
+ <process host="c-775.me" function="chord.Node"><argument value="9369821" /><argument value="8387279" /><argument value="7750" /><argument value="600" /></process>
+ <process host="c-776.me" function="chord.Node"><argument value="14163847" /><argument value="395854" /><argument value="7760" /><argument value="600" /></process>
+ <process host="c-777.me" function="chord.Node"><argument value="28844" /><argument value="10204339" /><argument value="7770" /><argument value="600" /></process>
+ <process host="c-778.me" function="chord.Node"><argument value="13892295" /><argument value="4696190" /><argument value="7780" /><argument value="600" /></process>
+ <process host="c-779.me" function="chord.Node"><argument value="11561369" /><argument value="4450166" /><argument value="7790" /><argument value="600" /></process>
+ <process host="c-780.me" function="chord.Node"><argument value="7829321" /><argument value="12781569" /><argument value="7800" /><argument value="600" /></process>
+ <process host="c-781.me" function="chord.Node"><argument value="3933638" /><argument value="14480613" /><argument value="7810" /><argument value="600" /></process>
+ <process host="c-782.me" function="chord.Node"><argument value="6688675" /><argument value="14666163" /><argument value="7820" /><argument value="600" /></process>
+ <process host="c-783.me" function="chord.Node"><argument value="3112707" /><argument value="7396153" /><argument value="7830" /><argument value="600" /></process>
+ <process host="c-784.me" function="chord.Node"><argument value="1159553" /><argument value="5547784" /><argument value="7840" /><argument value="600" /></process>
+ <process host="c-785.me" function="chord.Node"><argument value="5863167" /><argument value="6550806" /><argument value="7850" /><argument value="600" /></process>
+ <process host="c-786.me" function="chord.Node"><argument value="12451060" /><argument value="1332382" /><argument value="7860" /><argument value="600" /></process>
+ <process host="c-787.me" function="chord.Node"><argument value="1678374" /><argument value="4535064" /><argument value="7870" /><argument value="600" /></process>
+ <process host="c-788.me" function="chord.Node"><argument value="7130295" /><argument value="16380062" /><argument value="7880" /><argument value="600" /></process>
+ <process host="c-789.me" function="chord.Node"><argument value="2453283" /><argument value="5142077" /><argument value="7890" /><argument value="600" /></process>
+ <process host="c-790.me" function="chord.Node"><argument value="4961290" /><argument value="721833" /><argument value="7900" /><argument value="600" /></process>
+ <process host="c-791.me" function="chord.Node"><argument value="15987881" /><argument value="16019816" /><argument value="7910" /><argument value="600" /></process>
+ <process host="c-792.me" function="chord.Node"><argument value="8461616" /><argument value="1147620" /><argument value="7920" /><argument value="600" /></process>
+ <process host="c-793.me" function="chord.Node"><argument value="13098249" /><argument value="5737423" /><argument value="7930" /><argument value="600" /></process>
+ <process host="c-794.me" function="chord.Node"><argument value="316813" /><argument value="3201863" /><argument value="7940" /><argument value="600" /></process>
+ <process host="c-795.me" function="chord.Node"><argument value="8139061" /><argument value="935561" /><argument value="7950" /><argument value="600" /></process>
+ <process host="c-796.me" function="chord.Node"><argument value="14306294" /><argument value="10702743" /><argument value="7960" /><argument value="600" /></process>
+ <process host="c-797.me" function="chord.Node"><argument value="13758447" /><argument value="1007996" /><argument value="7970" /><argument value="600" /></process>
+ <process host="c-798.me" function="chord.Node"><argument value="9461052" /><argument value="2707321" /><argument value="7980" /><argument value="600" /></process>
+ <process host="c-799.me" function="chord.Node"><argument value="12786761" /><argument value="11841923" /><argument value="7990" /><argument value="600" /></process>
+ <process host="c-800.me" function="chord.Node"><argument value="7314605" /><argument value="14725691" /><argument value="8000" /><argument value="600" /></process>
+ <process host="c-801.me" function="chord.Node"><argument value="3771350" /><argument value="12179280" /><argument value="8010" /><argument value="600" /></process>
+ <process host="c-802.me" function="chord.Node"><argument value="9763786" /><argument value="4309230" /><argument value="8020" /><argument value="600" /></process>
+ <process host="c-803.me" function="chord.Node"><argument value="8864434" /><argument value="6493977" /><argument value="8030" /><argument value="600" /></process>
+ <process host="c-804.me" function="chord.Node"><argument value="11494864" /><argument value="9339692" /><argument value="8040" /><argument value="600" /></process>
+ <process host="c-805.me" function="chord.Node"><argument value="14334491" /><argument value="10266651" /><argument value="8050" /><argument value="600" /></process>
+ <process host="c-806.me" function="chord.Node"><argument value="9008862" /><argument value="9885453" /><argument value="8060" /><argument value="600" /></process>
+ <process host="c-807.me" function="chord.Node"><argument value="8495792" /><argument value="4698866" /><argument value="8070" /><argument value="600" /></process>
+ <process host="c-808.me" function="chord.Node"><argument value="11658232" /><argument value="34666" /><argument value="8080" /><argument value="600" /></process>
+ <process host="c-809.me" function="chord.Node"><argument value="6562797" /><argument value="562761" /><argument value="8090" /><argument value="600" /></process>
+ <process host="c-810.me" function="chord.Node"><argument value="1230824" /><argument value="1159553" /><argument value="8100" /><argument value="600" /></process>
+ <process host="c-811.me" function="chord.Node"><argument value="16411428" /><argument value="6352096" /><argument value="8110" /><argument value="600" /></process>
+ <process host="c-812.me" function="chord.Node"><argument value="3899108" /><argument value="15578213" /><argument value="8120" /><argument value="600" /></process>
+ <process host="c-813.me" function="chord.Node"><argument value="2805132" /><argument value="12945962" /><argument value="8130" /><argument value="600" /></process>
+ <process host="c-814.me" function="chord.Node"><argument value="12648089" /><argument value="13390365" /><argument value="8140" /><argument value="600" /></process>
+ <process host="c-815.me" function="chord.Node"><argument value="14039914" /><argument value="272025" /><argument value="8150" /><argument value="600" /></process>
+ <process host="c-816.me" function="chord.Node"><argument value="13206919" /><argument value="6225637" /><argument value="8160" /><argument value="600" /></process>
+ <process host="c-817.me" function="chord.Node"><argument value="6186441" /><argument value="12945962" /><argument value="8170" /><argument value="600" /></process>
+ <process host="c-818.me" function="chord.Node"><argument value="13980467" /><argument value="272025" /><argument value="8180" /><argument value="600" /></process>
+ <process host="c-819.me" function="chord.Node"><argument value="3938985" /><argument value="8387279" /><argument value="8190" /><argument value="600" /></process>
+ <process host="c-820.me" function="chord.Node"><argument value="1464694" /><argument value="562761" /><argument value="8200" /><argument value="600" /></process>
+ <process host="c-821.me" function="chord.Node"><argument value="1948127" /><argument value="12297282" /><argument value="8210" /><argument value="600" /></process>
+ <process host="c-822.me" function="chord.Node"><argument value="10645978" /><argument value="9461052" /><argument value="8220" /><argument value="600" /></process>
+ <process host="c-823.me" function="chord.Node"><argument value="3264921" /><argument value="11272471" /><argument value="8230" /><argument value="600" /></process>
+ <process host="c-824.me" function="chord.Node"><argument value="13945312" /><argument value="10354580" /><argument value="8240" /><argument value="600" /></process>
+ <process host="c-825.me" function="chord.Node"><argument value="3466212" /><argument value="2479821" /><argument value="8250" /><argument value="600" /></process>
+ <process host="c-826.me" function="chord.Node"><argument value="16733000" /><argument value="1650052" /><argument value="8260" /><argument value="600" /></process>
+ <process host="c-827.me" function="chord.Node"><argument value="15629565" /><argument value="8695685" /><argument value="8270" /><argument value="600" /></process>
+ <process host="c-828.me" function="chord.Node"><argument value="3345285" /><argument value="1529527" /><argument value="8280" /><argument value="600" /></process>
+ <process host="c-829.me" function="chord.Node"><argument value="9007074" /><argument value="16581758" /><argument value="8290" /><argument value="600" /></process>
+ <process host="c-830.me" function="chord.Node"><argument value="2529215" /><argument value="13937989" /><argument value="8300" /><argument value="600" /></process>
+ <process host="c-831.me" function="chord.Node"><argument value="7722045" /><argument value="2923207" /><argument value="8310" /><argument value="600" /></process>
+ <process host="c-832.me" function="chord.Node"><argument value="11965792" /><argument value="3492701" /><argument value="8320" /><argument value="600" /></process>
+ <process host="c-833.me" function="chord.Node"><argument value="13731336" /><argument value="9786553" /><argument value="8330" /><argument value="600" /></process>
+ <process host="c-834.me" function="chord.Node"><argument value="15220927" /><argument value="2440066" /><argument value="8340" /><argument value="600" /></process>
+ <process host="c-835.me" function="chord.Node"><argument value="10301747" /><argument value="7338154" /><argument value="8350" /><argument value="600" /></process>
+ <process host="c-836.me" function="chord.Node"><argument value="1706730" /><argument value="9298253" /><argument value="8360" /><argument value="600" /></process>
+ <process host="c-837.me" function="chord.Node"><argument value="5640580" /><argument value="15970644" /><argument value="8370" /><argument value="600" /></process>
+ <process host="c-838.me" function="chord.Node"><argument value="3758339" /><argument value="14094748" /><argument value="8380" /><argument value="600" /></process>
+ <process host="c-839.me" function="chord.Node"><argument value="12422581" /><argument value="5252206" /><argument value="8390" /><argument value="600" /></process>
+ <process host="c-840.me" function="chord.Node"><argument value="7829497" /><argument value="8943068" /><argument value="8400" /><argument value="600" /></process>
+ <process host="c-841.me" function="chord.Node"><argument value="6655101" /><argument value="7352277" /><argument value="8410" /><argument value="600" /></process>
+ <process host="c-842.me" function="chord.Node"><argument value="4928751" /><argument value="15982771" /><argument value="8420" /><argument value="600" /></process>
+ <process host="c-843.me" function="chord.Node"><argument value="1198521" /><argument value="1332382" /><argument value="8430" /><argument value="600" /></process>
+ <process host="c-844.me" function="chord.Node"><argument value="15459885" /><argument value="1929021" /><argument value="8440" /><argument value="600" /></process>
+ <process host="c-845.me" function="chord.Node"><argument value="13490631" /><argument value="16401068" /><argument value="8450" /><argument value="600" /></process>
+ <process host="c-846.me" function="chord.Node"><argument value="8561673" /><argument value="5743077" /><argument value="8460" /><argument value="600" /></process>
+ <process host="c-847.me" function="chord.Node"><argument value="5451976" /><argument value="2425443" /><argument value="8470" /><argument value="600" /></process>
+ <process host="c-848.me" function="chord.Node"><argument value="1904471" /><argument value="13432148" /><argument value="8480" /><argument value="600" /></process>
+ <process host="c-849.me" function="chord.Node"><argument value="14712019" /><argument value="8461616" /><argument value="8490" /><argument value="600" /></process>
+ <process host="c-850.me" function="chord.Node"><argument value="14445271" /><argument value="1675312" /><argument value="8500" /><argument value="600" /></process>
+ <process host="c-851.me" function="chord.Node"><argument value="9639639" /><argument value="9281086" /><argument value="8510" /><argument value="600" /></process>
+ <process host="c-852.me" function="chord.Node"><argument value="1823730" /><argument value="1222644" /><argument value="8520" /><argument value="600" /></process>
+ <process host="c-853.me" function="chord.Node"><argument value="13859576" /><argument value="2102638" /><argument value="8530" /><argument value="600" /></process>
+ <process host="c-854.me" function="chord.Node"><argument value="10458148" /><argument value="584392" /><argument value="8540" /><argument value="600" /></process>
+ <process host="c-855.me" function="chord.Node"><argument value="904204" /><argument value="3216983" /><argument value="8550" /><argument value="600" /></process>
+ <process host="c-856.me" function="chord.Node"><argument value="3902068" /><argument value="2923207" /><argument value="8560" /><argument value="600" /></process>
+ <process host="c-857.me" function="chord.Node"><argument value="4870039" /><argument value="9506061" /><argument value="8570" /><argument value="600" /></process>
+ <process host="c-858.me" function="chord.Node"><argument value="14424048" /><argument value="3107999" /><argument value="8580" /><argument value="600" /></process>
+ <process host="c-859.me" function="chord.Node"><argument value="15026893" /><argument value="1599493" /><argument value="8590" /><argument value="600" /></process>
+ <process host="c-860.me" function="chord.Node"><argument value="11578362" /><argument value="3173749" /><argument value="8600" /><argument value="600" /></process>
+ <process host="c-861.me" function="chord.Node"><argument value="4009990" /><argument value="206977" /><argument value="8610" /><argument value="600" /></process>
+ <process host="c-862.me" function="chord.Node"><argument value="449096" /><argument value="10379706" /><argument value="8620" /><argument value="600" /></process>
+ <process host="c-863.me" function="chord.Node"><argument value="10377434" /><argument value="15634875" /><argument value="8630" /><argument value="600" /></process>
+ <process host="c-864.me" function="chord.Node"><argument value="12114530" /><argument value="15806532" /><argument value="8640" /><argument value="600" /></process>
+ <process host="c-865.me" function="chord.Node"><argument value="9235478" /><argument value="7453537" /><argument value="8650" /><argument value="600" /></process>
+ <process host="c-866.me" function="chord.Node"><argument value="1521865" /><argument value="1698314" /><argument value="8660" /><argument value="600" /></process>
+ <process host="c-867.me" function="chord.Node"><argument value="7635193" /><argument value="14524520" /><argument value="8670" /><argument value="600" /></process>
+ <process host="c-868.me" function="chord.Node"><argument value="5773083" /><argument value="15145589" /><argument value="8680" /><argument value="600" /></process>
+ <process host="c-869.me" function="chord.Node"><argument value="13996415" /><argument value="702830" /><argument value="8690" /><argument value="600" /></process>
+ <process host="c-870.me" function="chord.Node"><argument value="8182543" /><argument value="4450166" /><argument value="8700" /><argument value="600" /></process>
+ <process host="c-871.me" function="chord.Node"><argument value="9753487" /><argument value="7413167" /><argument value="8710" /><argument value="600" /></process>
+ <process host="c-872.me" function="chord.Node"><argument value="5901877" /><argument value="2520804" /><argument value="8720" /><argument value="600" /></process>
+ <process host="c-873.me" function="chord.Node"><argument value="693960" /><argument value="11526696" /><argument value="8730" /><argument value="600" /></process>
+ <process host="c-874.me" function="chord.Node"><argument value="11644859" /><argument value="6928634" /><argument value="8740" /><argument value="600" /></process>
+ <process host="c-875.me" function="chord.Node"><argument value="1751781" /><argument value="6352096" /><argument value="8750" /><argument value="600" /></process>
+ <process host="c-876.me" function="chord.Node"><argument value="15743686" /><argument value="8813314" /><argument value="8760" /><argument value="600" /></process>
+ <process host="c-877.me" function="chord.Node"><argument value="170604" /><argument value="6550806" /><argument value="8770" /><argument value="600" /></process>
+ <process host="c-878.me" function="chord.Node"><argument value="15157493" /><argument value="3806583" /><argument value="8780" /><argument value="600" /></process>
+ <process host="c-879.me" function="chord.Node"><argument value="984882" /><argument value="2102638" /><argument value="8790" /><argument value="600" /></process>
+ <process host="c-880.me" function="chord.Node"><argument value="10032762" /><argument value="14629708" /><argument value="8800" /><argument value="600" /></process>
+ <process host="c-881.me" function="chord.Node"><argument value="12170569" /><argument value="10256047" /><argument value="8810" /><argument value="600" /></process>
+ <process host="c-882.me" function="chord.Node"><argument value="5802680" /><argument value="10204339" /><argument value="8820" /><argument value="600" /></process>
+ <process host="c-883.me" function="chord.Node"><argument value="1766934" /><argument value="15663887" /><argument value="8830" /><argument value="600" /></process>
+ <process host="c-884.me" function="chord.Node"><argument value="11196007" /><argument value="9052096" /><argument value="8840" /><argument value="600" /></process>
+ <process host="c-885.me" function="chord.Node"><argument value="15514723" /><argument value="12803982" /><argument value="8850" /><argument value="600" /></process>
+ <process host="c-886.me" function="chord.Node"><argument value="8034873" /><argument value="16591723" /><argument value="8860" /><argument value="600" /></process>
+ <process host="c-887.me" function="chord.Node"><argument value="3541827" /><argument value="16051795" /><argument value="8870" /><argument value="600" /></process>
+ <process host="c-888.me" function="chord.Node"><argument value="6975724" /><argument value="14666163" /><argument value="8880" /><argument value="600" /></process>
+ <process host="c-889.me" function="chord.Node"><argument value="9549132" /><argument value="2896334" /><argument value="8890" /><argument value="600" /></process>
+ <process host="c-890.me" function="chord.Node"><argument value="10082653" /><argument value="2805132" /><argument value="8900" /><argument value="600" /></process>
+ <process host="c-891.me" function="chord.Node"><argument value="1776107" /><argument value="3005317" /><argument value="8910" /><argument value="600" /></process>
+ <process host="c-892.me" function="chord.Node"><argument value="4528413" /><argument value="10649272" /><argument value="8920" /><argument value="600" /></process>
+ <process host="c-893.me" function="chord.Node"><argument value="13871002" /><argument value="3498762" /><argument value="8930" /><argument value="600" /></process>
+ <process host="c-894.me" function="chord.Node"><argument value="8138738" /><argument value="14335164" /><argument value="8940" /><argument value="600" /></process>
+ <process host="c-895.me" function="chord.Node"><argument value="10138733" /><argument value="3109636" /><argument value="8950" /><argument value="600" /></process>
+ <process host="c-896.me" function="chord.Node"><argument value="9064090" /><argument value="9885453" /><argument value="8960" /><argument value="600" /></process>
+ <process host="c-897.me" function="chord.Node"><argument value="3610982" /><argument value="12592922" /><argument value="8970" /><argument value="600" /></process>
+ <process host="c-898.me" function="chord.Node"><argument value="2522109" /><argument value="3005317" /><argument value="8980" /><argument value="600" /></process>
+ <process host="c-899.me" function="chord.Node"><argument value="15375271" /><argument value="6646839" /><argument value="8990" /><argument value="600" /></process>
+ <process host="c-900.me" function="chord.Node"><argument value="13762139" /><argument value="8864434" /><argument value="9000" /><argument value="600" /></process>
+ <process host="c-901.me" function="chord.Node"><argument value="1513584" /><argument value="13972648" /><argument value="9010" /><argument value="600" /></process>
+ <process host="c-902.me" function="chord.Node"><argument value="16600790" /><argument value="15100313" /><argument value="9020" /><argument value="600" /></process>
+ <process host="c-903.me" function="chord.Node"><argument value="13788455" /><argument value="13462468" /><argument value="9030" /><argument value="600" /></process>
+ <process host="c-904.me" function="chord.Node"><argument value="2976659" /><argument value="1948914" /><argument value="9040" /><argument value="600" /></process>
+ <process host="c-905.me" function="chord.Node"><argument value="8228149" /><argument value="8139061" /><argument value="9050" /><argument value="600" /></process>
+ <process host="c-906.me" function="chord.Node"><argument value="292988" /><argument value="11675101" /><argument value="9060" /><argument value="600" /></process>
+ <process host="c-907.me" function="chord.Node"><argument value="31048" /><argument value="8409758" /><argument value="9070" /><argument value="600" /></process>
+ <process host="c-908.me" function="chord.Node"><argument value="5775601" /><argument value="7978724" /><argument value="9080" /><argument value="600" /></process>
+ <process host="c-909.me" function="chord.Node"><argument value="6828950" /><argument value="6420486" /><argument value="9090" /><argument value="600" /></process>
+ <process host="c-910.me" function="chord.Node"><argument value="220371" /><argument value="12958829" /><argument value="9100" /><argument value="600" /></process>
+ <process host="c-911.me" function="chord.Node"><argument value="8866747" /><argument value="9911167" /><argument value="9110" /><argument value="600" /></process>
+ <process host="c-912.me" function="chord.Node"><argument value="2240462" /><argument value="14812706" /><argument value="9120" /><argument value="600" /></process>
+ <process host="c-913.me" function="chord.Node"><argument value="13732939" /><argument value="9549132" /><argument value="9130" /><argument value="600" /></process>
+ <process host="c-914.me" function="chord.Node"><argument value="7159483" /><argument value="13731336" /><argument value="9140" /><argument value="600" /></process>
+ <process host="c-915.me" function="chord.Node"><argument value="4367599" /><argument value="15254383" /><argument value="9150" /><argument value="600" /></process>
+ <process host="c-916.me" function="chord.Node"><argument value="14680121" /><argument value="9524149" /><argument value="9160" /><argument value="600" /></process>
+ <process host="c-917.me" function="chord.Node"><argument value="15355707" /><argument value="14549142" /><argument value="9170" /><argument value="600" /></process>
+ <process host="c-918.me" function="chord.Node"><argument value="13679285" /><argument value="15833788" /><argument value="9180" /><argument value="600" /></process>
+ <process host="c-919.me" function="chord.Node"><argument value="5420659" /><argument value="6550806" /><argument value="9190" /><argument value="600" /></process>
+ <process host="c-920.me" function="chord.Node"><argument value="5763671" /><argument value="4894707" /><argument value="9200" /><argument value="600" /></process>
+ <process host="c-921.me" function="chord.Node"><argument value="7707839" /><argument value="10561938" /><argument value="9210" /><argument value="600" /></process>
+ <process host="c-922.me" function="chord.Node"><argument value="14214977" /><argument value="3450027" /><argument value="9220" /><argument value="600" /></process>
+ <process host="c-923.me" function="chord.Node"><argument value="10175175" /><argument value="7723482" /><argument value="9230" /><argument value="600" /></process>
+ <process host="c-924.me" function="chord.Node"><argument value="13638206" /><argument value="98373" /><argument value="9240" /><argument value="600" /></process>
+ <process host="c-925.me" function="chord.Node"><argument value="8729442" /><argument value="10377434" /><argument value="9250" /><argument value="600" /></process>
+ <process host="c-926.me" function="chord.Node"><argument value="715728" /><argument value="14891461" /><argument value="9260" /><argument value="600" /></process>
+ <process host="c-927.me" function="chord.Node"><argument value="16291010" /><argument value="5218127" /><argument value="9270" /><argument value="600" /></process>
+ <process host="c-928.me" function="chord.Node"><argument value="12900236" /><argument value="3850999" /><argument value="9280" /><argument value="600" /></process>
+ <process host="c-929.me" function="chord.Node"><argument value="16085519" /><argument value="9749604" /><argument value="9290" /><argument value="600" /></process>
+ <process host="c-930.me" function="chord.Node"><argument value="6405365" /><argument value="4446106" /><argument value="9300" /><argument value="600" /></process>
+ <process host="c-931.me" function="chord.Node"><argument value="3293438" /><argument value="4769261" /><argument value="9310" /><argument value="600" /></process>
+ <process host="c-932.me" function="chord.Node"><argument value="8199094" /><argument value="12894114" /><argument value="9320" /><argument value="600" /></process>
+ <process host="c-933.me" function="chord.Node"><argument value="3677287" /><argument value="9369821" /><argument value="9330" /><argument value="600" /></process>
+ <process host="c-934.me" function="chord.Node"><argument value="2963195" /><argument value="12027531" /><argument value="9340" /><argument value="600" /></process>
+ <process host="c-935.me" function="chord.Node"><argument value="5006027" /><argument value="15927382" /><argument value="9350" /><argument value="600" /></process>
+ <process host="c-936.me" function="chord.Node"><argument value="6316406" /><argument value="10331354" /><argument value="9360" /><argument value="600" /></process>
+ <process host="c-937.me" function="chord.Node"><argument value="16604707" /><argument value="2700613" /><argument value="9370" /><argument value="600" /></process>
+ <process host="c-938.me" function="chord.Node"><argument value="13831181" /><argument value="10354580" /><argument value="9380" /><argument value="600" /></process>
+ <process host="c-939.me" function="chord.Node"><argument value="9458665" /><argument value="3498762" /><argument value="9390" /><argument value="600" /></process>
+ <process host="c-940.me" function="chord.Node"><argument value="11962680" /><argument value="14094748" /><argument value="9400" /><argument value="600" /></process>
+ <process host="c-941.me" function="chord.Node"><argument value="704973" /><argument value="8563371" /><argument value="9410" /><argument value="600" /></process>
+ <process host="c-942.me" function="chord.Node"><argument value="13326771" /><argument value="11972882" /><argument value="9420" /><argument value="600" /></process>
+ <process host="c-943.me" function="chord.Node"><argument value="1803579" /><argument value="11208324" /><argument value="9430" /><argument value="600" /></process>
+ <process host="c-944.me" function="chord.Node"><argument value="15421669" /><argument value="14750569" /><argument value="9440" /><argument value="600" /></process>
+ <process host="c-945.me" function="chord.Node"><argument value="7173050" /><argument value="10266651" /><argument value="9450" /><argument value="600" /></process>
+ <process host="c-946.me" function="chord.Node"><argument value="10645238" /><argument value="12803982" /><argument value="9460" /><argument value="600" /></process>
+ <process host="c-947.me" function="chord.Node"><argument value="9082177" /><argument value="7378805" /><argument value="9470" /><argument value="600" /></process>
+ <process host="c-948.me" function="chord.Node"><argument value="10262174" /><argument value="16556231" /><argument value="9480" /><argument value="600" /></process>
+ <process host="c-949.me" function="chord.Node"><argument value="6719217" /><argument value="13354857" /><argument value="9490" /><argument value="600" /></process>
+ <process host="c-950.me" function="chord.Node"><argument value="13771686" /><argument value="1222644" /><argument value="9500" /><argument value="600" /></process>
+ <process host="c-951.me" function="chord.Node"><argument value="11489642" /><argument value="5250686" /><argument value="9510" /><argument value="600" /></process>
+ <process host="c-952.me" function="chord.Node"><argument value="12081092" /><argument value="11644859" /><argument value="9520" /><argument value="600" /></process>
+ <process host="c-953.me" function="chord.Node"><argument value="617604" /><argument value="14094748" /><argument value="9530" /><argument value="600" /></process>
+ <process host="c-954.me" function="chord.Node"><argument value="1150811" /><argument value="10072197" /><argument value="9540" /><argument value="600" /></process>
+ <process host="c-955.me" function="chord.Node"><argument value="6207288" /><argument value="13914475" /><argument value="9550" /><argument value="600" /></process>
+ <process host="c-956.me" function="chord.Node"><argument value="48924" /><argument value="9197489" /><argument value="9560" /><argument value="600" /></process>
+ <process host="c-957.me" function="chord.Node"><argument value="12418519" /><argument value="8459150" /><argument value="9570" /><argument value="600" /></process>
+ <process host="c-958.me" function="chord.Node"><argument value="16211724" /><argument value="15886370" /><argument value="9580" /><argument value="600" /></process>
+ <process host="c-959.me" function="chord.Node"><argument value="11634612" /><argument value="16248621" /><argument value="9590" /><argument value="600" /></process>
+ <process host="c-960.me" function="chord.Node"><argument value="6223681" /><argument value="1372085" /><argument value="9600" /><argument value="600" /></process>
+ <process host="c-961.me" function="chord.Node"><argument value="4375761" /><argument value="2479821" /><argument value="9610" /><argument value="600" /></process>
+ <process host="c-962.me" function="chord.Node"><argument value="5279332" /><argument value="2101123" /><argument value="9620" /><argument value="600" /></process>
+ <process host="c-963.me" function="chord.Node"><argument value="14567124" /><argument value="6942761" /><argument value="9630" /><argument value="600" /></process>
+ <process host="c-964.me" function="chord.Node"><argument value="8692816" /><argument value="7633427" /><argument value="9640" /><argument value="600" /></process>
+ <process host="c-965.me" function="chord.Node"><argument value="4485021" /><argument value="3070" /><argument value="9650" /><argument value="600" /></process>
+ <process host="c-966.me" function="chord.Node"><argument value="11239034" /><argument value="2463836" /><argument value="9660" /><argument value="600" /></process>
+ <process host="c-967.me" function="chord.Node"><argument value="11818140" /><argument value="1484334" /><argument value="9670" /><argument value="600" /></process>
+ <process host="c-968.me" function="chord.Node"><argument value="13718401" /><argument value="9506061" /><argument value="9680" /><argument value="600" /></process>
+ <process host="c-969.me" function="chord.Node"><argument value="14246965" /><argument value="13354857" /><argument value="9690" /><argument value="600" /></process>
+ <process host="c-970.me" function="chord.Node"><argument value="7114420" /><argument value="1513584" /><argument value="9700" /><argument value="600" /></process>
+ <process host="c-971.me" function="chord.Node"><argument value="6626575" /><argument value="1952937" /><argument value="9710" /><argument value="600" /></process>
+ <process host="c-972.me" function="chord.Node"><argument value="11121575" /><argument value="5547784" /><argument value="9720" /><argument value="600" /></process>
+ <process host="c-973.me" function="chord.Node"><argument value="2997461" /><argument value="9694594" /><argument value="9730" /><argument value="600" /></process>
+ <process host="c-974.me" function="chord.Node"><argument value="5538067" /><argument value="4450166" /><argument value="9740" /><argument value="600" /></process>
+ <process host="c-975.me" function="chord.Node"><argument value="16443143" /><argument value="13913870" /><argument value="9750" /><argument value="600" /></process>
+ <process host="c-976.me" function="chord.Node"><argument value="2503670" /><argument value="11043210" /><argument value="9760" /><argument value="600" /></process>
+ <process host="c-977.me" function="chord.Node"><argument value="11408974" /><argument value="7177224" /><argument value="9770" /><argument value="600" /></process>
+ <process host="c-978.me" function="chord.Node"><argument value="15877358" /><argument value="6014367" /><argument value="9780" /><argument value="600" /></process>
+ <process host="c-979.me" function="chord.Node"><argument value="7902378" /><argument value="6826716" /><argument value="9790" /><argument value="600" /></process>
+ <process host="c-980.me" function="chord.Node"><argument value="10232039" /><argument value="5763671" /><argument value="9800" /><argument value="600" /></process>
+ <process host="c-981.me" function="chord.Node"><argument value="549218" /><argument value="3022487" /><argument value="9810" /><argument value="600" /></process>
+ <process host="c-982.me" function="chord.Node"><argument value="10964219" /><argument value="5775601" /><argument value="9820" /><argument value="600" /></process>
+ <process host="c-983.me" function="chord.Node"><argument value="1871354" /><argument value="211353" /><argument value="9830" /><argument value="600" /></process>
+ <process host="c-984.me" function="chord.Node"><argument value="10935394" /><argument value="12624929" /><argument value="9840" /><argument value="600" /></process>
+ <process host="c-985.me" function="chord.Node"><argument value="5745132" /><argument value="9101477" /><argument value="9850" /><argument value="600" /></process>
+ <process host="c-986.me" function="chord.Node"><argument value="11341348" /><argument value="14306294" /><argument value="9860" /><argument value="600" /></process>
+ <process host="c-987.me" function="chord.Node"><argument value="359257" /><argument value="1929021" /><argument value="9870" /><argument value="600" /></process>
+ <process host="c-988.me" function="chord.Node"><argument value="5893992" /><argument value="9654276" /><argument value="9880" /><argument value="600" /></process>
+ <process host="c-989.me" function="chord.Node"><argument value="12594202" /><argument value="8199094" /><argument value="9890" /><argument value="600" /></process>
+ <process host="c-990.me" function="chord.Node"><argument value="15102792" /><argument value="1766934" /><argument value="9900" /><argument value="600" /></process>
+ <process host="c-991.me" function="chord.Node"><argument value="2865566" /><argument value="12597415" /><argument value="9910" /><argument value="600" /></process>
+ <process host="c-992.me" function="chord.Node"><argument value="11873830" /><argument value="11989707" /><argument value="9920" /><argument value="600" /></process>
+ <process host="c-993.me" function="chord.Node"><argument value="7252032" /><argument value="12662990" /><argument value="9930" /><argument value="600" /></process>
+ <process host="c-994.me" function="chord.Node"><argument value="3452256" /><argument value="3500428" /><argument value="9940" /><argument value="600" /></process>
+ <process host="c-995.me" function="chord.Node"><argument value="15194729" /><argument value="2662428" /><argument value="9950" /><argument value="600" /></process>
+ <process host="c-996.me" function="chord.Node"><argument value="12400600" /><argument value="15403037" /><argument value="9960" /><argument value="600" /></process>
+ <process host="c-997.me" function="chord.Node"><argument value="16019525" /><argument value="9694594" /><argument value="9970" /><argument value="600" /></process>
+ <process host="c-998.me" function="chord.Node"><argument value="3697010" /><argument value="3406740" /><argument value="9980" /><argument value="600" /></process>
+ <process host="c-999.me" function="chord.Node"><argument value="10975744" /><argument value="8214632" /><argument value="9990" /><argument value="600" /></process>
+</platform>