Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' into hypervisor
authoralebre <adrien.lebre@inria.fr>
Thu, 31 Jan 2013 22:51:36 +0000 (23:51 +0100)
committeralebre <adrien.lebre@inria.fr>
Thu, 31 Jan 2013 22:51:36 +0000 (23:51 +0100)
235 files changed:
.gitignore
CMakeLists.txt
ChangeLog.SimGrid-java [new file with mode: 0644]
README.java [new file with mode: 0644]
buildtools/Cmake/AddTests.cmake
buildtools/Cmake/CompleteInFiles.cmake
buildtools/Cmake/DefinePackages.cmake
buildtools/Cmake/Distrib.cmake
buildtools/Cmake/Flags.cmake
buildtools/Cmake/GenerateDoc.cmake
buildtools/Cmake/MakeExe.cmake
buildtools/Cmake/MakeLib.cmake
buildtools/Cmake/Option.cmake
buildtools/Cmake/PrintArgs.cmake
doc/doxygen/bindings.doc
doc/doxygen/inside_extending.doc
examples/java/CMakeLists.txt [new file with mode: 0644]
examples/java/async/AsyncTest.java [new file with mode: 0644]
examples/java/async/FinalizeTask.java [new file with mode: 0644]
examples/java/async/Forwarder.java [new file with mode: 0644]
examples/java/async/Master.java [new file with mode: 0644]
examples/java/async/README [new file with mode: 0644]
examples/java/async/Slave.java [new file with mode: 0644]
examples/java/async/async.tesh [new file with mode: 0644]
examples/java/async/asyncDeployment.xml [new file with mode: 0644]
examples/java/bittorrent/Bittorrent.java [new file with mode: 0644]
examples/java/bittorrent/CMakeLists.txt [new file with mode: 0644]
examples/java/bittorrent/Common.java [new file with mode: 0644]
examples/java/bittorrent/Connection.java [new file with mode: 0644]
examples/java/bittorrent/MessageTask.java [new file with mode: 0644]
examples/java/bittorrent/Peer.java [new file with mode: 0644]
examples/java/bittorrent/Tracker.java [new file with mode: 0644]
examples/java/bittorrent/TrackerTask.java [new file with mode: 0644]
examples/java/bittorrent/bittorrent.tesh [new file with mode: 0644]
examples/java/bittorrent/bittorrent.xml [new file with mode: 0644]
examples/java/bittorrent/generate.py [new file with mode: 0755]
examples/java/chord/Chord.java [new file with mode: 0644]
examples/java/chord/ChordTask.java [new file with mode: 0644]
examples/java/chord/Common.java [new file with mode: 0644]
examples/java/chord/FindSuccessorAnswerTask.java [new file with mode: 0644]
examples/java/chord/FindSuccessorTask.java [new file with mode: 0644]
examples/java/chord/GetPredecessorAnswerTask.java [new file with mode: 0644]
examples/java/chord/GetPredecessorTask.java [new file with mode: 0644]
examples/java/chord/Node.java [new file with mode: 0644]
examples/java/chord/NotifyTask.java [new file with mode: 0644]
examples/java/chord/chord.tesh [new file with mode: 0644]
examples/java/chord/chord.xml [new file with mode: 0644]
examples/java/chord/chord10.xml [new file with mode: 0644]
examples/java/chord/chord100.xml [new file with mode: 0644]
examples/java/chord/chord1000.xml [new file with mode: 0644]
examples/java/chord/chord10000.xml [new file with mode: 0644]
examples/java/chord/chord90.xml [new file with mode: 0644]
examples/java/cloud/Cloud.java [new file with mode: 0644]
examples/java/cloud/FinalizeTask.java [new file with mode: 0644]
examples/java/cloud/Master.java [new file with mode: 0644]
examples/java/cloud/Slave.java [new file with mode: 0644]
examples/java/cloud/cloud.tesh [new file with mode: 0644]
examples/java/commTime/CommTimeTest.java [new file with mode: 0644]
examples/java/commTime/FinalizeTask.java [new file with mode: 0644]
examples/java/commTime/Master.java [new file with mode: 0644]
examples/java/commTime/README [new file with mode: 0644]
examples/java/commTime/Slave.java [new file with mode: 0644]
examples/java/commTime/commTimeDeployment.xml [new file with mode: 0644]
examples/java/commTime/commtime.tesh [new file with mode: 0644]
examples/java/io/IO.java [new file with mode: 0644]
examples/java/io/Node.java [new file with mode: 0644]
examples/java/io/storage.xml [new file with mode: 0644]
examples/java/kademlia/Answer.java [new file with mode: 0644]
examples/java/kademlia/Bucket.java [new file with mode: 0644]
examples/java/kademlia/Common.java [new file with mode: 0644]
examples/java/kademlia/Contact.java [new file with mode: 0644]
examples/java/kademlia/FindNodeAnswerTask.java [new file with mode: 0644]
examples/java/kademlia/FindNodeTask.java [new file with mode: 0644]
examples/java/kademlia/Kademlia.java [new file with mode: 0644]
examples/java/kademlia/KademliaTask.java [new file with mode: 0644]
examples/java/kademlia/Node.java [new file with mode: 0644]
examples/java/kademlia/PingAnswerTask.java [new file with mode: 0644]
examples/java/kademlia/PingTask.java [new file with mode: 0644]
examples/java/kademlia/RoutingTable.java [new file with mode: 0644]
examples/java/kademlia/kademlia.tesh [new file with mode: 0644]
examples/java/kademlia/kademlia.xml [new file with mode: 0644]
examples/java/master_slave_bypass/FinalizeTask.java [new file with mode: 0644]
examples/java/master_slave_bypass/Master.java [new file with mode: 0644]
examples/java/master_slave_bypass/MsBypass.java [new file with mode: 0644]
examples/java/master_slave_bypass/Slave.java [new file with mode: 0644]
examples/java/master_slave_bypass/bypass.tesh [new file with mode: 0644]
examples/java/master_slave_bypass/platform.xml [new file with mode: 0644]
examples/java/master_slave_kill/FinalizeTask.java [new file with mode: 0644]
examples/java/master_slave_kill/Master.java [new file with mode: 0644]
examples/java/master_slave_kill/MsKill.java [new file with mode: 0644]
examples/java/master_slave_kill/Slave.java [new file with mode: 0644]
examples/java/master_slave_kill/kill.tesh [new file with mode: 0644]
examples/java/master_slave_kill/platform.xml [new file with mode: 0644]
examples/java/masterslave/FinalizeTask.java [new file with mode: 0644]
examples/java/masterslave/Forwarder.java [new file with mode: 0644]
examples/java/masterslave/Master.java [new file with mode: 0644]
examples/java/masterslave/Masterslave.java [new file with mode: 0644]
examples/java/masterslave/README [new file with mode: 0644]
examples/java/masterslave/Slave.java [new file with mode: 0644]
examples/java/masterslave/deploy.xml [new file with mode: 0644]
examples/java/masterslave/masterslave.tesh [new file with mode: 0644]
examples/java/masterslave/masterslaveDeployment.xml [new file with mode: 0644]
examples/java/migration/Emigrant.java [new file with mode: 0644]
examples/java/migration/Migration.java [new file with mode: 0644]
examples/java/migration/Policeman.java [new file with mode: 0644]
examples/java/migration/migration.tesh [new file with mode: 0644]
examples/java/migration/migrationDeployment.xml [new file with mode: 0644]
examples/java/mutualExclusion/centralized/Coordinator.java [new file with mode: 0644]
examples/java/mutualExclusion/centralized/GrantTask.java [new file with mode: 0644]
examples/java/mutualExclusion/centralized/MutexCentral.java [new file with mode: 0644]
examples/java/mutualExclusion/centralized/Node.java [new file with mode: 0644]
examples/java/mutualExclusion/centralized/ReleaseTask.java [new file with mode: 0644]
examples/java/mutualExclusion/centralized/RequestTask.java [new file with mode: 0644]
examples/java/mutualExclusion/centralized/mutex_centralized_deployment.xml [new file with mode: 0644]
examples/java/mutualExclusion/mutualexclusion.tesh [new file with mode: 0644]
examples/java/mutualExclusion/ring3.xml [new file with mode: 0644]
examples/java/pingPong/PingPongTask.java [new file with mode: 0644]
examples/java/pingPong/PingPongTest.java [new file with mode: 0644]
examples/java/pingPong/README [new file with mode: 0644]
examples/java/pingPong/Receiver.java [new file with mode: 0644]
examples/java/pingPong/Sender.java [new file with mode: 0644]
examples/java/pingPong/pingPongDeployment.xml [new file with mode: 0644]
examples/java/pingPong/pingpong.tesh [new file with mode: 0644]
examples/java/platform.xml [new file with mode: 0644]
examples/java/priority/Priority.java [new file with mode: 0644]
examples/java/priority/Test.java [new file with mode: 0644]
examples/java/priority/priority.tesh [new file with mode: 0644]
examples/java/priority/priorityDeployment.xml [new file with mode: 0644]
examples/java/startKillTime/Master.java [new file with mode: 0644]
examples/java/startKillTime/Slave.java [new file with mode: 0644]
examples/java/startKillTime/StartKillTime.java [new file with mode: 0644]
examples/java/startKillTime/deployment.xml [new file with mode: 0644]
examples/java/startKillTime/deployment_kill.xml [new file with mode: 0644]
examples/java/startKillTime/deployment_start.xml [new file with mode: 0644]
examples/java/startKillTime/deployment_start_kill.xml [new file with mode: 0644]
examples/java/startKillTime/startKillTime.tesh [new file with mode: 0644]
examples/java/suspend/DreamMaster.java [new file with mode: 0644]
examples/java/suspend/LazyGuy.java [new file with mode: 0644]
examples/java/suspend/Suspend.java [new file with mode: 0644]
examples/java/suspend/suspend.tesh [new file with mode: 0644]
examples/java/suspend/suspendDeployment.xml [new file with mode: 0644]
examples/java/tracing/PingPongTask.java [new file with mode: 0644]
examples/java/tracing/README [new file with mode: 0644]
examples/java/tracing/Receiver.java [new file with mode: 0644]
examples/java/tracing/Sender.java [new file with mode: 0644]
examples/java/tracing/TracingTest.java [new file with mode: 0644]
examples/java/tracing/tracingPingPong.tesh [new file with mode: 0644]
examples/java/tracing/tracingPingPongDeployment.xml [new file with mode: 0644]
examples/simdag/CMakeLists.txt
examples/simdag/dax/smalldax.tesh
examples/simdag/dot/test_simdag_dotload.tesh
examples/simdag/simdag_trace.c
examples/simdag/test_simdag_fail.tesh
examples/simdag/test_simdag_tracing.tesh
include/instr/instr.h
include/simdag/simdag.h
include/simgrid/simix.h
include/xbt/dynar.h
simgrid-java/.gitignore [new file with mode: 0644]
simgrid-java/CMakeLists.txt [new file with mode: 0644]
src/bindings/java/MANIFEST.MF [new file with mode: 0644]
src/bindings/java/jmsg.c [new file with mode: 0644]
src/bindings/java/jmsg.h [new file with mode: 0644]
src/bindings/java/jmsg_comm.c [new file with mode: 0644]
src/bindings/java/jmsg_comm.h [new file with mode: 0644]
src/bindings/java/jmsg_file.c [new file with mode: 0644]
src/bindings/java/jmsg_file.h [new file with mode: 0644]
src/bindings/java/jmsg_host.c [new file with mode: 0644]
src/bindings/java/jmsg_host.h [new file with mode: 0644]
src/bindings/java/jmsg_process.c [new file with mode: 0644]
src/bindings/java/jmsg_process.h [new file with mode: 0644]
src/bindings/java/jmsg_rngstream.c [new file with mode: 0644]
src/bindings/java/jmsg_rngstream.h [new file with mode: 0644]
src/bindings/java/jmsg_synchro.c [new file with mode: 0644]
src/bindings/java/jmsg_synchro.h [new file with mode: 0644]
src/bindings/java/jmsg_task.c [new file with mode: 0644]
src/bindings/java/jmsg_task.h [new file with mode: 0644]
src/bindings/java/jmsg_vm.c [new file with mode: 0644]
src/bindings/java/jmsg_vm.h [new file with mode: 0644]
src/bindings/java/jtrace.c [new file with mode: 0644]
src/bindings/java/jtrace.h [new file with mode: 0644]
src/bindings/java/jxbt_utilities.c [new file with mode: 0644]
src/bindings/java/jxbt_utilities.h [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/Comm.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/File.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/Host.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/HostFailureException.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/HostNotFoundException.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/JniException.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/Msg.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/MsgException.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/Mutex.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/NativeException.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/Process.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/ProcessKilledError.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/ProcessNotFoundException.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/RngStream.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/Task.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/TaskCancelledException.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/TimeoutException.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/TransferFailureException.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/VM.java [new file with mode: 0644]
src/bindings/java/org/simgrid/trace/Trace.java [new file with mode: 0644]
src/bindings/java/smx_context_cojava.c [new file with mode: 0644]
src/bindings/java/smx_context_cojava.h [new file with mode: 0644]
src/bindings/java/smx_context_java.c [new file with mode: 0644]
src/bindings/java/smx_context_java.h [new file with mode: 0644]
src/instr/instr_paje_trace.c
src/mc/README [deleted file]
src/msg/msg_global.c
src/msg/msg_private.h
src/msg/msg_process.c
src/simdag/instr_sd_task.c [new file with mode: 0644]
src/simdag/private.h
src/simdag/sd_daxloader.c
src/simdag/sd_dotloader.c
src/simdag/sd_task.c
src/simix/smx_global.c
src/simix/smx_process.c
src/simix/smx_process_private.h
src/simix/smx_smurf_private.h
src/simix/smx_user.c
src/smpi/sample/reduce.c [deleted file]
src/smpi/smpi_replay.c
src/surf/storage_private.h
src/xbt/dynar.c
teshsuite/msg/CMakeLists.txt
teshsuite/msg/pid.c [new file with mode: 0644]
teshsuite/msg/pid.tesh [new file with mode: 0644]
teshsuite/msg/pid.xml [new file with mode: 0644]
teshsuite/smpi/mpich-test/.gitignore [deleted file]
teshsuite/smpi/mpich-test/pt2pt/CMakeLists.txt
tools/CMakeLists.txt
tools/check_dist_archive [new file with mode: 0755]
tools/check_dist_archive.exclude [new file with mode: 0644]

index 5c2ec2a..b60eef0 100644 (file)
@@ -256,6 +256,149 @@ teshsuite/smpi/split
 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
index b9c2a97..a1b4f44 100644 (file)
@@ -1,12 +1,4 @@
 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")
@@ -66,6 +58,7 @@ else()
 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")
 
diff --git a/ChangeLog.SimGrid-java b/ChangeLog.SimGrid-java
new file mode 100644 (file)
index 0000000..d66e6b7
--- /dev/null
@@ -0,0 +1,67 @@
+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>
diff --git a/README.java b/README.java
new file mode 100644 (file)
index 0000000..66af8b5
--- /dev/null
@@ -0,0 +1,7 @@
+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...
index 7e59b1b..13121b9 100644 (file)
@@ -68,6 +68,15 @@ if(NOT enable_memcheck)
     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()
@@ -307,6 +316,12 @@ if(NOT enable_memcheck)
     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)
index abcd9c9..00cf1ec 100644 (file)
@@ -82,6 +82,12 @@ if(enable_smpi)
   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()
index 934116c..9b0323b 100644 (file)
@@ -2,6 +2,7 @@
 
 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
@@ -288,6 +289,7 @@ set(EXTRA_DIST
 #* ****************************************************************************************** *#
 
 set(SIMDAG_SRC
+  src/simdag/instr_sd_task.c
   src/simdag/sd_daxloader.c
   src/simdag/sd_global.c
   src/simdag/sd_link.c
@@ -312,6 +314,70 @@ set(BINDINGS_SRC
   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
@@ -661,6 +727,7 @@ set(txt_files
   )
 
 set(EXAMPLES_CMAKEFILES_TXT
+  examples/java/bittorrent/CMakeLists.txt
   examples/lua/CMakeLists.txt
   examples/msg/CMakeLists.txt
   examples/msg/actions/CMakeLists.txt
@@ -787,7 +854,6 @@ set(CMAKE_SOURCE_FILES
   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
   )
 
index 905c564..6e4ccb2 100644 (file)
@@ -172,6 +172,8 @@ set(source_to_pack
   ${BINDINGS_SRC}
   ${GTNETS_SRC}
   ${JEDULE_SRC}
+  ${JMSG_C_SRC}
+  ${JMSG_JAVA_SRC}
   ${LUA_SRC}
   ${MC_SRC}
   ${MSG_SRC}
@@ -258,6 +260,7 @@ add_custom_command(
 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}/
   )
 
@@ -287,6 +290,9 @@ set(CMAKE_BINARY_TEST_DIR ${CMAKE_BINARY_DIR})
 
 # 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}
 
index e8e8401..28a0cb4 100644 (file)
@@ -19,6 +19,8 @@ if(enable_compile_warnings)
   endif()
 
   set(CMAKE_Fortran_FLAGS "-Wall") # FIXME: Q&D hack
+
+  set(CMAKE_JAVA_COMPILE_FLAGS "-Xlint")
 endif()
 
 if(enable_compile_optimizations)
index 2adaa1c..52df9b0 100644 (file)
@@ -1,6 +1,7 @@
 #### 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)
@@ -60,6 +61,8 @@ 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
     )
 
index f8f7174..bd69c83 100644 (file)
@@ -32,6 +32,8 @@ add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/pt2pt)
 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)
index bce4151..b713183 100644 (file)
@@ -23,6 +23,67 @@ if(enable_smpi)
   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
index a3321a0..af31674 100644 (file)
@@ -20,7 +20,8 @@ option(enable_debug "Set NDEBUG flag" on)
 
 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)
index 1f8e842..de6683b 100644 (file)
@@ -86,6 +86,10 @@ if(CMAKE_CXX_COMPILER)
   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}")
@@ -102,6 +106,7 @@ if(NOT APPLE AND NOT WIN32)
   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}")
index aec7344..ebc4084 100644 (file)
 /*! \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
 
@@ -15,7 +272,6 @@ Most of Simgrid modules require a  good level in C programming, since simgrid is
 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>).
index 6332d50..554ab17 100644 (file)
@@ -39,6 +39,49 @@ user@caraja:~/workspace/simgrid/src$ cg "TUTORIAL: New model"
 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
diff --git a/examples/java/CMakeLists.txt b/examples/java/CMakeLists.txt
new file mode 100644 (file)
index 0000000..90617f9
--- /dev/null
@@ -0,0 +1,24 @@
+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
+  )
+
diff --git a/examples/java/async/AsyncTest.java b/examples/java/async/AsyncTest.java
new file mode 100644 (file)
index 0000000..c3a35dc
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * 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();
+       }
+}
diff --git a/examples/java/async/FinalizeTask.java b/examples/java/async/FinalizeTask.java
new file mode 100644 (file)
index 0000000..359c804
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * 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
diff --git a/examples/java/async/Forwarder.java b/examples/java/async/Forwarder.java
new file mode 100644 (file)
index 0000000..6e62497
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * 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!");
+       }
+}
+
diff --git a/examples/java/async/Master.java b/examples/java/async/Master.java
new file mode 100644 (file)
index 0000000..5f270cb
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * 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!");
+       }
+}
diff --git a/examples/java/async/README b/examples/java/async/README
new file mode 100644 (file)
index 0000000..0d6dcc2
--- /dev/null
@@ -0,0 +1,24 @@
+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
diff --git a/examples/java/async/Slave.java b/examples/java/async/Slave.java
new file mode 100644 (file)
index 0000000..ca06965
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * 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
diff --git a/examples/java/async/async.tesh b/examples/java/async/async.tesh
new file mode 100644 (file)
index 0000000..6063d5a
--- /dev/null
@@ -0,0 +1,56 @@
+#! ./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.
diff --git a/examples/java/async/asyncDeployment.xml b/examples/java/async/asyncDeployment.xml
new file mode 100644 (file)
index 0000000..5b545d3
--- /dev/null
@@ -0,0 +1,49 @@
+<?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>
diff --git a/examples/java/bittorrent/Bittorrent.java b/examples/java/bittorrent/Bittorrent.java
new file mode 100644 (file)
index 0000000..0d946f3
--- /dev/null
@@ -0,0 +1,32 @@
+/**
+* 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();             
+       }
+
+}
diff --git a/examples/java/bittorrent/CMakeLists.txt b/examples/java/bittorrent/CMakeLists.txt
new file mode 100644 (file)
index 0000000..8730ae2
--- /dev/null
@@ -0,0 +1,44 @@
+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
+  )
+
diff --git a/examples/java/bittorrent/Common.java b/examples/java/bittorrent/Common.java
new file mode 100644 (file)
index 0000000..3817db9
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * 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;
+}
diff --git a/examples/java/bittorrent/Connection.java b/examples/java/bittorrent/Connection.java
new file mode 100644 (file)
index 0000000..f0a3339
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * 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
diff --git a/examples/java/bittorrent/MessageTask.java b/examples/java/bittorrent/MessageTask.java
new file mode 100644 (file)
index 0000000..2ea0751
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * 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;
+       }       
+}
diff --git a/examples/java/bittorrent/Peer.java b/examples/java/bittorrent/Peer.java
new file mode 100644 (file)
index 0000000..47b300f
--- /dev/null
@@ -0,0 +1,693 @@
+/*
+ * 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;
+       }
+}
+       
diff --git a/examples/java/bittorrent/Tracker.java b/examples/java/bittorrent/Tracker.java
new file mode 100644 (file)
index 0000000..d41bafd
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * 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");
+       }
+
+}
diff --git a/examples/java/bittorrent/TrackerTask.java b/examples/java/bittorrent/TrackerTask.java
new file mode 100644 (file)
index 0000000..9c0552d
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * 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>();
+       }
+       
+}
diff --git a/examples/java/bittorrent/bittorrent.tesh b/examples/java/bittorrent/bittorrent.tesh
new file mode 100644 (file)
index 0000000..b02e6da
--- /dev/null
@@ -0,0 +1,24 @@
+#! ./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
+
diff --git a/examples/java/bittorrent/bittorrent.xml b/examples/java/bittorrent/bittorrent.xml
new file mode 100644 (file)
index 0000000..0699cac
--- /dev/null
@@ -0,0 +1,39 @@
+<?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>
diff --git a/examples/java/bittorrent/generate.py b/examples/java/bittorrent/generate.py
new file mode 100755 (executable)
index 0000000..9ba8611
--- /dev/null
@@ -0,0 +1,41 @@
+#!/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>")
+
diff --git a/examples/java/chord/Chord.java b/examples/java/chord/Chord.java
new file mode 100644 (file)
index 0000000..398058f
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * 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();             
+       }
+}
diff --git a/examples/java/chord/ChordTask.java b/examples/java/chord/ChordTask.java
new file mode 100644 (file)
index 0000000..9c6c785
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * 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;
+       }
+}
diff --git a/examples/java/chord/Common.java b/examples/java/chord/Common.java
new file mode 100644 (file)
index 0000000..0348460
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * 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;
+}
diff --git a/examples/java/chord/FindSuccessorAnswerTask.java b/examples/java/chord/FindSuccessorAnswerTask.java
new file mode 100644 (file)
index 0000000..64e49cd
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * 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;
+       }
+}
diff --git a/examples/java/chord/FindSuccessorTask.java b/examples/java/chord/FindSuccessorTask.java
new file mode 100644 (file)
index 0000000..8708469
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * 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;
+       }
+}
diff --git a/examples/java/chord/GetPredecessorAnswerTask.java b/examples/java/chord/GetPredecessorAnswerTask.java
new file mode 100644 (file)
index 0000000..c3d1724
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+ * 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;
+       }
+}
diff --git a/examples/java/chord/GetPredecessorTask.java b/examples/java/chord/GetPredecessorTask.java
new file mode 100644 (file)
index 0000000..f170188
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+ * 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);
+       }
+}
diff --git a/examples/java/chord/Node.java b/examples/java/chord/Node.java
new file mode 100644 (file)
index 0000000..f28383f
--- /dev/null
@@ -0,0 +1,478 @@
+/*
+ * 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();
+               }
+       }
+}
diff --git a/examples/java/chord/NotifyTask.java b/examples/java/chord/NotifyTask.java
new file mode 100644 (file)
index 0000000..670da59
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+ * 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;
+       }
+}
diff --git a/examples/java/chord/chord.tesh b/examples/java/chord/chord.tesh
new file mode 100644 (file)
index 0000000..03894b4
--- /dev/null
@@ -0,0 +1,14 @@
+#! ./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
diff --git a/examples/java/chord/chord.xml b/examples/java/chord/chord.xml
new file mode 100644 (file)
index 0000000..f04ba2d
--- /dev/null
@@ -0,0 +1,59 @@
+<?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>
diff --git a/examples/java/chord/chord10.xml b/examples/java/chord/chord10.xml
new file mode 100644 (file)
index 0000000..a2510d2
--- /dev/null
@@ -0,0 +1,14 @@
+<?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>
diff --git a/examples/java/chord/chord100.xml b/examples/java/chord/chord100.xml
new file mode 100644 (file)
index 0000000..f325f92
--- /dev/null
@@ -0,0 +1,104 @@
+<?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>
diff --git a/examples/java/chord/chord1000.xml b/examples/java/chord/chord1000.xml
new file mode 100644 (file)
index 0000000..d065883
--- /dev/null
@@ -0,0 +1,1004 @@
+<?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>
diff --git a/examples/java/chord/chord10000.xml b/examples/java/chord/chord10000.xml
new file mode 100644 (file)
index 0000000..<