From: Zitagcc Date: Wed, 18 Oct 2017 13:51:08 +0000 (+0200) Subject: Merge branch 'master' into actor-priority X-Git-Tag: v3.18~401^2~3^2^2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/22e6546d2c6f14864cc93c4ed1470d8e8c1e2d95?hp=a0f8dee771084551fd59762e2da1da032d235de0 Merge branch 'master' into actor-priority --- diff --git a/ChangeLog b/ChangeLog index c595a7fdb2..5dc0488440 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ SimGrid (3.18) NOT RELEASED YET (target: December 24 2017) + S4U + - Link::name() is deprecated and will be removed in v3.21, use instead + Link::getCname(). + - Mailbox::getName() changed to return a std::string, use instead + Mailbox::getCname() to get a char*. + - Storage::getName() changed to return a std::string, use intead + Storage::getCname() to get a char*. + SimGrid (3.17) Released October 8 2017 The Drained Leaks release: (almost) no known leaks despite the tests. diff --git a/doc/doxygen/inside_release.doc b/doc/doxygen/inside_release.doc index dd25c92d4d..f3be6de5f9 100644 --- a/doc/doxygen/inside_release.doc +++ b/doc/doxygen/inside_release.doc @@ -9,6 +9,7 @@ Please apply the following checklist before releasing. - Sources - The external patches (Debian, etc) are integrated. + The COPYING file is aligned with Debian's copyright file. - The version number is correctly marked in CMakeLists.txt, in macros SIMGRID_VERSION_MAJOR and friends. - The "make distcheck" target works (testing that every files needed diff --git a/doc/doxygen/inside_tests.doc b/doc/doxygen/inside_tests.doc index a31e13fa80..38732f60b2 100644 --- a/doc/doxygen/inside_tests.doc +++ b/doc/doxygen/inside_tests.doc @@ -261,8 +261,10 @@ We have 2 interesting projects on Jenkins: is the main project, running the tests that we spoke about.\n It is configured (on Jenkins) to run the script tools/jenkins/build.sh \li SimGrid-DynamicAnalysis - runs the tests both under valgrind to find the memory errors and - under gcovr to report the achieved test coverage.\n It is configured + should be called "nightly" because it does not only run dynamic + tests, but a whole bunch of long lasting tests: valgrind (memory + errors), gcovr (coverage), Sanitizers (bad pointer usage, threading + errors, use of unspecified C constructs) and the clang static analyzer.\n It is configured (on Jenkins) to run the script tools/jenkins/DynamicAnalysis.sh In each case, SimGrid gets built in @@ -282,6 +284,31 @@ order to disable the "ModelChecker" build on host (label=="small-netbsd-64-clang").implies(build_mode!="ModelChecker") \endverbatim +Just for the record, the slaves were created from the available +template with the following commands: +\verbatim +#debian/ubuntu +apt-get install gcc g++ gfortran automake cmake libboost-dev openjdk-8-jdk openjdk-8-jre libxslt-dev libxml2-dev libevent-dev libunwind-dev libdw-dev htop git python3 xsltproc libboost-context-dev +#for dynamicanalysis: +apt-get install jacoco libjacoco-java libns3-dev pcregrep gcovr ant lua5.3-dev sloccount + +#fedora +dnf install libboost-devel openjdk-8-jdk openjdk-8-jre libxslt-devel libxml2-devel xsltproc git python3 libdw-devel libevent-devel libunwind-devel htop lua5.3-devel + +#netbsd +pkg_add cmake gcc7 boost boost-headers automake openjdk8 libxslt libxml2 libunwind git htop python36 + +#opensuse +zypper install cmake automake clang boost-devel java-1_8_0-openjdk-devel libxslt-devel libxml2-devel xsltproc git python3 libdw-devel libevent-devel libunwind-devel htop binutils ggc7-fortran + +#freebsd +pkg install boost-libs cmake openjdk8 automake libxslt libxml2 libunwind git htop python3 automake gcc6 flang elfutils libevent +#+ clang-devel from ports + +#osx +brew install cmake boost libunwind-headers libxslt git python3 +\endverbatim + \subsection inside_tests_travis Travis Travis is a free (as in free beer) Continuous Integration system that diff --git a/doc/doxygen/uhood_switch.doc b/doc/doxygen/uhood_switch.doc index ccb9e72bc3..684eacbb20 100644 --- a/doc/doxygen/uhood_switch.doc +++ b/doc/doxygen/uhood_switch.doc @@ -629,7 +629,7 @@ which can be exposed using the same API as `std::condition_variable`: @code{cpp} class ConditionVariable { private: - friend s_smx_cond; + friend s_smx_cond_t; smx_cond_t cond_; ConditionVariable(smx_cond_t cond) : cond_(cond) {} public: diff --git a/examples/java/app/bittorrent/Peer.java b/examples/java/app/bittorrent/Peer.java index 43be4d4bda..8c07d84d42 100644 --- a/examples/java/app/bittorrent/Peer.java +++ b/examples/java/app/bittorrent/Peer.java @@ -325,6 +325,9 @@ public class Peer extends Process { } } break; + default: + Msg.error("Unexpected message type: " + message.type); + break; } if (remotePeer != null) { remotePeer.addSpeedValue(1 / (Msg.getClock() - beginReceiveTime)); diff --git a/examples/msg/energy-ptask/energy-ptask.c b/examples/msg/energy-ptask/energy-ptask.c index 2764151643..d368bb1378 100644 --- a/examples/msg/energy-ptask/energy-ptask.c +++ b/examples/msg/energy-ptask/energy-ptask.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2016. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2017. 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. */ @@ -38,7 +38,8 @@ static int runner(int argc, char *argv[]) MSG_parallel_task_create("parallel task", hosts_count, hosts, computation_amounts, communication_amounts, NULL); MSG_parallel_task_execute(ptask); MSG_task_destroy(ptask); - /* The arrays communication_amounts and computation_amounts are not to be freed manually */ + xbt_free(communication_amounts); + xbt_free(computation_amounts); XBT_INFO("We can do the same with a timeout of one second enabled."); computation_amounts = xbt_new0(double, hosts_count); @@ -53,6 +54,8 @@ static int runner(int argc, char *argv[]) msg_error_t errcode = MSG_parallel_task_execute_with_timeout(ptask, 1 /* timeout (in seconds)*/); xbt_assert(errcode == MSG_TIMEOUT, "Woops, this did not timeout as expected... Please report that bug."); MSG_task_destroy(ptask); + xbt_free(communication_amounts); + xbt_free(computation_amounts); XBT_INFO("Then, build a parallel task involving only computations and no communication (1 Gflop per node)"); computation_amounts = xbt_new0(double, hosts_count); @@ -61,6 +64,7 @@ static int runner(int argc, char *argv[]) ptask = MSG_parallel_task_create("parallel exec", hosts_count, hosts, computation_amounts, NULL/* no comm */, NULL); MSG_parallel_task_execute(ptask); MSG_task_destroy(ptask); + xbt_free(computation_amounts); XBT_INFO("Then, build a parallel task with no computation nor communication (synchro only)"); computation_amounts = xbt_new0(double, hosts_count); @@ -68,8 +72,10 @@ static int runner(int argc, char *argv[]) ptask = MSG_parallel_task_create("parallel sync", hosts_count, hosts, computation_amounts, communication_amounts, NULL); MSG_parallel_task_execute(ptask); MSG_task_destroy(ptask); + xbt_free(communication_amounts); + xbt_free(computation_amounts); - XBT_INFO("Finally, trick the ptask to do a 'remote execution', on host %s", MSG_host_get_name(hosts[1])); + XBT_INFO("Finally, trick the ptask to do a 'remote execution', on host %s", MSG_host_get_name(hosts[1])); computation_amounts = xbt_new0(double, 1); computation_amounts[0] = 1e9; // 1 Gflop msg_host_t *remote = xbt_new(msg_host_t,1); @@ -77,10 +83,11 @@ static int runner(int argc, char *argv[]) ptask = MSG_parallel_task_create("remote exec", 1, remote, computation_amounts, NULL/* no comm */, NULL); MSG_parallel_task_execute(ptask); MSG_task_destroy(ptask); - free(remote); + xbt_free(remote); + xbt_free(computation_amounts); XBT_INFO("Goodbye now!"); - free(hosts); + xbt_free(hosts); return 0; } diff --git a/examples/msg/process-startkilltime/process-startkilltime.c b/examples/msg/process-startkilltime/process-startkilltime.c index 6e12c39670..1c69571cd0 100644 --- a/examples/msg/process-startkilltime/process-startkilltime.c +++ b/examples/msg/process-startkilltime/process-startkilltime.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2016. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2017. 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. */ @@ -8,7 +8,8 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, "Messages specific for this msg example"); /* Executed on process termination*/ -static int my_onexit(void* ignored1, void *ignored2) { +static int my_onexit(void* XBT_ATTRIB_UNUSED ignored1, void* XBT_ATTRIB_UNUSED ignored2) +{ XBT_INFO("Exiting now (done sleeping or got killed)."); /* - Just display an informative message (see tesh file) */ return 0; } diff --git a/examples/msg/trace-link-user-variables/trace-link-user-variables.tesh b/examples/msg/trace-link-user-variables/trace-link-user-variables.tesh index 4c4b5f86dc..9cf74355ca 100644 --- a/examples/msg/trace-link-user-variables/trace-link-user-variables.tesh +++ b/examples/msg/trace-link-user-variables/trace-link-user-variables.tesh @@ -208,98 +208,98 @@ $ tail -n +3 simgrid.trace > 8 0 5 30 0.035083 > 8 0 4 31 498000000.000000 > 8 0 5 31 0.000015 -> 15 0 6 0 topology 19 0 -> 16 0 6 0 topology 20 0 -> 15 0 6 0 topology 15 1 -> 16 0 6 0 topology 9 1 -> 15 0 6 0 topology 27 2 -> 16 0 6 0 topology 18 2 -> 15 0 7 0 topology 5 3 -> 16 0 7 0 topology 24 3 +> 15 0 6 0 topology 12 0 +> 16 0 6 0 topology 16 0 +> 15 0 6 0 topology 9 1 +> 16 0 6 0 topology 16 1 +> 15 0 6 0 topology 16 2 +> 16 0 6 0 topology 14 2 +> 15 0 6 0 topology 21 3 +> 16 0 6 0 topology 19 3 > 15 0 6 0 topology 8 4 -> 16 0 6 0 topology 10 4 -> 15 0 6 0 topology 21 5 -> 16 0 6 0 topology 22 5 -> 15 0 7 0 topology 1 6 -> 16 0 7 0 topology 9 6 -> 15 0 6 0 topology 23 7 -> 16 0 6 0 topology 24 7 -> 15 0 7 0 topology 1 8 -> 16 0 7 0 topology 15 8 -> 15 0 7 0 topology 1 9 -> 16 0 7 0 topology 11 9 -> 15 0 6 0 topology 26 10 -> 16 0 6 0 topology 27 10 -> 15 0 7 0 topology 5 11 -> 16 0 7 0 topology 18 11 -> 15 0 8 0 topology 11 12 -> 16 0 8 0 topology 2 12 -> 15 0 6 0 topology 28 13 -> 16 0 6 0 topology 29 13 -> 15 0 6 0 topology 12 14 -> 16 0 6 0 topology 16 14 -> 15 0 6 0 topology 9 15 -> 16 0 6 0 topology 16 15 -> 15 0 6 0 topology 14 16 -> 16 0 6 0 topology 13 16 -> 15 0 6 0 topology 29 17 -> 16 0 6 0 topology 11 17 -> 15 0 7 0 topology 3 18 -> 16 0 7 0 topology 30 18 -> 15 0 6 0 topology 11 19 -> 16 0 6 0 topology 15 19 +> 16 0 6 0 topology 19 4 +> 15 0 6 0 topology 19 5 +> 16 0 6 0 topology 20 5 +> 15 0 6 0 topology 8 6 +> 16 0 6 0 topology 20 6 +> 15 0 6 0 topology 27 7 +> 16 0 6 0 topology 18 7 +> 15 0 7 0 topology 5 8 +> 16 0 7 0 topology 18 8 +> 15 0 7 0 topology 4 9 +> 16 0 7 0 topology 18 9 +> 15 0 7 0 topology 2 10 +> 16 0 7 0 topology 18 10 +> 15 0 6 0 topology 16 11 +> 16 0 6 0 topology 21 11 +> 15 0 6 0 topology 21 12 +> 16 0 6 0 topology 22 12 +> 15 0 6 0 topology 9 13 +> 16 0 6 0 topology 12 13 +> 15 0 6 0 topology 15 14 +> 16 0 6 0 topology 9 14 +> 15 0 7 0 topology 1 15 +> 16 0 7 0 topology 9 15 +> 15 0 6 0 topology 20 16 +> 16 0 6 0 topology 23 16 +> 15 0 6 0 topology 23 17 +> 16 0 6 0 topology 24 17 +> 15 0 7 0 topology 5 18 +> 16 0 7 0 topology 24 18 +> 15 0 7 0 topology 4 19 +> 16 0 7 0 topology 24 19 > 15 0 7 0 topology 2 20 > 16 0 7 0 topology 24 20 -> 15 0 8 0 topology 18 21 -> 16 0 8 0 topology 6 21 -> 15 0 8 0 topology 10 22 -> 16 0 8 0 topology 5 22 -> 15 0 6 0 topology 8 23 -> 16 0 6 0 topology 19 23 -> 15 0 6 0 topology 12 24 -> 16 0 6 0 topology 25 24 -> 15 0 7 0 topology 4 25 -> 16 0 7 0 topology 24 25 -> 15 0 6 0 topology 16 26 -> 16 0 6 0 topology 14 26 -> 15 0 8 0 topology 17 27 -> 16 0 8 0 topology 4 27 -> 15 0 6 0 topology 12 28 -> 16 0 6 0 topology 17 28 -> 15 0 6 0 topology 9 29 -> 16 0 6 0 topology 17 29 -> 15 0 6 0 topology 21 30 -> 16 0 6 0 topology 19 30 -> 15 0 6 0 topology 22 31 -> 16 0 6 0 topology 25 31 -> 15 0 8 0 topology 24 32 -> 16 0 8 0 topology 7 32 -> 15 0 7 0 topology 3 33 -> 16 0 7 0 topology 28 33 -> 15 0 6 0 topology 25 34 -> 16 0 6 0 topology 26 34 -> 15 0 6 0 topology 8 35 -> 16 0 6 0 topology 20 35 -> 15 0 8 0 topology 13 36 -> 16 0 8 0 topology 3 36 -> 15 0 7 0 topology 2 37 -> 16 0 7 0 topology 18 37 -> 15 0 6 0 topology 9 38 -> 16 0 6 0 topology 12 38 -> 15 0 6 0 topology 14 39 -> 16 0 6 0 topology 8 39 -> 15 0 6 0 topology 20 40 -> 16 0 6 0 topology 23 40 -> 15 0 7 0 topology 4 41 -> 16 0 7 0 topology 18 41 -> 15 0 6 0 topology 13 42 -> 16 0 6 0 topology 8 42 -> 15 0 6 0 topology 11 43 -> 16 0 6 0 topology 8 43 -> 15 0 6 0 topology 16 44 -> 16 0 6 0 topology 21 44 -> 15 0 6 0 topology 30 45 -> 16 0 6 0 topology 28 45 +> 15 0 6 0 topology 11 21 +> 16 0 6 0 topology 15 21 +> 15 0 7 0 topology 1 22 +> 16 0 7 0 topology 15 22 +> 15 0 6 0 topology 12 23 +> 16 0 6 0 topology 17 23 +> 15 0 6 0 topology 9 24 +> 16 0 6 0 topology 17 24 +> 15 0 6 0 topology 22 25 +> 16 0 6 0 topology 25 25 +> 15 0 6 0 topology 12 26 +> 16 0 6 0 topology 25 26 +> 15 0 6 0 topology 25 27 +> 16 0 6 0 topology 26 27 +> 15 0 6 0 topology 26 28 +> 16 0 6 0 topology 27 28 +> 15 0 6 0 topology 14 29 +> 16 0 6 0 topology 8 29 +> 15 0 6 0 topology 13 30 +> 16 0 6 0 topology 8 30 +> 15 0 6 0 topology 11 31 +> 16 0 6 0 topology 8 31 +> 15 0 6 0 topology 8 32 +> 16 0 6 0 topology 10 32 +> 15 0 6 0 topology 30 33 +> 16 0 6 0 topology 28 33 +> 15 0 7 0 topology 3 34 +> 16 0 7 0 topology 28 34 +> 15 0 6 0 topology 28 35 +> 16 0 6 0 topology 29 35 +> 15 0 7 0 topology 3 36 +> 16 0 7 0 topology 30 36 +> 15 0 6 0 topology 14 37 +> 16 0 6 0 topology 13 37 +> 15 0 6 0 topology 29 38 +> 16 0 6 0 topology 11 38 +> 15 0 7 0 topology 1 39 +> 16 0 7 0 topology 11 39 +> 15 0 8 0 topology 24 40 +> 16 0 8 0 topology 7 40 +> 15 0 8 0 topology 10 41 +> 16 0 8 0 topology 5 41 +> 15 0 8 0 topology 13 42 +> 16 0 8 0 topology 3 42 +> 15 0 8 0 topology 17 43 +> 16 0 8 0 topology 4 43 +> 15 0 8 0 topology 18 44 +> 16 0 8 0 topology 6 44 +> 15 0 8 0 topology 11 45 +> 16 0 8 0 topology 2 45 > 1 9 3 Link_Capacity "1 1 1" > 1 10 3 Link_Utilization "0.9 0.1 0.1" > 8 0 9 8 12.340000 diff --git a/examples/msg/trace-platform/trace-platform.tesh b/examples/msg/trace-platform/trace-platform.tesh index 6966242178..92cd632918 100644 --- a/examples/msg/trace-platform/trace-platform.tesh +++ b/examples/msg/trace-platform/trace-platform.tesh @@ -209,98 +209,98 @@ $ tail -n +3 trace_platform.trace > 8 0 5 30 0.035083 > 8 0 4 31 498000000.000000 > 8 0 5 31 0.000015 -> 15 0 6 0 topology 19 0 -> 16 0 6 0 topology 20 0 -> 15 0 6 0 topology 15 1 -> 16 0 6 0 topology 9 1 -> 15 0 6 0 topology 27 2 -> 16 0 6 0 topology 18 2 -> 15 0 7 0 topology 5 3 -> 16 0 7 0 topology 24 3 +> 15 0 6 0 topology 12 0 +> 16 0 6 0 topology 16 0 +> 15 0 6 0 topology 9 1 +> 16 0 6 0 topology 16 1 +> 15 0 6 0 topology 16 2 +> 16 0 6 0 topology 14 2 +> 15 0 6 0 topology 21 3 +> 16 0 6 0 topology 19 3 > 15 0 6 0 topology 8 4 -> 16 0 6 0 topology 10 4 -> 15 0 6 0 topology 21 5 -> 16 0 6 0 topology 22 5 -> 15 0 7 0 topology 1 6 -> 16 0 7 0 topology 9 6 -> 15 0 6 0 topology 23 7 -> 16 0 6 0 topology 24 7 -> 15 0 7 0 topology 1 8 -> 16 0 7 0 topology 15 8 -> 15 0 7 0 topology 1 9 -> 16 0 7 0 topology 11 9 -> 15 0 6 0 topology 26 10 -> 16 0 6 0 topology 27 10 -> 15 0 7 0 topology 5 11 -> 16 0 7 0 topology 18 11 -> 15 0 8 0 topology 11 12 -> 16 0 8 0 topology 2 12 -> 15 0 6 0 topology 28 13 -> 16 0 6 0 topology 29 13 -> 15 0 6 0 topology 12 14 -> 16 0 6 0 topology 16 14 -> 15 0 6 0 topology 9 15 -> 16 0 6 0 topology 16 15 -> 15 0 6 0 topology 14 16 -> 16 0 6 0 topology 13 16 -> 15 0 6 0 topology 29 17 -> 16 0 6 0 topology 11 17 -> 15 0 7 0 topology 3 18 -> 16 0 7 0 topology 30 18 -> 15 0 6 0 topology 11 19 -> 16 0 6 0 topology 15 19 +> 16 0 6 0 topology 19 4 +> 15 0 6 0 topology 19 5 +> 16 0 6 0 topology 20 5 +> 15 0 6 0 topology 8 6 +> 16 0 6 0 topology 20 6 +> 15 0 6 0 topology 27 7 +> 16 0 6 0 topology 18 7 +> 15 0 7 0 topology 5 8 +> 16 0 7 0 topology 18 8 +> 15 0 7 0 topology 4 9 +> 16 0 7 0 topology 18 9 +> 15 0 7 0 topology 2 10 +> 16 0 7 0 topology 18 10 +> 15 0 6 0 topology 16 11 +> 16 0 6 0 topology 21 11 +> 15 0 6 0 topology 21 12 +> 16 0 6 0 topology 22 12 +> 15 0 6 0 topology 9 13 +> 16 0 6 0 topology 12 13 +> 15 0 6 0 topology 15 14 +> 16 0 6 0 topology 9 14 +> 15 0 7 0 topology 1 15 +> 16 0 7 0 topology 9 15 +> 15 0 6 0 topology 20 16 +> 16 0 6 0 topology 23 16 +> 15 0 6 0 topology 23 17 +> 16 0 6 0 topology 24 17 +> 15 0 7 0 topology 5 18 +> 16 0 7 0 topology 24 18 +> 15 0 7 0 topology 4 19 +> 16 0 7 0 topology 24 19 > 15 0 7 0 topology 2 20 > 16 0 7 0 topology 24 20 -> 15 0 8 0 topology 18 21 -> 16 0 8 0 topology 6 21 -> 15 0 8 0 topology 10 22 -> 16 0 8 0 topology 5 22 -> 15 0 6 0 topology 8 23 -> 16 0 6 0 topology 19 23 -> 15 0 6 0 topology 12 24 -> 16 0 6 0 topology 25 24 -> 15 0 7 0 topology 4 25 -> 16 0 7 0 topology 24 25 -> 15 0 6 0 topology 16 26 -> 16 0 6 0 topology 14 26 -> 15 0 8 0 topology 17 27 -> 16 0 8 0 topology 4 27 -> 15 0 6 0 topology 12 28 -> 16 0 6 0 topology 17 28 -> 15 0 6 0 topology 9 29 -> 16 0 6 0 topology 17 29 -> 15 0 6 0 topology 21 30 -> 16 0 6 0 topology 19 30 -> 15 0 6 0 topology 22 31 -> 16 0 6 0 topology 25 31 -> 15 0 8 0 topology 24 32 -> 16 0 8 0 topology 7 32 -> 15 0 7 0 topology 3 33 -> 16 0 7 0 topology 28 33 -> 15 0 6 0 topology 25 34 -> 16 0 6 0 topology 26 34 -> 15 0 6 0 topology 8 35 -> 16 0 6 0 topology 20 35 -> 15 0 8 0 topology 13 36 -> 16 0 8 0 topology 3 36 -> 15 0 7 0 topology 2 37 -> 16 0 7 0 topology 18 37 -> 15 0 6 0 topology 9 38 -> 16 0 6 0 topology 12 38 -> 15 0 6 0 topology 14 39 -> 16 0 6 0 topology 8 39 -> 15 0 6 0 topology 20 40 -> 16 0 6 0 topology 23 40 -> 15 0 7 0 topology 4 41 -> 16 0 7 0 topology 18 41 -> 15 0 6 0 topology 13 42 -> 16 0 6 0 topology 8 42 -> 15 0 6 0 topology 11 43 -> 16 0 6 0 topology 8 43 -> 15 0 6 0 topology 16 44 -> 16 0 6 0 topology 21 44 -> 15 0 6 0 topology 30 45 -> 16 0 6 0 topology 28 45 +> 15 0 6 0 topology 11 21 +> 16 0 6 0 topology 15 21 +> 15 0 7 0 topology 1 22 +> 16 0 7 0 topology 15 22 +> 15 0 6 0 topology 12 23 +> 16 0 6 0 topology 17 23 +> 15 0 6 0 topology 9 24 +> 16 0 6 0 topology 17 24 +> 15 0 6 0 topology 22 25 +> 16 0 6 0 topology 25 25 +> 15 0 6 0 topology 12 26 +> 16 0 6 0 topology 25 26 +> 15 0 6 0 topology 25 27 +> 16 0 6 0 topology 26 27 +> 15 0 6 0 topology 26 28 +> 16 0 6 0 topology 27 28 +> 15 0 6 0 topology 14 29 +> 16 0 6 0 topology 8 29 +> 15 0 6 0 topology 13 30 +> 16 0 6 0 topology 8 30 +> 15 0 6 0 topology 11 31 +> 16 0 6 0 topology 8 31 +> 15 0 6 0 topology 8 32 +> 16 0 6 0 topology 10 32 +> 15 0 6 0 topology 30 33 +> 16 0 6 0 topology 28 33 +> 15 0 7 0 topology 3 34 +> 16 0 7 0 topology 28 34 +> 15 0 6 0 topology 28 35 +> 16 0 6 0 topology 29 35 +> 15 0 7 0 topology 3 36 +> 16 0 7 0 topology 30 36 +> 15 0 6 0 topology 14 37 +> 16 0 6 0 topology 13 37 +> 15 0 6 0 topology 29 38 +> 16 0 6 0 topology 11 38 +> 15 0 7 0 topology 1 39 +> 16 0 7 0 topology 11 39 +> 15 0 8 0 topology 24 40 +> 16 0 8 0 topology 7 40 +> 15 0 8 0 topology 10 41 +> 16 0 8 0 topology 5 41 +> 15 0 8 0 topology 13 42 +> 16 0 8 0 topology 3 42 +> 15 0 8 0 topology 17 43 +> 16 0 8 0 topology 4 43 +> 15 0 8 0 topology 18 44 +> 16 0 8 0 topology 6 44 +> 15 0 8 0 topology 11 45 +> 16 0 8 0 topology 2 45 > 7 0 3 16 > 7 0 3 14 > 7 0 3 19 @@ -5265,21 +5265,21 @@ $ tail -n +3 trace_platform.trace > 6 0 4795 6 4390 "gw_AS_toulouse" > 6 0 4796 12 4795 "gw_toulouse" > 6 0 4797 3 4390 "link_gw_toulouse" -> 4 20 1 3 2 L1-LINK3-ROUTER2 -> 4 21 1 3 3 L1-LINK3-LINK3 -> 4 22 1 2 3 L1-ROUTER2-LINK3 +> 4 20 1 3 3 L1-LINK3-LINK3 +> 4 21 1 2 3 L1-ROUTER2-LINK3 +> 4 22 1 3 2 L1-LINK3-ROUTER2 > 4 23 6 9 9 L2-LINK9-LINK9 -> 4 24 6 7 9 L2-HOST7-LINK9 -> 4 25 6 12 9 L2-ROUTER12-LINK9 +> 4 24 6 12 9 L2-ROUTER12-LINK9 +> 4 25 6 7 9 L2-HOST7-LINK9 > 4 26 1 3 12 L1-LINK3-ROUTER12 > 4 27 1 12 3 L1-ROUTER12-LINK3 > 4 28 13 16 16 L3-LINK16-LINK16 -> 4 29 13 14 16 L3-HOST14-LINK16 -> 4 30 13 19 16 L3-ROUTER19-LINK16 +> 4 29 13 19 16 L3-ROUTER19-LINK16 +> 4 30 13 14 16 L3-HOST14-LINK16 > 4 31 6 9 19 L2-LINK9-ROUTER19 > 4 32 6 19 9 L2-ROUTER19-LINK9 -> 4 33 1 19 3 L1-ROUTER19-LINK3 -> 4 34 1 3 19 L1-LINK3-ROUTER19 +> 4 33 1 3 19 L1-LINK3-ROUTER19 +> 4 34 1 19 3 L1-ROUTER19-LINK3 > 4 35 0 3 3 0-LINK3-LINK3 > 4 36 0 2 3 0-ROUTER2-LINK3 > 8 0 4 12 1250000000.000000 @@ -13094,5386 +13094,5386 @@ $ tail -n +3 trace_platform.trace > 8 0 5 4794 0.000100 > 8 0 4 4797 1250000000.000000 > 8 0 5 4797 0.000100 -> 15 0 20 1 topology 17 0 -> 16 0 20 1 topology 8 0 -> 15 0 20 1 topology 18 1 -> 16 0 20 1 topology 9 1 -> 15 0 21 1 topology 15 2 -> 16 0 21 1 topology 18 2 -> 15 0 22 1 topology 3 3 -> 16 0 22 1 topology 15 3 -> 15 0 22 1 topology 2 4 -> 16 0 22 1 topology 12 4 -> 15 0 21 1 topology 14 5 -> 16 0 21 1 topology 15 5 -> 15 0 21 1 topology 15 6 -> 16 0 21 1 topology 17 6 -> 15 0 21 1 topology 12 7 -> 16 0 21 1 topology 14 7 -> 15 0 21 1 topology 16 8 -> 16 0 21 1 topology 18 8 -> 15 0 22 1 topology 6 9 -> 16 0 22 1 topology 16 9 -> 15 0 22 1 topology 9 10 -> 16 0 22 1 topology 19 10 -> 15 0 20 1 topology 15 11 -> 16 0 20 1 topology 6 11 -> 15 0 21 1 topology 12 12 -> 16 0 21 1 topology 13 12 -> 15 0 22 1 topology 3 13 -> 16 0 22 1 topology 14 13 -> 15 0 21 1 topology 16 14 -> 16 0 21 1 topology 17 14 -> 15 0 21 1 topology 12 15 -> 16 0 21 1 topology 15 15 -> 15 0 20 1 topology 14 16 -> 16 0 20 1 topology 5 16 -> 15 0 22 1 topology 3 17 -> 16 0 22 1 topology 13 17 -> 15 0 21 1 topology 15 18 -> 16 0 21 1 topology 16 18 -> 15 0 22 1 topology 9 19 -> 16 0 22 1 topology 20 19 -> 15 0 20 1 topology 20 20 -> 16 0 20 1 topology 10 20 -> 15 0 21 1 topology 18 21 -> 16 0 21 1 topology 19 21 -> 15 0 21 1 topology 13 22 -> 16 0 21 1 topology 14 22 -> 15 0 20 1 topology 19 23 -> 16 0 20 1 topology 11 23 -> 15 0 20 1 topology 12 24 -> 16 0 20 1 topology 3 24 -> 15 0 20 1 topology 16 25 -> 16 0 20 1 topology 7 25 -> 15 0 21 1 topology 13 26 -> 16 0 21 1 topology 15 26 -> 15 0 21 1 topology 18 27 -> 16 0 21 1 topology 20 27 -> 15 0 21 1 topology 20 28 -> 16 0 21 1 topology 19 28 -> 15 0 22 1 topology 6 29 -> 16 0 22 1 topology 18 29 -> 15 0 21 1 topology 17 30 -> 16 0 21 1 topology 18 30 -> 15 0 20 1 topology 13 31 -> 16 0 20 1 topology 4 31 -> 15 0 22 1 topology 6 32 -> 16 0 22 1 topology 17 32 -> 15 0 23 22 topology 96 33 +> 15 0 20 1 topology 15 0 +> 16 0 20 1 topology 16 0 +> 15 0 21 1 topology 6 1 +> 16 0 21 1 topology 16 1 +> 15 0 21 1 topology 2 2 +> 16 0 21 1 topology 12 2 +> 15 0 20 1 topology 16 3 +> 16 0 20 1 topology 17 3 +> 15 0 20 1 topology 15 4 +> 16 0 20 1 topology 17 4 +> 15 0 21 1 topology 6 5 +> 16 0 21 1 topology 17 5 +> 15 0 20 1 topology 16 6 +> 16 0 20 1 topology 18 6 +> 15 0 20 1 topology 17 7 +> 16 0 20 1 topology 18 7 +> 15 0 20 1 topology 15 8 +> 16 0 20 1 topology 18 8 +> 15 0 21 1 topology 6 9 +> 16 0 21 1 topology 18 9 +> 15 0 20 1 topology 18 10 +> 16 0 20 1 topology 19 10 +> 15 0 20 1 topology 20 11 +> 16 0 20 1 topology 19 11 +> 15 0 21 1 topology 9 12 +> 16 0 21 1 topology 19 12 +> 15 0 20 1 topology 18 13 +> 16 0 20 1 topology 20 13 +> 15 0 21 1 topology 9 14 +> 16 0 21 1 topology 20 14 +> 15 0 20 1 topology 12 15 +> 16 0 20 1 topology 15 15 +> 15 0 20 1 topology 13 16 +> 16 0 20 1 topology 15 16 +> 15 0 20 1 topology 14 17 +> 16 0 20 1 topology 15 17 +> 15 0 21 1 topology 3 18 +> 16 0 21 1 topology 15 18 +> 15 0 20 1 topology 12 19 +> 16 0 20 1 topology 13 19 +> 15 0 21 1 topology 3 20 +> 16 0 21 1 topology 13 20 +> 15 0 20 1 topology 12 21 +> 16 0 20 1 topology 14 21 +> 15 0 20 1 topology 13 22 +> 16 0 20 1 topology 14 22 +> 15 0 21 1 topology 3 23 +> 16 0 21 1 topology 14 23 +> 15 0 22 1 topology 16 24 +> 16 0 22 1 topology 7 24 +> 15 0 22 1 topology 17 25 +> 16 0 22 1 topology 8 25 +> 15 0 22 1 topology 15 26 +> 16 0 22 1 topology 6 26 +> 15 0 22 1 topology 18 27 +> 16 0 22 1 topology 9 27 +> 15 0 22 1 topology 13 28 +> 16 0 22 1 topology 4 28 +> 15 0 22 1 topology 12 29 +> 16 0 22 1 topology 3 29 +> 15 0 22 1 topology 14 30 +> 16 0 22 1 topology 5 30 +> 15 0 22 1 topology 19 31 +> 16 0 22 1 topology 11 31 +> 15 0 22 1 topology 20 32 +> 16 0 22 1 topology 10 32 +> 15 0 23 22 topology 52 33 > 16 0 23 22 topology 177 33 -> 15 0 24 22 topology 32 34 -> 16 0 24 22 topology 34 34 -> 15 0 24 22 topology 113 35 -> 16 0 24 22 topology 115 35 -> 15 0 23 22 topology 156 36 +> 15 0 23 22 topology 51 34 +> 16 0 23 22 topology 177 34 +> 15 0 23 22 topology 55 35 +> 16 0 23 22 topology 177 35 +> 15 0 23 22 topology 54 36 > 16 0 23 22 topology 177 36 -> 15 0 24 22 topology 62 37 -> 16 0 24 22 topology 64 37 -> 15 0 23 22 topology 78 38 +> 15 0 23 22 topology 58 37 +> 16 0 23 22 topology 177 37 +> 15 0 23 22 topology 57 38 > 16 0 23 22 topology 177 38 -> 15 0 24 22 topology 170 39 -> 16 0 24 22 topology 172 39 -> 15 0 23 22 topology 49 40 +> 15 0 23 22 topology 61 39 +> 16 0 23 22 topology 177 39 +> 15 0 23 22 topology 60 40 > 16 0 23 22 topology 177 40 -> 15 0 24 22 topology 119 41 -> 16 0 24 22 topology 121 41 -> 15 0 23 22 topology 138 42 +> 15 0 23 22 topology 64 41 +> 16 0 23 22 topology 177 41 +> 15 0 23 22 topology 63 42 > 16 0 23 22 topology 177 42 -> 15 0 24 22 topology 68 43 -> 16 0 24 22 topology 70 43 -> 15 0 24 22 topology 125 44 -> 16 0 24 22 topology 127 44 -> 15 0 23 22 topology 27 45 +> 15 0 23 22 topology 67 43 +> 16 0 23 22 topology 177 43 +> 15 0 23 22 topology 66 44 +> 16 0 23 22 topology 177 44 +> 15 0 23 22 topology 70 45 > 16 0 23 22 topology 177 45 -> 15 0 24 22 topology 74 46 -> 16 0 24 22 topology 76 46 -> 15 0 24 22 topology 131 47 -> 16 0 24 22 topology 133 47 -> 15 0 23 22 topology 115 48 +> 15 0 23 22 topology 69 46 +> 16 0 23 22 topology 177 46 +> 15 0 23 22 topology 73 47 +> 16 0 23 22 topology 177 47 +> 15 0 23 22 topology 72 48 > 16 0 23 22 topology 177 48 -> 15 0 24 22 topology 137 49 -> 16 0 24 22 topology 139 49 -> 15 0 23 22 topology 67 50 +> 15 0 23 22 topology 76 49 +> 16 0 23 22 topology 177 49 +> 15 0 23 22 topology 75 50 > 16 0 23 22 topology 177 50 -> 15 0 23 22 topology 151 51 +> 15 0 23 22 topology 79 51 > 16 0 23 22 topology 177 51 -> 15 0 23 22 topology 103 52 +> 15 0 23 22 topology 78 52 > 16 0 23 22 topology 177 52 -> 15 0 24 22 topology 44 53 -> 16 0 24 22 topology 45 53 -> 15 0 23 22 topology 139 54 +> 15 0 23 22 topology 25 53 +> 16 0 23 22 topology 177 53 +> 15 0 23 22 topology 24 54 > 16 0 23 22 topology 177 54 -> 15 0 23 22 topology 81 55 +> 15 0 23 22 topology 82 55 > 16 0 23 22 topology 177 55 -> 15 0 23 22 topology 141 56 +> 15 0 23 22 topology 81 56 > 16 0 23 22 topology 177 56 -> 15 0 23 22 topology 63 57 +> 15 0 23 22 topology 85 57 > 16 0 23 22 topology 177 57 -> 15 0 23 22 topology 123 58 +> 15 0 23 22 topology 84 58 > 16 0 23 22 topology 177 58 -> 15 0 23 22 topology 40 59 +> 15 0 23 22 topology 88 59 > 16 0 23 22 topology 177 59 -> 15 0 23 22 topology 105 60 +> 15 0 23 22 topology 87 60 > 16 0 23 22 topology 177 60 -> 15 0 23 22 topology 165 61 +> 15 0 23 22 topology 91 61 > 16 0 23 22 topology 177 61 -> 15 0 24 22 topology 41 62 -> 16 0 24 22 topology 43 62 -> 15 0 24 22 topology 23 63 -> 16 0 24 22 topology 24 63 -> 15 0 24 22 topology 53 64 -> 16 0 24 22 topology 54 64 -> 15 0 23 22 topology 36 65 +> 15 0 23 22 topology 90 62 +> 16 0 23 22 topology 177 62 +> 15 0 23 22 topology 94 63 +> 16 0 23 22 topology 177 63 +> 15 0 23 22 topology 93 64 +> 16 0 23 22 topology 177 64 +> 15 0 23 22 topology 97 65 > 16 0 23 22 topology 177 65 -> 15 0 24 22 topology 113 66 -> 16 0 24 22 topology 114 66 -> 15 0 23 22 topology 58 67 +> 15 0 23 22 topology 96 66 +> 16 0 23 22 topology 177 66 +> 15 0 23 22 topology 100 67 > 16 0 23 22 topology 177 67 -> 15 0 24 22 topology 89 68 -> 16 0 24 22 topology 90 68 -> 15 0 23 22 topology 142 69 +> 15 0 23 22 topology 99 68 +> 16 0 23 22 topology 177 68 +> 15 0 23 22 topology 103 69 > 16 0 23 22 topology 177 69 -> 15 0 24 22 topology 65 70 -> 16 0 24 22 topology 66 70 -> 15 0 23 22 topology 94 71 +> 15 0 23 22 topology 102 70 +> 16 0 23 22 topology 177 70 +> 15 0 23 22 topology 106 71 > 16 0 23 22 topology 177 71 -> 15 0 24 22 topology 173 72 -> 16 0 24 22 topology 174 72 -> 15 0 24 22 topology 149 73 -> 16 0 24 22 topology 150 73 -> 15 0 23 22 topology 130 74 +> 15 0 23 22 topology 105 72 +> 16 0 23 22 topology 177 72 +> 15 0 23 22 topology 109 73 +> 16 0 23 22 topology 177 73 +> 15 0 23 22 topology 108 74 > 16 0 23 22 topology 177 74 -> 15 0 24 22 topology 125 75 -> 16 0 24 22 topology 126 75 -> 15 0 24 22 topology 47 76 -> 16 0 24 22 topology 48 76 -> 15 0 24 22 topology 101 77 -> 16 0 24 22 topology 102 77 -> 15 0 23 22 topology 166 78 +> 15 0 23 22 topology 28 75 +> 16 0 23 22 topology 177 75 +> 15 0 23 22 topology 27 76 +> 16 0 23 22 topology 177 76 +> 15 0 23 22 topology 112 77 +> 16 0 23 22 topology 177 77 +> 15 0 23 22 topology 111 78 > 16 0 23 22 topology 177 78 -> 15 0 24 22 topology 77 79 -> 16 0 24 22 topology 78 79 -> 15 0 24 22 topology 161 80 -> 16 0 24 22 topology 162 80 -> 15 0 24 22 topology 26 81 -> 16 0 24 22 topology 28 81 -> 15 0 23 22 topology 90 82 +> 15 0 23 22 topology 115 79 +> 16 0 23 22 topology 177 79 +> 15 0 23 22 topology 114 80 +> 16 0 23 22 topology 177 80 +> 15 0 23 22 topology 118 81 +> 16 0 23 22 topology 177 81 +> 15 0 23 22 topology 117 82 > 16 0 23 22 topology 177 82 -> 15 0 24 22 topology 137 83 -> 16 0 24 22 topology 138 83 -> 15 0 23 22 topology 31 84 +> 15 0 23 22 topology 121 83 +> 16 0 23 22 topology 177 83 +> 15 0 23 22 topology 120 84 > 16 0 23 22 topology 177 84 -> 15 0 24 22 topology 83 85 -> 16 0 24 22 topology 85 85 -> 15 0 23 22 topology 150 86 +> 15 0 23 22 topology 124 85 +> 16 0 23 22 topology 177 85 +> 15 0 23 22 topology 123 86 > 16 0 23 22 topology 177 86 -> 15 0 23 22 topology 72 87 +> 15 0 23 22 topology 127 87 > 16 0 23 22 topology 177 87 -> 15 0 24 22 topology 140 88 -> 16 0 24 22 topology 142 88 -> 15 0 24 22 topology 89 89 -> 16 0 24 22 topology 91 89 -> 15 0 23 22 topology 132 90 +> 15 0 23 22 topology 126 88 +> 16 0 23 22 topology 177 88 +> 15 0 23 22 topology 130 89 +> 16 0 23 22 topology 177 89 +> 15 0 23 22 topology 129 90 > 16 0 23 22 topology 177 90 -> 15 0 24 22 topology 146 91 -> 16 0 24 22 topology 148 91 -> 15 0 24 22 topology 95 92 -> 16 0 24 22 topology 97 92 -> 15 0 24 22 topology 152 93 -> 16 0 24 22 topology 154 93 -> 15 0 24 22 topology 26 94 -> 16 0 24 22 topology 27 94 -> 15 0 24 22 topology 101 95 -> 16 0 24 22 topology 103 95 -> 15 0 24 22 topology 158 96 -> 16 0 24 22 topology 160 96 -> 15 0 23 22 topology 85 97 +> 15 0 23 22 topology 133 91 +> 16 0 23 22 topology 177 91 +> 15 0 23 22 topology 132 92 +> 16 0 23 22 topology 177 92 +> 15 0 23 22 topology 136 93 +> 16 0 23 22 topology 177 93 +> 15 0 23 22 topology 135 94 +> 16 0 23 22 topology 177 94 +> 15 0 23 22 topology 139 95 +> 16 0 23 22 topology 177 95 +> 15 0 23 22 topology 138 96 +> 16 0 23 22 topology 177 96 +> 15 0 23 22 topology 31 97 > 16 0 23 22 topology 177 97 -> 15 0 24 22 topology 107 98 -> 16 0 24 22 topology 109 98 -> 15 0 23 22 topology 45 99 +> 15 0 23 22 topology 30 98 +> 16 0 23 22 topology 177 98 +> 15 0 23 22 topology 142 99 > 16 0 23 22 topology 177 99 -> 15 0 24 22 topology 164 100 -> 16 0 24 22 topology 166 100 -> 15 0 23 22 topology 121 101 +> 15 0 23 22 topology 141 100 +> 16 0 23 22 topology 177 100 +> 15 0 23 22 topology 145 101 > 16 0 23 22 topology 177 101 -> 15 0 23 22 topology 73 102 +> 15 0 23 22 topology 144 102 > 16 0 23 22 topology 177 102 -> 15 0 23 22 topology 157 103 +> 15 0 23 22 topology 148 103 > 16 0 23 22 topology 177 103 -> 15 0 23 22 topology 109 104 +> 15 0 23 22 topology 147 104 > 16 0 23 22 topology 177 104 -> 15 0 23 22 topology 57 105 +> 15 0 23 22 topology 151 105 > 16 0 23 22 topology 177 105 -> 15 0 23 22 topology 117 106 +> 15 0 23 22 topology 150 106 > 16 0 23 22 topology 177 106 -> 15 0 23 22 topology 99 107 +> 15 0 23 22 topology 154 107 > 16 0 23 22 topology 177 107 -> 15 0 24 22 topology 35 108 -> 16 0 24 22 topology 37 108 -> 15 0 23 22 topology 159 109 +> 15 0 23 22 topology 153 108 +> 16 0 23 22 topology 177 108 +> 15 0 23 22 topology 157 109 > 16 0 23 22 topology 177 109 -> 15 0 23 22 topology 46 110 +> 15 0 23 22 topology 156 110 > 16 0 23 22 topology 177 110 -> 15 0 24 22 topology 80 111 -> 16 0 24 22 topology 81 111 -> 15 0 24 22 topology 29 112 -> 16 0 24 22 topology 30 112 -> 15 0 23 22 topology 30 113 +> 15 0 23 22 topology 160 111 +> 16 0 23 22 topology 177 111 +> 15 0 23 22 topology 159 112 +> 16 0 23 22 topology 177 112 +> 15 0 23 22 topology 163 113 > 16 0 23 22 topology 177 113 -> 15 0 24 22 topology 56 114 -> 16 0 24 22 topology 57 114 -> 15 0 24 22 topology 140 115 -> 16 0 24 22 topology 141 115 -> 15 0 23 22 topology 112 116 +> 15 0 23 22 topology 162 114 +> 16 0 23 22 topology 177 114 +> 15 0 23 22 topology 166 115 +> 16 0 23 22 topology 177 115 +> 15 0 23 22 topology 165 116 > 16 0 23 22 topology 177 116 -> 15 0 24 22 topology 116 117 -> 16 0 24 22 topology 117 117 -> 15 0 23 22 topology 64 118 +> 15 0 23 22 topology 169 117 +> 16 0 23 22 topology 177 117 +> 15 0 23 22 topology 168 118 > 16 0 23 22 topology 177 118 -> 15 0 24 22 topology 92 119 -> 16 0 24 22 topology 93 119 -> 15 0 23 22 topology 148 120 +> 15 0 23 22 topology 34 119 +> 16 0 23 22 topology 177 119 +> 15 0 23 22 topology 33 120 > 16 0 23 22 topology 177 120 -> 15 0 24 22 topology 68 121 -> 16 0 24 22 topology 69 121 -> 15 0 23 22 topology 100 122 +> 15 0 23 22 topology 172 121 +> 16 0 23 22 topology 177 121 +> 15 0 23 22 topology 171 122 > 16 0 23 22 topology 177 122 -> 15 0 24 22 topology 152 123 -> 16 0 24 22 topology 153 123 -> 15 0 23 22 topology 136 124 +> 15 0 23 22 topology 175 123 +> 16 0 23 22 topology 177 123 +> 15 0 23 22 topology 174 124 > 16 0 23 22 topology 177 124 -> 15 0 24 22 topology 128 125 -> 16 0 24 22 topology 129 125 -> 15 0 24 22 topology 104 126 -> 16 0 24 22 topology 105 126 -> 15 0 23 22 topology 84 127 +> 15 0 23 22 topology 37 125 +> 16 0 23 22 topology 177 125 +> 15 0 23 22 topology 36 126 +> 16 0 23 22 topology 177 126 +> 15 0 23 22 topology 40 127 > 16 0 23 22 topology 177 127 -> 15 0 24 22 topology 53 128 -> 16 0 24 22 topology 55 128 -> 15 0 23 22 topology 144 129 +> 15 0 23 22 topology 39 128 +> 16 0 23 22 topology 177 128 +> 15 0 23 22 topology 43 129 > 16 0 23 22 topology 177 129 -> 15 0 24 22 topology 164 130 -> 16 0 24 22 topology 165 130 -> 15 0 23 22 topology 66 131 +> 15 0 23 22 topology 42 130 +> 16 0 23 22 topology 177 130 +> 15 0 23 22 topology 46 131 > 16 0 23 22 topology 177 131 -> 15 0 24 22 topology 110 132 -> 16 0 24 22 topology 112 132 -> 15 0 23 22 topology 126 133 +> 15 0 23 22 topology 45 132 +> 16 0 23 22 topology 177 132 +> 15 0 23 22 topology 49 133 > 16 0 23 22 topology 177 133 -> 15 0 24 22 topology 59 134 -> 16 0 24 22 topology 61 134 -> 15 0 23 22 topology 37 135 -> 16 0 23 22 topology 177 135 -> 15 0 24 22 topology 116 136 -> 16 0 24 22 topology 118 136 -> 15 0 23 22 topology 108 137 -> 16 0 23 22 topology 177 137 -> 15 0 24 22 topology 65 138 -> 16 0 24 22 topology 67 138 -> 15 0 24 22 topology 173 139 -> 16 0 24 22 topology 175 139 -> 15 0 23 22 topology 168 140 -> 16 0 23 22 topology 177 140 -> 15 0 24 22 topology 122 141 -> 16 0 24 22 topology 124 141 -> 15 0 24 22 topology 71 142 -> 16 0 24 22 topology 73 142 -> 15 0 24 22 topology 44 143 -> 16 0 24 22 topology 46 143 -> 15 0 24 22 topology 128 144 -> 16 0 24 22 topology 130 144 -> 15 0 24 22 topology 77 145 -> 16 0 24 22 topology 79 145 -> 15 0 23 22 topology 55 146 -> 16 0 23 22 topology 177 146 -> 15 0 24 22 topology 32 147 -> 16 0 24 22 topology 33 147 -> 15 0 24 22 topology 134 148 -> 16 0 24 22 topology 136 148 -> 15 0 23 22 topology 39 149 -> 16 0 23 22 topology 177 149 -> 15 0 23 22 topology 91 150 -> 16 0 23 22 topology 177 150 -> 15 0 25 22 topology 176 151 -> 16 0 25 22 topology 177 151 -> 15 0 23 22 topology 175 152 -> 16 0 23 22 topology 177 152 -> 15 0 23 22 topology 127 153 -> 16 0 23 22 topology 177 153 -> 15 0 23 22 topology 79 154 -> 16 0 23 22 topology 177 154 -> 15 0 23 22 topology 163 155 -> 16 0 23 22 topology 177 155 -> 15 0 23 22 topology 51 156 -> 16 0 23 22 topology 177 156 -> 15 0 23 22 topology 111 157 -> 16 0 23 22 topology 177 157 -> 15 0 23 22 topology 28 158 -> 16 0 23 22 topology 177 158 -> 15 0 23 22 topology 171 159 -> 16 0 23 22 topology 177 159 -> 15 0 23 22 topology 93 160 -> 16 0 23 22 topology 177 160 -> 15 0 24 22 topology 29 161 -> 16 0 24 22 topology 31 161 -> 15 0 23 22 topology 153 162 -> 16 0 23 22 topology 177 162 -> 15 0 23 22 topology 75 163 -> 16 0 23 22 topology 177 163 -> 15 0 23 22 topology 135 164 -> 16 0 23 22 topology 177 164 -> 15 0 23 22 topology 24 165 -> 16 0 23 22 topology 177 165 -> 15 0 24 22 topology 83 166 -> 16 0 24 22 topology 84 166 -> 15 0 23 22 topology 82 167 -> 16 0 23 22 topology 177 167 -> 15 0 24 22 topology 59 168 -> 16 0 24 22 topology 60 168 -> 15 0 24 22 topology 143 169 -> 16 0 24 22 topology 144 169 -> 15 0 24 22 topology 35 170 -> 16 0 24 22 topology 36 170 -> 15 0 23 22 topology 118 171 -> 16 0 23 22 topology 177 171 -> 15 0 24 22 topology 119 172 -> 16 0 24 22 topology 120 172 -> 15 0 23 22 topology 48 173 -> 16 0 23 22 topology 177 173 -> 15 0 23 22 topology 70 174 -> 16 0 23 22 topology 177 174 -> 15 0 23 22 topology 154 175 -> 16 0 23 22 topology 177 175 -> 15 0 24 22 topology 95 176 -> 16 0 24 22 topology 96 176 -> 15 0 23 22 topology 106 177 -> 16 0 23 22 topology 177 177 -> 15 0 24 22 topology 71 178 -> 16 0 24 22 topology 72 178 -> 15 0 24 22 topology 155 179 -> 16 0 24 22 topology 156 179 -> 15 0 24 22 topology 131 180 -> 16 0 24 22 topology 132 180 -> 15 0 24 22 topology 107 181 -> 16 0 24 22 topology 108 181 -> 15 0 24 22 topology 80 182 -> 16 0 24 22 topology 82 182 -> 15 0 23 22 topology 60 183 -> 16 0 23 22 topology 177 183 -> 15 0 23 22 topology 120 184 -> 16 0 23 22 topology 177 184 -> 15 0 24 22 topology 167 185 -> 16 0 24 22 topology 168 185 -> 15 0 24 22 topology 86 186 -> 16 0 24 22 topology 88 186 -> 15 0 23 22 topology 102 187 -> 16 0 23 22 topology 177 187 -> 15 0 24 22 topology 143 188 -> 16 0 24 22 topology 145 188 -> 15 0 23 22 topology 43 189 -> 16 0 23 22 topology 177 189 -> 15 0 23 22 topology 162 190 -> 16 0 23 22 topology 177 190 -> 15 0 24 22 topology 92 191 -> 16 0 24 22 topology 94 191 -> 15 0 24 22 topology 38 192 -> 16 0 24 22 topology 40 192 -> 15 0 24 22 topology 149 193 -> 16 0 24 22 topology 151 193 -> 15 0 24 22 topology 98 194 -> 16 0 24 22 topology 100 194 -> 15 0 24 22 topology 155 195 -> 16 0 24 22 topology 157 195 -> 15 0 24 22 topology 104 196 -> 16 0 24 22 topology 106 196 -> 15 0 23 22 topology 33 197 -> 16 0 23 22 topology 177 197 -> 15 0 24 22 topology 161 198 -> 16 0 24 22 topology 163 198 -> 15 0 23 22 topology 61 199 -> 16 0 23 22 topology 177 199 -> 15 0 23 22 topology 145 200 -> 16 0 23 22 topology 177 200 -> 15 0 24 22 topology 38 201 -> 16 0 24 22 topology 39 201 -> 15 0 23 22 topology 97 202 -> 16 0 23 22 topology 177 202 -> 15 0 24 22 topology 167 203 -> 16 0 24 22 topology 169 203 -> 15 0 23 22 topology 133 204 -> 16 0 23 22 topology 177 204 -> 15 0 23 22 topology 169 205 -> 16 0 23 22 topology 177 205 -> 15 0 24 22 topology 23 206 -> 16 0 24 22 topology 25 206 -> 15 0 23 22 topology 87 207 -> 16 0 23 22 topology 177 207 -> 15 0 23 22 topology 147 208 -> 16 0 23 22 topology 177 208 -> 15 0 23 22 topology 69 209 -> 16 0 23 22 topology 177 209 -> 15 0 23 22 topology 34 210 -> 16 0 23 22 topology 177 210 -> 15 0 23 22 topology 129 211 -> 16 0 23 22 topology 177 211 -> 15 0 24 22 topology 50 212 -> 16 0 24 22 topology 51 212 -> 15 0 24 22 topology 47 213 -> 16 0 24 22 topology 49 213 -> 15 0 24 22 topology 110 214 -> 16 0 24 22 topology 111 214 -> 15 0 23 22 topology 52 215 -> 16 0 23 22 topology 177 215 -> 15 0 24 22 topology 86 216 -> 16 0 24 22 topology 87 216 -> 15 0 23 22 topology 88 217 -> 16 0 23 22 topology 177 217 -> 15 0 24 22 topology 62 218 -> 16 0 24 22 topology 63 218 -> 15 0 23 22 topology 42 219 -> 16 0 23 22 topology 177 219 -> 15 0 24 22 topology 170 220 -> 16 0 24 22 topology 171 220 -> 15 0 23 22 topology 172 221 -> 16 0 23 22 topology 177 221 -> 15 0 24 22 topology 146 222 -> 16 0 24 22 topology 147 222 -> 15 0 23 22 topology 124 223 -> 16 0 23 22 topology 177 223 -> 15 0 24 22 topology 122 224 -> 16 0 24 22 topology 123 224 -> 15 0 24 22 topology 41 225 -> 16 0 24 22 topology 42 225 -> 15 0 23 22 topology 76 226 -> 16 0 23 22 topology 177 226 -> 15 0 23 22 topology 160 227 -> 16 0 23 22 topology 177 227 -> 15 0 24 22 topology 98 228 -> 16 0 24 22 topology 99 228 -> 15 0 24 22 topology 74 229 -> 16 0 24 22 topology 75 229 -> 15 0 24 22 topology 158 230 -> 16 0 24 22 topology 159 230 -> 15 0 23 22 topology 54 231 -> 16 0 23 22 topology 177 231 -> 15 0 24 22 topology 50 232 -> 16 0 24 22 topology 52 232 -> 15 0 24 22 topology 134 233 -> 16 0 24 22 topology 135 233 -> 15 0 23 22 topology 114 234 -> 16 0 23 22 topology 177 234 -> 15 0 23 22 topology 25 235 -> 16 0 23 22 topology 177 235 -> 15 0 24 22 topology 56 236 -> 16 0 24 22 topology 58 236 -> 15 0 23 22 topology 174 237 -> 16 0 23 22 topology 177 237 -> 15 0 24 179 topology 285 238 -> 16 0 24 179 topology 286 238 -> 15 0 23 179 topology 383 239 +> 15 0 23 22 topology 48 134 +> 16 0 23 22 topology 177 134 +> 15 0 24 22 topology 176 135 +> 16 0 24 22 topology 177 135 +> 15 0 25 22 topology 50 136 +> 16 0 25 22 topology 52 136 +> 15 0 25 22 topology 50 137 +> 16 0 25 22 topology 51 137 +> 15 0 25 22 topology 53 138 +> 16 0 25 22 topology 55 138 +> 15 0 25 22 topology 53 139 +> 16 0 25 22 topology 54 139 +> 15 0 25 22 topology 56 140 +> 16 0 25 22 topology 58 140 +> 15 0 25 22 topology 56 141 +> 16 0 25 22 topology 57 141 +> 15 0 25 22 topology 59 142 +> 16 0 25 22 topology 61 142 +> 15 0 25 22 topology 59 143 +> 16 0 25 22 topology 60 143 +> 15 0 25 22 topology 62 144 +> 16 0 25 22 topology 64 144 +> 15 0 25 22 topology 62 145 +> 16 0 25 22 topology 63 145 +> 15 0 25 22 topology 65 146 +> 16 0 25 22 topology 67 146 +> 15 0 25 22 topology 65 147 +> 16 0 25 22 topology 66 147 +> 15 0 25 22 topology 68 148 +> 16 0 25 22 topology 70 148 +> 15 0 25 22 topology 68 149 +> 16 0 25 22 topology 69 149 +> 15 0 25 22 topology 71 150 +> 16 0 25 22 topology 73 150 +> 15 0 25 22 topology 71 151 +> 16 0 25 22 topology 72 151 +> 15 0 25 22 topology 74 152 +> 16 0 25 22 topology 76 152 +> 15 0 25 22 topology 74 153 +> 16 0 25 22 topology 75 153 +> 15 0 25 22 topology 77 154 +> 16 0 25 22 topology 79 154 +> 15 0 25 22 topology 77 155 +> 16 0 25 22 topology 78 155 +> 15 0 25 22 topology 23 156 +> 16 0 25 22 topology 25 156 +> 15 0 25 22 topology 23 157 +> 16 0 25 22 topology 24 157 +> 15 0 25 22 topology 80 158 +> 16 0 25 22 topology 82 158 +> 15 0 25 22 topology 80 159 +> 16 0 25 22 topology 81 159 +> 15 0 25 22 topology 83 160 +> 16 0 25 22 topology 85 160 +> 15 0 25 22 topology 83 161 +> 16 0 25 22 topology 84 161 +> 15 0 25 22 topology 86 162 +> 16 0 25 22 topology 88 162 +> 15 0 25 22 topology 86 163 +> 16 0 25 22 topology 87 163 +> 15 0 25 22 topology 89 164 +> 16 0 25 22 topology 91 164 +> 15 0 25 22 topology 89 165 +> 16 0 25 22 topology 90 165 +> 15 0 25 22 topology 92 166 +> 16 0 25 22 topology 94 166 +> 15 0 25 22 topology 92 167 +> 16 0 25 22 topology 93 167 +> 15 0 25 22 topology 95 168 +> 16 0 25 22 topology 97 168 +> 15 0 25 22 topology 95 169 +> 16 0 25 22 topology 96 169 +> 15 0 25 22 topology 98 170 +> 16 0 25 22 topology 100 170 +> 15 0 25 22 topology 98 171 +> 16 0 25 22 topology 99 171 +> 15 0 25 22 topology 101 172 +> 16 0 25 22 topology 103 172 +> 15 0 25 22 topology 101 173 +> 16 0 25 22 topology 102 173 +> 15 0 25 22 topology 104 174 +> 16 0 25 22 topology 106 174 +> 15 0 25 22 topology 104 175 +> 16 0 25 22 topology 105 175 +> 15 0 25 22 topology 107 176 +> 16 0 25 22 topology 109 176 +> 15 0 25 22 topology 107 177 +> 16 0 25 22 topology 108 177 +> 15 0 25 22 topology 26 178 +> 16 0 25 22 topology 28 178 +> 15 0 25 22 topology 26 179 +> 16 0 25 22 topology 27 179 +> 15 0 25 22 topology 110 180 +> 16 0 25 22 topology 112 180 +> 15 0 25 22 topology 110 181 +> 16 0 25 22 topology 111 181 +> 15 0 25 22 topology 113 182 +> 16 0 25 22 topology 115 182 +> 15 0 25 22 topology 113 183 +> 16 0 25 22 topology 114 183 +> 15 0 25 22 topology 116 184 +> 16 0 25 22 topology 118 184 +> 15 0 25 22 topology 116 185 +> 16 0 25 22 topology 117 185 +> 15 0 25 22 topology 119 186 +> 16 0 25 22 topology 121 186 +> 15 0 25 22 topology 119 187 +> 16 0 25 22 topology 120 187 +> 15 0 25 22 topology 122 188 +> 16 0 25 22 topology 124 188 +> 15 0 25 22 topology 122 189 +> 16 0 25 22 topology 123 189 +> 15 0 25 22 topology 125 190 +> 16 0 25 22 topology 127 190 +> 15 0 25 22 topology 125 191 +> 16 0 25 22 topology 126 191 +> 15 0 25 22 topology 128 192 +> 16 0 25 22 topology 130 192 +> 15 0 25 22 topology 128 193 +> 16 0 25 22 topology 129 193 +> 15 0 25 22 topology 131 194 +> 16 0 25 22 topology 133 194 +> 15 0 25 22 topology 131 195 +> 16 0 25 22 topology 132 195 +> 15 0 25 22 topology 134 196 +> 16 0 25 22 topology 136 196 +> 15 0 25 22 topology 134 197 +> 16 0 25 22 topology 135 197 +> 15 0 25 22 topology 137 198 +> 16 0 25 22 topology 139 198 +> 15 0 25 22 topology 137 199 +> 16 0 25 22 topology 138 199 +> 15 0 25 22 topology 29 200 +> 16 0 25 22 topology 31 200 +> 15 0 25 22 topology 29 201 +> 16 0 25 22 topology 30 201 +> 15 0 25 22 topology 140 202 +> 16 0 25 22 topology 142 202 +> 15 0 25 22 topology 140 203 +> 16 0 25 22 topology 141 203 +> 15 0 25 22 topology 143 204 +> 16 0 25 22 topology 145 204 +> 15 0 25 22 topology 143 205 +> 16 0 25 22 topology 144 205 +> 15 0 25 22 topology 146 206 +> 16 0 25 22 topology 148 206 +> 15 0 25 22 topology 146 207 +> 16 0 25 22 topology 147 207 +> 15 0 25 22 topology 149 208 +> 16 0 25 22 topology 151 208 +> 15 0 25 22 topology 149 209 +> 16 0 25 22 topology 150 209 +> 15 0 25 22 topology 152 210 +> 16 0 25 22 topology 154 210 +> 15 0 25 22 topology 152 211 +> 16 0 25 22 topology 153 211 +> 15 0 25 22 topology 155 212 +> 16 0 25 22 topology 157 212 +> 15 0 25 22 topology 155 213 +> 16 0 25 22 topology 156 213 +> 15 0 25 22 topology 158 214 +> 16 0 25 22 topology 160 214 +> 15 0 25 22 topology 158 215 +> 16 0 25 22 topology 159 215 +> 15 0 25 22 topology 161 216 +> 16 0 25 22 topology 163 216 +> 15 0 25 22 topology 161 217 +> 16 0 25 22 topology 162 217 +> 15 0 25 22 topology 164 218 +> 16 0 25 22 topology 166 218 +> 15 0 25 22 topology 164 219 +> 16 0 25 22 topology 165 219 +> 15 0 25 22 topology 167 220 +> 16 0 25 22 topology 169 220 +> 15 0 25 22 topology 167 221 +> 16 0 25 22 topology 168 221 +> 15 0 25 22 topology 32 222 +> 16 0 25 22 topology 34 222 +> 15 0 25 22 topology 32 223 +> 16 0 25 22 topology 33 223 +> 15 0 25 22 topology 170 224 +> 16 0 25 22 topology 172 224 +> 15 0 25 22 topology 170 225 +> 16 0 25 22 topology 171 225 +> 15 0 25 22 topology 173 226 +> 16 0 25 22 topology 175 226 +> 15 0 25 22 topology 173 227 +> 16 0 25 22 topology 174 227 +> 15 0 25 22 topology 35 228 +> 16 0 25 22 topology 37 228 +> 15 0 25 22 topology 35 229 +> 16 0 25 22 topology 36 229 +> 15 0 25 22 topology 38 230 +> 16 0 25 22 topology 40 230 +> 15 0 25 22 topology 38 231 +> 16 0 25 22 topology 39 231 +> 15 0 25 22 topology 41 232 +> 16 0 25 22 topology 43 232 +> 15 0 25 22 topology 41 233 +> 16 0 25 22 topology 42 233 +> 15 0 25 22 topology 44 234 +> 16 0 25 22 topology 46 234 +> 15 0 25 22 topology 44 235 +> 16 0 25 22 topology 45 235 +> 15 0 25 22 topology 47 236 +> 16 0 25 22 topology 49 236 +> 15 0 25 22 topology 47 237 +> 16 0 25 22 topology 48 237 +> 15 0 23 179 topology 209 238 +> 16 0 23 179 topology 460 238 +> 15 0 23 179 topology 208 239 > 16 0 23 179 topology 460 239 -> 15 0 24 179 topology 444 240 -> 16 0 24 179 topology 446 240 -> 15 0 24 179 topology 264 241 -> 16 0 24 179 topology 265 241 -> 15 0 23 179 topology 277 242 +> 15 0 23 179 topology 212 240 +> 16 0 23 179 topology 460 240 +> 15 0 23 179 topology 211 241 +> 16 0 23 179 topology 460 241 +> 15 0 23 179 topology 215 242 > 16 0 23 179 topology 460 242 -> 15 0 23 179 topology 397 243 +> 15 0 23 179 topology 214 243 > 16 0 23 179 topology 460 243 -> 15 0 23 179 topology 319 244 +> 15 0 23 179 topology 218 244 > 16 0 23 179 topology 460 244 -> 15 0 24 179 topology 438 245 -> 16 0 24 179 topology 439 245 -> 15 0 24 179 topology 330 246 -> 16 0 24 179 topology 332 246 -> 15 0 24 179 topology 198 247 -> 16 0 24 179 topology 200 247 -> 15 0 23 179 topology 439 248 +> 15 0 23 179 topology 217 245 +> 16 0 23 179 topology 460 245 +> 15 0 23 179 topology 221 246 +> 16 0 23 179 topology 460 246 +> 15 0 23 179 topology 220 247 +> 16 0 23 179 topology 460 247 +> 15 0 23 179 topology 224 248 > 16 0 23 179 topology 460 248 -> 15 0 24 179 topology 255 249 -> 16 0 24 179 topology 257 249 -> 15 0 24 179 topology 396 250 -> 16 0 24 179 topology 398 250 -> 15 0 24 179 topology 243 251 -> 16 0 24 179 topology 244 251 -> 15 0 23 179 topology 302 252 +> 15 0 23 179 topology 223 249 +> 16 0 23 179 topology 460 249 +> 15 0 23 179 topology 227 250 +> 16 0 23 179 topology 460 250 +> 15 0 23 179 topology 226 251 +> 16 0 23 179 topology 460 251 +> 15 0 23 179 topology 230 252 > 16 0 23 179 topology 460 252 -> 15 0 24 179 topology 321 253 -> 16 0 24 179 topology 323 253 -> 15 0 24 179 topology 222 254 -> 16 0 24 179 topology 223 254 -> 15 0 23 179 topology 338 255 +> 15 0 23 179 topology 229 253 +> 16 0 23 179 topology 460 253 +> 15 0 23 179 topology 233 254 +> 16 0 23 179 topology 460 254 +> 15 0 23 179 topology 232 255 > 16 0 23 179 topology 460 255 -> 15 0 24 179 topology 417 256 -> 16 0 24 179 topology 418 256 -> 15 0 23 179 topology 374 257 +> 15 0 23 179 topology 236 256 +> 16 0 23 179 topology 460 256 +> 15 0 23 179 topology 235 257 > 16 0 23 179 topology 460 257 -> 15 0 24 179 topology 396 258 -> 16 0 24 179 topology 397 258 -> 15 0 23 179 topology 410 259 +> 15 0 23 179 topology 182 258 +> 16 0 23 179 topology 460 258 +> 15 0 23 179 topology 181 259 > 16 0 23 179 topology 460 259 -> 15 0 24 179 topology 207 260 -> 16 0 24 179 topology 209 260 -> 15 0 23 179 topology 446 261 +> 15 0 23 179 topology 239 260 +> 16 0 23 179 topology 460 260 +> 15 0 23 179 topology 238 261 > 16 0 23 179 topology 460 261 -> 15 0 24 179 topology 375 262 -> 16 0 24 179 topology 376 262 -> 15 0 23 179 topology 304 263 +> 15 0 23 179 topology 242 262 +> 16 0 23 179 topology 460 262 +> 15 0 23 179 topology 241 263 > 16 0 23 179 topology 460 263 -> 15 0 23 179 topology 226 264 +> 15 0 23 179 topology 245 264 > 16 0 23 179 topology 460 264 -> 15 0 24 179 topology 354 265 -> 16 0 24 179 topology 355 265 -> 15 0 24 179 topology 273 266 -> 16 0 24 179 topology 275 266 -> 15 0 23 179 topology 424 267 +> 15 0 23 179 topology 244 265 +> 16 0 23 179 topology 460 265 +> 15 0 23 179 topology 248 266 +> 16 0 23 179 topology 460 266 +> 15 0 23 179 topology 247 267 > 16 0 23 179 topology 460 267 -> 15 0 23 179 topology 346 268 +> 15 0 23 179 topology 251 268 > 16 0 23 179 topology 460 268 -> 15 0 24 179 topology 183 269 -> 16 0 24 179 topology 184 269 -> 15 0 24 179 topology 339 270 -> 16 0 24 179 topology 341 270 -> 15 0 24 179 topology 189 271 -> 16 0 24 179 topology 190 271 -> 15 0 24 179 topology 264 272 -> 16 0 24 179 topology 266 272 -> 15 0 23 179 topology 199 273 +> 15 0 23 179 topology 250 269 +> 16 0 23 179 topology 460 269 +> 15 0 23 179 topology 254 270 +> 16 0 23 179 topology 460 270 +> 15 0 23 179 topology 253 271 +> 16 0 23 179 topology 460 271 +> 15 0 23 179 topology 257 272 +> 16 0 23 179 topology 460 272 +> 15 0 23 179 topology 256 273 > 16 0 23 179 topology 460 273 -> 15 0 23 179 topology 329 274 +> 15 0 23 179 topology 260 274 > 16 0 23 179 topology 460 274 -> 15 0 24 179 topology 195 275 -> 16 0 24 179 topology 196 275 -> 15 0 24 179 topology 405 276 -> 16 0 24 179 topology 407 276 -> 15 0 24 179 topology 333 277 -> 16 0 24 179 topology 334 277 -> 15 0 23 179 topology 365 278 +> 15 0 23 179 topology 259 275 +> 16 0 23 179 topology 460 275 +> 15 0 23 179 topology 263 276 +> 16 0 23 179 topology 460 276 +> 15 0 23 179 topology 262 277 +> 16 0 23 179 topology 460 277 +> 15 0 23 179 topology 266 278 > 16 0 23 179 topology 460 278 -> 15 0 23 179 topology 233 279 +> 15 0 23 179 topology 265 279 > 16 0 23 179 topology 460 279 -> 15 0 24 179 topology 201 280 -> 16 0 24 179 topology 202 280 -> 15 0 23 179 topology 401 281 +> 15 0 23 179 topology 185 280 +> 16 0 23 179 topology 460 280 +> 15 0 23 179 topology 184 281 > 16 0 23 179 topology 460 281 -> 15 0 24 179 topology 312 282 -> 16 0 24 179 topology 313 282 -> 15 0 23 179 topology 437 283 +> 15 0 23 179 topology 269 282 +> 16 0 23 179 topology 460 282 +> 15 0 23 179 topology 268 283 > 16 0 23 179 topology 460 283 -> 15 0 23 179 topology 211 284 +> 15 0 23 179 topology 272 284 > 16 0 23 179 topology 460 284 -> 15 0 24 179 topology 291 285 -> 16 0 24 179 topology 292 285 -> 15 0 23 179 topology 331 286 +> 15 0 23 179 topology 271 285 +> 16 0 23 179 topology 460 285 +> 15 0 23 179 topology 275 286 > 16 0 23 179 topology 460 286 -> 15 0 23 179 topology 253 287 +> 15 0 23 179 topology 274 287 > 16 0 23 179 topology 460 287 -> 15 0 24 179 topology 189 288 -> 16 0 24 179 topology 191 288 -> 15 0 24 179 topology 216 289 -> 16 0 24 179 topology 218 289 -> 15 0 23 179 topology 451 290 +> 15 0 23 179 topology 278 288 +> 16 0 23 179 topology 460 288 +> 15 0 23 179 topology 277 289 +> 16 0 23 179 topology 460 289 +> 15 0 23 179 topology 281 290 > 16 0 23 179 topology 460 290 -> 15 0 23 179 topology 373 291 +> 15 0 23 179 topology 280 291 > 16 0 23 179 topology 460 291 -> 15 0 23 179 topology 206 292 +> 15 0 23 179 topology 284 292 > 16 0 23 179 topology 460 292 -> 15 0 23 179 topology 295 293 +> 15 0 23 179 topology 283 293 > 16 0 23 179 topology 460 293 -> 15 0 24 179 topology 357 294 -> 16 0 24 179 topology 359 294 -> 15 0 24 179 topology 444 295 -> 16 0 24 179 topology 445 295 -> 15 0 24 179 topology 282 296 -> 16 0 24 179 topology 284 296 -> 15 0 23 179 topology 415 297 +> 15 0 23 179 topology 287 294 +> 16 0 23 179 topology 460 294 +> 15 0 23 179 topology 286 295 +> 16 0 23 179 topology 460 295 +> 15 0 23 179 topology 290 296 +> 16 0 23 179 topology 460 296 +> 15 0 23 179 topology 289 297 > 16 0 23 179 topology 460 297 -> 15 0 23 179 topology 184 298 +> 15 0 23 179 topology 293 298 > 16 0 23 179 topology 460 298 -> 15 0 24 179 topology 423 299 -> 16 0 24 179 topology 425 299 -> 15 0 24 179 topology 270 300 -> 16 0 24 179 topology 271 300 -> 15 0 24 179 topology 348 301 -> 16 0 24 179 topology 350 301 -> 15 0 23 179 topology 224 302 +> 15 0 23 179 topology 292 299 +> 16 0 23 179 topology 460 299 +> 15 0 23 179 topology 296 300 +> 16 0 23 179 topology 460 300 +> 15 0 23 179 topology 295 301 +> 16 0 23 179 topology 460 301 +> 15 0 23 179 topology 188 302 > 16 0 23 179 topology 460 302 -> 15 0 24 179 topology 249 303 -> 16 0 24 179 topology 250 303 -> 15 0 23 179 topology 392 304 +> 15 0 23 179 topology 187 303 +> 16 0 23 179 topology 460 303 +> 15 0 23 179 topology 299 304 > 16 0 23 179 topology 460 304 -> 15 0 23 179 topology 260 305 +> 15 0 23 179 topology 298 305 > 16 0 23 179 topology 460 305 -> 15 0 24 179 topology 228 306 -> 16 0 24 179 topology 229 306 -> 15 0 23 179 topology 428 307 +> 15 0 23 179 topology 302 306 +> 16 0 23 179 topology 460 306 +> 15 0 23 179 topology 301 307 > 16 0 23 179 topology 460 307 -> 15 0 23 179 topology 296 308 +> 15 0 23 179 topology 305 308 > 16 0 23 179 topology 460 308 -> 15 0 24 179 topology 414 309 -> 16 0 24 179 topology 416 309 -> 15 0 24 179 topology 423 310 -> 16 0 24 179 topology 424 310 -> 15 0 23 179 topology 238 311 +> 15 0 23 179 topology 304 309 +> 16 0 23 179 topology 460 309 +> 15 0 23 179 topology 308 310 +> 16 0 23 179 topology 460 310 +> 15 0 23 179 topology 307 311 > 16 0 23 179 topology 460 311 -> 15 0 24 179 topology 402 312 -> 16 0 24 179 topology 403 312 -> 15 0 23 179 topology 358 313 +> 15 0 23 179 topology 311 312 +> 16 0 23 179 topology 460 312 +> 15 0 23 179 topology 310 313 > 16 0 23 179 topology 460 313 -> 15 0 23 179 topology 280 314 +> 15 0 23 179 topology 314 314 > 16 0 23 179 topology 460 314 -> 15 0 23 179 topology 197 315 +> 15 0 23 179 topology 313 315 > 16 0 23 179 topology 460 315 -> 15 0 24 179 topology 381 316 -> 16 0 24 179 topology 382 316 -> 15 0 24 179 topology 300 317 -> 16 0 24 179 topology 302 317 -> 15 0 23 179 topology 400 318 +> 15 0 23 179 topology 317 316 +> 16 0 23 179 topology 460 316 +> 15 0 23 179 topology 316 317 +> 16 0 23 179 topology 460 317 +> 15 0 23 179 topology 320 318 > 16 0 23 179 topology 460 318 -> 15 0 23 179 topology 322 319 +> 15 0 23 179 topology 319 319 > 16 0 23 179 topology 460 319 -> 15 0 24 179 topology 225 320 -> 16 0 24 179 topology 227 320 -> 15 0 24 179 topology 207 321 -> 16 0 24 179 topology 208 321 -> 15 0 23 179 topology 442 322 +> 15 0 23 179 topology 323 320 +> 16 0 23 179 topology 460 320 +> 15 0 23 179 topology 322 321 +> 16 0 23 179 topology 460 321 +> 15 0 23 179 topology 326 322 > 16 0 23 179 topology 460 322 -> 15 0 24 179 topology 366 323 -> 16 0 24 179 topology 368 323 -> 15 0 23 179 topology 215 324 +> 15 0 23 179 topology 325 323 +> 16 0 23 179 topology 460 323 +> 15 0 23 179 topology 191 324 > 16 0 23 179 topology 460 324 -> 15 0 24 179 topology 291 325 -> 16 0 24 179 topology 293 325 -> 15 0 23 179 topology 251 326 +> 15 0 23 179 topology 190 325 +> 16 0 23 179 topology 460 325 +> 15 0 23 179 topology 329 326 > 16 0 23 179 topology 460 326 -> 15 0 24 179 topology 432 327 -> 16 0 24 179 topology 434 327 -> 15 0 24 179 topology 360 328 -> 16 0 24 179 topology 361 328 -> 15 0 23 179 topology 419 329 +> 15 0 23 179 topology 328 327 +> 16 0 23 179 topology 460 327 +> 15 0 23 179 topology 332 328 +> 16 0 23 179 topology 460 328 +> 15 0 23 179 topology 331 329 > 16 0 23 179 topology 460 329 -> 15 0 23 179 topology 287 330 +> 15 0 23 179 topology 335 330 > 16 0 23 179 topology 460 330 -> 15 0 23 179 topology 455 331 +> 15 0 23 179 topology 334 331 > 16 0 23 179 topology 460 331 -> 15 0 23 179 topology 323 332 +> 15 0 23 179 topology 338 332 > 16 0 23 179 topology 460 332 -> 15 0 24 179 topology 339 333 -> 16 0 24 179 topology 340 333 -> 15 0 24 179 topology 180 334 -> 16 0 24 179 topology 182 334 -> 15 0 24 179 topology 318 335 -> 16 0 24 179 topology 319 335 -> 15 0 23 179 topology 188 336 +> 15 0 23 179 topology 337 333 +> 16 0 23 179 topology 460 333 +> 15 0 23 179 topology 341 334 +> 16 0 23 179 topology 460 334 +> 15 0 23 179 topology 340 335 +> 16 0 23 179 topology 460 335 +> 15 0 23 179 topology 344 336 > 16 0 23 179 topology 460 336 -> 15 0 23 179 topology 307 337 +> 15 0 23 179 topology 343 337 > 16 0 23 179 topology 460 337 -> 15 0 24 179 topology 243 338 -> 16 0 24 179 topology 245 338 -> 15 0 23 179 topology 229 339 +> 15 0 23 179 topology 347 338 +> 16 0 23 179 topology 460 338 +> 15 0 23 179 topology 346 339 > 16 0 23 179 topology 460 339 -> 15 0 23 179 topology 427 340 +> 15 0 23 179 topology 350 340 > 16 0 23 179 topology 460 340 > 15 0 23 179 topology 349 341 > 16 0 23 179 topology 460 341 -> 15 0 24 179 topology 309 342 -> 16 0 24 179 topology 311 342 -> 15 0 24 179 topology 204 343 -> 16 0 24 179 topology 206 343 -> 15 0 24 179 topology 234 344 -> 16 0 24 179 topology 236 344 -> 15 0 24 179 topology 450 345 -> 16 0 24 179 topology 452 345 -> 15 0 24 179 topology 297 346 -> 16 0 24 179 topology 298 346 -> 15 0 23 179 topology 242 347 +> 15 0 23 179 topology 353 342 +> 16 0 23 179 topology 460 342 +> 15 0 23 179 topology 352 343 +> 16 0 23 179 topology 460 343 +> 15 0 23 179 topology 356 344 +> 16 0 23 179 topology 460 344 +> 15 0 23 179 topology 355 345 +> 16 0 23 179 topology 460 345 +> 15 0 23 179 topology 194 346 +> 16 0 23 179 topology 460 346 +> 15 0 23 179 topology 193 347 > 16 0 23 179 topology 460 347 -> 15 0 23 179 topology 202 348 +> 15 0 23 179 topology 359 348 > 16 0 23 179 topology 460 348 -> 15 0 24 179 topology 375 349 -> 16 0 24 179 topology 377 349 -> 15 0 23 179 topology 278 350 +> 15 0 23 179 topology 358 349 +> 16 0 23 179 topology 460 349 +> 15 0 23 179 topology 362 350 > 16 0 23 179 topology 460 350 -> 15 0 24 179 topology 276 351 -> 16 0 24 179 topology 277 351 -> 15 0 23 179 topology 314 352 +> 15 0 23 179 topology 361 351 +> 16 0 23 179 topology 460 351 +> 15 0 23 179 topology 365 352 > 16 0 23 179 topology 460 352 -> 15 0 24 179 topology 255 353 -> 16 0 24 179 topology 256 353 -> 15 0 25 179 topology 459 354 -> 16 0 25 179 topology 460 354 -> 15 0 23 179 topology 350 355 +> 15 0 23 179 topology 364 353 +> 16 0 23 179 topology 460 353 +> 15 0 23 179 topology 368 354 +> 16 0 23 179 topology 460 354 +> 15 0 23 179 topology 367 355 > 16 0 23 179 topology 460 355 -> 15 0 24 179 topology 441 356 -> 16 0 24 179 topology 443 356 -> 15 0 24 179 topology 234 357 -> 16 0 24 179 topology 235 357 -> 15 0 24 179 topology 450 358 -> 16 0 24 179 topology 451 358 -> 15 0 23 179 topology 386 359 +> 15 0 23 179 topology 371 356 +> 16 0 23 179 topology 460 356 +> 15 0 23 179 topology 370 357 +> 16 0 23 179 topology 460 357 +> 15 0 23 179 topology 374 358 +> 16 0 23 179 topology 460 358 +> 15 0 23 179 topology 373 359 > 16 0 23 179 topology 460 359 -> 15 0 23 179 topology 214 360 +> 15 0 23 179 topology 377 360 > 16 0 23 179 topology 460 360 -> 15 0 24 179 topology 429 361 -> 16 0 24 179 topology 430 361 -> 15 0 23 179 topology 334 362 +> 15 0 23 179 topology 376 361 +> 16 0 23 179 topology 460 361 +> 15 0 23 179 topology 380 362 > 16 0 23 179 topology 460 362 -> 15 0 23 179 topology 256 363 +> 15 0 23 179 topology 379 363 > 16 0 23 179 topology 460 363 -> 15 0 24 179 topology 408 364 -> 16 0 24 179 topology 409 364 -> 15 0 24 179 topology 327 365 -> 16 0 24 179 topology 329 365 -> 15 0 23 179 topology 454 366 +> 15 0 23 179 topology 383 364 +> 16 0 23 179 topology 460 364 +> 15 0 23 179 topology 382 365 +> 16 0 23 179 topology 460 365 +> 15 0 23 179 topology 386 366 > 16 0 23 179 topology 460 366 -> 15 0 23 179 topology 376 367 +> 15 0 23 179 topology 385 367 > 16 0 23 179 topology 460 367 -> 15 0 24 179 topology 252 368 -> 16 0 24 179 topology 254 368 -> 15 0 24 179 topology 393 369 -> 16 0 24 179 topology 395 369 -> 15 0 24 179 topology 213 370 -> 16 0 24 179 topology 214 370 -> 15 0 23 179 topology 187 371 +> 15 0 23 179 topology 197 368 +> 16 0 23 179 topology 460 368 +> 15 0 23 179 topology 196 369 +> 16 0 23 179 topology 460 369 +> 15 0 23 179 topology 389 370 +> 16 0 23 179 topology 460 370 +> 15 0 23 179 topology 388 371 > 16 0 23 179 topology 460 371 -> 15 0 23 179 topology 269 372 +> 15 0 23 179 topology 392 372 > 16 0 23 179 topology 460 372 -> 15 0 24 179 topology 318 373 -> 16 0 24 179 topology 320 373 -> 15 0 23 179 topology 305 374 +> 15 0 23 179 topology 391 373 +> 16 0 23 179 topology 460 373 +> 15 0 23 179 topology 395 374 > 16 0 23 179 topology 460 374 -> 15 0 24 179 topology 387 375 -> 16 0 24 179 topology 388 375 -> 15 0 23 179 topology 341 376 +> 15 0 23 179 topology 394 375 +> 16 0 23 179 topology 460 375 +> 15 0 23 179 topology 398 376 > 16 0 23 179 topology 460 376 -> 15 0 24 179 topology 384 377 -> 16 0 24 179 topology 386 377 -> 15 0 24 179 topology 366 378 -> 16 0 24 179 topology 367 378 -> 15 0 23 179 topology 377 379 +> 15 0 23 179 topology 397 377 +> 16 0 23 179 topology 460 377 +> 15 0 23 179 topology 401 378 +> 16 0 23 179 topology 460 378 +> 15 0 23 179 topology 400 379 > 16 0 23 179 topology 460 379 -> 15 0 23 179 topology 413 380 +> 15 0 23 179 topology 404 380 > 16 0 23 179 topology 460 380 -> 15 0 23 179 topology 241 381 +> 15 0 23 179 topology 403 381 > 16 0 23 179 topology 460 381 -> 15 0 24 179 topology 345 382 -> 16 0 24 179 topology 346 382 -> 15 0 24 179 topology 324 383 -> 16 0 24 179 topology 325 383 -> 15 0 23 179 topology 361 384 +> 15 0 23 179 topology 407 382 +> 16 0 23 179 topology 460 382 +> 15 0 23 179 topology 406 383 +> 16 0 23 179 topology 460 383 +> 15 0 23 179 topology 410 384 > 16 0 23 179 topology 460 384 -> 15 0 23 179 topology 283 385 +> 15 0 23 179 topology 409 385 > 16 0 23 179 topology 460 385 -> 15 0 24 179 topology 270 386 -> 16 0 24 179 topology 272 386 -> 15 0 24 179 topology 195 387 -> 16 0 24 179 topology 197 387 -> 15 0 23 179 topology 403 388 +> 15 0 23 179 topology 413 386 +> 16 0 23 179 topology 460 386 +> 15 0 23 179 topology 412 387 +> 16 0 23 179 topology 460 387 +> 15 0 23 179 topology 416 388 > 16 0 23 179 topology 460 388 -> 15 0 23 179 topology 325 389 +> 15 0 23 179 topology 415 389 > 16 0 23 179 topology 460 389 -> 15 0 24 179 topology 336 390 -> 16 0 24 179 topology 338 390 -> 15 0 23 179 topology 445 391 +> 15 0 23 179 topology 200 390 +> 16 0 23 179 topology 460 390 +> 15 0 23 179 topology 199 391 > 16 0 23 179 topology 460 391 -> 15 0 24 179 topology 261 392 -> 16 0 24 179 topology 263 392 -> 15 0 24 179 topology 402 393 -> 16 0 24 179 topology 404 393 -> 15 0 24 179 topology 303 394 -> 16 0 24 179 topology 304 394 -> 15 0 23 179 topology 332 395 +> 15 0 23 179 topology 419 392 +> 16 0 23 179 topology 460 392 +> 15 0 23 179 topology 418 393 +> 16 0 23 179 topology 460 393 +> 15 0 23 179 topology 422 394 +> 16 0 23 179 topology 460 394 +> 15 0 23 179 topology 421 395 > 16 0 23 179 topology 460 395 -> 15 0 23 179 topology 368 396 +> 15 0 23 179 topology 425 396 > 16 0 23 179 topology 460 396 -> 15 0 24 179 topology 282 397 -> 16 0 24 179 topology 283 397 -> 15 0 23 179 topology 236 398 +> 15 0 23 179 topology 424 397 +> 16 0 23 179 topology 460 397 +> 15 0 23 179 topology 428 398 > 16 0 23 179 topology 460 398 -> 15 0 23 179 topology 404 399 +> 15 0 23 179 topology 427 399 > 16 0 23 179 topology 460 399 -> 15 0 24 179 topology 261 400 -> 16 0 24 179 topology 262 400 -> 15 0 23 179 topology 440 401 +> 15 0 23 179 topology 431 400 +> 16 0 23 179 topology 460 400 +> 15 0 23 179 topology 430 401 > 16 0 23 179 topology 460 401 -> 15 0 23 179 topology 268 402 +> 15 0 23 179 topology 434 402 > 16 0 23 179 topology 460 402 -> 15 0 24 179 topology 456 403 -> 16 0 24 179 topology 457 403 -> 15 0 24 179 topology 213 404 -> 16 0 24 179 topology 215 404 -> 15 0 23 179 topology 388 405 +> 15 0 23 179 topology 433 403 +> 16 0 23 179 topology 460 403 +> 15 0 23 179 topology 437 404 +> 16 0 23 179 topology 460 404 +> 15 0 23 179 topology 436 405 > 16 0 23 179 topology 460 405 -> 15 0 23 179 topology 310 406 +> 15 0 23 179 topology 440 406 > 16 0 23 179 topology 460 406 -> 15 0 23 179 topology 232 407 +> 15 0 23 179 topology 439 407 > 16 0 23 179 topology 460 407 -> 15 0 24 179 topology 435 408 -> 16 0 24 179 topology 436 408 -> 15 0 23 179 topology 430 409 +> 15 0 23 179 topology 443 408 +> 16 0 23 179 topology 460 408 +> 15 0 23 179 topology 442 409 > 16 0 23 179 topology 460 409 -> 15 0 23 179 topology 352 410 +> 15 0 23 179 topology 446 410 > 16 0 23 179 topology 460 410 -> 15 0 24 179 topology 414 411 -> 16 0 24 179 topology 415 411 -> 15 0 24 179 topology 279 412 -> 16 0 24 179 topology 281 412 -> 15 0 24 179 topology 420 413 -> 16 0 24 179 topology 422 413 -> 15 0 24 179 topology 240 414 -> 16 0 24 179 topology 241 414 -> 15 0 24 179 topology 345 415 -> 16 0 24 179 topology 347 415 -> 15 0 24 179 topology 219 416 -> 16 0 24 179 topology 220 416 -> 15 0 23 179 topology 205 417 +> 15 0 23 179 topology 445 411 +> 16 0 23 179 topology 460 411 +> 15 0 23 179 topology 203 412 +> 16 0 23 179 topology 460 412 +> 15 0 23 179 topology 202 413 +> 16 0 23 179 topology 460 413 +> 15 0 23 179 topology 449 414 +> 16 0 23 179 topology 460 414 +> 15 0 23 179 topology 448 415 +> 16 0 23 179 topology 460 415 +> 15 0 23 179 topology 452 416 +> 16 0 23 179 topology 460 416 +> 15 0 23 179 topology 451 417 > 16 0 23 179 topology 460 417 -> 15 0 23 179 topology 359 418 +> 15 0 23 179 topology 455 418 > 16 0 23 179 topology 460 418 -> 15 0 23 179 topology 227 419 +> 15 0 23 179 topology 454 419 > 16 0 23 179 topology 460 419 -> 15 0 23 179 topology 395 420 +> 15 0 23 179 topology 458 420 > 16 0 23 179 topology 460 420 -> 15 0 23 179 topology 263 421 +> 15 0 23 179 topology 457 421 > 16 0 23 179 topology 460 421 -> 15 0 24 179 topology 411 422 -> 16 0 24 179 topology 413 422 -> 15 0 23 179 topology 431 423 +> 15 0 23 179 topology 206 422 +> 16 0 23 179 topology 460 422 +> 15 0 23 179 topology 205 423 > 16 0 23 179 topology 460 423 -> 15 0 24 179 topology 393 424 -> 16 0 24 179 topology 394 424 -> 15 0 24 179 topology 372 425 -> 16 0 24 179 topology 373 425 -> 15 0 23 179 topology 217 426 -> 16 0 23 179 topology 460 426 -> 15 0 24 179 topology 186 427 -> 16 0 24 179 topology 188 427 -> 15 0 24 179 topology 351 428 -> 16 0 24 179 topology 352 428 -> 15 0 23 179 topology 337 429 -> 16 0 23 179 topology 460 429 -> 15 0 24 179 topology 297 430 -> 16 0 24 179 topology 299 430 -> 15 0 23 179 topology 259 431 -> 16 0 23 179 topology 460 431 -> 15 0 23 179 topology 200 432 -> 16 0 23 179 topology 460 432 -> 15 0 24 179 topology 222 433 -> 16 0 24 179 topology 224 433 -> 15 0 23 179 topology 457 434 -> 16 0 23 179 topology 460 434 -> 15 0 23 179 topology 379 435 -> 16 0 23 179 topology 460 435 -> 15 0 24 179 topology 363 436 -> 16 0 24 179 topology 365 436 -> 15 0 24 179 topology 288 437 -> 16 0 24 179 topology 290 437 -> 15 0 23 179 topology 190 438 -> 16 0 23 179 topology 460 438 -> 15 0 23 179 topology 218 439 -> 16 0 23 179 topology 460 439 -> 15 0 24 179 topology 429 440 -> 16 0 24 179 topology 431 440 -> 15 0 24 179 topology 330 441 -> 16 0 24 179 topology 331 441 -> 15 0 23 179 topology 254 442 -> 16 0 23 179 topology 460 442 -> 15 0 23 179 topology 422 443 -> 16 0 23 179 topology 460 443 -> 15 0 24 179 topology 354 444 -> 16 0 24 179 topology 356 444 -> 15 0 24 179 topology 309 445 -> 16 0 24 179 topology 310 445 -> 15 0 23 179 topology 290 446 -> 16 0 23 179 topology 460 446 -> 15 0 23 179 topology 458 447 -> 16 0 23 179 topology 460 447 -> 15 0 23 179 topology 326 448 -> 16 0 23 179 topology 460 448 -> 15 0 24 179 topology 288 449 -> 16 0 24 179 topology 289 449 -> 15 0 23 179 topology 244 450 -> 16 0 23 179 topology 460 450 -> 15 0 24 179 topology 240 451 -> 16 0 24 179 topology 242 451 -> 15 0 23 179 topology 191 452 -> 16 0 23 179 topology 460 452 -> 15 0 23 179 topology 364 453 -> 16 0 23 179 topology 460 453 -> 15 0 23 179 topology 286 454 -> 16 0 23 179 topology 460 454 -> 15 0 23 179 topology 406 455 -> 16 0 23 179 topology 460 455 -> 15 0 24 179 topology 441 456 -> 16 0 24 179 topology 442 456 -> 15 0 24 179 topology 306 457 -> 16 0 24 179 topology 308 457 -> 15 0 24 179 topology 180 458 -> 16 0 24 179 topology 181 458 -> 15 0 24 179 topology 231 459 -> 16 0 24 179 topology 233 459 -> 15 0 24 179 topology 447 460 -> 16 0 24 179 topology 449 460 -> 15 0 24 179 topology 267 461 -> 16 0 24 179 topology 268 461 -> 15 0 24 179 topology 186 462 -> 16 0 24 179 topology 187 462 -> 15 0 23 179 topology 209 463 -> 16 0 23 179 topology 460 463 -> 15 0 24 179 topology 372 464 -> 16 0 24 179 topology 374 464 -> 15 0 24 179 topology 246 465 -> 16 0 24 179 topology 247 465 -> 15 0 23 179 topology 245 466 -> 16 0 23 179 topology 460 466 -> 15 0 24 179 topology 192 467 -> 16 0 24 179 topology 193 467 -> 15 0 23 179 topology 281 468 -> 16 0 23 179 topology 460 468 -> 15 0 24 179 topology 225 469 -> 16 0 24 179 topology 226 469 -> 15 0 24 179 topology 198 470 -> 16 0 24 179 topology 199 470 -> 15 0 23 179 topology 449 471 -> 16 0 23 179 topology 460 471 -> 15 0 23 179 topology 317 472 -> 16 0 23 179 topology 460 472 -> 15 0 24 179 topology 438 473 -> 16 0 24 179 topology 440 473 -> 15 0 24 179 topology 420 474 -> 16 0 24 179 topology 421 474 -> 15 0 24 179 topology 204 475 -> 16 0 24 179 topology 205 475 -> 15 0 23 179 topology 353 476 -> 16 0 23 179 topology 460 476 -> 15 0 24 179 topology 399 477 -> 16 0 24 179 topology 400 477 -> 15 0 23 179 topology 271 478 -> 16 0 23 179 topology 460 478 -> 15 0 23 179 topology 182 479 -> 16 0 23 179 topology 460 479 -> 15 0 24 179 topology 378 480 -> 16 0 24 179 topology 379 480 -> 15 0 23 179 topology 391 481 -> 16 0 23 179 topology 460 481 -> 15 0 23 179 topology 313 482 -> 16 0 23 179 topology 460 482 -> 15 0 23 179 topology 235 483 -> 16 0 23 179 topology 460 483 -> 15 0 24 179 topology 249 484 -> 16 0 24 179 topology 251 484 -> 15 0 23 179 topology 433 485 -> 16 0 23 179 topology 460 485 -> 15 0 23 179 topology 355 486 -> 16 0 23 179 topology 460 486 -> 15 0 24 179 topology 390 487 -> 16 0 24 179 topology 392 487 -> 15 0 24 179 topology 201 488 -> 16 0 24 179 topology 203 488 -> 15 0 24 179 topology 315 489 -> 16 0 24 179 topology 317 489 -> 15 0 23 179 topology 272 490 -> 16 0 23 179 topology 460 490 -> 15 0 24 179 topology 456 491 -> 16 0 24 179 topology 458 491 -> 15 0 24 179 topology 357 492 -> 16 0 24 179 topology 358 492 -> 15 0 23 179 topology 308 493 -> 16 0 23 179 topology 460 493 -> 15 0 24 179 topology 381 494 -> 16 0 24 179 topology 383 494 -> 15 0 23 179 topology 344 495 -> 16 0 23 179 topology 460 495 -> 15 0 24 179 topology 336 496 -> 16 0 24 179 topology 337 496 -> 15 0 23 179 topology 380 497 -> 16 0 23 179 topology 460 497 -> 15 0 24 179 topology 315 498 -> 16 0 24 179 topology 316 498 -> 15 0 23 179 topology 416 499 -> 16 0 23 179 topology 460 499 -> 15 0 23 179 topology 298 500 -> 16 0 23 179 topology 460 500 -> 15 0 24 179 topology 294 501 -> 16 0 24 179 topology 295 501 -> 15 0 23 179 topology 220 502 -> 16 0 23 179 topology 460 502 -> 15 0 24 179 topology 267 503 -> 16 0 24 179 topology 269 503 -> 15 0 23 179 topology 418 504 -> 16 0 23 179 topology 460 504 -> 15 0 23 179 topology 340 505 -> 16 0 23 179 topology 460 505 -> 15 0 23 179 topology 262 506 -> 16 0 23 179 topology 460 506 -> 15 0 23 179 topology 382 507 -> 16 0 23 179 topology 460 507 -> 15 0 24 179 topology 333 508 -> 16 0 24 179 topology 335 508 -> 15 0 24 179 topology 258 509 -> 16 0 24 179 topology 260 509 -> 15 0 23 179 topology 193 510 -> 16 0 23 179 topology 460 510 -> 15 0 24 179 topology 399 511 -> 16 0 24 179 topology 401 511 -> 15 0 23 179 topology 299 512 -> 16 0 23 179 topology 460 512 -> 15 0 24 179 topology 273 513 -> 16 0 24 179 topology 274 513 -> 15 0 23 179 topology 335 514 -> 16 0 23 179 topology 460 514 -> 15 0 24 179 topology 324 515 -> 16 0 24 179 topology 326 515 -> 15 0 24 179 topology 252 516 -> 16 0 24 179 topology 253 516 -> 15 0 23 179 topology 371 517 -> 16 0 23 179 topology 460 517 -> 15 0 24 179 topology 231 518 -> 16 0 24 179 topology 232 518 -> 15 0 24 179 topology 447 519 -> 16 0 24 179 topology 448 519 -> 15 0 23 179 topology 407 520 -> 16 0 23 179 topology 460 520 -> 15 0 24 179 topology 426 521 -> 16 0 24 179 topology 427 521 -> 15 0 23 179 topology 443 522 -> 16 0 23 179 topology 460 522 -> 15 0 24 179 topology 210 523 -> 16 0 24 179 topology 212 523 -> 15 0 23 179 topology 247 524 -> 16 0 23 179 topology 460 524 -> 15 0 24 179 topology 405 525 -> 16 0 24 179 topology 406 525 -> 15 0 23 179 topology 367 526 -> 16 0 23 179 topology 460 526 -> 15 0 24 179 topology 192 527 -> 16 0 24 179 topology 194 527 -> 15 0 23 179 topology 289 528 -> 16 0 23 179 topology 460 528 -> 15 0 24 179 topology 384 529 -> 16 0 24 179 topology 385 529 -> 15 0 24 179 topology 276 530 -> 16 0 24 179 topology 278 530 -> 15 0 23 179 topology 409 531 -> 16 0 23 179 topology 460 531 -> 15 0 24 179 topology 417 532 -> 16 0 24 179 topology 419 532 -> 15 0 24 179 topology 210 533 -> 16 0 24 179 topology 211 533 -> 15 0 24 179 topology 342 534 -> 16 0 24 179 topology 344 534 -> 15 0 23 179 topology 362 535 -> 16 0 23 179 topology 460 535 -> 15 0 23 179 topology 230 536 -> 16 0 23 179 topology 460 536 -> 15 0 24 179 topology 408 537 -> 16 0 24 179 topology 410 537 -> 15 0 23 179 topology 398 538 -> 16 0 23 179 topology 460 538 -> 15 0 24 179 topology 363 539 -> 16 0 24 179 topology 364 539 -> 15 0 23 179 topology 266 540 -> 16 0 23 179 topology 460 540 -> 15 0 23 179 topology 434 541 -> 16 0 23 179 topology 460 541 -> 15 0 24 179 topology 342 542 -> 16 0 24 179 topology 343 542 -> 15 0 24 179 topology 321 543 -> 16 0 24 179 topology 322 543 -> 15 0 23 179 topology 274 544 -> 16 0 23 179 topology 460 544 -> 15 0 23 179 topology 394 545 -> 16 0 23 179 topology 460 545 -> 15 0 23 179 topology 316 546 -> 16 0 23 179 topology 460 546 -> 15 0 24 179 topology 219 547 -> 16 0 24 179 topology 221 547 -> 15 0 23 179 topology 203 548 -> 16 0 23 179 topology 460 548 -> 15 0 23 179 topology 436 549 -> 16 0 23 179 topology 460 549 -> 15 0 24 179 topology 360 550 -> 16 0 24 179 topology 362 550 -> 15 0 24 179 topology 285 551 -> 16 0 24 179 topology 287 551 -> 15 0 24 179 topology 426 552 -> 16 0 24 179 topology 428 552 -> 15 0 24 179 topology 300 553 -> 16 0 24 179 topology 301 553 -> 15 0 23 179 topology 221 554 -> 16 0 23 179 topology 460 554 -> 15 0 23 179 topology 389 555 -> 16 0 23 179 topology 460 555 -> 15 0 24 179 topology 351 556 -> 16 0 24 179 topology 353 556 -> 15 0 23 179 topology 257 557 -> 16 0 23 179 topology 460 557 -> 15 0 24 179 topology 279 558 -> 16 0 24 179 topology 280 558 -> 15 0 23 179 topology 425 559 -> 16 0 23 179 topology 460 559 -> 15 0 23 179 topology 293 560 -> 16 0 23 179 topology 460 560 -> 15 0 24 179 topology 258 561 -> 16 0 24 179 topology 259 561 -> 15 0 24 179 topology 453 562 -> 16 0 24 179 topology 454 562 -> 15 0 24 179 topology 183 563 -> 16 0 24 179 topology 185 563 -> 15 0 24 179 topology 237 564 -> 16 0 24 179 topology 239 564 -> 15 0 23 179 topology 301 565 -> 16 0 23 179 topology 460 565 -> 15 0 23 179 topology 223 566 -> 16 0 23 179 topology 460 566 -> 15 0 24 179 topology 432 567 -> 16 0 24 179 topology 433 567 -> 15 0 23 179 topology 194 568 -> 16 0 23 179 topology 460 568 -> 15 0 23 179 topology 421 569 -> 16 0 23 179 topology 460 569 -> 15 0 23 179 topology 343 570 -> 16 0 23 179 topology 460 570 -> 15 0 24 179 topology 411 571 -> 16 0 24 179 topology 412 571 -> 15 0 23 179 topology 265 572 -> 16 0 23 179 topology 460 572 -> 15 0 24 179 topology 303 573 -> 16 0 24 179 topology 305 573 -> 15 0 23 179 topology 385 574 -> 16 0 23 179 topology 460 574 -> 15 0 24 179 topology 228 575 -> 16 0 24 179 topology 230 575 -> 15 0 24 179 topology 237 576 -> 16 0 24 179 topology 238 576 -> 15 0 24 179 topology 369 577 -> 16 0 24 179 topology 371 577 -> 15 0 23 179 topology 212 578 -> 16 0 23 179 topology 460 578 -> 15 0 24 179 topology 216 579 -> 16 0 24 179 topology 217 579 -> 15 0 23 179 topology 196 580 -> 16 0 23 179 topology 460 580 -> 15 0 23 179 topology 248 581 -> 16 0 23 179 topology 460 581 -> 15 0 24 179 topology 294 582 -> 16 0 24 179 topology 296 582 -> 15 0 23 179 topology 284 583 -> 16 0 23 179 topology 460 583 -> 15 0 24 179 topology 435 584 -> 16 0 24 179 topology 437 584 -> 15 0 24 179 topology 390 585 -> 16 0 24 179 topology 391 585 -> 15 0 23 179 topology 452 586 -> 16 0 23 179 topology 460 586 -> 15 0 23 179 topology 320 587 -> 16 0 23 179 topology 460 587 -> 15 0 24 179 topology 369 588 -> 16 0 24 179 topology 370 588 -> 15 0 23 179 topology 356 589 -> 16 0 23 179 topology 460 589 -> 15 0 23 179 topology 208 590 -> 16 0 23 179 topology 460 590 -> 15 0 24 179 topology 348 591 -> 16 0 24 179 topology 349 591 -> 15 0 23 179 topology 328 592 -> 16 0 23 179 topology 460 592 -> 15 0 23 179 topology 185 593 -> 16 0 23 179 topology 460 593 -> 15 0 23 179 topology 250 594 -> 16 0 23 179 topology 460 594 -> 15 0 23 179 topology 448 595 -> 16 0 23 179 topology 460 595 -> 15 0 23 179 topology 370 596 -> 16 0 23 179 topology 460 596 -> 15 0 24 179 topology 246 597 -> 16 0 24 179 topology 248 597 -> 15 0 23 179 topology 292 598 -> 16 0 23 179 topology 460 598 -> 15 0 24 179 topology 387 599 -> 16 0 24 179 topology 389 599 -> 15 0 23 179 topology 412 600 -> 16 0 23 179 topology 460 600 -> 15 0 23 179 topology 181 601 -> 16 0 23 179 topology 460 601 -> 15 0 24 179 topology 312 602 -> 16 0 24 179 topology 314 602 -> 15 0 23 179 topology 239 603 -> 16 0 23 179 topology 460 603 -> 15 0 24 179 topology 453 604 -> 16 0 24 179 topology 455 604 -> 15 0 24 179 topology 327 605 -> 16 0 24 179 topology 328 605 -> 15 0 23 179 topology 275 606 -> 16 0 23 179 topology 460 606 -> 15 0 24 179 topology 378 607 -> 16 0 24 179 topology 380 607 -> 15 0 24 179 topology 306 608 -> 16 0 24 179 topology 307 608 -> 15 0 23 179 topology 311 609 -> 16 0 23 179 topology 460 609 -> 15 0 23 179 topology 347 610 -> 16 0 23 179 topology 460 610 -> 15 0 24 462 topology 469 611 -> 16 0 24 462 topology 471 611 -> 15 0 23 462 topology 474 612 +> 15 0 24 179 topology 459 424 +> 16 0 24 179 topology 460 424 +> 15 0 25 179 topology 207 425 +> 16 0 25 179 topology 209 425 +> 15 0 25 179 topology 207 426 +> 16 0 25 179 topology 208 426 +> 15 0 25 179 topology 210 427 +> 16 0 25 179 topology 212 427 +> 15 0 25 179 topology 210 428 +> 16 0 25 179 topology 211 428 +> 15 0 25 179 topology 213 429 +> 16 0 25 179 topology 215 429 +> 15 0 25 179 topology 213 430 +> 16 0 25 179 topology 214 430 +> 15 0 25 179 topology 216 431 +> 16 0 25 179 topology 218 431 +> 15 0 25 179 topology 216 432 +> 16 0 25 179 topology 217 432 +> 15 0 25 179 topology 219 433 +> 16 0 25 179 topology 221 433 +> 15 0 25 179 topology 219 434 +> 16 0 25 179 topology 220 434 +> 15 0 25 179 topology 222 435 +> 16 0 25 179 topology 224 435 +> 15 0 25 179 topology 222 436 +> 16 0 25 179 topology 223 436 +> 15 0 25 179 topology 225 437 +> 16 0 25 179 topology 227 437 +> 15 0 25 179 topology 225 438 +> 16 0 25 179 topology 226 438 +> 15 0 25 179 topology 228 439 +> 16 0 25 179 topology 230 439 +> 15 0 25 179 topology 228 440 +> 16 0 25 179 topology 229 440 +> 15 0 25 179 topology 231 441 +> 16 0 25 179 topology 233 441 +> 15 0 25 179 topology 231 442 +> 16 0 25 179 topology 232 442 +> 15 0 25 179 topology 234 443 +> 16 0 25 179 topology 236 443 +> 15 0 25 179 topology 234 444 +> 16 0 25 179 topology 235 444 +> 15 0 25 179 topology 180 445 +> 16 0 25 179 topology 182 445 +> 15 0 25 179 topology 180 446 +> 16 0 25 179 topology 181 446 +> 15 0 25 179 topology 237 447 +> 16 0 25 179 topology 239 447 +> 15 0 25 179 topology 237 448 +> 16 0 25 179 topology 238 448 +> 15 0 25 179 topology 240 449 +> 16 0 25 179 topology 242 449 +> 15 0 25 179 topology 240 450 +> 16 0 25 179 topology 241 450 +> 15 0 25 179 topology 243 451 +> 16 0 25 179 topology 245 451 +> 15 0 25 179 topology 243 452 +> 16 0 25 179 topology 244 452 +> 15 0 25 179 topology 246 453 +> 16 0 25 179 topology 248 453 +> 15 0 25 179 topology 246 454 +> 16 0 25 179 topology 247 454 +> 15 0 25 179 topology 249 455 +> 16 0 25 179 topology 251 455 +> 15 0 25 179 topology 249 456 +> 16 0 25 179 topology 250 456 +> 15 0 25 179 topology 252 457 +> 16 0 25 179 topology 254 457 +> 15 0 25 179 topology 252 458 +> 16 0 25 179 topology 253 458 +> 15 0 25 179 topology 255 459 +> 16 0 25 179 topology 257 459 +> 15 0 25 179 topology 255 460 +> 16 0 25 179 topology 256 460 +> 15 0 25 179 topology 258 461 +> 16 0 25 179 topology 260 461 +> 15 0 25 179 topology 258 462 +> 16 0 25 179 topology 259 462 +> 15 0 25 179 topology 261 463 +> 16 0 25 179 topology 263 463 +> 15 0 25 179 topology 261 464 +> 16 0 25 179 topology 262 464 +> 15 0 25 179 topology 264 465 +> 16 0 25 179 topology 266 465 +> 15 0 25 179 topology 264 466 +> 16 0 25 179 topology 265 466 +> 15 0 25 179 topology 183 467 +> 16 0 25 179 topology 185 467 +> 15 0 25 179 topology 183 468 +> 16 0 25 179 topology 184 468 +> 15 0 25 179 topology 267 469 +> 16 0 25 179 topology 269 469 +> 15 0 25 179 topology 267 470 +> 16 0 25 179 topology 268 470 +> 15 0 25 179 topology 270 471 +> 16 0 25 179 topology 272 471 +> 15 0 25 179 topology 270 472 +> 16 0 25 179 topology 271 472 +> 15 0 25 179 topology 273 473 +> 16 0 25 179 topology 275 473 +> 15 0 25 179 topology 273 474 +> 16 0 25 179 topology 274 474 +> 15 0 25 179 topology 276 475 +> 16 0 25 179 topology 278 475 +> 15 0 25 179 topology 276 476 +> 16 0 25 179 topology 277 476 +> 15 0 25 179 topology 279 477 +> 16 0 25 179 topology 281 477 +> 15 0 25 179 topology 279 478 +> 16 0 25 179 topology 280 478 +> 15 0 25 179 topology 282 479 +> 16 0 25 179 topology 284 479 +> 15 0 25 179 topology 282 480 +> 16 0 25 179 topology 283 480 +> 15 0 25 179 topology 285 481 +> 16 0 25 179 topology 287 481 +> 15 0 25 179 topology 285 482 +> 16 0 25 179 topology 286 482 +> 15 0 25 179 topology 288 483 +> 16 0 25 179 topology 290 483 +> 15 0 25 179 topology 288 484 +> 16 0 25 179 topology 289 484 +> 15 0 25 179 topology 291 485 +> 16 0 25 179 topology 293 485 +> 15 0 25 179 topology 291 486 +> 16 0 25 179 topology 292 486 +> 15 0 25 179 topology 294 487 +> 16 0 25 179 topology 296 487 +> 15 0 25 179 topology 294 488 +> 16 0 25 179 topology 295 488 +> 15 0 25 179 topology 186 489 +> 16 0 25 179 topology 188 489 +> 15 0 25 179 topology 186 490 +> 16 0 25 179 topology 187 490 +> 15 0 25 179 topology 297 491 +> 16 0 25 179 topology 299 491 +> 15 0 25 179 topology 297 492 +> 16 0 25 179 topology 298 492 +> 15 0 25 179 topology 300 493 +> 16 0 25 179 topology 302 493 +> 15 0 25 179 topology 300 494 +> 16 0 25 179 topology 301 494 +> 15 0 25 179 topology 303 495 +> 16 0 25 179 topology 305 495 +> 15 0 25 179 topology 303 496 +> 16 0 25 179 topology 304 496 +> 15 0 25 179 topology 306 497 +> 16 0 25 179 topology 308 497 +> 15 0 25 179 topology 306 498 +> 16 0 25 179 topology 307 498 +> 15 0 25 179 topology 309 499 +> 16 0 25 179 topology 311 499 +> 15 0 25 179 topology 309 500 +> 16 0 25 179 topology 310 500 +> 15 0 25 179 topology 312 501 +> 16 0 25 179 topology 314 501 +> 15 0 25 179 topology 312 502 +> 16 0 25 179 topology 313 502 +> 15 0 25 179 topology 315 503 +> 16 0 25 179 topology 317 503 +> 15 0 25 179 topology 315 504 +> 16 0 25 179 topology 316 504 +> 15 0 25 179 topology 318 505 +> 16 0 25 179 topology 320 505 +> 15 0 25 179 topology 318 506 +> 16 0 25 179 topology 319 506 +> 15 0 25 179 topology 321 507 +> 16 0 25 179 topology 323 507 +> 15 0 25 179 topology 321 508 +> 16 0 25 179 topology 322 508 +> 15 0 25 179 topology 324 509 +> 16 0 25 179 topology 326 509 +> 15 0 25 179 topology 324 510 +> 16 0 25 179 topology 325 510 +> 15 0 25 179 topology 189 511 +> 16 0 25 179 topology 191 511 +> 15 0 25 179 topology 189 512 +> 16 0 25 179 topology 190 512 +> 15 0 25 179 topology 327 513 +> 16 0 25 179 topology 329 513 +> 15 0 25 179 topology 327 514 +> 16 0 25 179 topology 328 514 +> 15 0 25 179 topology 330 515 +> 16 0 25 179 topology 332 515 +> 15 0 25 179 topology 330 516 +> 16 0 25 179 topology 331 516 +> 15 0 25 179 topology 333 517 +> 16 0 25 179 topology 335 517 +> 15 0 25 179 topology 333 518 +> 16 0 25 179 topology 334 518 +> 15 0 25 179 topology 336 519 +> 16 0 25 179 topology 338 519 +> 15 0 25 179 topology 336 520 +> 16 0 25 179 topology 337 520 +> 15 0 25 179 topology 339 521 +> 16 0 25 179 topology 341 521 +> 15 0 25 179 topology 339 522 +> 16 0 25 179 topology 340 522 +> 15 0 25 179 topology 342 523 +> 16 0 25 179 topology 344 523 +> 15 0 25 179 topology 342 524 +> 16 0 25 179 topology 343 524 +> 15 0 25 179 topology 345 525 +> 16 0 25 179 topology 347 525 +> 15 0 25 179 topology 345 526 +> 16 0 25 179 topology 346 526 +> 15 0 25 179 topology 348 527 +> 16 0 25 179 topology 350 527 +> 15 0 25 179 topology 348 528 +> 16 0 25 179 topology 349 528 +> 15 0 25 179 topology 351 529 +> 16 0 25 179 topology 353 529 +> 15 0 25 179 topology 351 530 +> 16 0 25 179 topology 352 530 +> 15 0 25 179 topology 354 531 +> 16 0 25 179 topology 356 531 +> 15 0 25 179 topology 354 532 +> 16 0 25 179 topology 355 532 +> 15 0 25 179 topology 192 533 +> 16 0 25 179 topology 194 533 +> 15 0 25 179 topology 192 534 +> 16 0 25 179 topology 193 534 +> 15 0 25 179 topology 357 535 +> 16 0 25 179 topology 359 535 +> 15 0 25 179 topology 357 536 +> 16 0 25 179 topology 358 536 +> 15 0 25 179 topology 360 537 +> 16 0 25 179 topology 362 537 +> 15 0 25 179 topology 360 538 +> 16 0 25 179 topology 361 538 +> 15 0 25 179 topology 363 539 +> 16 0 25 179 topology 365 539 +> 15 0 25 179 topology 363 540 +> 16 0 25 179 topology 364 540 +> 15 0 25 179 topology 366 541 +> 16 0 25 179 topology 368 541 +> 15 0 25 179 topology 366 542 +> 16 0 25 179 topology 367 542 +> 15 0 25 179 topology 369 543 +> 16 0 25 179 topology 371 543 +> 15 0 25 179 topology 369 544 +> 16 0 25 179 topology 370 544 +> 15 0 25 179 topology 372 545 +> 16 0 25 179 topology 374 545 +> 15 0 25 179 topology 372 546 +> 16 0 25 179 topology 373 546 +> 15 0 25 179 topology 375 547 +> 16 0 25 179 topology 377 547 +> 15 0 25 179 topology 375 548 +> 16 0 25 179 topology 376 548 +> 15 0 25 179 topology 378 549 +> 16 0 25 179 topology 380 549 +> 15 0 25 179 topology 378 550 +> 16 0 25 179 topology 379 550 +> 15 0 25 179 topology 381 551 +> 16 0 25 179 topology 383 551 +> 15 0 25 179 topology 381 552 +> 16 0 25 179 topology 382 552 +> 15 0 25 179 topology 384 553 +> 16 0 25 179 topology 386 553 +> 15 0 25 179 topology 384 554 +> 16 0 25 179 topology 385 554 +> 15 0 25 179 topology 195 555 +> 16 0 25 179 topology 197 555 +> 15 0 25 179 topology 195 556 +> 16 0 25 179 topology 196 556 +> 15 0 25 179 topology 387 557 +> 16 0 25 179 topology 389 557 +> 15 0 25 179 topology 387 558 +> 16 0 25 179 topology 388 558 +> 15 0 25 179 topology 390 559 +> 16 0 25 179 topology 392 559 +> 15 0 25 179 topology 390 560 +> 16 0 25 179 topology 391 560 +> 15 0 25 179 topology 393 561 +> 16 0 25 179 topology 395 561 +> 15 0 25 179 topology 393 562 +> 16 0 25 179 topology 394 562 +> 15 0 25 179 topology 396 563 +> 16 0 25 179 topology 398 563 +> 15 0 25 179 topology 396 564 +> 16 0 25 179 topology 397 564 +> 15 0 25 179 topology 399 565 +> 16 0 25 179 topology 401 565 +> 15 0 25 179 topology 399 566 +> 16 0 25 179 topology 400 566 +> 15 0 25 179 topology 402 567 +> 16 0 25 179 topology 404 567 +> 15 0 25 179 topology 402 568 +> 16 0 25 179 topology 403 568 +> 15 0 25 179 topology 405 569 +> 16 0 25 179 topology 407 569 +> 15 0 25 179 topology 405 570 +> 16 0 25 179 topology 406 570 +> 15 0 25 179 topology 408 571 +> 16 0 25 179 topology 410 571 +> 15 0 25 179 topology 408 572 +> 16 0 25 179 topology 409 572 +> 15 0 25 179 topology 411 573 +> 16 0 25 179 topology 413 573 +> 15 0 25 179 topology 411 574 +> 16 0 25 179 topology 412 574 +> 15 0 25 179 topology 414 575 +> 16 0 25 179 topology 416 575 +> 15 0 25 179 topology 414 576 +> 16 0 25 179 topology 415 576 +> 15 0 25 179 topology 198 577 +> 16 0 25 179 topology 200 577 +> 15 0 25 179 topology 198 578 +> 16 0 25 179 topology 199 578 +> 15 0 25 179 topology 417 579 +> 16 0 25 179 topology 419 579 +> 15 0 25 179 topology 417 580 +> 16 0 25 179 topology 418 580 +> 15 0 25 179 topology 420 581 +> 16 0 25 179 topology 422 581 +> 15 0 25 179 topology 420 582 +> 16 0 25 179 topology 421 582 +> 15 0 25 179 topology 423 583 +> 16 0 25 179 topology 425 583 +> 15 0 25 179 topology 423 584 +> 16 0 25 179 topology 424 584 +> 15 0 25 179 topology 426 585 +> 16 0 25 179 topology 428 585 +> 15 0 25 179 topology 426 586 +> 16 0 25 179 topology 427 586 +> 15 0 25 179 topology 429 587 +> 16 0 25 179 topology 431 587 +> 15 0 25 179 topology 429 588 +> 16 0 25 179 topology 430 588 +> 15 0 25 179 topology 432 589 +> 16 0 25 179 topology 434 589 +> 15 0 25 179 topology 432 590 +> 16 0 25 179 topology 433 590 +> 15 0 25 179 topology 435 591 +> 16 0 25 179 topology 437 591 +> 15 0 25 179 topology 435 592 +> 16 0 25 179 topology 436 592 +> 15 0 25 179 topology 438 593 +> 16 0 25 179 topology 440 593 +> 15 0 25 179 topology 438 594 +> 16 0 25 179 topology 439 594 +> 15 0 25 179 topology 441 595 +> 16 0 25 179 topology 443 595 +> 15 0 25 179 topology 441 596 +> 16 0 25 179 topology 442 596 +> 15 0 25 179 topology 444 597 +> 16 0 25 179 topology 446 597 +> 15 0 25 179 topology 444 598 +> 16 0 25 179 topology 445 598 +> 15 0 25 179 topology 201 599 +> 16 0 25 179 topology 203 599 +> 15 0 25 179 topology 201 600 +> 16 0 25 179 topology 202 600 +> 15 0 25 179 topology 447 601 +> 16 0 25 179 topology 449 601 +> 15 0 25 179 topology 447 602 +> 16 0 25 179 topology 448 602 +> 15 0 25 179 topology 450 603 +> 16 0 25 179 topology 452 603 +> 15 0 25 179 topology 450 604 +> 16 0 25 179 topology 451 604 +> 15 0 25 179 topology 453 605 +> 16 0 25 179 topology 455 605 +> 15 0 25 179 topology 453 606 +> 16 0 25 179 topology 454 606 +> 15 0 25 179 topology 456 607 +> 16 0 25 179 topology 458 607 +> 15 0 25 179 topology 456 608 +> 16 0 25 179 topology 457 608 +> 15 0 25 179 topology 204 609 +> 16 0 25 179 topology 206 609 +> 15 0 25 179 topology 204 610 +> 16 0 25 179 topology 205 610 +> 15 0 23 462 topology 492 611 +> 16 0 23 462 topology 494 611 +> 15 0 23 462 topology 491 612 > 16 0 23 462 topology 494 612 -> 15 0 23 462 topology 486 613 +> 15 0 23 462 topology 465 613 > 16 0 23 462 topology 494 613 -> 15 0 24 462 topology 481 614 -> 16 0 24 462 topology 483 614 -> 15 0 24 462 topology 469 615 -> 16 0 24 462 topology 470 615 -> 15 0 23 462 topology 470 616 +> 15 0 23 462 topology 464 614 +> 16 0 23 462 topology 494 614 +> 15 0 23 462 topology 468 615 +> 16 0 23 462 topology 494 615 +> 15 0 23 462 topology 467 616 > 16 0 23 462 topology 494 616 -> 15 0 23 462 topology 482 617 +> 15 0 23 462 topology 471 617 > 16 0 23 462 topology 494 617 -> 15 0 24 462 topology 481 618 -> 16 0 24 462 topology 482 618 -> 15 0 23 462 topology 465 619 +> 15 0 23 462 topology 470 618 +> 16 0 23 462 topology 494 618 +> 15 0 23 462 topology 474 619 > 16 0 23 462 topology 494 619 -> 15 0 24 462 topology 466 620 -> 16 0 24 462 topology 468 620 +> 15 0 23 462 topology 473 620 +> 16 0 23 462 topology 494 620 > 15 0 23 462 topology 477 621 > 16 0 23 462 topology 494 621 -> 15 0 24 462 topology 478 622 -> 16 0 24 462 topology 480 622 -> 15 0 23 462 topology 489 623 +> 15 0 23 462 topology 476 622 +> 16 0 23 462 topology 494 622 +> 15 0 23 462 topology 480 623 > 16 0 23 462 topology 494 623 -> 15 0 23 462 topology 467 624 +> 15 0 23 462 topology 479 624 > 16 0 23 462 topology 494 624 -> 15 0 24 462 topology 472 625 -> 16 0 24 462 topology 473 625 -> 15 0 23 462 topology 479 626 +> 15 0 23 462 topology 483 625 +> 16 0 23 462 topology 494 625 +> 15 0 23 462 topology 482 626 > 16 0 23 462 topology 494 626 -> 15 0 24 462 topology 484 627 -> 16 0 24 462 topology 485 627 -> 15 0 24 462 topology 463 628 -> 16 0 24 462 topology 465 628 -> 15 0 24 462 topology 490 629 -> 16 0 24 462 topology 492 629 -> 15 0 23 462 topology 468 630 +> 15 0 23 462 topology 486 627 +> 16 0 23 462 topology 494 627 +> 15 0 23 462 topology 485 628 +> 16 0 23 462 topology 494 628 +> 15 0 23 462 topology 489 629 +> 16 0 23 462 topology 494 629 +> 15 0 23 462 topology 488 630 > 16 0 23 462 topology 494 630 -> 15 0 23 462 topology 480 631 -> 16 0 23 462 topology 494 631 -> 15 0 25 462 topology 493 632 -> 16 0 25 462 topology 494 632 -> 15 0 24 462 topology 475 633 -> 16 0 24 462 topology 477 633 -> 15 0 24 462 topology 463 634 -> 16 0 24 462 topology 464 634 -> 15 0 23 462 topology 464 635 -> 16 0 23 462 topology 494 635 -> 15 0 24 462 topology 487 636 -> 16 0 24 462 topology 489 636 -> 15 0 23 462 topology 492 637 -> 16 0 23 462 topology 494 637 -> 15 0 23 462 topology 476 638 -> 16 0 23 462 topology 494 638 -> 15 0 24 462 topology 475 639 -> 16 0 24 462 topology 476 639 -> 15 0 23 462 topology 488 640 -> 16 0 23 462 topology 494 640 -> 15 0 24 462 topology 487 641 -> 16 0 24 462 topology 488 641 -> 15 0 23 462 topology 471 642 -> 16 0 23 462 topology 494 642 -> 15 0 24 462 topology 472 643 -> 16 0 24 462 topology 474 643 -> 15 0 23 462 topology 483 644 -> 16 0 23 462 topology 494 644 -> 15 0 24 462 topology 490 645 -> 16 0 24 462 topology 491 645 -> 15 0 24 462 topology 484 646 -> 16 0 24 462 topology 486 646 -> 15 0 24 462 topology 466 647 -> 16 0 24 462 topology 467 647 -> 15 0 23 462 topology 473 648 -> 16 0 23 462 topology 494 648 -> 15 0 23 462 topology 485 649 -> 16 0 23 462 topology 494 649 -> 15 0 24 462 topology 478 650 -> 16 0 24 462 topology 479 650 -> 15 0 23 462 topology 491 651 -> 16 0 23 462 topology 494 651 +> 15 0 24 462 topology 493 631 +> 16 0 24 462 topology 494 631 +> 15 0 25 462 topology 490 632 +> 16 0 25 462 topology 492 632 +> 15 0 25 462 topology 490 633 +> 16 0 25 462 topology 491 633 +> 15 0 25 462 topology 463 634 +> 16 0 25 462 topology 465 634 +> 15 0 25 462 topology 463 635 +> 16 0 25 462 topology 464 635 +> 15 0 25 462 topology 466 636 +> 16 0 25 462 topology 468 636 +> 15 0 25 462 topology 466 637 +> 16 0 25 462 topology 467 637 +> 15 0 25 462 topology 469 638 +> 16 0 25 462 topology 471 638 +> 15 0 25 462 topology 469 639 +> 16 0 25 462 topology 470 639 +> 15 0 25 462 topology 472 640 +> 16 0 25 462 topology 474 640 +> 15 0 25 462 topology 472 641 +> 16 0 25 462 topology 473 641 +> 15 0 25 462 topology 475 642 +> 16 0 25 462 topology 477 642 +> 15 0 25 462 topology 475 643 +> 16 0 25 462 topology 476 643 +> 15 0 25 462 topology 478 644 +> 16 0 25 462 topology 480 644 +> 15 0 25 462 topology 478 645 +> 16 0 25 462 topology 479 645 +> 15 0 25 462 topology 481 646 +> 16 0 25 462 topology 483 646 +> 15 0 25 462 topology 481 647 +> 16 0 25 462 topology 482 647 +> 15 0 25 462 topology 484 648 +> 16 0 25 462 topology 486 648 +> 15 0 25 462 topology 484 649 +> 16 0 25 462 topology 485 649 +> 15 0 25 462 topology 487 650 +> 16 0 25 462 topology 489 650 +> 15 0 25 462 topology 487 651 +> 16 0 25 462 topology 488 651 > 15 0 26 21 topology 461 652 -> 16 0 26 21 topology 497 652 -> 15 0 21 21 topology 178 653 -> 16 0 21 21 topology 495 653 -> 15 0 21 21 topology 461 654 -> 16 0 21 21 topology 495 654 -> 15 0 21 21 topology 178 655 -> 16 0 21 21 topology 461 655 -> 15 0 27 21 topology 176 656 -> 16 0 27 21 topology 178 656 -> 15 0 26 21 topology 461 657 -> 16 0 26 21 topology 459 657 -> 15 0 26 21 topology 495 658 -> 16 0 26 21 topology 493 658 -> 15 0 26 21 topology 495 659 -> 16 0 26 21 topology 497 659 -> 15 0 26 21 topology 178 660 -> 16 0 26 21 topology 497 660 -> 15 0 23 500 topology 514 661 +> 16 0 26 21 topology 459 652 +> 15 0 26 21 topology 495 653 +> 16 0 26 21 topology 493 653 +> 15 0 26 21 topology 178 654 +> 16 0 26 21 topology 497 654 +> 15 0 26 21 topology 461 655 +> 16 0 26 21 topology 497 655 +> 15 0 26 21 topology 495 656 +> 16 0 26 21 topology 497 656 +> 15 0 27 21 topology 176 657 +> 16 0 27 21 topology 178 657 +> 15 0 20 21 topology 178 658 +> 16 0 20 21 topology 461 658 +> 15 0 20 21 topology 178 659 +> 16 0 20 21 topology 495 659 +> 15 0 20 21 topology 461 660 +> 16 0 20 21 topology 495 660 +> 15 0 23 500 topology 530 661 > 16 0 23 500 topology 538 661 -> 15 0 23 500 topology 526 662 +> 15 0 23 500 topology 529 662 > 16 0 23 500 topology 538 662 -> 15 0 24 500 topology 507 663 -> 16 0 24 500 topology 509 663 -> 15 0 24 500 topology 519 664 -> 16 0 24 500 topology 521 664 -> 15 0 23 500 topology 532 665 +> 15 0 23 500 topology 533 663 +> 16 0 23 500 topology 538 663 +> 15 0 23 500 topology 532 664 +> 16 0 23 500 topology 538 664 +> 15 0 23 500 topology 536 665 > 16 0 23 500 topology 538 665 -> 15 0 23 500 topology 509 666 +> 15 0 23 500 topology 535 666 > 16 0 23 500 topology 538 666 -> 15 0 24 500 topology 507 667 -> 16 0 24 500 topology 508 667 -> 15 0 23 500 topology 521 668 +> 15 0 23 500 topology 503 667 +> 16 0 23 500 topology 538 667 +> 15 0 23 500 topology 502 668 > 16 0 23 500 topology 538 668 -> 15 0 24 500 topology 519 669 -> 16 0 24 500 topology 520 669 -> 15 0 23 500 topology 511 670 +> 15 0 23 500 topology 506 669 +> 16 0 23 500 topology 538 669 +> 15 0 23 500 topology 505 670 > 16 0 23 500 topology 538 670 -> 15 0 23 500 topology 533 671 +> 15 0 23 500 topology 509 671 > 16 0 23 500 topology 538 671 -> 15 0 24 500 topology 504 672 -> 16 0 24 500 topology 506 672 -> 15 0 23 500 topology 523 673 +> 15 0 23 500 topology 508 672 +> 16 0 23 500 topology 538 672 +> 15 0 23 500 topology 512 673 > 16 0 23 500 topology 538 673 -> 15 0 24 500 topology 516 674 -> 16 0 24 500 topology 518 674 -> 15 0 23 500 topology 529 675 +> 15 0 23 500 topology 511 674 +> 16 0 23 500 topology 538 674 +> 15 0 23 500 topology 515 675 > 16 0 23 500 topology 538 675 -> 15 0 24 500 topology 531 676 -> 16 0 24 500 topology 532 676 -> 15 0 23 500 topology 512 677 +> 15 0 23 500 topology 514 676 +> 16 0 23 500 topology 538 676 +> 15 0 23 500 topology 518 677 > 16 0 23 500 topology 538 677 -> 15 0 24 500 topology 510 678 -> 16 0 24 500 topology 511 678 -> 15 0 23 500 topology 524 679 +> 15 0 23 500 topology 517 678 +> 16 0 23 500 topology 538 678 +> 15 0 23 500 topology 521 679 > 16 0 23 500 topology 538 679 -> 15 0 24 500 topology 522 680 -> 16 0 24 500 topology 523 680 -> 15 0 23 500 topology 508 681 +> 15 0 23 500 topology 520 680 +> 16 0 23 500 topology 538 680 +> 15 0 23 500 topology 524 681 > 16 0 23 500 topology 538 681 -> 15 0 24 500 topology 501 682 -> 16 0 24 500 topology 503 682 -> 15 0 24 500 topology 528 683 -> 16 0 24 500 topology 530 683 -> 15 0 23 500 topology 536 684 +> 15 0 23 500 topology 523 682 +> 16 0 23 500 topology 538 682 +> 15 0 23 500 topology 527 683 +> 16 0 23 500 topology 538 683 +> 15 0 23 500 topology 526 684 > 16 0 23 500 topology 538 684 -> 15 0 23 500 topology 520 685 -> 16 0 23 500 topology 538 685 -> 15 0 24 500 topology 531 686 -> 16 0 24 500 topology 533 686 -> 15 0 24 500 topology 534 687 -> 16 0 24 500 topology 536 687 -> 15 0 24 500 topology 513 688 -> 16 0 24 500 topology 515 688 -> 15 0 24 500 topology 501 689 -> 16 0 24 500 topology 502 689 -> 15 0 23 500 topology 503 690 -> 16 0 23 500 topology 538 690 -> 15 0 24 500 topology 525 691 -> 16 0 24 500 topology 527 691 -> 15 0 23 500 topology 515 692 -> 16 0 23 500 topology 538 692 -> 15 0 24 500 topology 513 693 -> 16 0 24 500 topology 514 693 -> 15 0 23 500 topology 527 694 -> 16 0 23 500 topology 538 694 -> 15 0 23 500 topology 505 695 -> 16 0 23 500 topology 538 695 -> 15 0 24 500 topology 525 696 -> 16 0 24 500 topology 526 696 -> 15 0 25 500 topology 537 697 -> 16 0 25 500 topology 538 697 -> 15 0 23 500 topology 517 698 -> 16 0 23 500 topology 538 698 -> 15 0 24 500 topology 510 699 -> 16 0 24 500 topology 512 699 -> 15 0 24 500 topology 528 700 -> 16 0 24 500 topology 529 700 -> 15 0 23 500 topology 535 701 -> 16 0 23 500 topology 538 701 -> 15 0 24 500 topology 522 702 -> 16 0 24 500 topology 524 702 -> 15 0 24 500 topology 504 703 -> 16 0 24 500 topology 505 703 -> 15 0 23 500 topology 506 704 -> 16 0 23 500 topology 538 704 -> 15 0 24 500 topology 534 705 -> 16 0 24 500 topology 535 705 -> 15 0 23 500 topology 518 706 -> 16 0 23 500 topology 538 706 -> 15 0 24 500 topology 516 707 -> 16 0 24 500 topology 517 707 -> 15 0 23 500 topology 502 708 -> 16 0 23 500 topology 538 708 -> 15 0 23 500 topology 530 709 -> 16 0 23 500 topology 538 709 -> 15 0 23 540 topology 732 710 +> 15 0 24 500 topology 537 685 +> 16 0 24 500 topology 538 685 +> 15 0 25 500 topology 528 686 +> 16 0 25 500 topology 530 686 +> 15 0 25 500 topology 528 687 +> 16 0 25 500 topology 529 687 +> 15 0 25 500 topology 531 688 +> 16 0 25 500 topology 533 688 +> 15 0 25 500 topology 531 689 +> 16 0 25 500 topology 532 689 +> 15 0 25 500 topology 534 690 +> 16 0 25 500 topology 536 690 +> 15 0 25 500 topology 534 691 +> 16 0 25 500 topology 535 691 +> 15 0 25 500 topology 501 692 +> 16 0 25 500 topology 503 692 +> 15 0 25 500 topology 501 693 +> 16 0 25 500 topology 502 693 +> 15 0 25 500 topology 504 694 +> 16 0 25 500 topology 506 694 +> 15 0 25 500 topology 504 695 +> 16 0 25 500 topology 505 695 +> 15 0 25 500 topology 507 696 +> 16 0 25 500 topology 509 696 +> 15 0 25 500 topology 507 697 +> 16 0 25 500 topology 508 697 +> 15 0 25 500 topology 510 698 +> 16 0 25 500 topology 512 698 +> 15 0 25 500 topology 510 699 +> 16 0 25 500 topology 511 699 +> 15 0 25 500 topology 513 700 +> 16 0 25 500 topology 515 700 +> 15 0 25 500 topology 513 701 +> 16 0 25 500 topology 514 701 +> 15 0 25 500 topology 516 702 +> 16 0 25 500 topology 518 702 +> 15 0 25 500 topology 516 703 +> 16 0 25 500 topology 517 703 +> 15 0 25 500 topology 519 704 +> 16 0 25 500 topology 521 704 +> 15 0 25 500 topology 519 705 +> 16 0 25 500 topology 520 705 +> 15 0 25 500 topology 522 706 +> 16 0 25 500 topology 524 706 +> 15 0 25 500 topology 522 707 +> 16 0 25 500 topology 523 707 +> 15 0 25 500 topology 525 708 +> 16 0 25 500 topology 527 708 +> 15 0 25 500 topology 525 709 +> 16 0 25 500 topology 526 709 +> 15 0 23 540 topology 570 710 > 16 0 23 540 topology 758 710 -> 15 0 24 540 topology 607 711 -> 16 0 24 540 topology 609 711 -> 15 0 23 540 topology 684 712 +> 15 0 23 540 topology 569 711 +> 16 0 23 540 topology 758 711 +> 15 0 23 540 topology 573 712 > 16 0 23 540 topology 758 712 -> 15 0 24 540 topology 745 713 -> 16 0 24 540 topology 746 713 -> 15 0 24 540 topology 637 714 -> 16 0 24 540 topology 639 714 -> 15 0 24 540 topology 667 715 -> 16 0 24 540 topology 669 715 -> 15 0 24 540 topology 541 716 -> 16 0 24 540 topology 542 716 +> 15 0 23 540 topology 572 713 +> 16 0 23 540 topology 758 713 +> 15 0 23 540 topology 576 714 +> 16 0 23 540 topology 758 714 +> 15 0 23 540 topology 575 715 +> 16 0 23 540 topology 758 715 +> 15 0 23 540 topology 579 716 +> 16 0 23 540 topology 758 716 > 15 0 23 540 topology 578 717 > 16 0 23 540 topology 758 717 -> 15 0 24 540 topology 589 718 -> 16 0 24 540 topology 591 718 -> 15 0 24 540 topology 697 719 -> 16 0 24 540 topology 699 719 -> 15 0 24 540 topology 619 720 -> 16 0 24 540 topology 621 720 -> 15 0 23 540 topology 638 721 +> 15 0 23 540 topology 582 718 +> 16 0 23 540 topology 758 718 +> 15 0 23 540 topology 581 719 +> 16 0 23 540 topology 758 719 +> 15 0 23 540 topology 585 720 +> 16 0 23 540 topology 758 720 +> 15 0 23 540 topology 584 721 > 16 0 23 540 topology 758 721 -> 15 0 24 540 topology 727 722 -> 16 0 24 540 topology 729 722 -> 15 0 23 540 topology 555 723 +> 15 0 23 540 topology 588 722 +> 16 0 23 540 topology 758 722 +> 15 0 23 540 topology 587 723 > 16 0 23 540 topology 758 723 -> 15 0 24 540 topology 649 724 -> 16 0 24 540 topology 651 724 -> 15 0 23 540 topology 698 725 +> 15 0 23 540 topology 591 724 +> 16 0 23 540 topology 758 724 +> 15 0 23 540 topology 590 725 > 16 0 23 540 topology 758 725 -> 15 0 23 540 topology 620 726 +> 15 0 23 540 topology 594 726 > 16 0 23 540 topology 758 726 -> 15 0 24 540 topology 679 727 -> 16 0 24 540 topology 681 727 -> 15 0 23 540 topology 680 728 +> 15 0 23 540 topology 593 727 +> 16 0 23 540 topology 758 727 +> 15 0 23 540 topology 597 728 > 16 0 23 540 topology 758 728 -> 15 0 24 540 topology 709 729 -> 16 0 24 540 topology 711 729 -> 15 0 23 540 topology 740 730 +> 15 0 23 540 topology 596 729 +> 16 0 23 540 topology 758 729 +> 15 0 23 540 topology 543 730 > 16 0 23 540 topology 758 730 -> 15 0 24 540 topology 739 731 -> 16 0 24 540 topology 741 731 -> 15 0 25 540 topology 757 732 -> 16 0 25 540 topology 758 732 -> 15 0 23 540 topology 545 733 +> 15 0 23 540 topology 542 731 +> 16 0 23 540 topology 758 731 +> 15 0 23 540 topology 600 732 +> 16 0 23 540 topology 758 732 +> 15 0 23 540 topology 599 733 > 16 0 23 540 topology 758 733 -> 15 0 24 540 topology 565 734 -> 16 0 24 540 topology 566 734 -> 15 0 23 540 topology 603 735 +> 15 0 23 540 topology 603 734 +> 16 0 23 540 topology 758 734 +> 15 0 23 540 topology 602 735 > 16 0 23 540 topology 758 735 -> 15 0 23 540 topology 639 736 +> 15 0 23 540 topology 606 736 > 16 0 23 540 topology 758 736 -> 15 0 23 540 topology 723 737 +> 15 0 23 540 topology 605 737 > 16 0 23 540 topology 758 737 -> 15 0 23 540 topology 591 738 +> 15 0 23 540 topology 609 738 > 16 0 23 540 topology 758 738 -> 15 0 23 540 topology 675 739 +> 15 0 23 540 topology 608 739 > 16 0 23 540 topology 758 739 -> 15 0 23 540 topology 627 740 +> 15 0 23 540 topology 612 740 > 16 0 23 540 topology 758 740 -> 15 0 23 540 topology 711 741 +> 15 0 23 540 topology 611 741 > 16 0 23 540 topology 758 741 -> 15 0 23 540 topology 747 742 +> 15 0 23 540 topology 615 742 > 16 0 23 540 topology 758 742 -> 15 0 24 540 topology 562 743 -> 16 0 24 540 topology 564 743 -> 15 0 23 540 topology 605 744 +> 15 0 23 540 topology 614 743 +> 16 0 23 540 topology 758 743 +> 15 0 23 540 topology 618 744 > 16 0 23 540 topology 758 744 -> 15 0 23 540 topology 546 745 +> 15 0 23 540 topology 617 745 > 16 0 23 540 topology 758 745 -> 15 0 24 540 topology 571 746 -> 16 0 24 540 topology 572 746 -> 15 0 23 540 topology 665 747 +> 15 0 23 540 topology 621 746 +> 16 0 23 540 topology 758 746 +> 15 0 23 540 topology 620 747 > 16 0 23 540 topology 758 747 -> 15 0 23 540 topology 587 748 +> 15 0 23 540 topology 624 748 > 16 0 23 540 topology 758 748 -> 15 0 24 540 topology 628 749 -> 16 0 24 540 topology 629 749 -> 15 0 23 540 topology 725 750 +> 15 0 23 540 topology 623 749 +> 16 0 23 540 topology 758 749 +> 15 0 23 540 topology 627 750 > 16 0 23 540 topology 758 750 -> 15 0 24 540 topology 550 751 -> 16 0 24 540 topology 551 751 -> 15 0 24 540 topology 577 752 -> 16 0 24 540 topology 578 752 -> 15 0 23 540 topology 647 753 +> 15 0 23 540 topology 626 751 +> 16 0 23 540 topology 758 751 +> 15 0 23 540 topology 546 752 +> 16 0 23 540 topology 758 752 +> 15 0 23 540 topology 545 753 > 16 0 23 540 topology 758 753 -> 15 0 24 540 topology 634 754 -> 16 0 24 540 topology 635 754 -> 15 0 23 540 topology 707 755 +> 15 0 23 540 topology 630 754 +> 16 0 23 540 topology 758 754 +> 15 0 23 540 topology 629 755 > 16 0 23 540 topology 758 755 -> 15 0 24 540 topology 583 756 -> 16 0 24 540 topology 584 756 -> 15 0 24 540 topology 691 757 -> 16 0 24 540 topology 692 757 -> 15 0 24 540 topology 640 758 -> 16 0 24 540 topology 641 758 -> 15 0 24 540 topology 748 759 -> 16 0 24 540 topology 749 759 -> 15 0 24 540 topology 589 760 -> 16 0 24 540 topology 590 760 -> 15 0 24 540 topology 697 761 -> 16 0 24 540 topology 698 761 -> 15 0 24 540 topology 646 762 -> 16 0 24 540 topology 647 762 -> 15 0 24 540 topology 754 763 -> 16 0 24 540 topology 755 763 -> 15 0 23 540 topology 554 764 +> 15 0 23 540 topology 633 756 +> 16 0 23 540 topology 758 756 +> 15 0 23 540 topology 632 757 +> 16 0 23 540 topology 758 757 +> 15 0 23 540 topology 636 758 +> 16 0 23 540 topology 758 758 +> 15 0 23 540 topology 635 759 +> 16 0 23 540 topology 758 759 +> 15 0 23 540 topology 639 760 +> 16 0 23 540 topology 758 760 +> 15 0 23 540 topology 638 761 +> 16 0 23 540 topology 758 761 +> 15 0 23 540 topology 642 762 +> 16 0 23 540 topology 758 762 +> 15 0 23 540 topology 641 763 +> 16 0 23 540 topology 758 763 +> 15 0 23 540 topology 645 764 > 16 0 23 540 topology 758 764 -> 15 0 24 540 topology 595 765 -> 16 0 24 540 topology 596 765 -> 15 0 24 540 topology 703 766 -> 16 0 24 540 topology 704 766 -> 15 0 23 540 topology 630 767 +> 15 0 23 540 topology 644 765 +> 16 0 23 540 topology 758 765 +> 15 0 23 540 topology 648 766 +> 16 0 23 540 topology 758 766 +> 15 0 23 540 topology 647 767 > 16 0 23 540 topology 758 767 -> 15 0 24 540 topology 652 768 -> 16 0 24 540 topology 653 768 -> 15 0 23 540 topology 582 769 +> 15 0 23 540 topology 651 768 +> 16 0 23 540 topology 758 768 +> 15 0 23 540 topology 650 769 > 16 0 23 540 topology 758 769 -> 15 0 23 540 topology 666 770 +> 15 0 23 540 topology 654 770 > 16 0 23 540 topology 758 770 -> 15 0 24 540 topology 709 771 -> 16 0 24 540 topology 710 771 -> 15 0 24 540 topology 574 772 -> 16 0 24 540 topology 576 772 -> 15 0 23 540 topology 750 773 +> 15 0 23 540 topology 653 771 +> 16 0 23 540 topology 758 771 +> 15 0 23 540 topology 657 772 +> 16 0 23 540 topology 758 772 +> 15 0 23 540 topology 656 773 > 16 0 23 540 topology 758 773 -> 15 0 23 540 topology 618 774 +> 15 0 23 540 topology 549 774 > 16 0 23 540 topology 758 774 -> 15 0 24 540 topology 604 775 -> 16 0 24 540 topology 606 775 -> 15 0 23 540 topology 702 776 +> 15 0 23 540 topology 548 775 +> 16 0 23 540 topology 758 775 +> 15 0 23 540 topology 660 776 > 16 0 23 540 topology 758 776 -> 15 0 24 540 topology 715 777 -> 16 0 24 540 topology 716 777 -> 15 0 24 540 topology 553 778 -> 16 0 24 540 topology 555 778 -> 15 0 24 540 topology 634 779 -> 16 0 24 540 topology 636 779 -> 15 0 23 540 topology 654 780 +> 15 0 23 540 topology 659 777 +> 16 0 23 540 topology 758 777 +> 15 0 23 540 topology 663 778 +> 16 0 23 540 topology 758 778 +> 15 0 23 540 topology 662 779 +> 16 0 23 540 topology 758 779 +> 15 0 23 540 topology 666 780 > 16 0 23 540 topology 758 780 -> 15 0 23 540 topology 738 781 +> 15 0 23 540 topology 665 781 > 16 0 23 540 topology 758 781 -> 15 0 24 540 topology 664 782 -> 16 0 24 540 topology 666 782 -> 15 0 23 540 topology 572 783 +> 15 0 23 540 topology 669 782 +> 16 0 23 540 topology 758 782 +> 15 0 23 540 topology 668 783 > 16 0 23 540 topology 758 783 -> 15 0 24 540 topology 586 784 -> 16 0 24 540 topology 588 784 -> 15 0 24 540 topology 694 785 -> 16 0 24 540 topology 696 785 -> 15 0 24 540 topology 616 786 -> 16 0 24 540 topology 618 786 -> 15 0 23 540 topology 632 787 +> 15 0 23 540 topology 672 784 +> 16 0 23 540 topology 758 784 +> 15 0 23 540 topology 671 785 +> 16 0 23 540 topology 758 785 +> 15 0 23 540 topology 675 786 +> 16 0 23 540 topology 758 786 +> 15 0 23 540 topology 674 787 > 16 0 23 540 topology 758 787 -> 15 0 24 540 topology 724 788 -> 16 0 24 540 topology 726 788 -> 15 0 24 540 topology 646 789 -> 16 0 24 540 topology 648 789 -> 15 0 23 540 topology 692 790 +> 15 0 23 540 topology 678 788 +> 16 0 23 540 topology 758 788 +> 15 0 23 540 topology 677 789 +> 16 0 23 540 topology 758 789 +> 15 0 23 540 topology 681 790 > 16 0 23 540 topology 758 790 -> 15 0 24 540 topology 754 791 -> 16 0 24 540 topology 756 791 -> 15 0 23 540 topology 614 792 +> 15 0 23 540 topology 680 791 +> 16 0 23 540 topology 758 791 +> 15 0 23 540 topology 684 792 > 16 0 23 540 topology 758 792 -> 15 0 24 540 topology 676 793 -> 16 0 24 540 topology 678 793 -> 15 0 23 540 topology 752 794 +> 15 0 23 540 topology 683 793 +> 16 0 23 540 topology 758 793 +> 15 0 23 540 topology 687 794 > 16 0 23 540 topology 758 794 -> 15 0 23 540 topology 674 795 +> 15 0 23 540 topology 686 795 > 16 0 23 540 topology 758 795 -> 15 0 23 540 topology 561 796 +> 15 0 23 540 topology 552 796 > 16 0 23 540 topology 758 796 -> 15 0 23 540 topology 596 797 +> 15 0 23 540 topology 551 797 > 16 0 23 540 topology 758 797 -> 15 0 24 540 topology 706 798 -> 16 0 24 540 topology 708 798 -> 15 0 23 540 topology 734 799 +> 15 0 23 540 topology 690 798 +> 16 0 23 540 topology 758 798 +> 15 0 23 540 topology 689 799 > 16 0 23 540 topology 758 799 -> 15 0 23 540 topology 656 800 +> 15 0 23 540 topology 693 800 > 16 0 23 540 topology 758 800 -> 15 0 24 540 topology 736 801 -> 16 0 24 540 topology 738 801 -> 15 0 23 540 topology 716 802 +> 15 0 23 540 topology 692 801 +> 16 0 23 540 topology 758 801 +> 15 0 23 540 topology 696 802 > 16 0 23 540 topology 758 802 -> 15 0 24 540 topology 559 803 -> 16 0 24 540 topology 560 803 -> 15 0 23 540 topology 573 804 +> 15 0 23 540 topology 695 803 +> 16 0 23 540 topology 758 803 +> 15 0 23 540 topology 699 804 > 16 0 23 540 topology 758 804 -> 15 0 24 540 topology 544 805 -> 16 0 24 540 topology 546 805 -> 15 0 23 540 topology 563 806 +> 15 0 23 540 topology 698 805 +> 16 0 23 540 topology 758 805 +> 15 0 23 540 topology 702 806 > 16 0 23 540 topology 758 806 -> 15 0 23 540 topology 609 807 +> 15 0 23 540 topology 701 807 > 16 0 23 540 topology 758 807 -> 15 0 23 540 topology 693 808 +> 15 0 23 540 topology 705 808 > 16 0 23 540 topology 758 808 -> 15 0 23 540 topology 645 809 +> 15 0 23 540 topology 704 809 > 16 0 23 540 topology 758 809 -> 15 0 23 540 topology 729 810 +> 15 0 23 540 topology 708 810 > 16 0 23 540 topology 758 810 -> 15 0 23 540 topology 597 811 +> 15 0 23 540 topology 707 811 > 16 0 23 540 topology 758 811 -> 15 0 23 540 topology 681 812 +> 15 0 23 540 topology 711 812 > 16 0 23 540 topology 758 812 -> 15 0 23 540 topology 717 813 +> 15 0 23 540 topology 710 813 > 16 0 23 540 topology 758 813 -> 15 0 23 540 topology 599 814 +> 15 0 23 540 topology 714 814 > 16 0 23 540 topology 758 814 -> 15 0 23 540 topology 659 815 +> 15 0 23 540 topology 713 815 > 16 0 23 540 topology 758 815 -> 15 0 24 540 topology 544 816 -> 16 0 24 540 topology 545 816 -> 15 0 23 540 topology 581 817 +> 15 0 23 540 topology 717 816 +> 16 0 23 540 topology 758 816 +> 15 0 23 540 topology 716 817 > 16 0 23 540 topology 758 817 -> 15 0 24 540 topology 598 818 -> 16 0 24 540 topology 599 818 -> 15 0 23 540 topology 719 819 +> 15 0 23 540 topology 555 818 +> 16 0 23 540 topology 758 818 +> 15 0 23 540 topology 554 819 > 16 0 23 540 topology 758 819 -> 15 0 23 540 topology 552 820 +> 15 0 23 540 topology 720 820 > 16 0 23 540 topology 758 820 -> 15 0 23 540 topology 641 821 +> 15 0 23 540 topology 719 821 > 16 0 23 540 topology 758 821 -> 15 0 24 540 topology 604 822 -> 16 0 24 540 topology 605 822 -> 15 0 23 540 topology 701 823 +> 15 0 23 540 topology 723 822 +> 16 0 23 540 topology 758 822 +> 15 0 23 540 topology 722 823 > 16 0 23 540 topology 758 823 -> 15 0 23 540 topology 623 824 +> 15 0 23 540 topology 726 824 > 16 0 23 540 topology 758 824 -> 15 0 24 540 topology 661 825 -> 16 0 24 540 topology 662 825 -> 15 0 23 540 topology 683 826 +> 15 0 23 540 topology 725 825 +> 16 0 23 540 topology 758 825 +> 15 0 23 540 topology 729 826 > 16 0 23 540 topology 758 826 -> 15 0 24 540 topology 610 827 -> 16 0 24 540 topology 611 827 -> 15 0 24 540 topology 718 828 -> 16 0 24 540 topology 719 828 -> 15 0 23 540 topology 743 829 +> 15 0 23 540 topology 728 827 +> 16 0 23 540 topology 758 827 +> 15 0 23 540 topology 732 828 +> 16 0 23 540 topology 758 828 +> 15 0 23 540 topology 731 829 > 16 0 23 540 topology 758 829 -> 15 0 24 540 topology 667 830 -> 16 0 24 540 topology 668 830 -> 15 0 24 540 topology 616 831 -> 16 0 24 540 topology 617 831 -> 15 0 24 540 topology 724 832 -> 16 0 24 540 topology 725 832 -> 15 0 23 540 topology 548 833 +> 15 0 23 540 topology 735 830 +> 16 0 23 540 topology 758 830 +> 15 0 23 540 topology 734 831 +> 16 0 23 540 topology 758 831 +> 15 0 23 540 topology 738 832 +> 16 0 23 540 topology 758 832 +> 15 0 23 540 topology 737 833 > 16 0 23 540 topology 758 833 -> 15 0 24 540 topology 673 834 -> 16 0 24 540 topology 674 834 -> 15 0 23 540 topology 600 835 +> 15 0 23 540 topology 741 834 +> 16 0 23 540 topology 758 834 +> 15 0 23 540 topology 740 835 > 16 0 23 540 topology 758 835 -> 15 0 24 540 topology 622 836 -> 16 0 24 540 topology 623 836 -> 15 0 24 540 topology 730 837 -> 16 0 24 540 topology 731 837 -> 15 0 24 540 topology 679 838 -> 16 0 24 540 topology 680 838 -> 15 0 24 540 topology 571 839 -> 16 0 24 540 topology 573 839 -> 15 0 23 540 topology 636 840 +> 15 0 23 540 topology 744 836 +> 16 0 23 540 topology 758 836 +> 15 0 23 540 topology 743 837 +> 16 0 23 540 topology 758 837 +> 15 0 23 540 topology 747 838 +> 16 0 23 540 topology 758 838 +> 15 0 23 540 topology 746 839 +> 16 0 23 540 topology 758 839 +> 15 0 23 540 topology 558 840 > 16 0 23 540 topology 758 840 -> 15 0 23 540 topology 720 841 +> 15 0 23 540 topology 557 841 > 16 0 23 540 topology 758 841 -> 15 0 24 540 topology 736 842 -> 16 0 24 540 topology 737 842 -> 15 0 23 540 topology 588 843 +> 15 0 23 540 topology 750 842 +> 16 0 23 540 topology 758 842 +> 15 0 23 540 topology 749 843 > 16 0 23 540 topology 758 843 -> 15 0 24 540 topology 601 844 -> 16 0 24 540 topology 603 844 -> 15 0 23 540 topology 672 845 +> 15 0 23 540 topology 753 844 +> 16 0 23 540 topology 758 844 +> 15 0 23 540 topology 752 845 > 16 0 23 540 topology 758 845 -> 15 0 24 540 topology 685 846 -> 16 0 24 540 topology 686 846 -> 15 0 24 540 topology 631 847 -> 16 0 24 540 topology 633 847 -> 15 0 23 540 topology 756 848 +> 15 0 23 540 topology 756 846 +> 16 0 23 540 topology 758 846 +> 15 0 23 540 topology 755 847 +> 16 0 23 540 topology 758 847 +> 15 0 23 540 topology 561 848 > 16 0 23 540 topology 758 848 -> 15 0 23 540 topology 624 849 +> 15 0 23 540 topology 560 849 > 16 0 23 540 topology 758 849 -> 15 0 24 540 topology 742 850 -> 16 0 24 540 topology 743 850 -> 15 0 23 540 topology 708 851 +> 15 0 23 540 topology 564 850 +> 16 0 23 540 topology 758 850 +> 15 0 23 540 topology 563 851 > 16 0 23 540 topology 758 851 -> 15 0 24 540 topology 661 852 -> 16 0 24 540 topology 663 852 -> 15 0 24 540 topology 691 853 -> 16 0 24 540 topology 693 853 -> 15 0 24 540 topology 583 854 -> 16 0 24 540 topology 585 854 -> 15 0 23 540 topology 744 855 -> 16 0 23 540 topology 758 855 -> 15 0 24 540 topology 613 856 -> 16 0 24 540 topology 615 856 -> 15 0 24 540 topology 559 857 -> 16 0 24 540 topology 561 857 -> 15 0 24 540 topology 721 858 -> 16 0 24 540 topology 723 858 -> 15 0 24 540 topology 643 859 -> 16 0 24 540 topology 645 859 -> 15 0 23 540 topology 543 860 -> 16 0 23 540 topology 758 860 -> 15 0 24 540 topology 751 861 -> 16 0 24 540 topology 753 861 -> 15 0 23 540 topology 608 862 -> 16 0 23 540 topology 758 862 -> 15 0 24 540 topology 673 863 -> 16 0 24 540 topology 675 863 -> 15 0 23 540 topology 668 864 -> 16 0 23 540 topology 758 864 -> 15 0 24 540 topology 703 865 -> 16 0 24 540 topology 705 865 -> 15 0 24 540 topology 595 866 -> 16 0 24 540 topology 597 866 -> 15 0 23 540 topology 590 867 -> 16 0 23 540 topology 758 867 -> 15 0 23 540 topology 728 868 -> 16 0 23 540 topology 758 868 -> 15 0 23 540 topology 650 869 -> 16 0 23 540 topology 758 869 -> 15 0 24 540 topology 625 870 -> 16 0 24 540 topology 627 870 -> 15 0 24 540 topology 733 871 -> 16 0 24 540 topology 735 871 -> 15 0 24 540 topology 553 872 -> 16 0 24 540 topology 554 872 -> 15 0 23 540 topology 710 873 -> 16 0 23 540 topology 758 873 -> 15 0 24 540 topology 655 874 -> 16 0 24 540 topology 657 874 -> 15 0 23 540 topology 567 875 -> 16 0 23 540 topology 758 875 -> 15 0 24 540 topology 685 876 -> 16 0 24 540 topology 687 876 -> 15 0 24 540 topology 715 877 -> 16 0 24 540 topology 717 877 -> 15 0 24 540 topology 745 878 -> 16 0 24 540 topology 747 878 -> 15 0 23 540 topology 557 879 -> 16 0 23 540 topology 758 879 -> 15 0 23 540 topology 579 880 -> 16 0 23 540 topology 758 880 -> 15 0 23 540 topology 663 881 -> 16 0 23 540 topology 758 881 -> 15 0 23 540 topology 615 882 -> 16 0 23 540 topology 758 882 -> 15 0 23 540 topology 699 883 -> 16 0 23 540 topology 758 883 -> 15 0 24 540 topology 550 884 -> 16 0 24 540 topology 552 884 -> 15 0 23 540 topology 651 885 -> 16 0 23 540 topology 758 885 -> 15 0 23 540 topology 735 886 -> 16 0 23 540 topology 758 886 -> 15 0 23 540 topology 687 887 -> 16 0 23 540 topology 758 887 -> 15 0 23 540 topology 575 888 -> 16 0 23 540 topology 758 888 -> 15 0 24 540 topology 568 889 -> 16 0 24 540 topology 569 889 -> 15 0 23 540 topology 635 890 -> 16 0 23 540 topology 758 890 -> 15 0 23 540 topology 695 891 -> 16 0 23 540 topology 758 891 -> 15 0 24 540 topology 574 892 -> 16 0 24 540 topology 575 892 -> 15 0 23 540 topology 617 893 -> 16 0 23 540 topology 758 893 -> 15 0 24 540 topology 631 894 -> 16 0 24 540 topology 632 894 -> 15 0 23 540 topology 558 895 -> 16 0 23 540 topology 758 895 -> 15 0 23 540 topology 755 896 -> 16 0 23 540 topology 758 896 -> 15 0 23 540 topology 677 897 -> 16 0 23 540 topology 758 897 -> 15 0 24 540 topology 688 898 -> 16 0 24 540 topology 689 898 -> 15 0 24 540 topology 580 899 -> 16 0 24 540 topology 581 899 -> 15 0 23 540 topology 737 900 -> 16 0 23 540 topology 758 900 -> 15 0 24 540 topology 637 901 -> 16 0 24 540 topology 638 901 -> 15 0 24 540 topology 694 902 -> 16 0 24 540 topology 695 902 -> 15 0 24 540 topology 586 903 -> 16 0 24 540 topology 587 903 -> 15 0 24 540 topology 643 904 -> 16 0 24 540 topology 644 904 -> 15 0 24 540 topology 562 905 -> 16 0 24 540 topology 563 905 -> 15 0 23 540 topology 542 906 -> 16 0 23 540 topology 758 906 -> 15 0 24 540 topology 751 907 -> 16 0 24 540 topology 752 907 -> 15 0 24 540 topology 700 908 -> 16 0 24 540 topology 701 908 -> 15 0 24 540 topology 592 909 -> 16 0 24 540 topology 593 909 -> 15 0 23 540 topology 570 910 -> 16 0 23 540 topology 758 910 -> 15 0 24 540 topology 649 911 -> 16 0 24 540 topology 650 911 -> 15 0 24 540 topology 568 912 -> 16 0 24 540 topology 570 912 -> 15 0 24 540 topology 541 913 -> 16 0 24 540 topology 543 913 -> 15 0 24 540 topology 706 914 -> 16 0 24 540 topology 707 914 -> 15 0 23 540 topology 606 915 -> 16 0 23 540 topology 758 915 -> 15 0 23 540 topology 690 916 -> 16 0 23 540 topology 758 916 -> 15 0 24 540 topology 598 917 -> 16 0 24 540 topology 600 917 -> 15 0 24 540 topology 655 918 -> 16 0 24 540 topology 656 918 -> 15 0 23 540 topology 566 919 -> 16 0 23 540 topology 758 919 -> 15 0 23 540 topology 642 920 -> 16 0 23 540 topology 758 920 -> 15 0 24 540 topology 628 921 -> 16 0 24 540 topology 630 921 -> 15 0 24 540 topology 712 922 -> 16 0 24 540 topology 713 922 -> 15 0 23 540 topology 726 923 -> 16 0 23 540 topology 758 923 -> 15 0 24 540 topology 658 924 -> 16 0 24 540 topology 660 924 -> 15 0 23 540 topology 594 925 -> 16 0 23 540 topology 758 925 -> 15 0 23 540 topology 678 926 -> 16 0 23 540 topology 758 926 -> 15 0 24 540 topology 688 927 -> 16 0 24 540 topology 690 927 -> 15 0 24 540 topology 580 928 -> 16 0 24 540 topology 582 928 -> 15 0 24 540 topology 610 929 -> 16 0 24 540 topology 612 929 -> 15 0 23 540 topology 714 930 -> 16 0 23 540 topology 758 930 -> 15 0 24 540 topology 718 931 -> 16 0 24 540 topology 720 931 -> 15 0 24 540 topology 640 932 -> 16 0 24 540 topology 642 932 -> 15 0 24 540 topology 748 933 -> 16 0 24 540 topology 750 933 -> 15 0 23 540 topology 602 934 -> 16 0 23 540 topology 758 934 -> 15 0 24 540 topology 670 935 -> 16 0 24 540 topology 672 935 -> 15 0 23 540 topology 662 936 -> 16 0 23 540 topology 758 936 -> 15 0 24 540 topology 700 937 -> 16 0 24 540 topology 702 937 -> 15 0 24 540 topology 592 938 -> 16 0 24 540 topology 594 938 -> 15 0 23 540 topology 584 939 -> 16 0 23 540 topology 758 939 -> 15 0 24 540 topology 565 940 -> 16 0 24 540 topology 567 940 -> 15 0 23 540 topology 549 941 -> 16 0 23 540 topology 758 941 -> 15 0 24 540 topology 547 942 -> 16 0 24 540 topology 548 942 -> 15 0 23 540 topology 722 943 -> 16 0 23 540 topology 758 943 -> 15 0 23 540 topology 644 944 -> 16 0 23 540 topology 758 944 -> 15 0 24 540 topology 622 945 -> 16 0 24 540 topology 624 945 -> 15 0 24 540 topology 730 946 -> 16 0 24 540 topology 732 946 -> 15 0 23 540 topology 704 947 -> 16 0 23 540 topology 758 947 -> 15 0 24 540 topology 652 948 -> 16 0 24 540 topology 654 948 -> 15 0 23 540 topology 626 949 -> 16 0 23 540 topology 758 949 -> 15 0 24 540 topology 682 950 -> 16 0 24 540 topology 684 950 -> 15 0 23 540 topology 686 951 -> 16 0 23 540 topology 758 951 -> 15 0 24 540 topology 712 952 -> 16 0 24 540 topology 714 952 -> 15 0 23 540 topology 746 953 -> 16 0 23 540 topology 758 953 -> 15 0 24 540 topology 742 954 -> 16 0 24 540 topology 744 954 -> 15 0 23 540 topology 551 955 -> 16 0 23 540 topology 758 955 -> 15 0 23 540 topology 633 956 -> 16 0 23 540 topology 758 956 -> 15 0 23 540 topology 585 957 -> 16 0 23 540 topology 758 957 -> 15 0 23 540 topology 669 958 -> 16 0 23 540 topology 758 958 -> 15 0 23 540 topology 753 959 -> 16 0 23 540 topology 758 959 -> 15 0 23 540 topology 621 960 -> 16 0 23 540 topology 758 960 -> 15 0 23 540 topology 705 961 -> 16 0 23 540 topology 758 961 -> 15 0 23 540 topology 657 962 -> 16 0 23 540 topology 758 962 -> 15 0 24 540 topology 556 963 -> 16 0 24 540 topology 558 963 -> 15 0 23 540 topology 741 964 -> 16 0 23 540 topology 758 964 -> 15 0 23 540 topology 569 965 -> 16 0 23 540 topology 758 965 -> 15 0 23 540 topology 629 966 -> 16 0 23 540 topology 758 966 -> 15 0 23 540 topology 689 967 -> 16 0 23 540 topology 758 967 -> 15 0 23 540 topology 611 968 -> 16 0 23 540 topology 758 968 -> 15 0 24 540 topology 601 969 -> 16 0 24 540 topology 602 969 -> 15 0 23 540 topology 749 970 -> 16 0 23 540 topology 758 970 -> 15 0 23 540 topology 671 971 -> 16 0 23 540 topology 758 971 -> 15 0 24 540 topology 658 972 -> 16 0 24 540 topology 659 972 -> 15 0 23 540 topology 593 973 -> 16 0 23 540 topology 758 973 -> 15 0 23 540 topology 731 974 -> 16 0 23 540 topology 758 974 -> 15 0 23 540 topology 653 975 -> 16 0 23 540 topology 758 975 -> 15 0 24 540 topology 607 976 -> 16 0 24 540 topology 608 976 -> 15 0 23 540 topology 564 977 -> 16 0 23 540 topology 758 977 -> 15 0 23 540 topology 713 978 -> 16 0 23 540 topology 758 978 -> 15 0 24 540 topology 664 979 -> 16 0 24 540 topology 665 979 -> 15 0 24 540 topology 556 980 -> 16 0 24 540 topology 557 980 -> 15 0 24 540 topology 613 981 -> 16 0 24 540 topology 614 981 -> 15 0 24 540 topology 721 982 -> 16 0 24 540 topology 722 982 -> 15 0 24 540 topology 670 983 -> 16 0 24 540 topology 671 983 -> 15 0 24 540 topology 619 984 -> 16 0 24 540 topology 620 984 -> 15 0 24 540 topology 727 985 -> 16 0 24 540 topology 728 985 -> 15 0 24 540 topology 676 986 -> 16 0 24 540 topology 677 986 -> 15 0 23 540 topology 576 987 -> 16 0 23 540 topology 758 987 -> 15 0 23 540 topology 660 988 -> 16 0 23 540 topology 758 988 -> 15 0 24 540 topology 625 989 -> 16 0 24 540 topology 626 989 -> 15 0 23 540 topology 560 990 -> 16 0 23 540 topology 758 990 -> 15 0 24 540 topology 733 991 -> 16 0 24 540 topology 734 991 -> 15 0 24 540 topology 682 992 -> 16 0 24 540 topology 683 992 -> 15 0 23 540 topology 612 993 -> 16 0 23 540 topology 758 993 -> 15 0 23 540 topology 696 994 -> 16 0 23 540 topology 758 994 -> 15 0 24 540 topology 547 995 -> 16 0 24 540 topology 549 995 -> 15 0 24 540 topology 739 996 -> 16 0 24 540 topology 740 996 -> 15 0 23 540 topology 648 997 -> 16 0 23 540 topology 758 997 -> 15 0 24 540 topology 577 998 -> 16 0 24 540 topology 579 998 -> 15 0 24 760 topology 779 999 -> 16 0 24 760 topology 781 999 -> 15 0 23 760 topology 792 1000 +> 15 0 23 540 topology 567 852 +> 16 0 23 540 topology 758 852 +> 15 0 23 540 topology 566 853 +> 16 0 23 540 topology 758 853 +> 15 0 24 540 topology 757 854 +> 16 0 24 540 topology 758 854 +> 15 0 25 540 topology 568 855 +> 16 0 25 540 topology 570 855 +> 15 0 25 540 topology 568 856 +> 16 0 25 540 topology 569 856 +> 15 0 25 540 topology 571 857 +> 16 0 25 540 topology 573 857 +> 15 0 25 540 topology 571 858 +> 16 0 25 540 topology 572 858 +> 15 0 25 540 topology 574 859 +> 16 0 25 540 topology 576 859 +> 15 0 25 540 topology 574 860 +> 16 0 25 540 topology 575 860 +> 15 0 25 540 topology 577 861 +> 16 0 25 540 topology 579 861 +> 15 0 25 540 topology 577 862 +> 16 0 25 540 topology 578 862 +> 15 0 25 540 topology 580 863 +> 16 0 25 540 topology 582 863 +> 15 0 25 540 topology 580 864 +> 16 0 25 540 topology 581 864 +> 15 0 25 540 topology 583 865 +> 16 0 25 540 topology 585 865 +> 15 0 25 540 topology 583 866 +> 16 0 25 540 topology 584 866 +> 15 0 25 540 topology 586 867 +> 16 0 25 540 topology 588 867 +> 15 0 25 540 topology 586 868 +> 16 0 25 540 topology 587 868 +> 15 0 25 540 topology 589 869 +> 16 0 25 540 topology 591 869 +> 15 0 25 540 topology 589 870 +> 16 0 25 540 topology 590 870 +> 15 0 25 540 topology 592 871 +> 16 0 25 540 topology 594 871 +> 15 0 25 540 topology 592 872 +> 16 0 25 540 topology 593 872 +> 15 0 25 540 topology 595 873 +> 16 0 25 540 topology 597 873 +> 15 0 25 540 topology 595 874 +> 16 0 25 540 topology 596 874 +> 15 0 25 540 topology 541 875 +> 16 0 25 540 topology 543 875 +> 15 0 25 540 topology 541 876 +> 16 0 25 540 topology 542 876 +> 15 0 25 540 topology 598 877 +> 16 0 25 540 topology 600 877 +> 15 0 25 540 topology 598 878 +> 16 0 25 540 topology 599 878 +> 15 0 25 540 topology 601 879 +> 16 0 25 540 topology 603 879 +> 15 0 25 540 topology 601 880 +> 16 0 25 540 topology 602 880 +> 15 0 25 540 topology 604 881 +> 16 0 25 540 topology 606 881 +> 15 0 25 540 topology 604 882 +> 16 0 25 540 topology 605 882 +> 15 0 25 540 topology 607 883 +> 16 0 25 540 topology 609 883 +> 15 0 25 540 topology 607 884 +> 16 0 25 540 topology 608 884 +> 15 0 25 540 topology 610 885 +> 16 0 25 540 topology 612 885 +> 15 0 25 540 topology 610 886 +> 16 0 25 540 topology 611 886 +> 15 0 25 540 topology 613 887 +> 16 0 25 540 topology 615 887 +> 15 0 25 540 topology 613 888 +> 16 0 25 540 topology 614 888 +> 15 0 25 540 topology 616 889 +> 16 0 25 540 topology 618 889 +> 15 0 25 540 topology 616 890 +> 16 0 25 540 topology 617 890 +> 15 0 25 540 topology 619 891 +> 16 0 25 540 topology 621 891 +> 15 0 25 540 topology 619 892 +> 16 0 25 540 topology 620 892 +> 15 0 25 540 topology 622 893 +> 16 0 25 540 topology 624 893 +> 15 0 25 540 topology 622 894 +> 16 0 25 540 topology 623 894 +> 15 0 25 540 topology 625 895 +> 16 0 25 540 topology 627 895 +> 15 0 25 540 topology 625 896 +> 16 0 25 540 topology 626 896 +> 15 0 25 540 topology 544 897 +> 16 0 25 540 topology 546 897 +> 15 0 25 540 topology 544 898 +> 16 0 25 540 topology 545 898 +> 15 0 25 540 topology 628 899 +> 16 0 25 540 topology 630 899 +> 15 0 25 540 topology 628 900 +> 16 0 25 540 topology 629 900 +> 15 0 25 540 topology 631 901 +> 16 0 25 540 topology 633 901 +> 15 0 25 540 topology 631 902 +> 16 0 25 540 topology 632 902 +> 15 0 25 540 topology 634 903 +> 16 0 25 540 topology 636 903 +> 15 0 25 540 topology 634 904 +> 16 0 25 540 topology 635 904 +> 15 0 25 540 topology 637 905 +> 16 0 25 540 topology 639 905 +> 15 0 25 540 topology 637 906 +> 16 0 25 540 topology 638 906 +> 15 0 25 540 topology 640 907 +> 16 0 25 540 topology 642 907 +> 15 0 25 540 topology 640 908 +> 16 0 25 540 topology 641 908 +> 15 0 25 540 topology 643 909 +> 16 0 25 540 topology 645 909 +> 15 0 25 540 topology 643 910 +> 16 0 25 540 topology 644 910 +> 15 0 25 540 topology 646 911 +> 16 0 25 540 topology 648 911 +> 15 0 25 540 topology 646 912 +> 16 0 25 540 topology 647 912 +> 15 0 25 540 topology 649 913 +> 16 0 25 540 topology 651 913 +> 15 0 25 540 topology 649 914 +> 16 0 25 540 topology 650 914 +> 15 0 25 540 topology 652 915 +> 16 0 25 540 topology 654 915 +> 15 0 25 540 topology 652 916 +> 16 0 25 540 topology 653 916 +> 15 0 25 540 topology 655 917 +> 16 0 25 540 topology 657 917 +> 15 0 25 540 topology 655 918 +> 16 0 25 540 topology 656 918 +> 15 0 25 540 topology 547 919 +> 16 0 25 540 topology 549 919 +> 15 0 25 540 topology 547 920 +> 16 0 25 540 topology 548 920 +> 15 0 25 540 topology 658 921 +> 16 0 25 540 topology 660 921 +> 15 0 25 540 topology 658 922 +> 16 0 25 540 topology 659 922 +> 15 0 25 540 topology 661 923 +> 16 0 25 540 topology 663 923 +> 15 0 25 540 topology 661 924 +> 16 0 25 540 topology 662 924 +> 15 0 25 540 topology 664 925 +> 16 0 25 540 topology 666 925 +> 15 0 25 540 topology 664 926 +> 16 0 25 540 topology 665 926 +> 15 0 25 540 topology 667 927 +> 16 0 25 540 topology 669 927 +> 15 0 25 540 topology 667 928 +> 16 0 25 540 topology 668 928 +> 15 0 25 540 topology 670 929 +> 16 0 25 540 topology 672 929 +> 15 0 25 540 topology 670 930 +> 16 0 25 540 topology 671 930 +> 15 0 25 540 topology 673 931 +> 16 0 25 540 topology 675 931 +> 15 0 25 540 topology 673 932 +> 16 0 25 540 topology 674 932 +> 15 0 25 540 topology 676 933 +> 16 0 25 540 topology 678 933 +> 15 0 25 540 topology 676 934 +> 16 0 25 540 topology 677 934 +> 15 0 25 540 topology 679 935 +> 16 0 25 540 topology 681 935 +> 15 0 25 540 topology 679 936 +> 16 0 25 540 topology 680 936 +> 15 0 25 540 topology 682 937 +> 16 0 25 540 topology 684 937 +> 15 0 25 540 topology 682 938 +> 16 0 25 540 topology 683 938 +> 15 0 25 540 topology 685 939 +> 16 0 25 540 topology 687 939 +> 15 0 25 540 topology 685 940 +> 16 0 25 540 topology 686 940 +> 15 0 25 540 topology 550 941 +> 16 0 25 540 topology 552 941 +> 15 0 25 540 topology 550 942 +> 16 0 25 540 topology 551 942 +> 15 0 25 540 topology 688 943 +> 16 0 25 540 topology 690 943 +> 15 0 25 540 topology 688 944 +> 16 0 25 540 topology 689 944 +> 15 0 25 540 topology 691 945 +> 16 0 25 540 topology 693 945 +> 15 0 25 540 topology 691 946 +> 16 0 25 540 topology 692 946 +> 15 0 25 540 topology 694 947 +> 16 0 25 540 topology 696 947 +> 15 0 25 540 topology 694 948 +> 16 0 25 540 topology 695 948 +> 15 0 25 540 topology 697 949 +> 16 0 25 540 topology 699 949 +> 15 0 25 540 topology 697 950 +> 16 0 25 540 topology 698 950 +> 15 0 25 540 topology 700 951 +> 16 0 25 540 topology 702 951 +> 15 0 25 540 topology 700 952 +> 16 0 25 540 topology 701 952 +> 15 0 25 540 topology 703 953 +> 16 0 25 540 topology 705 953 +> 15 0 25 540 topology 703 954 +> 16 0 25 540 topology 704 954 +> 15 0 25 540 topology 706 955 +> 16 0 25 540 topology 708 955 +> 15 0 25 540 topology 706 956 +> 16 0 25 540 topology 707 956 +> 15 0 25 540 topology 709 957 +> 16 0 25 540 topology 711 957 +> 15 0 25 540 topology 709 958 +> 16 0 25 540 topology 710 958 +> 15 0 25 540 topology 712 959 +> 16 0 25 540 topology 714 959 +> 15 0 25 540 topology 712 960 +> 16 0 25 540 topology 713 960 +> 15 0 25 540 topology 715 961 +> 16 0 25 540 topology 717 961 +> 15 0 25 540 topology 715 962 +> 16 0 25 540 topology 716 962 +> 15 0 25 540 topology 553 963 +> 16 0 25 540 topology 555 963 +> 15 0 25 540 topology 553 964 +> 16 0 25 540 topology 554 964 +> 15 0 25 540 topology 718 965 +> 16 0 25 540 topology 720 965 +> 15 0 25 540 topology 718 966 +> 16 0 25 540 topology 719 966 +> 15 0 25 540 topology 721 967 +> 16 0 25 540 topology 723 967 +> 15 0 25 540 topology 721 968 +> 16 0 25 540 topology 722 968 +> 15 0 25 540 topology 724 969 +> 16 0 25 540 topology 726 969 +> 15 0 25 540 topology 724 970 +> 16 0 25 540 topology 725 970 +> 15 0 25 540 topology 727 971 +> 16 0 25 540 topology 729 971 +> 15 0 25 540 topology 727 972 +> 16 0 25 540 topology 728 972 +> 15 0 25 540 topology 730 973 +> 16 0 25 540 topology 732 973 +> 15 0 25 540 topology 730 974 +> 16 0 25 540 topology 731 974 +> 15 0 25 540 topology 733 975 +> 16 0 25 540 topology 735 975 +> 15 0 25 540 topology 733 976 +> 16 0 25 540 topology 734 976 +> 15 0 25 540 topology 736 977 +> 16 0 25 540 topology 738 977 +> 15 0 25 540 topology 736 978 +> 16 0 25 540 topology 737 978 +> 15 0 25 540 topology 739 979 +> 16 0 25 540 topology 741 979 +> 15 0 25 540 topology 739 980 +> 16 0 25 540 topology 740 980 +> 15 0 25 540 topology 742 981 +> 16 0 25 540 topology 744 981 +> 15 0 25 540 topology 742 982 +> 16 0 25 540 topology 743 982 +> 15 0 25 540 topology 745 983 +> 16 0 25 540 topology 747 983 +> 15 0 25 540 topology 745 984 +> 16 0 25 540 topology 746 984 +> 15 0 25 540 topology 556 985 +> 16 0 25 540 topology 558 985 +> 15 0 25 540 topology 556 986 +> 16 0 25 540 topology 557 986 +> 15 0 25 540 topology 748 987 +> 16 0 25 540 topology 750 987 +> 15 0 25 540 topology 748 988 +> 16 0 25 540 topology 749 988 +> 15 0 25 540 topology 751 989 +> 16 0 25 540 topology 753 989 +> 15 0 25 540 topology 751 990 +> 16 0 25 540 topology 752 990 +> 15 0 25 540 topology 754 991 +> 16 0 25 540 topology 756 991 +> 15 0 25 540 topology 754 992 +> 16 0 25 540 topology 755 992 +> 15 0 25 540 topology 559 993 +> 16 0 25 540 topology 561 993 +> 15 0 25 540 topology 559 994 +> 16 0 25 540 topology 560 994 +> 15 0 25 540 topology 562 995 +> 16 0 25 540 topology 564 995 +> 15 0 25 540 topology 562 996 +> 16 0 25 540 topology 563 996 +> 15 0 25 540 topology 565 997 +> 16 0 25 540 topology 567 997 +> 15 0 25 540 topology 565 998 +> 16 0 25 540 topology 566 998 +> 15 0 23 760 topology 790 999 +> 16 0 23 760 topology 864 999 +> 15 0 23 760 topology 789 1000 > 16 0 23 760 topology 864 1000 -> 15 0 24 760 topology 806 1001 -> 16 0 24 760 topology 808 1001 -> 15 0 24 760 topology 860 1002 -> 16 0 24 760 topology 862 1002 -> 15 0 23 760 topology 822 1003 +> 15 0 23 760 topology 793 1001 +> 16 0 23 760 topology 864 1001 +> 15 0 23 760 topology 792 1002 +> 16 0 23 760 topology 864 1002 +> 15 0 23 760 topology 796 1003 > 16 0 23 760 topology 864 1003 -> 15 0 24 760 topology 809 1004 -> 16 0 24 760 topology 811 1004 -> 15 0 23 760 topology 852 1005 +> 15 0 23 760 topology 795 1004 +> 16 0 23 760 topology 864 1004 +> 15 0 23 760 topology 799 1005 > 16 0 23 760 topology 864 1005 -> 15 0 23 760 topology 769 1006 +> 15 0 23 760 topology 798 1006 > 16 0 23 760 topology 864 1006 -> 15 0 23 760 topology 804 1007 +> 15 0 23 760 topology 802 1007 > 16 0 23 760 topology 864 1007 -> 15 0 24 760 topology 812 1008 -> 16 0 24 760 topology 814 1008 -> 15 0 24 760 topology 767 1009 -> 16 0 24 760 topology 768 1009 -> 15 0 23 760 topology 834 1010 +> 15 0 23 760 topology 801 1008 +> 16 0 23 760 topology 864 1008 +> 15 0 23 760 topology 805 1009 +> 16 0 23 760 topology 864 1009 +> 15 0 23 760 topology 804 1010 > 16 0 23 760 topology 864 1010 -> 15 0 24 760 topology 815 1011 -> 16 0 24 760 topology 817 1011 -> 15 0 23 760 topology 781 1012 +> 15 0 23 760 topology 808 1011 +> 16 0 23 760 topology 864 1011 +> 15 0 23 760 topology 807 1012 > 16 0 23 760 topology 864 1012 -> 15 0 23 760 topology 816 1013 +> 15 0 23 760 topology 811 1013 > 16 0 23 760 topology 864 1013 -> 15 0 23 760 topology 846 1014 +> 15 0 23 760 topology 810 1014 > 16 0 23 760 topology 864 1014 -> 15 0 24 760 topology 779 1015 -> 16 0 24 760 topology 780 1015 -> 15 0 25 760 topology 863 1016 -> 16 0 25 760 topology 864 1016 -> 15 0 23 760 topology 771 1017 +> 15 0 23 760 topology 814 1015 +> 16 0 23 760 topology 864 1015 +> 15 0 23 760 topology 813 1016 +> 16 0 23 760 topology 864 1016 +> 15 0 23 760 topology 817 1017 > 16 0 23 760 topology 864 1017 -> 15 0 23 760 topology 793 1018 +> 15 0 23 760 topology 816 1018 > 16 0 23 760 topology 864 1018 -> 15 0 23 760 topology 853 1019 +> 15 0 23 760 topology 763 1019 > 16 0 23 760 topology 864 1019 -> 15 0 24 760 topology 764 1020 -> 16 0 24 760 topology 766 1020 -> 15 0 23 760 topology 783 1021 +> 15 0 23 760 topology 762 1020 +> 16 0 23 760 topology 864 1020 +> 15 0 23 760 topology 820 1021 > 16 0 23 760 topology 864 1021 -> 15 0 23 760 topology 829 1022 +> 15 0 23 760 topology 819 1022 > 16 0 23 760 topology 864 1022 -> 15 0 23 760 topology 805 1023 +> 15 0 23 760 topology 823 1023 > 16 0 23 760 topology 864 1023 -> 15 0 23 760 topology 841 1024 +> 15 0 23 760 topology 822 1024 > 16 0 23 760 topology 864 1024 -> 15 0 23 760 topology 817 1025 +> 15 0 23 760 topology 826 1025 > 16 0 23 760 topology 864 1025 -> 15 0 24 760 topology 776 1026 -> 16 0 24 760 topology 778 1026 -> 15 0 23 760 topology 789 1027 +> 15 0 23 760 topology 825 1026 +> 16 0 23 760 topology 864 1026 +> 15 0 23 760 topology 829 1027 > 16 0 23 760 topology 864 1027 -> 15 0 23 760 topology 819 1028 +> 15 0 23 760 topology 828 1028 > 16 0 23 760 topology 864 1028 -> 15 0 24 760 topology 788 1029 -> 16 0 24 760 topology 789 1029 -> 15 0 23 760 topology 849 1030 +> 15 0 23 760 topology 832 1029 +> 16 0 23 760 topology 864 1029 +> 15 0 23 760 topology 831 1030 > 16 0 23 760 topology 864 1030 -> 15 0 23 760 topology 801 1031 +> 15 0 23 760 topology 835 1031 > 16 0 23 760 topology 864 1031 -> 15 0 24 760 topology 818 1032 -> 16 0 24 760 topology 819 1032 -> 15 0 23 760 topology 831 1033 +> 15 0 23 760 topology 834 1032 +> 16 0 23 760 topology 864 1032 +> 15 0 23 760 topology 838 1033 > 16 0 23 760 topology 864 1033 -> 15 0 23 760 topology 772 1034 +> 15 0 23 760 topology 837 1034 > 16 0 23 760 topology 864 1034 -> 15 0 24 760 topology 794 1035 -> 16 0 24 760 topology 795 1035 -> 15 0 24 760 topology 848 1036 -> 16 0 24 760 topology 849 1036 -> 15 0 23 760 topology 861 1037 +> 15 0 23 760 topology 841 1035 +> 16 0 23 760 topology 864 1035 +> 15 0 23 760 topology 840 1036 +> 16 0 23 760 topology 864 1036 +> 15 0 23 760 topology 844 1037 > 16 0 23 760 topology 864 1037 -> 15 0 24 760 topology 770 1038 -> 16 0 24 760 topology 771 1038 -> 15 0 23 760 topology 813 1039 +> 15 0 23 760 topology 843 1038 +> 16 0 23 760 topology 864 1038 +> 15 0 23 760 topology 847 1039 > 16 0 23 760 topology 864 1039 -> 15 0 24 760 topology 824 1040 -> 16 0 24 760 topology 825 1040 -> 15 0 23 760 topology 843 1041 +> 15 0 23 760 topology 846 1040 +> 16 0 23 760 topology 864 1040 +> 15 0 23 760 topology 766 1041 > 16 0 23 760 topology 864 1041 -> 15 0 23 760 topology 784 1042 +> 15 0 23 760 topology 765 1042 > 16 0 23 760 topology 864 1042 -> 15 0 24 760 topology 800 1043 -> 16 0 24 760 topology 801 1043 -> 15 0 24 760 topology 854 1044 -> 16 0 24 760 topology 855 1044 -> 15 0 24 760 topology 830 1045 -> 16 0 24 760 topology 831 1045 -> 15 0 24 760 topology 806 1046 -> 16 0 24 760 topology 807 1046 -> 15 0 24 760 topology 860 1047 -> 16 0 24 760 topology 861 1047 -> 15 0 24 760 topology 782 1048 -> 16 0 24 760 topology 783 1048 -> 15 0 24 760 topology 836 1049 -> 16 0 24 760 topology 837 1049 -> 15 0 23 760 topology 768 1050 +> 15 0 23 760 topology 850 1043 +> 16 0 23 760 topology 864 1043 +> 15 0 23 760 topology 849 1044 +> 16 0 23 760 topology 864 1044 +> 15 0 23 760 topology 853 1045 +> 16 0 23 760 topology 864 1045 +> 15 0 23 760 topology 852 1046 +> 16 0 23 760 topology 864 1046 +> 15 0 23 760 topology 856 1047 +> 16 0 23 760 topology 864 1047 +> 15 0 23 760 topology 855 1048 +> 16 0 23 760 topology 864 1048 +> 15 0 23 760 topology 859 1049 +> 16 0 23 760 topology 864 1049 +> 15 0 23 760 topology 858 1050 > 16 0 23 760 topology 864 1050 -> 15 0 24 760 topology 812 1051 -> 16 0 24 760 topology 813 1051 -> 15 0 23 760 topology 820 1052 +> 15 0 23 760 topology 862 1051 +> 16 0 23 760 topology 864 1051 +> 15 0 23 760 topology 861 1052 > 16 0 23 760 topology 864 1052 -> 15 0 24 760 topology 842 1053 -> 16 0 24 760 topology 843 1053 -> 15 0 24 760 topology 761 1054 -> 16 0 24 760 topology 763 1054 -> 15 0 23 760 topology 796 1055 +> 15 0 23 760 topology 769 1053 +> 16 0 23 760 topology 864 1053 +> 15 0 23 760 topology 768 1054 +> 16 0 23 760 topology 864 1054 +> 15 0 23 760 topology 772 1055 > 16 0 23 760 topology 864 1055 -> 15 0 23 760 topology 780 1056 +> 15 0 23 760 topology 771 1056 > 16 0 23 760 topology 864 1056 -> 15 0 24 760 topology 818 1057 -> 16 0 24 760 topology 820 1057 -> 15 0 23 760 topology 856 1058 +> 15 0 23 760 topology 775 1057 +> 16 0 23 760 topology 864 1057 +> 15 0 23 760 topology 774 1058 > 16 0 23 760 topology 864 1058 -> 15 0 23 760 topology 832 1059 +> 15 0 23 760 topology 778 1059 > 16 0 23 760 topology 864 1059 -> 15 0 23 760 topology 808 1060 +> 15 0 23 760 topology 777 1060 > 16 0 23 760 topology 864 1060 -> 15 0 24 760 topology 821 1061 -> 16 0 24 760 topology 823 1061 -> 15 0 24 760 topology 824 1062 -> 16 0 24 760 topology 826 1062 -> 15 0 23 760 topology 844 1063 +> 15 0 23 760 topology 781 1061 +> 16 0 23 760 topology 864 1061 +> 15 0 23 760 topology 780 1062 +> 16 0 23 760 topology 864 1062 +> 15 0 23 760 topology 784 1063 > 16 0 23 760 topology 864 1063 -> 15 0 24 760 topology 773 1064 -> 16 0 24 760 topology 775 1064 -> 15 0 24 760 topology 827 1065 -> 16 0 24 760 topology 829 1065 -> 15 0 24 760 topology 830 1066 -> 16 0 24 760 topology 832 1066 -> 15 0 24 760 topology 833 1067 -> 16 0 24 760 topology 835 1067 -> 15 0 24 760 topology 761 1068 -> 16 0 24 760 topology 762 1068 -> 15 0 23 760 topology 763 1069 -> 16 0 23 760 topology 864 1069 -> 15 0 23 760 topology 798 1070 -> 16 0 23 760 topology 864 1070 -> 15 0 24 760 topology 836 1071 -> 16 0 24 760 topology 838 1071 -> 15 0 23 760 topology 828 1072 -> 16 0 23 760 topology 864 1072 -> 15 0 24 760 topology 785 1073 -> 16 0 24 760 topology 787 1073 -> 15 0 24 760 topology 839 1074 -> 16 0 24 760 topology 841 1074 -> 15 0 23 760 topology 858 1075 -> 16 0 23 760 topology 864 1075 -> 15 0 23 760 topology 775 1076 -> 16 0 23 760 topology 864 1076 -> 15 0 23 760 topology 810 1077 -> 16 0 23 760 topology 864 1077 -> 15 0 24 760 topology 842 1078 -> 16 0 24 760 topology 844 1078 -> 15 0 23 760 topology 840 1079 -> 16 0 23 760 topology 864 1079 -> 15 0 24 760 topology 845 1080 -> 16 0 24 760 topology 847 1080 -> 15 0 24 760 topology 773 1081 -> 16 0 24 760 topology 774 1081 -> 15 0 23 760 topology 787 1082 -> 16 0 23 760 topology 864 1082 -> 15 0 23 760 topology 765 1083 -> 16 0 23 760 topology 864 1083 -> 15 0 24 760 topology 785 1084 -> 16 0 24 760 topology 786 1084 -> 15 0 23 760 topology 777 1085 -> 16 0 23 760 topology 864 1085 -> 15 0 23 760 topology 823 1086 -> 16 0 23 760 topology 864 1086 -> 15 0 23 760 topology 799 1087 -> 16 0 23 760 topology 864 1087 -> 15 0 23 760 topology 859 1088 -> 16 0 23 760 topology 864 1088 -> 15 0 23 760 topology 835 1089 -> 16 0 23 760 topology 864 1089 -> 15 0 23 760 topology 811 1090 -> 16 0 23 760 topology 864 1090 -> 15 0 24 760 topology 770 1091 -> 16 0 24 760 topology 772 1091 -> 15 0 23 760 topology 847 1092 -> 16 0 23 760 topology 864 1092 -> 15 0 23 760 topology 795 1093 -> 16 0 23 760 topology 864 1093 -> 15 0 24 760 topology 782 1094 -> 16 0 24 760 topology 784 1094 -> 15 0 23 760 topology 825 1095 -> 16 0 23 760 topology 864 1095 -> 15 0 24 760 topology 764 1096 -> 16 0 24 760 topology 765 1096 -> 15 0 23 760 topology 766 1097 -> 16 0 23 760 topology 864 1097 -> 15 0 24 760 topology 791 1098 -> 16 0 24 760 topology 792 1098 -> 15 0 23 760 topology 855 1099 -> 16 0 23 760 topology 864 1099 -> 15 0 23 760 topology 807 1100 -> 16 0 23 760 topology 864 1100 -> 15 0 24 760 topology 821 1101 -> 16 0 24 760 topology 822 1101 -> 15 0 23 760 topology 837 1102 -> 16 0 23 760 topology 864 1102 -> 15 0 23 760 topology 778 1103 -> 16 0 23 760 topology 864 1103 -> 15 0 24 760 topology 797 1104 -> 16 0 24 760 topology 798 1104 -> 15 0 24 760 topology 851 1105 -> 16 0 24 760 topology 852 1105 -> 15 0 24 760 topology 827 1106 -> 16 0 24 760 topology 828 1106 -> 15 0 24 760 topology 776 1107 -> 16 0 24 760 topology 777 1107 -> 15 0 24 760 topology 803 1108 -> 16 0 24 760 topology 804 1108 -> 15 0 24 760 topology 857 1109 -> 16 0 24 760 topology 858 1109 -> 15 0 24 760 topology 833 1110 -> 16 0 24 760 topology 834 1110 -> 15 0 23 760 topology 762 1111 -> 16 0 23 760 topology 864 1111 -> 15 0 24 760 topology 809 1112 -> 16 0 24 760 topology 810 1112 -> 15 0 24 760 topology 839 1113 -> 16 0 24 760 topology 840 1113 -> 15 0 23 760 topology 790 1114 -> 16 0 23 760 topology 864 1114 -> 15 0 23 760 topology 774 1115 -> 16 0 23 760 topology 864 1115 -> 15 0 24 760 topology 815 1116 -> 16 0 24 760 topology 816 1116 -> 15 0 24 760 topology 788 1117 -> 16 0 24 760 topology 790 1117 -> 15 0 23 760 topology 850 1118 -> 16 0 23 760 topology 864 1118 -> 15 0 23 760 topology 826 1119 -> 16 0 23 760 topology 864 1119 -> 15 0 24 760 topology 845 1120 -> 16 0 24 760 topology 846 1120 -> 15 0 24 760 topology 791 1121 -> 16 0 24 760 topology 793 1121 -> 15 0 23 760 topology 802 1122 -> 16 0 23 760 topology 864 1122 -> 15 0 23 760 topology 786 1123 -> 16 0 23 760 topology 864 1123 -> 15 0 24 760 topology 767 1124 -> 16 0 24 760 topology 769 1124 -> 15 0 24 760 topology 794 1125 -> 16 0 24 760 topology 796 1125 -> 15 0 24 760 topology 848 1126 -> 16 0 24 760 topology 850 1126 -> 15 0 23 760 topology 862 1127 -> 16 0 23 760 topology 864 1127 -> 15 0 23 760 topology 838 1128 -> 16 0 23 760 topology 864 1128 -> 15 0 24 760 topology 797 1129 -> 16 0 24 760 topology 799 1129 -> 15 0 23 760 topology 814 1130 -> 16 0 23 760 topology 864 1130 -> 15 0 24 760 topology 851 1131 -> 16 0 24 760 topology 853 1131 -> 15 0 24 760 topology 800 1132 -> 16 0 24 760 topology 802 1132 -> 15 0 24 760 topology 854 1133 -> 16 0 24 760 topology 856 1133 -> 15 0 24 760 topology 803 1134 -> 16 0 24 760 topology 805 1134 -> 15 0 24 760 topology 857 1135 -> 16 0 24 760 topology 859 1135 -> 15 0 26 499 topology 865 1136 -> 16 0 26 499 topology 867 1136 -> 15 0 26 499 topology 759 1137 -> 16 0 26 499 topology 867 1137 +> 15 0 23 760 topology 783 1064 +> 16 0 23 760 topology 864 1064 +> 15 0 23 760 topology 787 1065 +> 16 0 23 760 topology 864 1065 +> 15 0 23 760 topology 786 1066 +> 16 0 23 760 topology 864 1066 +> 15 0 24 760 topology 863 1067 +> 16 0 24 760 topology 864 1067 +> 15 0 25 760 topology 788 1068 +> 16 0 25 760 topology 790 1068 +> 15 0 25 760 topology 788 1069 +> 16 0 25 760 topology 789 1069 +> 15 0 25 760 topology 791 1070 +> 16 0 25 760 topology 793 1070 +> 15 0 25 760 topology 791 1071 +> 16 0 25 760 topology 792 1071 +> 15 0 25 760 topology 794 1072 +> 16 0 25 760 topology 796 1072 +> 15 0 25 760 topology 794 1073 +> 16 0 25 760 topology 795 1073 +> 15 0 25 760 topology 797 1074 +> 16 0 25 760 topology 799 1074 +> 15 0 25 760 topology 797 1075 +> 16 0 25 760 topology 798 1075 +> 15 0 25 760 topology 800 1076 +> 16 0 25 760 topology 802 1076 +> 15 0 25 760 topology 800 1077 +> 16 0 25 760 topology 801 1077 +> 15 0 25 760 topology 803 1078 +> 16 0 25 760 topology 805 1078 +> 15 0 25 760 topology 803 1079 +> 16 0 25 760 topology 804 1079 +> 15 0 25 760 topology 806 1080 +> 16 0 25 760 topology 808 1080 +> 15 0 25 760 topology 806 1081 +> 16 0 25 760 topology 807 1081 +> 15 0 25 760 topology 809 1082 +> 16 0 25 760 topology 811 1082 +> 15 0 25 760 topology 809 1083 +> 16 0 25 760 topology 810 1083 +> 15 0 25 760 topology 812 1084 +> 16 0 25 760 topology 814 1084 +> 15 0 25 760 topology 812 1085 +> 16 0 25 760 topology 813 1085 +> 15 0 25 760 topology 815 1086 +> 16 0 25 760 topology 817 1086 +> 15 0 25 760 topology 815 1087 +> 16 0 25 760 topology 816 1087 +> 15 0 25 760 topology 761 1088 +> 16 0 25 760 topology 763 1088 +> 15 0 25 760 topology 761 1089 +> 16 0 25 760 topology 762 1089 +> 15 0 25 760 topology 818 1090 +> 16 0 25 760 topology 820 1090 +> 15 0 25 760 topology 818 1091 +> 16 0 25 760 topology 819 1091 +> 15 0 25 760 topology 821 1092 +> 16 0 25 760 topology 823 1092 +> 15 0 25 760 topology 821 1093 +> 16 0 25 760 topology 822 1093 +> 15 0 25 760 topology 824 1094 +> 16 0 25 760 topology 826 1094 +> 15 0 25 760 topology 824 1095 +> 16 0 25 760 topology 825 1095 +> 15 0 25 760 topology 827 1096 +> 16 0 25 760 topology 829 1096 +> 15 0 25 760 topology 827 1097 +> 16 0 25 760 topology 828 1097 +> 15 0 25 760 topology 830 1098 +> 16 0 25 760 topology 832 1098 +> 15 0 25 760 topology 830 1099 +> 16 0 25 760 topology 831 1099 +> 15 0 25 760 topology 833 1100 +> 16 0 25 760 topology 835 1100 +> 15 0 25 760 topology 833 1101 +> 16 0 25 760 topology 834 1101 +> 15 0 25 760 topology 836 1102 +> 16 0 25 760 topology 838 1102 +> 15 0 25 760 topology 836 1103 +> 16 0 25 760 topology 837 1103 +> 15 0 25 760 topology 839 1104 +> 16 0 25 760 topology 841 1104 +> 15 0 25 760 topology 839 1105 +> 16 0 25 760 topology 840 1105 +> 15 0 25 760 topology 842 1106 +> 16 0 25 760 topology 844 1106 +> 15 0 25 760 topology 842 1107 +> 16 0 25 760 topology 843 1107 +> 15 0 25 760 topology 845 1108 +> 16 0 25 760 topology 847 1108 +> 15 0 25 760 topology 845 1109 +> 16 0 25 760 topology 846 1109 +> 15 0 25 760 topology 764 1110 +> 16 0 25 760 topology 766 1110 +> 15 0 25 760 topology 764 1111 +> 16 0 25 760 topology 765 1111 +> 15 0 25 760 topology 848 1112 +> 16 0 25 760 topology 850 1112 +> 15 0 25 760 topology 848 1113 +> 16 0 25 760 topology 849 1113 +> 15 0 25 760 topology 851 1114 +> 16 0 25 760 topology 853 1114 +> 15 0 25 760 topology 851 1115 +> 16 0 25 760 topology 852 1115 +> 15 0 25 760 topology 854 1116 +> 16 0 25 760 topology 856 1116 +> 15 0 25 760 topology 854 1117 +> 16 0 25 760 topology 855 1117 +> 15 0 25 760 topology 857 1118 +> 16 0 25 760 topology 859 1118 +> 15 0 25 760 topology 857 1119 +> 16 0 25 760 topology 858 1119 +> 15 0 25 760 topology 860 1120 +> 16 0 25 760 topology 862 1120 +> 15 0 25 760 topology 860 1121 +> 16 0 25 760 topology 861 1121 +> 15 0 25 760 topology 767 1122 +> 16 0 25 760 topology 769 1122 +> 15 0 25 760 topology 767 1123 +> 16 0 25 760 topology 768 1123 +> 15 0 25 760 topology 770 1124 +> 16 0 25 760 topology 772 1124 +> 15 0 25 760 topology 770 1125 +> 16 0 25 760 topology 771 1125 +> 15 0 25 760 topology 773 1126 +> 16 0 25 760 topology 775 1126 +> 15 0 25 760 topology 773 1127 +> 16 0 25 760 topology 774 1127 +> 15 0 25 760 topology 776 1128 +> 16 0 25 760 topology 778 1128 +> 15 0 25 760 topology 776 1129 +> 16 0 25 760 topology 777 1129 +> 15 0 25 760 topology 779 1130 +> 16 0 25 760 topology 781 1130 +> 15 0 25 760 topology 779 1131 +> 16 0 25 760 topology 780 1131 +> 15 0 25 760 topology 782 1132 +> 16 0 25 760 topology 784 1132 +> 15 0 25 760 topology 782 1133 +> 16 0 25 760 topology 783 1133 +> 15 0 25 760 topology 785 1134 +> 16 0 25 760 topology 787 1134 +> 15 0 25 760 topology 785 1135 +> 16 0 25 760 topology 786 1135 +> 15 0 26 499 topology 759 1136 +> 16 0 26 499 topology 757 1136 +> 15 0 26 499 topology 865 1137 +> 16 0 26 499 topology 863 1137 > 15 0 26 499 topology 539 1138 > 16 0 26 499 topology 867 1138 -> 15 0 27 499 topology 537 1139 -> 16 0 27 499 topology 539 1139 -> 15 0 21 499 topology 759 1140 -> 16 0 21 499 topology 865 1140 -> 15 0 21 499 topology 539 1141 -> 16 0 21 499 topology 865 1141 -> 15 0 26 499 topology 865 1142 -> 16 0 26 499 topology 863 1142 -> 15 0 21 499 topology 539 1143 -> 16 0 21 499 topology 759 1143 -> 15 0 26 499 topology 759 1144 -> 16 0 26 499 topology 757 1144 -> 15 0 24 870 topology 874 1145 -> 16 0 24 870 topology 875 1145 -> 15 0 24 870 topology 901 1146 -> 16 0 24 870 topology 902 1146 -> 15 0 23 870 topology 891 1147 +> 15 0 26 499 topology 759 1139 +> 16 0 26 499 topology 867 1139 +> 15 0 26 499 topology 865 1140 +> 16 0 26 499 topology 867 1140 +> 15 0 27 499 topology 537 1141 +> 16 0 27 499 topology 539 1141 +> 15 0 20 499 topology 539 1142 +> 16 0 20 499 topology 759 1142 +> 15 0 20 499 topology 539 1143 +> 16 0 20 499 topology 865 1143 +> 15 0 20 499 topology 759 1144 +> 16 0 20 499 topology 865 1144 +> 15 0 23 870 topology 900 1145 +> 16 0 23 870 topology 950 1145 +> 15 0 23 870 topology 899 1146 +> 16 0 23 870 topology 950 1146 +> 15 0 23 870 topology 903 1147 > 16 0 23 870 topology 950 1147 -> 15 0 24 870 topology 895 1148 -> 16 0 24 870 topology 897 1148 -> 15 0 23 870 topology 926 1149 +> 15 0 23 870 topology 902 1148 +> 16 0 23 870 topology 950 1148 +> 15 0 23 870 topology 906 1149 > 16 0 23 870 topology 950 1149 -> 15 0 24 870 topology 904 1150 -> 16 0 24 870 topology 905 1150 -> 15 0 24 870 topology 925 1151 -> 16 0 24 870 topology 927 1151 -> 15 0 24 870 topology 907 1152 -> 16 0 24 870 topology 908 1152 -> 15 0 24 870 topology 910 1153 -> 16 0 24 870 topology 911 1153 -> 15 0 25 870 topology 949 1154 -> 16 0 25 870 topology 950 1154 -> 15 0 24 870 topology 886 1155 -> 16 0 24 870 topology 887 1155 -> 15 0 24 870 topology 913 1156 -> 16 0 24 870 topology 914 1156 -> 15 0 24 870 topology 916 1157 -> 16 0 24 870 topology 917 1157 -> 15 0 23 870 topology 881 1158 +> 15 0 23 870 topology 905 1150 +> 16 0 23 870 topology 950 1150 +> 15 0 23 870 topology 909 1151 +> 16 0 23 870 topology 950 1151 +> 15 0 23 870 topology 908 1152 +> 16 0 23 870 topology 950 1152 +> 15 0 23 870 topology 912 1153 +> 16 0 23 870 topology 950 1153 +> 15 0 23 870 topology 911 1154 +> 16 0 23 870 topology 950 1154 +> 15 0 23 870 topology 915 1155 +> 16 0 23 870 topology 950 1155 +> 15 0 23 870 topology 914 1156 +> 16 0 23 870 topology 950 1156 +> 15 0 23 870 topology 918 1157 +> 16 0 23 870 topology 950 1157 +> 15 0 23 870 topology 917 1158 > 16 0 23 870 topology 950 1158 -> 15 0 23 870 topology 903 1159 +> 15 0 23 870 topology 921 1159 > 16 0 23 870 topology 950 1159 -> 15 0 24 870 topology 919 1160 -> 16 0 24 870 topology 920 1160 -> 15 0 24 870 topology 922 1161 -> 16 0 24 870 topology 923 1161 -> 15 0 23 870 topology 893 1162 +> 15 0 23 870 topology 920 1160 +> 16 0 23 870 topology 950 1160 +> 15 0 23 870 topology 924 1161 +> 16 0 23 870 topology 950 1161 +> 15 0 23 870 topology 923 1162 > 16 0 23 870 topology 950 1162 -> 15 0 23 870 topology 939 1163 +> 15 0 23 870 topology 927 1163 > 16 0 23 870 topology 950 1163 -> 15 0 23 870 topology 915 1164 +> 15 0 23 870 topology 926 1164 > 16 0 23 870 topology 950 1164 -> 15 0 24 870 topology 925 1165 -> 16 0 24 870 topology 926 1165 -> 15 0 24 870 topology 874 1166 -> 16 0 24 870 topology 876 1166 -> 15 0 23 870 topology 927 1167 +> 15 0 23 870 topology 873 1165 +> 16 0 23 870 topology 950 1165 +> 15 0 23 870 topology 872 1166 +> 16 0 23 870 topology 950 1166 +> 15 0 23 870 topology 930 1167 > 16 0 23 870 topology 950 1167 -> 15 0 23 870 topology 899 1168 +> 15 0 23 870 topology 929 1168 > 16 0 23 870 topology 950 1168 -> 15 0 23 870 topology 929 1169 +> 15 0 23 870 topology 933 1169 > 16 0 23 870 topology 950 1169 -> 15 0 24 870 topology 886 1170 -> 16 0 24 870 topology 888 1170 -> 15 0 23 870 topology 911 1171 +> 15 0 23 870 topology 932 1170 +> 16 0 23 870 topology 950 1170 +> 15 0 23 870 topology 936 1171 > 16 0 23 870 topology 950 1171 -> 15 0 23 870 topology 941 1172 +> 15 0 23 870 topology 935 1172 > 16 0 23 870 topology 950 1172 -> 15 0 24 870 topology 871 1173 -> 16 0 24 870 topology 872 1173 -> 15 0 23 870 topology 882 1174 +> 15 0 23 870 topology 939 1173 +> 16 0 23 870 topology 950 1173 +> 15 0 23 870 topology 938 1174 > 16 0 23 870 topology 950 1174 -> 15 0 23 870 topology 923 1175 +> 15 0 23 870 topology 942 1175 > 16 0 23 870 topology 950 1175 -> 15 0 23 870 topology 894 1176 +> 15 0 23 870 topology 941 1176 > 16 0 23 870 topology 950 1176 -> 15 0 24 870 topology 883 1177 -> 16 0 24 870 topology 884 1177 -> 15 0 23 870 topology 878 1178 +> 15 0 23 870 topology 945 1177 +> 16 0 23 870 topology 950 1177 +> 15 0 23 870 topology 944 1178 > 16 0 23 870 topology 950 1178 -> 15 0 23 870 topology 930 1179 +> 15 0 23 870 topology 948 1179 > 16 0 23 870 topology 950 1179 -> 15 0 23 870 topology 906 1180 +> 15 0 23 870 topology 947 1180 > 16 0 23 870 topology 950 1180 -> 15 0 23 870 topology 890 1181 +> 15 0 23 870 topology 876 1181 > 16 0 23 870 topology 950 1181 -> 15 0 24 870 topology 895 1182 -> 16 0 24 870 topology 896 1182 -> 15 0 23 870 topology 942 1183 +> 15 0 23 870 topology 875 1182 +> 16 0 23 870 topology 950 1182 +> 15 0 23 870 topology 879 1183 > 16 0 23 870 topology 950 1183 -> 15 0 24 870 topology 898 1184 -> 16 0 24 870 topology 900 1184 -> 15 0 23 870 topology 918 1185 +> 15 0 23 870 topology 878 1184 +> 16 0 23 870 topology 950 1184 +> 15 0 23 870 topology 882 1185 > 16 0 23 870 topology 950 1185 -> 15 0 24 870 topology 928 1186 -> 16 0 24 870 topology 930 1186 -> 15 0 24 870 topology 877 1187 -> 16 0 24 870 topology 879 1187 -> 15 0 24 870 topology 904 1188 -> 16 0 24 870 topology 906 1188 -> 15 0 24 870 topology 934 1189 -> 16 0 24 870 topology 936 1189 -> 15 0 24 870 topology 910 1190 -> 16 0 24 870 topology 912 1190 -> 15 0 23 870 topology 873 1191 +> 15 0 23 870 topology 881 1186 +> 16 0 23 870 topology 950 1186 +> 15 0 23 870 topology 885 1187 +> 16 0 23 870 topology 950 1187 +> 15 0 23 870 topology 884 1188 +> 16 0 23 870 topology 950 1188 +> 15 0 23 870 topology 888 1189 +> 16 0 23 870 topology 950 1189 +> 15 0 23 870 topology 887 1190 +> 16 0 23 870 topology 950 1190 +> 15 0 23 870 topology 891 1191 > 16 0 23 870 topology 950 1191 -> 15 0 23 870 topology 908 1192 +> 15 0 23 870 topology 890 1192 > 16 0 23 870 topology 950 1192 -> 15 0 24 870 topology 940 1193 -> 16 0 24 870 topology 942 1193 -> 15 0 23 870 topology 938 1194 +> 15 0 23 870 topology 894 1193 +> 16 0 23 870 topology 950 1193 +> 15 0 23 870 topology 893 1194 > 16 0 23 870 topology 950 1194 -> 15 0 24 870 topology 889 1195 -> 16 0 24 870 topology 891 1195 -> 15 0 24 870 topology 916 1196 -> 16 0 24 870 topology 918 1196 -> 15 0 23 870 topology 885 1197 -> 16 0 23 870 topology 950 1197 -> 15 0 23 870 topology 920 1198 -> 16 0 23 870 topology 950 1198 -> 15 0 24 870 topology 946 1199 -> 16 0 24 870 topology 948 1199 -> 15 0 24 870 topology 928 1200 -> 16 0 24 870 topology 929 1200 -> 15 0 24 870 topology 922 1201 -> 16 0 24 870 topology 924 1201 -> 15 0 24 870 topology 931 1202 -> 16 0 24 870 topology 932 1202 -> 15 0 23 870 topology 897 1203 -> 16 0 23 870 topology 950 1203 -> 15 0 24 870 topology 880 1204 -> 16 0 24 870 topology 881 1204 -> 15 0 24 870 topology 934 1205 -> 16 0 24 870 topology 935 1205 -> 15 0 24 870 topology 937 1206 -> 16 0 24 870 topology 938 1206 -> 15 0 24 870 topology 940 1207 -> 16 0 24 870 topology 941 1207 -> 15 0 23 870 topology 875 1208 -> 16 0 23 870 topology 950 1208 -> 15 0 24 870 topology 943 1209 -> 16 0 24 870 topology 944 1209 -> 15 0 24 870 topology 892 1210 -> 16 0 24 870 topology 893 1210 -> 15 0 24 870 topology 946 1211 -> 16 0 24 870 topology 947 1211 -> 15 0 23 870 topology 887 1212 -> 16 0 23 870 topology 950 1212 -> 15 0 23 870 topology 933 1213 -> 16 0 23 870 topology 950 1213 -> 15 0 23 870 topology 909 1214 -> 16 0 23 870 topology 950 1214 -> 15 0 23 870 topology 945 1215 -> 16 0 23 870 topology 950 1215 -> 15 0 23 870 topology 921 1216 -> 16 0 23 870 topology 950 1216 -> 15 0 24 870 topology 880 1217 -> 16 0 24 870 topology 882 1217 -> 15 0 23 870 topology 905 1218 -> 16 0 23 870 topology 950 1218 -> 15 0 23 870 topology 935 1219 -> 16 0 23 870 topology 950 1219 -> 15 0 23 870 topology 876 1220 -> 16 0 23 870 topology 950 1220 -> 15 0 23 870 topology 917 1221 -> 16 0 23 870 topology 950 1221 -> 15 0 24 870 topology 892 1222 -> 16 0 24 870 topology 894 1222 -> 15 0 23 870 topology 947 1223 -> 16 0 23 870 topology 950 1223 -> 15 0 23 870 topology 888 1224 -> 16 0 23 870 topology 950 1224 -> 15 0 24 870 topology 877 1225 -> 16 0 24 870 topology 878 1225 -> 15 0 23 870 topology 872 1226 -> 16 0 23 870 topology 950 1226 -> 15 0 24 870 topology 889 1227 -> 16 0 24 870 topology 890 1227 -> 15 0 23 870 topology 900 1228 -> 16 0 23 870 topology 950 1228 -> 15 0 23 870 topology 884 1229 -> 16 0 23 870 topology 950 1229 -> 15 0 23 870 topology 936 1230 -> 16 0 23 870 topology 950 1230 -> 15 0 23 870 topology 912 1231 -> 16 0 23 870 topology 950 1231 -> 15 0 23 870 topology 896 1232 -> 16 0 23 870 topology 950 1232 -> 15 0 24 870 topology 871 1233 -> 16 0 24 870 topology 873 1233 -> 15 0 23 870 topology 948 1234 -> 16 0 23 870 topology 950 1234 -> 15 0 24 870 topology 901 1235 -> 16 0 24 870 topology 903 1235 -> 15 0 23 870 topology 924 1236 -> 16 0 23 870 topology 950 1236 -> 15 0 24 870 topology 931 1237 -> 16 0 24 870 topology 933 1237 -> 15 0 24 870 topology 907 1238 -> 16 0 24 870 topology 909 1238 -> 15 0 24 870 topology 883 1239 -> 16 0 24 870 topology 885 1239 -> 15 0 23 870 topology 902 1240 -> 16 0 23 870 topology 950 1240 -> 15 0 24 870 topology 937 1241 -> 16 0 24 870 topology 939 1241 -> 15 0 23 870 topology 932 1242 -> 16 0 23 870 topology 950 1242 -> 15 0 24 870 topology 913 1243 -> 16 0 24 870 topology 915 1243 -> 15 0 23 870 topology 879 1244 -> 16 0 23 870 topology 950 1244 -> 15 0 23 870 topology 914 1245 -> 16 0 23 870 topology 950 1245 -> 15 0 24 870 topology 943 1246 -> 16 0 24 870 topology 945 1246 -> 15 0 24 870 topology 898 1247 -> 16 0 24 870 topology 899 1247 -> 15 0 23 870 topology 944 1248 -> 16 0 23 870 topology 950 1248 -> 15 0 24 870 topology 919 1249 -> 16 0 24 870 topology 921 1249 -> 15 0 23 952 topology 1000 1250 +> 15 0 23 870 topology 897 1195 +> 16 0 23 870 topology 950 1195 +> 15 0 23 870 topology 896 1196 +> 16 0 23 870 topology 950 1196 +> 15 0 24 870 topology 949 1197 +> 16 0 24 870 topology 950 1197 +> 15 0 25 870 topology 898 1198 +> 16 0 25 870 topology 900 1198 +> 15 0 25 870 topology 898 1199 +> 16 0 25 870 topology 899 1199 +> 15 0 25 870 topology 901 1200 +> 16 0 25 870 topology 903 1200 +> 15 0 25 870 topology 901 1201 +> 16 0 25 870 topology 902 1201 +> 15 0 25 870 topology 904 1202 +> 16 0 25 870 topology 906 1202 +> 15 0 25 870 topology 904 1203 +> 16 0 25 870 topology 905 1203 +> 15 0 25 870 topology 907 1204 +> 16 0 25 870 topology 909 1204 +> 15 0 25 870 topology 907 1205 +> 16 0 25 870 topology 908 1205 +> 15 0 25 870 topology 910 1206 +> 16 0 25 870 topology 912 1206 +> 15 0 25 870 topology 910 1207 +> 16 0 25 870 topology 911 1207 +> 15 0 25 870 topology 913 1208 +> 16 0 25 870 topology 915 1208 +> 15 0 25 870 topology 913 1209 +> 16 0 25 870 topology 914 1209 +> 15 0 25 870 topology 916 1210 +> 16 0 25 870 topology 918 1210 +> 15 0 25 870 topology 916 1211 +> 16 0 25 870 topology 917 1211 +> 15 0 25 870 topology 919 1212 +> 16 0 25 870 topology 921 1212 +> 15 0 25 870 topology 919 1213 +> 16 0 25 870 topology 920 1213 +> 15 0 25 870 topology 922 1214 +> 16 0 25 870 topology 924 1214 +> 15 0 25 870 topology 922 1215 +> 16 0 25 870 topology 923 1215 +> 15 0 25 870 topology 925 1216 +> 16 0 25 870 topology 927 1216 +> 15 0 25 870 topology 925 1217 +> 16 0 25 870 topology 926 1217 +> 15 0 25 870 topology 871 1218 +> 16 0 25 870 topology 873 1218 +> 15 0 25 870 topology 871 1219 +> 16 0 25 870 topology 872 1219 +> 15 0 25 870 topology 928 1220 +> 16 0 25 870 topology 930 1220 +> 15 0 25 870 topology 928 1221 +> 16 0 25 870 topology 929 1221 +> 15 0 25 870 topology 931 1222 +> 16 0 25 870 topology 933 1222 +> 15 0 25 870 topology 931 1223 +> 16 0 25 870 topology 932 1223 +> 15 0 25 870 topology 934 1224 +> 16 0 25 870 topology 936 1224 +> 15 0 25 870 topology 934 1225 +> 16 0 25 870 topology 935 1225 +> 15 0 25 870 topology 937 1226 +> 16 0 25 870 topology 939 1226 +> 15 0 25 870 topology 937 1227 +> 16 0 25 870 topology 938 1227 +> 15 0 25 870 topology 940 1228 +> 16 0 25 870 topology 942 1228 +> 15 0 25 870 topology 940 1229 +> 16 0 25 870 topology 941 1229 +> 15 0 25 870 topology 943 1230 +> 16 0 25 870 topology 945 1230 +> 15 0 25 870 topology 943 1231 +> 16 0 25 870 topology 944 1231 +> 15 0 25 870 topology 946 1232 +> 16 0 25 870 topology 948 1232 +> 15 0 25 870 topology 946 1233 +> 16 0 25 870 topology 947 1233 +> 15 0 25 870 topology 874 1234 +> 16 0 25 870 topology 876 1234 +> 15 0 25 870 topology 874 1235 +> 16 0 25 870 topology 875 1235 +> 15 0 25 870 topology 877 1236 +> 16 0 25 870 topology 879 1236 +> 15 0 25 870 topology 877 1237 +> 16 0 25 870 topology 878 1237 +> 15 0 25 870 topology 880 1238 +> 16 0 25 870 topology 882 1238 +> 15 0 25 870 topology 880 1239 +> 16 0 25 870 topology 881 1239 +> 15 0 25 870 topology 883 1240 +> 16 0 25 870 topology 885 1240 +> 15 0 25 870 topology 883 1241 +> 16 0 25 870 topology 884 1241 +> 15 0 25 870 topology 886 1242 +> 16 0 25 870 topology 888 1242 +> 15 0 25 870 topology 886 1243 +> 16 0 25 870 topology 887 1243 +> 15 0 25 870 topology 889 1244 +> 16 0 25 870 topology 891 1244 +> 15 0 25 870 topology 889 1245 +> 16 0 25 870 topology 890 1245 +> 15 0 25 870 topology 892 1246 +> 16 0 25 870 topology 894 1246 +> 15 0 25 870 topology 892 1247 +> 16 0 25 870 topology 893 1247 +> 15 0 25 870 topology 895 1248 +> 16 0 25 870 topology 897 1248 +> 15 0 25 870 topology 895 1249 +> 16 0 25 870 topology 896 1249 +> 15 0 23 952 topology 982 1250 > 16 0 23 952 topology 1014 1250 -> 15 0 24 952 topology 983 1251 -> 16 0 24 952 topology 985 1251 -> 15 0 23 952 topology 955 1252 +> 15 0 23 952 topology 981 1251 +> 16 0 23 952 topology 1014 1251 +> 15 0 23 952 topology 985 1252 > 16 0 23 952 topology 1014 1252 -> 15 0 23 952 topology 990 1253 +> 15 0 23 952 topology 984 1253 > 16 0 23 952 topology 1014 1253 -> 15 0 24 952 topology 995 1254 -> 16 0 24 952 topology 997 1254 -> 15 0 24 952 topology 980 1255 -> 16 0 24 952 topology 981 1255 -> 15 0 23 952 topology 967 1256 +> 15 0 23 952 topology 988 1254 +> 16 0 23 952 topology 1014 1254 +> 15 0 23 952 topology 987 1255 +> 16 0 23 952 topology 1014 1255 +> 15 0 23 952 topology 991 1256 > 16 0 23 952 topology 1014 1256 -> 15 0 23 952 topology 1002 1257 +> 15 0 23 952 topology 990 1257 > 16 0 23 952 topology 1014 1257 -> 15 0 23 952 topology 979 1258 +> 15 0 23 952 topology 994 1258 > 16 0 23 952 topology 1014 1258 -> 15 0 24 952 topology 1007 1259 -> 16 0 24 952 topology 1009 1259 -> 15 0 24 952 topology 992 1260 -> 16 0 24 952 topology 993 1260 -> 15 0 23 952 topology 957 1261 +> 15 0 23 952 topology 993 1259 +> 16 0 23 952 topology 1014 1259 +> 15 0 23 952 topology 997 1260 +> 16 0 23 952 topology 1014 1260 +> 15 0 23 952 topology 996 1261 > 16 0 23 952 topology 1014 1261 -> 15 0 23 952 topology 969 1262 +> 15 0 23 952 topology 1000 1262 > 16 0 23 952 topology 1014 1262 -> 15 0 23 952 topology 991 1263 +> 15 0 23 952 topology 999 1263 > 16 0 23 952 topology 1014 1263 -> 15 0 24 952 topology 1004 1264 -> 16 0 24 952 topology 1005 1264 -> 15 0 24 952 topology 980 1265 -> 16 0 24 952 topology 982 1265 -> 15 0 23 952 topology 1003 1266 +> 15 0 23 952 topology 1003 1264 +> 16 0 23 952 topology 1014 1264 +> 15 0 23 952 topology 1002 1265 +> 16 0 23 952 topology 1014 1265 +> 15 0 23 952 topology 1006 1266 > 16 0 23 952 topology 1014 1266 -> 15 0 24 952 topology 956 1267 -> 16 0 24 952 topology 958 1267 -> 15 0 24 952 topology 962 1268 -> 16 0 24 952 topology 964 1268 -> 15 0 24 952 topology 992 1269 -> 16 0 24 952 topology 994 1269 -> 15 0 23 952 topology 987 1270 +> 15 0 23 952 topology 1005 1267 +> 16 0 23 952 topology 1014 1267 +> 15 0 23 952 topology 1009 1268 +> 16 0 23 952 topology 1014 1268 +> 15 0 23 952 topology 1008 1269 +> 16 0 23 952 topology 1014 1269 +> 15 0 23 952 topology 955 1270 > 16 0 23 952 topology 1014 1270 -> 15 0 24 952 topology 968 1271 -> 16 0 24 952 topology 970 1271 -> 15 0 23 952 topology 958 1272 +> 15 0 23 952 topology 954 1271 +> 16 0 23 952 topology 1014 1271 +> 15 0 23 952 topology 1012 1272 > 16 0 23 952 topology 1014 1272 -> 15 0 24 952 topology 953 1273 -> 16 0 24 952 topology 954 1273 -> 15 0 23 952 topology 999 1274 +> 15 0 23 952 topology 1011 1273 +> 16 0 23 952 topology 1014 1273 +> 15 0 23 952 topology 958 1274 > 16 0 23 952 topology 1014 1274 -> 15 0 25 952 topology 1013 1275 -> 16 0 25 952 topology 1014 1275 -> 15 0 24 952 topology 974 1276 -> 16 0 24 952 topology 976 1276 -> 15 0 24 952 topology 956 1277 -> 16 0 24 952 topology 957 1277 -> 15 0 23 952 topology 970 1278 +> 15 0 23 952 topology 957 1275 +> 16 0 23 952 topology 1014 1275 +> 15 0 23 952 topology 961 1276 +> 16 0 23 952 topology 1014 1276 +> 15 0 23 952 topology 960 1277 +> 16 0 23 952 topology 1014 1277 +> 15 0 23 952 topology 964 1278 > 16 0 23 952 topology 1014 1278 -> 15 0 24 952 topology 983 1279 -> 16 0 24 952 topology 984 1279 -> 15 0 24 952 topology 1004 1280 -> 16 0 24 952 topology 1006 1280 -> 15 0 24 952 topology 959 1281 -> 16 0 24 952 topology 960 1281 -> 15 0 24 952 topology 962 1282 -> 16 0 24 952 topology 963 1282 -> 15 0 24 952 topology 965 1283 -> 16 0 24 952 topology 966 1283 -> 15 0 23 952 topology 954 1284 +> 15 0 23 952 topology 963 1279 +> 16 0 23 952 topology 1014 1279 +> 15 0 23 952 topology 967 1280 +> 16 0 23 952 topology 1014 1280 +> 15 0 23 952 topology 966 1281 +> 16 0 23 952 topology 1014 1281 +> 15 0 23 952 topology 970 1282 +> 16 0 23 952 topology 1014 1282 +> 15 0 23 952 topology 969 1283 +> 16 0 23 952 topology 1014 1283 +> 15 0 23 952 topology 973 1284 > 16 0 23 952 topology 1014 1284 -> 15 0 24 952 topology 968 1285 -> 16 0 24 952 topology 969 1285 -> 15 0 24 952 topology 995 1286 -> 16 0 24 952 topology 996 1286 -> 15 0 24 952 topology 971 1287 -> 16 0 24 952 topology 972 1287 -> 15 0 23 952 topology 982 1288 +> 15 0 23 952 topology 972 1285 +> 16 0 23 952 topology 1014 1285 +> 15 0 23 952 topology 976 1286 +> 16 0 23 952 topology 1014 1286 +> 15 0 23 952 topology 975 1287 +> 16 0 23 952 topology 1014 1287 +> 15 0 23 952 topology 979 1288 > 16 0 23 952 topology 1014 1288 -> 15 0 23 952 topology 966 1289 +> 15 0 23 952 topology 978 1289 > 16 0 23 952 topology 1014 1289 -> 15 0 24 952 topology 974 1290 -> 16 0 24 952 topology 975 1290 -> 15 0 24 952 topology 977 1291 -> 16 0 24 952 topology 978 1291 -> 15 0 23 952 topology 994 1292 -> 16 0 23 952 topology 1014 1292 -> 15 0 23 952 topology 978 1293 -> 16 0 23 952 topology 1014 1293 -> 15 0 24 952 topology 1007 1294 -> 16 0 24 952 topology 1008 1294 -> 15 0 23 952 topology 1006 1295 -> 16 0 23 952 topology 1014 1295 -> 15 0 24 952 topology 1010 1296 -> 16 0 24 952 topology 1012 1296 -> 15 0 24 952 topology 989 1297 -> 16 0 24 952 topology 991 1297 -> 15 0 23 952 topology 984 1298 -> 16 0 23 952 topology 1014 1298 -> 15 0 23 952 topology 961 1299 -> 16 0 23 952 topology 1014 1299 -> 15 0 23 952 topology 996 1300 -> 16 0 23 952 topology 1014 1300 -> 15 0 24 952 topology 1001 1301 -> 16 0 24 952 topology 1003 1301 -> 15 0 23 952 topology 973 1302 -> 16 0 23 952 topology 1014 1302 -> 15 0 23 952 topology 1008 1303 -> 16 0 23 952 topology 1014 1303 -> 15 0 24 952 topology 986 1304 -> 16 0 24 952 topology 987 1304 -> 15 0 24 952 topology 998 1305 -> 16 0 24 952 topology 999 1305 -> 15 0 23 952 topology 963 1306 -> 16 0 23 952 topology 1014 1306 -> 15 0 23 952 topology 985 1307 -> 16 0 23 952 topology 1014 1307 -> 15 0 23 952 topology 975 1308 -> 16 0 23 952 topology 1014 1308 -> 15 0 23 952 topology 997 1309 -> 16 0 23 952 topology 1014 1309 -> 15 0 24 952 topology 953 1310 -> 16 0 24 952 topology 955 1310 -> 15 0 23 952 topology 1009 1311 -> 16 0 23 952 topology 1014 1311 -> 15 0 24 952 topology 959 1312 -> 16 0 24 952 topology 961 1312 -> 15 0 24 952 topology 986 1313 -> 16 0 24 952 topology 988 1313 -> 15 0 23 952 topology 981 1314 -> 16 0 23 952 topology 1014 1314 -> 15 0 24 952 topology 965 1315 -> 16 0 24 952 topology 967 1315 -> 15 0 23 952 topology 1011 1316 -> 16 0 23 952 topology 1014 1316 -> 15 0 23 952 topology 993 1317 -> 16 0 23 952 topology 1014 1317 -> 15 0 24 952 topology 971 1318 -> 16 0 24 952 topology 973 1318 -> 15 0 24 952 topology 998 1319 -> 16 0 24 952 topology 1000 1319 -> 15 0 23 952 topology 964 1320 -> 16 0 23 952 topology 1014 1320 -> 15 0 23 952 topology 1005 1321 -> 16 0 23 952 topology 1014 1321 -> 15 0 24 952 topology 1010 1322 -> 16 0 24 952 topology 1011 1322 -> 15 0 24 952 topology 977 1323 -> 16 0 24 952 topology 979 1323 -> 15 0 23 952 topology 976 1324 -> 16 0 23 952 topology 1014 1324 -> 15 0 24 952 topology 989 1325 -> 16 0 24 952 topology 990 1325 -> 15 0 23 952 topology 960 1326 -> 16 0 23 952 topology 1014 1326 -> 15 0 24 952 topology 1001 1327 -> 16 0 24 952 topology 1002 1327 -> 15 0 23 952 topology 1012 1328 -> 16 0 23 952 topology 1014 1328 -> 15 0 23 952 topology 988 1329 -> 16 0 23 952 topology 1014 1329 -> 15 0 23 952 topology 972 1330 -> 16 0 23 952 topology 1014 1330 -> 15 0 23 1016 topology 1133 1331 +> 15 0 24 952 topology 1013 1290 +> 16 0 24 952 topology 1014 1290 +> 15 0 25 952 topology 980 1291 +> 16 0 25 952 topology 982 1291 +> 15 0 25 952 topology 980 1292 +> 16 0 25 952 topology 981 1292 +> 15 0 25 952 topology 983 1293 +> 16 0 25 952 topology 985 1293 +> 15 0 25 952 topology 983 1294 +> 16 0 25 952 topology 984 1294 +> 15 0 25 952 topology 986 1295 +> 16 0 25 952 topology 988 1295 +> 15 0 25 952 topology 986 1296 +> 16 0 25 952 topology 987 1296 +> 15 0 25 952 topology 989 1297 +> 16 0 25 952 topology 991 1297 +> 15 0 25 952 topology 989 1298 +> 16 0 25 952 topology 990 1298 +> 15 0 25 952 topology 992 1299 +> 16 0 25 952 topology 994 1299 +> 15 0 25 952 topology 992 1300 +> 16 0 25 952 topology 993 1300 +> 15 0 25 952 topology 995 1301 +> 16 0 25 952 topology 997 1301 +> 15 0 25 952 topology 995 1302 +> 16 0 25 952 topology 996 1302 +> 15 0 25 952 topology 998 1303 +> 16 0 25 952 topology 1000 1303 +> 15 0 25 952 topology 998 1304 +> 16 0 25 952 topology 999 1304 +> 15 0 25 952 topology 1001 1305 +> 16 0 25 952 topology 1003 1305 +> 15 0 25 952 topology 1001 1306 +> 16 0 25 952 topology 1002 1306 +> 15 0 25 952 topology 1004 1307 +> 16 0 25 952 topology 1006 1307 +> 15 0 25 952 topology 1004 1308 +> 16 0 25 952 topology 1005 1308 +> 15 0 25 952 topology 1007 1309 +> 16 0 25 952 topology 1009 1309 +> 15 0 25 952 topology 1007 1310 +> 16 0 25 952 topology 1008 1310 +> 15 0 25 952 topology 953 1311 +> 16 0 25 952 topology 955 1311 +> 15 0 25 952 topology 953 1312 +> 16 0 25 952 topology 954 1312 +> 15 0 25 952 topology 1010 1313 +> 16 0 25 952 topology 1012 1313 +> 15 0 25 952 topology 1010 1314 +> 16 0 25 952 topology 1011 1314 +> 15 0 25 952 topology 956 1315 +> 16 0 25 952 topology 958 1315 +> 15 0 25 952 topology 956 1316 +> 16 0 25 952 topology 957 1316 +> 15 0 25 952 topology 959 1317 +> 16 0 25 952 topology 961 1317 +> 15 0 25 952 topology 959 1318 +> 16 0 25 952 topology 960 1318 +> 15 0 25 952 topology 962 1319 +> 16 0 25 952 topology 964 1319 +> 15 0 25 952 topology 962 1320 +> 16 0 25 952 topology 963 1320 +> 15 0 25 952 topology 965 1321 +> 16 0 25 952 topology 967 1321 +> 15 0 25 952 topology 965 1322 +> 16 0 25 952 topology 966 1322 +> 15 0 25 952 topology 968 1323 +> 16 0 25 952 topology 970 1323 +> 15 0 25 952 topology 968 1324 +> 16 0 25 952 topology 969 1324 +> 15 0 25 952 topology 971 1325 +> 16 0 25 952 topology 973 1325 +> 15 0 25 952 topology 971 1326 +> 16 0 25 952 topology 972 1326 +> 15 0 25 952 topology 974 1327 +> 16 0 25 952 topology 976 1327 +> 15 0 25 952 topology 974 1328 +> 16 0 25 952 topology 975 1328 +> 15 0 25 952 topology 977 1329 +> 16 0 25 952 topology 979 1329 +> 15 0 25 952 topology 977 1330 +> 16 0 25 952 topology 978 1330 +> 15 0 23 1016 topology 1046 1331 > 16 0 23 1016 topology 1156 1331 -> 15 0 24 1016 topology 1026 1332 -> 16 0 24 1016 topology 1028 1332 -> 15 0 24 1016 topology 1053 1333 -> 16 0 24 1016 topology 1055 1333 -> 15 0 24 1016 topology 1107 1334 -> 16 0 24 1016 topology 1109 1334 -> 15 0 23 1016 topology 1045 1335 +> 15 0 23 1016 topology 1045 1332 +> 16 0 23 1016 topology 1156 1332 +> 15 0 23 1016 topology 1049 1333 +> 16 0 23 1016 topology 1156 1333 +> 15 0 23 1016 topology 1048 1334 +> 16 0 23 1016 topology 1156 1334 +> 15 0 23 1016 topology 1052 1335 > 16 0 23 1016 topology 1156 1335 -> 15 0 23 1016 topology 1075 1336 +> 15 0 23 1016 topology 1051 1336 > 16 0 23 1016 topology 1156 1336 -> 15 0 24 1016 topology 1083 1337 -> 16 0 24 1016 topology 1085 1337 -> 15 0 24 1016 topology 1137 1338 -> 16 0 24 1016 topology 1139 1338 -> 15 0 23 1016 topology 1105 1339 +> 15 0 23 1016 topology 1055 1337 +> 16 0 23 1016 topology 1156 1337 +> 15 0 23 1016 topology 1054 1338 +> 16 0 23 1016 topology 1156 1338 +> 15 0 23 1016 topology 1058 1339 > 16 0 23 1016 topology 1156 1339 -> 15 0 24 1016 topology 1059 1340 -> 16 0 24 1016 topology 1061 1340 -> 15 0 24 1016 topology 1113 1341 -> 16 0 24 1016 topology 1115 1341 -> 15 0 23 1016 topology 1135 1342 +> 15 0 23 1016 topology 1057 1340 +> 16 0 23 1016 topology 1156 1340 +> 15 0 23 1016 topology 1061 1341 +> 16 0 23 1016 topology 1156 1341 +> 15 0 23 1016 topology 1060 1342 > 16 0 23 1016 topology 1156 1342 -> 15 0 23 1016 topology 1022 1343 +> 15 0 23 1016 topology 1064 1343 > 16 0 23 1016 topology 1156 1343 -> 15 0 23 1016 topology 1057 1344 +> 15 0 23 1016 topology 1063 1344 > 16 0 23 1016 topology 1156 1344 -> 15 0 23 1016 topology 1087 1345 +> 15 0 23 1016 topology 1067 1345 > 16 0 23 1016 topology 1156 1345 -> 15 0 24 1016 topology 1089 1346 -> 16 0 24 1016 topology 1091 1346 -> 15 0 24 1016 topology 1143 1347 -> 16 0 24 1016 topology 1145 1347 -> 15 0 24 1016 topology 1017 1348 -> 16 0 24 1016 topology 1018 1348 -> 15 0 23 1016 topology 1117 1349 +> 15 0 23 1016 topology 1066 1346 +> 16 0 23 1016 topology 1156 1346 +> 15 0 23 1016 topology 1070 1347 +> 16 0 23 1016 topology 1156 1347 +> 15 0 23 1016 topology 1069 1348 +> 16 0 23 1016 topology 1156 1348 +> 15 0 23 1016 topology 1073 1349 > 16 0 23 1016 topology 1156 1349 -> 15 0 24 1016 topology 1038 1350 -> 16 0 24 1016 topology 1040 1350 -> 15 0 24 1016 topology 1065 1351 -> 16 0 24 1016 topology 1067 1351 -> 15 0 24 1016 topology 1119 1352 -> 16 0 24 1016 topology 1121 1352 -> 15 0 23 1016 topology 1147 1353 +> 15 0 23 1016 topology 1072 1350 +> 16 0 23 1016 topology 1156 1350 +> 15 0 23 1016 topology 1019 1351 +> 16 0 23 1016 topology 1156 1351 +> 15 0 23 1016 topology 1018 1352 +> 16 0 23 1016 topology 1156 1352 +> 15 0 23 1016 topology 1076 1353 > 16 0 23 1016 topology 1156 1353 -> 15 0 23 1016 topology 1034 1354 +> 15 0 23 1016 topology 1075 1354 > 16 0 23 1016 topology 1156 1354 -> 15 0 23 1016 topology 1069 1355 +> 15 0 23 1016 topology 1079 1355 > 16 0 23 1016 topology 1156 1355 -> 15 0 24 1016 topology 1074 1356 -> 16 0 24 1016 topology 1075 1356 -> 15 0 24 1016 topology 1095 1357 -> 16 0 24 1016 topology 1097 1357 -> 15 0 23 1016 topology 1099 1358 +> 15 0 23 1016 topology 1078 1356 +> 16 0 23 1016 topology 1156 1356 +> 15 0 23 1016 topology 1082 1357 +> 16 0 23 1016 topology 1156 1357 +> 15 0 23 1016 topology 1081 1358 > 16 0 23 1016 topology 1156 1358 -> 15 0 24 1016 topology 1149 1359 -> 16 0 24 1016 topology 1151 1359 -> 15 0 24 1016 topology 1077 1360 -> 16 0 24 1016 topology 1078 1360 -> 15 0 23 1016 topology 1129 1361 +> 15 0 23 1016 topology 1085 1359 +> 16 0 23 1016 topology 1156 1359 +> 15 0 23 1016 topology 1084 1360 +> 16 0 23 1016 topology 1156 1360 +> 15 0 23 1016 topology 1088 1361 > 16 0 23 1016 topology 1156 1361 -> 15 0 24 1016 topology 1071 1362 -> 16 0 24 1016 topology 1073 1362 -> 15 0 24 1016 topology 1125 1363 -> 16 0 24 1016 topology 1127 1363 -> 15 0 24 1016 topology 1080 1364 -> 16 0 24 1016 topology 1081 1364 -> 15 0 24 1016 topology 1134 1365 -> 16 0 24 1016 topology 1135 1365 -> 15 0 24 1016 topology 1101 1366 -> 16 0 24 1016 topology 1103 1366 -> 15 0 24 1016 topology 1029 1367 -> 16 0 24 1016 topology 1030 1367 -> 15 0 24 1016 topology 1083 1368 -> 16 0 24 1016 topology 1084 1368 -> 15 0 24 1016 topology 1137 1369 -> 16 0 24 1016 topology 1138 1369 -> 15 0 24 1016 topology 1131 1370 -> 16 0 24 1016 topology 1133 1370 -> 15 0 23 1016 topology 1018 1371 +> 15 0 23 1016 topology 1087 1362 +> 16 0 23 1016 topology 1156 1362 +> 15 0 23 1016 topology 1091 1363 +> 16 0 23 1016 topology 1156 1363 +> 15 0 23 1016 topology 1090 1364 +> 16 0 23 1016 topology 1156 1364 +> 15 0 23 1016 topology 1094 1365 +> 16 0 23 1016 topology 1156 1365 +> 15 0 23 1016 topology 1093 1366 +> 16 0 23 1016 topology 1156 1366 +> 15 0 23 1016 topology 1097 1367 +> 16 0 23 1016 topology 1156 1367 +> 15 0 23 1016 topology 1096 1368 +> 16 0 23 1016 topology 1156 1368 +> 15 0 23 1016 topology 1100 1369 +> 16 0 23 1016 topology 1156 1369 +> 15 0 23 1016 topology 1099 1370 +> 16 0 23 1016 topology 1156 1370 +> 15 0 23 1016 topology 1103 1371 > 16 0 23 1016 topology 1156 1371 -> 15 0 24 1016 topology 1086 1372 -> 16 0 24 1016 topology 1087 1372 -> 15 0 24 1016 topology 1140 1373 -> 16 0 24 1016 topology 1141 1373 -> 15 0 24 1016 topology 1089 1374 -> 16 0 24 1016 topology 1090 1374 -> 15 0 24 1016 topology 1143 1375 -> 16 0 24 1016 topology 1144 1375 -> 15 0 23 1016 topology 1030 1376 +> 15 0 23 1016 topology 1102 1372 +> 16 0 23 1016 topology 1156 1372 +> 15 0 23 1016 topology 1022 1373 +> 16 0 23 1016 topology 1156 1373 +> 15 0 23 1016 topology 1021 1374 +> 16 0 23 1016 topology 1156 1374 +> 15 0 23 1016 topology 1106 1375 +> 16 0 23 1016 topology 1156 1375 +> 15 0 23 1016 topology 1105 1376 > 16 0 23 1016 topology 1156 1376 -> 15 0 23 1016 topology 1076 1377 +> 15 0 23 1016 topology 1109 1377 > 16 0 23 1016 topology 1156 1377 -> 15 0 24 1016 topology 1092 1378 -> 16 0 24 1016 topology 1093 1378 -> 15 0 24 1016 topology 1146 1379 -> 16 0 24 1016 topology 1147 1379 -> 15 0 23 1016 topology 1052 1380 +> 15 0 23 1016 topology 1108 1378 +> 16 0 23 1016 topology 1156 1378 +> 15 0 23 1016 topology 1112 1379 +> 16 0 23 1016 topology 1156 1379 +> 15 0 23 1016 topology 1111 1380 > 16 0 23 1016 topology 1156 1380 -> 15 0 24 1016 topology 1041 1381 -> 16 0 24 1016 topology 1042 1381 -> 15 0 24 1016 topology 1095 1382 -> 16 0 24 1016 topology 1096 1382 -> 15 0 23 1016 topology 1136 1383 +> 15 0 23 1016 topology 1115 1381 +> 16 0 23 1016 topology 1156 1381 +> 15 0 23 1016 topology 1114 1382 +> 16 0 23 1016 topology 1156 1382 +> 15 0 23 1016 topology 1118 1383 > 16 0 23 1016 topology 1156 1383 -> 15 0 24 1016 topology 1149 1384 -> 16 0 24 1016 topology 1150 1384 -> 15 0 23 1016 topology 1112 1385 +> 15 0 23 1016 topology 1117 1384 +> 16 0 23 1016 topology 1156 1384 +> 15 0 23 1016 topology 1121 1385 > 16 0 23 1016 topology 1156 1385 -> 15 0 23 1016 topology 1042 1386 +> 15 0 23 1016 topology 1120 1386 > 16 0 23 1016 topology 1156 1386 -> 15 0 23 1016 topology 1088 1387 +> 15 0 23 1016 topology 1124 1387 > 16 0 23 1016 topology 1156 1387 -> 15 0 24 1016 topology 1098 1388 -> 16 0 24 1016 topology 1099 1388 -> 15 0 24 1016 topology 1152 1389 -> 16 0 24 1016 topology 1153 1389 -> 15 0 24 1016 topology 1017 1390 -> 16 0 24 1016 topology 1019 1390 -> 15 0 23 1016 topology 1064 1391 +> 15 0 23 1016 topology 1123 1388 +> 16 0 23 1016 topology 1156 1388 +> 15 0 23 1016 topology 1127 1389 +> 16 0 23 1016 topology 1156 1389 +> 15 0 23 1016 topology 1126 1390 +> 16 0 23 1016 topology 1156 1390 +> 15 0 23 1016 topology 1130 1391 > 16 0 23 1016 topology 1156 1391 -> 15 0 24 1016 topology 1101 1392 -> 16 0 24 1016 topology 1102 1392 -> 15 0 23 1016 topology 1148 1393 +> 15 0 23 1016 topology 1129 1392 +> 16 0 23 1016 topology 1156 1392 +> 15 0 23 1016 topology 1133 1393 > 16 0 23 1016 topology 1156 1393 -> 15 0 23 1016 topology 1124 1394 +> 15 0 23 1016 topology 1132 1394 > 16 0 23 1016 topology 1156 1394 -> 15 0 23 1016 topology 1100 1395 +> 15 0 23 1016 topology 1025 1395 > 16 0 23 1016 topology 1156 1395 -> 15 0 24 1016 topology 1029 1396 -> 16 0 24 1016 topology 1031 1396 -> 15 0 23 1016 topology 1054 1397 +> 15 0 23 1016 topology 1024 1396 +> 16 0 23 1016 topology 1156 1396 +> 15 0 23 1016 topology 1136 1397 > 16 0 23 1016 topology 1156 1397 -> 15 0 23 1016 topology 1084 1398 +> 15 0 23 1016 topology 1135 1398 > 16 0 23 1016 topology 1156 1398 -> 15 0 23 1016 topology 1025 1399 +> 15 0 23 1016 topology 1139 1399 > 16 0 23 1016 topology 1156 1399 -> 15 0 23 1016 topology 1114 1400 +> 15 0 23 1016 topology 1138 1400 > 16 0 23 1016 topology 1156 1400 -> 15 0 23 1016 topology 1144 1401 +> 15 0 23 1016 topology 1142 1401 > 16 0 23 1016 topology 1156 1401 -> 15 0 23 1016 topology 1066 1402 +> 15 0 23 1016 topology 1141 1402 > 16 0 23 1016 topology 1156 1402 -> 15 0 23 1016 topology 1096 1403 +> 15 0 23 1016 topology 1145 1403 > 16 0 23 1016 topology 1156 1403 -> 15 0 23 1016 topology 1037 1404 +> 15 0 23 1016 topology 1144 1404 > 16 0 23 1016 topology 1156 1404 -> 15 0 24 1016 topology 1041 1405 -> 16 0 24 1016 topology 1043 1405 -> 15 0 23 1016 topology 1126 1406 +> 15 0 23 1016 topology 1148 1405 +> 16 0 23 1016 topology 1156 1405 +> 15 0 23 1016 topology 1147 1406 > 16 0 23 1016 topology 1156 1406 -> 15 0 24 1016 topology 1026 1407 -> 16 0 24 1016 topology 1027 1407 -> 15 0 23 1016 topology 1027 1408 +> 15 0 23 1016 topology 1151 1407 +> 16 0 23 1016 topology 1156 1407 +> 15 0 23 1016 topology 1150 1408 > 16 0 23 1016 topology 1156 1408 -> 15 0 24 1016 topology 1038 1409 -> 16 0 24 1016 topology 1039 1409 -> 15 0 23 1016 topology 1079 1410 +> 15 0 23 1016 topology 1154 1409 +> 16 0 23 1016 topology 1156 1409 +> 15 0 23 1016 topology 1153 1410 > 16 0 23 1016 topology 1156 1410 -> 15 0 23 1016 topology 1055 1411 +> 15 0 23 1016 topology 1028 1411 > 16 0 23 1016 topology 1156 1411 -> 15 0 23 1016 topology 1039 1412 +> 15 0 23 1016 topology 1027 1412 > 16 0 23 1016 topology 1156 1412 -> 15 0 23 1016 topology 1139 1413 +> 15 0 23 1016 topology 1031 1413 > 16 0 23 1016 topology 1156 1413 -> 15 0 23 1016 topology 1115 1414 +> 15 0 23 1016 topology 1030 1414 > 16 0 23 1016 topology 1156 1414 -> 15 0 24 1016 topology 1044 1415 -> 16 0 24 1016 topology 1046 1415 -> 15 0 23 1016 topology 1091 1416 +> 15 0 23 1016 topology 1034 1415 +> 16 0 23 1016 topology 1156 1415 +> 15 0 23 1016 topology 1033 1416 > 16 0 23 1016 topology 1156 1416 -> 15 0 23 1016 topology 1067 1417 +> 15 0 23 1016 topology 1037 1417 > 16 0 23 1016 topology 1156 1417 -> 15 0 24 1016 topology 1020 1418 -> 16 0 24 1016 topology 1022 1418 -> 15 0 24 1016 topology 1074 1419 -> 16 0 24 1016 topology 1076 1419 -> 15 0 23 1016 topology 1151 1420 +> 15 0 23 1016 topology 1036 1418 +> 16 0 23 1016 topology 1156 1418 +> 15 0 23 1016 topology 1040 1419 +> 16 0 23 1016 topology 1156 1419 +> 15 0 23 1016 topology 1039 1420 > 16 0 23 1016 topology 1156 1420 -> 15 0 23 1016 topology 1127 1421 +> 15 0 23 1016 topology 1043 1421 > 16 0 23 1016 topology 1156 1421 -> 15 0 24 1016 topology 1050 1422 -> 16 0 24 1016 topology 1052 1422 -> 15 0 23 1016 topology 1103 1423 -> 16 0 23 1016 topology 1156 1423 -> 15 0 24 1016 topology 1104 1424 -> 16 0 24 1016 topology 1106 1424 -> 15 0 24 1016 topology 1080 1425 -> 16 0 24 1016 topology 1082 1425 -> 15 0 24 1016 topology 1134 1426 -> 16 0 24 1016 topology 1136 1426 -> 15 0 24 1016 topology 1056 1427 -> 16 0 24 1016 topology 1058 1427 -> 15 0 24 1016 topology 1110 1428 -> 16 0 24 1016 topology 1112 1428 -> 15 0 23 1016 topology 1051 1429 -> 16 0 23 1016 topology 1156 1429 -> 15 0 24 1016 topology 1032 1430 -> 16 0 24 1016 topology 1034 1430 -> 15 0 23 1016 topology 1081 1431 -> 16 0 23 1016 topology 1156 1431 -> 15 0 24 1016 topology 1086 1432 -> 16 0 24 1016 topology 1088 1432 -> 15 0 24 1016 topology 1140 1433 -> 16 0 24 1016 topology 1142 1433 -> 15 0 23 1016 topology 1111 1434 -> 16 0 23 1016 topology 1156 1434 -> 15 0 24 1016 topology 1062 1435 -> 16 0 24 1016 topology 1064 1435 -> 15 0 24 1016 topology 1116 1436 -> 16 0 24 1016 topology 1118 1436 -> 15 0 23 1016 topology 1141 1437 -> 16 0 23 1016 topology 1156 1437 -> 15 0 23 1016 topology 1028 1438 -> 16 0 23 1016 topology 1156 1438 -> 15 0 24 1016 topology 1044 1439 -> 16 0 24 1016 topology 1045 1439 -> 15 0 23 1016 topology 1063 1440 -> 16 0 23 1016 topology 1156 1440 -> 15 0 23 1016 topology 1093 1441 -> 16 0 23 1016 topology 1156 1441 -> 15 0 24 1016 topology 1092 1442 -> 16 0 24 1016 topology 1094 1442 -> 15 0 24 1016 topology 1146 1443 -> 16 0 24 1016 topology 1148 1443 -> 15 0 24 1016 topology 1047 1444 -> 16 0 24 1016 topology 1048 1444 -> 15 0 23 1016 topology 1123 1445 -> 16 0 23 1016 topology 1156 1445 -> 15 0 24 1016 topology 1068 1446 -> 16 0 24 1016 topology 1070 1446 -> 15 0 24 1016 topology 1122 1447 -> 16 0 24 1016 topology 1124 1447 -> 15 0 23 1016 topology 1153 1448 -> 16 0 23 1016 topology 1156 1448 -> 15 0 24 1016 topology 1023 1449 -> 16 0 24 1016 topology 1024 1449 -> 15 0 23 1016 topology 1040 1450 -> 16 0 23 1016 topology 1156 1450 -> 15 0 24 1016 topology 1050 1451 -> 16 0 24 1016 topology 1051 1451 -> 15 0 24 1016 topology 1104 1452 -> 16 0 24 1016 topology 1105 1452 -> 15 0 24 1016 topology 1098 1453 -> 16 0 24 1016 topology 1100 1453 -> 15 0 24 1016 topology 1152 1454 -> 16 0 24 1016 topology 1154 1454 -> 15 0 24 1016 topology 1053 1455 -> 16 0 24 1016 topology 1054 1455 -> 15 0 24 1016 topology 1107 1456 -> 16 0 24 1016 topology 1108 1456 -> 15 0 24 1016 topology 1128 1457 -> 16 0 24 1016 topology 1130 1457 -> 15 0 24 1016 topology 1056 1458 -> 16 0 24 1016 topology 1057 1458 -> 15 0 24 1016 topology 1110 1459 -> 16 0 24 1016 topology 1111 1459 -> 15 0 24 1016 topology 1059 1460 -> 16 0 24 1016 topology 1060 1460 -> 15 0 24 1016 topology 1113 1461 -> 16 0 24 1016 topology 1114 1461 -> 15 0 23 1016 topology 1024 1462 -> 16 0 23 1016 topology 1156 1462 -> 15 0 24 1016 topology 1035 1463 -> 16 0 24 1016 topology 1036 1463 -> 15 0 24 1016 topology 1062 1464 -> 16 0 24 1016 topology 1063 1464 -> 15 0 24 1016 topology 1116 1465 -> 16 0 24 1016 topology 1117 1465 -> 15 0 23 1016 topology 1046 1466 -> 16 0 23 1016 topology 1156 1466 -> 15 0 24 1016 topology 1065 1467 -> 16 0 24 1016 topology 1066 1467 -> 15 0 24 1016 topology 1119 1468 -> 16 0 24 1016 topology 1120 1468 -> 15 0 23 1016 topology 1106 1469 -> 16 0 23 1016 topology 1156 1469 -> 15 0 23 1016 topology 1036 1470 -> 16 0 23 1016 topology 1156 1470 -> 15 0 24 1016 topology 1068 1471 -> 16 0 24 1016 topology 1069 1471 -> 15 0 23 1016 topology 1082 1472 -> 16 0 23 1016 topology 1156 1472 -> 15 0 24 1016 topology 1122 1473 -> 16 0 24 1016 topology 1123 1473 -> 15 0 23 1016 topology 1058 1474 -> 16 0 23 1016 topology 1156 1474 -> 15 0 24 1016 topology 1071 1475 -> 16 0 24 1016 topology 1072 1475 -> 15 0 24 1016 topology 1125 1476 -> 16 0 24 1016 topology 1126 1476 -> 15 0 23 1016 topology 1142 1477 -> 16 0 23 1016 topology 1156 1477 -> 15 0 23 1016 topology 1118 1478 -> 16 0 23 1016 topology 1156 1478 -> 15 0 23 1016 topology 1094 1479 -> 16 0 23 1016 topology 1156 1479 -> 15 0 24 1016 topology 1128 1480 -> 16 0 24 1016 topology 1129 1480 -> 15 0 23 1016 topology 1070 1481 -> 16 0 23 1016 topology 1156 1481 -> 15 0 24 1016 topology 1131 1482 -> 16 0 24 1016 topology 1132 1482 -> 15 0 23 1016 topology 1154 1483 -> 16 0 23 1016 topology 1156 1483 -> 15 0 24 1016 topology 1023 1484 -> 16 0 24 1016 topology 1025 1484 -> 15 0 23 1016 topology 1130 1485 -> 16 0 23 1016 topology 1156 1485 -> 15 0 23 1016 topology 1048 1486 -> 16 0 23 1016 topology 1156 1486 -> 15 0 23 1016 topology 1078 1487 -> 16 0 23 1016 topology 1156 1487 -> 15 0 23 1016 topology 1019 1488 -> 16 0 23 1016 topology 1156 1488 -> 15 0 23 1016 topology 1108 1489 -> 16 0 23 1016 topology 1156 1489 -> 15 0 25 1016 topology 1155 1490 -> 16 0 25 1016 topology 1156 1490 -> 15 0 23 1016 topology 1138 1491 -> 16 0 23 1016 topology 1156 1491 -> 15 0 24 1016 topology 1035 1492 -> 16 0 24 1016 topology 1037 1492 -> 15 0 23 1016 topology 1060 1493 -> 16 0 23 1016 topology 1156 1493 -> 15 0 23 1016 topology 1090 1494 -> 16 0 23 1016 topology 1156 1494 -> 15 0 23 1016 topology 1031 1495 -> 16 0 23 1016 topology 1156 1495 -> 15 0 23 1016 topology 1120 1496 -> 16 0 23 1016 topology 1156 1496 -> 15 0 24 1016 topology 1020 1497 -> 16 0 24 1016 topology 1021 1497 -> 15 0 23 1016 topology 1150 1498 -> 16 0 23 1016 topology 1156 1498 -> 15 0 23 1016 topology 1072 1499 -> 16 0 23 1016 topology 1156 1499 -> 15 0 23 1016 topology 1102 1500 -> 16 0 23 1016 topology 1156 1500 -> 15 0 23 1016 topology 1043 1501 -> 16 0 23 1016 topology 1156 1501 -> 15 0 23 1016 topology 1132 1502 -> 16 0 23 1016 topology 1156 1502 -> 15 0 24 1016 topology 1032 1503 -> 16 0 24 1016 topology 1033 1503 -> 15 0 23 1016 topology 1021 1504 -> 16 0 23 1016 topology 1156 1504 -> 15 0 23 1016 topology 1049 1505 -> 16 0 23 1016 topology 1156 1505 -> 15 0 23 1016 topology 1033 1506 -> 16 0 23 1016 topology 1156 1506 -> 15 0 23 1016 topology 1109 1507 -> 16 0 23 1016 topology 1156 1507 -> 15 0 23 1016 topology 1085 1508 -> 16 0 23 1016 topology 1156 1508 -> 15 0 23 1016 topology 1061 1509 -> 16 0 23 1016 topology 1156 1509 -> 15 0 23 1016 topology 1145 1510 -> 16 0 23 1016 topology 1156 1510 -> 15 0 23 1016 topology 1121 1511 -> 16 0 23 1016 topology 1156 1511 -> 15 0 24 1016 topology 1047 1512 -> 16 0 24 1016 topology 1049 1512 -> 15 0 23 1016 topology 1097 1513 -> 16 0 23 1016 topology 1156 1513 -> 15 0 23 1016 topology 1073 1514 -> 16 0 23 1016 topology 1156 1514 -> 15 0 24 1016 topology 1077 1515 -> 16 0 24 1016 topology 1079 1515 -> 15 0 23 1158 topology 1175 1516 +> 15 0 23 1016 topology 1042 1422 +> 16 0 23 1016 topology 1156 1422 +> 15 0 24 1016 topology 1155 1423 +> 16 0 24 1016 topology 1156 1423 +> 15 0 25 1016 topology 1044 1424 +> 16 0 25 1016 topology 1046 1424 +> 15 0 25 1016 topology 1044 1425 +> 16 0 25 1016 topology 1045 1425 +> 15 0 25 1016 topology 1047 1426 +> 16 0 25 1016 topology 1049 1426 +> 15 0 25 1016 topology 1047 1427 +> 16 0 25 1016 topology 1048 1427 +> 15 0 25 1016 topology 1050 1428 +> 16 0 25 1016 topology 1052 1428 +> 15 0 25 1016 topology 1050 1429 +> 16 0 25 1016 topology 1051 1429 +> 15 0 25 1016 topology 1053 1430 +> 16 0 25 1016 topology 1055 1430 +> 15 0 25 1016 topology 1053 1431 +> 16 0 25 1016 topology 1054 1431 +> 15 0 25 1016 topology 1056 1432 +> 16 0 25 1016 topology 1058 1432 +> 15 0 25 1016 topology 1056 1433 +> 16 0 25 1016 topology 1057 1433 +> 15 0 25 1016 topology 1059 1434 +> 16 0 25 1016 topology 1061 1434 +> 15 0 25 1016 topology 1059 1435 +> 16 0 25 1016 topology 1060 1435 +> 15 0 25 1016 topology 1062 1436 +> 16 0 25 1016 topology 1064 1436 +> 15 0 25 1016 topology 1062 1437 +> 16 0 25 1016 topology 1063 1437 +> 15 0 25 1016 topology 1065 1438 +> 16 0 25 1016 topology 1067 1438 +> 15 0 25 1016 topology 1065 1439 +> 16 0 25 1016 topology 1066 1439 +> 15 0 25 1016 topology 1068 1440 +> 16 0 25 1016 topology 1070 1440 +> 15 0 25 1016 topology 1068 1441 +> 16 0 25 1016 topology 1069 1441 +> 15 0 25 1016 topology 1071 1442 +> 16 0 25 1016 topology 1073 1442 +> 15 0 25 1016 topology 1071 1443 +> 16 0 25 1016 topology 1072 1443 +> 15 0 25 1016 topology 1017 1444 +> 16 0 25 1016 topology 1019 1444 +> 15 0 25 1016 topology 1017 1445 +> 16 0 25 1016 topology 1018 1445 +> 15 0 25 1016 topology 1074 1446 +> 16 0 25 1016 topology 1076 1446 +> 15 0 25 1016 topology 1074 1447 +> 16 0 25 1016 topology 1075 1447 +> 15 0 25 1016 topology 1077 1448 +> 16 0 25 1016 topology 1079 1448 +> 15 0 25 1016 topology 1077 1449 +> 16 0 25 1016 topology 1078 1449 +> 15 0 25 1016 topology 1080 1450 +> 16 0 25 1016 topology 1082 1450 +> 15 0 25 1016 topology 1080 1451 +> 16 0 25 1016 topology 1081 1451 +> 15 0 25 1016 topology 1083 1452 +> 16 0 25 1016 topology 1085 1452 +> 15 0 25 1016 topology 1083 1453 +> 16 0 25 1016 topology 1084 1453 +> 15 0 25 1016 topology 1086 1454 +> 16 0 25 1016 topology 1088 1454 +> 15 0 25 1016 topology 1086 1455 +> 16 0 25 1016 topology 1087 1455 +> 15 0 25 1016 topology 1089 1456 +> 16 0 25 1016 topology 1091 1456 +> 15 0 25 1016 topology 1089 1457 +> 16 0 25 1016 topology 1090 1457 +> 15 0 25 1016 topology 1092 1458 +> 16 0 25 1016 topology 1094 1458 +> 15 0 25 1016 topology 1092 1459 +> 16 0 25 1016 topology 1093 1459 +> 15 0 25 1016 topology 1095 1460 +> 16 0 25 1016 topology 1097 1460 +> 15 0 25 1016 topology 1095 1461 +> 16 0 25 1016 topology 1096 1461 +> 15 0 25 1016 topology 1098 1462 +> 16 0 25 1016 topology 1100 1462 +> 15 0 25 1016 topology 1098 1463 +> 16 0 25 1016 topology 1099 1463 +> 15 0 25 1016 topology 1101 1464 +> 16 0 25 1016 topology 1103 1464 +> 15 0 25 1016 topology 1101 1465 +> 16 0 25 1016 topology 1102 1465 +> 15 0 25 1016 topology 1020 1466 +> 16 0 25 1016 topology 1022 1466 +> 15 0 25 1016 topology 1020 1467 +> 16 0 25 1016 topology 1021 1467 +> 15 0 25 1016 topology 1104 1468 +> 16 0 25 1016 topology 1106 1468 +> 15 0 25 1016 topology 1104 1469 +> 16 0 25 1016 topology 1105 1469 +> 15 0 25 1016 topology 1107 1470 +> 16 0 25 1016 topology 1109 1470 +> 15 0 25 1016 topology 1107 1471 +> 16 0 25 1016 topology 1108 1471 +> 15 0 25 1016 topology 1110 1472 +> 16 0 25 1016 topology 1112 1472 +> 15 0 25 1016 topology 1110 1473 +> 16 0 25 1016 topology 1111 1473 +> 15 0 25 1016 topology 1113 1474 +> 16 0 25 1016 topology 1115 1474 +> 15 0 25 1016 topology 1113 1475 +> 16 0 25 1016 topology 1114 1475 +> 15 0 25 1016 topology 1116 1476 +> 16 0 25 1016 topology 1118 1476 +> 15 0 25 1016 topology 1116 1477 +> 16 0 25 1016 topology 1117 1477 +> 15 0 25 1016 topology 1119 1478 +> 16 0 25 1016 topology 1121 1478 +> 15 0 25 1016 topology 1119 1479 +> 16 0 25 1016 topology 1120 1479 +> 15 0 25 1016 topology 1122 1480 +> 16 0 25 1016 topology 1124 1480 +> 15 0 25 1016 topology 1122 1481 +> 16 0 25 1016 topology 1123 1481 +> 15 0 25 1016 topology 1125 1482 +> 16 0 25 1016 topology 1127 1482 +> 15 0 25 1016 topology 1125 1483 +> 16 0 25 1016 topology 1126 1483 +> 15 0 25 1016 topology 1128 1484 +> 16 0 25 1016 topology 1130 1484 +> 15 0 25 1016 topology 1128 1485 +> 16 0 25 1016 topology 1129 1485 +> 15 0 25 1016 topology 1131 1486 +> 16 0 25 1016 topology 1133 1486 +> 15 0 25 1016 topology 1131 1487 +> 16 0 25 1016 topology 1132 1487 +> 15 0 25 1016 topology 1023 1488 +> 16 0 25 1016 topology 1025 1488 +> 15 0 25 1016 topology 1023 1489 +> 16 0 25 1016 topology 1024 1489 +> 15 0 25 1016 topology 1134 1490 +> 16 0 25 1016 topology 1136 1490 +> 15 0 25 1016 topology 1134 1491 +> 16 0 25 1016 topology 1135 1491 +> 15 0 25 1016 topology 1137 1492 +> 16 0 25 1016 topology 1139 1492 +> 15 0 25 1016 topology 1137 1493 +> 16 0 25 1016 topology 1138 1493 +> 15 0 25 1016 topology 1140 1494 +> 16 0 25 1016 topology 1142 1494 +> 15 0 25 1016 topology 1140 1495 +> 16 0 25 1016 topology 1141 1495 +> 15 0 25 1016 topology 1143 1496 +> 16 0 25 1016 topology 1145 1496 +> 15 0 25 1016 topology 1143 1497 +> 16 0 25 1016 topology 1144 1497 +> 15 0 25 1016 topology 1146 1498 +> 16 0 25 1016 topology 1148 1498 +> 15 0 25 1016 topology 1146 1499 +> 16 0 25 1016 topology 1147 1499 +> 15 0 25 1016 topology 1149 1500 +> 16 0 25 1016 topology 1151 1500 +> 15 0 25 1016 topology 1149 1501 +> 16 0 25 1016 topology 1150 1501 +> 15 0 25 1016 topology 1152 1502 +> 16 0 25 1016 topology 1154 1502 +> 15 0 25 1016 topology 1152 1503 +> 16 0 25 1016 topology 1153 1503 +> 15 0 25 1016 topology 1026 1504 +> 16 0 25 1016 topology 1028 1504 +> 15 0 25 1016 topology 1026 1505 +> 16 0 25 1016 topology 1027 1505 +> 15 0 25 1016 topology 1029 1506 +> 16 0 25 1016 topology 1031 1506 +> 15 0 25 1016 topology 1029 1507 +> 16 0 25 1016 topology 1030 1507 +> 15 0 25 1016 topology 1032 1508 +> 16 0 25 1016 topology 1034 1508 +> 15 0 25 1016 topology 1032 1509 +> 16 0 25 1016 topology 1033 1509 +> 15 0 25 1016 topology 1035 1510 +> 16 0 25 1016 topology 1037 1510 +> 15 0 25 1016 topology 1035 1511 +> 16 0 25 1016 topology 1036 1511 +> 15 0 25 1016 topology 1038 1512 +> 16 0 25 1016 topology 1040 1512 +> 15 0 25 1016 topology 1038 1513 +> 16 0 25 1016 topology 1039 1513 +> 15 0 25 1016 topology 1041 1514 +> 16 0 25 1016 topology 1043 1514 +> 15 0 25 1016 topology 1041 1515 +> 16 0 25 1016 topology 1042 1515 +> 15 0 23 1158 topology 1161 1516 > 16 0 23 1158 topology 1184 1516 -> 15 0 24 1158 topology 1159 1517 -> 16 0 24 1158 topology 1161 1517 -> 15 0 24 1158 topology 1162 1518 -> 16 0 24 1158 topology 1164 1518 -> 15 0 24 1158 topology 1165 1519 -> 16 0 24 1158 topology 1167 1519 -> 15 0 24 1158 topology 1168 1520 -> 16 0 24 1158 topology 1170 1520 -> 15 0 24 1158 topology 1171 1521 -> 16 0 24 1158 topology 1173 1521 -> 15 0 24 1158 topology 1174 1522 -> 16 0 24 1158 topology 1176 1522 -> 15 0 23 1158 topology 1164 1523 +> 15 0 23 1158 topology 1160 1517 +> 16 0 23 1158 topology 1184 1517 +> 15 0 23 1158 topology 1164 1518 +> 16 0 23 1158 topology 1184 1518 +> 15 0 23 1158 topology 1163 1519 +> 16 0 23 1158 topology 1184 1519 +> 15 0 23 1158 topology 1167 1520 +> 16 0 23 1158 topology 1184 1520 +> 15 0 23 1158 topology 1166 1521 +> 16 0 23 1158 topology 1184 1521 +> 15 0 23 1158 topology 1170 1522 +> 16 0 23 1158 topology 1184 1522 +> 15 0 23 1158 topology 1169 1523 > 16 0 23 1158 topology 1184 1523 -> 15 0 24 1158 topology 1177 1524 -> 16 0 24 1158 topology 1179 1524 -> 15 0 24 1158 topology 1180 1525 -> 16 0 24 1158 topology 1182 1525 -> 15 0 24 1158 topology 1162 1526 -> 16 0 24 1158 topology 1163 1526 -> 15 0 23 1158 topology 1176 1527 +> 15 0 23 1158 topology 1173 1524 +> 16 0 23 1158 topology 1184 1524 +> 15 0 23 1158 topology 1172 1525 +> 16 0 23 1158 topology 1184 1525 +> 15 0 23 1158 topology 1176 1526 +> 16 0 23 1158 topology 1184 1526 +> 15 0 23 1158 topology 1175 1527 > 16 0 23 1158 topology 1184 1527 -> 15 0 24 1158 topology 1168 1528 -> 16 0 24 1158 topology 1169 1528 -> 15 0 23 1158 topology 1160 1529 +> 15 0 23 1158 topology 1179 1528 +> 16 0 23 1158 topology 1184 1528 +> 15 0 23 1158 topology 1178 1529 > 16 0 23 1158 topology 1184 1529 -> 15 0 24 1158 topology 1174 1530 -> 16 0 24 1158 topology 1175 1530 -> 15 0 23 1158 topology 1172 1531 +> 15 0 23 1158 topology 1182 1530 +> 16 0 23 1158 topology 1184 1530 +> 15 0 23 1158 topology 1181 1531 > 16 0 23 1158 topology 1184 1531 -> 15 0 24 1158 topology 1180 1532 -> 16 0 24 1158 topology 1181 1532 -> 15 0 23 1158 topology 1167 1533 -> 16 0 23 1158 topology 1184 1533 -> 15 0 23 1158 topology 1179 1534 -> 16 0 23 1158 topology 1184 1534 -> 15 0 25 1158 topology 1183 1535 -> 16 0 25 1158 topology 1184 1535 -> 15 0 23 1158 topology 1169 1536 -> 16 0 23 1158 topology 1184 1536 -> 15 0 23 1158 topology 1181 1537 -> 16 0 23 1158 topology 1184 1537 -> 15 0 24 1158 topology 1159 1538 -> 16 0 24 1158 topology 1160 1538 -> 15 0 23 1158 topology 1170 1539 -> 16 0 23 1158 topology 1184 1539 -> 15 0 24 1158 topology 1165 1540 -> 16 0 24 1158 topology 1166 1540 -> 15 0 23 1158 topology 1182 1541 -> 16 0 23 1158 topology 1184 1541 -> 15 0 24 1158 topology 1171 1542 -> 16 0 24 1158 topology 1172 1542 -> 15 0 23 1158 topology 1166 1543 -> 16 0 23 1158 topology 1184 1543 -> 15 0 24 1158 topology 1177 1544 -> 16 0 24 1158 topology 1178 1544 -> 15 0 23 1158 topology 1178 1545 -> 16 0 23 1158 topology 1184 1545 -> 15 0 23 1158 topology 1161 1546 -> 16 0 23 1158 topology 1184 1546 -> 15 0 23 1158 topology 1173 1547 -> 16 0 23 1158 topology 1184 1547 -> 15 0 23 1158 topology 1163 1548 -> 16 0 23 1158 topology 1184 1548 -> 15 0 26 869 topology 1157 1549 -> 16 0 26 869 topology 1187 1549 -> 15 0 27 869 topology 949 1550 -> 16 0 27 869 topology 951 1550 +> 15 0 24 1158 topology 1183 1532 +> 16 0 24 1158 topology 1184 1532 +> 15 0 25 1158 topology 1159 1533 +> 16 0 25 1158 topology 1161 1533 +> 15 0 25 1158 topology 1159 1534 +> 16 0 25 1158 topology 1160 1534 +> 15 0 25 1158 topology 1162 1535 +> 16 0 25 1158 topology 1164 1535 +> 15 0 25 1158 topology 1162 1536 +> 16 0 25 1158 topology 1163 1536 +> 15 0 25 1158 topology 1165 1537 +> 16 0 25 1158 topology 1167 1537 +> 15 0 25 1158 topology 1165 1538 +> 16 0 25 1158 topology 1166 1538 +> 15 0 25 1158 topology 1168 1539 +> 16 0 25 1158 topology 1170 1539 +> 15 0 25 1158 topology 1168 1540 +> 16 0 25 1158 topology 1169 1540 +> 15 0 25 1158 topology 1171 1541 +> 16 0 25 1158 topology 1173 1541 +> 15 0 25 1158 topology 1171 1542 +> 16 0 25 1158 topology 1172 1542 +> 15 0 25 1158 topology 1174 1543 +> 16 0 25 1158 topology 1176 1543 +> 15 0 25 1158 topology 1174 1544 +> 16 0 25 1158 topology 1175 1544 +> 15 0 25 1158 topology 1177 1545 +> 16 0 25 1158 topology 1179 1545 +> 15 0 25 1158 topology 1177 1546 +> 16 0 25 1158 topology 1178 1546 +> 15 0 25 1158 topology 1180 1547 +> 16 0 25 1158 topology 1182 1547 +> 15 0 25 1158 topology 1180 1548 +> 16 0 25 1158 topology 1181 1548 +> 15 0 26 869 topology 1015 1549 +> 16 0 26 869 topology 1013 1549 +> 15 0 26 869 topology 1157 1550 +> 16 0 26 869 topology 1155 1550 > 15 0 26 869 topology 1185 1551 -> 16 0 26 869 topology 1187 1551 -> 15 0 26 869 topology 1015 1552 -> 16 0 26 869 topology 1013 1552 -> 15 0 21 869 topology 1015 1553 -> 16 0 21 869 topology 1185 1553 -> 15 0 21 869 topology 951 1554 -> 16 0 21 869 topology 1185 1554 -> 15 0 26 869 topology 1015 1555 +> 16 0 26 869 topology 1183 1551 +> 15 0 26 869 topology 951 1552 +> 16 0 26 869 topology 1187 1552 +> 15 0 26 869 topology 1015 1553 +> 16 0 26 869 topology 1187 1553 +> 15 0 26 869 topology 1157 1554 +> 16 0 26 869 topology 1187 1554 +> 15 0 26 869 topology 1185 1555 > 16 0 26 869 topology 1187 1555 -> 15 0 21 869 topology 1015 1556 -> 16 0 21 869 topology 1157 1556 -> 15 0 26 869 topology 951 1557 -> 16 0 26 869 topology 1187 1557 -> 15 0 21 869 topology 1157 1558 -> 16 0 21 869 topology 1185 1558 -> 15 0 26 869 topology 1185 1559 -> 16 0 26 869 topology 1183 1559 -> 15 0 21 869 topology 951 1560 -> 16 0 21 869 topology 1015 1560 -> 15 0 26 869 topology 1157 1561 -> 16 0 26 869 topology 1155 1561 -> 15 0 21 869 topology 951 1562 -> 16 0 21 869 topology 1157 1562 -> 15 0 23 1190 topology 1231 1563 +> 15 0 27 869 topology 949 1556 +> 16 0 27 869 topology 951 1556 +> 15 0 20 869 topology 951 1557 +> 16 0 20 869 topology 1015 1557 +> 15 0 20 869 topology 951 1558 +> 16 0 20 869 topology 1157 1558 +> 15 0 20 869 topology 1015 1559 +> 16 0 20 869 topology 1157 1559 +> 15 0 20 869 topology 951 1560 +> 16 0 20 869 topology 1185 1560 +> 15 0 20 869 topology 1015 1561 +> 16 0 20 869 topology 1185 1561 +> 15 0 20 869 topology 1157 1562 +> 16 0 20 869 topology 1185 1562 +> 15 0 23 1190 topology 1220 1563 > 16 0 23 1190 topology 1360 1563 -> 15 0 24 1190 topology 1320 1564 -> 16 0 24 1190 topology 1321 1564 -> 15 0 23 1190 topology 1202 1565 +> 15 0 23 1190 topology 1219 1564 +> 16 0 23 1190 topology 1360 1564 +> 15 0 23 1190 topology 1223 1565 > 16 0 23 1190 topology 1360 1565 -> 15 0 23 1190 topology 1291 1566 +> 15 0 23 1190 topology 1222 1566 > 16 0 23 1190 topology 1360 1566 -> 15 0 24 1190 topology 1296 1567 -> 16 0 24 1190 topology 1297 1567 -> 15 0 24 1190 topology 1272 1568 -> 16 0 24 1190 topology 1273 1568 -> 15 0 23 1190 topology 1351 1569 +> 15 0 23 1190 topology 1226 1567 +> 16 0 23 1190 topology 1360 1567 +> 15 0 23 1190 topology 1225 1568 +> 16 0 23 1190 topology 1360 1568 +> 15 0 23 1190 topology 1229 1569 > 16 0 23 1190 topology 1360 1569 -> 15 0 23 1190 topology 1273 1570 +> 15 0 23 1190 topology 1228 1570 > 16 0 23 1190 topology 1360 1570 -> 15 0 24 1190 topology 1356 1571 -> 16 0 24 1190 topology 1357 1571 -> 15 0 24 1190 topology 1248 1572 -> 16 0 24 1190 topology 1250 1572 -> 15 0 23 1190 topology 1333 1573 +> 15 0 23 1190 topology 1232 1571 +> 16 0 23 1190 topology 1360 1571 +> 15 0 23 1190 topology 1231 1572 +> 16 0 23 1190 topology 1360 1572 +> 15 0 23 1190 topology 1235 1573 > 16 0 23 1190 topology 1360 1573 -> 15 0 24 1190 topology 1332 1574 -> 16 0 24 1190 topology 1333 1574 -> 15 0 24 1190 topology 1254 1575 -> 16 0 24 1190 topology 1256 1575 -> 15 0 24 1190 topology 1311 1576 -> 16 0 24 1190 topology 1313 1576 -> 15 0 23 1190 topology 1198 1577 +> 15 0 23 1190 topology 1234 1574 +> 16 0 23 1190 topology 1360 1574 +> 15 0 23 1190 topology 1238 1575 +> 16 0 23 1190 topology 1360 1575 +> 15 0 23 1190 topology 1237 1576 +> 16 0 23 1190 topology 1360 1576 +> 15 0 23 1190 topology 1241 1577 > 16 0 23 1190 topology 1360 1577 -> 15 0 24 1190 topology 1260 1578 -> 16 0 24 1190 topology 1262 1578 -> 15 0 23 1190 topology 1250 1579 +> 15 0 23 1190 topology 1240 1578 +> 16 0 23 1190 topology 1360 1578 +> 15 0 23 1190 topology 1244 1579 > 16 0 23 1190 topology 1360 1579 -> 15 0 24 1190 topology 1209 1580 -> 16 0 24 1190 topology 1211 1580 -> 15 0 24 1190 topology 1317 1581 -> 16 0 24 1190 topology 1319 1581 -> 15 0 24 1190 topology 1266 1582 -> 16 0 24 1190 topology 1268 1582 -> 15 0 23 1190 topology 1286 1583 +> 15 0 23 1190 topology 1243 1580 +> 16 0 23 1190 topology 1360 1580 +> 15 0 23 1190 topology 1247 1581 +> 16 0 23 1190 topology 1360 1581 +> 15 0 23 1190 topology 1246 1582 +> 16 0 23 1190 topology 1360 1582 +> 15 0 23 1190 topology 1193 1583 > 16 0 23 1190 topology 1360 1583 -> 15 0 23 1190 topology 1238 1584 +> 15 0 23 1190 topology 1192 1584 > 16 0 23 1190 topology 1360 1584 -> 15 0 24 1190 topology 1323 1585 -> 16 0 24 1190 topology 1325 1585 -> 15 0 23 1190 topology 1322 1586 +> 15 0 23 1190 topology 1250 1585 +> 16 0 23 1190 topology 1360 1585 +> 15 0 23 1190 topology 1249 1586 > 16 0 23 1190 topology 1360 1586 -> 15 0 24 1190 topology 1272 1587 -> 16 0 24 1190 topology 1274 1587 -> 15 0 23 1190 topology 1274 1588 +> 15 0 23 1190 topology 1253 1587 +> 16 0 23 1190 topology 1360 1587 +> 15 0 23 1190 topology 1252 1588 > 16 0 23 1190 topology 1360 1588 -> 15 0 24 1190 topology 1329 1589 -> 16 0 24 1190 topology 1331 1589 -> 15 0 23 1190 topology 1358 1590 +> 15 0 23 1190 topology 1256 1589 +> 16 0 23 1190 topology 1360 1589 +> 15 0 23 1190 topology 1255 1590 > 16 0 23 1190 topology 1360 1590 -> 15 0 24 1190 topology 1335 1591 -> 16 0 24 1190 topology 1337 1591 -> 15 0 24 1190 topology 1209 1592 -> 16 0 24 1190 topology 1210 1592 -> 15 0 23 1190 topology 1193 1593 +> 15 0 23 1190 topology 1259 1591 +> 16 0 23 1190 topology 1360 1591 +> 15 0 23 1190 topology 1258 1592 +> 16 0 23 1190 topology 1360 1592 +> 15 0 23 1190 topology 1262 1593 > 16 0 23 1190 topology 1360 1593 -> 15 0 23 1190 topology 1258 1594 +> 15 0 23 1190 topology 1261 1594 > 16 0 23 1190 topology 1360 1594 -> 15 0 23 1190 topology 1318 1595 +> 15 0 23 1190 topology 1265 1595 > 16 0 23 1190 topology 1360 1595 -> 15 0 23 1190 topology 1240 1596 +> 15 0 23 1190 topology 1264 1596 > 16 0 23 1190 topology 1360 1596 -> 15 0 23 1190 topology 1300 1597 +> 15 0 23 1190 topology 1268 1597 > 16 0 23 1190 topology 1360 1597 -> 15 0 24 1190 topology 1194 1598 -> 16 0 24 1190 topology 1196 1598 -> 15 0 23 1190 topology 1217 1599 +> 15 0 23 1190 topology 1267 1598 +> 16 0 23 1190 topology 1360 1598 +> 15 0 23 1190 topology 1271 1599 > 16 0 23 1190 topology 1360 1599 -> 15 0 23 1190 topology 1207 1600 +> 15 0 23 1190 topology 1270 1600 > 16 0 23 1190 topology 1360 1600 -> 15 0 23 1190 topology 1229 1601 +> 15 0 23 1190 topology 1274 1601 > 16 0 23 1190 topology 1360 1601 -> 15 0 23 1190 topology 1313 1602 +> 15 0 23 1190 topology 1273 1602 > 16 0 23 1190 topology 1360 1602 -> 15 0 23 1190 topology 1265 1603 +> 15 0 23 1190 topology 1277 1603 > 16 0 23 1190 topology 1360 1603 -> 15 0 24 1190 topology 1251 1604 -> 16 0 24 1190 topology 1252 1604 -> 15 0 23 1190 topology 1349 1605 +> 15 0 23 1190 topology 1276 1604 +> 16 0 23 1190 topology 1360 1604 +> 15 0 23 1190 topology 1196 1605 > 16 0 23 1190 topology 1360 1605 -> 15 0 24 1190 topology 1227 1606 -> 16 0 24 1190 topology 1228 1606 -> 15 0 23 1190 topology 1301 1607 +> 15 0 23 1190 topology 1195 1606 +> 16 0 23 1190 topology 1360 1606 +> 15 0 23 1190 topology 1280 1607 > 16 0 23 1190 topology 1360 1607 -> 15 0 24 1190 topology 1311 1608 -> 16 0 24 1190 topology 1312 1608 -> 15 0 23 1190 topology 1337 1609 +> 15 0 23 1190 topology 1279 1608 +> 16 0 23 1190 topology 1360 1608 +> 15 0 23 1190 topology 1283 1609 > 16 0 23 1190 topology 1360 1609 -> 15 0 24 1190 topology 1287 1610 -> 16 0 24 1190 topology 1288 1610 -> 15 0 23 1190 topology 1225 1611 +> 15 0 23 1190 topology 1282 1610 +> 16 0 23 1190 topology 1360 1610 +> 15 0 23 1190 topology 1286 1611 > 16 0 23 1190 topology 1360 1611 -> 15 0 24 1190 topology 1263 1612 -> 16 0 24 1190 topology 1264 1612 -> 15 0 24 1190 topology 1212 1613 -> 16 0 24 1190 topology 1213 1613 -> 15 0 24 1190 topology 1239 1614 -> 16 0 24 1190 topology 1240 1614 -> 15 0 23 1190 topology 1285 1615 +> 15 0 23 1190 topology 1285 1612 +> 16 0 23 1190 topology 1360 1612 +> 15 0 23 1190 topology 1289 1613 +> 16 0 23 1190 topology 1360 1613 +> 15 0 23 1190 topology 1288 1614 +> 16 0 23 1190 topology 1360 1614 +> 15 0 23 1190 topology 1292 1615 > 16 0 23 1190 topology 1360 1615 -> 15 0 24 1190 topology 1347 1616 -> 16 0 24 1190 topology 1348 1616 -> 15 0 24 1190 topology 1323 1617 -> 16 0 24 1190 topology 1324 1617 -> 15 0 23 1190 topology 1345 1618 +> 15 0 23 1190 topology 1291 1616 +> 16 0 23 1190 topology 1360 1616 +> 15 0 23 1190 topology 1295 1617 +> 16 0 23 1190 topology 1360 1617 +> 15 0 23 1190 topology 1294 1618 > 16 0 23 1190 topology 1360 1618 -> 15 0 23 1190 topology 1267 1619 +> 15 0 23 1190 topology 1298 1619 > 16 0 23 1190 topology 1360 1619 -> 15 0 23 1190 topology 1208 1620 +> 15 0 23 1190 topology 1297 1620 > 16 0 23 1190 topology 1360 1620 -> 15 0 24 1190 topology 1299 1621 -> 16 0 24 1190 topology 1300 1621 -> 15 0 24 1190 topology 1218 1622 -> 16 0 24 1190 topology 1220 1622 -> 15 0 23 1190 topology 1327 1623 +> 15 0 23 1190 topology 1301 1621 +> 16 0 23 1190 topology 1360 1621 +> 15 0 23 1190 topology 1300 1622 +> 16 0 23 1190 topology 1360 1622 +> 15 0 23 1190 topology 1304 1623 > 16 0 23 1190 topology 1360 1623 -> 15 0 24 1190 topology 1275 1624 -> 16 0 24 1190 topology 1276 1624 -> 15 0 24 1190 topology 1224 1625 -> 16 0 24 1190 topology 1226 1625 -> 15 0 24 1190 topology 1335 1626 -> 16 0 24 1190 topology 1336 1626 -> 15 0 24 1190 topology 1281 1627 -> 16 0 24 1190 topology 1283 1627 -> 15 0 23 1190 topology 1192 1628 +> 15 0 23 1190 topology 1303 1624 +> 16 0 23 1190 topology 1360 1624 +> 15 0 23 1190 topology 1307 1625 +> 16 0 23 1190 topology 1360 1625 +> 15 0 23 1190 topology 1306 1626 +> 16 0 23 1190 topology 1360 1626 +> 15 0 23 1190 topology 1199 1627 +> 16 0 23 1190 topology 1360 1627 +> 15 0 23 1190 topology 1198 1628 > 16 0 23 1190 topology 1360 1628 -> 15 0 24 1190 topology 1203 1629 -> 16 0 24 1190 topology 1205 1629 -> 15 0 24 1190 topology 1230 1630 -> 16 0 24 1190 topology 1232 1630 -> 15 0 24 1190 topology 1338 1631 -> 16 0 24 1190 topology 1340 1631 -> 15 0 23 1190 topology 1220 1632 +> 15 0 23 1190 topology 1310 1629 +> 16 0 23 1190 topology 1360 1629 +> 15 0 23 1190 topology 1309 1630 +> 16 0 23 1190 topology 1360 1630 +> 15 0 23 1190 topology 1313 1631 +> 16 0 23 1190 topology 1360 1631 +> 15 0 23 1190 topology 1312 1632 > 16 0 23 1190 topology 1360 1632 -> 15 0 24 1190 topology 1287 1633 -> 16 0 24 1190 topology 1289 1633 -> 15 0 24 1190 topology 1236 1634 -> 16 0 24 1190 topology 1238 1634 -> 15 0 24 1190 topology 1344 1635 -> 16 0 24 1190 topology 1346 1635 -> 15 0 24 1190 topology 1191 1636 -> 16 0 24 1190 topology 1192 1636 -> 15 0 23 1190 topology 1256 1637 +> 15 0 23 1190 topology 1316 1633 +> 16 0 23 1190 topology 1360 1633 +> 15 0 23 1190 topology 1315 1634 +> 16 0 23 1190 topology 1360 1634 +> 15 0 23 1190 topology 1319 1635 +> 16 0 23 1190 topology 1360 1635 +> 15 0 23 1190 topology 1318 1636 +> 16 0 23 1190 topology 1360 1636 +> 15 0 23 1190 topology 1322 1637 > 16 0 23 1190 topology 1360 1637 -> 15 0 24 1190 topology 1293 1638 -> 16 0 24 1190 topology 1295 1638 -> 15 0 23 1190 topology 1340 1639 +> 15 0 23 1190 topology 1321 1638 +> 16 0 23 1190 topology 1360 1638 +> 15 0 23 1190 topology 1325 1639 > 16 0 23 1190 topology 1360 1639 -> 15 0 23 1190 topology 1216 1640 +> 15 0 23 1190 topology 1324 1640 > 16 0 23 1190 topology 1360 1640 -> 15 0 24 1190 topology 1242 1641 -> 16 0 24 1190 topology 1244 1641 -> 15 0 23 1190 topology 1292 1642 +> 15 0 23 1190 topology 1328 1641 +> 16 0 23 1190 topology 1360 1641 +> 15 0 23 1190 topology 1327 1642 > 16 0 23 1190 topology 1360 1642 -> 15 0 24 1190 topology 1350 1643 -> 16 0 24 1190 topology 1352 1643 -> 15 0 23 1190 topology 1244 1644 +> 15 0 23 1190 topology 1331 1643 +> 16 0 23 1190 topology 1360 1643 +> 15 0 23 1190 topology 1330 1644 > 16 0 23 1190 topology 1360 1644 -> 15 0 24 1190 topology 1299 1645 -> 16 0 24 1190 topology 1301 1645 -> 15 0 23 1190 topology 1328 1646 +> 15 0 23 1190 topology 1334 1645 +> 16 0 23 1190 topology 1360 1645 +> 15 0 23 1190 topology 1333 1646 > 16 0 23 1190 topology 1360 1646 -> 15 0 24 1190 topology 1356 1647 -> 16 0 24 1190 topology 1358 1647 -> 15 0 24 1190 topology 1305 1648 -> 16 0 24 1190 topology 1307 1648 -> 15 0 23 1190 topology 1252 1649 +> 15 0 23 1190 topology 1337 1647 +> 16 0 23 1190 topology 1360 1647 +> 15 0 23 1190 topology 1336 1648 +> 16 0 23 1190 topology 1360 1648 +> 15 0 23 1190 topology 1202 1649 > 16 0 23 1190 topology 1360 1649 -> 15 0 23 1190 topology 1312 1650 +> 15 0 23 1190 topology 1201 1650 > 16 0 23 1190 topology 1360 1650 -> 15 0 23 1190 topology 1199 1651 +> 15 0 23 1190 topology 1340 1651 > 16 0 23 1190 topology 1360 1651 -> 15 0 23 1190 topology 1234 1652 +> 15 0 23 1190 topology 1339 1652 > 16 0 23 1190 topology 1360 1652 -> 15 0 24 1190 topology 1215 1653 -> 16 0 24 1190 topology 1216 1653 -> 15 0 23 1190 topology 1294 1654 +> 15 0 23 1190 topology 1343 1653 +> 16 0 23 1190 topology 1360 1653 +> 15 0 23 1190 topology 1342 1654 > 16 0 23 1190 topology 1360 1654 -> 15 0 23 1190 topology 1354 1655 +> 15 0 23 1190 topology 1346 1655 > 16 0 23 1190 topology 1360 1655 -> 15 0 23 1190 topology 1276 1656 +> 15 0 23 1190 topology 1345 1656 > 16 0 23 1190 topology 1360 1656 -> 15 0 23 1190 topology 1336 1657 +> 15 0 23 1190 topology 1349 1657 > 16 0 23 1190 topology 1360 1657 -> 15 0 23 1190 topology 1201 1658 +> 15 0 23 1190 topology 1348 1658 > 16 0 23 1190 topology 1360 1658 -> 15 0 24 1190 topology 1218 1659 -> 16 0 24 1190 topology 1219 1659 -> 15 0 23 1190 topology 1283 1660 +> 15 0 23 1190 topology 1352 1659 +> 16 0 23 1190 topology 1360 1659 +> 15 0 23 1190 topology 1351 1660 > 16 0 23 1190 topology 1360 1660 -> 15 0 24 1190 topology 1212 1661 -> 16 0 24 1190 topology 1214 1661 -> 15 0 24 1190 topology 1194 1662 -> 16 0 24 1190 topology 1195 1662 -> 15 0 23 1190 topology 1235 1663 +> 15 0 23 1190 topology 1355 1661 +> 16 0 23 1190 topology 1360 1661 +> 15 0 23 1190 topology 1354 1662 +> 16 0 23 1190 topology 1360 1662 +> 15 0 23 1190 topology 1358 1663 > 16 0 23 1190 topology 1360 1663 -> 15 0 23 1190 topology 1319 1664 +> 15 0 23 1190 topology 1357 1664 > 16 0 23 1190 topology 1360 1664 -> 15 0 24 1190 topology 1278 1665 -> 16 0 24 1190 topology 1279 1665 -> 15 0 23 1190 topology 1271 1666 +> 15 0 23 1190 topology 1205 1665 +> 16 0 23 1190 topology 1360 1665 +> 15 0 23 1190 topology 1204 1666 > 16 0 23 1190 topology 1360 1666 -> 15 0 24 1190 topology 1254 1667 -> 16 0 24 1190 topology 1255 1667 -> 15 0 23 1190 topology 1355 1668 +> 15 0 23 1190 topology 1208 1667 +> 16 0 23 1190 topology 1360 1667 +> 15 0 23 1190 topology 1207 1668 > 16 0 23 1190 topology 1360 1668 -> 15 0 24 1190 topology 1230 1669 -> 16 0 24 1190 topology 1231 1669 -> 15 0 23 1190 topology 1307 1670 +> 15 0 23 1190 topology 1211 1669 +> 16 0 23 1190 topology 1360 1669 +> 15 0 23 1190 topology 1210 1670 > 16 0 23 1190 topology 1360 1670 -> 15 0 24 1190 topology 1338 1671 -> 16 0 24 1190 topology 1339 1671 -> 15 0 23 1190 topology 1219 1672 +> 15 0 23 1190 topology 1214 1671 +> 16 0 23 1190 topology 1360 1671 +> 15 0 23 1190 topology 1213 1672 > 16 0 23 1190 topology 1360 1672 -> 15 0 24 1190 topology 1314 1673 -> 16 0 24 1190 topology 1315 1673 -> 15 0 23 1190 topology 1279 1674 +> 15 0 23 1190 topology 1217 1673 +> 16 0 23 1190 topology 1360 1673 +> 15 0 23 1190 topology 1216 1674 > 16 0 23 1190 topology 1360 1674 -> 15 0 24 1190 topology 1290 1675 -> 16 0 24 1190 topology 1291 1675 -> 15 0 24 1190 topology 1266 1676 -> 16 0 24 1190 topology 1267 1676 -> 15 0 23 1190 topology 1339 1677 -> 16 0 23 1190 topology 1360 1677 -> 15 0 23 1190 topology 1261 1678 -> 16 0 23 1190 topology 1360 1678 -> 15 0 24 1190 topology 1242 1679 -> 16 0 24 1190 topology 1243 1679 -> 15 0 24 1190 topology 1350 1680 -> 16 0 24 1190 topology 1351 1680 -> 15 0 23 1190 topology 1321 1681 -> 16 0 23 1190 topology 1360 1681 -> 15 0 24 1190 topology 1326 1682 -> 16 0 24 1190 topology 1327 1682 -> 15 0 23 1190 topology 1243 1683 -> 16 0 23 1190 topology 1360 1683 -> 15 0 23 1190 topology 1303 1684 -> 16 0 23 1190 topology 1360 1684 -> 15 0 24 1190 topology 1302 1685 -> 16 0 24 1190 topology 1303 1685 -> 15 0 23 1190 topology 1214 1686 -> 16 0 23 1190 topology 1360 1686 -> 15 0 24 1190 topology 1251 1687 -> 16 0 24 1190 topology 1253 1687 -> 15 0 24 1190 topology 1197 1688 -> 16 0 24 1190 topology 1199 1688 -> 15 0 24 1190 topology 1308 1689 -> 16 0 24 1190 topology 1310 1689 -> 15 0 24 1190 topology 1257 1690 -> 16 0 24 1190 topology 1259 1690 -> 15 0 25 1190 topology 1359 1691 -> 16 0 25 1190 topology 1360 1691 -> 15 0 24 1190 topology 1314 1692 -> 16 0 24 1190 topology 1316 1692 -> 15 0 24 1190 topology 1263 1693 -> 16 0 24 1190 topology 1265 1693 -> 15 0 23 1190 topology 1226 1694 -> 16 0 23 1190 topology 1360 1694 -> 15 0 23 1190 topology 1310 1695 -> 16 0 23 1190 topology 1360 1695 -> 15 0 23 1190 topology 1210 1696 -> 16 0 23 1190 topology 1360 1696 -> 15 0 24 1190 topology 1320 1697 -> 16 0 24 1190 topology 1322 1697 -> 15 0 23 1190 topology 1262 1698 -> 16 0 23 1190 topology 1360 1698 -> 15 0 24 1190 topology 1269 1699 -> 16 0 24 1190 topology 1271 1699 -> 15 0 23 1190 topology 1346 1700 -> 16 0 23 1190 topology 1360 1700 -> 15 0 24 1190 topology 1197 1701 -> 16 0 24 1190 topology 1198 1701 -> 15 0 24 1190 topology 1326 1702 -> 16 0 24 1190 topology 1328 1702 -> 15 0 23 1190 topology 1298 1703 -> 16 0 23 1190 topology 1360 1703 -> 15 0 24 1190 topology 1275 1704 -> 16 0 24 1190 topology 1277 1704 -> 15 0 23 1190 topology 1334 1705 -> 16 0 23 1190 topology 1360 1705 -> 15 0 24 1190 topology 1332 1706 -> 16 0 24 1190 topology 1334 1706 -> 15 0 23 1190 topology 1228 1707 -> 16 0 23 1190 topology 1360 1707 -> 15 0 23 1190 topology 1288 1708 -> 16 0 23 1190 topology 1360 1708 -> 15 0 23 1190 topology 1205 1709 -> 16 0 23 1190 topology 1360 1709 -> 15 0 23 1190 topology 1348 1710 -> 16 0 23 1190 topology 1360 1710 -> 15 0 23 1190 topology 1270 1711 -> 16 0 23 1190 topology 1360 1711 -> 15 0 23 1190 topology 1330 1712 -> 16 0 23 1190 topology 1360 1712 -> 15 0 23 1190 topology 1195 1713 -> 16 0 23 1190 topology 1360 1713 -> 15 0 24 1190 topology 1206 1714 -> 16 0 24 1190 topology 1208 1714 -> 15 0 23 1190 topology 1253 1715 -> 16 0 23 1190 topology 1360 1715 -> 15 0 23 1190 topology 1289 1716 -> 16 0 23 1190 topology 1360 1716 -> 15 0 24 1190 topology 1221 1717 -> 16 0 24 1190 topology 1222 1717 -> 15 0 23 1190 topology 1241 1718 -> 16 0 23 1190 topology 1360 1718 -> 15 0 23 1190 topology 1325 1719 -> 16 0 23 1190 topology 1360 1719 -> 15 0 24 1190 topology 1281 1720 -> 16 0 24 1190 topology 1282 1720 -> 15 0 24 1190 topology 1200 1721 -> 16 0 24 1190 topology 1201 1721 -> 15 0 23 1190 topology 1277 1722 -> 16 0 23 1190 topology 1360 1722 -> 15 0 24 1190 topology 1257 1723 -> 16 0 24 1190 topology 1258 1723 -> 15 0 24 1190 topology 1233 1724 -> 16 0 24 1190 topology 1234 1724 -> 15 0 24 1190 topology 1341 1725 -> 16 0 24 1190 topology 1342 1725 -> 15 0 24 1190 topology 1317 1726 -> 16 0 24 1190 topology 1318 1726 -> 15 0 23 1190 topology 1255 1727 -> 16 0 23 1190 topology 1360 1727 -> 15 0 24 1190 topology 1293 1728 -> 16 0 24 1190 topology 1294 1728 -> 15 0 23 1190 topology 1196 1729 -> 16 0 23 1190 topology 1360 1729 -> 15 0 23 1190 topology 1315 1730 -> 16 0 23 1190 topology 1360 1730 -> 15 0 24 1190 topology 1269 1731 -> 16 0 24 1190 topology 1270 1731 -> 15 0 23 1190 topology 1237 1732 -> 16 0 23 1190 topology 1360 1732 -> 15 0 23 1190 topology 1297 1733 -> 16 0 23 1190 topology 1360 1733 -> 15 0 24 1190 topology 1245 1734 -> 16 0 24 1190 topology 1246 1734 -> 15 0 24 1190 topology 1353 1735 -> 16 0 24 1190 topology 1354 1735 -> 15 0 24 1190 topology 1191 1736 -> 16 0 24 1190 topology 1193 1736 -> 15 0 24 1190 topology 1329 1737 -> 16 0 24 1190 topology 1330 1737 -> 15 0 23 1190 topology 1357 1738 -> 16 0 23 1190 topology 1360 1738 -> 15 0 24 1190 topology 1221 1739 -> 16 0 24 1190 topology 1223 1739 -> 15 0 24 1190 topology 1305 1740 -> 16 0 24 1190 topology 1306 1740 -> 15 0 24 1190 topology 1278 1741 -> 16 0 24 1190 topology 1280 1741 -> 15 0 24 1190 topology 1227 1742 -> 16 0 24 1190 topology 1229 1742 -> 15 0 24 1190 topology 1284 1743 -> 16 0 24 1190 topology 1286 1743 -> 15 0 24 1190 topology 1233 1744 -> 16 0 24 1190 topology 1235 1744 -> 15 0 24 1190 topology 1341 1745 -> 16 0 24 1190 topology 1343 1745 -> 15 0 23 1190 topology 1204 1746 -> 16 0 23 1190 topology 1360 1746 -> 15 0 24 1190 topology 1290 1747 -> 16 0 24 1190 topology 1292 1747 -> 15 0 23 1190 topology 1280 1748 -> 16 0 23 1190 topology 1360 1748 -> 15 0 24 1190 topology 1239 1749 -> 16 0 24 1190 topology 1241 1749 -> 15 0 23 1190 topology 1232 1750 -> 16 0 23 1190 topology 1360 1750 -> 15 0 24 1190 topology 1347 1751 -> 16 0 24 1190 topology 1349 1751 -> 15 0 23 1190 topology 1316 1752 -> 16 0 23 1190 topology 1360 1752 -> 15 0 24 1190 topology 1296 1753 -> 16 0 24 1190 topology 1298 1753 -> 15 0 24 1190 topology 1215 1754 -> 16 0 24 1190 topology 1217 1754 -> 15 0 23 1190 topology 1268 1755 -> 16 0 23 1190 topology 1360 1755 -> 15 0 24 1190 topology 1245 1756 -> 16 0 24 1190 topology 1247 1756 -> 15 0 23 1190 topology 1352 1757 -> 16 0 23 1190 topology 1360 1757 -> 15 0 24 1190 topology 1353 1758 -> 16 0 24 1190 topology 1355 1758 -> 15 0 23 1190 topology 1304 1759 -> 16 0 23 1190 topology 1360 1759 -> 15 0 24 1190 topology 1302 1760 -> 16 0 24 1190 topology 1304 1760 -> 15 0 24 1190 topology 1203 1761 -> 16 0 24 1190 topology 1204 1761 -> 15 0 23 1190 topology 1222 1762 -> 16 0 23 1190 topology 1360 1762 -> 15 0 23 1190 topology 1282 1763 -> 16 0 23 1190 topology 1360 1763 -> 15 0 23 1190 topology 1342 1764 -> 16 0 23 1190 topology 1360 1764 -> 15 0 23 1190 topology 1264 1765 -> 16 0 23 1190 topology 1360 1765 -> 15 0 23 1190 topology 1324 1766 -> 16 0 23 1190 topology 1360 1766 -> 15 0 23 1190 topology 1246 1767 -> 16 0 23 1190 topology 1360 1767 -> 15 0 23 1190 topology 1211 1768 -> 16 0 23 1190 topology 1360 1768 -> 15 0 23 1190 topology 1306 1769 -> 16 0 23 1190 topology 1360 1769 -> 15 0 24 1190 topology 1200 1770 -> 16 0 24 1190 topology 1202 1770 -> 15 0 23 1190 topology 1223 1771 -> 16 0 23 1190 topology 1360 1771 -> 15 0 23 1190 topology 1259 1772 -> 16 0 23 1190 topology 1360 1772 -> 15 0 23 1190 topology 1213 1773 -> 16 0 23 1190 topology 1360 1773 -> 15 0 24 1190 topology 1248 1774 -> 16 0 24 1190 topology 1249 1774 -> 15 0 23 1190 topology 1343 1775 -> 16 0 23 1190 topology 1360 1775 -> 15 0 23 1190 topology 1295 1776 -> 16 0 23 1190 topology 1360 1776 -> 15 0 24 1190 topology 1224 1777 -> 16 0 24 1190 topology 1225 1777 -> 15 0 24 1190 topology 1308 1778 -> 16 0 24 1190 topology 1309 1778 -> 15 0 23 1190 topology 1247 1779 -> 16 0 23 1190 topology 1360 1779 -> 15 0 23 1190 topology 1331 1780 -> 16 0 23 1190 topology 1360 1780 -> 15 0 24 1190 topology 1284 1781 -> 16 0 24 1190 topology 1285 1781 -> 15 0 24 1190 topology 1260 1782 -> 16 0 24 1190 topology 1261 1782 -> 15 0 24 1190 topology 1206 1783 -> 16 0 24 1190 topology 1207 1783 -> 15 0 23 1190 topology 1249 1784 -> 16 0 23 1190 topology 1360 1784 -> 15 0 24 1190 topology 1236 1785 -> 16 0 24 1190 topology 1237 1785 -> 15 0 24 1190 topology 1344 1786 -> 16 0 24 1190 topology 1345 1786 -> 15 0 23 1190 topology 1309 1787 -> 16 0 23 1190 topology 1360 1787 -> 15 0 23 1362 topology 1455 1788 +> 15 0 24 1190 topology 1359 1675 +> 16 0 24 1190 topology 1360 1675 +> 15 0 25 1190 topology 1218 1676 +> 16 0 25 1190 topology 1220 1676 +> 15 0 25 1190 topology 1218 1677 +> 16 0 25 1190 topology 1219 1677 +> 15 0 25 1190 topology 1221 1678 +> 16 0 25 1190 topology 1223 1678 +> 15 0 25 1190 topology 1221 1679 +> 16 0 25 1190 topology 1222 1679 +> 15 0 25 1190 topology 1224 1680 +> 16 0 25 1190 topology 1226 1680 +> 15 0 25 1190 topology 1224 1681 +> 16 0 25 1190 topology 1225 1681 +> 15 0 25 1190 topology 1227 1682 +> 16 0 25 1190 topology 1229 1682 +> 15 0 25 1190 topology 1227 1683 +> 16 0 25 1190 topology 1228 1683 +> 15 0 25 1190 topology 1230 1684 +> 16 0 25 1190 topology 1232 1684 +> 15 0 25 1190 topology 1230 1685 +> 16 0 25 1190 topology 1231 1685 +> 15 0 25 1190 topology 1233 1686 +> 16 0 25 1190 topology 1235 1686 +> 15 0 25 1190 topology 1233 1687 +> 16 0 25 1190 topology 1234 1687 +> 15 0 25 1190 topology 1236 1688 +> 16 0 25 1190 topology 1238 1688 +> 15 0 25 1190 topology 1236 1689 +> 16 0 25 1190 topology 1237 1689 +> 15 0 25 1190 topology 1239 1690 +> 16 0 25 1190 topology 1241 1690 +> 15 0 25 1190 topology 1239 1691 +> 16 0 25 1190 topology 1240 1691 +> 15 0 25 1190 topology 1242 1692 +> 16 0 25 1190 topology 1244 1692 +> 15 0 25 1190 topology 1242 1693 +> 16 0 25 1190 topology 1243 1693 +> 15 0 25 1190 topology 1245 1694 +> 16 0 25 1190 topology 1247 1694 +> 15 0 25 1190 topology 1245 1695 +> 16 0 25 1190 topology 1246 1695 +> 15 0 25 1190 topology 1191 1696 +> 16 0 25 1190 topology 1193 1696 +> 15 0 25 1190 topology 1191 1697 +> 16 0 25 1190 topology 1192 1697 +> 15 0 25 1190 topology 1248 1698 +> 16 0 25 1190 topology 1250 1698 +> 15 0 25 1190 topology 1248 1699 +> 16 0 25 1190 topology 1249 1699 +> 15 0 25 1190 topology 1251 1700 +> 16 0 25 1190 topology 1253 1700 +> 15 0 25 1190 topology 1251 1701 +> 16 0 25 1190 topology 1252 1701 +> 15 0 25 1190 topology 1254 1702 +> 16 0 25 1190 topology 1256 1702 +> 15 0 25 1190 topology 1254 1703 +> 16 0 25 1190 topology 1255 1703 +> 15 0 25 1190 topology 1257 1704 +> 16 0 25 1190 topology 1259 1704 +> 15 0 25 1190 topology 1257 1705 +> 16 0 25 1190 topology 1258 1705 +> 15 0 25 1190 topology 1260 1706 +> 16 0 25 1190 topology 1262 1706 +> 15 0 25 1190 topology 1260 1707 +> 16 0 25 1190 topology 1261 1707 +> 15 0 25 1190 topology 1263 1708 +> 16 0 25 1190 topology 1265 1708 +> 15 0 25 1190 topology 1263 1709 +> 16 0 25 1190 topology 1264 1709 +> 15 0 25 1190 topology 1266 1710 +> 16 0 25 1190 topology 1268 1710 +> 15 0 25 1190 topology 1266 1711 +> 16 0 25 1190 topology 1267 1711 +> 15 0 25 1190 topology 1269 1712 +> 16 0 25 1190 topology 1271 1712 +> 15 0 25 1190 topology 1269 1713 +> 16 0 25 1190 topology 1270 1713 +> 15 0 25 1190 topology 1272 1714 +> 16 0 25 1190 topology 1274 1714 +> 15 0 25 1190 topology 1272 1715 +> 16 0 25 1190 topology 1273 1715 +> 15 0 25 1190 topology 1275 1716 +> 16 0 25 1190 topology 1277 1716 +> 15 0 25 1190 topology 1275 1717 +> 16 0 25 1190 topology 1276 1717 +> 15 0 25 1190 topology 1194 1718 +> 16 0 25 1190 topology 1196 1718 +> 15 0 25 1190 topology 1194 1719 +> 16 0 25 1190 topology 1195 1719 +> 15 0 25 1190 topology 1278 1720 +> 16 0 25 1190 topology 1280 1720 +> 15 0 25 1190 topology 1278 1721 +> 16 0 25 1190 topology 1279 1721 +> 15 0 25 1190 topology 1281 1722 +> 16 0 25 1190 topology 1283 1722 +> 15 0 25 1190 topology 1281 1723 +> 16 0 25 1190 topology 1282 1723 +> 15 0 25 1190 topology 1284 1724 +> 16 0 25 1190 topology 1286 1724 +> 15 0 25 1190 topology 1284 1725 +> 16 0 25 1190 topology 1285 1725 +> 15 0 25 1190 topology 1287 1726 +> 16 0 25 1190 topology 1289 1726 +> 15 0 25 1190 topology 1287 1727 +> 16 0 25 1190 topology 1288 1727 +> 15 0 25 1190 topology 1290 1728 +> 16 0 25 1190 topology 1292 1728 +> 15 0 25 1190 topology 1290 1729 +> 16 0 25 1190 topology 1291 1729 +> 15 0 25 1190 topology 1293 1730 +> 16 0 25 1190 topology 1295 1730 +> 15 0 25 1190 topology 1293 1731 +> 16 0 25 1190 topology 1294 1731 +> 15 0 25 1190 topology 1296 1732 +> 16 0 25 1190 topology 1298 1732 +> 15 0 25 1190 topology 1296 1733 +> 16 0 25 1190 topology 1297 1733 +> 15 0 25 1190 topology 1299 1734 +> 16 0 25 1190 topology 1301 1734 +> 15 0 25 1190 topology 1299 1735 +> 16 0 25 1190 topology 1300 1735 +> 15 0 25 1190 topology 1302 1736 +> 16 0 25 1190 topology 1304 1736 +> 15 0 25 1190 topology 1302 1737 +> 16 0 25 1190 topology 1303 1737 +> 15 0 25 1190 topology 1305 1738 +> 16 0 25 1190 topology 1307 1738 +> 15 0 25 1190 topology 1305 1739 +> 16 0 25 1190 topology 1306 1739 +> 15 0 25 1190 topology 1197 1740 +> 16 0 25 1190 topology 1199 1740 +> 15 0 25 1190 topology 1197 1741 +> 16 0 25 1190 topology 1198 1741 +> 15 0 25 1190 topology 1308 1742 +> 16 0 25 1190 topology 1310 1742 +> 15 0 25 1190 topology 1308 1743 +> 16 0 25 1190 topology 1309 1743 +> 15 0 25 1190 topology 1311 1744 +> 16 0 25 1190 topology 1313 1744 +> 15 0 25 1190 topology 1311 1745 +> 16 0 25 1190 topology 1312 1745 +> 15 0 25 1190 topology 1314 1746 +> 16 0 25 1190 topology 1316 1746 +> 15 0 25 1190 topology 1314 1747 +> 16 0 25 1190 topology 1315 1747 +> 15 0 25 1190 topology 1317 1748 +> 16 0 25 1190 topology 1319 1748 +> 15 0 25 1190 topology 1317 1749 +> 16 0 25 1190 topology 1318 1749 +> 15 0 25 1190 topology 1320 1750 +> 16 0 25 1190 topology 1322 1750 +> 15 0 25 1190 topology 1320 1751 +> 16 0 25 1190 topology 1321 1751 +> 15 0 25 1190 topology 1323 1752 +> 16 0 25 1190 topology 1325 1752 +> 15 0 25 1190 topology 1323 1753 +> 16 0 25 1190 topology 1324 1753 +> 15 0 25 1190 topology 1326 1754 +> 16 0 25 1190 topology 1328 1754 +> 15 0 25 1190 topology 1326 1755 +> 16 0 25 1190 topology 1327 1755 +> 15 0 25 1190 topology 1329 1756 +> 16 0 25 1190 topology 1331 1756 +> 15 0 25 1190 topology 1329 1757 +> 16 0 25 1190 topology 1330 1757 +> 15 0 25 1190 topology 1332 1758 +> 16 0 25 1190 topology 1334 1758 +> 15 0 25 1190 topology 1332 1759 +> 16 0 25 1190 topology 1333 1759 +> 15 0 25 1190 topology 1335 1760 +> 16 0 25 1190 topology 1337 1760 +> 15 0 25 1190 topology 1335 1761 +> 16 0 25 1190 topology 1336 1761 +> 15 0 25 1190 topology 1200 1762 +> 16 0 25 1190 topology 1202 1762 +> 15 0 25 1190 topology 1200 1763 +> 16 0 25 1190 topology 1201 1763 +> 15 0 25 1190 topology 1338 1764 +> 16 0 25 1190 topology 1340 1764 +> 15 0 25 1190 topology 1338 1765 +> 16 0 25 1190 topology 1339 1765 +> 15 0 25 1190 topology 1341 1766 +> 16 0 25 1190 topology 1343 1766 +> 15 0 25 1190 topology 1341 1767 +> 16 0 25 1190 topology 1342 1767 +> 15 0 25 1190 topology 1344 1768 +> 16 0 25 1190 topology 1346 1768 +> 15 0 25 1190 topology 1344 1769 +> 16 0 25 1190 topology 1345 1769 +> 15 0 25 1190 topology 1347 1770 +> 16 0 25 1190 topology 1349 1770 +> 15 0 25 1190 topology 1347 1771 +> 16 0 25 1190 topology 1348 1771 +> 15 0 25 1190 topology 1350 1772 +> 16 0 25 1190 topology 1352 1772 +> 15 0 25 1190 topology 1350 1773 +> 16 0 25 1190 topology 1351 1773 +> 15 0 25 1190 topology 1353 1774 +> 16 0 25 1190 topology 1355 1774 +> 15 0 25 1190 topology 1353 1775 +> 16 0 25 1190 topology 1354 1775 +> 15 0 25 1190 topology 1356 1776 +> 16 0 25 1190 topology 1358 1776 +> 15 0 25 1190 topology 1356 1777 +> 16 0 25 1190 topology 1357 1777 +> 15 0 25 1190 topology 1203 1778 +> 16 0 25 1190 topology 1205 1778 +> 15 0 25 1190 topology 1203 1779 +> 16 0 25 1190 topology 1204 1779 +> 15 0 25 1190 topology 1206 1780 +> 16 0 25 1190 topology 1208 1780 +> 15 0 25 1190 topology 1206 1781 +> 16 0 25 1190 topology 1207 1781 +> 15 0 25 1190 topology 1209 1782 +> 16 0 25 1190 topology 1211 1782 +> 15 0 25 1190 topology 1209 1783 +> 16 0 25 1190 topology 1210 1783 +> 15 0 25 1190 topology 1212 1784 +> 16 0 25 1190 topology 1214 1784 +> 15 0 25 1190 topology 1212 1785 +> 16 0 25 1190 topology 1213 1785 +> 15 0 25 1190 topology 1215 1786 +> 16 0 25 1190 topology 1217 1786 +> 15 0 25 1190 topology 1215 1787 +> 16 0 25 1190 topology 1216 1787 +> 15 0 23 1362 topology 1392 1788 > 16 0 23 1362 topology 1601 1788 -> 15 0 24 1362 topology 1465 1789 -> 16 0 24 1362 topology 1467 1789 -> 15 0 24 1362 topology 1573 1790 -> 16 0 24 1362 topology 1575 1790 -> 15 0 25 1362 topology 1600 1791 -> 16 0 25 1362 topology 1601 1791 -> 15 0 23 1362 topology 1407 1792 +> 15 0 23 1362 topology 1391 1789 +> 16 0 23 1362 topology 1601 1789 +> 15 0 23 1362 topology 1395 1790 +> 16 0 23 1362 topology 1601 1790 +> 15 0 23 1362 topology 1394 1791 +> 16 0 23 1362 topology 1601 1791 +> 15 0 23 1362 topology 1398 1792 > 16 0 23 1362 topology 1601 1792 -> 15 0 24 1362 topology 1414 1793 -> 16 0 24 1362 topology 1416 1793 -> 15 0 23 1362 topology 1491 1794 +> 15 0 23 1362 topology 1397 1793 +> 16 0 23 1362 topology 1601 1793 +> 15 0 23 1362 topology 1401 1794 > 16 0 23 1362 topology 1601 1794 -> 15 0 24 1362 topology 1522 1795 -> 16 0 24 1362 topology 1524 1795 -> 15 0 23 1362 topology 1575 1796 +> 15 0 23 1362 topology 1400 1795 +> 16 0 23 1362 topology 1601 1795 +> 15 0 23 1362 topology 1404 1796 > 16 0 23 1362 topology 1601 1796 -> 15 0 23 1362 topology 1443 1797 +> 15 0 23 1362 topology 1403 1797 > 16 0 23 1362 topology 1601 1797 -> 15 0 24 1362 topology 1471 1798 -> 16 0 24 1362 topology 1473 1798 -> 15 0 24 1362 topology 1579 1799 -> 16 0 24 1362 topology 1581 1799 -> 15 0 24 1362 topology 1372 1800 -> 16 0 24 1362 topology 1373 1800 -> 15 0 23 1362 topology 1527 1801 +> 15 0 23 1362 topology 1407 1798 +> 16 0 23 1362 topology 1601 1798 +> 15 0 23 1362 topology 1406 1799 +> 16 0 23 1362 topology 1601 1799 +> 15 0 23 1362 topology 1410 1800 +> 16 0 23 1362 topology 1601 1800 +> 15 0 23 1362 topology 1409 1801 > 16 0 23 1362 topology 1601 1801 -> 15 0 24 1362 topology 1528 1802 -> 16 0 24 1362 topology 1530 1802 -> 15 0 23 1362 topology 1479 1803 +> 15 0 23 1362 topology 1413 1802 +> 16 0 23 1362 topology 1601 1802 +> 15 0 23 1362 topology 1412 1803 > 16 0 23 1362 topology 1601 1803 -> 15 0 24 1362 topology 1477 1804 -> 16 0 24 1362 topology 1479 1804 -> 15 0 23 1362 topology 1563 1805 +> 15 0 23 1362 topology 1416 1804 +> 16 0 23 1362 topology 1601 1804 +> 15 0 23 1362 topology 1415 1805 > 16 0 23 1362 topology 1601 1805 -> 15 0 24 1362 topology 1585 1806 -> 16 0 24 1362 topology 1587 1806 -> 15 0 23 1362 topology 1421 1807 +> 15 0 23 1362 topology 1419 1806 +> 16 0 23 1362 topology 1601 1806 +> 15 0 23 1362 topology 1418 1807 > 16 0 23 1362 topology 1601 1807 -> 15 0 24 1362 topology 1534 1808 -> 16 0 24 1362 topology 1536 1808 -> 15 0 23 1362 topology 1599 1809 +> 15 0 23 1362 topology 1365 1808 +> 16 0 23 1362 topology 1601 1808 +> 15 0 23 1362 topology 1364 1809 > 16 0 23 1362 topology 1601 1809 -> 15 0 23 1362 topology 1481 1810 +> 15 0 23 1362 topology 1422 1810 > 16 0 23 1362 topology 1601 1810 -> 15 0 24 1362 topology 1591 1811 -> 16 0 24 1362 topology 1593 1811 -> 15 0 23 1362 topology 1403 1812 +> 15 0 23 1362 topology 1421 1811 +> 16 0 23 1362 topology 1601 1811 +> 15 0 23 1362 topology 1425 1812 > 16 0 23 1362 topology 1601 1812 -> 15 0 23 1362 topology 1541 1813 +> 15 0 23 1362 topology 1424 1813 > 16 0 23 1362 topology 1601 1813 -> 15 0 23 1362 topology 1463 1814 +> 15 0 23 1362 topology 1428 1814 > 16 0 23 1362 topology 1601 1814 -> 15 0 24 1362 topology 1597 1815 -> 16 0 24 1362 topology 1599 1815 -> 15 0 23 1362 topology 1380 1816 +> 15 0 23 1362 topology 1427 1815 +> 16 0 23 1362 topology 1601 1815 +> 15 0 23 1362 topology 1431 1816 > 16 0 23 1362 topology 1601 1816 -> 15 0 23 1362 topology 1523 1817 +> 15 0 23 1362 topology 1430 1817 > 16 0 23 1362 topology 1601 1817 -> 15 0 23 1362 topology 1445 1818 +> 15 0 23 1362 topology 1434 1818 > 16 0 23 1362 topology 1601 1818 -> 15 0 23 1362 topology 1583 1819 +> 15 0 23 1362 topology 1433 1819 > 16 0 23 1362 topology 1601 1819 -> 15 0 23 1362 topology 1505 1820 +> 15 0 23 1362 topology 1437 1820 > 16 0 23 1362 topology 1601 1820 -> 15 0 23 1362 topology 1565 1821 +> 15 0 23 1362 topology 1436 1821 > 16 0 23 1362 topology 1601 1821 -> 15 0 23 1362 topology 1376 1822 +> 15 0 23 1362 topology 1440 1822 > 16 0 23 1362 topology 1601 1822 -> 15 0 24 1362 topology 1381 1823 -> 16 0 24 1362 topology 1383 1823 -> 15 0 23 1362 topology 1398 1824 +> 15 0 23 1362 topology 1439 1823 +> 16 0 23 1362 topology 1601 1823 +> 15 0 23 1362 topology 1443 1824 > 16 0 23 1362 topology 1601 1824 -> 15 0 23 1362 topology 1482 1825 +> 15 0 23 1362 topology 1442 1825 > 16 0 23 1362 topology 1601 1825 -> 15 0 23 1362 topology 1434 1826 +> 15 0 23 1362 topology 1446 1826 > 16 0 23 1362 topology 1601 1826 -> 15 0 23 1362 topology 1518 1827 +> 15 0 23 1362 topology 1445 1827 > 16 0 23 1362 topology 1601 1827 -> 15 0 24 1362 topology 1423 1828 -> 16 0 24 1362 topology 1424 1828 -> 15 0 23 1362 topology 1470 1829 +> 15 0 23 1362 topology 1449 1828 +> 16 0 23 1362 topology 1601 1828 +> 15 0 23 1362 topology 1448 1829 > 16 0 23 1362 topology 1601 1829 -> 15 0 24 1362 topology 1399 1830 -> 16 0 24 1362 topology 1400 1830 -> 15 0 23 1362 topology 1554 1831 +> 15 0 23 1362 topology 1368 1830 +> 16 0 23 1362 topology 1601 1830 +> 15 0 23 1362 topology 1367 1831 > 16 0 23 1362 topology 1601 1831 -> 15 0 24 1362 topology 1375 1832 -> 16 0 24 1362 topology 1376 1832 -> 15 0 24 1362 topology 1483 1833 -> 16 0 24 1362 topology 1484 1833 -> 15 0 23 1362 topology 1506 1834 +> 15 0 23 1362 topology 1452 1832 +> 16 0 23 1362 topology 1601 1832 +> 15 0 23 1362 topology 1451 1833 +> 16 0 23 1362 topology 1601 1833 +> 15 0 23 1362 topology 1455 1834 > 16 0 23 1362 topology 1601 1834 -> 15 0 23 1362 topology 1590 1835 +> 15 0 23 1362 topology 1454 1835 > 16 0 23 1362 topology 1601 1835 -> 15 0 24 1362 topology 1459 1836 -> 16 0 24 1362 topology 1460 1836 -> 15 0 24 1362 topology 1435 1837 -> 16 0 24 1362 topology 1436 1837 -> 15 0 24 1362 topology 1543 1838 -> 16 0 24 1362 topology 1544 1838 -> 15 0 24 1362 topology 1411 1839 -> 16 0 24 1362 topology 1412 1839 -> 15 0 23 1362 topology 1430 1840 +> 15 0 23 1362 topology 1458 1836 +> 16 0 23 1362 topology 1601 1836 +> 15 0 23 1362 topology 1457 1837 +> 16 0 23 1362 topology 1601 1837 +> 15 0 23 1362 topology 1461 1838 +> 16 0 23 1362 topology 1601 1838 +> 15 0 23 1362 topology 1460 1839 +> 16 0 23 1362 topology 1601 1839 +> 15 0 23 1362 topology 1464 1840 > 16 0 23 1362 topology 1601 1840 -> 15 0 24 1362 topology 1519 1841 -> 16 0 24 1362 topology 1520 1841 -> 15 0 23 1362 topology 1371 1842 +> 15 0 23 1362 topology 1463 1841 +> 16 0 23 1362 topology 1601 1841 +> 15 0 23 1362 topology 1467 1842 > 16 0 23 1362 topology 1601 1842 -> 15 0 23 1362 topology 1490 1843 +> 15 0 23 1362 topology 1466 1843 > 16 0 23 1362 topology 1601 1843 -> 15 0 24 1362 topology 1495 1844 -> 16 0 24 1362 topology 1496 1844 -> 15 0 23 1362 topology 1412 1845 +> 15 0 23 1362 topology 1470 1844 +> 16 0 23 1362 topology 1601 1844 +> 15 0 23 1362 topology 1469 1845 > 16 0 23 1362 topology 1601 1845 -> 15 0 24 1362 topology 1471 1846 -> 16 0 24 1362 topology 1472 1846 -> 15 0 23 1362 topology 1550 1847 +> 15 0 23 1362 topology 1473 1846 +> 16 0 23 1362 topology 1601 1846 +> 15 0 23 1362 topology 1472 1847 > 16 0 23 1362 topology 1601 1847 -> 15 0 24 1362 topology 1579 1848 -> 16 0 24 1362 topology 1580 1848 -> 15 0 23 1362 topology 1472 1849 +> 15 0 23 1362 topology 1476 1848 +> 16 0 23 1362 topology 1601 1848 +> 15 0 23 1362 topology 1475 1849 > 16 0 23 1362 topology 1601 1849 -> 15 0 24 1362 topology 1447 1850 -> 16 0 24 1362 topology 1448 1850 -> 15 0 24 1362 topology 1555 1851 -> 16 0 24 1362 topology 1556 1851 -> 15 0 24 1362 topology 1366 1852 -> 16 0 24 1362 topology 1368 1852 -> 15 0 23 1362 topology 1532 1853 +> 15 0 23 1362 topology 1479 1850 +> 16 0 23 1362 topology 1601 1850 +> 15 0 23 1362 topology 1478 1851 +> 16 0 23 1362 topology 1601 1851 +> 15 0 23 1362 topology 1371 1852 +> 16 0 23 1362 topology 1601 1852 +> 15 0 23 1362 topology 1370 1853 > 16 0 23 1362 topology 1601 1853 -> 15 0 24 1362 topology 1531 1854 -> 16 0 24 1362 topology 1532 1854 -> 15 0 24 1362 topology 1423 1855 -> 16 0 24 1362 topology 1425 1855 -> 15 0 23 1362 topology 1592 1856 +> 15 0 23 1362 topology 1482 1854 +> 16 0 23 1362 topology 1601 1854 +> 15 0 23 1362 topology 1481 1855 +> 16 0 23 1362 topology 1601 1855 +> 15 0 23 1362 topology 1485 1856 > 16 0 23 1362 topology 1601 1856 -> 15 0 24 1362 topology 1507 1857 -> 16 0 24 1362 topology 1508 1857 -> 15 0 24 1362 topology 1480 1858 -> 16 0 24 1362 topology 1482 1858 -> 15 0 24 1362 topology 1591 1859 -> 16 0 24 1362 topology 1592 1859 -> 15 0 24 1362 topology 1429 1860 -> 16 0 24 1362 topology 1431 1860 -> 15 0 24 1362 topology 1567 1861 -> 16 0 24 1362 topology 1568 1861 -> 15 0 24 1362 topology 1486 1862 -> 16 0 24 1362 topology 1488 1862 -> 15 0 23 1362 topology 1425 1863 +> 15 0 23 1362 topology 1484 1857 +> 16 0 23 1362 topology 1601 1857 +> 15 0 23 1362 topology 1488 1858 +> 16 0 23 1362 topology 1601 1858 +> 15 0 23 1362 topology 1487 1859 +> 16 0 23 1362 topology 1601 1859 +> 15 0 23 1362 topology 1491 1860 +> 16 0 23 1362 topology 1601 1860 +> 15 0 23 1362 topology 1490 1861 +> 16 0 23 1362 topology 1601 1861 +> 15 0 23 1362 topology 1494 1862 +> 16 0 23 1362 topology 1601 1862 +> 15 0 23 1362 topology 1493 1863 > 16 0 23 1362 topology 1601 1863 -> 15 0 24 1362 topology 1435 1864 -> 16 0 24 1362 topology 1437 1864 -> 15 0 24 1362 topology 1543 1865 -> 16 0 24 1362 topology 1545 1865 -> 15 0 23 1362 topology 1385 1866 +> 15 0 23 1362 topology 1497 1864 +> 16 0 23 1362 topology 1601 1864 +> 15 0 23 1362 topology 1496 1865 +> 16 0 23 1362 topology 1601 1865 +> 15 0 23 1362 topology 1500 1866 > 16 0 23 1362 topology 1601 1866 -> 15 0 24 1362 topology 1492 1867 -> 16 0 24 1362 topology 1494 1867 -> 15 0 23 1362 topology 1461 1868 +> 15 0 23 1362 topology 1499 1867 +> 16 0 23 1362 topology 1601 1867 +> 15 0 23 1362 topology 1503 1868 > 16 0 23 1362 topology 1601 1868 -> 15 0 24 1362 topology 1441 1869 -> 16 0 24 1362 topology 1443 1869 -> 15 0 23 1362 topology 1545 1870 +> 15 0 23 1362 topology 1502 1869 +> 16 0 23 1362 topology 1601 1869 +> 15 0 23 1362 topology 1506 1870 > 16 0 23 1362 topology 1601 1870 -> 15 0 24 1362 topology 1549 1871 -> 16 0 24 1362 topology 1551 1871 -> 15 0 23 1362 topology 1413 1872 +> 15 0 23 1362 topology 1505 1871 +> 16 0 23 1362 topology 1601 1871 +> 15 0 23 1362 topology 1509 1872 > 16 0 23 1362 topology 1601 1872 -> 15 0 23 1362 topology 1497 1873 +> 15 0 23 1362 topology 1508 1873 > 16 0 23 1362 topology 1601 1873 -> 15 0 24 1362 topology 1498 1874 -> 16 0 24 1362 topology 1500 1874 -> 15 0 23 1362 topology 1581 1875 +> 15 0 23 1362 topology 1374 1874 +> 16 0 23 1362 topology 1601 1874 +> 15 0 23 1362 topology 1373 1875 > 16 0 23 1362 topology 1601 1875 -> 15 0 24 1362 topology 1447 1876 -> 16 0 24 1362 topology 1449 1876 -> 15 0 23 1362 topology 1449 1877 +> 15 0 23 1362 topology 1512 1876 +> 16 0 23 1362 topology 1601 1876 +> 15 0 23 1362 topology 1511 1877 > 16 0 23 1362 topology 1601 1877 -> 15 0 24 1362 topology 1555 1878 -> 16 0 24 1362 topology 1557 1878 -> 15 0 23 1362 topology 1533 1879 +> 15 0 23 1362 topology 1515 1878 +> 16 0 23 1362 topology 1601 1878 +> 15 0 23 1362 topology 1514 1879 > 16 0 23 1362 topology 1601 1879 -> 15 0 24 1362 topology 1504 1880 -> 16 0 24 1362 topology 1506 1880 -> 15 0 24 1362 topology 1378 1881 -> 16 0 24 1362 topology 1379 1881 -> 15 0 24 1362 topology 1561 1882 -> 16 0 24 1362 topology 1563 1882 -> 15 0 23 1362 topology 1569 1883 +> 15 0 23 1362 topology 1518 1880 +> 16 0 23 1362 topology 1601 1880 +> 15 0 23 1362 topology 1517 1881 +> 16 0 23 1362 topology 1601 1881 +> 15 0 23 1362 topology 1521 1882 +> 16 0 23 1362 topology 1601 1882 +> 15 0 23 1362 topology 1520 1883 > 16 0 23 1362 topology 1601 1883 -> 15 0 23 1362 topology 1397 1884 +> 15 0 23 1362 topology 1524 1884 > 16 0 23 1362 topology 1601 1884 -> 15 0 23 1362 topology 1457 1885 +> 15 0 23 1362 topology 1523 1885 > 16 0 23 1362 topology 1601 1885 -> 15 0 24 1362 topology 1567 1886 -> 16 0 24 1362 topology 1569 1886 -> 15 0 23 1362 topology 1517 1887 +> 15 0 23 1362 topology 1527 1886 +> 16 0 23 1362 topology 1601 1886 +> 15 0 23 1362 topology 1526 1887 > 16 0 23 1362 topology 1601 1887 -> 15 0 23 1362 topology 1439 1888 +> 15 0 23 1362 topology 1530 1888 > 16 0 23 1362 topology 1601 1888 -> 15 0 23 1362 topology 1577 1889 +> 15 0 23 1362 topology 1529 1889 > 16 0 23 1362 topology 1601 1889 -> 15 0 23 1362 topology 1499 1890 +> 15 0 23 1362 topology 1533 1890 > 16 0 23 1362 topology 1601 1890 -> 15 0 23 1362 topology 1386 1891 +> 15 0 23 1362 topology 1532 1891 > 16 0 23 1362 topology 1601 1891 -> 15 0 23 1362 topology 1559 1892 +> 15 0 23 1362 topology 1536 1892 > 16 0 23 1362 topology 1601 1892 -> 15 0 24 1362 topology 1375 1893 -> 16 0 24 1362 topology 1377 1893 -> 15 0 23 1362 topology 1370 1894 +> 15 0 23 1362 topology 1535 1893 +> 16 0 23 1362 topology 1601 1893 +> 15 0 23 1362 topology 1539 1894 > 16 0 23 1362 topology 1601 1894 -> 15 0 23 1362 topology 1452 1895 +> 15 0 23 1362 topology 1538 1895 > 16 0 23 1362 topology 1601 1895 -> 15 0 24 1362 topology 1390 1896 -> 16 0 24 1362 topology 1391 1896 -> 15 0 23 1362 topology 1404 1897 +> 15 0 23 1362 topology 1377 1896 +> 16 0 23 1362 topology 1601 1896 +> 15 0 23 1362 topology 1376 1897 > 16 0 23 1362 topology 1601 1897 -> 15 0 23 1362 topology 1488 1898 +> 15 0 23 1362 topology 1542 1898 > 16 0 23 1362 topology 1601 1898 -> 15 0 23 1362 topology 1572 1899 +> 15 0 23 1362 topology 1541 1899 > 16 0 23 1362 topology 1601 1899 -> 15 0 23 1362 topology 1440 1900 +> 15 0 23 1362 topology 1545 1900 > 16 0 23 1362 topology 1601 1900 -> 15 0 24 1362 topology 1450 1901 -> 16 0 24 1362 topology 1451 1901 -> 15 0 23 1362 topology 1524 1902 +> 15 0 23 1362 topology 1544 1901 +> 16 0 23 1362 topology 1601 1901 +> 15 0 23 1362 topology 1548 1902 > 16 0 23 1362 topology 1601 1902 -> 15 0 24 1362 topology 1426 1903 -> 16 0 24 1362 topology 1427 1903 -> 15 0 23 1362 topology 1476 1904 +> 15 0 23 1362 topology 1547 1903 +> 16 0 23 1362 topology 1601 1903 +> 15 0 23 1362 topology 1551 1904 > 16 0 23 1362 topology 1601 1904 -> 15 0 24 1362 topology 1402 1905 -> 16 0 24 1362 topology 1403 1905 -> 15 0 24 1362 topology 1510 1906 -> 16 0 24 1362 topology 1511 1906 -> 15 0 23 1362 topology 1560 1907 +> 15 0 23 1362 topology 1550 1905 +> 16 0 23 1362 topology 1601 1905 +> 15 0 23 1362 topology 1554 1906 +> 16 0 23 1362 topology 1601 1906 +> 15 0 23 1362 topology 1553 1907 > 16 0 23 1362 topology 1601 1907 -> 15 0 24 1362 topology 1486 1908 -> 16 0 24 1362 topology 1487 1908 -> 15 0 23 1362 topology 1596 1909 +> 15 0 23 1362 topology 1557 1908 +> 16 0 23 1362 topology 1601 1908 +> 15 0 23 1362 topology 1556 1909 > 16 0 23 1362 topology 1601 1909 -> 15 0 24 1362 topology 1381 1910 -> 16 0 24 1362 topology 1382 1910 -> 15 0 23 1362 topology 1424 1911 +> 15 0 23 1362 topology 1560 1910 +> 16 0 23 1362 topology 1601 1910 +> 15 0 23 1362 topology 1559 1911 > 16 0 23 1362 topology 1601 1911 -> 15 0 24 1362 topology 1462 1912 -> 16 0 24 1362 topology 1463 1912 -> 15 0 24 1362 topology 1570 1913 -> 16 0 24 1362 topology 1571 1913 -> 15 0 24 1362 topology 1438 1914 -> 16 0 24 1362 topology 1439 1914 -> 15 0 23 1362 topology 1484 1915 +> 15 0 23 1362 topology 1563 1912 +> 16 0 23 1362 topology 1601 1912 +> 15 0 23 1362 topology 1562 1913 +> 16 0 23 1362 topology 1601 1913 +> 15 0 23 1362 topology 1566 1914 +> 16 0 23 1362 topology 1601 1914 +> 15 0 23 1362 topology 1565 1915 > 16 0 23 1362 topology 1601 1915 -> 15 0 24 1362 topology 1546 1916 -> 16 0 24 1362 topology 1547 1916 -> 15 0 23 1362 topology 1406 1917 +> 15 0 23 1362 topology 1569 1916 +> 16 0 23 1362 topology 1601 1916 +> 15 0 23 1362 topology 1568 1917 > 16 0 23 1362 topology 1601 1917 -> 15 0 24 1362 topology 1414 1918 -> 16 0 24 1362 topology 1415 1918 -> 15 0 24 1362 topology 1522 1919 -> 16 0 24 1362 topology 1523 1919 -> 15 0 23 1362 topology 1544 1920 +> 15 0 23 1362 topology 1380 1918 +> 16 0 23 1362 topology 1601 1918 +> 15 0 23 1362 topology 1379 1919 +> 16 0 23 1362 topology 1601 1919 +> 15 0 23 1362 topology 1572 1920 > 16 0 23 1362 topology 1601 1920 -> 15 0 23 1362 topology 1377 1921 +> 15 0 23 1362 topology 1571 1921 > 16 0 23 1362 topology 1601 1921 -> 15 0 23 1362 topology 1466 1922 +> 15 0 23 1362 topology 1575 1922 > 16 0 23 1362 topology 1601 1922 -> 15 0 24 1362 topology 1498 1923 -> 16 0 24 1362 topology 1499 1923 -> 15 0 23 1362 topology 1526 1924 +> 15 0 23 1362 topology 1574 1923 +> 16 0 23 1362 topology 1601 1923 +> 15 0 23 1362 topology 1578 1924 > 16 0 23 1362 topology 1601 1924 -> 15 0 23 1362 topology 1448 1925 +> 15 0 23 1362 topology 1577 1925 > 16 0 23 1362 topology 1601 1925 -> 15 0 24 1362 topology 1474 1926 -> 16 0 24 1362 topology 1475 1926 -> 15 0 24 1362 topology 1582 1927 -> 16 0 24 1362 topology 1583 1927 -> 15 0 24 1362 topology 1393 1928 -> 16 0 24 1362 topology 1395 1928 -> 15 0 23 1362 topology 1586 1929 +> 15 0 23 1362 topology 1581 1926 +> 16 0 23 1362 topology 1601 1926 +> 15 0 23 1362 topology 1580 1927 +> 16 0 23 1362 topology 1601 1927 +> 15 0 23 1362 topology 1584 1928 +> 16 0 23 1362 topology 1601 1928 +> 15 0 23 1362 topology 1583 1929 > 16 0 23 1362 topology 1601 1929 -> 15 0 23 1362 topology 1508 1930 +> 15 0 23 1362 topology 1587 1930 > 16 0 23 1362 topology 1601 1930 -> 15 0 24 1362 topology 1558 1931 -> 16 0 24 1362 topology 1559 1931 -> 15 0 24 1362 topology 1450 1932 -> 16 0 24 1362 topology 1452 1932 -> 15 0 24 1362 topology 1534 1933 -> 16 0 24 1362 topology 1535 1933 -> 15 0 23 1362 topology 1568 1934 +> 15 0 23 1362 topology 1586 1931 +> 16 0 23 1362 topology 1601 1931 +> 15 0 23 1362 topology 1590 1932 +> 16 0 23 1362 topology 1601 1932 +> 15 0 23 1362 topology 1589 1933 +> 16 0 23 1362 topology 1601 1933 +> 15 0 23 1362 topology 1593 1934 > 16 0 23 1362 topology 1601 1934 -> 15 0 24 1362 topology 1399 1935 -> 16 0 24 1362 topology 1401 1935 -> 15 0 24 1362 topology 1456 1936 -> 16 0 24 1362 topology 1458 1936 -> 15 0 24 1362 topology 1594 1937 -> 16 0 24 1362 topology 1595 1937 -> 15 0 24 1362 topology 1405 1938 -> 16 0 24 1362 topology 1407 1938 -> 15 0 24 1362 topology 1513 1939 -> 16 0 24 1362 topology 1515 1939 -> 15 0 23 1362 topology 1395 1940 +> 15 0 23 1362 topology 1592 1935 +> 16 0 23 1362 topology 1601 1935 +> 15 0 23 1362 topology 1596 1936 +> 16 0 23 1362 topology 1601 1936 +> 15 0 23 1362 topology 1595 1937 +> 16 0 23 1362 topology 1601 1937 +> 15 0 23 1362 topology 1599 1938 +> 16 0 23 1362 topology 1601 1938 +> 15 0 23 1362 topology 1598 1939 +> 16 0 23 1362 topology 1601 1939 +> 15 0 23 1362 topology 1383 1940 > 16 0 23 1362 topology 1601 1940 -> 15 0 23 1362 topology 1379 1941 +> 15 0 23 1362 topology 1382 1941 > 16 0 23 1362 topology 1601 1941 -> 15 0 24 1362 topology 1462 1942 -> 16 0 24 1362 topology 1464 1942 -> 15 0 24 1362 topology 1570 1943 -> 16 0 24 1362 topology 1572 1943 -> 15 0 23 1362 topology 1431 1944 +> 15 0 23 1362 topology 1386 1942 +> 16 0 23 1362 topology 1601 1942 +> 15 0 23 1362 topology 1385 1943 +> 16 0 23 1362 topology 1601 1943 +> 15 0 23 1362 topology 1389 1944 > 16 0 23 1362 topology 1601 1944 -> 15 0 24 1362 topology 1411 1945 -> 16 0 24 1362 topology 1413 1945 -> 15 0 24 1362 topology 1384 1946 -> 16 0 24 1362 topology 1386 1946 -> 15 0 24 1362 topology 1519 1947 -> 16 0 24 1362 topology 1521 1947 -> 15 0 23 1362 topology 1515 1948 -> 16 0 23 1362 topology 1601 1948 -> 15 0 24 1362 topology 1468 1949 -> 16 0 24 1362 topology 1470 1949 -> 15 0 24 1362 topology 1576 1950 -> 16 0 24 1362 topology 1578 1950 -> 15 0 23 1362 topology 1467 1951 -> 16 0 23 1362 topology 1601 1951 -> 15 0 24 1362 topology 1417 1952 -> 16 0 24 1362 topology 1419 1952 -> 15 0 24 1362 topology 1525 1953 -> 16 0 24 1362 topology 1527 1953 -> 15 0 23 1362 topology 1551 1954 -> 16 0 23 1362 topology 1601 1954 -> 15 0 23 1362 topology 1419 1955 -> 16 0 23 1362 topology 1601 1955 -> 15 0 23 1362 topology 1503 1956 -> 16 0 23 1362 topology 1601 1956 -> 15 0 24 1362 topology 1474 1957 -> 16 0 24 1362 topology 1476 1957 -> 15 0 24 1362 topology 1582 1958 -> 16 0 24 1362 topology 1584 1958 -> 15 0 23 1362 topology 1587 1959 -> 16 0 23 1362 topology 1601 1959 -> 15 0 24 1362 topology 1531 1960 -> 16 0 24 1362 topology 1533 1960 -> 15 0 23 1362 topology 1391 1961 -> 16 0 23 1362 topology 1601 1961 -> 15 0 23 1362 topology 1539 1962 -> 16 0 23 1362 topology 1601 1962 -> 15 0 24 1362 topology 1588 1963 -> 16 0 24 1362 topology 1590 1963 -> 15 0 23 1362 topology 1451 1964 -> 16 0 23 1362 topology 1601 1964 -> 15 0 24 1362 topology 1537 1965 -> 16 0 24 1362 topology 1539 1965 -> 15 0 24 1362 topology 1384 1966 -> 16 0 24 1362 topology 1385 1966 -> 15 0 23 1362 topology 1368 1967 -> 16 0 23 1362 topology 1601 1967 -> 15 0 23 1362 topology 1511 1968 -> 16 0 23 1362 topology 1601 1968 -> 15 0 23 1362 topology 1433 1969 -> 16 0 23 1362 topology 1601 1969 -> 15 0 24 1362 topology 1594 1970 -> 16 0 24 1362 topology 1596 1970 -> 15 0 23 1362 topology 1571 1971 -> 16 0 23 1362 topology 1601 1971 -> 15 0 23 1362 topology 1493 1972 -> 16 0 23 1362 topology 1601 1972 -> 15 0 23 1362 topology 1415 1973 -> 16 0 23 1362 topology 1601 1973 -> 15 0 23 1362 topology 1553 1974 -> 16 0 23 1362 topology 1601 1974 -> 15 0 23 1362 topology 1475 1975 -> 16 0 23 1362 topology 1601 1975 -> 15 0 23 1362 topology 1535 1976 -> 16 0 23 1362 topology 1601 1976 -> 15 0 24 1362 topology 1369 1977 -> 16 0 24 1362 topology 1371 1977 -> 15 0 23 1362 topology 1595 1978 -> 16 0 23 1362 topology 1601 1978 -> 15 0 23 1362 topology 1364 1979 -> 16 0 23 1362 topology 1601 1979 -> 15 0 23 1362 topology 1422 1980 -> 16 0 23 1362 topology 1601 1980 -> 15 0 24 1362 topology 1363 1981 -> 16 0 24 1362 topology 1364 1981 -> 15 0 23 1362 topology 1458 1982 -> 16 0 23 1362 topology 1601 1982 -> 15 0 24 1362 topology 1393 1983 -> 16 0 24 1362 topology 1394 1983 -> 15 0 23 1362 topology 1388 1984 -> 16 0 23 1362 topology 1601 1984 -> 15 0 23 1362 topology 1542 1985 -> 16 0 23 1362 topology 1601 1985 -> 15 0 23 1362 topology 1410 1986 -> 16 0 23 1362 topology 1601 1986 -> 15 0 23 1362 topology 1494 1987 -> 16 0 23 1362 topology 1601 1987 -> 15 0 23 1362 topology 1578 1988 -> 16 0 23 1362 topology 1601 1988 -> 15 0 24 1362 topology 1453 1989 -> 16 0 24 1362 topology 1454 1989 -> 15 0 23 1362 topology 1446 1990 -> 16 0 23 1362 topology 1601 1990 -> 15 0 23 1362 topology 1530 1991 -> 16 0 23 1362 topology 1601 1991 -> 15 0 24 1362 topology 1429 1992 -> 16 0 24 1362 topology 1430 1992 -> 15 0 24 1362 topology 1405 1993 -> 16 0 24 1362 topology 1406 1993 -> 15 0 24 1362 topology 1513 1994 -> 16 0 24 1362 topology 1514 1994 -> 15 0 23 1362 topology 1566 1995 -> 16 0 23 1362 topology 1601 1995 -> 15 0 24 1362 topology 1489 1996 -> 16 0 24 1362 topology 1490 1996 -> 15 0 23 1362 topology 1400 1997 -> 16 0 23 1362 topology 1601 1997 -> 15 0 24 1362 topology 1465 1998 -> 16 0 24 1362 topology 1466 1998 -> 15 0 24 1362 topology 1573 1999 -> 16 0 24 1362 topology 1574 1999 -> 15 0 23 1362 topology 1460 2000 -> 16 0 23 1362 topology 1601 2000 -> 15 0 24 1362 topology 1441 2001 -> 16 0 24 1362 topology 1442 2001 -> 15 0 24 1362 topology 1387 2002 -> 16 0 24 1362 topology 1388 2002 -> 15 0 24 1362 topology 1549 2003 -> 16 0 24 1362 topology 1550 2003 -> 15 0 23 1362 topology 1520 2004 -> 16 0 23 1362 topology 1601 2004 -> 15 0 23 1362 topology 1442 2005 -> 16 0 23 1362 topology 1601 2005 -> 15 0 24 1362 topology 1417 2006 -> 16 0 24 1362 topology 1418 2006 -> 15 0 24 1362 topology 1525 2007 -> 16 0 24 1362 topology 1526 2007 -> 15 0 23 1362 topology 1383 2008 -> 16 0 23 1362 topology 1601 2008 -> 15 0 23 1362 topology 1580 2009 -> 16 0 23 1362 topology 1601 2009 -> 15 0 23 1362 topology 1502 2010 -> 16 0 23 1362 topology 1601 2010 -> 15 0 24 1362 topology 1501 2011 -> 16 0 24 1362 topology 1502 2011 -> 15 0 24 1362 topology 1420 2012 -> 16 0 24 1362 topology 1422 2012 -> 15 0 24 1362 topology 1477 2013 -> 16 0 24 1362 topology 1478 2013 -> 15 0 23 1362 topology 1562 2014 -> 16 0 23 1362 topology 1601 2014 -> 15 0 24 1362 topology 1585 2015 -> 16 0 24 1362 topology 1586 2015 -> 15 0 24 1362 topology 1561 2016 -> 16 0 24 1362 topology 1562 2016 -> 15 0 24 1362 topology 1426 2017 -> 16 0 24 1362 topology 1428 2017 -> 15 0 24 1362 topology 1537 2018 -> 16 0 24 1362 topology 1538 2018 -> 15 0 24 1362 topology 1483 2019 -> 16 0 24 1362 topology 1485 2019 -> 15 0 24 1362 topology 1432 2020 -> 16 0 24 1362 topology 1434 2020 -> 15 0 24 1362 topology 1378 2021 -> 16 0 24 1362 topology 1380 2021 -> 15 0 23 1362 topology 1373 2022 -> 16 0 23 1362 topology 1601 2022 -> 15 0 24 1362 topology 1540 2023 -> 16 0 24 1362 topology 1542 2023 -> 15 0 24 1362 topology 1597 2024 -> 16 0 24 1362 topology 1598 2024 -> 15 0 24 1362 topology 1489 2025 -> 16 0 24 1362 topology 1491 2025 -> 15 0 23 1362 topology 1401 2026 -> 16 0 23 1362 topology 1601 2026 -> 15 0 23 1362 topology 1485 2027 -> 16 0 23 1362 topology 1601 2027 -> 15 0 24 1362 topology 1438 2028 -> 16 0 24 1362 topology 1440 2028 -> 15 0 24 1362 topology 1546 2029 -> 16 0 24 1362 topology 1548 2029 -> 15 0 24 1362 topology 1366 2030 -> 16 0 24 1362 topology 1367 2030 -> 15 0 24 1362 topology 1495 2031 -> 16 0 24 1362 topology 1497 2031 -> 15 0 23 1362 topology 1437 2032 -> 16 0 23 1362 topology 1601 2032 -> 15 0 23 1362 topology 1521 2033 -> 16 0 23 1362 topology 1601 2033 -> 15 0 24 1362 topology 1444 2034 -> 16 0 24 1362 topology 1446 2034 -> 15 0 24 1362 topology 1552 2035 -> 16 0 24 1362 topology 1554 2035 -> 15 0 23 1362 topology 1473 2036 -> 16 0 23 1362 topology 1601 2036 -> 15 0 24 1362 topology 1501 2037 -> 16 0 24 1362 topology 1503 2037 -> 15 0 23 1362 topology 1557 2038 -> 16 0 23 1362 topology 1601 2038 -> 15 0 23 1362 topology 1509 2039 -> 16 0 23 1362 topology 1601 2039 -> 15 0 24 1362 topology 1558 2040 -> 16 0 24 1362 topology 1560 2040 -> 15 0 23 1362 topology 1593 2041 -> 16 0 23 1362 topology 1601 2041 -> 15 0 24 1362 topology 1507 2042 -> 16 0 24 1362 topology 1509 2042 -> 15 0 23 1362 topology 1427 2043 -> 16 0 23 1362 topology 1601 2043 -> 15 0 24 1362 topology 1564 2044 -> 16 0 24 1362 topology 1566 2044 -> 15 0 23 1362 topology 1487 2045 -> 16 0 23 1362 topology 1601 2045 -> 15 0 23 1362 topology 1409 2046 -> 16 0 23 1362 topology 1601 2046 -> 15 0 23 1362 topology 1374 2047 -> 16 0 23 1362 topology 1601 2047 -> 15 0 23 1362 topology 1547 2048 -> 16 0 23 1362 topology 1601 2048 -> 15 0 23 1362 topology 1469 2049 -> 16 0 23 1362 topology 1601 2049 -> 15 0 24 1362 topology 1363 2050 -> 16 0 24 1362 topology 1365 2050 -> 15 0 23 1362 topology 1529 2051 -> 16 0 23 1362 topology 1601 2051 -> 15 0 23 1362 topology 1589 2052 -> 16 0 23 1362 topology 1601 2052 -> 15 0 23 1362 topology 1392 2053 -> 16 0 23 1362 topology 1601 2053 -> 15 0 23 1362 topology 1428 2054 -> 16 0 23 1362 topology 1601 2054 -> 15 0 23 1362 topology 1382 2055 -> 16 0 23 1362 topology 1601 2055 -> 15 0 23 1362 topology 1512 2056 -> 16 0 23 1362 topology 1601 2056 -> 15 0 24 1362 topology 1420 2057 -> 16 0 24 1362 topology 1421 2057 -> 15 0 23 1362 topology 1464 2058 -> 16 0 23 1362 topology 1601 2058 -> 15 0 24 1362 topology 1387 2059 -> 16 0 24 1362 topology 1389 2059 -> 15 0 24 1362 topology 1396 2060 -> 16 0 24 1362 topology 1397 2060 -> 15 0 24 1362 topology 1369 2061 -> 16 0 24 1362 topology 1370 2061 -> 15 0 23 1362 topology 1548 2062 -> 16 0 23 1362 topology 1601 2062 -> 15 0 23 1362 topology 1416 2063 -> 16 0 23 1362 topology 1601 2063 -> 15 0 23 1362 topology 1500 2064 -> 16 0 23 1362 topology 1601 2064 -> 15 0 24 1362 topology 1480 2065 -> 16 0 24 1362 topology 1481 2065 -> 15 0 23 1362 topology 1584 2066 -> 16 0 23 1362 topology 1601 2066 -> 15 0 24 1362 topology 1456 2067 -> 16 0 24 1362 topology 1457 2067 -> 15 0 23 1362 topology 1536 2068 -> 16 0 23 1362 topology 1601 2068 -> 15 0 24 1362 topology 1432 2069 -> 16 0 24 1362 topology 1433 2069 -> 15 0 24 1362 topology 1540 2070 -> 16 0 24 1362 topology 1541 2070 -> 15 0 23 1362 topology 1394 2071 -> 16 0 23 1362 topology 1601 2071 -> 15 0 24 1362 topology 1408 2072 -> 16 0 24 1362 topology 1409 2072 -> 15 0 24 1362 topology 1516 2073 -> 16 0 24 1362 topology 1517 2073 -> 15 0 23 1362 topology 1454 2074 -> 16 0 23 1362 topology 1601 2074 -> 15 0 23 1362 topology 1365 2075 -> 16 0 23 1362 topology 1601 2075 -> 15 0 24 1362 topology 1492 2076 -> 16 0 24 1362 topology 1493 2076 -> 15 0 23 1362 topology 1514 2077 -> 16 0 23 1362 topology 1601 2077 -> 15 0 24 1362 topology 1468 2078 -> 16 0 24 1362 topology 1469 2078 -> 15 0 23 1362 topology 1436 2079 -> 16 0 23 1362 topology 1601 2079 -> 15 0 24 1362 topology 1576 2080 -> 16 0 24 1362 topology 1577 2080 -> 15 0 23 1362 topology 1574 2081 -> 16 0 23 1362 topology 1601 2081 -> 15 0 23 1362 topology 1496 2082 -> 16 0 23 1362 topology 1601 2082 -> 15 0 24 1362 topology 1444 2083 -> 16 0 24 1362 topology 1445 2083 -> 15 0 24 1362 topology 1552 2084 -> 16 0 24 1362 topology 1553 2084 -> 15 0 23 1362 topology 1418 2085 -> 16 0 23 1362 topology 1601 2085 -> 15 0 24 1362 topology 1390 2086 -> 16 0 24 1362 topology 1392 2086 -> 15 0 24 1362 topology 1528 2087 -> 16 0 24 1362 topology 1529 2087 -> 15 0 23 1362 topology 1556 2088 -> 16 0 23 1362 topology 1601 2088 -> 15 0 23 1362 topology 1478 2089 -> 16 0 23 1362 topology 1601 2089 -> 15 0 23 1362 topology 1389 2090 -> 16 0 23 1362 topology 1601 2090 -> 15 0 24 1362 topology 1504 2091 -> 16 0 24 1362 topology 1505 2091 -> 15 0 24 1362 topology 1396 2092 -> 16 0 24 1362 topology 1398 2092 -> 15 0 23 1362 topology 1538 2093 -> 16 0 23 1362 topology 1601 2093 -> 15 0 24 1362 topology 1588 2094 -> 16 0 24 1362 topology 1589 2094 -> 15 0 24 1362 topology 1453 2095 -> 16 0 24 1362 topology 1455 2095 -> 15 0 24 1362 topology 1372 2096 -> 16 0 24 1362 topology 1374 2096 -> 15 0 23 1362 topology 1598 2097 -> 16 0 23 1362 topology 1601 2097 -> 15 0 24 1362 topology 1564 2098 -> 16 0 24 1362 topology 1565 2098 -> 15 0 24 1362 topology 1402 2099 -> 16 0 24 1362 topology 1404 2099 -> 15 0 23 1362 topology 1367 2100 -> 16 0 23 1362 topology 1601 2100 -> 15 0 24 1362 topology 1510 2101 -> 16 0 24 1362 topology 1512 2101 -> 15 0 24 1362 topology 1459 2102 -> 16 0 24 1362 topology 1461 2102 -> 15 0 24 1362 topology 1408 2103 -> 16 0 24 1362 topology 1410 2103 -> 15 0 24 1362 topology 1516 2104 -> 16 0 24 1362 topology 1518 2104 -> 15 0 26 1189 topology 1602 2105 -> 16 0 26 1189 topology 1600 2105 -> 15 0 27 1189 topology 1359 2106 -> 16 0 27 1189 topology 1361 2106 -> 15 0 26 1189 topology 1361 2107 -> 16 0 26 1189 topology 1604 2107 -> 15 0 21 1189 topology 1361 2108 -> 16 0 21 1189 topology 1602 2108 +> 15 0 23 1362 topology 1388 1945 +> 16 0 23 1362 topology 1601 1945 +> 15 0 24 1362 topology 1600 1946 +> 16 0 24 1362 topology 1601 1946 +> 15 0 25 1362 topology 1390 1947 +> 16 0 25 1362 topology 1392 1947 +> 15 0 25 1362 topology 1390 1948 +> 16 0 25 1362 topology 1391 1948 +> 15 0 25 1362 topology 1393 1949 +> 16 0 25 1362 topology 1395 1949 +> 15 0 25 1362 topology 1393 1950 +> 16 0 25 1362 topology 1394 1950 +> 15 0 25 1362 topology 1396 1951 +> 16 0 25 1362 topology 1398 1951 +> 15 0 25 1362 topology 1396 1952 +> 16 0 25 1362 topology 1397 1952 +> 15 0 25 1362 topology 1399 1953 +> 16 0 25 1362 topology 1401 1953 +> 15 0 25 1362 topology 1399 1954 +> 16 0 25 1362 topology 1400 1954 +> 15 0 25 1362 topology 1402 1955 +> 16 0 25 1362 topology 1404 1955 +> 15 0 25 1362 topology 1402 1956 +> 16 0 25 1362 topology 1403 1956 +> 15 0 25 1362 topology 1405 1957 +> 16 0 25 1362 topology 1407 1957 +> 15 0 25 1362 topology 1405 1958 +> 16 0 25 1362 topology 1406 1958 +> 15 0 25 1362 topology 1408 1959 +> 16 0 25 1362 topology 1410 1959 +> 15 0 25 1362 topology 1408 1960 +> 16 0 25 1362 topology 1409 1960 +> 15 0 25 1362 topology 1411 1961 +> 16 0 25 1362 topology 1413 1961 +> 15 0 25 1362 topology 1411 1962 +> 16 0 25 1362 topology 1412 1962 +> 15 0 25 1362 topology 1414 1963 +> 16 0 25 1362 topology 1416 1963 +> 15 0 25 1362 topology 1414 1964 +> 16 0 25 1362 topology 1415 1964 +> 15 0 25 1362 topology 1417 1965 +> 16 0 25 1362 topology 1419 1965 +> 15 0 25 1362 topology 1417 1966 +> 16 0 25 1362 topology 1418 1966 +> 15 0 25 1362 topology 1363 1967 +> 16 0 25 1362 topology 1365 1967 +> 15 0 25 1362 topology 1363 1968 +> 16 0 25 1362 topology 1364 1968 +> 15 0 25 1362 topology 1420 1969 +> 16 0 25 1362 topology 1422 1969 +> 15 0 25 1362 topology 1420 1970 +> 16 0 25 1362 topology 1421 1970 +> 15 0 25 1362 topology 1423 1971 +> 16 0 25 1362 topology 1425 1971 +> 15 0 25 1362 topology 1423 1972 +> 16 0 25 1362 topology 1424 1972 +> 15 0 25 1362 topology 1426 1973 +> 16 0 25 1362 topology 1428 1973 +> 15 0 25 1362 topology 1426 1974 +> 16 0 25 1362 topology 1427 1974 +> 15 0 25 1362 topology 1429 1975 +> 16 0 25 1362 topology 1431 1975 +> 15 0 25 1362 topology 1429 1976 +> 16 0 25 1362 topology 1430 1976 +> 15 0 25 1362 topology 1432 1977 +> 16 0 25 1362 topology 1434 1977 +> 15 0 25 1362 topology 1432 1978 +> 16 0 25 1362 topology 1433 1978 +> 15 0 25 1362 topology 1435 1979 +> 16 0 25 1362 topology 1437 1979 +> 15 0 25 1362 topology 1435 1980 +> 16 0 25 1362 topology 1436 1980 +> 15 0 25 1362 topology 1438 1981 +> 16 0 25 1362 topology 1440 1981 +> 15 0 25 1362 topology 1438 1982 +> 16 0 25 1362 topology 1439 1982 +> 15 0 25 1362 topology 1441 1983 +> 16 0 25 1362 topology 1443 1983 +> 15 0 25 1362 topology 1441 1984 +> 16 0 25 1362 topology 1442 1984 +> 15 0 25 1362 topology 1444 1985 +> 16 0 25 1362 topology 1446 1985 +> 15 0 25 1362 topology 1444 1986 +> 16 0 25 1362 topology 1445 1986 +> 15 0 25 1362 topology 1447 1987 +> 16 0 25 1362 topology 1449 1987 +> 15 0 25 1362 topology 1447 1988 +> 16 0 25 1362 topology 1448 1988 +> 15 0 25 1362 topology 1366 1989 +> 16 0 25 1362 topology 1368 1989 +> 15 0 25 1362 topology 1366 1990 +> 16 0 25 1362 topology 1367 1990 +> 15 0 25 1362 topology 1450 1991 +> 16 0 25 1362 topology 1452 1991 +> 15 0 25 1362 topology 1450 1992 +> 16 0 25 1362 topology 1451 1992 +> 15 0 25 1362 topology 1453 1993 +> 16 0 25 1362 topology 1455 1993 +> 15 0 25 1362 topology 1453 1994 +> 16 0 25 1362 topology 1454 1994 +> 15 0 25 1362 topology 1456 1995 +> 16 0 25 1362 topology 1458 1995 +> 15 0 25 1362 topology 1456 1996 +> 16 0 25 1362 topology 1457 1996 +> 15 0 25 1362 topology 1459 1997 +> 16 0 25 1362 topology 1461 1997 +> 15 0 25 1362 topology 1459 1998 +> 16 0 25 1362 topology 1460 1998 +> 15 0 25 1362 topology 1462 1999 +> 16 0 25 1362 topology 1464 1999 +> 15 0 25 1362 topology 1462 2000 +> 16 0 25 1362 topology 1463 2000 +> 15 0 25 1362 topology 1465 2001 +> 16 0 25 1362 topology 1467 2001 +> 15 0 25 1362 topology 1465 2002 +> 16 0 25 1362 topology 1466 2002 +> 15 0 25 1362 topology 1468 2003 +> 16 0 25 1362 topology 1470 2003 +> 15 0 25 1362 topology 1468 2004 +> 16 0 25 1362 topology 1469 2004 +> 15 0 25 1362 topology 1471 2005 +> 16 0 25 1362 topology 1473 2005 +> 15 0 25 1362 topology 1471 2006 +> 16 0 25 1362 topology 1472 2006 +> 15 0 25 1362 topology 1474 2007 +> 16 0 25 1362 topology 1476 2007 +> 15 0 25 1362 topology 1474 2008 +> 16 0 25 1362 topology 1475 2008 +> 15 0 25 1362 topology 1477 2009 +> 16 0 25 1362 topology 1479 2009 +> 15 0 25 1362 topology 1477 2010 +> 16 0 25 1362 topology 1478 2010 +> 15 0 25 1362 topology 1369 2011 +> 16 0 25 1362 topology 1371 2011 +> 15 0 25 1362 topology 1369 2012 +> 16 0 25 1362 topology 1370 2012 +> 15 0 25 1362 topology 1480 2013 +> 16 0 25 1362 topology 1482 2013 +> 15 0 25 1362 topology 1480 2014 +> 16 0 25 1362 topology 1481 2014 +> 15 0 25 1362 topology 1483 2015 +> 16 0 25 1362 topology 1485 2015 +> 15 0 25 1362 topology 1483 2016 +> 16 0 25 1362 topology 1484 2016 +> 15 0 25 1362 topology 1486 2017 +> 16 0 25 1362 topology 1488 2017 +> 15 0 25 1362 topology 1486 2018 +> 16 0 25 1362 topology 1487 2018 +> 15 0 25 1362 topology 1489 2019 +> 16 0 25 1362 topology 1491 2019 +> 15 0 25 1362 topology 1489 2020 +> 16 0 25 1362 topology 1490 2020 +> 15 0 25 1362 topology 1492 2021 +> 16 0 25 1362 topology 1494 2021 +> 15 0 25 1362 topology 1492 2022 +> 16 0 25 1362 topology 1493 2022 +> 15 0 25 1362 topology 1495 2023 +> 16 0 25 1362 topology 1497 2023 +> 15 0 25 1362 topology 1495 2024 +> 16 0 25 1362 topology 1496 2024 +> 15 0 25 1362 topology 1498 2025 +> 16 0 25 1362 topology 1500 2025 +> 15 0 25 1362 topology 1498 2026 +> 16 0 25 1362 topology 1499 2026 +> 15 0 25 1362 topology 1501 2027 +> 16 0 25 1362 topology 1503 2027 +> 15 0 25 1362 topology 1501 2028 +> 16 0 25 1362 topology 1502 2028 +> 15 0 25 1362 topology 1504 2029 +> 16 0 25 1362 topology 1506 2029 +> 15 0 25 1362 topology 1504 2030 +> 16 0 25 1362 topology 1505 2030 +> 15 0 25 1362 topology 1507 2031 +> 16 0 25 1362 topology 1509 2031 +> 15 0 25 1362 topology 1507 2032 +> 16 0 25 1362 topology 1508 2032 +> 15 0 25 1362 topology 1372 2033 +> 16 0 25 1362 topology 1374 2033 +> 15 0 25 1362 topology 1372 2034 +> 16 0 25 1362 topology 1373 2034 +> 15 0 25 1362 topology 1510 2035 +> 16 0 25 1362 topology 1512 2035 +> 15 0 25 1362 topology 1510 2036 +> 16 0 25 1362 topology 1511 2036 +> 15 0 25 1362 topology 1513 2037 +> 16 0 25 1362 topology 1515 2037 +> 15 0 25 1362 topology 1513 2038 +> 16 0 25 1362 topology 1514 2038 +> 15 0 25 1362 topology 1516 2039 +> 16 0 25 1362 topology 1518 2039 +> 15 0 25 1362 topology 1516 2040 +> 16 0 25 1362 topology 1517 2040 +> 15 0 25 1362 topology 1519 2041 +> 16 0 25 1362 topology 1521 2041 +> 15 0 25 1362 topology 1519 2042 +> 16 0 25 1362 topology 1520 2042 +> 15 0 25 1362 topology 1522 2043 +> 16 0 25 1362 topology 1524 2043 +> 15 0 25 1362 topology 1522 2044 +> 16 0 25 1362 topology 1523 2044 +> 15 0 25 1362 topology 1525 2045 +> 16 0 25 1362 topology 1527 2045 +> 15 0 25 1362 topology 1525 2046 +> 16 0 25 1362 topology 1526 2046 +> 15 0 25 1362 topology 1528 2047 +> 16 0 25 1362 topology 1530 2047 +> 15 0 25 1362 topology 1528 2048 +> 16 0 25 1362 topology 1529 2048 +> 15 0 25 1362 topology 1531 2049 +> 16 0 25 1362 topology 1533 2049 +> 15 0 25 1362 topology 1531 2050 +> 16 0 25 1362 topology 1532 2050 +> 15 0 25 1362 topology 1534 2051 +> 16 0 25 1362 topology 1536 2051 +> 15 0 25 1362 topology 1534 2052 +> 16 0 25 1362 topology 1535 2052 +> 15 0 25 1362 topology 1537 2053 +> 16 0 25 1362 topology 1539 2053 +> 15 0 25 1362 topology 1537 2054 +> 16 0 25 1362 topology 1538 2054 +> 15 0 25 1362 topology 1375 2055 +> 16 0 25 1362 topology 1377 2055 +> 15 0 25 1362 topology 1375 2056 +> 16 0 25 1362 topology 1376 2056 +> 15 0 25 1362 topology 1540 2057 +> 16 0 25 1362 topology 1542 2057 +> 15 0 25 1362 topology 1540 2058 +> 16 0 25 1362 topology 1541 2058 +> 15 0 25 1362 topology 1543 2059 +> 16 0 25 1362 topology 1545 2059 +> 15 0 25 1362 topology 1543 2060 +> 16 0 25 1362 topology 1544 2060 +> 15 0 25 1362 topology 1546 2061 +> 16 0 25 1362 topology 1548 2061 +> 15 0 25 1362 topology 1546 2062 +> 16 0 25 1362 topology 1547 2062 +> 15 0 25 1362 topology 1549 2063 +> 16 0 25 1362 topology 1551 2063 +> 15 0 25 1362 topology 1549 2064 +> 16 0 25 1362 topology 1550 2064 +> 15 0 25 1362 topology 1552 2065 +> 16 0 25 1362 topology 1554 2065 +> 15 0 25 1362 topology 1552 2066 +> 16 0 25 1362 topology 1553 2066 +> 15 0 25 1362 topology 1555 2067 +> 16 0 25 1362 topology 1557 2067 +> 15 0 25 1362 topology 1555 2068 +> 16 0 25 1362 topology 1556 2068 +> 15 0 25 1362 topology 1558 2069 +> 16 0 25 1362 topology 1560 2069 +> 15 0 25 1362 topology 1558 2070 +> 16 0 25 1362 topology 1559 2070 +> 15 0 25 1362 topology 1561 2071 +> 16 0 25 1362 topology 1563 2071 +> 15 0 25 1362 topology 1561 2072 +> 16 0 25 1362 topology 1562 2072 +> 15 0 25 1362 topology 1564 2073 +> 16 0 25 1362 topology 1566 2073 +> 15 0 25 1362 topology 1564 2074 +> 16 0 25 1362 topology 1565 2074 +> 15 0 25 1362 topology 1567 2075 +> 16 0 25 1362 topology 1569 2075 +> 15 0 25 1362 topology 1567 2076 +> 16 0 25 1362 topology 1568 2076 +> 15 0 25 1362 topology 1378 2077 +> 16 0 25 1362 topology 1380 2077 +> 15 0 25 1362 topology 1378 2078 +> 16 0 25 1362 topology 1379 2078 +> 15 0 25 1362 topology 1570 2079 +> 16 0 25 1362 topology 1572 2079 +> 15 0 25 1362 topology 1570 2080 +> 16 0 25 1362 topology 1571 2080 +> 15 0 25 1362 topology 1573 2081 +> 16 0 25 1362 topology 1575 2081 +> 15 0 25 1362 topology 1573 2082 +> 16 0 25 1362 topology 1574 2082 +> 15 0 25 1362 topology 1576 2083 +> 16 0 25 1362 topology 1578 2083 +> 15 0 25 1362 topology 1576 2084 +> 16 0 25 1362 topology 1577 2084 +> 15 0 25 1362 topology 1579 2085 +> 16 0 25 1362 topology 1581 2085 +> 15 0 25 1362 topology 1579 2086 +> 16 0 25 1362 topology 1580 2086 +> 15 0 25 1362 topology 1582 2087 +> 16 0 25 1362 topology 1584 2087 +> 15 0 25 1362 topology 1582 2088 +> 16 0 25 1362 topology 1583 2088 +> 15 0 25 1362 topology 1585 2089 +> 16 0 25 1362 topology 1587 2089 +> 15 0 25 1362 topology 1585 2090 +> 16 0 25 1362 topology 1586 2090 +> 15 0 25 1362 topology 1588 2091 +> 16 0 25 1362 topology 1590 2091 +> 15 0 25 1362 topology 1588 2092 +> 16 0 25 1362 topology 1589 2092 +> 15 0 25 1362 topology 1591 2093 +> 16 0 25 1362 topology 1593 2093 +> 15 0 25 1362 topology 1591 2094 +> 16 0 25 1362 topology 1592 2094 +> 15 0 25 1362 topology 1594 2095 +> 16 0 25 1362 topology 1596 2095 +> 15 0 25 1362 topology 1594 2096 +> 16 0 25 1362 topology 1595 2096 +> 15 0 25 1362 topology 1597 2097 +> 16 0 25 1362 topology 1599 2097 +> 15 0 25 1362 topology 1597 2098 +> 16 0 25 1362 topology 1598 2098 +> 15 0 25 1362 topology 1381 2099 +> 16 0 25 1362 topology 1383 2099 +> 15 0 25 1362 topology 1381 2100 +> 16 0 25 1362 topology 1382 2100 +> 15 0 25 1362 topology 1384 2101 +> 16 0 25 1362 topology 1386 2101 +> 15 0 25 1362 topology 1384 2102 +> 16 0 25 1362 topology 1385 2102 +> 15 0 25 1362 topology 1387 2103 +> 16 0 25 1362 topology 1389 2103 +> 15 0 25 1362 topology 1387 2104 +> 16 0 25 1362 topology 1388 2104 +> 15 0 26 1189 topology 1361 2105 +> 16 0 26 1189 topology 1604 2105 +> 15 0 26 1189 topology 1602 2106 +> 16 0 26 1189 topology 1604 2106 +> 15 0 27 1189 topology 1359 2107 +> 16 0 27 1189 topology 1361 2107 +> 15 0 20 1189 topology 1361 2108 +> 16 0 20 1189 topology 1602 2108 > 15 0 26 1189 topology 1602 2109 -> 16 0 26 1189 topology 1604 2109 -> 15 0 28 1608 topology 1641 2110 +> 16 0 26 1189 topology 1600 2109 +> 15 0 28 1608 topology 1638 2110 > 16 0 28 1608 topology 1727 2110 -> 15 0 28 1608 topology 1701 2111 +> 15 0 28 1608 topology 1637 2111 > 16 0 28 1608 topology 1727 2111 -> 15 0 28 1608 topology 1631 2112 +> 15 0 28 1608 topology 1641 2112 > 16 0 28 1608 topology 1727 2112 -> 15 0 28 1608 topology 1677 2113 +> 15 0 28 1608 topology 1640 2113 > 16 0 28 1608 topology 1727 2113 -> 15 0 28 1608 topology 1653 2114 +> 15 0 28 1608 topology 1644 2114 > 16 0 28 1608 topology 1727 2114 -> 15 0 29 1608 topology 1633 2115 -> 16 0 29 1608 topology 1634 2115 -> 15 0 28 1608 topology 1713 2116 +> 15 0 28 1608 topology 1643 2115 +> 16 0 28 1608 topology 1727 2115 +> 15 0 28 1608 topology 1647 2116 > 16 0 28 1608 topology 1727 2116 -> 15 0 28 1608 topology 1689 2117 +> 15 0 28 1608 topology 1646 2117 > 16 0 28 1608 topology 1727 2117 -> 15 0 29 1608 topology 1609 2118 -> 16 0 29 1608 topology 1611 2118 -> 15 0 29 1608 topology 1636 2119 -> 16 0 29 1608 topology 1638 2119 -> 15 0 28 1608 topology 1665 2120 +> 15 0 28 1608 topology 1650 2118 +> 16 0 28 1608 topology 1727 2118 +> 15 0 28 1608 topology 1649 2119 +> 16 0 28 1608 topology 1727 2119 +> 15 0 28 1608 topology 1653 2120 > 16 0 28 1608 topology 1727 2120 -> 15 0 29 1608 topology 1639 2121 -> 16 0 29 1608 topology 1641 2121 -> 15 0 28 1608 topology 1725 2122 +> 15 0 28 1608 topology 1652 2121 +> 16 0 28 1608 topology 1727 2121 +> 15 0 28 1608 topology 1656 2122 > 16 0 28 1608 topology 1727 2122 -> 15 0 28 1608 topology 1637 2123 +> 15 0 28 1608 topology 1655 2123 > 16 0 28 1608 topology 1727 2123 -> 15 0 29 1608 topology 1642 2124 -> 16 0 29 1608 topology 1644 2124 -> 15 0 29 1608 topology 1696 2125 -> 16 0 29 1608 topology 1698 2125 -> 15 0 28 1608 topology 1667 2126 +> 15 0 28 1608 topology 1659 2124 +> 16 0 28 1608 topology 1727 2124 +> 15 0 28 1608 topology 1658 2125 +> 16 0 28 1608 topology 1727 2125 +> 15 0 28 1608 topology 1662 2126 > 16 0 28 1608 topology 1727 2126 -> 15 0 29 1608 topology 1645 2127 -> 16 0 29 1608 topology 1647 2127 -> 15 0 28 1608 topology 1697 2128 +> 15 0 28 1608 topology 1661 2127 +> 16 0 28 1608 topology 1727 2127 +> 15 0 28 1608 topology 1665 2128 > 16 0 28 1608 topology 1727 2128 -> 15 0 29 1608 topology 1699 2129 -> 16 0 29 1608 topology 1701 2129 -> 15 0 29 1608 topology 1621 2130 -> 16 0 29 1608 topology 1623 2130 -> 15 0 28 1608 topology 1649 2131 +> 15 0 28 1608 topology 1664 2129 +> 16 0 28 1608 topology 1727 2129 +> 15 0 28 1608 topology 1611 2130 +> 16 0 28 1608 topology 1727 2130 +> 15 0 28 1608 topology 1610 2131 > 16 0 28 1608 topology 1727 2131 -> 15 0 29 1608 topology 1648 2132 -> 16 0 29 1608 topology 1650 2132 -> 15 0 29 1608 topology 1702 2133 -> 16 0 29 1608 topology 1704 2133 -> 15 0 28 1608 topology 1679 2134 +> 15 0 28 1608 topology 1668 2132 +> 16 0 28 1608 topology 1727 2132 +> 15 0 28 1608 topology 1667 2133 +> 16 0 28 1608 topology 1727 2133 +> 15 0 28 1608 topology 1671 2134 > 16 0 28 1608 topology 1727 2134 -> 15 0 28 1608 topology 1620 2135 +> 15 0 28 1608 topology 1670 2135 > 16 0 28 1608 topology 1727 2135 -> 15 0 29 1608 topology 1651 2136 -> 16 0 29 1608 topology 1653 2136 -> 15 0 29 1608 topology 1705 2137 -> 16 0 29 1608 topology 1707 2137 -> 15 0 28 1608 topology 1709 2138 +> 15 0 28 1608 topology 1674 2136 +> 16 0 28 1608 topology 1727 2136 +> 15 0 28 1608 topology 1673 2137 +> 16 0 28 1608 topology 1727 2137 +> 15 0 28 1608 topology 1677 2138 > 16 0 28 1608 topology 1727 2138 -> 15 0 29 1608 topology 1654 2139 -> 16 0 29 1608 topology 1656 2139 -> 15 0 28 1608 topology 1661 2140 +> 15 0 28 1608 topology 1676 2139 +> 16 0 28 1608 topology 1727 2139 +> 15 0 28 1608 topology 1680 2140 > 16 0 28 1608 topology 1727 2140 -> 15 0 29 1608 topology 1708 2141 -> 16 0 29 1608 topology 1710 2141 -> 15 0 29 1608 topology 1636 2142 -> 16 0 29 1608 topology 1637 2142 -> 15 0 28 1608 topology 1691 2143 +> 15 0 28 1608 topology 1679 2141 +> 16 0 28 1608 topology 1727 2141 +> 15 0 28 1608 topology 1683 2142 +> 16 0 28 1608 topology 1727 2142 +> 15 0 28 1608 topology 1682 2143 > 16 0 28 1608 topology 1727 2143 -> 15 0 28 1608 topology 1632 2144 +> 15 0 28 1608 topology 1686 2144 > 16 0 28 1608 topology 1727 2144 -> 15 0 29 1608 topology 1657 2145 -> 16 0 29 1608 topology 1659 2145 -> 15 0 29 1608 topology 1711 2146 -> 16 0 29 1608 topology 1713 2146 -> 15 0 28 1608 topology 1721 2147 +> 15 0 28 1608 topology 1685 2145 +> 16 0 28 1608 topology 1727 2145 +> 15 0 28 1608 topology 1689 2146 +> 16 0 28 1608 topology 1727 2146 +> 15 0 28 1608 topology 1688 2147 > 16 0 28 1608 topology 1727 2147 -> 15 0 29 1608 topology 1612 2148 -> 16 0 29 1608 topology 1613 2148 -> 15 0 29 1608 topology 1666 2149 -> 16 0 29 1608 topology 1667 2149 -> 15 0 30 1608 topology 1726 2150 -> 16 0 30 1608 topology 1727 2150 -> 15 0 29 1608 topology 1633 2151 -> 16 0 29 1608 topology 1635 2151 -> 15 0 29 1608 topology 1660 2152 -> 16 0 29 1608 topology 1662 2152 -> 15 0 29 1608 topology 1714 2153 -> 16 0 29 1608 topology 1716 2153 -> 15 0 29 1608 topology 1642 2154 -> 16 0 29 1608 topology 1643 2154 -> 15 0 29 1608 topology 1696 2155 -> 16 0 29 1608 topology 1697 2155 -> 15 0 29 1608 topology 1663 2156 -> 16 0 29 1608 topology 1665 2156 -> 15 0 29 1608 topology 1717 2157 -> 16 0 29 1608 topology 1719 2157 -> 15 0 29 1608 topology 1672 2158 -> 16 0 29 1608 topology 1673 2158 -> 15 0 29 1608 topology 1720 2159 -> 16 0 29 1608 topology 1722 2159 -> 15 0 29 1608 topology 1648 2160 -> 16 0 29 1608 topology 1649 2160 -> 15 0 29 1608 topology 1702 2161 -> 16 0 29 1608 topology 1703 2161 -> 15 0 28 1608 topology 1616 2162 +> 15 0 28 1608 topology 1692 2148 +> 16 0 28 1608 topology 1727 2148 +> 15 0 28 1608 topology 1691 2149 +> 16 0 28 1608 topology 1727 2149 +> 15 0 28 1608 topology 1695 2150 +> 16 0 28 1608 topology 1727 2150 +> 15 0 28 1608 topology 1694 2151 +> 16 0 28 1608 topology 1727 2151 +> 15 0 28 1608 topology 1614 2152 +> 16 0 28 1608 topology 1727 2152 +> 15 0 28 1608 topology 1613 2153 +> 16 0 28 1608 topology 1727 2153 +> 15 0 28 1608 topology 1698 2154 +> 16 0 28 1608 topology 1727 2154 +> 15 0 28 1608 topology 1697 2155 +> 16 0 28 1608 topology 1727 2155 +> 15 0 28 1608 topology 1701 2156 +> 16 0 28 1608 topology 1727 2156 +> 15 0 28 1608 topology 1700 2157 +> 16 0 28 1608 topology 1727 2157 +> 15 0 28 1608 topology 1704 2158 +> 16 0 28 1608 topology 1727 2158 +> 15 0 28 1608 topology 1703 2159 +> 16 0 28 1608 topology 1727 2159 +> 15 0 28 1608 topology 1707 2160 +> 16 0 28 1608 topology 1727 2160 +> 15 0 28 1608 topology 1706 2161 +> 16 0 28 1608 topology 1727 2161 +> 15 0 28 1608 topology 1710 2162 > 16 0 28 1608 topology 1727 2162 -> 15 0 29 1608 topology 1723 2163 -> 16 0 29 1608 topology 1725 2163 -> 15 0 29 1608 topology 1624 2164 -> 16 0 29 1608 topology 1625 2164 -> 15 0 29 1608 topology 1678 2165 -> 16 0 29 1608 topology 1679 2165 -> 15 0 28 1608 topology 1668 2166 +> 15 0 28 1608 topology 1709 2163 +> 16 0 28 1608 topology 1727 2163 +> 15 0 28 1608 topology 1713 2164 +> 16 0 28 1608 topology 1727 2164 +> 15 0 28 1608 topology 1712 2165 +> 16 0 28 1608 topology 1727 2165 +> 15 0 28 1608 topology 1716 2166 > 16 0 28 1608 topology 1727 2166 -> 15 0 28 1608 topology 1644 2167 +> 15 0 28 1608 topology 1715 2167 > 16 0 28 1608 topology 1727 2167 -> 15 0 29 1608 topology 1654 2168 -> 16 0 29 1608 topology 1655 2168 -> 15 0 29 1608 topology 1708 2169 -> 16 0 29 1608 topology 1709 2169 -> 15 0 28 1608 topology 1628 2170 +> 15 0 28 1608 topology 1719 2168 +> 16 0 28 1608 topology 1727 2168 +> 15 0 28 1608 topology 1718 2169 +> 16 0 28 1608 topology 1727 2169 +> 15 0 28 1608 topology 1722 2170 > 16 0 28 1608 topology 1727 2170 -> 15 0 29 1608 topology 1684 2171 -> 16 0 29 1608 topology 1685 2171 -> 15 0 28 1608 topology 1704 2172 +> 15 0 28 1608 topology 1721 2171 +> 16 0 28 1608 topology 1727 2171 +> 15 0 28 1608 topology 1725 2172 > 16 0 28 1608 topology 1727 2172 -> 15 0 28 1608 topology 1680 2173 +> 15 0 28 1608 topology 1724 2173 > 16 0 28 1608 topology 1727 2173 -> 15 0 28 1608 topology 1656 2174 +> 15 0 28 1608 topology 1617 2174 > 16 0 28 1608 topology 1727 2174 -> 15 0 29 1608 topology 1660 2175 -> 16 0 29 1608 topology 1661 2175 -> 15 0 29 1608 topology 1714 2176 -> 16 0 29 1608 topology 1715 2176 -> 15 0 29 1608 topology 1690 2177 -> 16 0 29 1608 topology 1691 2177 -> 15 0 28 1608 topology 1716 2178 +> 15 0 28 1608 topology 1616 2175 +> 16 0 28 1608 topology 1727 2175 +> 15 0 28 1608 topology 1620 2176 +> 16 0 28 1608 topology 1727 2176 +> 15 0 28 1608 topology 1619 2177 +> 16 0 28 1608 topology 1727 2177 +> 15 0 28 1608 topology 1623 2178 > 16 0 28 1608 topology 1727 2178 -> 15 0 28 1608 topology 1692 2179 +> 15 0 28 1608 topology 1622 2179 > 16 0 28 1608 topology 1727 2179 -> 15 0 29 1608 topology 1720 2180 -> 16 0 29 1608 topology 1721 2180 -> 15 0 29 1608 topology 1618 2181 -> 16 0 29 1608 topology 1620 2181 -> 15 0 28 1608 topology 1611 2182 +> 15 0 28 1608 topology 1626 2180 +> 16 0 28 1608 topology 1727 2180 +> 15 0 28 1608 topology 1625 2181 +> 16 0 28 1608 topology 1727 2181 +> 15 0 28 1608 topology 1629 2182 > 16 0 28 1608 topology 1727 2182 -> 15 0 28 1608 topology 1646 2183 +> 15 0 28 1608 topology 1628 2183 > 16 0 28 1608 topology 1727 2183 -> 15 0 28 1608 topology 1676 2184 +> 15 0 28 1608 topology 1632 2184 > 16 0 28 1608 topology 1727 2184 -> 15 0 28 1608 topology 1706 2185 +> 15 0 28 1608 topology 1631 2185 > 16 0 28 1608 topology 1727 2185 -> 15 0 28 1608 topology 1623 2186 +> 15 0 28 1608 topology 1635 2186 > 16 0 28 1608 topology 1727 2186 -> 15 0 28 1608 topology 1658 2187 +> 15 0 28 1608 topology 1634 2187 > 16 0 28 1608 topology 1727 2187 -> 15 0 28 1608 topology 1688 2188 -> 16 0 28 1608 topology 1727 2188 -> 15 0 28 1608 topology 1718 2189 -> 16 0 28 1608 topology 1727 2189 -> 15 0 29 1608 topology 1630 2190 -> 16 0 29 1608 topology 1632 2190 -> 15 0 28 1608 topology 1635 2191 -> 16 0 28 1608 topology 1727 2191 -> 15 0 29 1608 topology 1615 2192 -> 16 0 29 1608 topology 1616 2192 -> 15 0 28 1608 topology 1613 2193 -> 16 0 28 1608 topology 1727 2193 -> 15 0 28 1608 topology 1625 2194 -> 16 0 28 1608 topology 1727 2194 -> 15 0 29 1608 topology 1627 2195 -> 16 0 29 1608 topology 1628 2195 -> 15 0 28 1608 topology 1671 2196 -> 16 0 28 1608 topology 1727 2196 -> 15 0 28 1608 topology 1647 2197 -> 16 0 28 1608 topology 1727 2197 -> 15 0 28 1608 topology 1707 2198 -> 16 0 28 1608 topology 1727 2198 -> 15 0 28 1608 topology 1683 2199 -> 16 0 28 1608 topology 1727 2199 -> 15 0 28 1608 topology 1659 2200 -> 16 0 28 1608 topology 1727 2200 -> 15 0 28 1608 topology 1719 2201 -> 16 0 28 1608 topology 1727 2201 -> 15 0 28 1608 topology 1695 2202 -> 16 0 28 1608 topology 1727 2202 -> 15 0 29 1608 topology 1666 2203 -> 16 0 29 1608 topology 1668 2203 -> 15 0 29 1608 topology 1615 2204 -> 16 0 29 1608 topology 1617 2204 -> 15 0 29 1608 topology 1669 2205 -> 16 0 29 1608 topology 1671 2205 -> 15 0 28 1608 topology 1643 2206 -> 16 0 28 1608 topology 1727 2206 -> 15 0 29 1608 topology 1672 2207 -> 16 0 29 1608 topology 1674 2207 -> 15 0 28 1608 topology 1673 2208 -> 16 0 28 1608 topology 1727 2208 -> 15 0 28 1608 topology 1614 2209 -> 16 0 28 1608 topology 1727 2209 -> 15 0 29 1608 topology 1675 2210 -> 16 0 29 1608 topology 1677 2210 -> 15 0 28 1608 topology 1703 2211 -> 16 0 28 1608 topology 1727 2211 -> 15 0 28 1608 topology 1655 2212 -> 16 0 28 1608 topology 1727 2212 -> 15 0 29 1608 topology 1678 2213 -> 16 0 29 1608 topology 1680 2213 -> 15 0 28 1608 topology 1685 2214 -> 16 0 28 1608 topology 1727 2214 -> 15 0 28 1608 topology 1626 2215 -> 16 0 28 1608 topology 1727 2215 -> 15 0 29 1608 topology 1627 2216 -> 16 0 29 1608 topology 1629 2216 -> 15 0 29 1608 topology 1681 2217 -> 16 0 29 1608 topology 1683 2217 -> 15 0 28 1608 topology 1715 2218 -> 16 0 28 1608 topology 1727 2218 -> 15 0 29 1608 topology 1684 2219 -> 16 0 29 1608 topology 1686 2219 -> 15 0 29 1608 topology 1639 2220 -> 16 0 29 1608 topology 1640 2220 -> 15 0 29 1608 topology 1687 2221 -> 16 0 29 1608 topology 1689 2221 -> 15 0 29 1608 topology 1669 2222 -> 16 0 29 1608 topology 1670 2222 -> 15 0 29 1608 topology 1690 2223 -> 16 0 29 1608 topology 1692 2223 -> 15 0 29 1608 topology 1618 2224 -> 16 0 29 1608 topology 1619 2224 -> 15 0 29 1608 topology 1645 2225 -> 16 0 29 1608 topology 1646 2225 -> 15 0 29 1608 topology 1699 2226 -> 16 0 29 1608 topology 1700 2226 -> 15 0 28 1608 topology 1610 2227 -> 16 0 28 1608 topology 1727 2227 -> 15 0 29 1608 topology 1693 2228 -> 16 0 29 1608 topology 1695 2228 -> 15 0 29 1608 topology 1675 2229 -> 16 0 29 1608 topology 1676 2229 -> 15 0 28 1608 topology 1638 2230 -> 16 0 28 1608 topology 1727 2230 -> 15 0 29 1608 topology 1651 2231 -> 16 0 29 1608 topology 1652 2231 -> 15 0 29 1608 topology 1705 2232 -> 16 0 29 1608 topology 1706 2232 -> 15 0 28 1608 topology 1622 2233 -> 16 0 28 1608 topology 1727 2233 -> 15 0 29 1608 topology 1681 2234 -> 16 0 29 1608 topology 1682 2234 -> 15 0 28 1608 topology 1698 2235 -> 16 0 28 1608 topology 1727 2235 -> 15 0 28 1608 topology 1674 2236 -> 16 0 28 1608 topology 1727 2236 -> 15 0 29 1608 topology 1630 2237 -> 16 0 29 1608 topology 1631 2237 -> 15 0 28 1608 topology 1650 2238 -> 16 0 28 1608 topology 1727 2238 -> 15 0 29 1608 topology 1657 2239 -> 16 0 29 1608 topology 1658 2239 -> 15 0 29 1608 topology 1711 2240 -> 16 0 29 1608 topology 1712 2240 -> 15 0 28 1608 topology 1634 2241 -> 16 0 28 1608 topology 1727 2241 -> 15 0 29 1608 topology 1687 2242 -> 16 0 29 1608 topology 1688 2242 -> 15 0 28 1608 topology 1710 2243 -> 16 0 28 1608 topology 1727 2243 -> 15 0 28 1608 topology 1686 2244 -> 16 0 28 1608 topology 1727 2244 -> 15 0 28 1608 topology 1662 2245 -> 16 0 28 1608 topology 1727 2245 -> 15 0 29 1608 topology 1663 2246 -> 16 0 29 1608 topology 1664 2246 -> 15 0 29 1608 topology 1717 2247 -> 16 0 29 1608 topology 1718 2247 -> 15 0 29 1608 topology 1693 2248 -> 16 0 29 1608 topology 1694 2248 -> 15 0 28 1608 topology 1722 2249 -> 16 0 28 1608 topology 1727 2249 -> 15 0 29 1608 topology 1612 2250 -> 16 0 29 1608 topology 1614 2250 -> 15 0 29 1608 topology 1723 2251 -> 16 0 29 1608 topology 1724 2251 -> 15 0 28 1608 topology 1640 2252 -> 16 0 28 1608 topology 1727 2252 -> 15 0 28 1608 topology 1670 2253 -> 16 0 28 1608 topology 1727 2253 -> 15 0 28 1608 topology 1700 2254 -> 16 0 28 1608 topology 1727 2254 -> 15 0 28 1608 topology 1617 2255 -> 16 0 28 1608 topology 1727 2255 -> 15 0 28 1608 topology 1652 2256 -> 16 0 28 1608 topology 1727 2256 -> 15 0 29 1608 topology 1624 2257 -> 16 0 29 1608 topology 1626 2257 -> 15 0 28 1608 topology 1682 2258 -> 16 0 28 1608 topology 1727 2258 -> 15 0 28 1608 topology 1712 2259 -> 16 0 28 1608 topology 1727 2259 -> 15 0 29 1608 topology 1609 2260 -> 16 0 29 1608 topology 1610 2260 -> 15 0 28 1608 topology 1629 2261 -> 16 0 28 1608 topology 1727 2261 -> 15 0 28 1608 topology 1664 2262 -> 16 0 28 1608 topology 1727 2262 -> 15 0 28 1608 topology 1694 2263 -> 16 0 28 1608 topology 1727 2263 -> 15 0 28 1608 topology 1724 2264 -> 16 0 28 1608 topology 1727 2264 -> 15 0 29 1608 topology 1621 2265 -> 16 0 29 1608 topology 1622 2265 -> 15 0 28 1608 topology 1619 2266 -> 16 0 28 1608 topology 1727 2266 -> 15 0 28 1728 topology 1764 2267 +> 15 0 29 1608 topology 1726 2188 +> 16 0 29 1608 topology 1727 2188 +> 15 0 30 1608 topology 1636 2189 +> 16 0 30 1608 topology 1638 2189 +> 15 0 30 1608 topology 1636 2190 +> 16 0 30 1608 topology 1637 2190 +> 15 0 30 1608 topology 1639 2191 +> 16 0 30 1608 topology 1641 2191 +> 15 0 30 1608 topology 1639 2192 +> 16 0 30 1608 topology 1640 2192 +> 15 0 30 1608 topology 1642 2193 +> 16 0 30 1608 topology 1644 2193 +> 15 0 30 1608 topology 1642 2194 +> 16 0 30 1608 topology 1643 2194 +> 15 0 30 1608 topology 1645 2195 +> 16 0 30 1608 topology 1647 2195 +> 15 0 30 1608 topology 1645 2196 +> 16 0 30 1608 topology 1646 2196 +> 15 0 30 1608 topology 1648 2197 +> 16 0 30 1608 topology 1650 2197 +> 15 0 30 1608 topology 1648 2198 +> 16 0 30 1608 topology 1649 2198 +> 15 0 30 1608 topology 1651 2199 +> 16 0 30 1608 topology 1653 2199 +> 15 0 30 1608 topology 1651 2200 +> 16 0 30 1608 topology 1652 2200 +> 15 0 30 1608 topology 1654 2201 +> 16 0 30 1608 topology 1656 2201 +> 15 0 30 1608 topology 1654 2202 +> 16 0 30 1608 topology 1655 2202 +> 15 0 30 1608 topology 1657 2203 +> 16 0 30 1608 topology 1659 2203 +> 15 0 30 1608 topology 1657 2204 +> 16 0 30 1608 topology 1658 2204 +> 15 0 30 1608 topology 1660 2205 +> 16 0 30 1608 topology 1662 2205 +> 15 0 30 1608 topology 1660 2206 +> 16 0 30 1608 topology 1661 2206 +> 15 0 30 1608 topology 1663 2207 +> 16 0 30 1608 topology 1665 2207 +> 15 0 30 1608 topology 1663 2208 +> 16 0 30 1608 topology 1664 2208 +> 15 0 30 1608 topology 1609 2209 +> 16 0 30 1608 topology 1611 2209 +> 15 0 30 1608 topology 1609 2210 +> 16 0 30 1608 topology 1610 2210 +> 15 0 30 1608 topology 1666 2211 +> 16 0 30 1608 topology 1668 2211 +> 15 0 30 1608 topology 1666 2212 +> 16 0 30 1608 topology 1667 2212 +> 15 0 30 1608 topology 1669 2213 +> 16 0 30 1608 topology 1671 2213 +> 15 0 30 1608 topology 1669 2214 +> 16 0 30 1608 topology 1670 2214 +> 15 0 30 1608 topology 1672 2215 +> 16 0 30 1608 topology 1674 2215 +> 15 0 30 1608 topology 1672 2216 +> 16 0 30 1608 topology 1673 2216 +> 15 0 30 1608 topology 1675 2217 +> 16 0 30 1608 topology 1677 2217 +> 15 0 30 1608 topology 1675 2218 +> 16 0 30 1608 topology 1676 2218 +> 15 0 30 1608 topology 1678 2219 +> 16 0 30 1608 topology 1680 2219 +> 15 0 30 1608 topology 1678 2220 +> 16 0 30 1608 topology 1679 2220 +> 15 0 30 1608 topology 1681 2221 +> 16 0 30 1608 topology 1683 2221 +> 15 0 30 1608 topology 1681 2222 +> 16 0 30 1608 topology 1682 2222 +> 15 0 30 1608 topology 1684 2223 +> 16 0 30 1608 topology 1686 2223 +> 15 0 30 1608 topology 1684 2224 +> 16 0 30 1608 topology 1685 2224 +> 15 0 30 1608 topology 1687 2225 +> 16 0 30 1608 topology 1689 2225 +> 15 0 30 1608 topology 1687 2226 +> 16 0 30 1608 topology 1688 2226 +> 15 0 30 1608 topology 1690 2227 +> 16 0 30 1608 topology 1692 2227 +> 15 0 30 1608 topology 1690 2228 +> 16 0 30 1608 topology 1691 2228 +> 15 0 30 1608 topology 1693 2229 +> 16 0 30 1608 topology 1695 2229 +> 15 0 30 1608 topology 1693 2230 +> 16 0 30 1608 topology 1694 2230 +> 15 0 30 1608 topology 1612 2231 +> 16 0 30 1608 topology 1614 2231 +> 15 0 30 1608 topology 1612 2232 +> 16 0 30 1608 topology 1613 2232 +> 15 0 30 1608 topology 1696 2233 +> 16 0 30 1608 topology 1698 2233 +> 15 0 30 1608 topology 1696 2234 +> 16 0 30 1608 topology 1697 2234 +> 15 0 30 1608 topology 1699 2235 +> 16 0 30 1608 topology 1701 2235 +> 15 0 30 1608 topology 1699 2236 +> 16 0 30 1608 topology 1700 2236 +> 15 0 30 1608 topology 1702 2237 +> 16 0 30 1608 topology 1704 2237 +> 15 0 30 1608 topology 1702 2238 +> 16 0 30 1608 topology 1703 2238 +> 15 0 30 1608 topology 1705 2239 +> 16 0 30 1608 topology 1707 2239 +> 15 0 30 1608 topology 1705 2240 +> 16 0 30 1608 topology 1706 2240 +> 15 0 30 1608 topology 1708 2241 +> 16 0 30 1608 topology 1710 2241 +> 15 0 30 1608 topology 1708 2242 +> 16 0 30 1608 topology 1709 2242 +> 15 0 30 1608 topology 1711 2243 +> 16 0 30 1608 topology 1713 2243 +> 15 0 30 1608 topology 1711 2244 +> 16 0 30 1608 topology 1712 2244 +> 15 0 30 1608 topology 1714 2245 +> 16 0 30 1608 topology 1716 2245 +> 15 0 30 1608 topology 1714 2246 +> 16 0 30 1608 topology 1715 2246 +> 15 0 30 1608 topology 1717 2247 +> 16 0 30 1608 topology 1719 2247 +> 15 0 30 1608 topology 1717 2248 +> 16 0 30 1608 topology 1718 2248 +> 15 0 30 1608 topology 1720 2249 +> 16 0 30 1608 topology 1722 2249 +> 15 0 30 1608 topology 1720 2250 +> 16 0 30 1608 topology 1721 2250 +> 15 0 30 1608 topology 1723 2251 +> 16 0 30 1608 topology 1725 2251 +> 15 0 30 1608 topology 1723 2252 +> 16 0 30 1608 topology 1724 2252 +> 15 0 30 1608 topology 1615 2253 +> 16 0 30 1608 topology 1617 2253 +> 15 0 30 1608 topology 1615 2254 +> 16 0 30 1608 topology 1616 2254 +> 15 0 30 1608 topology 1618 2255 +> 16 0 30 1608 topology 1620 2255 +> 15 0 30 1608 topology 1618 2256 +> 16 0 30 1608 topology 1619 2256 +> 15 0 30 1608 topology 1621 2257 +> 16 0 30 1608 topology 1623 2257 +> 15 0 30 1608 topology 1621 2258 +> 16 0 30 1608 topology 1622 2258 +> 15 0 30 1608 topology 1624 2259 +> 16 0 30 1608 topology 1626 2259 +> 15 0 30 1608 topology 1624 2260 +> 16 0 30 1608 topology 1625 2260 +> 15 0 30 1608 topology 1627 2261 +> 16 0 30 1608 topology 1629 2261 +> 15 0 30 1608 topology 1627 2262 +> 16 0 30 1608 topology 1628 2262 +> 15 0 30 1608 topology 1630 2263 +> 16 0 30 1608 topology 1632 2263 +> 15 0 30 1608 topology 1630 2264 +> 16 0 30 1608 topology 1631 2264 +> 15 0 30 1608 topology 1633 2265 +> 16 0 30 1608 topology 1635 2265 +> 15 0 30 1608 topology 1633 2266 +> 16 0 30 1608 topology 1634 2266 +> 15 0 28 1728 topology 1731 2267 > 16 0 28 1728 topology 1835 2267 -> 15 0 28 1728 topology 1740 2268 +> 15 0 28 1728 topology 1730 2268 > 16 0 28 1728 topology 1835 2268 -> 15 0 28 1728 topology 1824 2269 +> 15 0 28 1728 topology 1734 2269 > 16 0 28 1728 topology 1835 2269 -> 15 0 28 1728 topology 1800 2270 +> 15 0 28 1728 topology 1733 2270 > 16 0 28 1728 topology 1835 2270 -> 15 0 28 1728 topology 1776 2271 +> 15 0 28 1728 topology 1737 2271 > 16 0 28 1728 topology 1835 2271 -> 15 0 28 1728 topology 1752 2272 +> 15 0 28 1728 topology 1736 2272 > 16 0 28 1728 topology 1835 2272 -> 15 0 28 1728 topology 1812 2273 +> 15 0 28 1728 topology 1740 2273 > 16 0 28 1728 topology 1835 2273 -> 15 0 28 1728 topology 1788 2274 +> 15 0 28 1728 topology 1739 2274 > 16 0 28 1728 topology 1835 2274 -> 15 0 29 1728 topology 1729 2275 -> 16 0 29 1728 topology 1731 2275 -> 15 0 28 1728 topology 1730 2276 +> 15 0 28 1728 topology 1743 2275 +> 16 0 28 1728 topology 1835 2275 +> 15 0 28 1728 topology 1742 2276 > 16 0 28 1728 topology 1835 2276 -> 15 0 29 1728 topology 1732 2277 -> 16 0 29 1728 topology 1734 2277 -> 15 0 28 1728 topology 1760 2278 +> 15 0 28 1728 topology 1746 2277 +> 16 0 28 1728 topology 1835 2277 +> 15 0 28 1728 topology 1745 2278 > 16 0 28 1728 topology 1835 2278 -> 15 0 29 1728 topology 1735 2279 -> 16 0 29 1728 topology 1737 2279 -> 15 0 28 1728 topology 1790 2280 +> 15 0 28 1728 topology 1749 2279 +> 16 0 28 1728 topology 1835 2279 +> 15 0 28 1728 topology 1748 2280 > 16 0 28 1728 topology 1835 2280 -> 15 0 29 1728 topology 1789 2281 -> 16 0 29 1728 topology 1791 2281 -> 15 0 28 1728 topology 1820 2282 +> 15 0 28 1728 topology 1752 2281 +> 16 0 28 1728 topology 1835 2281 +> 15 0 28 1728 topology 1751 2282 > 16 0 28 1728 topology 1835 2282 -> 15 0 29 1728 topology 1738 2283 -> 16 0 29 1728 topology 1740 2283 -> 15 0 28 1728 topology 1742 2284 +> 15 0 28 1728 topology 1755 2283 +> 16 0 28 1728 topology 1835 2283 +> 15 0 28 1728 topology 1754 2284 > 16 0 28 1728 topology 1835 2284 -> 15 0 29 1728 topology 1792 2285 -> 16 0 29 1728 topology 1794 2285 -> 15 0 28 1728 topology 1772 2286 +> 15 0 28 1728 topology 1758 2285 +> 16 0 28 1728 topology 1835 2285 +> 15 0 28 1728 topology 1757 2286 > 16 0 28 1728 topology 1835 2286 -> 15 0 29 1728 topology 1741 2287 -> 16 0 29 1728 topology 1743 2287 -> 15 0 29 1728 topology 1795 2288 -> 16 0 29 1728 topology 1797 2288 -> 15 0 28 1728 topology 1802 2289 +> 15 0 28 1728 topology 1761 2287 +> 16 0 28 1728 topology 1835 2287 +> 15 0 28 1728 topology 1760 2288 +> 16 0 28 1728 topology 1835 2288 +> 15 0 28 1728 topology 1764 2289 > 16 0 28 1728 topology 1835 2289 -> 15 0 28 1728 topology 1832 2290 +> 15 0 28 1728 topology 1763 2290 > 16 0 28 1728 topology 1835 2290 -> 15 0 29 1728 topology 1744 2291 -> 16 0 29 1728 topology 1746 2291 -> 15 0 28 1728 topology 1754 2292 +> 15 0 28 1728 topology 1767 2291 +> 16 0 28 1728 topology 1835 2291 +> 15 0 28 1728 topology 1766 2292 > 16 0 28 1728 topology 1835 2292 -> 15 0 29 1728 topology 1798 2293 -> 16 0 29 1728 topology 1800 2293 -> 15 0 28 1728 topology 1784 2294 +> 15 0 28 1728 topology 1770 2293 +> 16 0 28 1728 topology 1835 2293 +> 15 0 28 1728 topology 1769 2294 > 16 0 28 1728 topology 1835 2294 -> 15 0 29 1728 topology 1747 2295 -> 16 0 29 1728 topology 1749 2295 -> 15 0 29 1728 topology 1801 2296 -> 16 0 29 1728 topology 1803 2296 -> 15 0 28 1728 topology 1814 2297 +> 15 0 28 1728 topology 1773 2295 +> 16 0 28 1728 topology 1835 2295 +> 15 0 28 1728 topology 1772 2296 +> 16 0 28 1728 topology 1835 2296 +> 15 0 28 1728 topology 1776 2297 > 16 0 28 1728 topology 1835 2297 -> 15 0 29 1728 topology 1729 2298 -> 16 0 29 1728 topology 1730 2298 -> 15 0 29 1728 topology 1750 2299 -> 16 0 29 1728 topology 1752 2299 -> 15 0 29 1728 topology 1804 2300 -> 16 0 29 1728 topology 1806 2300 -> 15 0 29 1728 topology 1759 2301 -> 16 0 29 1728 topology 1760 2301 -> 15 0 29 1728 topology 1753 2302 -> 16 0 29 1728 topology 1755 2302 -> 15 0 29 1728 topology 1807 2303 -> 16 0 29 1728 topology 1809 2303 -> 15 0 29 1728 topology 1735 2304 -> 16 0 29 1728 topology 1736 2304 -> 15 0 29 1728 topology 1789 2305 -> 16 0 29 1728 topology 1790 2305 -> 15 0 29 1728 topology 1756 2306 -> 16 0 29 1728 topology 1758 2306 -> 15 0 29 1728 topology 1810 2307 -> 16 0 29 1728 topology 1812 2307 -> 15 0 29 1728 topology 1765 2308 -> 16 0 29 1728 topology 1766 2308 -> 15 0 29 1728 topology 1819 2309 -> 16 0 29 1728 topology 1820 2309 -> 15 0 29 1728 topology 1813 2310 -> 16 0 29 1728 topology 1815 2310 -> 15 0 28 1728 topology 1731 2311 +> 15 0 28 1728 topology 1775 2298 +> 16 0 28 1728 topology 1835 2298 +> 15 0 28 1728 topology 1779 2299 +> 16 0 28 1728 topology 1835 2299 +> 15 0 28 1728 topology 1778 2300 +> 16 0 28 1728 topology 1835 2300 +> 15 0 28 1728 topology 1782 2301 +> 16 0 28 1728 topology 1835 2301 +> 15 0 28 1728 topology 1781 2302 +> 16 0 28 1728 topology 1835 2302 +> 15 0 28 1728 topology 1785 2303 +> 16 0 28 1728 topology 1835 2303 +> 15 0 28 1728 topology 1784 2304 +> 16 0 28 1728 topology 1835 2304 +> 15 0 28 1728 topology 1788 2305 +> 16 0 28 1728 topology 1835 2305 +> 15 0 28 1728 topology 1787 2306 +> 16 0 28 1728 topology 1835 2306 +> 15 0 28 1728 topology 1791 2307 +> 16 0 28 1728 topology 1835 2307 +> 15 0 28 1728 topology 1790 2308 +> 16 0 28 1728 topology 1835 2308 +> 15 0 28 1728 topology 1794 2309 +> 16 0 28 1728 topology 1835 2309 +> 15 0 28 1728 topology 1793 2310 +> 16 0 28 1728 topology 1835 2310 +> 15 0 28 1728 topology 1797 2311 > 16 0 28 1728 topology 1835 2311 -> 15 0 29 1728 topology 1741 2312 -> 16 0 29 1728 topology 1742 2312 -> 15 0 29 1728 topology 1795 2313 -> 16 0 29 1728 topology 1796 2313 -> 15 0 29 1728 topology 1816 2314 -> 16 0 29 1728 topology 1818 2314 -> 15 0 29 1728 topology 1771 2315 -> 16 0 29 1728 topology 1772 2315 -> 15 0 28 1728 topology 1791 2316 +> 15 0 28 1728 topology 1796 2312 +> 16 0 28 1728 topology 1835 2312 +> 15 0 28 1728 topology 1800 2313 +> 16 0 28 1728 topology 1835 2313 +> 15 0 28 1728 topology 1799 2314 +> 16 0 28 1728 topology 1835 2314 +> 15 0 28 1728 topology 1803 2315 +> 16 0 28 1728 topology 1835 2315 +> 15 0 28 1728 topology 1802 2316 > 16 0 28 1728 topology 1835 2316 -> 15 0 29 1728 topology 1825 2317 -> 16 0 29 1728 topology 1826 2317 -> 15 0 28 1728 topology 1767 2318 +> 15 0 28 1728 topology 1806 2317 +> 16 0 28 1728 topology 1835 2317 +> 15 0 28 1728 topology 1805 2318 > 16 0 28 1728 topology 1835 2318 -> 15 0 28 1728 topology 1743 2319 +> 15 0 28 1728 topology 1809 2319 > 16 0 28 1728 topology 1835 2319 -> 15 0 29 1728 topology 1747 2320 -> 16 0 29 1728 topology 1748 2320 -> 15 0 29 1728 topology 1801 2321 -> 16 0 29 1728 topology 1802 2321 -> 15 0 28 1728 topology 1827 2322 +> 15 0 28 1728 topology 1808 2320 +> 16 0 28 1728 topology 1835 2320 +> 15 0 28 1728 topology 1812 2321 +> 16 0 28 1728 topology 1835 2321 +> 15 0 28 1728 topology 1811 2322 > 16 0 28 1728 topology 1835 2322 -> 15 0 29 1728 topology 1777 2323 -> 16 0 29 1728 topology 1778 2323 -> 15 0 28 1728 topology 1803 2324 +> 15 0 28 1728 topology 1815 2323 +> 16 0 28 1728 topology 1835 2323 +> 15 0 28 1728 topology 1814 2324 > 16 0 28 1728 topology 1835 2324 -> 15 0 29 1728 topology 1831 2325 -> 16 0 29 1728 topology 1832 2325 -> 15 0 28 1728 topology 1779 2326 +> 15 0 28 1728 topology 1818 2325 +> 16 0 28 1728 topology 1835 2325 +> 15 0 28 1728 topology 1817 2326 > 16 0 28 1728 topology 1835 2326 -> 15 0 29 1728 topology 1753 2327 -> 16 0 29 1728 topology 1754 2327 -> 15 0 28 1728 topology 1755 2328 +> 15 0 28 1728 topology 1821 2327 +> 16 0 28 1728 topology 1835 2327 +> 15 0 28 1728 topology 1820 2328 > 16 0 28 1728 topology 1835 2328 -> 15 0 29 1728 topology 1807 2329 -> 16 0 29 1728 topology 1808 2329 -> 15 0 29 1728 topology 1783 2330 -> 16 0 29 1728 topology 1784 2330 -> 15 0 28 1728 topology 1815 2331 +> 15 0 28 1728 topology 1824 2329 +> 16 0 28 1728 topology 1835 2329 +> 15 0 28 1728 topology 1823 2330 +> 16 0 28 1728 topology 1835 2330 +> 15 0 28 1728 topology 1827 2331 > 16 0 28 1728 topology 1835 2331 -> 15 0 29 1728 topology 1813 2332 -> 16 0 29 1728 topology 1814 2332 -> 15 0 28 1728 topology 1739 2333 +> 15 0 28 1728 topology 1826 2332 +> 16 0 28 1728 topology 1835 2332 +> 15 0 28 1728 topology 1830 2333 > 16 0 28 1728 topology 1835 2333 -> 15 0 28 1728 topology 1769 2334 +> 15 0 28 1728 topology 1829 2334 > 16 0 28 1728 topology 1835 2334 -> 15 0 28 1728 topology 1799 2335 +> 15 0 28 1728 topology 1833 2335 > 16 0 28 1728 topology 1835 2335 -> 15 0 28 1728 topology 1829 2336 +> 15 0 28 1728 topology 1832 2336 > 16 0 28 1728 topology 1835 2336 -> 15 0 28 1728 topology 1751 2337 -> 16 0 28 1728 topology 1835 2337 -> 15 0 28 1728 topology 1781 2338 -> 16 0 28 1728 topology 1835 2338 -> 15 0 30 1728 topology 1834 2339 -> 16 0 30 1728 topology 1835 2339 -> 15 0 28 1728 topology 1811 2340 -> 16 0 28 1728 topology 1835 2340 -> 15 0 28 1728 topology 1734 2341 -> 16 0 28 1728 topology 1835 2341 -> 15 0 28 1728 topology 1794 2342 -> 16 0 28 1728 topology 1835 2342 -> 15 0 28 1728 topology 1770 2343 -> 16 0 28 1728 topology 1835 2343 -> 15 0 28 1728 topology 1746 2344 -> 16 0 28 1728 topology 1835 2344 -> 15 0 28 1728 topology 1830 2345 -> 16 0 28 1728 topology 1835 2345 -> 15 0 28 1728 topology 1806 2346 -> 16 0 28 1728 topology 1835 2346 -> 15 0 28 1728 topology 1782 2347 -> 16 0 28 1728 topology 1835 2347 -> 15 0 28 1728 topology 1758 2348 -> 16 0 28 1728 topology 1835 2348 -> 15 0 28 1728 topology 1818 2349 -> 16 0 28 1728 topology 1835 2349 -> 15 0 29 1728 topology 1759 2350 -> 16 0 29 1728 topology 1761 2350 -> 15 0 28 1728 topology 1736 2351 -> 16 0 28 1728 topology 1835 2351 -> 15 0 29 1728 topology 1762 2352 -> 16 0 29 1728 topology 1764 2352 -> 15 0 28 1728 topology 1766 2353 -> 16 0 28 1728 topology 1835 2353 -> 15 0 29 1728 topology 1765 2354 -> 16 0 29 1728 topology 1767 2354 -> 15 0 28 1728 topology 1796 2355 -> 16 0 28 1728 topology 1835 2355 -> 15 0 29 1728 topology 1819 2356 -> 16 0 29 1728 topology 1821 2356 -> 15 0 28 1728 topology 1826 2357 -> 16 0 28 1728 topology 1835 2357 -> 15 0 28 1728 topology 1748 2358 -> 16 0 28 1728 topology 1835 2358 -> 15 0 29 1728 topology 1768 2359 -> 16 0 29 1728 topology 1770 2359 -> 15 0 29 1728 topology 1822 2360 -> 16 0 29 1728 topology 1824 2360 -> 15 0 28 1728 topology 1778 2361 -> 16 0 28 1728 topology 1835 2361 -> 15 0 29 1728 topology 1771 2362 -> 16 0 29 1728 topology 1773 2362 -> 15 0 28 1728 topology 1808 2363 -> 16 0 28 1728 topology 1835 2363 -> 15 0 29 1728 topology 1825 2364 -> 16 0 29 1728 topology 1827 2364 -> 15 0 29 1728 topology 1774 2365 -> 16 0 29 1728 topology 1776 2365 -> 15 0 29 1728 topology 1828 2366 -> 16 0 29 1728 topology 1830 2366 -> 15 0 29 1728 topology 1777 2367 -> 16 0 29 1728 topology 1779 2367 -> 15 0 29 1728 topology 1831 2368 -> 16 0 29 1728 topology 1833 2368 -> 15 0 29 1728 topology 1732 2369 -> 16 0 29 1728 topology 1733 2369 -> 15 0 29 1728 topology 1780 2370 -> 16 0 29 1728 topology 1782 2370 -> 15 0 29 1728 topology 1762 2371 -> 16 0 29 1728 topology 1763 2371 -> 15 0 29 1728 topology 1783 2372 -> 16 0 29 1728 topology 1785 2372 -> 15 0 29 1728 topology 1738 2373 -> 16 0 29 1728 topology 1739 2373 -> 15 0 29 1728 topology 1792 2374 -> 16 0 29 1728 topology 1793 2374 -> 15 0 29 1728 topology 1786 2375 -> 16 0 29 1728 topology 1788 2375 -> 15 0 29 1728 topology 1768 2376 -> 16 0 29 1728 topology 1769 2376 -> 15 0 29 1728 topology 1822 2377 -> 16 0 29 1728 topology 1823 2377 -> 15 0 28 1728 topology 1761 2378 -> 16 0 28 1728 topology 1835 2378 -> 15 0 28 1728 topology 1737 2379 -> 16 0 28 1728 topology 1835 2379 -> 15 0 29 1728 topology 1744 2380 -> 16 0 29 1728 topology 1745 2380 -> 15 0 29 1728 topology 1798 2381 -> 16 0 29 1728 topology 1799 2381 -> 15 0 28 1728 topology 1821 2382 -> 16 0 28 1728 topology 1835 2382 -> 15 0 29 1728 topology 1774 2383 -> 16 0 29 1728 topology 1775 2383 -> 15 0 28 1728 topology 1797 2384 -> 16 0 28 1728 topology 1835 2384 -> 15 0 29 1728 topology 1828 2385 -> 16 0 29 1728 topology 1829 2385 -> 15 0 28 1728 topology 1773 2386 -> 16 0 28 1728 topology 1835 2386 -> 15 0 28 1728 topology 1749 2387 -> 16 0 28 1728 topology 1835 2387 -> 15 0 29 1728 topology 1750 2388 -> 16 0 29 1728 topology 1751 2388 -> 15 0 29 1728 topology 1804 2389 -> 16 0 29 1728 topology 1805 2389 -> 15 0 28 1728 topology 1833 2390 -> 16 0 28 1728 topology 1835 2390 -> 15 0 29 1728 topology 1780 2391 -> 16 0 29 1728 topology 1781 2391 -> 15 0 28 1728 topology 1809 2392 -> 16 0 28 1728 topology 1835 2392 -> 15 0 28 1728 topology 1785 2393 -> 16 0 28 1728 topology 1835 2393 -> 15 0 29 1728 topology 1756 2394 -> 16 0 29 1728 topology 1757 2394 -> 15 0 29 1728 topology 1810 2395 -> 16 0 29 1728 topology 1811 2395 -> 15 0 29 1728 topology 1786 2396 -> 16 0 29 1728 topology 1787 2396 -> 15 0 28 1728 topology 1733 2397 -> 16 0 28 1728 topology 1835 2397 -> 15 0 29 1728 topology 1816 2398 -> 16 0 29 1728 topology 1817 2398 -> 15 0 28 1728 topology 1763 2399 -> 16 0 28 1728 topology 1835 2399 -> 15 0 28 1728 topology 1793 2400 -> 16 0 28 1728 topology 1835 2400 -> 15 0 28 1728 topology 1823 2401 -> 16 0 28 1728 topology 1835 2401 -> 15 0 28 1728 topology 1745 2402 -> 16 0 28 1728 topology 1835 2402 -> 15 0 28 1728 topology 1775 2403 -> 16 0 28 1728 topology 1835 2403 -> 15 0 28 1728 topology 1805 2404 -> 16 0 28 1728 topology 1835 2404 -> 15 0 28 1728 topology 1757 2405 -> 16 0 28 1728 topology 1835 2405 -> 15 0 28 1728 topology 1787 2406 -> 16 0 28 1728 topology 1835 2406 -> 15 0 28 1728 topology 1817 2407 -> 16 0 28 1728 topology 1835 2407 -> 15 0 28 1836 topology 1880 2408 +> 15 0 29 1728 topology 1834 2337 +> 16 0 29 1728 topology 1835 2337 +> 15 0 30 1728 topology 1729 2338 +> 16 0 30 1728 topology 1731 2338 +> 15 0 30 1728 topology 1729 2339 +> 16 0 30 1728 topology 1730 2339 +> 15 0 30 1728 topology 1732 2340 +> 16 0 30 1728 topology 1734 2340 +> 15 0 30 1728 topology 1732 2341 +> 16 0 30 1728 topology 1733 2341 +> 15 0 30 1728 topology 1735 2342 +> 16 0 30 1728 topology 1737 2342 +> 15 0 30 1728 topology 1735 2343 +> 16 0 30 1728 topology 1736 2343 +> 15 0 30 1728 topology 1738 2344 +> 16 0 30 1728 topology 1740 2344 +> 15 0 30 1728 topology 1738 2345 +> 16 0 30 1728 topology 1739 2345 +> 15 0 30 1728 topology 1741 2346 +> 16 0 30 1728 topology 1743 2346 +> 15 0 30 1728 topology 1741 2347 +> 16 0 30 1728 topology 1742 2347 +> 15 0 30 1728 topology 1744 2348 +> 16 0 30 1728 topology 1746 2348 +> 15 0 30 1728 topology 1744 2349 +> 16 0 30 1728 topology 1745 2349 +> 15 0 30 1728 topology 1747 2350 +> 16 0 30 1728 topology 1749 2350 +> 15 0 30 1728 topology 1747 2351 +> 16 0 30 1728 topology 1748 2351 +> 15 0 30 1728 topology 1750 2352 +> 16 0 30 1728 topology 1752 2352 +> 15 0 30 1728 topology 1750 2353 +> 16 0 30 1728 topology 1751 2353 +> 15 0 30 1728 topology 1753 2354 +> 16 0 30 1728 topology 1755 2354 +> 15 0 30 1728 topology 1753 2355 +> 16 0 30 1728 topology 1754 2355 +> 15 0 30 1728 topology 1756 2356 +> 16 0 30 1728 topology 1758 2356 +> 15 0 30 1728 topology 1756 2357 +> 16 0 30 1728 topology 1757 2357 +> 15 0 30 1728 topology 1759 2358 +> 16 0 30 1728 topology 1761 2358 +> 15 0 30 1728 topology 1759 2359 +> 16 0 30 1728 topology 1760 2359 +> 15 0 30 1728 topology 1762 2360 +> 16 0 30 1728 topology 1764 2360 +> 15 0 30 1728 topology 1762 2361 +> 16 0 30 1728 topology 1763 2361 +> 15 0 30 1728 topology 1765 2362 +> 16 0 30 1728 topology 1767 2362 +> 15 0 30 1728 topology 1765 2363 +> 16 0 30 1728 topology 1766 2363 +> 15 0 30 1728 topology 1768 2364 +> 16 0 30 1728 topology 1770 2364 +> 15 0 30 1728 topology 1768 2365 +> 16 0 30 1728 topology 1769 2365 +> 15 0 30 1728 topology 1771 2366 +> 16 0 30 1728 topology 1773 2366 +> 15 0 30 1728 topology 1771 2367 +> 16 0 30 1728 topology 1772 2367 +> 15 0 30 1728 topology 1774 2368 +> 16 0 30 1728 topology 1776 2368 +> 15 0 30 1728 topology 1774 2369 +> 16 0 30 1728 topology 1775 2369 +> 15 0 30 1728 topology 1777 2370 +> 16 0 30 1728 topology 1779 2370 +> 15 0 30 1728 topology 1777 2371 +> 16 0 30 1728 topology 1778 2371 +> 15 0 30 1728 topology 1780 2372 +> 16 0 30 1728 topology 1782 2372 +> 15 0 30 1728 topology 1780 2373 +> 16 0 30 1728 topology 1781 2373 +> 15 0 30 1728 topology 1783 2374 +> 16 0 30 1728 topology 1785 2374 +> 15 0 30 1728 topology 1783 2375 +> 16 0 30 1728 topology 1784 2375 +> 15 0 30 1728 topology 1786 2376 +> 16 0 30 1728 topology 1788 2376 +> 15 0 30 1728 topology 1786 2377 +> 16 0 30 1728 topology 1787 2377 +> 15 0 30 1728 topology 1789 2378 +> 16 0 30 1728 topology 1791 2378 +> 15 0 30 1728 topology 1789 2379 +> 16 0 30 1728 topology 1790 2379 +> 15 0 30 1728 topology 1792 2380 +> 16 0 30 1728 topology 1794 2380 +> 15 0 30 1728 topology 1792 2381 +> 16 0 30 1728 topology 1793 2381 +> 15 0 30 1728 topology 1795 2382 +> 16 0 30 1728 topology 1797 2382 +> 15 0 30 1728 topology 1795 2383 +> 16 0 30 1728 topology 1796 2383 +> 15 0 30 1728 topology 1798 2384 +> 16 0 30 1728 topology 1800 2384 +> 15 0 30 1728 topology 1798 2385 +> 16 0 30 1728 topology 1799 2385 +> 15 0 30 1728 topology 1801 2386 +> 16 0 30 1728 topology 1803 2386 +> 15 0 30 1728 topology 1801 2387 +> 16 0 30 1728 topology 1802 2387 +> 15 0 30 1728 topology 1804 2388 +> 16 0 30 1728 topology 1806 2388 +> 15 0 30 1728 topology 1804 2389 +> 16 0 30 1728 topology 1805 2389 +> 15 0 30 1728 topology 1807 2390 +> 16 0 30 1728 topology 1809 2390 +> 15 0 30 1728 topology 1807 2391 +> 16 0 30 1728 topology 1808 2391 +> 15 0 30 1728 topology 1810 2392 +> 16 0 30 1728 topology 1812 2392 +> 15 0 30 1728 topology 1810 2393 +> 16 0 30 1728 topology 1811 2393 +> 15 0 30 1728 topology 1813 2394 +> 16 0 30 1728 topology 1815 2394 +> 15 0 30 1728 topology 1813 2395 +> 16 0 30 1728 topology 1814 2395 +> 15 0 30 1728 topology 1816 2396 +> 16 0 30 1728 topology 1818 2396 +> 15 0 30 1728 topology 1816 2397 +> 16 0 30 1728 topology 1817 2397 +> 15 0 30 1728 topology 1819 2398 +> 16 0 30 1728 topology 1821 2398 +> 15 0 30 1728 topology 1819 2399 +> 16 0 30 1728 topology 1820 2399 +> 15 0 30 1728 topology 1822 2400 +> 16 0 30 1728 topology 1824 2400 +> 15 0 30 1728 topology 1822 2401 +> 16 0 30 1728 topology 1823 2401 +> 15 0 30 1728 topology 1825 2402 +> 16 0 30 1728 topology 1827 2402 +> 15 0 30 1728 topology 1825 2403 +> 16 0 30 1728 topology 1826 2403 +> 15 0 30 1728 topology 1828 2404 +> 16 0 30 1728 topology 1830 2404 +> 15 0 30 1728 topology 1828 2405 +> 16 0 30 1728 topology 1829 2405 +> 15 0 30 1728 topology 1831 2406 +> 16 0 30 1728 topology 1833 2406 +> 15 0 30 1728 topology 1831 2407 +> 16 0 30 1728 topology 1832 2407 +> 15 0 28 1836 topology 1914 2408 > 16 0 28 1836 topology 1928 2408 -> 15 0 28 1836 topology 1910 2409 +> 15 0 28 1836 topology 1913 2409 > 16 0 28 1836 topology 1928 2409 -> 15 0 28 1836 topology 1919 2410 +> 15 0 28 1836 topology 1917 2410 > 16 0 28 1836 topology 1928 2410 -> 15 0 29 1836 topology 1912 2411 -> 16 0 29 1836 topology 1914 2411 -> 15 0 28 1836 topology 1887 2412 +> 15 0 28 1836 topology 1916 2411 +> 16 0 28 1836 topology 1928 2411 +> 15 0 28 1836 topology 1920 2412 > 16 0 28 1836 topology 1928 2412 -> 15 0 28 1836 topology 1863 2413 +> 15 0 28 1836 topology 1919 2413 > 16 0 28 1836 topology 1928 2413 -> 15 0 28 1836 topology 1839 2414 +> 15 0 28 1836 topology 1923 2414 > 16 0 28 1836 topology 1928 2414 -> 15 0 28 1836 topology 1899 2415 +> 15 0 28 1836 topology 1922 2415 > 16 0 28 1836 topology 1928 2415 -> 15 0 28 1836 topology 1875 2416 +> 15 0 28 1836 topology 1926 2416 > 16 0 28 1836 topology 1928 2416 -> 15 0 28 1836 topology 1851 2417 +> 15 0 28 1836 topology 1925 2417 > 16 0 28 1836 topology 1928 2417 -> 15 0 29 1836 topology 1924 2418 -> 16 0 29 1836 topology 1926 2418 -> 15 0 28 1836 topology 1914 2419 +> 15 0 28 1836 topology 1839 2418 +> 16 0 28 1836 topology 1928 2418 +> 15 0 28 1836 topology 1838 2419 > 16 0 28 1836 topology 1928 2419 -> 15 0 28 1836 topology 1911 2420 +> 15 0 28 1836 topology 1842 2420 > 16 0 28 1836 topology 1928 2420 -> 15 0 28 1836 topology 1853 2421 +> 15 0 28 1836 topology 1841 2421 > 16 0 28 1836 topology 1928 2421 -> 15 0 28 1836 topology 1926 2422 +> 15 0 28 1836 topology 1845 2422 > 16 0 28 1836 topology 1928 2422 -> 15 0 28 1836 topology 1883 2423 +> 15 0 28 1836 topology 1844 2423 > 16 0 28 1836 topology 1928 2423 -> 15 0 29 1836 topology 1915 2424 -> 16 0 29 1836 topology 1916 2424 -> 15 0 29 1836 topology 1882 2425 -> 16 0 29 1836 topology 1884 2425 -> 15 0 28 1836 topology 1865 2426 +> 15 0 28 1836 topology 1848 2424 +> 16 0 28 1836 topology 1928 2424 +> 15 0 28 1836 topology 1847 2425 +> 16 0 28 1836 topology 1928 2425 +> 15 0 28 1836 topology 1851 2426 > 16 0 28 1836 topology 1928 2426 -> 15 0 29 1836 topology 1885 2427 -> 16 0 29 1836 topology 1887 2427 -> 15 0 28 1836 topology 1895 2428 +> 15 0 28 1836 topology 1850 2427 +> 16 0 28 1836 topology 1928 2427 +> 15 0 28 1836 topology 1854 2428 > 16 0 28 1836 topology 1928 2428 -> 15 0 28 1836 topology 1847 2429 +> 15 0 28 1836 topology 1853 2429 > 16 0 28 1836 topology 1928 2429 -> 15 0 29 1836 topology 1888 2430 -> 16 0 29 1836 topology 1890 2430 -> 15 0 28 1836 topology 1877 2431 +> 15 0 28 1836 topology 1857 2430 +> 16 0 28 1836 topology 1928 2430 +> 15 0 28 1836 topology 1856 2431 > 16 0 28 1836 topology 1928 2431 -> 15 0 29 1836 topology 1837 2432 -> 16 0 29 1836 topology 1839 2432 -> 15 0 29 1836 topology 1891 2433 -> 16 0 29 1836 topology 1893 2433 -> 15 0 28 1836 topology 1907 2434 +> 15 0 28 1836 topology 1860 2432 +> 16 0 28 1836 topology 1928 2432 +> 15 0 28 1836 topology 1859 2433 +> 16 0 28 1836 topology 1928 2433 +> 15 0 28 1836 topology 1863 2434 > 16 0 28 1836 topology 1928 2434 -> 15 0 28 1836 topology 1916 2435 +> 15 0 28 1836 topology 1862 2435 > 16 0 28 1836 topology 1928 2435 -> 15 0 29 1836 topology 1840 2436 -> 16 0 29 1836 topology 1842 2436 -> 15 0 29 1836 topology 1894 2437 -> 16 0 29 1836 topology 1896 2437 -> 15 0 29 1836 topology 1843 2438 -> 16 0 29 1836 topology 1845 2438 -> 15 0 29 1836 topology 1897 2439 -> 16 0 29 1836 topology 1899 2439 -> 15 0 29 1836 topology 1852 2440 -> 16 0 29 1836 topology 1853 2440 -> 15 0 29 1836 topology 1846 2441 -> 16 0 29 1836 topology 1848 2441 -> 15 0 29 1836 topology 1900 2442 -> 16 0 29 1836 topology 1902 2442 -> 15 0 29 1836 topology 1882 2443 -> 16 0 29 1836 topology 1883 2443 -> 15 0 29 1836 topology 1849 2444 -> 16 0 29 1836 topology 1851 2444 -> 15 0 29 1836 topology 1903 2445 -> 16 0 29 1836 topology 1905 2445 -> 15 0 29 1836 topology 1858 2446 -> 16 0 29 1836 topology 1859 2446 -> 15 0 28 1836 topology 1854 2447 +> 15 0 28 1836 topology 1866 2436 +> 16 0 28 1836 topology 1928 2436 +> 15 0 28 1836 topology 1865 2437 +> 16 0 28 1836 topology 1928 2437 +> 15 0 28 1836 topology 1869 2438 +> 16 0 28 1836 topology 1928 2438 +> 15 0 28 1836 topology 1868 2439 +> 16 0 28 1836 topology 1928 2439 +> 15 0 28 1836 topology 1872 2440 +> 16 0 28 1836 topology 1928 2440 +> 15 0 28 1836 topology 1871 2441 +> 16 0 28 1836 topology 1928 2441 +> 15 0 28 1836 topology 1875 2442 +> 16 0 28 1836 topology 1928 2442 +> 15 0 28 1836 topology 1874 2443 +> 16 0 28 1836 topology 1928 2443 +> 15 0 28 1836 topology 1878 2444 +> 16 0 28 1836 topology 1928 2444 +> 15 0 28 1836 topology 1877 2445 +> 16 0 28 1836 topology 1928 2445 +> 15 0 28 1836 topology 1881 2446 +> 16 0 28 1836 topology 1928 2446 +> 15 0 28 1836 topology 1880 2447 > 16 0 28 1836 topology 1928 2447 -> 15 0 29 1836 topology 1906 2448 -> 16 0 29 1836 topology 1908 2448 -> 15 0 29 1836 topology 1888 2449 -> 16 0 29 1836 topology 1889 2449 -> 15 0 29 1836 topology 1909 2450 -> 16 0 29 1836 topology 1911 2450 -> 15 0 29 1836 topology 1915 2451 -> 16 0 29 1836 topology 1917 2451 -> 15 0 29 1836 topology 1864 2452 -> 16 0 29 1836 topology 1865 2452 -> 15 0 28 1836 topology 1890 2453 +> 15 0 28 1836 topology 1884 2448 +> 16 0 28 1836 topology 1928 2448 +> 15 0 28 1836 topology 1883 2449 +> 16 0 28 1836 topology 1928 2449 +> 15 0 28 1836 topology 1887 2450 +> 16 0 28 1836 topology 1928 2450 +> 15 0 28 1836 topology 1886 2451 +> 16 0 28 1836 topology 1928 2451 +> 15 0 28 1836 topology 1890 2452 +> 16 0 28 1836 topology 1928 2452 +> 15 0 28 1836 topology 1889 2453 > 16 0 28 1836 topology 1928 2453 -> 15 0 28 1836 topology 1866 2454 +> 15 0 28 1836 topology 1893 2454 > 16 0 28 1836 topology 1928 2454 -> 15 0 29 1836 topology 1840 2455 -> 16 0 29 1836 topology 1841 2455 -> 15 0 28 1836 topology 1842 2456 +> 15 0 28 1836 topology 1892 2455 +> 16 0 28 1836 topology 1928 2455 +> 15 0 28 1836 topology 1896 2456 > 16 0 28 1836 topology 1928 2456 -> 15 0 29 1836 topology 1894 2457 -> 16 0 29 1836 topology 1895 2457 -> 15 0 29 1836 topology 1870 2458 -> 16 0 29 1836 topology 1871 2458 -> 15 0 28 1836 topology 1902 2459 +> 15 0 28 1836 topology 1895 2457 +> 16 0 28 1836 topology 1928 2457 +> 15 0 28 1836 topology 1899 2458 +> 16 0 28 1836 topology 1928 2458 +> 15 0 28 1836 topology 1898 2459 > 16 0 28 1836 topology 1928 2459 -> 15 0 28 1836 topology 1878 2460 +> 15 0 28 1836 topology 1902 2460 > 16 0 28 1836 topology 1928 2460 -> 15 0 29 1836 topology 1846 2461 -> 16 0 29 1836 topology 1847 2461 -> 15 0 29 1836 topology 1900 2462 -> 16 0 29 1836 topology 1901 2462 -> 15 0 28 1836 topology 1917 2463 +> 15 0 28 1836 topology 1901 2461 +> 16 0 28 1836 topology 1928 2461 +> 15 0 28 1836 topology 1905 2462 +> 16 0 28 1836 topology 1928 2462 +> 15 0 28 1836 topology 1904 2463 > 16 0 28 1836 topology 1928 2463 -> 15 0 29 1836 topology 1876 2464 -> 16 0 29 1836 topology 1877 2464 -> 15 0 29 1836 topology 1906 2465 -> 16 0 29 1836 topology 1907 2465 -> 15 0 29 1836 topology 1912 2466 -> 16 0 29 1836 topology 1913 2466 -> 15 0 28 1836 topology 1862 2467 +> 15 0 28 1836 topology 1908 2464 +> 16 0 28 1836 topology 1928 2464 +> 15 0 28 1836 topology 1907 2465 +> 16 0 28 1836 topology 1928 2465 +> 15 0 28 1836 topology 1911 2466 +> 16 0 28 1836 topology 1928 2466 +> 15 0 28 1836 topology 1910 2467 > 16 0 28 1836 topology 1928 2467 -> 15 0 28 1836 topology 1892 2468 -> 16 0 28 1836 topology 1928 2468 -> 15 0 28 1836 topology 1844 2469 -> 16 0 28 1836 topology 1928 2469 -> 15 0 28 1836 topology 1874 2470 -> 16 0 28 1836 topology 1928 2470 -> 15 0 28 1836 topology 1904 2471 -> 16 0 28 1836 topology 1928 2471 -> 15 0 29 1836 topology 1924 2472 -> 16 0 29 1836 topology 1925 2472 -> 15 0 28 1836 topology 1913 2473 -> 16 0 28 1836 topology 1928 2473 -> 15 0 28 1836 topology 1925 2474 -> 16 0 28 1836 topology 1928 2474 -> 15 0 28 1836 topology 1857 2475 -> 16 0 28 1836 topology 1928 2475 -> 15 0 28 1836 topology 1893 2476 -> 16 0 28 1836 topology 1928 2476 -> 15 0 29 1836 topology 1918 2477 -> 16 0 29 1836 topology 1920 2477 -> 15 0 28 1836 topology 1869 2478 -> 16 0 28 1836 topology 1928 2478 -> 15 0 28 1836 topology 1845 2479 -> 16 0 28 1836 topology 1928 2479 -> 15 0 28 1836 topology 1905 2480 -> 16 0 28 1836 topology 1928 2480 -> 15 0 28 1836 topology 1881 2481 -> 16 0 28 1836 topology 1928 2481 -> 15 0 28 1836 topology 1920 2482 -> 16 0 28 1836 topology 1928 2482 -> 15 0 29 1836 topology 1852 2483 -> 16 0 29 1836 topology 1854 2483 -> 15 0 28 1836 topology 1859 2484 -> 16 0 28 1836 topology 1928 2484 -> 15 0 29 1836 topology 1855 2485 -> 16 0 29 1836 topology 1857 2485 -> 15 0 28 1836 topology 1889 2486 -> 16 0 28 1836 topology 1928 2486 -> 15 0 30 1836 topology 1927 2487 -> 16 0 30 1836 topology 1928 2487 -> 15 0 28 1836 topology 1841 2488 -> 16 0 28 1836 topology 1928 2488 -> 15 0 29 1836 topology 1858 2489 -> 16 0 29 1836 topology 1860 2489 -> 15 0 28 1836 topology 1871 2490 -> 16 0 28 1836 topology 1928 2490 -> 15 0 29 1836 topology 1921 2491 -> 16 0 29 1836 topology 1922 2491 -> 15 0 29 1836 topology 1861 2492 -> 16 0 29 1836 topology 1863 2492 -> 15 0 28 1836 topology 1901 2493 -> 16 0 28 1836 topology 1928 2493 -> 15 0 29 1836 topology 1864 2494 -> 16 0 29 1836 topology 1866 2494 -> 15 0 29 1836 topology 1867 2495 -> 16 0 29 1836 topology 1869 2495 -> 15 0 28 1836 topology 1922 2496 -> 16 0 28 1836 topology 1928 2496 -> 15 0 29 1836 topology 1870 2497 -> 16 0 29 1836 topology 1872 2497 -> 15 0 29 1836 topology 1873 2498 -> 16 0 29 1836 topology 1875 2498 -> 15 0 29 1836 topology 1855 2499 -> 16 0 29 1836 topology 1856 2499 -> 15 0 29 1836 topology 1876 2500 -> 16 0 29 1836 topology 1878 2500 -> 15 0 29 1836 topology 1885 2501 -> 16 0 29 1836 topology 1886 2501 -> 15 0 29 1836 topology 1879 2502 -> 16 0 29 1836 topology 1881 2502 -> 15 0 29 1836 topology 1861 2503 -> 16 0 29 1836 topology 1862 2503 -> 15 0 28 1836 topology 1884 2504 -> 16 0 28 1836 topology 1928 2504 -> 15 0 28 1836 topology 1860 2505 -> 16 0 28 1836 topology 1928 2505 -> 15 0 29 1836 topology 1837 2506 -> 16 0 29 1836 topology 1838 2506 -> 15 0 29 1836 topology 1891 2507 -> 16 0 29 1836 topology 1892 2507 -> 15 0 29 1836 topology 1867 2508 -> 16 0 29 1836 topology 1868 2508 -> 15 0 28 1836 topology 1896 2509 -> 16 0 28 1836 topology 1928 2509 -> 15 0 28 1836 topology 1872 2510 -> 16 0 28 1836 topology 1928 2510 -> 15 0 29 1836 topology 1921 2511 -> 16 0 29 1836 topology 1923 2511 -> 15 0 29 1836 topology 1843 2512 -> 16 0 29 1836 topology 1844 2512 -> 15 0 28 1836 topology 1848 2513 -> 16 0 28 1836 topology 1928 2513 -> 15 0 29 1836 topology 1897 2514 -> 16 0 29 1836 topology 1898 2514 -> 15 0 29 1836 topology 1873 2515 -> 16 0 29 1836 topology 1874 2515 -> 15 0 28 1836 topology 1908 2516 -> 16 0 28 1836 topology 1928 2516 -> 15 0 29 1836 topology 1849 2517 -> 16 0 29 1836 topology 1850 2517 -> 15 0 29 1836 topology 1903 2518 -> 16 0 29 1836 topology 1904 2518 -> 15 0 28 1836 topology 1923 2519 -> 16 0 28 1836 topology 1928 2519 -> 15 0 29 1836 topology 1879 2520 -> 16 0 29 1836 topology 1880 2520 -> 15 0 28 1836 topology 1856 2521 -> 16 0 28 1836 topology 1928 2521 -> 15 0 28 1836 topology 1886 2522 -> 16 0 28 1836 topology 1928 2522 -> 15 0 29 1836 topology 1909 2523 -> 16 0 29 1836 topology 1910 2523 -> 15 0 28 1836 topology 1838 2524 -> 16 0 28 1836 topology 1928 2524 -> 15 0 29 1836 topology 1918 2525 -> 16 0 29 1836 topology 1919 2525 -> 15 0 28 1836 topology 1868 2526 -> 16 0 28 1836 topology 1928 2526 -> 15 0 28 1836 topology 1898 2527 -> 16 0 28 1836 topology 1928 2527 -> 15 0 28 1836 topology 1850 2528 -> 16 0 28 1836 topology 1928 2528 -> 15 0 29 1929 topology 1981 2529 -> 16 0 29 1929 topology 1982 2529 -> 15 0 28 1929 topology 2004 2530 +> 15 0 29 1836 topology 1927 2468 +> 16 0 29 1836 topology 1928 2468 +> 15 0 30 1836 topology 1912 2469 +> 16 0 30 1836 topology 1914 2469 +> 15 0 30 1836 topology 1912 2470 +> 16 0 30 1836 topology 1913 2470 +> 15 0 30 1836 topology 1915 2471 +> 16 0 30 1836 topology 1917 2471 +> 15 0 30 1836 topology 1915 2472 +> 16 0 30 1836 topology 1916 2472 +> 15 0 30 1836 topology 1918 2473 +> 16 0 30 1836 topology 1920 2473 +> 15 0 30 1836 topology 1918 2474 +> 16 0 30 1836 topology 1919 2474 +> 15 0 30 1836 topology 1921 2475 +> 16 0 30 1836 topology 1923 2475 +> 15 0 30 1836 topology 1921 2476 +> 16 0 30 1836 topology 1922 2476 +> 15 0 30 1836 topology 1924 2477 +> 16 0 30 1836 topology 1926 2477 +> 15 0 30 1836 topology 1924 2478 +> 16 0 30 1836 topology 1925 2478 +> 15 0 30 1836 topology 1837 2479 +> 16 0 30 1836 topology 1839 2479 +> 15 0 30 1836 topology 1837 2480 +> 16 0 30 1836 topology 1838 2480 +> 15 0 30 1836 topology 1840 2481 +> 16 0 30 1836 topology 1842 2481 +> 15 0 30 1836 topology 1840 2482 +> 16 0 30 1836 topology 1841 2482 +> 15 0 30 1836 topology 1843 2483 +> 16 0 30 1836 topology 1845 2483 +> 15 0 30 1836 topology 1843 2484 +> 16 0 30 1836 topology 1844 2484 +> 15 0 30 1836 topology 1846 2485 +> 16 0 30 1836 topology 1848 2485 +> 15 0 30 1836 topology 1846 2486 +> 16 0 30 1836 topology 1847 2486 +> 15 0 30 1836 topology 1849 2487 +> 16 0 30 1836 topology 1851 2487 +> 15 0 30 1836 topology 1849 2488 +> 16 0 30 1836 topology 1850 2488 +> 15 0 30 1836 topology 1852 2489 +> 16 0 30 1836 topology 1854 2489 +> 15 0 30 1836 topology 1852 2490 +> 16 0 30 1836 topology 1853 2490 +> 15 0 30 1836 topology 1855 2491 +> 16 0 30 1836 topology 1857 2491 +> 15 0 30 1836 topology 1855 2492 +> 16 0 30 1836 topology 1856 2492 +> 15 0 30 1836 topology 1858 2493 +> 16 0 30 1836 topology 1860 2493 +> 15 0 30 1836 topology 1858 2494 +> 16 0 30 1836 topology 1859 2494 +> 15 0 30 1836 topology 1861 2495 +> 16 0 30 1836 topology 1863 2495 +> 15 0 30 1836 topology 1861 2496 +> 16 0 30 1836 topology 1862 2496 +> 15 0 30 1836 topology 1864 2497 +> 16 0 30 1836 topology 1866 2497 +> 15 0 30 1836 topology 1864 2498 +> 16 0 30 1836 topology 1865 2498 +> 15 0 30 1836 topology 1867 2499 +> 16 0 30 1836 topology 1869 2499 +> 15 0 30 1836 topology 1867 2500 +> 16 0 30 1836 topology 1868 2500 +> 15 0 30 1836 topology 1870 2501 +> 16 0 30 1836 topology 1872 2501 +> 15 0 30 1836 topology 1870 2502 +> 16 0 30 1836 topology 1871 2502 +> 15 0 30 1836 topology 1873 2503 +> 16 0 30 1836 topology 1875 2503 +> 15 0 30 1836 topology 1873 2504 +> 16 0 30 1836 topology 1874 2504 +> 15 0 30 1836 topology 1876 2505 +> 16 0 30 1836 topology 1878 2505 +> 15 0 30 1836 topology 1876 2506 +> 16 0 30 1836 topology 1877 2506 +> 15 0 30 1836 topology 1879 2507 +> 16 0 30 1836 topology 1881 2507 +> 15 0 30 1836 topology 1879 2508 +> 16 0 30 1836 topology 1880 2508 +> 15 0 30 1836 topology 1882 2509 +> 16 0 30 1836 topology 1884 2509 +> 15 0 30 1836 topology 1882 2510 +> 16 0 30 1836 topology 1883 2510 +> 15 0 30 1836 topology 1885 2511 +> 16 0 30 1836 topology 1887 2511 +> 15 0 30 1836 topology 1885 2512 +> 16 0 30 1836 topology 1886 2512 +> 15 0 30 1836 topology 1888 2513 +> 16 0 30 1836 topology 1890 2513 +> 15 0 30 1836 topology 1888 2514 +> 16 0 30 1836 topology 1889 2514 +> 15 0 30 1836 topology 1891 2515 +> 16 0 30 1836 topology 1893 2515 +> 15 0 30 1836 topology 1891 2516 +> 16 0 30 1836 topology 1892 2516 +> 15 0 30 1836 topology 1894 2517 +> 16 0 30 1836 topology 1896 2517 +> 15 0 30 1836 topology 1894 2518 +> 16 0 30 1836 topology 1895 2518 +> 15 0 30 1836 topology 1897 2519 +> 16 0 30 1836 topology 1899 2519 +> 15 0 30 1836 topology 1897 2520 +> 16 0 30 1836 topology 1898 2520 +> 15 0 30 1836 topology 1900 2521 +> 16 0 30 1836 topology 1902 2521 +> 15 0 30 1836 topology 1900 2522 +> 16 0 30 1836 topology 1901 2522 +> 15 0 30 1836 topology 1903 2523 +> 16 0 30 1836 topology 1905 2523 +> 15 0 30 1836 topology 1903 2524 +> 16 0 30 1836 topology 1904 2524 +> 15 0 30 1836 topology 1906 2525 +> 16 0 30 1836 topology 1908 2525 +> 15 0 30 1836 topology 1906 2526 +> 16 0 30 1836 topology 1907 2526 +> 15 0 30 1836 topology 1909 2527 +> 16 0 30 1836 topology 1911 2527 +> 15 0 30 1836 topology 1909 2528 +> 16 0 30 1836 topology 1910 2528 +> 15 0 28 1929 topology 1932 2529 +> 16 0 28 1929 topology 2051 2529 +> 15 0 28 1929 topology 1931 2530 > 16 0 28 1929 topology 2051 2530 -> 15 0 29 1929 topology 2035 2531 -> 16 0 29 1929 topology 2036 2531 -> 15 0 29 1929 topology 2002 2532 -> 16 0 29 1929 topology 2004 2532 -> 15 0 28 1929 topology 1946 2533 +> 15 0 28 1929 topology 1935 2531 +> 16 0 28 1929 topology 2051 2531 +> 15 0 28 1929 topology 1934 2532 +> 16 0 28 1929 topology 2051 2532 +> 15 0 28 1929 topology 1938 2533 > 16 0 28 1929 topology 2051 2533 -> 15 0 29 1929 topology 1960 2534 -> 16 0 29 1929 topology 1961 2534 -> 15 0 28 1929 topology 1976 2535 +> 15 0 28 1929 topology 1937 2534 +> 16 0 28 1929 topology 2051 2534 +> 15 0 28 1929 topology 1941 2535 > 16 0 28 1929 topology 2051 2535 -> 15 0 29 1929 topology 2014 2536 -> 16 0 29 1929 topology 2015 2536 -> 15 0 28 1929 topology 2006 2537 +> 15 0 28 1929 topology 1940 2536 +> 16 0 28 1929 topology 2051 2536 +> 15 0 28 1929 topology 1944 2537 > 16 0 28 1929 topology 2051 2537 -> 15 0 28 1929 topology 2036 2538 +> 15 0 28 1929 topology 1943 2538 > 16 0 28 1929 topology 2051 2538 -> 15 0 28 1929 topology 1958 2539 +> 15 0 28 1929 topology 1947 2539 > 16 0 28 1929 topology 2051 2539 -> 15 0 29 1929 topology 1939 2540 -> 16 0 29 1929 topology 1940 2540 -> 15 0 28 1929 topology 1988 2541 +> 15 0 28 1929 topology 1946 2540 +> 16 0 28 1929 topology 2051 2540 +> 15 0 28 1929 topology 1950 2541 > 16 0 28 1929 topology 2051 2541 -> 15 0 29 1929 topology 1993 2542 -> 16 0 29 1929 topology 1994 2542 -> 15 0 29 1929 topology 2047 2543 -> 16 0 29 1929 topology 2048 2543 -> 15 0 28 1929 topology 2018 2544 +> 15 0 28 1929 topology 1949 2542 +> 16 0 28 1929 topology 2051 2542 +> 15 0 28 1929 topology 1953 2543 +> 16 0 28 1929 topology 2051 2543 +> 15 0 28 1929 topology 1952 2544 > 16 0 28 1929 topology 2051 2544 -> 15 0 28 1929 topology 1940 2545 +> 15 0 28 1929 topology 1956 2545 > 16 0 28 1929 topology 2051 2545 -> 15 0 28 1929 topology 2048 2546 +> 15 0 28 1929 topology 1955 2546 > 16 0 28 1929 topology 2051 2546 -> 15 0 28 1929 topology 1970 2547 +> 15 0 28 1929 topology 1959 2547 > 16 0 28 1929 topology 2051 2547 -> 15 0 29 1929 topology 1972 2548 -> 16 0 29 1929 topology 1973 2548 -> 15 0 28 1929 topology 2000 2549 +> 15 0 28 1929 topology 1958 2548 +> 16 0 28 1929 topology 2051 2548 +> 15 0 28 1929 topology 1962 2549 > 16 0 28 1929 topology 2051 2549 -> 15 0 29 1929 topology 2026 2550 -> 16 0 29 1929 topology 2027 2550 -> 15 0 28 1929 topology 2030 2551 +> 15 0 28 1929 topology 1961 2550 +> 16 0 28 1929 topology 2051 2550 +> 15 0 28 1929 topology 1965 2551 > 16 0 28 1929 topology 2051 2551 -> 15 0 29 1929 topology 1948 2552 -> 16 0 29 1929 topology 1950 2552 -> 15 0 29 1929 topology 1981 2553 -> 16 0 29 1929 topology 1983 2553 -> 15 0 29 1929 topology 2035 2554 -> 16 0 29 1929 topology 2037 2554 -> 15 0 28 1929 topology 1947 2555 +> 15 0 28 1929 topology 1964 2552 +> 16 0 28 1929 topology 2051 2552 +> 15 0 28 1929 topology 1968 2553 +> 16 0 28 1929 topology 2051 2553 +> 15 0 28 1929 topology 1967 2554 +> 16 0 28 1929 topology 2051 2554 +> 15 0 28 1929 topology 1971 2555 > 16 0 28 1929 topology 2051 2555 -> 15 0 29 1929 topology 1960 2556 -> 16 0 29 1929 topology 1962 2556 -> 15 0 29 1929 topology 2014 2557 -> 16 0 29 1929 topology 2016 2557 -> 15 0 28 1929 topology 2007 2558 +> 15 0 28 1929 topology 1970 2556 +> 16 0 28 1929 topology 2051 2556 +> 15 0 28 1929 topology 1974 2557 +> 16 0 28 1929 topology 2051 2557 +> 15 0 28 1929 topology 1973 2558 > 16 0 28 1929 topology 2051 2558 -> 15 0 28 1929 topology 1983 2559 +> 15 0 28 1929 topology 1977 2559 > 16 0 28 1929 topology 2051 2559 -> 15 0 29 1929 topology 1945 2560 -> 16 0 29 1929 topology 1946 2560 -> 15 0 28 1929 topology 1959 2561 +> 15 0 28 1929 topology 1976 2560 +> 16 0 28 1929 topology 2051 2560 +> 15 0 28 1929 topology 1980 2561 > 16 0 28 1929 topology 2051 2561 -> 15 0 28 1929 topology 1935 2562 +> 15 0 28 1929 topology 1979 2562 > 16 0 28 1929 topology 2051 2562 -> 15 0 29 1929 topology 1939 2563 -> 16 0 29 1929 topology 1941 2563 -> 15 0 29 1929 topology 1993 2564 -> 16 0 29 1929 topology 1995 2564 -> 15 0 28 1929 topology 2043 2565 +> 15 0 28 1929 topology 1983 2563 +> 16 0 28 1929 topology 2051 2563 +> 15 0 28 1929 topology 1982 2564 +> 16 0 28 1929 topology 2051 2564 +> 15 0 28 1929 topology 1986 2565 > 16 0 28 1929 topology 2051 2565 -> 15 0 29 1929 topology 2047 2566 -> 16 0 29 1929 topology 2049 2566 -> 15 0 28 1929 topology 2019 2567 +> 15 0 28 1929 topology 1985 2566 +> 16 0 28 1929 topology 2051 2566 +> 15 0 28 1929 topology 1989 2567 > 16 0 28 1929 topology 2051 2567 -> 15 0 28 1929 topology 1995 2568 +> 15 0 28 1929 topology 1988 2568 > 16 0 28 1929 topology 2051 2568 -> 15 0 28 1929 topology 1971 2569 +> 15 0 28 1929 topology 1992 2569 > 16 0 28 1929 topology 2051 2569 -> 15 0 29 1929 topology 1978 2570 -> 16 0 29 1929 topology 1979 2570 -> 15 0 29 1929 topology 1972 2571 -> 16 0 29 1929 topology 1974 2571 -> 15 0 29 1929 topology 2026 2572 -> 16 0 29 1929 topology 2028 2572 -> 15 0 28 1929 topology 2031 2573 +> 15 0 28 1929 topology 1991 2570 +> 16 0 28 1929 topology 2051 2570 +> 15 0 28 1929 topology 1995 2571 +> 16 0 28 1929 topology 2051 2571 +> 15 0 28 1929 topology 1994 2572 +> 16 0 28 1929 topology 2051 2572 +> 15 0 28 1929 topology 1998 2573 > 16 0 28 1929 topology 2051 2573 -> 15 0 29 1929 topology 1957 2574 -> 16 0 29 1929 topology 1958 2574 -> 15 0 29 1929 topology 2011 2575 -> 16 0 29 1929 topology 2012 2575 -> 15 0 29 1929 topology 1936 2576 -> 16 0 29 1929 topology 1937 2576 -> 15 0 28 1929 topology 1955 2577 +> 15 0 28 1929 topology 1997 2574 +> 16 0 28 1929 topology 2051 2574 +> 15 0 28 1929 topology 2001 2575 +> 16 0 28 1929 topology 2051 2575 +> 15 0 28 1929 topology 2000 2576 +> 16 0 28 1929 topology 2051 2576 +> 15 0 28 1929 topology 2004 2577 > 16 0 28 1929 topology 2051 2577 -> 15 0 29 1929 topology 1990 2578 -> 16 0 29 1929 topology 1991 2578 -> 15 0 29 1929 topology 2044 2579 -> 16 0 29 1929 topology 2045 2579 -> 15 0 28 1929 topology 1985 2580 +> 15 0 28 1929 topology 2003 2578 +> 16 0 28 1929 topology 2051 2578 +> 15 0 28 1929 topology 2007 2579 +> 16 0 28 1929 topology 2051 2579 +> 15 0 28 1929 topology 2006 2580 > 16 0 28 1929 topology 2051 2580 -> 15 0 28 1929 topology 2015 2581 +> 15 0 28 1929 topology 2010 2581 > 16 0 28 1929 topology 2051 2581 -> 15 0 28 1929 topology 1937 2582 +> 15 0 28 1929 topology 2009 2582 > 16 0 28 1929 topology 2051 2582 -> 15 0 28 1929 topology 2045 2583 +> 15 0 28 1929 topology 2013 2583 > 16 0 28 1929 topology 2051 2583 -> 15 0 28 1929 topology 1967 2584 +> 15 0 28 1929 topology 2012 2584 > 16 0 28 1929 topology 2051 2584 -> 15 0 29 1929 topology 1969 2585 -> 16 0 29 1929 topology 1970 2585 -> 15 0 29 1929 topology 2023 2586 -> 16 0 29 1929 topology 2024 2586 -> 15 0 28 1929 topology 1997 2587 +> 15 0 28 1929 topology 2016 2585 +> 16 0 28 1929 topology 2051 2585 +> 15 0 28 1929 topology 2015 2586 +> 16 0 28 1929 topology 2051 2586 +> 15 0 28 1929 topology 2019 2587 > 16 0 28 1929 topology 2051 2587 -> 15 0 28 1929 topology 2027 2588 +> 15 0 28 1929 topology 2018 2588 > 16 0 28 1929 topology 2051 2588 -> 15 0 29 1929 topology 2002 2589 -> 16 0 29 1929 topology 2003 2589 -> 15 0 29 1929 topology 1951 2590 -> 16 0 29 1929 topology 1953 2590 -> 15 0 29 1929 topology 2005 2591 -> 16 0 29 1929 topology 2007 2591 -> 15 0 29 1929 topology 1930 2592 -> 16 0 29 1929 topology 1932 2592 -> 15 0 29 1929 topology 1984 2593 -> 16 0 29 1929 topology 1986 2593 -> 15 0 29 1929 topology 2038 2594 -> 16 0 29 1929 topology 2040 2594 -> 15 0 28 1929 topology 1950 2595 +> 15 0 28 1929 topology 2022 2589 +> 16 0 28 1929 topology 2051 2589 +> 15 0 28 1929 topology 2021 2590 +> 16 0 28 1929 topology 2051 2590 +> 15 0 28 1929 topology 2025 2591 +> 16 0 28 1929 topology 2051 2591 +> 15 0 28 1929 topology 2024 2592 +> 16 0 28 1929 topology 2051 2592 +> 15 0 28 1929 topology 2028 2593 +> 16 0 28 1929 topology 2051 2593 +> 15 0 28 1929 topology 2027 2594 +> 16 0 28 1929 topology 2051 2594 +> 15 0 28 1929 topology 2031 2595 > 16 0 28 1929 topology 2051 2595 -> 15 0 29 1929 topology 1963 2596 -> 16 0 29 1929 topology 1965 2596 -> 15 0 28 1929 topology 2010 2597 +> 15 0 28 1929 topology 2030 2596 +> 16 0 28 1929 topology 2051 2596 +> 15 0 28 1929 topology 2034 2597 > 16 0 28 1929 topology 2051 2597 -> 15 0 29 1929 topology 2017 2598 -> 16 0 29 1929 topology 2019 2598 -> 15 0 28 1929 topology 1986 2599 +> 15 0 28 1929 topology 2033 2598 +> 16 0 28 1929 topology 2051 2598 +> 15 0 28 1929 topology 2037 2599 > 16 0 28 1929 topology 2051 2599 -> 15 0 28 1929 topology 1962 2600 +> 15 0 28 1929 topology 2036 2600 > 16 0 28 1929 topology 2051 2600 -> 15 0 28 1929 topology 1938 2601 +> 15 0 28 1929 topology 2040 2601 > 16 0 28 1929 topology 2051 2601 -> 15 0 29 1929 topology 1975 2602 -> 16 0 29 1929 topology 1976 2602 -> 15 0 28 1929 topology 2046 2603 +> 15 0 28 1929 topology 2039 2602 +> 16 0 28 1929 topology 2051 2602 +> 15 0 28 1929 topology 2043 2603 > 16 0 28 1929 topology 2051 2603 -> 15 0 29 1929 topology 1942 2604 -> 16 0 29 1929 topology 1944 2604 -> 15 0 29 1929 topology 1996 2605 -> 16 0 29 1929 topology 1998 2605 -> 15 0 28 1929 topology 2022 2606 +> 15 0 28 1929 topology 2042 2604 +> 16 0 28 1929 topology 2051 2604 +> 15 0 28 1929 topology 2046 2605 +> 16 0 28 1929 topology 2051 2605 +> 15 0 28 1929 topology 2045 2606 > 16 0 28 1929 topology 2051 2606 -> 15 0 28 1929 topology 1998 2607 +> 15 0 28 1929 topology 2049 2607 > 16 0 28 1929 topology 2051 2607 -> 15 0 28 1929 topology 1974 2608 +> 15 0 28 1929 topology 2048 2608 > 16 0 28 1929 topology 2051 2608 -> 15 0 29 1929 topology 1954 2609 -> 16 0 29 1929 topology 1955 2609 -> 15 0 29 1929 topology 2008 2610 -> 16 0 29 1929 topology 2009 2610 -> 15 0 29 1929 topology 2029 2611 -> 16 0 29 1929 topology 2031 2611 -> 15 0 28 1929 topology 2034 2612 -> 16 0 28 1929 topology 2051 2612 -> 15 0 29 1929 topology 1933 2613 -> 16 0 29 1929 topology 1934 2613 -> 15 0 29 1929 topology 1987 2614 -> 16 0 29 1929 topology 1988 2614 -> 15 0 29 1929 topology 2041 2615 -> 16 0 29 1929 topology 2042 2615 -> 15 0 28 1929 topology 1952 2616 -> 16 0 28 1929 topology 2051 2616 -> 15 0 28 1929 topology 1982 2617 -> 16 0 28 1929 topology 2051 2617 -> 15 0 28 1929 topology 2012 2618 -> 16 0 28 1929 topology 2051 2618 -> 15 0 28 1929 topology 1934 2619 -> 16 0 28 1929 topology 2051 2619 -> 15 0 29 1929 topology 1966 2620 -> 16 0 29 1929 topology 1967 2620 -> 15 0 29 1929 topology 2020 2621 -> 16 0 29 1929 topology 2021 2621 -> 15 0 28 1929 topology 2042 2622 -> 16 0 28 1929 topology 2051 2622 -> 15 0 28 1929 topology 1964 2623 -> 16 0 28 1929 topology 2051 2623 -> 15 0 28 1929 topology 1994 2624 -> 16 0 28 1929 topology 2051 2624 -> 15 0 28 1929 topology 2024 2625 -> 16 0 28 1929 topology 2051 2625 -> 15 0 29 1929 topology 1999 2626 -> 16 0 29 1929 topology 2000 2626 -> 15 0 29 1929 topology 1975 2627 -> 16 0 29 1929 topology 1977 2627 -> 15 0 29 1929 topology 2032 2628 -> 16 0 29 1929 topology 2033 2628 -> 15 0 29 1929 topology 1954 2629 -> 16 0 29 1929 topology 1956 2629 -> 15 0 29 1929 topology 2008 2630 -> 16 0 29 1929 topology 2010 2630 -> 15 0 29 1929 topology 1933 2631 -> 16 0 29 1929 topology 1935 2631 -> 15 0 28 1929 topology 1977 2632 -> 16 0 28 1929 topology 2051 2632 -> 15 0 29 1929 topology 1987 2633 -> 16 0 29 1929 topology 1989 2633 -> 15 0 29 1929 topology 2041 2634 -> 16 0 29 1929 topology 2043 2634 -> 15 0 28 1929 topology 1953 2635 -> 16 0 28 1929 topology 2051 2635 -> 15 0 28 1929 topology 2037 2636 -> 16 0 28 1929 topology 2051 2636 -> 15 0 28 1929 topology 2013 2637 -> 16 0 28 1929 topology 2051 2637 -> 15 0 29 1929 topology 1966 2638 -> 16 0 29 1929 topology 1968 2638 -> 15 0 28 1929 topology 1989 2639 -> 16 0 28 1929 topology 2051 2639 -> 15 0 29 1929 topology 2020 2640 -> 16 0 29 1929 topology 2022 2640 -> 15 0 28 1929 topology 1965 2641 -> 16 0 28 1929 topology 2051 2641 -> 15 0 28 1929 topology 1941 2642 -> 16 0 28 1929 topology 2051 2642 -> 15 0 28 1929 topology 2049 2643 -> 16 0 28 1929 topology 2051 2643 -> 15 0 29 1929 topology 1951 2644 -> 16 0 29 1929 topology 1952 2644 -> 15 0 29 1929 topology 2005 2645 -> 16 0 29 1929 topology 2006 2645 -> 15 0 28 1929 topology 2025 2646 -> 16 0 28 1929 topology 2051 2646 -> 15 0 29 1929 topology 1999 2647 -> 16 0 29 1929 topology 2001 2647 -> 15 0 28 1929 topology 2001 2648 -> 16 0 28 1929 topology 2051 2648 -> 15 0 29 1929 topology 1930 2649 -> 16 0 29 1929 topology 1931 2649 -> 15 0 29 1929 topology 1984 2650 -> 16 0 29 1929 topology 1985 2650 -> 15 0 29 1929 topology 2038 2651 -> 16 0 29 1929 topology 2039 2651 -> 15 0 29 1929 topology 2032 2652 -> 16 0 29 1929 topology 2034 2652 -> 15 0 28 1929 topology 1949 2653 -> 16 0 28 1929 topology 2051 2653 -> 15 0 28 1929 topology 1979 2654 -> 16 0 28 1929 topology 2051 2654 -> 15 0 29 1929 topology 1963 2655 -> 16 0 29 1929 topology 1964 2655 -> 15 0 28 1929 topology 2009 2656 -> 16 0 28 1929 topology 2051 2656 -> 15 0 29 1929 topology 2017 2657 -> 16 0 29 1929 topology 2018 2657 -> 15 0 28 1929 topology 1931 2658 -> 16 0 28 1929 topology 2051 2658 -> 15 0 28 1929 topology 2039 2659 -> 16 0 28 1929 topology 2051 2659 -> 15 0 28 1929 topology 1961 2660 -> 16 0 28 1929 topology 2051 2660 -> 15 0 28 1929 topology 1991 2661 -> 16 0 28 1929 topology 2051 2661 -> 15 0 29 1929 topology 1942 2662 -> 16 0 29 1929 topology 1943 2662 -> 15 0 29 1929 topology 1996 2663 -> 16 0 29 1929 topology 1997 2663 -> 15 0 28 1929 topology 2021 2664 -> 16 0 28 1929 topology 2051 2664 -> 15 0 28 1929 topology 1943 2665 -> 16 0 28 1929 topology 2051 2665 -> 15 0 28 1929 topology 1973 2666 -> 16 0 28 1929 topology 2051 2666 -> 15 0 29 1929 topology 1945 2667 -> 16 0 29 1929 topology 1947 2667 -> 15 0 28 1929 topology 2003 2668 -> 16 0 28 1929 topology 2051 2668 -> 15 0 29 1929 topology 2029 2669 -> 16 0 29 1929 topology 2030 2669 -> 15 0 28 1929 topology 2033 2670 -> 16 0 28 1929 topology 2051 2670 -> 15 0 29 1929 topology 1978 2671 -> 16 0 29 1929 topology 1980 2671 -> 15 0 29 1929 topology 1957 2672 -> 16 0 29 1929 topology 1959 2672 -> 15 0 29 1929 topology 2011 2673 -> 16 0 29 1929 topology 2013 2673 -> 15 0 28 1929 topology 1980 2674 -> 16 0 28 1929 topology 2051 2674 -> 15 0 29 1929 topology 1936 2675 -> 16 0 29 1929 topology 1938 2675 -> 15 0 28 1929 topology 1956 2676 -> 16 0 28 1929 topology 2051 2676 -> 15 0 29 1929 topology 1990 2677 -> 16 0 29 1929 topology 1992 2677 -> 15 0 29 1929 topology 2044 2678 -> 16 0 29 1929 topology 2046 2678 -> 15 0 28 1929 topology 1932 2679 -> 16 0 28 1929 topology 2051 2679 -> 15 0 28 1929 topology 2040 2680 -> 16 0 28 1929 topology 2051 2680 -> 15 0 28 1929 topology 2016 2681 -> 16 0 28 1929 topology 2051 2681 -> 15 0 29 1929 topology 1948 2682 -> 16 0 29 1929 topology 1949 2682 -> 15 0 28 1929 topology 1992 2683 -> 16 0 28 1929 topology 2051 2683 -> 15 0 28 1929 topology 1968 2684 -> 16 0 28 1929 topology 2051 2684 -> 15 0 29 1929 topology 1969 2685 -> 16 0 29 1929 topology 1971 2685 -> 15 0 29 1929 topology 2023 2686 -> 16 0 29 1929 topology 2025 2686 -> 15 0 30 1929 topology 2050 2687 -> 16 0 30 1929 topology 2051 2687 -> 15 0 28 1929 topology 1944 2688 -> 16 0 28 1929 topology 2051 2688 -> 15 0 28 1929 topology 2028 2689 -> 16 0 28 1929 topology 2051 2689 +> 15 0 29 1929 topology 2050 2609 +> 16 0 29 1929 topology 2051 2609 +> 15 0 30 1929 topology 1930 2610 +> 16 0 30 1929 topology 1932 2610 +> 15 0 30 1929 topology 1930 2611 +> 16 0 30 1929 topology 1931 2611 +> 15 0 30 1929 topology 1933 2612 +> 16 0 30 1929 topology 1935 2612 +> 15 0 30 1929 topology 1933 2613 +> 16 0 30 1929 topology 1934 2613 +> 15 0 30 1929 topology 1936 2614 +> 16 0 30 1929 topology 1938 2614 +> 15 0 30 1929 topology 1936 2615 +> 16 0 30 1929 topology 1937 2615 +> 15 0 30 1929 topology 1939 2616 +> 16 0 30 1929 topology 1941 2616 +> 15 0 30 1929 topology 1939 2617 +> 16 0 30 1929 topology 1940 2617 +> 15 0 30 1929 topology 1942 2618 +> 16 0 30 1929 topology 1944 2618 +> 15 0 30 1929 topology 1942 2619 +> 16 0 30 1929 topology 1943 2619 +> 15 0 30 1929 topology 1945 2620 +> 16 0 30 1929 topology 1947 2620 +> 15 0 30 1929 topology 1945 2621 +> 16 0 30 1929 topology 1946 2621 +> 15 0 30 1929 topology 1948 2622 +> 16 0 30 1929 topology 1950 2622 +> 15 0 30 1929 topology 1948 2623 +> 16 0 30 1929 topology 1949 2623 +> 15 0 30 1929 topology 1951 2624 +> 16 0 30 1929 topology 1953 2624 +> 15 0 30 1929 topology 1951 2625 +> 16 0 30 1929 topology 1952 2625 +> 15 0 30 1929 topology 1954 2626 +> 16 0 30 1929 topology 1956 2626 +> 15 0 30 1929 topology 1954 2627 +> 16 0 30 1929 topology 1955 2627 +> 15 0 30 1929 topology 1957 2628 +> 16 0 30 1929 topology 1959 2628 +> 15 0 30 1929 topology 1957 2629 +> 16 0 30 1929 topology 1958 2629 +> 15 0 30 1929 topology 1960 2630 +> 16 0 30 1929 topology 1962 2630 +> 15 0 30 1929 topology 1960 2631 +> 16 0 30 1929 topology 1961 2631 +> 15 0 30 1929 topology 1963 2632 +> 16 0 30 1929 topology 1965 2632 +> 15 0 30 1929 topology 1963 2633 +> 16 0 30 1929 topology 1964 2633 +> 15 0 30 1929 topology 1966 2634 +> 16 0 30 1929 topology 1968 2634 +> 15 0 30 1929 topology 1966 2635 +> 16 0 30 1929 topology 1967 2635 +> 15 0 30 1929 topology 1969 2636 +> 16 0 30 1929 topology 1971 2636 +> 15 0 30 1929 topology 1969 2637 +> 16 0 30 1929 topology 1970 2637 +> 15 0 30 1929 topology 1972 2638 +> 16 0 30 1929 topology 1974 2638 +> 15 0 30 1929 topology 1972 2639 +> 16 0 30 1929 topology 1973 2639 +> 15 0 30 1929 topology 1975 2640 +> 16 0 30 1929 topology 1977 2640 +> 15 0 30 1929 topology 1975 2641 +> 16 0 30 1929 topology 1976 2641 +> 15 0 30 1929 topology 1978 2642 +> 16 0 30 1929 topology 1980 2642 +> 15 0 30 1929 topology 1978 2643 +> 16 0 30 1929 topology 1979 2643 +> 15 0 30 1929 topology 1981 2644 +> 16 0 30 1929 topology 1983 2644 +> 15 0 30 1929 topology 1981 2645 +> 16 0 30 1929 topology 1982 2645 +> 15 0 30 1929 topology 1984 2646 +> 16 0 30 1929 topology 1986 2646 +> 15 0 30 1929 topology 1984 2647 +> 16 0 30 1929 topology 1985 2647 +> 15 0 30 1929 topology 1987 2648 +> 16 0 30 1929 topology 1989 2648 +> 15 0 30 1929 topology 1987 2649 +> 16 0 30 1929 topology 1988 2649 +> 15 0 30 1929 topology 1990 2650 +> 16 0 30 1929 topology 1992 2650 +> 15 0 30 1929 topology 1990 2651 +> 16 0 30 1929 topology 1991 2651 +> 15 0 30 1929 topology 1993 2652 +> 16 0 30 1929 topology 1995 2652 +> 15 0 30 1929 topology 1993 2653 +> 16 0 30 1929 topology 1994 2653 +> 15 0 30 1929 topology 1996 2654 +> 16 0 30 1929 topology 1998 2654 +> 15 0 30 1929 topology 1996 2655 +> 16 0 30 1929 topology 1997 2655 +> 15 0 30 1929 topology 1999 2656 +> 16 0 30 1929 topology 2001 2656 +> 15 0 30 1929 topology 1999 2657 +> 16 0 30 1929 topology 2000 2657 +> 15 0 30 1929 topology 2002 2658 +> 16 0 30 1929 topology 2004 2658 +> 15 0 30 1929 topology 2002 2659 +> 16 0 30 1929 topology 2003 2659 +> 15 0 30 1929 topology 2005 2660 +> 16 0 30 1929 topology 2007 2660 +> 15 0 30 1929 topology 2005 2661 +> 16 0 30 1929 topology 2006 2661 +> 15 0 30 1929 topology 2008 2662 +> 16 0 30 1929 topology 2010 2662 +> 15 0 30 1929 topology 2008 2663 +> 16 0 30 1929 topology 2009 2663 +> 15 0 30 1929 topology 2011 2664 +> 16 0 30 1929 topology 2013 2664 +> 15 0 30 1929 topology 2011 2665 +> 16 0 30 1929 topology 2012 2665 +> 15 0 30 1929 topology 2014 2666 +> 16 0 30 1929 topology 2016 2666 +> 15 0 30 1929 topology 2014 2667 +> 16 0 30 1929 topology 2015 2667 +> 15 0 30 1929 topology 2017 2668 +> 16 0 30 1929 topology 2019 2668 +> 15 0 30 1929 topology 2017 2669 +> 16 0 30 1929 topology 2018 2669 +> 15 0 30 1929 topology 2020 2670 +> 16 0 30 1929 topology 2022 2670 +> 15 0 30 1929 topology 2020 2671 +> 16 0 30 1929 topology 2021 2671 +> 15 0 30 1929 topology 2023 2672 +> 16 0 30 1929 topology 2025 2672 +> 15 0 30 1929 topology 2023 2673 +> 16 0 30 1929 topology 2024 2673 +> 15 0 30 1929 topology 2026 2674 +> 16 0 30 1929 topology 2028 2674 +> 15 0 30 1929 topology 2026 2675 +> 16 0 30 1929 topology 2027 2675 +> 15 0 30 1929 topology 2029 2676 +> 16 0 30 1929 topology 2031 2676 +> 15 0 30 1929 topology 2029 2677 +> 16 0 30 1929 topology 2030 2677 +> 15 0 30 1929 topology 2032 2678 +> 16 0 30 1929 topology 2034 2678 +> 15 0 30 1929 topology 2032 2679 +> 16 0 30 1929 topology 2033 2679 +> 15 0 30 1929 topology 2035 2680 +> 16 0 30 1929 topology 2037 2680 +> 15 0 30 1929 topology 2035 2681 +> 16 0 30 1929 topology 2036 2681 +> 15 0 30 1929 topology 2038 2682 +> 16 0 30 1929 topology 2040 2682 +> 15 0 30 1929 topology 2038 2683 +> 16 0 30 1929 topology 2039 2683 +> 15 0 30 1929 topology 2041 2684 +> 16 0 30 1929 topology 2043 2684 +> 15 0 30 1929 topology 2041 2685 +> 16 0 30 1929 topology 2042 2685 +> 15 0 30 1929 topology 2044 2686 +> 16 0 30 1929 topology 2046 2686 +> 15 0 30 1929 topology 2044 2687 +> 16 0 30 1929 topology 2045 2687 +> 15 0 30 1929 topology 2047 2688 +> 16 0 30 1929 topology 2049 2688 +> 15 0 30 1929 topology 2047 2689 +> 16 0 30 1929 topology 2048 2689 > 15 0 31 1607 topology 2054 2690 > 16 0 31 1607 topology 2053 2690 > 15 0 31 1607 topology 2054 2691 @@ -18484,7244 +18484,7244 @@ $ tail -n +3 trace_platform.trace > 16 0 31 1607 topology 2050 2693 > 15 0 32 1607 topology 1726 2694 > 16 0 32 1607 topology 2054 2694 -> 15 0 28 2057 topology 2068 2695 +> 15 0 28 2057 topology 2087 2695 > 16 0 28 2057 topology 2155 2695 -> 15 0 29 2057 topology 2073 2696 -> 16 0 29 2057 topology 2074 2696 -> 15 0 29 2057 topology 2076 2697 -> 16 0 29 2057 topology 2077 2697 -> 15 0 28 2057 topology 2120 2698 +> 15 0 28 2057 topology 2086 2696 +> 16 0 28 2057 topology 2155 2696 +> 15 0 28 2057 topology 2090 2697 +> 16 0 28 2057 topology 2155 2697 +> 15 0 28 2057 topology 2089 2698 > 16 0 28 2057 topology 2155 2698 -> 15 0 29 2057 topology 2130 2699 -> 16 0 29 2057 topology 2131 2699 -> 15 0 28 2057 topology 2096 2700 +> 15 0 28 2057 topology 2093 2699 +> 16 0 28 2057 topology 2155 2699 +> 15 0 28 2057 topology 2092 2700 > 16 0 28 2057 topology 2155 2700 -> 15 0 29 2057 topology 2079 2701 -> 16 0 29 2057 topology 2080 2701 -> 15 0 28 2057 topology 2080 2702 +> 15 0 28 2057 topology 2096 2701 +> 16 0 28 2057 topology 2155 2701 +> 15 0 28 2057 topology 2095 2702 > 16 0 28 2057 topology 2155 2702 -> 15 0 29 2057 topology 2082 2703 -> 16 0 29 2057 topology 2083 2703 -> 15 0 29 2057 topology 2109 2704 -> 16 0 29 2057 topology 2110 2704 -> 15 0 28 2057 topology 2132 2705 +> 15 0 28 2057 topology 2099 2703 +> 16 0 28 2057 topology 2155 2703 +> 15 0 28 2057 topology 2098 2704 +> 16 0 28 2057 topology 2155 2704 +> 15 0 28 2057 topology 2102 2705 > 16 0 28 2057 topology 2155 2705 -> 15 0 28 2057 topology 2108 2706 +> 15 0 28 2057 topology 2101 2706 > 16 0 28 2057 topology 2155 2706 -> 15 0 29 2057 topology 2142 2707 -> 16 0 29 2057 topology 2143 2707 -> 15 0 28 2057 topology 2144 2708 +> 15 0 28 2057 topology 2105 2707 +> 16 0 28 2057 topology 2155 2707 +> 15 0 28 2057 topology 2104 2708 > 16 0 28 2057 topology 2155 2708 -> 15 0 29 2057 topology 2091 2709 -> 16 0 29 2057 topology 2093 2709 -> 15 0 29 2057 topology 2145 2710 -> 16 0 29 2057 topology 2146 2710 -> 15 0 28 2057 topology 2092 2711 +> 15 0 28 2057 topology 2108 2709 +> 16 0 28 2057 topology 2155 2709 +> 15 0 28 2057 topology 2107 2710 +> 16 0 28 2057 topology 2155 2710 +> 15 0 28 2057 topology 2111 2711 > 16 0 28 2057 topology 2155 2711 -> 15 0 28 2057 topology 2122 2712 +> 15 0 28 2057 topology 2110 2712 > 16 0 28 2057 topology 2155 2712 -> 15 0 29 2057 topology 2124 2713 -> 16 0 29 2057 topology 2126 2713 -> 15 0 28 2057 topology 2069 2714 +> 15 0 28 2057 topology 2114 2713 +> 16 0 28 2057 topology 2155 2713 +> 15 0 28 2057 topology 2113 2714 > 16 0 28 2057 topology 2155 2714 -> 15 0 28 2057 topology 2104 2715 +> 15 0 28 2057 topology 2060 2715 > 16 0 28 2057 topology 2155 2715 -> 15 0 28 2057 topology 2134 2716 +> 15 0 28 2057 topology 2059 2716 > 16 0 28 2057 topology 2155 2716 -> 15 0 29 2057 topology 2103 2717 -> 16 0 29 2057 topology 2105 2717 -> 15 0 28 2057 topology 2081 2718 +> 15 0 28 2057 topology 2117 2717 +> 16 0 28 2057 topology 2155 2717 +> 15 0 28 2057 topology 2116 2718 > 16 0 28 2057 topology 2155 2718 -> 15 0 29 2057 topology 2088 2719 -> 16 0 29 2057 topology 2089 2719 -> 15 0 29 2057 topology 2136 2720 -> 16 0 29 2057 topology 2138 2720 -> 15 0 29 2057 topology 2121 2721 -> 16 0 29 2057 topology 2122 2721 -> 15 0 28 2057 topology 2065 2722 +> 15 0 28 2057 topology 2120 2719 +> 16 0 28 2057 topology 2155 2719 +> 15 0 28 2057 topology 2119 2720 +> 16 0 28 2057 topology 2155 2720 +> 15 0 28 2057 topology 2123 2721 +> 16 0 28 2057 topology 2155 2721 +> 15 0 28 2057 topology 2122 2722 > 16 0 28 2057 topology 2155 2722 -> 15 0 28 2057 topology 2087 2723 +> 15 0 28 2057 topology 2126 2723 > 16 0 28 2057 topology 2155 2723 -> 15 0 29 2057 topology 2100 2724 -> 16 0 29 2057 topology 2101 2724 -> 15 0 28 2057 topology 2077 2725 +> 15 0 28 2057 topology 2125 2724 +> 16 0 28 2057 topology 2155 2724 +> 15 0 28 2057 topology 2129 2725 > 16 0 28 2057 topology 2155 2725 -> 15 0 28 2057 topology 2123 2726 +> 15 0 28 2057 topology 2128 2726 > 16 0 28 2057 topology 2155 2726 -> 15 0 28 2057 topology 2099 2727 +> 15 0 28 2057 topology 2132 2727 > 16 0 28 2057 topology 2155 2727 -> 15 0 29 2057 topology 2133 2728 -> 16 0 29 2057 topology 2134 2728 +> 15 0 28 2057 topology 2131 2728 +> 16 0 28 2057 topology 2155 2728 > 15 0 28 2057 topology 2135 2729 > 16 0 28 2057 topology 2155 2729 -> 15 0 28 2057 topology 2111 2730 +> 15 0 28 2057 topology 2134 2730 > 16 0 28 2057 topology 2155 2730 -> 15 0 29 2057 topology 2112 2731 -> 16 0 29 2057 topology 2113 2731 -> 15 0 29 2057 topology 2061 2732 -> 16 0 29 2057 topology 2063 2732 -> 15 0 29 2057 topology 2088 2733 -> 16 0 29 2057 topology 2090 2733 -> 15 0 28 2057 topology 2147 2734 +> 15 0 28 2057 topology 2138 2731 +> 16 0 28 2057 topology 2155 2731 +> 15 0 28 2057 topology 2137 2732 +> 16 0 28 2057 topology 2155 2732 +> 15 0 28 2057 topology 2141 2733 +> 16 0 28 2057 topology 2155 2733 +> 15 0 28 2057 topology 2140 2734 > 16 0 28 2057 topology 2155 2734 -> 15 0 28 2057 topology 2089 2735 +> 15 0 28 2057 topology 2144 2735 > 16 0 28 2057 topology 2155 2735 -> 15 0 29 2057 topology 2067 2736 -> 16 0 29 2057 topology 2069 2736 -> 15 0 28 2057 topology 2119 2737 +> 15 0 28 2057 topology 2143 2736 +> 16 0 28 2057 topology 2155 2736 +> 15 0 28 2057 topology 2063 2737 > 16 0 28 2057 topology 2155 2737 -> 15 0 29 2057 topology 2121 2738 -> 16 0 29 2057 topology 2123 2738 -> 15 0 28 2057 topology 2060 2739 +> 15 0 28 2057 topology 2062 2738 +> 16 0 28 2057 topology 2155 2738 +> 15 0 28 2057 topology 2066 2739 > 16 0 28 2057 topology 2155 2739 -> 15 0 29 2057 topology 2148 2740 -> 16 0 29 2057 topology 2149 2740 -> 15 0 28 2057 topology 2101 2741 +> 15 0 28 2057 topology 2065 2740 +> 16 0 28 2057 topology 2155 2740 +> 15 0 28 2057 topology 2069 2741 > 16 0 28 2057 topology 2155 2741 -> 15 0 29 2057 topology 2073 2742 -> 16 0 29 2057 topology 2075 2742 -> 15 0 29 2057 topology 2100 2743 -> 16 0 29 2057 topology 2102 2743 -> 15 0 28 2057 topology 2131 2744 +> 15 0 28 2057 topology 2068 2742 +> 16 0 28 2057 topology 2155 2742 +> 15 0 28 2057 topology 2147 2743 +> 16 0 28 2057 topology 2155 2743 +> 15 0 28 2057 topology 2146 2744 > 16 0 28 2057 topology 2155 2744 -> 15 0 28 2057 topology 2072 2745 +> 15 0 28 2057 topology 2150 2745 > 16 0 28 2057 topology 2155 2745 -> 15 0 28 2057 topology 2113 2746 +> 15 0 28 2057 topology 2149 2746 > 16 0 28 2057 topology 2155 2746 -> 15 0 29 2057 topology 2079 2747 -> 16 0 29 2057 topology 2081 2747 -> 15 0 29 2057 topology 2133 2748 -> 16 0 29 2057 topology 2135 2748 -> 15 0 28 2057 topology 2143 2749 +> 15 0 28 2057 topology 2072 2747 +> 16 0 28 2057 topology 2155 2747 +> 15 0 28 2057 topology 2071 2748 +> 16 0 28 2057 topology 2155 2748 +> 15 0 28 2057 topology 2153 2749 > 16 0 28 2057 topology 2155 2749 -> 15 0 28 2057 topology 2084 2750 +> 15 0 28 2057 topology 2152 2750 > 16 0 28 2057 topology 2155 2750 -> 15 0 29 2057 topology 2091 2751 -> 16 0 29 2057 topology 2092 2751 -> 15 0 28 2057 topology 2149 2752 +> 15 0 28 2057 topology 2075 2751 +> 16 0 28 2057 topology 2155 2751 +> 15 0 28 2057 topology 2074 2752 > 16 0 28 2057 topology 2155 2752 -> 15 0 29 2057 topology 2112 2753 -> 16 0 29 2057 topology 2114 2753 -> 15 0 28 2057 topology 2062 2754 +> 15 0 28 2057 topology 2078 2753 +> 16 0 28 2057 topology 2155 2753 +> 15 0 28 2057 topology 2077 2754 > 16 0 28 2057 topology 2155 2754 -> 15 0 29 2057 topology 2124 2755 -> 16 0 29 2057 topology 2125 2755 -> 15 0 28 2057 topology 2090 2756 +> 15 0 28 2057 topology 2081 2755 +> 16 0 28 2057 topology 2155 2755 +> 15 0 28 2057 topology 2080 2756 > 16 0 28 2057 topology 2155 2756 -> 15 0 28 2057 topology 2074 2757 +> 15 0 28 2057 topology 2084 2757 > 16 0 28 2057 topology 2155 2757 -> 15 0 29 2057 topology 2103 2758 -> 16 0 29 2057 topology 2104 2758 -> 15 0 29 2057 topology 2148 2759 -> 16 0 29 2057 topology 2150 2759 -> 15 0 28 2057 topology 2126 2760 -> 16 0 28 2057 topology 2155 2760 -> 15 0 28 2057 topology 2102 2761 -> 16 0 28 2057 topology 2155 2761 -> 15 0 29 2057 topology 2136 2762 -> 16 0 29 2057 topology 2137 2762 -> 15 0 28 2057 topology 2138 2763 -> 16 0 28 2057 topology 2155 2763 -> 15 0 29 2057 topology 2085 2764 -> 16 0 29 2057 topology 2087 2764 -> 15 0 28 2057 topology 2114 2765 -> 16 0 28 2057 topology 2155 2765 -> 15 0 28 2057 topology 2086 2766 -> 16 0 28 2057 topology 2155 2766 -> 15 0 29 2057 topology 2118 2767 -> 16 0 29 2057 topology 2120 2767 -> 15 0 28 2057 topology 2150 2768 -> 16 0 28 2057 topology 2155 2768 -> 15 0 28 2057 topology 2116 2769 -> 16 0 28 2057 topology 2155 2769 -> 15 0 28 2057 topology 2063 2770 -> 16 0 28 2057 topology 2155 2770 -> 15 0 28 2057 topology 2098 2771 -> 16 0 28 2057 topology 2155 2771 -> 15 0 29 2057 topology 2097 2772 -> 16 0 29 2057 topology 2099 2772 -> 15 0 28 2057 topology 2128 2773 -> 16 0 28 2057 topology 2155 2773 -> 15 0 28 2057 topology 2152 2774 -> 16 0 28 2057 topology 2155 2774 -> 15 0 28 2057 topology 2075 2775 -> 16 0 28 2057 topology 2155 2775 -> 15 0 28 2057 topology 2110 2776 -> 16 0 28 2057 topology 2155 2776 -> 15 0 29 2057 topology 2130 2777 -> 16 0 29 2057 topology 2132 2777 -> 15 0 28 2057 topology 2140 2778 -> 16 0 28 2057 topology 2155 2778 -> 15 0 29 2057 topology 2115 2779 -> 16 0 29 2057 topology 2116 2779 -> 15 0 29 2057 topology 2109 2780 -> 16 0 29 2057 topology 2111 2780 -> 15 0 28 2057 topology 2146 2781 -> 16 0 28 2057 topology 2155 2781 -> 15 0 29 2057 topology 2094 2782 -> 16 0 29 2057 topology 2095 2782 -> 15 0 28 2057 topology 2059 2783 -> 16 0 28 2057 topology 2155 2783 -> 15 0 29 2057 topology 2142 2784 -> 16 0 29 2057 topology 2144 2784 -> 15 0 29 2057 topology 2127 2785 -> 16 0 29 2057 topology 2128 2785 -> 15 0 29 2057 topology 2151 2786 -> 16 0 29 2057 topology 2152 2786 -> 15 0 28 2057 topology 2071 2787 -> 16 0 28 2057 topology 2155 2787 -> 15 0 28 2057 topology 2117 2788 -> 16 0 28 2057 topology 2155 2788 -> 15 0 29 2057 topology 2145 2789 -> 16 0 29 2057 topology 2147 2789 -> 15 0 28 2057 topology 2093 2790 -> 16 0 28 2057 topology 2155 2790 -> 15 0 29 2057 topology 2106 2791 -> 16 0 29 2057 topology 2107 2791 -> 15 0 28 2057 topology 2083 2792 -> 16 0 28 2057 topology 2155 2792 -> 15 0 28 2057 topology 2129 2793 -> 16 0 28 2057 topology 2155 2793 -> 15 0 28 2057 topology 2153 2794 -> 16 0 28 2057 topology 2155 2794 -> 15 0 28 2057 topology 2105 2795 -> 16 0 28 2057 topology 2155 2795 -> 15 0 29 2057 topology 2139 2796 -> 16 0 29 2057 topology 2140 2796 -> 15 0 29 2057 topology 2058 2797 -> 16 0 29 2057 topology 2060 2797 -> 15 0 28 2057 topology 2141 2798 -> 16 0 28 2057 topology 2155 2798 -> 15 0 29 2057 topology 2115 2799 -> 16 0 29 2057 topology 2117 2799 -> 15 0 29 2057 topology 2064 2800 -> 16 0 29 2057 topology 2066 2800 -> 15 0 29 2057 topology 2094 2801 -> 16 0 29 2057 topology 2096 2801 -> 15 0 28 2057 topology 2095 2802 -> 16 0 28 2057 topology 2155 2802 -> 15 0 29 2057 topology 2070 2803 -> 16 0 29 2057 topology 2072 2803 -> 15 0 28 2057 topology 2125 2804 -> 16 0 28 2057 topology 2155 2804 -> 15 0 28 2057 topology 2066 2805 -> 16 0 28 2057 topology 2155 2805 -> 15 0 29 2057 topology 2127 2806 -> 16 0 29 2057 topology 2129 2806 -> 15 0 29 2057 topology 2151 2807 -> 16 0 29 2057 topology 2153 2807 -> 15 0 28 2057 topology 2107 2808 -> 16 0 28 2057 topology 2155 2808 -> 15 0 29 2057 topology 2076 2809 -> 16 0 29 2057 topology 2078 2809 -> 15 0 28 2057 topology 2137 2810 -> 16 0 28 2057 topology 2155 2810 -> 15 0 29 2057 topology 2058 2811 -> 16 0 29 2057 topology 2059 2811 -> 15 0 28 2057 topology 2078 2812 -> 16 0 28 2057 topology 2155 2812 -> 15 0 29 2057 topology 2085 2813 -> 16 0 29 2057 topology 2086 2813 -> 15 0 29 2057 topology 2106 2814 -> 16 0 29 2057 topology 2108 2814 -> 15 0 29 2057 topology 2061 2815 -> 16 0 29 2057 topology 2062 2815 -> 15 0 29 2057 topology 2082 2816 -> 16 0 29 2057 topology 2084 2816 -> 15 0 30 2057 topology 2154 2817 -> 16 0 30 2057 topology 2155 2817 -> 15 0 29 2057 topology 2064 2818 -> 16 0 29 2057 topology 2065 2818 -> 15 0 29 2057 topology 2118 2819 -> 16 0 29 2057 topology 2119 2819 -> 15 0 29 2057 topology 2139 2820 -> 16 0 29 2057 topology 2141 2820 -> 15 0 29 2057 topology 2067 2821 -> 16 0 29 2057 topology 2068 2821 -> 15 0 29 2057 topology 2070 2822 -> 16 0 29 2057 topology 2071 2822 -> 15 0 29 2057 topology 2097 2823 -> 16 0 29 2057 topology 2098 2823 -> 15 0 29 2156 topology 2166 2824 -> 16 0 29 2156 topology 2167 2824 -> 15 0 29 2156 topology 2220 2825 -> 16 0 29 2156 topology 2221 2825 -> 15 0 28 2156 topology 2159 2826 +> 15 0 28 2057 topology 2083 2758 +> 16 0 28 2057 topology 2155 2758 +> 15 0 29 2057 topology 2154 2759 +> 16 0 29 2057 topology 2155 2759 +> 15 0 30 2057 topology 2085 2760 +> 16 0 30 2057 topology 2087 2760 +> 15 0 30 2057 topology 2085 2761 +> 16 0 30 2057 topology 2086 2761 +> 15 0 30 2057 topology 2088 2762 +> 16 0 30 2057 topology 2090 2762 +> 15 0 30 2057 topology 2088 2763 +> 16 0 30 2057 topology 2089 2763 +> 15 0 30 2057 topology 2091 2764 +> 16 0 30 2057 topology 2093 2764 +> 15 0 30 2057 topology 2091 2765 +> 16 0 30 2057 topology 2092 2765 +> 15 0 30 2057 topology 2094 2766 +> 16 0 30 2057 topology 2096 2766 +> 15 0 30 2057 topology 2094 2767 +> 16 0 30 2057 topology 2095 2767 +> 15 0 30 2057 topology 2097 2768 +> 16 0 30 2057 topology 2099 2768 +> 15 0 30 2057 topology 2097 2769 +> 16 0 30 2057 topology 2098 2769 +> 15 0 30 2057 topology 2100 2770 +> 16 0 30 2057 topology 2102 2770 +> 15 0 30 2057 topology 2100 2771 +> 16 0 30 2057 topology 2101 2771 +> 15 0 30 2057 topology 2103 2772 +> 16 0 30 2057 topology 2105 2772 +> 15 0 30 2057 topology 2103 2773 +> 16 0 30 2057 topology 2104 2773 +> 15 0 30 2057 topology 2106 2774 +> 16 0 30 2057 topology 2108 2774 +> 15 0 30 2057 topology 2106 2775 +> 16 0 30 2057 topology 2107 2775 +> 15 0 30 2057 topology 2109 2776 +> 16 0 30 2057 topology 2111 2776 +> 15 0 30 2057 topology 2109 2777 +> 16 0 30 2057 topology 2110 2777 +> 15 0 30 2057 topology 2112 2778 +> 16 0 30 2057 topology 2114 2778 +> 15 0 30 2057 topology 2112 2779 +> 16 0 30 2057 topology 2113 2779 +> 15 0 30 2057 topology 2058 2780 +> 16 0 30 2057 topology 2060 2780 +> 15 0 30 2057 topology 2058 2781 +> 16 0 30 2057 topology 2059 2781 +> 15 0 30 2057 topology 2115 2782 +> 16 0 30 2057 topology 2117 2782 +> 15 0 30 2057 topology 2115 2783 +> 16 0 30 2057 topology 2116 2783 +> 15 0 30 2057 topology 2118 2784 +> 16 0 30 2057 topology 2120 2784 +> 15 0 30 2057 topology 2118 2785 +> 16 0 30 2057 topology 2119 2785 +> 15 0 30 2057 topology 2121 2786 +> 16 0 30 2057 topology 2123 2786 +> 15 0 30 2057 topology 2121 2787 +> 16 0 30 2057 topology 2122 2787 +> 15 0 30 2057 topology 2124 2788 +> 16 0 30 2057 topology 2126 2788 +> 15 0 30 2057 topology 2124 2789 +> 16 0 30 2057 topology 2125 2789 +> 15 0 30 2057 topology 2127 2790 +> 16 0 30 2057 topology 2129 2790 +> 15 0 30 2057 topology 2127 2791 +> 16 0 30 2057 topology 2128 2791 +> 15 0 30 2057 topology 2130 2792 +> 16 0 30 2057 topology 2132 2792 +> 15 0 30 2057 topology 2130 2793 +> 16 0 30 2057 topology 2131 2793 +> 15 0 30 2057 topology 2133 2794 +> 16 0 30 2057 topology 2135 2794 +> 15 0 30 2057 topology 2133 2795 +> 16 0 30 2057 topology 2134 2795 +> 15 0 30 2057 topology 2136 2796 +> 16 0 30 2057 topology 2138 2796 +> 15 0 30 2057 topology 2136 2797 +> 16 0 30 2057 topology 2137 2797 +> 15 0 30 2057 topology 2139 2798 +> 16 0 30 2057 topology 2141 2798 +> 15 0 30 2057 topology 2139 2799 +> 16 0 30 2057 topology 2140 2799 +> 15 0 30 2057 topology 2142 2800 +> 16 0 30 2057 topology 2144 2800 +> 15 0 30 2057 topology 2142 2801 +> 16 0 30 2057 topology 2143 2801 +> 15 0 30 2057 topology 2061 2802 +> 16 0 30 2057 topology 2063 2802 +> 15 0 30 2057 topology 2061 2803 +> 16 0 30 2057 topology 2062 2803 +> 15 0 30 2057 topology 2064 2804 +> 16 0 30 2057 topology 2066 2804 +> 15 0 30 2057 topology 2064 2805 +> 16 0 30 2057 topology 2065 2805 +> 15 0 30 2057 topology 2067 2806 +> 16 0 30 2057 topology 2069 2806 +> 15 0 30 2057 topology 2067 2807 +> 16 0 30 2057 topology 2068 2807 +> 15 0 30 2057 topology 2145 2808 +> 16 0 30 2057 topology 2147 2808 +> 15 0 30 2057 topology 2145 2809 +> 16 0 30 2057 topology 2146 2809 +> 15 0 30 2057 topology 2148 2810 +> 16 0 30 2057 topology 2150 2810 +> 15 0 30 2057 topology 2148 2811 +> 16 0 30 2057 topology 2149 2811 +> 15 0 30 2057 topology 2070 2812 +> 16 0 30 2057 topology 2072 2812 +> 15 0 30 2057 topology 2070 2813 +> 16 0 30 2057 topology 2071 2813 +> 15 0 30 2057 topology 2151 2814 +> 16 0 30 2057 topology 2153 2814 +> 15 0 30 2057 topology 2151 2815 +> 16 0 30 2057 topology 2152 2815 +> 15 0 30 2057 topology 2073 2816 +> 16 0 30 2057 topology 2075 2816 +> 15 0 30 2057 topology 2073 2817 +> 16 0 30 2057 topology 2074 2817 +> 15 0 30 2057 topology 2076 2818 +> 16 0 30 2057 topology 2078 2818 +> 15 0 30 2057 topology 2076 2819 +> 16 0 30 2057 topology 2077 2819 +> 15 0 30 2057 topology 2079 2820 +> 16 0 30 2057 topology 2081 2820 +> 15 0 30 2057 topology 2079 2821 +> 16 0 30 2057 topology 2080 2821 +> 15 0 30 2057 topology 2082 2822 +> 16 0 30 2057 topology 2084 2822 +> 15 0 30 2057 topology 2082 2823 +> 16 0 30 2057 topology 2083 2823 +> 15 0 28 2156 topology 2159 2824 +> 16 0 28 2156 topology 2242 2824 +> 15 0 28 2156 topology 2158 2825 +> 16 0 28 2156 topology 2242 2825 +> 15 0 28 2156 topology 2162 2826 > 16 0 28 2156 topology 2242 2826 -> 15 0 29 2156 topology 2199 2827 -> 16 0 29 2156 topology 2200 2827 -> 15 0 28 2156 topology 2219 2828 +> 15 0 28 2156 topology 2161 2827 +> 16 0 28 2156 topology 2242 2827 +> 15 0 28 2156 topology 2165 2828 > 16 0 28 2156 topology 2242 2828 -> 15 0 28 2156 topology 2195 2829 +> 15 0 28 2156 topology 2164 2829 > 16 0 28 2156 topology 2242 2829 -> 15 0 28 2156 topology 2171 2830 +> 15 0 28 2156 topology 2168 2830 > 16 0 28 2156 topology 2242 2830 -> 15 0 29 2156 topology 2178 2831 -> 16 0 29 2156 topology 2179 2831 -> 15 0 29 2156 topology 2232 2832 -> 16 0 29 2156 topology 2233 2832 -> 15 0 28 2156 topology 2231 2833 +> 15 0 28 2156 topology 2167 2831 +> 16 0 28 2156 topology 2242 2831 +> 15 0 28 2156 topology 2171 2832 +> 16 0 28 2156 topology 2242 2832 +> 15 0 28 2156 topology 2170 2833 > 16 0 28 2156 topology 2242 2833 -> 15 0 28 2156 topology 2207 2834 +> 15 0 28 2156 topology 2174 2834 > 16 0 28 2156 topology 2242 2834 -> 15 0 28 2156 topology 2183 2835 +> 15 0 28 2156 topology 2173 2835 > 16 0 28 2156 topology 2242 2835 -> 15 0 29 2156 topology 2211 2836 -> 16 0 29 2156 topology 2212 2836 -> 15 0 29 2156 topology 2160 2837 -> 16 0 29 2156 topology 2162 2837 -> 15 0 28 2156 topology 2161 2838 +> 15 0 28 2156 topology 2177 2836 +> 16 0 28 2156 topology 2242 2836 +> 15 0 28 2156 topology 2176 2837 +> 16 0 28 2156 topology 2242 2837 +> 15 0 28 2156 topology 2180 2838 > 16 0 28 2156 topology 2242 2838 -> 15 0 28 2156 topology 2191 2839 +> 15 0 28 2156 topology 2179 2839 > 16 0 28 2156 topology 2242 2839 -> 15 0 29 2156 topology 2193 2840 -> 16 0 29 2156 topology 2195 2840 -> 15 0 28 2156 topology 2221 2841 +> 15 0 28 2156 topology 2183 2840 +> 16 0 28 2156 topology 2242 2840 +> 15 0 28 2156 topology 2182 2841 > 16 0 28 2156 topology 2242 2841 -> 15 0 28 2156 topology 2173 2842 +> 15 0 28 2156 topology 2186 2842 > 16 0 28 2156 topology 2242 2842 -> 15 0 28 2156 topology 2203 2843 +> 15 0 28 2156 topology 2185 2843 > 16 0 28 2156 topology 2242 2843 -> 15 0 29 2156 topology 2172 2844 -> 16 0 29 2156 topology 2174 2844 -> 15 0 29 2156 topology 2226 2845 -> 16 0 29 2156 topology 2228 2845 -> 15 0 28 2156 topology 2233 2846 +> 15 0 28 2156 topology 2189 2844 +> 16 0 28 2156 topology 2242 2844 +> 15 0 28 2156 topology 2188 2845 +> 16 0 28 2156 topology 2242 2845 +> 15 0 28 2156 topology 2192 2846 > 16 0 28 2156 topology 2242 2846 -> 15 0 28 2156 topology 2185 2847 +> 15 0 28 2156 topology 2191 2847 > 16 0 28 2156 topology 2242 2847 -> 15 0 29 2156 topology 2157 2848 -> 16 0 29 2156 topology 2158 2848 -> 15 0 28 2156 topology 2215 2849 +> 15 0 28 2156 topology 2195 2848 +> 16 0 28 2156 topology 2242 2848 +> 15 0 28 2156 topology 2194 2849 > 16 0 28 2156 topology 2242 2849 -> 15 0 29 2156 topology 2205 2850 -> 16 0 29 2156 topology 2207 2850 -> 15 0 29 2156 topology 2190 2851 -> 16 0 29 2156 topology 2191 2851 -> 15 0 29 2156 topology 2184 2852 -> 16 0 29 2156 topology 2186 2852 -> 15 0 29 2156 topology 2238 2853 -> 16 0 29 2156 topology 2240 2853 -> 15 0 29 2156 topology 2169 2854 -> 16 0 29 2156 topology 2170 2854 -> 15 0 29 2156 topology 2223 2855 -> 16 0 29 2156 topology 2224 2855 -> 15 0 28 2156 topology 2162 2856 +> 15 0 28 2156 topology 2198 2850 +> 16 0 28 2156 topology 2242 2850 +> 15 0 28 2156 topology 2197 2851 +> 16 0 28 2156 topology 2242 2851 +> 15 0 28 2156 topology 2201 2852 +> 16 0 28 2156 topology 2242 2852 +> 15 0 28 2156 topology 2200 2853 +> 16 0 28 2156 topology 2242 2853 +> 15 0 28 2156 topology 2204 2854 +> 16 0 28 2156 topology 2242 2854 +> 15 0 28 2156 topology 2203 2855 +> 16 0 28 2156 topology 2242 2855 +> 15 0 28 2156 topology 2207 2856 > 16 0 28 2156 topology 2242 2856 -> 15 0 29 2156 topology 2202 2857 -> 16 0 29 2156 topology 2203 2857 -> 15 0 28 2156 topology 2222 2858 +> 15 0 28 2156 topology 2206 2857 +> 16 0 28 2156 topology 2242 2857 +> 15 0 28 2156 topology 2210 2858 > 16 0 28 2156 topology 2242 2858 -> 15 0 28 2156 topology 2198 2859 +> 15 0 28 2156 topology 2209 2859 > 16 0 28 2156 topology 2242 2859 -> 15 0 28 2156 topology 2174 2860 +> 15 0 28 2156 topology 2213 2860 > 16 0 28 2156 topology 2242 2860 -> 15 0 29 2156 topology 2181 2861 -> 16 0 29 2156 topology 2182 2861 -> 15 0 28 2156 topology 2234 2862 +> 15 0 28 2156 topology 2212 2861 +> 16 0 28 2156 topology 2242 2861 +> 15 0 28 2156 topology 2216 2862 > 16 0 28 2156 topology 2242 2862 -> 15 0 29 2156 topology 2235 2863 -> 16 0 29 2156 topology 2236 2863 -> 15 0 28 2156 topology 2210 2864 +> 15 0 28 2156 topology 2215 2863 +> 16 0 28 2156 topology 2242 2863 +> 15 0 28 2156 topology 2219 2864 > 16 0 28 2156 topology 2242 2864 -> 15 0 28 2156 topology 2186 2865 +> 15 0 28 2156 topology 2218 2865 > 16 0 28 2156 topology 2242 2865 -> 15 0 29 2156 topology 2157 2866 -> 16 0 29 2156 topology 2159 2866 -> 15 0 29 2156 topology 2214 2867 -> 16 0 29 2156 topology 2215 2867 -> 15 0 28 2156 topology 2158 2868 +> 15 0 28 2156 topology 2222 2866 +> 16 0 28 2156 topology 2242 2866 +> 15 0 28 2156 topology 2221 2867 +> 16 0 28 2156 topology 2242 2867 +> 15 0 28 2156 topology 2225 2868 > 16 0 28 2156 topology 2242 2868 -> 15 0 28 2156 topology 2188 2869 +> 15 0 28 2156 topology 2224 2869 > 16 0 28 2156 topology 2242 2869 -> 15 0 29 2156 topology 2190 2870 -> 16 0 29 2156 topology 2192 2870 -> 15 0 28 2156 topology 2218 2871 +> 15 0 28 2156 topology 2228 2870 +> 16 0 28 2156 topology 2242 2870 +> 15 0 28 2156 topology 2227 2871 > 16 0 28 2156 topology 2242 2871 -> 15 0 28 2156 topology 2170 2872 +> 15 0 28 2156 topology 2231 2872 > 16 0 28 2156 topology 2242 2872 -> 15 0 29 2156 topology 2169 2873 -> 16 0 29 2156 topology 2171 2873 -> 15 0 28 2156 topology 2200 2874 +> 15 0 28 2156 topology 2230 2873 +> 16 0 28 2156 topology 2242 2873 +> 15 0 28 2156 topology 2234 2874 > 16 0 28 2156 topology 2242 2874 -> 15 0 29 2156 topology 2223 2875 -> 16 0 29 2156 topology 2225 2875 -> 15 0 28 2156 topology 2230 2876 +> 15 0 28 2156 topology 2233 2875 +> 16 0 28 2156 topology 2242 2875 +> 15 0 28 2156 topology 2237 2876 > 16 0 28 2156 topology 2242 2876 -> 15 0 28 2156 topology 2182 2877 +> 15 0 28 2156 topology 2236 2877 > 16 0 28 2156 topology 2242 2877 -> 15 0 29 2156 topology 2202 2878 -> 16 0 29 2156 topology 2204 2878 -> 15 0 28 2156 topology 2212 2879 +> 15 0 28 2156 topology 2240 2878 +> 16 0 28 2156 topology 2242 2878 +> 15 0 28 2156 topology 2239 2879 > 16 0 28 2156 topology 2242 2879 -> 15 0 29 2156 topology 2160 2880 -> 16 0 29 2156 topology 2161 2880 -> 15 0 29 2156 topology 2181 2881 -> 16 0 29 2156 topology 2183 2881 -> 15 0 29 2156 topology 2235 2882 -> 16 0 29 2156 topology 2237 2882 -> 15 0 29 2156 topology 2193 2883 -> 16 0 29 2156 topology 2194 2883 -> 15 0 29 2156 topology 2214 2884 -> 16 0 29 2156 topology 2216 2884 -> 15 0 29 2156 topology 2172 2885 -> 16 0 29 2156 topology 2173 2885 -> 15 0 28 2156 topology 2189 2886 -> 16 0 28 2156 topology 2242 2886 -> 15 0 29 2156 topology 2226 2887 -> 16 0 29 2156 topology 2227 2887 -> 15 0 28 2156 topology 2165 2888 -> 16 0 28 2156 topology 2242 2888 -> 15 0 28 2156 topology 2225 2889 -> 16 0 28 2156 topology 2242 2889 -> 15 0 28 2156 topology 2201 2890 -> 16 0 28 2156 topology 2242 2890 -> 15 0 29 2156 topology 2205 2891 -> 16 0 29 2156 topology 2206 2891 -> 15 0 28 2156 topology 2177 2892 -> 16 0 28 2156 topology 2242 2892 -> 15 0 28 2156 topology 2237 2893 -> 16 0 28 2156 topology 2242 2893 -> 15 0 29 2156 topology 2184 2894 -> 16 0 29 2156 topology 2185 2894 -> 15 0 28 2156 topology 2213 2895 -> 16 0 28 2156 topology 2242 2895 -> 15 0 29 2156 topology 2238 2896 -> 16 0 29 2156 topology 2239 2896 -> 15 0 29 2156 topology 2187 2897 -> 16 0 29 2156 topology 2189 2897 -> 15 0 28 2156 topology 2167 2898 -> 16 0 28 2156 topology 2242 2898 -> 15 0 29 2156 topology 2166 2899 -> 16 0 29 2156 topology 2168 2899 -> 15 0 29 2156 topology 2220 2900 -> 16 0 29 2156 topology 2222 2900 -> 15 0 28 2156 topology 2197 2901 -> 16 0 28 2156 topology 2242 2901 -> 15 0 28 2156 topology 2227 2902 -> 16 0 28 2156 topology 2242 2902 -> 15 0 28 2156 topology 2179 2903 -> 16 0 28 2156 topology 2242 2903 -> 15 0 29 2156 topology 2199 2904 -> 16 0 29 2156 topology 2201 2904 -> 15 0 28 2156 topology 2209 2905 -> 16 0 28 2156 topology 2242 2905 -> 15 0 28 2156 topology 2239 2906 -> 16 0 28 2156 topology 2242 2906 -> 15 0 30 2156 topology 2241 2907 -> 16 0 30 2156 topology 2242 2907 -> 15 0 29 2156 topology 2178 2908 -> 16 0 29 2156 topology 2180 2908 -> 15 0 29 2156 topology 2232 2909 -> 16 0 29 2156 topology 2234 2909 -> 15 0 29 2156 topology 2163 2910 -> 16 0 29 2156 topology 2164 2910 -> 15 0 29 2156 topology 2217 2911 -> 16 0 29 2156 topology 2218 2911 -> 15 0 29 2156 topology 2211 2912 -> 16 0 29 2156 topology 2213 2912 -> 15 0 29 2156 topology 2196 2913 -> 16 0 29 2156 topology 2197 2913 -> 15 0 28 2156 topology 2192 2914 -> 16 0 28 2156 topology 2242 2914 -> 15 0 28 2156 topology 2168 2915 -> 16 0 28 2156 topology 2242 2915 -> 15 0 29 2156 topology 2175 2916 -> 16 0 29 2156 topology 2176 2916 -> 15 0 29 2156 topology 2229 2917 -> 16 0 29 2156 topology 2230 2917 -> 15 0 28 2156 topology 2228 2918 -> 16 0 28 2156 topology 2242 2918 -> 15 0 28 2156 topology 2204 2919 -> 16 0 28 2156 topology 2242 2919 -> 15 0 28 2156 topology 2180 2920 -> 16 0 28 2156 topology 2242 2920 -> 15 0 29 2156 topology 2208 2921 -> 16 0 29 2156 topology 2209 2921 -> 15 0 28 2156 topology 2240 2922 -> 16 0 28 2156 topology 2242 2922 -> 15 0 28 2156 topology 2216 2923 -> 16 0 28 2156 topology 2242 2923 -> 15 0 29 2156 topology 2163 2924 -> 16 0 29 2156 topology 2165 2924 -> 15 0 29 2156 topology 2217 2925 -> 16 0 29 2156 topology 2219 2925 -> 15 0 28 2156 topology 2164 2926 -> 16 0 28 2156 topology 2242 2926 -> 15 0 28 2156 topology 2194 2927 -> 16 0 28 2156 topology 2242 2927 -> 15 0 28 2156 topology 2224 2928 -> 16 0 28 2156 topology 2242 2928 -> 15 0 29 2156 topology 2196 2929 -> 16 0 29 2156 topology 2198 2929 -> 15 0 28 2156 topology 2176 2930 -> 16 0 28 2156 topology 2242 2930 -> 15 0 28 2156 topology 2206 2931 -> 16 0 28 2156 topology 2242 2931 -> 15 0 28 2156 topology 2236 2932 -> 16 0 28 2156 topology 2242 2932 -> 15 0 29 2156 topology 2175 2933 -> 16 0 29 2156 topology 2177 2933 -> 15 0 29 2156 topology 2229 2934 -> 16 0 29 2156 topology 2231 2934 -> 15 0 29 2156 topology 2187 2935 -> 16 0 29 2156 topology 2188 2935 -> 15 0 29 2156 topology 2208 2936 -> 16 0 29 2156 topology 2210 2936 -> 15 0 28 2243 topology 2269 2937 +> 15 0 29 2156 topology 2241 2880 +> 16 0 29 2156 topology 2242 2880 +> 15 0 30 2156 topology 2157 2881 +> 16 0 30 2156 topology 2159 2881 +> 15 0 30 2156 topology 2157 2882 +> 16 0 30 2156 topology 2158 2882 +> 15 0 30 2156 topology 2160 2883 +> 16 0 30 2156 topology 2162 2883 +> 15 0 30 2156 topology 2160 2884 +> 16 0 30 2156 topology 2161 2884 +> 15 0 30 2156 topology 2163 2885 +> 16 0 30 2156 topology 2165 2885 +> 15 0 30 2156 topology 2163 2886 +> 16 0 30 2156 topology 2164 2886 +> 15 0 30 2156 topology 2166 2887 +> 16 0 30 2156 topology 2168 2887 +> 15 0 30 2156 topology 2166 2888 +> 16 0 30 2156 topology 2167 2888 +> 15 0 30 2156 topology 2169 2889 +> 16 0 30 2156 topology 2171 2889 +> 15 0 30 2156 topology 2169 2890 +> 16 0 30 2156 topology 2170 2890 +> 15 0 30 2156 topology 2172 2891 +> 16 0 30 2156 topology 2174 2891 +> 15 0 30 2156 topology 2172 2892 +> 16 0 30 2156 topology 2173 2892 +> 15 0 30 2156 topology 2175 2893 +> 16 0 30 2156 topology 2177 2893 +> 15 0 30 2156 topology 2175 2894 +> 16 0 30 2156 topology 2176 2894 +> 15 0 30 2156 topology 2178 2895 +> 16 0 30 2156 topology 2180 2895 +> 15 0 30 2156 topology 2178 2896 +> 16 0 30 2156 topology 2179 2896 +> 15 0 30 2156 topology 2181 2897 +> 16 0 30 2156 topology 2183 2897 +> 15 0 30 2156 topology 2181 2898 +> 16 0 30 2156 topology 2182 2898 +> 15 0 30 2156 topology 2184 2899 +> 16 0 30 2156 topology 2186 2899 +> 15 0 30 2156 topology 2184 2900 +> 16 0 30 2156 topology 2185 2900 +> 15 0 30 2156 topology 2187 2901 +> 16 0 30 2156 topology 2189 2901 +> 15 0 30 2156 topology 2187 2902 +> 16 0 30 2156 topology 2188 2902 +> 15 0 30 2156 topology 2190 2903 +> 16 0 30 2156 topology 2192 2903 +> 15 0 30 2156 topology 2190 2904 +> 16 0 30 2156 topology 2191 2904 +> 15 0 30 2156 topology 2193 2905 +> 16 0 30 2156 topology 2195 2905 +> 15 0 30 2156 topology 2193 2906 +> 16 0 30 2156 topology 2194 2906 +> 15 0 30 2156 topology 2196 2907 +> 16 0 30 2156 topology 2198 2907 +> 15 0 30 2156 topology 2196 2908 +> 16 0 30 2156 topology 2197 2908 +> 15 0 30 2156 topology 2199 2909 +> 16 0 30 2156 topology 2201 2909 +> 15 0 30 2156 topology 2199 2910 +> 16 0 30 2156 topology 2200 2910 +> 15 0 30 2156 topology 2202 2911 +> 16 0 30 2156 topology 2204 2911 +> 15 0 30 2156 topology 2202 2912 +> 16 0 30 2156 topology 2203 2912 +> 15 0 30 2156 topology 2205 2913 +> 16 0 30 2156 topology 2207 2913 +> 15 0 30 2156 topology 2205 2914 +> 16 0 30 2156 topology 2206 2914 +> 15 0 30 2156 topology 2208 2915 +> 16 0 30 2156 topology 2210 2915 +> 15 0 30 2156 topology 2208 2916 +> 16 0 30 2156 topology 2209 2916 +> 15 0 30 2156 topology 2211 2917 +> 16 0 30 2156 topology 2213 2917 +> 15 0 30 2156 topology 2211 2918 +> 16 0 30 2156 topology 2212 2918 +> 15 0 30 2156 topology 2214 2919 +> 16 0 30 2156 topology 2216 2919 +> 15 0 30 2156 topology 2214 2920 +> 16 0 30 2156 topology 2215 2920 +> 15 0 30 2156 topology 2217 2921 +> 16 0 30 2156 topology 2219 2921 +> 15 0 30 2156 topology 2217 2922 +> 16 0 30 2156 topology 2218 2922 +> 15 0 30 2156 topology 2220 2923 +> 16 0 30 2156 topology 2222 2923 +> 15 0 30 2156 topology 2220 2924 +> 16 0 30 2156 topology 2221 2924 +> 15 0 30 2156 topology 2223 2925 +> 16 0 30 2156 topology 2225 2925 +> 15 0 30 2156 topology 2223 2926 +> 16 0 30 2156 topology 2224 2926 +> 15 0 30 2156 topology 2226 2927 +> 16 0 30 2156 topology 2228 2927 +> 15 0 30 2156 topology 2226 2928 +> 16 0 30 2156 topology 2227 2928 +> 15 0 30 2156 topology 2229 2929 +> 16 0 30 2156 topology 2231 2929 +> 15 0 30 2156 topology 2229 2930 +> 16 0 30 2156 topology 2230 2930 +> 15 0 30 2156 topology 2232 2931 +> 16 0 30 2156 topology 2234 2931 +> 15 0 30 2156 topology 2232 2932 +> 16 0 30 2156 topology 2233 2932 +> 15 0 30 2156 topology 2235 2933 +> 16 0 30 2156 topology 2237 2933 +> 15 0 30 2156 topology 2235 2934 +> 16 0 30 2156 topology 2236 2934 +> 15 0 30 2156 topology 2238 2935 +> 16 0 30 2156 topology 2240 2935 +> 15 0 30 2156 topology 2238 2936 +> 16 0 30 2156 topology 2239 2936 +> 15 0 28 2243 topology 2246 2937 > 16 0 28 2243 topology 2341 2937 -> 15 0 28 2243 topology 2299 2938 +> 15 0 28 2243 topology 2245 2938 > 16 0 28 2243 topology 2341 2938 -> 15 0 29 2243 topology 2259 2939 -> 16 0 29 2243 topology 2261 2939 -> 15 0 29 2243 topology 2313 2940 -> 16 0 29 2243 topology 2315 2940 -> 15 0 28 2243 topology 2329 2941 +> 15 0 28 2243 topology 2249 2939 +> 16 0 28 2243 topology 2341 2939 +> 15 0 28 2243 topology 2248 2940 +> 16 0 28 2243 topology 2341 2940 +> 15 0 28 2243 topology 2252 2941 > 16 0 28 2243 topology 2341 2941 -> 15 0 29 2243 topology 2271 2942 -> 16 0 29 2243 topology 2272 2942 -> 15 0 29 2243 topology 2292 2943 -> 16 0 29 2243 topology 2294 2943 -> 15 0 29 2243 topology 2250 2944 -> 16 0 29 2243 topology 2251 2944 -> 15 0 29 2243 topology 2304 2945 -> 16 0 29 2243 topology 2305 2945 -> 15 0 29 2243 topology 2325 2946 -> 16 0 29 2243 topology 2327 2946 -> 15 0 28 2243 topology 2276 2947 +> 15 0 28 2243 topology 2251 2942 +> 16 0 28 2243 topology 2341 2942 +> 15 0 28 2243 topology 2255 2943 +> 16 0 28 2243 topology 2341 2943 +> 15 0 28 2243 topology 2254 2944 +> 16 0 28 2243 topology 2341 2944 +> 15 0 28 2243 topology 2258 2945 +> 16 0 28 2243 topology 2341 2945 +> 15 0 28 2243 topology 2257 2946 +> 16 0 28 2243 topology 2341 2946 +> 15 0 28 2243 topology 2261 2947 > 16 0 28 2243 topology 2341 2947 -> 15 0 28 2243 topology 2252 2948 +> 15 0 28 2243 topology 2260 2948 > 16 0 28 2243 topology 2341 2948 -> 15 0 29 2243 topology 2283 2949 -> 16 0 29 2243 topology 2284 2949 -> 15 0 29 2243 topology 2337 2950 -> 16 0 29 2243 topology 2338 2950 -> 15 0 28 2243 topology 2336 2951 +> 15 0 28 2243 topology 2264 2949 +> 16 0 28 2243 topology 2341 2949 +> 15 0 28 2243 topology 2263 2950 +> 16 0 28 2243 topology 2341 2950 +> 15 0 28 2243 topology 2267 2951 > 16 0 28 2243 topology 2341 2951 -> 15 0 28 2243 topology 2312 2952 +> 15 0 28 2243 topology 2266 2952 > 16 0 28 2243 topology 2341 2952 -> 15 0 28 2243 topology 2288 2953 +> 15 0 28 2243 topology 2270 2953 > 16 0 28 2243 topology 2341 2953 -> 15 0 29 2243 topology 2262 2954 -> 16 0 29 2243 topology 2263 2954 -> 15 0 28 2243 topology 2264 2955 +> 15 0 28 2243 topology 2269 2954 +> 16 0 28 2243 topology 2341 2954 +> 15 0 28 2243 topology 2273 2955 > 16 0 28 2243 topology 2341 2955 -> 15 0 29 2243 topology 2316 2956 -> 16 0 29 2243 topology 2317 2956 -> 15 0 28 2243 topology 2324 2957 +> 15 0 28 2243 topology 2272 2956 +> 16 0 28 2243 topology 2341 2956 +> 15 0 28 2243 topology 2276 2957 > 16 0 28 2243 topology 2341 2957 -> 15 0 28 2243 topology 2300 2958 +> 15 0 28 2243 topology 2275 2958 > 16 0 28 2243 topology 2341 2958 -> 15 0 29 2243 topology 2295 2959 -> 16 0 29 2243 topology 2296 2959 -> 15 0 29 2243 topology 2244 2960 -> 16 0 29 2243 topology 2246 2960 -> 15 0 28 2243 topology 2272 2961 +> 15 0 28 2243 topology 2279 2959 +> 16 0 28 2243 topology 2341 2959 +> 15 0 28 2243 topology 2278 2960 +> 16 0 28 2243 topology 2341 2960 +> 15 0 28 2243 topology 2282 2961 > 16 0 28 2243 topology 2341 2961 -> 15 0 28 2243 topology 2302 2962 +> 15 0 28 2243 topology 2281 2962 > 16 0 28 2243 topology 2341 2962 -> 15 0 29 2243 topology 2328 2963 -> 16 0 29 2243 topology 2329 2963 -> 15 0 28 2243 topology 2332 2964 +> 15 0 28 2243 topology 2285 2963 +> 16 0 28 2243 topology 2341 2963 +> 15 0 28 2243 topology 2284 2964 > 16 0 28 2243 topology 2341 2964 -> 15 0 28 2243 topology 2254 2965 +> 15 0 28 2243 topology 2288 2965 > 16 0 28 2243 topology 2341 2965 -> 15 0 29 2243 topology 2277 2966 -> 16 0 29 2243 topology 2279 2966 -> 15 0 28 2243 topology 2284 2967 +> 15 0 28 2243 topology 2287 2966 +> 16 0 28 2243 topology 2341 2966 +> 15 0 28 2243 topology 2291 2967 > 16 0 28 2243 topology 2341 2967 -> 15 0 29 2243 topology 2331 2968 -> 16 0 29 2243 topology 2333 2968 -> 15 0 28 2243 topology 2314 2969 +> 15 0 28 2243 topology 2290 2968 +> 16 0 28 2243 topology 2341 2968 +> 15 0 28 2243 topology 2294 2969 > 16 0 28 2243 topology 2341 2969 -> 15 0 28 2243 topology 2266 2970 +> 15 0 28 2243 topology 2293 2970 > 16 0 28 2243 topology 2341 2970 -> 15 0 29 2243 topology 2256 2971 -> 16 0 29 2243 topology 2258 2971 +> 15 0 28 2243 topology 2297 2971 +> 16 0 28 2243 topology 2341 2971 > 15 0 28 2243 topology 2296 2972 > 16 0 28 2243 topology 2341 2972 -> 15 0 29 2243 topology 2310 2973 -> 16 0 29 2243 topology 2312 2973 -> 15 0 28 2243 topology 2326 2974 +> 15 0 28 2243 topology 2300 2973 +> 16 0 28 2243 topology 2341 2973 +> 15 0 28 2243 topology 2299 2974 > 16 0 28 2243 topology 2341 2974 -> 15 0 29 2243 topology 2289 2975 -> 16 0 29 2243 topology 2291 2975 -> 15 0 29 2243 topology 2274 2976 -> 16 0 29 2243 topology 2275 2976 -> 15 0 29 2243 topology 2268 2977 -> 16 0 29 2243 topology 2270 2977 -> 15 0 29 2243 topology 2322 2978 -> 16 0 29 2243 topology 2324 2978 -> 15 0 29 2243 topology 2253 2979 -> 16 0 29 2243 topology 2254 2979 -> 15 0 29 2243 topology 2307 2980 -> 16 0 29 2243 topology 2308 2980 -> 15 0 28 2243 topology 2303 2981 +> 15 0 28 2243 topology 2303 2975 +> 16 0 28 2243 topology 2341 2975 +> 15 0 28 2243 topology 2302 2976 +> 16 0 28 2243 topology 2341 2976 +> 15 0 28 2243 topology 2306 2977 +> 16 0 28 2243 topology 2341 2977 +> 15 0 28 2243 topology 2305 2978 +> 16 0 28 2243 topology 2341 2978 +> 15 0 28 2243 topology 2309 2979 +> 16 0 28 2243 topology 2341 2979 +> 15 0 28 2243 topology 2308 2980 +> 16 0 28 2243 topology 2341 2980 +> 15 0 28 2243 topology 2312 2981 > 16 0 28 2243 topology 2341 2981 -> 15 0 28 2243 topology 2279 2982 +> 15 0 28 2243 topology 2311 2982 > 16 0 28 2243 topology 2341 2982 -> 15 0 28 2243 topology 2255 2983 +> 15 0 28 2243 topology 2315 2983 > 16 0 28 2243 topology 2341 2983 -> 15 0 29 2243 topology 2286 2984 -> 16 0 29 2243 topology 2287 2984 -> 15 0 28 2243 topology 2339 2985 +> 15 0 28 2243 topology 2314 2984 +> 16 0 28 2243 topology 2341 2984 +> 15 0 28 2243 topology 2318 2985 > 16 0 28 2243 topology 2341 2985 -> 15 0 28 2243 topology 2315 2986 +> 15 0 28 2243 topology 2317 2986 > 16 0 28 2243 topology 2341 2986 -> 15 0 28 2243 topology 2291 2987 +> 15 0 28 2243 topology 2321 2987 > 16 0 28 2243 topology 2341 2987 -> 15 0 28 2243 topology 2267 2988 +> 15 0 28 2243 topology 2320 2988 > 16 0 28 2243 topology 2341 2988 -> 15 0 29 2243 topology 2265 2989 -> 16 0 29 2243 topology 2266 2989 -> 15 0 29 2243 topology 2319 2990 -> 16 0 29 2243 topology 2320 2990 +> 15 0 28 2243 topology 2324 2989 +> 16 0 28 2243 topology 2341 2989 +> 15 0 28 2243 topology 2323 2990 +> 16 0 28 2243 topology 2341 2990 > 15 0 28 2243 topology 2327 2991 > 16 0 28 2243 topology 2341 2991 -> 15 0 29 2243 topology 2298 2992 -> 16 0 29 2243 topology 2299 2992 -> 15 0 28 2243 topology 2251 2993 +> 15 0 28 2243 topology 2326 2992 +> 16 0 28 2243 topology 2341 2992 +> 15 0 28 2243 topology 2330 2993 > 16 0 28 2243 topology 2341 2993 -> 15 0 29 2243 topology 2274 2994 -> 16 0 29 2243 topology 2276 2994 -> 15 0 28 2243 topology 2281 2995 +> 15 0 28 2243 topology 2329 2994 +> 16 0 28 2243 topology 2341 2994 +> 15 0 28 2243 topology 2333 2995 > 16 0 28 2243 topology 2341 2995 -> 15 0 28 2243 topology 2311 2996 +> 15 0 28 2243 topology 2332 2996 > 16 0 28 2243 topology 2341 2996 -> 15 0 29 2243 topology 2253 2997 -> 16 0 29 2243 topology 2255 2997 -> 15 0 28 2243 topology 2263 2998 +> 15 0 28 2243 topology 2336 2997 +> 16 0 28 2243 topology 2341 2997 +> 15 0 28 2243 topology 2335 2998 > 16 0 28 2243 topology 2341 2998 -> 15 0 29 2243 topology 2307 2999 -> 16 0 29 2243 topology 2309 2999 -> 15 0 30 2243 topology 2340 3000 -> 16 0 30 2243 topology 2341 3000 -> 15 0 28 2243 topology 2293 3001 -> 16 0 28 2243 topology 2341 3001 -> 15 0 28 2243 topology 2323 3002 -> 16 0 28 2243 topology 2341 3002 -> 15 0 29 2243 topology 2286 3003 -> 16 0 29 2243 topology 2288 3003 -> 15 0 29 2243 topology 2244 3004 -> 16 0 29 2243 topology 2245 3004 -> 15 0 29 2243 topology 2265 3005 -> 16 0 29 2243 topology 2267 3005 -> 15 0 29 2243 topology 2319 3006 -> 16 0 29 2243 topology 2321 3006 -> 15 0 29 2243 topology 2277 3007 -> 16 0 29 2243 topology 2278 3007 -> 15 0 29 2243 topology 2331 3008 -> 16 0 29 2243 topology 2332 3008 -> 15 0 29 2243 topology 2298 3009 -> 16 0 29 2243 topology 2300 3009 -> 15 0 28 2243 topology 2246 3010 -> 16 0 28 2243 topology 2341 3010 -> 15 0 29 2243 topology 2256 3011 -> 16 0 29 2243 topology 2257 3011 -> 15 0 28 2243 topology 2306 3012 -> 16 0 28 2243 topology 2341 3012 -> 15 0 29 2243 topology 2310 3013 -> 16 0 29 2243 topology 2311 3013 -> 15 0 28 2243 topology 2282 3014 -> 16 0 28 2243 topology 2341 3014 -> 15 0 28 2243 topology 2258 3015 -> 16 0 28 2243 topology 2341 3015 -> 15 0 29 2243 topology 2289 3016 -> 16 0 29 2243 topology 2290 3016 -> 15 0 28 2243 topology 2318 3017 -> 16 0 28 2243 topology 2341 3017 -> 15 0 28 2243 topology 2294 3018 -> 16 0 28 2243 topology 2341 3018 -> 15 0 28 2243 topology 2270 3019 -> 16 0 28 2243 topology 2341 3019 -> 15 0 29 2243 topology 2268 3020 -> 16 0 29 2243 topology 2269 3020 -> 15 0 29 2243 topology 2322 3021 -> 16 0 29 2243 topology 2323 3021 -> 15 0 28 2243 topology 2330 3022 -> 16 0 28 2243 topology 2341 3022 -> 15 0 29 2243 topology 2271 3023 -> 16 0 29 2243 topology 2273 3023 -> 15 0 28 2243 topology 2248 3024 -> 16 0 28 2243 topology 2341 3024 -> 15 0 28 2243 topology 2278 3025 -> 16 0 28 2243 topology 2341 3025 -> 15 0 28 2243 topology 2308 3026 -> 16 0 28 2243 topology 2341 3026 -> 15 0 29 2243 topology 2250 3027 -> 16 0 29 2243 topology 2252 3027 -> 15 0 29 2243 topology 2304 3028 -> 16 0 29 2243 topology 2306 3028 -> 15 0 28 2243 topology 2338 3029 -> 16 0 28 2243 topology 2341 3029 -> 15 0 28 2243 topology 2260 3030 -> 16 0 28 2243 topology 2341 3030 -> 15 0 28 2243 topology 2290 3031 -> 16 0 28 2243 topology 2341 3031 -> 15 0 28 2243 topology 2320 3032 -> 16 0 28 2243 topology 2341 3032 -> 15 0 29 2243 topology 2283 3033 -> 16 0 29 2243 topology 2285 3033 -> 15 0 29 2243 topology 2337 3034 -> 16 0 29 2243 topology 2339 3034 -> 15 0 29 2243 topology 2262 3035 -> 16 0 29 2243 topology 2264 3035 -> 15 0 29 2243 topology 2316 3036 -> 16 0 29 2243 topology 2318 3036 -> 15 0 29 2243 topology 2247 3037 -> 16 0 29 2243 topology 2248 3037 -> 15 0 29 2243 topology 2301 3038 -> 16 0 29 2243 topology 2302 3038 -> 15 0 29 2243 topology 2295 3039 -> 16 0 29 2243 topology 2297 3039 -> 15 0 28 2243 topology 2273 3040 -> 16 0 28 2243 topology 2341 3040 -> 15 0 29 2243 topology 2280 3041 -> 16 0 29 2243 topology 2281 3041 -> 15 0 29 2243 topology 2334 3042 -> 16 0 29 2243 topology 2335 3042 -> 15 0 28 2243 topology 2249 3043 -> 16 0 28 2243 topology 2341 3043 -> 15 0 29 2243 topology 2328 3044 -> 16 0 29 2243 topology 2330 3044 -> 15 0 28 2243 topology 2333 3045 -> 16 0 28 2243 topology 2341 3045 -> 15 0 28 2243 topology 2309 3046 -> 16 0 28 2243 topology 2341 3046 -> 15 0 29 2243 topology 2259 3047 -> 16 0 29 2243 topology 2260 3047 -> 15 0 28 2243 topology 2285 3048 -> 16 0 28 2243 topology 2341 3048 -> 15 0 29 2243 topology 2313 3049 -> 16 0 29 2243 topology 2314 3049 -> 15 0 28 2243 topology 2261 3050 -> 16 0 28 2243 topology 2341 3050 -> 15 0 28 2243 topology 2321 3051 -> 16 0 28 2243 topology 2341 3051 -> 15 0 29 2243 topology 2292 3052 -> 16 0 29 2243 topology 2293 3052 -> 15 0 28 2243 topology 2297 3053 -> 16 0 28 2243 topology 2341 3053 -> 15 0 29 2243 topology 2325 3054 -> 16 0 29 2243 topology 2326 3054 -> 15 0 28 2243 topology 2245 3055 -> 16 0 28 2243 topology 2341 3055 -> 15 0 28 2243 topology 2275 3056 -> 16 0 28 2243 topology 2341 3056 -> 15 0 29 2243 topology 2247 3057 -> 16 0 29 2243 topology 2249 3057 -> 15 0 29 2243 topology 2301 3058 -> 16 0 29 2243 topology 2303 3058 -> 15 0 28 2243 topology 2305 3059 -> 16 0 28 2243 topology 2341 3059 -> 15 0 28 2243 topology 2335 3060 -> 16 0 28 2243 topology 2341 3060 -> 15 0 28 2243 topology 2257 3061 -> 16 0 28 2243 topology 2341 3061 -> 15 0 28 2243 topology 2287 3062 -> 16 0 28 2243 topology 2341 3062 -> 15 0 29 2243 topology 2280 3063 -> 16 0 29 2243 topology 2282 3063 -> 15 0 28 2243 topology 2317 3064 -> 16 0 28 2243 topology 2341 3064 -> 15 0 29 2243 topology 2334 3065 -> 16 0 29 2243 topology 2336 3065 +> 15 0 28 2243 topology 2339 2999 +> 16 0 28 2243 topology 2341 2999 +> 15 0 28 2243 topology 2338 3000 +> 16 0 28 2243 topology 2341 3000 +> 15 0 29 2243 topology 2340 3001 +> 16 0 29 2243 topology 2341 3001 +> 15 0 30 2243 topology 2244 3002 +> 16 0 30 2243 topology 2246 3002 +> 15 0 30 2243 topology 2244 3003 +> 16 0 30 2243 topology 2245 3003 +> 15 0 30 2243 topology 2247 3004 +> 16 0 30 2243 topology 2249 3004 +> 15 0 30 2243 topology 2247 3005 +> 16 0 30 2243 topology 2248 3005 +> 15 0 30 2243 topology 2250 3006 +> 16 0 30 2243 topology 2252 3006 +> 15 0 30 2243 topology 2250 3007 +> 16 0 30 2243 topology 2251 3007 +> 15 0 30 2243 topology 2253 3008 +> 16 0 30 2243 topology 2255 3008 +> 15 0 30 2243 topology 2253 3009 +> 16 0 30 2243 topology 2254 3009 +> 15 0 30 2243 topology 2256 3010 +> 16 0 30 2243 topology 2258 3010 +> 15 0 30 2243 topology 2256 3011 +> 16 0 30 2243 topology 2257 3011 +> 15 0 30 2243 topology 2259 3012 +> 16 0 30 2243 topology 2261 3012 +> 15 0 30 2243 topology 2259 3013 +> 16 0 30 2243 topology 2260 3013 +> 15 0 30 2243 topology 2262 3014 +> 16 0 30 2243 topology 2264 3014 +> 15 0 30 2243 topology 2262 3015 +> 16 0 30 2243 topology 2263 3015 +> 15 0 30 2243 topology 2265 3016 +> 16 0 30 2243 topology 2267 3016 +> 15 0 30 2243 topology 2265 3017 +> 16 0 30 2243 topology 2266 3017 +> 15 0 30 2243 topology 2268 3018 +> 16 0 30 2243 topology 2270 3018 +> 15 0 30 2243 topology 2268 3019 +> 16 0 30 2243 topology 2269 3019 +> 15 0 30 2243 topology 2271 3020 +> 16 0 30 2243 topology 2273 3020 +> 15 0 30 2243 topology 2271 3021 +> 16 0 30 2243 topology 2272 3021 +> 15 0 30 2243 topology 2274 3022 +> 16 0 30 2243 topology 2276 3022 +> 15 0 30 2243 topology 2274 3023 +> 16 0 30 2243 topology 2275 3023 +> 15 0 30 2243 topology 2277 3024 +> 16 0 30 2243 topology 2279 3024 +> 15 0 30 2243 topology 2277 3025 +> 16 0 30 2243 topology 2278 3025 +> 15 0 30 2243 topology 2280 3026 +> 16 0 30 2243 topology 2282 3026 +> 15 0 30 2243 topology 2280 3027 +> 16 0 30 2243 topology 2281 3027 +> 15 0 30 2243 topology 2283 3028 +> 16 0 30 2243 topology 2285 3028 +> 15 0 30 2243 topology 2283 3029 +> 16 0 30 2243 topology 2284 3029 +> 15 0 30 2243 topology 2286 3030 +> 16 0 30 2243 topology 2288 3030 +> 15 0 30 2243 topology 2286 3031 +> 16 0 30 2243 topology 2287 3031 +> 15 0 30 2243 topology 2289 3032 +> 16 0 30 2243 topology 2291 3032 +> 15 0 30 2243 topology 2289 3033 +> 16 0 30 2243 topology 2290 3033 +> 15 0 30 2243 topology 2292 3034 +> 16 0 30 2243 topology 2294 3034 +> 15 0 30 2243 topology 2292 3035 +> 16 0 30 2243 topology 2293 3035 +> 15 0 30 2243 topology 2295 3036 +> 16 0 30 2243 topology 2297 3036 +> 15 0 30 2243 topology 2295 3037 +> 16 0 30 2243 topology 2296 3037 +> 15 0 30 2243 topology 2298 3038 +> 16 0 30 2243 topology 2300 3038 +> 15 0 30 2243 topology 2298 3039 +> 16 0 30 2243 topology 2299 3039 +> 15 0 30 2243 topology 2301 3040 +> 16 0 30 2243 topology 2303 3040 +> 15 0 30 2243 topology 2301 3041 +> 16 0 30 2243 topology 2302 3041 +> 15 0 30 2243 topology 2304 3042 +> 16 0 30 2243 topology 2306 3042 +> 15 0 30 2243 topology 2304 3043 +> 16 0 30 2243 topology 2305 3043 +> 15 0 30 2243 topology 2307 3044 +> 16 0 30 2243 topology 2309 3044 +> 15 0 30 2243 topology 2307 3045 +> 16 0 30 2243 topology 2308 3045 +> 15 0 30 2243 topology 2310 3046 +> 16 0 30 2243 topology 2312 3046 +> 15 0 30 2243 topology 2310 3047 +> 16 0 30 2243 topology 2311 3047 +> 15 0 30 2243 topology 2313 3048 +> 16 0 30 2243 topology 2315 3048 +> 15 0 30 2243 topology 2313 3049 +> 16 0 30 2243 topology 2314 3049 +> 15 0 30 2243 topology 2316 3050 +> 16 0 30 2243 topology 2318 3050 +> 15 0 30 2243 topology 2316 3051 +> 16 0 30 2243 topology 2317 3051 +> 15 0 30 2243 topology 2319 3052 +> 16 0 30 2243 topology 2321 3052 +> 15 0 30 2243 topology 2319 3053 +> 16 0 30 2243 topology 2320 3053 +> 15 0 30 2243 topology 2322 3054 +> 16 0 30 2243 topology 2324 3054 +> 15 0 30 2243 topology 2322 3055 +> 16 0 30 2243 topology 2323 3055 +> 15 0 30 2243 topology 2325 3056 +> 16 0 30 2243 topology 2327 3056 +> 15 0 30 2243 topology 2325 3057 +> 16 0 30 2243 topology 2326 3057 +> 15 0 30 2243 topology 2328 3058 +> 16 0 30 2243 topology 2330 3058 +> 15 0 30 2243 topology 2328 3059 +> 16 0 30 2243 topology 2329 3059 +> 15 0 30 2243 topology 2331 3060 +> 16 0 30 2243 topology 2333 3060 +> 15 0 30 2243 topology 2331 3061 +> 16 0 30 2243 topology 2332 3061 +> 15 0 30 2243 topology 2334 3062 +> 16 0 30 2243 topology 2336 3062 +> 15 0 30 2243 topology 2334 3063 +> 16 0 30 2243 topology 2335 3063 +> 15 0 30 2243 topology 2337 3064 +> 16 0 30 2243 topology 2339 3064 +> 15 0 30 2243 topology 2337 3065 +> 16 0 30 2243 topology 2338 3065 > 15 0 31 2056 topology 2344 3066 -> 16 0 31 2056 topology 2241 3066 +> 16 0 31 2056 topology 2343 3066 > 15 0 31 2056 topology 2344 3067 -> 16 0 31 2056 topology 2343 3067 -> 15 0 32 2056 topology 2154 3068 -> 16 0 32 2056 topology 2344 3068 -> 15 0 31 2056 topology 2344 3069 -> 16 0 31 2056 topology 2340 3069 -> 15 0 26 1606 topology 2055 3070 -> 16 0 26 1606 topology 2347 3070 -> 15 0 26 1606 topology 2345 3071 +> 16 0 31 2056 topology 2241 3067 +> 15 0 31 2056 topology 2344 3068 +> 16 0 31 2056 topology 2340 3068 +> 15 0 32 2056 topology 2154 3069 +> 16 0 32 2056 topology 2344 3069 +> 15 0 33 1606 topology 2345 3070 +> 16 0 33 1606 topology 2343 3070 +> 15 0 26 1606 topology 2055 3071 > 16 0 26 1606 topology 2347 3071 -> 15 0 21 1606 topology 2055 3072 -> 16 0 21 1606 topology 2345 3072 -> 15 0 33 1606 topology 2053 3073 -> 16 0 33 1606 topology 2055 3073 -> 15 0 34 1606 topology 2345 3074 -> 16 0 34 1606 topology 2343 3074 -> 15 0 29 2351 topology 2367 3075 -> 16 0 29 2351 topology 2368 3075 -> 15 0 29 2351 topology 2370 3076 -> 16 0 29 2351 topology 2371 3076 -> 15 0 29 2351 topology 2397 3077 -> 16 0 29 2351 topology 2398 3077 -> 15 0 29 2351 topology 2451 3078 -> 16 0 29 2351 topology 2452 3078 -> 15 0 29 2351 topology 2373 3079 -> 16 0 29 2351 topology 2374 3079 -> 15 0 28 2351 topology 2362 3080 +> 15 0 26 1606 topology 2345 3072 +> 16 0 26 1606 topology 2347 3072 +> 15 0 34 1606 topology 2053 3073 +> 16 0 34 1606 topology 2055 3073 +> 15 0 20 1606 topology 2055 3074 +> 16 0 20 1606 topology 2345 3074 +> 15 0 28 2351 topology 2381 3075 +> 16 0 28 2351 topology 2461 3075 +> 15 0 28 2351 topology 2380 3076 +> 16 0 28 2351 topology 2461 3076 +> 15 0 28 2351 topology 2384 3077 +> 16 0 28 2351 topology 2461 3077 +> 15 0 28 2351 topology 2383 3078 +> 16 0 28 2351 topology 2461 3078 +> 15 0 28 2351 topology 2387 3079 +> 16 0 28 2351 topology 2461 3079 +> 15 0 28 2351 topology 2386 3080 > 16 0 28 2351 topology 2461 3080 -> 15 0 29 2351 topology 2376 3081 -> 16 0 29 2351 topology 2377 3081 -> 15 0 29 2351 topology 2430 3082 -> 16 0 29 2351 topology 2431 3082 -> 15 0 28 2351 topology 2384 3083 +> 15 0 28 2351 topology 2390 3081 +> 16 0 28 2351 topology 2461 3081 +> 15 0 28 2351 topology 2389 3082 +> 16 0 28 2351 topology 2461 3082 +> 15 0 28 2351 topology 2393 3083 > 16 0 28 2351 topology 2461 3083 -> 15 0 28 2351 topology 2444 3084 +> 15 0 28 2351 topology 2392 3084 > 16 0 28 2351 topology 2461 3084 -> 15 0 28 2351 topology 2374 3085 +> 15 0 28 2351 topology 2396 3085 > 16 0 28 2351 topology 2461 3085 -> 15 0 28 2351 topology 2420 3086 +> 15 0 28 2351 topology 2395 3086 > 16 0 28 2351 topology 2461 3086 -> 15 0 28 2351 topology 2396 3087 +> 15 0 28 2351 topology 2399 3087 > 16 0 28 2351 topology 2461 3087 -> 15 0 29 2351 topology 2385 3088 -> 16 0 29 2351 topology 2387 3088 -> 15 0 29 2351 topology 2439 3089 -> 16 0 29 2351 topology 2441 3089 -> 15 0 28 2351 topology 2456 3090 +> 15 0 28 2351 topology 2398 3088 +> 16 0 28 2351 topology 2461 3088 +> 15 0 28 2351 topology 2402 3089 +> 16 0 28 2351 topology 2461 3089 +> 15 0 28 2351 topology 2401 3090 > 16 0 28 2351 topology 2461 3090 -> 15 0 28 2351 topology 2432 3091 +> 15 0 28 2351 topology 2405 3091 > 16 0 28 2351 topology 2461 3091 -> 15 0 28 2351 topology 2408 3092 +> 15 0 28 2351 topology 2404 3092 > 16 0 28 2351 topology 2461 3092 -> 15 0 29 2351 topology 2418 3093 -> 16 0 29 2351 topology 2420 3093 -> 15 0 28 2351 topology 2380 3094 +> 15 0 28 2351 topology 2408 3093 +> 16 0 28 2351 topology 2461 3093 +> 15 0 28 2351 topology 2407 3094 > 16 0 28 2351 topology 2461 3094 -> 15 0 28 2351 topology 2410 3095 +> 15 0 28 2351 topology 2354 3095 > 16 0 28 2351 topology 2461 3095 -> 15 0 29 2351 topology 2397 3096 -> 16 0 29 2351 topology 2399 3096 -> 15 0 28 2351 topology 2440 3097 +> 15 0 28 2351 topology 2353 3096 +> 16 0 28 2351 topology 2461 3096 +> 15 0 28 2351 topology 2411 3097 > 16 0 28 2351 topology 2461 3097 -> 15 0 29 2351 topology 2451 3098 -> 16 0 29 2351 topology 2453 3098 -> 15 0 28 2351 topology 2392 3099 +> 15 0 28 2351 topology 2410 3098 +> 16 0 28 2351 topology 2461 3098 +> 15 0 28 2351 topology 2414 3099 > 16 0 28 2351 topology 2461 3099 -> 15 0 29 2351 topology 2409 3100 -> 16 0 29 2351 topology 2410 3100 -> 15 0 28 2351 topology 2422 3101 +> 15 0 28 2351 topology 2413 3100 +> 16 0 28 2351 topology 2461 3100 +> 15 0 28 2351 topology 2417 3101 > 16 0 28 2351 topology 2461 3101 -> 15 0 28 2351 topology 2363 3102 +> 15 0 28 2351 topology 2416 3102 > 16 0 28 2351 topology 2461 3102 -> 15 0 29 2351 topology 2430 3103 -> 16 0 29 2351 topology 2432 3103 -> 15 0 28 2351 topology 2452 3104 +> 15 0 28 2351 topology 2420 3103 +> 16 0 28 2351 topology 2461 3103 +> 15 0 28 2351 topology 2419 3104 > 16 0 28 2351 topology 2461 3104 -> 15 0 28 2351 topology 2404 3105 +> 15 0 28 2351 topology 2423 3105 > 16 0 28 2351 topology 2461 3105 -> 15 0 29 2351 topology 2388 3106 -> 16 0 29 2351 topology 2389 3106 -> 15 0 28 2351 topology 2434 3107 +> 15 0 28 2351 topology 2422 3106 +> 16 0 28 2351 topology 2461 3106 +> 15 0 28 2351 topology 2426 3107 > 16 0 28 2351 topology 2461 3107 -> 15 0 29 2351 topology 2442 3108 -> 16 0 29 2351 topology 2443 3108 -> 15 0 28 2351 topology 2375 3109 +> 15 0 28 2351 topology 2425 3108 +> 16 0 28 2351 topology 2461 3108 +> 15 0 28 2351 topology 2429 3109 > 16 0 28 2351 topology 2461 3109 -> 15 0 29 2351 topology 2421 3110 -> 16 0 29 2351 topology 2422 3110 -> 15 0 29 2351 topology 2400 3111 -> 16 0 29 2351 topology 2401 3111 -> 15 0 29 2351 topology 2454 3112 -> 16 0 29 2351 topology 2455 3112 -> 15 0 28 2351 topology 2359 3113 +> 15 0 28 2351 topology 2428 3110 +> 16 0 28 2351 topology 2461 3110 +> 15 0 28 2351 topology 2432 3111 +> 16 0 28 2351 topology 2461 3111 +> 15 0 28 2351 topology 2431 3112 +> 16 0 28 2351 topology 2461 3112 +> 15 0 28 2351 topology 2435 3113 > 16 0 28 2351 topology 2461 3113 -> 15 0 28 2351 topology 2411 3114 +> 15 0 28 2351 topology 2434 3114 > 16 0 28 2351 topology 2461 3114 -> 15 0 28 2351 topology 2387 3115 +> 15 0 28 2351 topology 2438 3115 > 16 0 28 2351 topology 2461 3115 -> 15 0 29 2351 topology 2433 3116 -> 16 0 29 2351 topology 2434 3116 -> 15 0 29 2351 topology 2352 3117 -> 16 0 29 2351 topology 2354 3117 -> 15 0 28 2351 topology 2371 3118 +> 15 0 28 2351 topology 2437 3116 +> 16 0 28 2351 topology 2461 3116 +> 15 0 28 2351 topology 2357 3117 +> 16 0 28 2351 topology 2461 3117 +> 15 0 28 2351 topology 2356 3118 > 16 0 28 2351 topology 2461 3118 -> 15 0 28 2351 topology 2447 3119 +> 15 0 28 2351 topology 2441 3119 > 16 0 28 2351 topology 2461 3119 -> 15 0 29 2351 topology 2382 3120 -> 16 0 29 2351 topology 2384 3120 -> 15 0 28 2351 topology 2423 3121 +> 15 0 28 2351 topology 2440 3120 +> 16 0 28 2351 topology 2461 3120 +> 15 0 28 2351 topology 2444 3121 > 16 0 28 2351 topology 2461 3121 -> 15 0 28 2351 topology 2399 3122 +> 15 0 28 2351 topology 2443 3122 > 16 0 28 2351 topology 2461 3122 -> 15 0 30 2351 topology 2460 3123 -> 16 0 30 2351 topology 2461 3123 -> 15 0 29 2351 topology 2358 3124 -> 16 0 29 2351 topology 2360 3124 -> 15 0 28 2351 topology 2459 3125 +> 15 0 28 2351 topology 2447 3123 +> 16 0 28 2351 topology 2461 3123 +> 15 0 28 2351 topology 2446 3124 +> 16 0 28 2351 topology 2461 3124 +> 15 0 28 2351 topology 2450 3125 > 16 0 28 2351 topology 2461 3125 -> 15 0 29 2351 topology 2415 3126 -> 16 0 29 2351 topology 2417 3126 -> 15 0 28 2351 topology 2435 3127 +> 15 0 28 2351 topology 2449 3126 +> 16 0 28 2351 topology 2461 3126 +> 15 0 28 2351 topology 2453 3127 > 16 0 28 2351 topology 2461 3127 -> 15 0 29 2351 topology 2364 3128 -> 16 0 29 2351 topology 2366 3128 -> 15 0 29 2351 topology 2394 3129 -> 16 0 29 2351 topology 2396 3129 -> 15 0 29 2351 topology 2448 3130 -> 16 0 29 2351 topology 2450 3130 -> 15 0 29 2351 topology 2370 3131 -> 16 0 29 2351 topology 2372 3131 -> 15 0 28 2351 topology 2354 3132 +> 15 0 28 2351 topology 2452 3128 +> 16 0 28 2351 topology 2461 3128 +> 15 0 28 2351 topology 2456 3129 +> 16 0 28 2351 topology 2461 3129 +> 15 0 28 2351 topology 2455 3130 +> 16 0 28 2351 topology 2461 3130 +> 15 0 28 2351 topology 2459 3131 +> 16 0 28 2351 topology 2461 3131 +> 15 0 28 2351 topology 2458 3132 > 16 0 28 2351 topology 2461 3132 -> 15 0 29 2351 topology 2379 3133 -> 16 0 29 2351 topology 2380 3133 -> 15 0 28 2351 topology 2389 3134 +> 15 0 28 2351 topology 2360 3133 +> 16 0 28 2351 topology 2461 3133 +> 15 0 28 2351 topology 2359 3134 > 16 0 28 2351 topology 2461 3134 -> 15 0 28 2351 topology 2419 3135 +> 15 0 28 2351 topology 2363 3135 > 16 0 28 2351 topology 2461 3135 -> 15 0 29 2351 topology 2427 3136 -> 16 0 29 2351 topology 2429 3136 -> 15 0 28 2351 topology 2449 3137 +> 15 0 28 2351 topology 2362 3136 +> 16 0 28 2351 topology 2461 3136 +> 15 0 28 2351 topology 2366 3137 > 16 0 28 2351 topology 2461 3137 -> 15 0 29 2351 topology 2376 3138 -> 16 0 29 2351 topology 2378 3138 -> 15 0 28 2351 topology 2366 3139 +> 15 0 28 2351 topology 2365 3138 +> 16 0 28 2351 topology 2461 3138 +> 15 0 28 2351 topology 2369 3139 > 16 0 28 2351 topology 2461 3139 -> 15 0 28 2351 topology 2401 3140 +> 15 0 28 2351 topology 2368 3140 > 16 0 28 2351 topology 2461 3140 -> 15 0 29 2351 topology 2412 3141 -> 16 0 29 2351 topology 2413 3141 -> 15 0 29 2351 topology 2406 3142 -> 16 0 29 2351 topology 2408 3142 -> 15 0 28 2351 topology 2431 3143 +> 15 0 28 2351 topology 2372 3141 +> 16 0 28 2351 topology 2461 3141 +> 15 0 28 2351 topology 2371 3142 +> 16 0 28 2351 topology 2461 3142 +> 15 0 28 2351 topology 2375 3143 > 16 0 28 2351 topology 2461 3143 -> 15 0 28 2351 topology 2378 3144 +> 15 0 28 2351 topology 2374 3144 > 16 0 28 2351 topology 2461 3144 -> 15 0 29 2351 topology 2391 3145 -> 16 0 29 2351 topology 2392 3145 -> 15 0 29 2351 topology 2445 3146 -> 16 0 29 2351 topology 2446 3146 -> 15 0 29 2351 topology 2424 3147 -> 16 0 29 2351 topology 2425 3147 -> 15 0 28 2351 topology 2356 3148 -> 16 0 28 2351 topology 2461 3148 -> 15 0 29 2351 topology 2403 3149 -> 16 0 29 2351 topology 2404 3149 -> 15 0 29 2351 topology 2457 3150 -> 16 0 29 2351 topology 2458 3150 -> 15 0 28 2351 topology 2368 3151 -> 16 0 28 2351 topology 2461 3151 -> 15 0 28 2351 topology 2414 3152 -> 16 0 28 2351 topology 2461 3152 -> 15 0 29 2351 topology 2379 3153 -> 16 0 29 2351 topology 2381 3153 -> 15 0 28 2351 topology 2390 3154 -> 16 0 28 2351 topology 2461 3154 -> 15 0 29 2351 topology 2436 3155 -> 16 0 29 2351 topology 2437 3155 -> 15 0 28 2351 topology 2450 3156 -> 16 0 28 2351 topology 2461 3156 -> 15 0 28 2351 topology 2426 3157 -> 16 0 28 2351 topology 2461 3157 -> 15 0 28 2351 topology 2402 3158 -> 16 0 28 2351 topology 2461 3158 -> 15 0 29 2351 topology 2412 3159 -> 16 0 29 2351 topology 2414 3159 -> 15 0 28 2351 topology 2438 3160 -> 16 0 28 2351 topology 2461 3160 -> 15 0 29 2351 topology 2391 3161 -> 16 0 29 2351 topology 2393 3161 -> 15 0 29 2351 topology 2445 3162 -> 16 0 29 2351 topology 2447 3162 -> 15 0 28 2351 topology 2386 3163 -> 16 0 28 2351 topology 2461 3163 -> 15 0 29 2351 topology 2424 3164 -> 16 0 29 2351 topology 2426 3164 -> 15 0 28 2351 topology 2416 3165 -> 16 0 28 2351 topology 2461 3165 -> 15 0 28 2351 topology 2357 3166 -> 16 0 28 2351 topology 2461 3166 -> 15 0 28 2351 topology 2446 3167 -> 16 0 28 2351 topology 2461 3167 -> 15 0 29 2351 topology 2382 3168 -> 16 0 29 2351 topology 2383 3168 -> 15 0 28 2351 topology 2398 3169 -> 16 0 28 2351 topology 2461 3169 -> 15 0 29 2351 topology 2403 3170 -> 16 0 29 2351 topology 2405 3170 -> 15 0 29 2351 topology 2457 3171 -> 16 0 29 2351 topology 2459 3171 -> 15 0 28 2351 topology 2428 3172 -> 16 0 28 2351 topology 2461 3172 -> 15 0 28 2351 topology 2369 3173 -> 16 0 28 2351 topology 2461 3173 -> 15 0 28 2351 topology 2458 3174 -> 16 0 28 2351 topology 2461 3174 -> 15 0 29 2351 topology 2415 3175 -> 16 0 29 2351 topology 2416 3175 -> 15 0 29 2351 topology 2436 3176 -> 16 0 29 2351 topology 2438 3176 -> 15 0 29 2351 topology 2394 3177 -> 16 0 29 2351 topology 2395 3177 -> 15 0 29 2351 topology 2448 3178 -> 16 0 29 2351 topology 2449 3178 -> 15 0 28 2351 topology 2353 3179 -> 16 0 28 2351 topology 2461 3179 -> 15 0 29 2351 topology 2427 3180 -> 16 0 29 2351 topology 2428 3180 -> 15 0 28 2351 topology 2381 3181 -> 16 0 28 2351 topology 2461 3181 -> 15 0 28 2351 topology 2365 3182 -> 16 0 28 2351 topology 2461 3182 -> 15 0 29 2351 topology 2406 3183 -> 16 0 29 2351 topology 2407 3183 -> 15 0 28 2351 topology 2441 3184 -> 16 0 28 2351 topology 2461 3184 -> 15 0 28 2351 topology 2417 3185 -> 16 0 28 2351 topology 2461 3185 -> 15 0 28 2351 topology 2393 3186 -> 16 0 28 2351 topology 2461 3186 -> 15 0 29 2351 topology 2355 3187 -> 16 0 29 2351 topology 2357 3187 -> 15 0 28 2351 topology 2377 3188 -> 16 0 28 2351 topology 2461 3188 -> 15 0 29 2351 topology 2409 3189 -> 16 0 29 2351 topology 2411 3189 -> 15 0 28 2351 topology 2453 3190 -> 16 0 28 2351 topology 2461 3190 -> 15 0 28 2351 topology 2429 3191 -> 16 0 28 2351 topology 2461 3191 -> 15 0 28 2351 topology 2405 3192 -> 16 0 28 2351 topology 2461 3192 -> 15 0 29 2351 topology 2361 3193 -> 16 0 29 2351 topology 2363 3193 -> 15 0 29 2351 topology 2388 3194 -> 16 0 29 2351 topology 2390 3194 -> 15 0 29 2351 topology 2442 3195 -> 16 0 29 2351 topology 2444 3195 -> 15 0 29 2351 topology 2367 3196 -> 16 0 29 2351 topology 2369 3196 -> 15 0 29 2351 topology 2421 3197 -> 16 0 29 2351 topology 2423 3197 -> 15 0 28 2351 topology 2383 3198 -> 16 0 28 2351 topology 2461 3198 -> 15 0 28 2351 topology 2413 3199 -> 16 0 28 2351 topology 2461 3199 -> 15 0 29 2351 topology 2352 3200 -> 16 0 29 2351 topology 2353 3200 -> 15 0 28 2351 topology 2443 3201 -> 16 0 28 2351 topology 2461 3201 -> 15 0 29 2351 topology 2373 3202 -> 16 0 29 2351 topology 2375 3202 -> 15 0 29 2351 topology 2400 3203 -> 16 0 29 2351 topology 2402 3203 -> 15 0 29 2351 topology 2454 3204 -> 16 0 29 2351 topology 2456 3204 -> 15 0 29 2351 topology 2355 3205 -> 16 0 29 2351 topology 2356 3205 -> 15 0 28 2351 topology 2360 3206 -> 16 0 28 2351 topology 2461 3206 -> 15 0 28 2351 topology 2395 3207 -> 16 0 28 2351 topology 2461 3207 -> 15 0 28 2351 topology 2425 3208 -> 16 0 28 2351 topology 2461 3208 -> 15 0 29 2351 topology 2358 3209 -> 16 0 29 2351 topology 2359 3209 -> 15 0 29 2351 topology 2385 3210 -> 16 0 29 2351 topology 2386 3210 -> 15 0 29 2351 topology 2439 3211 -> 16 0 29 2351 topology 2440 3211 -> 15 0 28 2351 topology 2455 3212 -> 16 0 28 2351 topology 2461 3212 -> 15 0 29 2351 topology 2433 3213 -> 16 0 29 2351 topology 2435 3213 -> 15 0 29 2351 topology 2361 3214 -> 16 0 29 2351 topology 2362 3214 -> 15 0 28 2351 topology 2372 3215 -> 16 0 28 2351 topology 2461 3215 -> 15 0 28 2351 topology 2407 3216 -> 16 0 28 2351 topology 2461 3216 -> 15 0 28 2351 topology 2437 3217 -> 16 0 28 2351 topology 2461 3217 -> 15 0 29 2351 topology 2364 3218 -> 16 0 29 2351 topology 2365 3218 -> 15 0 29 2351 topology 2418 3219 -> 16 0 29 2351 topology 2419 3219 -> 15 0 28 2462 topology 2521 3220 +> 15 0 28 2351 topology 2378 3145 +> 16 0 28 2351 topology 2461 3145 +> 15 0 28 2351 topology 2377 3146 +> 16 0 28 2351 topology 2461 3146 +> 15 0 29 2351 topology 2460 3147 +> 16 0 29 2351 topology 2461 3147 +> 15 0 30 2351 topology 2379 3148 +> 16 0 30 2351 topology 2381 3148 +> 15 0 30 2351 topology 2379 3149 +> 16 0 30 2351 topology 2380 3149 +> 15 0 30 2351 topology 2382 3150 +> 16 0 30 2351 topology 2384 3150 +> 15 0 30 2351 topology 2382 3151 +> 16 0 30 2351 topology 2383 3151 +> 15 0 30 2351 topology 2385 3152 +> 16 0 30 2351 topology 2387 3152 +> 15 0 30 2351 topology 2385 3153 +> 16 0 30 2351 topology 2386 3153 +> 15 0 30 2351 topology 2388 3154 +> 16 0 30 2351 topology 2390 3154 +> 15 0 30 2351 topology 2388 3155 +> 16 0 30 2351 topology 2389 3155 +> 15 0 30 2351 topology 2391 3156 +> 16 0 30 2351 topology 2393 3156 +> 15 0 30 2351 topology 2391 3157 +> 16 0 30 2351 topology 2392 3157 +> 15 0 30 2351 topology 2394 3158 +> 16 0 30 2351 topology 2396 3158 +> 15 0 30 2351 topology 2394 3159 +> 16 0 30 2351 topology 2395 3159 +> 15 0 30 2351 topology 2397 3160 +> 16 0 30 2351 topology 2399 3160 +> 15 0 30 2351 topology 2397 3161 +> 16 0 30 2351 topology 2398 3161 +> 15 0 30 2351 topology 2400 3162 +> 16 0 30 2351 topology 2402 3162 +> 15 0 30 2351 topology 2400 3163 +> 16 0 30 2351 topology 2401 3163 +> 15 0 30 2351 topology 2403 3164 +> 16 0 30 2351 topology 2405 3164 +> 15 0 30 2351 topology 2403 3165 +> 16 0 30 2351 topology 2404 3165 +> 15 0 30 2351 topology 2406 3166 +> 16 0 30 2351 topology 2408 3166 +> 15 0 30 2351 topology 2406 3167 +> 16 0 30 2351 topology 2407 3167 +> 15 0 30 2351 topology 2352 3168 +> 16 0 30 2351 topology 2354 3168 +> 15 0 30 2351 topology 2352 3169 +> 16 0 30 2351 topology 2353 3169 +> 15 0 30 2351 topology 2409 3170 +> 16 0 30 2351 topology 2411 3170 +> 15 0 30 2351 topology 2409 3171 +> 16 0 30 2351 topology 2410 3171 +> 15 0 30 2351 topology 2412 3172 +> 16 0 30 2351 topology 2414 3172 +> 15 0 30 2351 topology 2412 3173 +> 16 0 30 2351 topology 2413 3173 +> 15 0 30 2351 topology 2415 3174 +> 16 0 30 2351 topology 2417 3174 +> 15 0 30 2351 topology 2415 3175 +> 16 0 30 2351 topology 2416 3175 +> 15 0 30 2351 topology 2418 3176 +> 16 0 30 2351 topology 2420 3176 +> 15 0 30 2351 topology 2418 3177 +> 16 0 30 2351 topology 2419 3177 +> 15 0 30 2351 topology 2421 3178 +> 16 0 30 2351 topology 2423 3178 +> 15 0 30 2351 topology 2421 3179 +> 16 0 30 2351 topology 2422 3179 +> 15 0 30 2351 topology 2424 3180 +> 16 0 30 2351 topology 2426 3180 +> 15 0 30 2351 topology 2424 3181 +> 16 0 30 2351 topology 2425 3181 +> 15 0 30 2351 topology 2427 3182 +> 16 0 30 2351 topology 2429 3182 +> 15 0 30 2351 topology 2427 3183 +> 16 0 30 2351 topology 2428 3183 +> 15 0 30 2351 topology 2430 3184 +> 16 0 30 2351 topology 2432 3184 +> 15 0 30 2351 topology 2430 3185 +> 16 0 30 2351 topology 2431 3185 +> 15 0 30 2351 topology 2433 3186 +> 16 0 30 2351 topology 2435 3186 +> 15 0 30 2351 topology 2433 3187 +> 16 0 30 2351 topology 2434 3187 +> 15 0 30 2351 topology 2436 3188 +> 16 0 30 2351 topology 2438 3188 +> 15 0 30 2351 topology 2436 3189 +> 16 0 30 2351 topology 2437 3189 +> 15 0 30 2351 topology 2355 3190 +> 16 0 30 2351 topology 2357 3190 +> 15 0 30 2351 topology 2355 3191 +> 16 0 30 2351 topology 2356 3191 +> 15 0 30 2351 topology 2439 3192 +> 16 0 30 2351 topology 2441 3192 +> 15 0 30 2351 topology 2439 3193 +> 16 0 30 2351 topology 2440 3193 +> 15 0 30 2351 topology 2442 3194 +> 16 0 30 2351 topology 2444 3194 +> 15 0 30 2351 topology 2442 3195 +> 16 0 30 2351 topology 2443 3195 +> 15 0 30 2351 topology 2445 3196 +> 16 0 30 2351 topology 2447 3196 +> 15 0 30 2351 topology 2445 3197 +> 16 0 30 2351 topology 2446 3197 +> 15 0 30 2351 topology 2448 3198 +> 16 0 30 2351 topology 2450 3198 +> 15 0 30 2351 topology 2448 3199 +> 16 0 30 2351 topology 2449 3199 +> 15 0 30 2351 topology 2451 3200 +> 16 0 30 2351 topology 2453 3200 +> 15 0 30 2351 topology 2451 3201 +> 16 0 30 2351 topology 2452 3201 +> 15 0 30 2351 topology 2454 3202 +> 16 0 30 2351 topology 2456 3202 +> 15 0 30 2351 topology 2454 3203 +> 16 0 30 2351 topology 2455 3203 +> 15 0 30 2351 topology 2457 3204 +> 16 0 30 2351 topology 2459 3204 +> 15 0 30 2351 topology 2457 3205 +> 16 0 30 2351 topology 2458 3205 +> 15 0 30 2351 topology 2358 3206 +> 16 0 30 2351 topology 2360 3206 +> 15 0 30 2351 topology 2358 3207 +> 16 0 30 2351 topology 2359 3207 +> 15 0 30 2351 topology 2361 3208 +> 16 0 30 2351 topology 2363 3208 +> 15 0 30 2351 topology 2361 3209 +> 16 0 30 2351 topology 2362 3209 +> 15 0 30 2351 topology 2364 3210 +> 16 0 30 2351 topology 2366 3210 +> 15 0 30 2351 topology 2364 3211 +> 16 0 30 2351 topology 2365 3211 +> 15 0 30 2351 topology 2367 3212 +> 16 0 30 2351 topology 2369 3212 +> 15 0 30 2351 topology 2367 3213 +> 16 0 30 2351 topology 2368 3213 +> 15 0 30 2351 topology 2370 3214 +> 16 0 30 2351 topology 2372 3214 +> 15 0 30 2351 topology 2370 3215 +> 16 0 30 2351 topology 2371 3215 +> 15 0 30 2351 topology 2373 3216 +> 16 0 30 2351 topology 2375 3216 +> 15 0 30 2351 topology 2373 3217 +> 16 0 30 2351 topology 2374 3217 +> 15 0 30 2351 topology 2376 3218 +> 16 0 30 2351 topology 2378 3218 +> 15 0 30 2351 topology 2376 3219 +> 16 0 30 2351 topology 2377 3219 +> 15 0 28 2462 topology 2465 3220 > 16 0 28 2462 topology 2572 3220 -> 15 0 28 2462 topology 2551 3221 +> 15 0 28 2462 topology 2464 3221 > 16 0 28 2462 topology 2572 3221 -> 15 0 29 2462 topology 2505 3222 -> 16 0 29 2462 topology 2506 3222 -> 15 0 29 2462 topology 2499 3223 -> 16 0 29 2462 topology 2501 3223 -> 15 0 29 2462 topology 2553 3224 -> 16 0 29 2462 topology 2555 3224 -> 15 0 29 2462 topology 2484 3225 -> 16 0 29 2462 topology 2485 3225 -> 15 0 29 2462 topology 2538 3226 -> 16 0 29 2462 topology 2539 3226 -> 15 0 29 2462 topology 2463 3227 -> 16 0 29 2462 topology 2464 3227 -> 15 0 29 2462 topology 2517 3228 -> 16 0 29 2462 topology 2518 3228 -> 15 0 28 2462 topology 2504 3229 +> 15 0 28 2462 topology 2468 3222 +> 16 0 28 2462 topology 2572 3222 +> 15 0 28 2462 topology 2467 3223 +> 16 0 28 2462 topology 2572 3223 +> 15 0 28 2462 topology 2471 3224 +> 16 0 28 2462 topology 2572 3224 +> 15 0 28 2462 topology 2470 3225 +> 16 0 28 2462 topology 2572 3225 +> 15 0 28 2462 topology 2474 3226 +> 16 0 28 2462 topology 2572 3226 +> 15 0 28 2462 topology 2473 3227 +> 16 0 28 2462 topology 2572 3227 +> 15 0 28 2462 topology 2477 3228 +> 16 0 28 2462 topology 2572 3228 +> 15 0 28 2462 topology 2476 3229 > 16 0 28 2462 topology 2572 3229 > 15 0 28 2462 topology 2480 3230 > 16 0 28 2462 topology 2572 3230 -> 15 0 29 2462 topology 2496 3231 -> 16 0 29 2462 topology 2497 3231 -> 15 0 29 2462 topology 2550 3232 -> 16 0 29 2462 topology 2551 3232 -> 15 0 28 2462 topology 2564 3233 +> 15 0 28 2462 topology 2479 3231 +> 16 0 28 2462 topology 2572 3231 +> 15 0 28 2462 topology 2483 3232 +> 16 0 28 2462 topology 2572 3232 +> 15 0 28 2462 topology 2482 3233 > 16 0 28 2462 topology 2572 3233 -> 15 0 28 2462 topology 2540 3234 +> 15 0 28 2462 topology 2486 3234 > 16 0 28 2462 topology 2572 3234 -> 15 0 29 2462 topology 2472 3235 -> 16 0 29 2462 topology 2474 3235 -> 15 0 28 2462 topology 2516 3236 +> 15 0 28 2462 topology 2485 3235 +> 16 0 28 2462 topology 2572 3235 +> 15 0 28 2462 topology 2489 3236 > 16 0 28 2462 topology 2572 3236 -> 15 0 28 2462 topology 2492 3237 +> 15 0 28 2462 topology 2488 3237 > 16 0 28 2462 topology 2572 3237 -> 15 0 29 2462 topology 2529 3238 -> 16 0 29 2462 topology 2530 3238 -> 15 0 28 2462 topology 2468 3239 +> 15 0 28 2462 topology 2492 3238 +> 16 0 28 2462 topology 2572 3238 +> 15 0 28 2462 topology 2491 3239 > 16 0 28 2462 topology 2572 3239 -> 15 0 28 2462 topology 2552 3240 +> 15 0 28 2462 topology 2495 3240 > 16 0 28 2462 topology 2572 3240 -> 15 0 29 2462 topology 2505 3241 -> 16 0 29 2462 topology 2507 3241 -> 15 0 28 2462 topology 2528 3242 +> 15 0 28 2462 topology 2494 3241 +> 16 0 28 2462 topology 2572 3241 +> 15 0 28 2462 topology 2498 3242 > 16 0 28 2462 topology 2572 3242 -> 15 0 29 2462 topology 2484 3243 -> 16 0 29 2462 topology 2486 3243 -> 15 0 29 2462 topology 2538 3244 -> 16 0 29 2462 topology 2540 3244 -> 15 0 28 2462 topology 2476 3245 +> 15 0 28 2462 topology 2497 3243 +> 16 0 28 2462 topology 2572 3243 +> 15 0 28 2462 topology 2501 3244 +> 16 0 28 2462 topology 2572 3244 +> 15 0 28 2462 topology 2500 3245 > 16 0 28 2462 topology 2572 3245 -> 15 0 28 2462 topology 2506 3246 +> 15 0 28 2462 topology 2504 3246 > 16 0 28 2462 topology 2572 3246 -> 15 0 28 2462 topology 2536 3247 +> 15 0 28 2462 topology 2503 3247 > 16 0 28 2462 topology 2572 3247 -> 15 0 29 2462 topology 2463 3248 -> 16 0 29 2462 topology 2465 3248 -> 15 0 29 2462 topology 2517 3249 -> 16 0 29 2462 topology 2519 3249 -> 15 0 28 2462 topology 2566 3250 +> 15 0 28 2462 topology 2507 3248 +> 16 0 28 2462 topology 2572 3248 +> 15 0 28 2462 topology 2506 3249 +> 16 0 28 2462 topology 2572 3249 +> 15 0 28 2462 topology 2510 3250 > 16 0 28 2462 topology 2572 3250 -> 15 0 28 2462 topology 2488 3251 +> 15 0 28 2462 topology 2509 3251 > 16 0 28 2462 topology 2572 3251 -> 15 0 28 2462 topology 2518 3252 +> 15 0 28 2462 topology 2513 3252 > 16 0 28 2462 topology 2572 3252 -> 15 0 29 2462 topology 2475 3253 -> 16 0 29 2462 topology 2476 3253 -> 15 0 28 2462 topology 2548 3254 +> 15 0 28 2462 topology 2512 3253 +> 16 0 28 2462 topology 2572 3253 +> 15 0 28 2462 topology 2516 3254 > 16 0 28 2462 topology 2572 3254 -> 15 0 28 2462 topology 2470 3255 +> 15 0 28 2462 topology 2515 3255 > 16 0 28 2462 topology 2572 3255 -> 15 0 29 2462 topology 2496 3256 -> 16 0 29 2462 topology 2498 3256 -> 15 0 29 2462 topology 2550 3257 -> 16 0 29 2462 topology 2552 3257 -> 15 0 28 2462 topology 2500 3258 +> 15 0 28 2462 topology 2519 3256 +> 16 0 28 2462 topology 2572 3256 +> 15 0 28 2462 topology 2518 3257 +> 16 0 28 2462 topology 2572 3257 +> 15 0 28 2462 topology 2522 3258 > 16 0 28 2462 topology 2572 3258 -> 15 0 28 2462 topology 2530 3259 +> 15 0 28 2462 topology 2521 3259 > 16 0 28 2462 topology 2572 3259 -> 15 0 29 2462 topology 2508 3260 -> 16 0 29 2462 topology 2509 3260 -> 15 0 28 2462 topology 2560 3261 +> 15 0 28 2462 topology 2525 3260 +> 16 0 28 2462 topology 2572 3260 +> 15 0 28 2462 topology 2524 3261 > 16 0 28 2462 topology 2572 3261 -> 15 0 29 2462 topology 2562 3262 -> 16 0 29 2462 topology 2563 3262 -> 15 0 29 2462 topology 2529 3263 -> 16 0 29 2462 topology 2531 3263 -> 15 0 29 2462 topology 2487 3264 -> 16 0 29 2462 topology 2488 3264 -> 15 0 29 2462 topology 2541 3265 -> 16 0 29 2462 topology 2542 3265 -> 15 0 29 2462 topology 2466 3266 -> 16 0 29 2462 topology 2467 3266 -> 15 0 29 2462 topology 2520 3267 -> 16 0 29 2462 topology 2521 3267 -> 15 0 28 2462 topology 2507 3268 +> 15 0 28 2462 topology 2528 3262 +> 16 0 28 2462 topology 2572 3262 +> 15 0 28 2462 topology 2527 3263 +> 16 0 28 2462 topology 2572 3263 +> 15 0 28 2462 topology 2531 3264 +> 16 0 28 2462 topology 2572 3264 +> 15 0 28 2462 topology 2530 3265 +> 16 0 28 2462 topology 2572 3265 +> 15 0 28 2462 topology 2534 3266 +> 16 0 28 2462 topology 2572 3266 +> 15 0 28 2462 topology 2533 3267 +> 16 0 28 2462 topology 2572 3267 +> 15 0 28 2462 topology 2537 3268 > 16 0 28 2462 topology 2572 3268 -> 15 0 28 2462 topology 2483 3269 +> 15 0 28 2462 topology 2536 3269 > 16 0 28 2462 topology 2572 3269 -> 15 0 29 2462 topology 2499 3270 -> 16 0 29 2462 topology 2500 3270 -> 15 0 29 2462 topology 2553 3271 -> 16 0 29 2462 topology 2554 3271 -> 15 0 28 2462 topology 2567 3272 +> 15 0 28 2462 topology 2540 3270 +> 16 0 28 2462 topology 2572 3270 +> 15 0 28 2462 topology 2539 3271 +> 16 0 28 2462 topology 2572 3271 +> 15 0 28 2462 topology 2543 3272 > 16 0 28 2462 topology 2572 3272 -> 15 0 28 2462 topology 2543 3273 +> 15 0 28 2462 topology 2542 3273 > 16 0 28 2462 topology 2572 3273 -> 15 0 28 2462 topology 2519 3274 +> 15 0 28 2462 topology 2546 3274 > 16 0 28 2462 topology 2572 3274 -> 15 0 28 2462 topology 2495 3275 +> 15 0 28 2462 topology 2545 3275 > 16 0 28 2462 topology 2572 3275 -> 15 0 29 2462 topology 2502 3276 -> 16 0 29 2462 topology 2504 3276 -> 15 0 28 2462 topology 2471 3277 +> 15 0 28 2462 topology 2549 3276 +> 16 0 28 2462 topology 2572 3276 +> 15 0 28 2462 topology 2548 3277 > 16 0 28 2462 topology 2572 3277 -> 15 0 28 2462 topology 2555 3278 +> 15 0 28 2462 topology 2552 3278 > 16 0 28 2462 topology 2572 3278 -> 15 0 28 2462 topology 2531 3279 +> 15 0 28 2462 topology 2551 3279 > 16 0 28 2462 topology 2572 3279 -> 15 0 29 2462 topology 2481 3280 -> 16 0 29 2462 topology 2483 3280 -> 15 0 29 2462 topology 2535 3281 -> 16 0 29 2462 topology 2537 3281 -> 15 0 28 2462 topology 2473 3282 +> 15 0 28 2462 topology 2555 3280 +> 16 0 28 2462 topology 2572 3280 +> 15 0 28 2462 topology 2554 3281 +> 16 0 28 2462 topology 2572 3281 +> 15 0 28 2462 topology 2558 3282 > 16 0 28 2462 topology 2572 3282 -> 15 0 28 2462 topology 2503 3283 +> 15 0 28 2462 topology 2557 3283 > 16 0 28 2462 topology 2572 3283 -> 15 0 29 2462 topology 2514 3284 -> 16 0 29 2462 topology 2516 3284 -> 15 0 28 2462 topology 2533 3285 +> 15 0 28 2462 topology 2561 3284 +> 16 0 28 2462 topology 2572 3284 +> 15 0 28 2462 topology 2560 3285 > 16 0 28 2462 topology 2572 3285 -> 15 0 29 2462 topology 2568 3286 -> 16 0 29 2462 topology 2570 3286 +> 15 0 28 2462 topology 2564 3286 +> 16 0 28 2462 topology 2572 3286 > 15 0 28 2462 topology 2563 3287 > 16 0 28 2462 topology 2572 3287 -> 15 0 28 2462 topology 2485 3288 +> 15 0 28 2462 topology 2567 3288 > 16 0 28 2462 topology 2572 3288 -> 15 0 28 2462 topology 2515 3289 +> 15 0 28 2462 topology 2566 3289 > 16 0 28 2462 topology 2572 3289 -> 15 0 29 2462 topology 2493 3290 -> 16 0 29 2462 topology 2495 3290 -> 15 0 28 2462 topology 2545 3291 +> 15 0 28 2462 topology 2570 3290 +> 16 0 28 2462 topology 2572 3290 +> 15 0 28 2462 topology 2569 3291 > 16 0 28 2462 topology 2572 3291 -> 15 0 29 2462 topology 2547 3292 -> 16 0 29 2462 topology 2549 3292 -> 15 0 28 2462 topology 2467 3293 -> 16 0 28 2462 topology 2572 3293 -> 15 0 28 2462 topology 2497 3294 -> 16 0 28 2462 topology 2572 3294 -> 15 0 29 2462 topology 2478 3295 -> 16 0 29 2462 topology 2479 3295 -> 15 0 28 2462 topology 2527 3296 -> 16 0 28 2462 topology 2572 3296 -> 15 0 29 2462 topology 2532 3297 -> 16 0 29 2462 topology 2533 3297 -> 15 0 29 2462 topology 2526 3298 -> 16 0 29 2462 topology 2528 3298 -> 15 0 28 2462 topology 2557 3299 -> 16 0 28 2462 topology 2572 3299 -> 15 0 29 2462 topology 2511 3300 -> 16 0 29 2462 topology 2512 3300 -> 15 0 29 2462 topology 2565 3301 -> 16 0 29 2462 topology 2566 3301 -> 15 0 29 2462 topology 2559 3302 -> 16 0 29 2462 topology 2561 3302 -> 15 0 29 2462 topology 2490 3303 -> 16 0 29 2462 topology 2491 3303 -> 15 0 29 2462 topology 2544 3304 -> 16 0 29 2462 topology 2545 3304 -> 15 0 28 2462 topology 2474 3305 -> 16 0 28 2462 topology 2572 3305 -> 15 0 29 2462 topology 2469 3306 -> 16 0 29 2462 topology 2470 3306 -> 15 0 29 2462 topology 2523 3307 -> 16 0 29 2462 topology 2524 3307 -> 15 0 28 2462 topology 2534 3308 -> 16 0 28 2462 topology 2572 3308 -> 15 0 28 2462 topology 2510 3309 -> 16 0 28 2462 topology 2572 3309 -> 15 0 30 2462 topology 2571 3310 -> 16 0 30 2462 topology 2572 3310 -> 15 0 28 2462 topology 2486 3311 -> 16 0 28 2462 topology 2572 3311 -> 15 0 28 2462 topology 2570 3312 -> 16 0 28 2462 topology 2572 3312 -> 15 0 28 2462 topology 2546 3313 -> 16 0 28 2462 topology 2572 3313 -> 15 0 29 2462 topology 2556 3314 -> 16 0 29 2462 topology 2557 3314 -> 15 0 28 2462 topology 2522 3315 -> 16 0 28 2462 topology 2572 3315 -> 15 0 28 2462 topology 2498 3316 -> 16 0 28 2462 topology 2572 3316 -> 15 0 29 2462 topology 2478 3317 -> 16 0 29 2462 topology 2480 3317 -> 15 0 29 2462 topology 2532 3318 -> 16 0 29 2462 topology 2534 3318 -> 15 0 28 2462 topology 2558 3319 -> 16 0 28 2462 topology 2572 3319 -> 15 0 29 2462 topology 2511 3320 -> 16 0 29 2462 topology 2513 3320 -> 15 0 29 2462 topology 2565 3321 -> 16 0 29 2462 topology 2567 3321 -> 15 0 28 2462 topology 2482 3322 -> 16 0 28 2462 topology 2572 3322 -> 15 0 29 2462 topology 2490 3323 -> 16 0 29 2462 topology 2492 3323 -> 15 0 28 2462 topology 2512 3324 -> 16 0 28 2462 topology 2572 3324 -> 15 0 29 2462 topology 2544 3325 -> 16 0 29 2462 topology 2546 3325 -> 15 0 28 2462 topology 2542 3326 -> 16 0 28 2462 topology 2572 3326 -> 15 0 28 2462 topology 2464 3327 -> 16 0 28 2462 topology 2572 3327 -> 15 0 28 2462 topology 2494 3328 -> 16 0 28 2462 topology 2572 3328 -> 15 0 29 2462 topology 2502 3329 -> 16 0 29 2462 topology 2503 3329 -> 15 0 29 2462 topology 2469 3330 -> 16 0 29 2462 topology 2471 3330 -> 15 0 28 2462 topology 2524 3331 -> 16 0 28 2462 topology 2572 3331 -> 15 0 29 2462 topology 2523 3332 -> 16 0 29 2462 topology 2525 3332 -> 15 0 28 2462 topology 2554 3333 -> 16 0 28 2462 topology 2572 3333 -> 15 0 29 2462 topology 2481 3334 -> 16 0 29 2462 topology 2482 3334 -> 15 0 29 2462 topology 2535 3335 -> 16 0 29 2462 topology 2536 3335 -> 15 0 29 2462 topology 2556 3336 -> 16 0 29 2462 topology 2558 3336 -> 15 0 29 2462 topology 2514 3337 -> 16 0 29 2462 topology 2515 3337 -> 15 0 29 2462 topology 2568 3338 -> 16 0 29 2462 topology 2569 3338 -> 15 0 29 2462 topology 2493 3339 -> 16 0 29 2462 topology 2494 3339 -> 15 0 29 2462 topology 2547 3340 -> 16 0 29 2462 topology 2548 3340 -> 15 0 28 2462 topology 2477 3341 -> 16 0 28 2462 topology 2572 3341 -> 15 0 28 2462 topology 2537 3342 -> 16 0 28 2462 topology 2572 3342 -> 15 0 28 2462 topology 2513 3343 -> 16 0 28 2462 topology 2572 3343 -> 15 0 29 2462 topology 2526 3344 -> 16 0 29 2462 topology 2527 3344 -> 15 0 28 2462 topology 2489 3345 -> 16 0 28 2462 topology 2572 3345 -> 15 0 28 2462 topology 2465 3346 -> 16 0 28 2462 topology 2572 3346 -> 15 0 29 2462 topology 2475 3347 -> 16 0 29 2462 topology 2477 3347 -> 15 0 28 2462 topology 2549 3348 -> 16 0 28 2462 topology 2572 3348 -> 15 0 28 2462 topology 2525 3349 -> 16 0 28 2462 topology 2572 3349 -> 15 0 29 2462 topology 2559 3350 -> 16 0 29 2462 topology 2560 3350 -> 15 0 28 2462 topology 2501 3351 -> 16 0 28 2462 topology 2572 3351 -> 15 0 29 2462 topology 2508 3352 -> 16 0 29 2462 topology 2510 3352 -> 15 0 28 2462 topology 2561 3353 -> 16 0 28 2462 topology 2572 3353 -> 15 0 29 2462 topology 2562 3354 -> 16 0 29 2462 topology 2564 3354 -> 15 0 28 2462 topology 2479 3355 -> 16 0 28 2462 topology 2572 3355 -> 15 0 29 2462 topology 2487 3356 -> 16 0 29 2462 topology 2489 3356 -> 15 0 29 2462 topology 2541 3357 -> 16 0 29 2462 topology 2543 3357 -> 15 0 28 2462 topology 2509 3358 -> 16 0 28 2462 topology 2572 3358 -> 15 0 28 2462 topology 2539 3359 -> 16 0 28 2462 topology 2572 3359 -> 15 0 29 2462 topology 2472 3360 -> 16 0 29 2462 topology 2473 3360 -> 15 0 28 2462 topology 2569 3361 -> 16 0 28 2462 topology 2572 3361 -> 15 0 29 2462 topology 2466 3362 -> 16 0 29 2462 topology 2468 3362 -> 15 0 28 2462 topology 2491 3363 -> 16 0 28 2462 topology 2572 3363 -> 15 0 29 2462 topology 2520 3364 -> 16 0 29 2462 topology 2522 3364 -> 15 0 28 2573 topology 2672 3365 +> 15 0 29 2462 topology 2571 3292 +> 16 0 29 2462 topology 2572 3292 +> 15 0 30 2462 topology 2463 3293 +> 16 0 30 2462 topology 2465 3293 +> 15 0 30 2462 topology 2463 3294 +> 16 0 30 2462 topology 2464 3294 +> 15 0 30 2462 topology 2466 3295 +> 16 0 30 2462 topology 2468 3295 +> 15 0 30 2462 topology 2466 3296 +> 16 0 30 2462 topology 2467 3296 +> 15 0 30 2462 topology 2469 3297 +> 16 0 30 2462 topology 2471 3297 +> 15 0 30 2462 topology 2469 3298 +> 16 0 30 2462 topology 2470 3298 +> 15 0 30 2462 topology 2472 3299 +> 16 0 30 2462 topology 2474 3299 +> 15 0 30 2462 topology 2472 3300 +> 16 0 30 2462 topology 2473 3300 +> 15 0 30 2462 topology 2475 3301 +> 16 0 30 2462 topology 2477 3301 +> 15 0 30 2462 topology 2475 3302 +> 16 0 30 2462 topology 2476 3302 +> 15 0 30 2462 topology 2478 3303 +> 16 0 30 2462 topology 2480 3303 +> 15 0 30 2462 topology 2478 3304 +> 16 0 30 2462 topology 2479 3304 +> 15 0 30 2462 topology 2481 3305 +> 16 0 30 2462 topology 2483 3305 +> 15 0 30 2462 topology 2481 3306 +> 16 0 30 2462 topology 2482 3306 +> 15 0 30 2462 topology 2484 3307 +> 16 0 30 2462 topology 2486 3307 +> 15 0 30 2462 topology 2484 3308 +> 16 0 30 2462 topology 2485 3308 +> 15 0 30 2462 topology 2487 3309 +> 16 0 30 2462 topology 2489 3309 +> 15 0 30 2462 topology 2487 3310 +> 16 0 30 2462 topology 2488 3310 +> 15 0 30 2462 topology 2490 3311 +> 16 0 30 2462 topology 2492 3311 +> 15 0 30 2462 topology 2490 3312 +> 16 0 30 2462 topology 2491 3312 +> 15 0 30 2462 topology 2493 3313 +> 16 0 30 2462 topology 2495 3313 +> 15 0 30 2462 topology 2493 3314 +> 16 0 30 2462 topology 2494 3314 +> 15 0 30 2462 topology 2496 3315 +> 16 0 30 2462 topology 2498 3315 +> 15 0 30 2462 topology 2496 3316 +> 16 0 30 2462 topology 2497 3316 +> 15 0 30 2462 topology 2499 3317 +> 16 0 30 2462 topology 2501 3317 +> 15 0 30 2462 topology 2499 3318 +> 16 0 30 2462 topology 2500 3318 +> 15 0 30 2462 topology 2502 3319 +> 16 0 30 2462 topology 2504 3319 +> 15 0 30 2462 topology 2502 3320 +> 16 0 30 2462 topology 2503 3320 +> 15 0 30 2462 topology 2505 3321 +> 16 0 30 2462 topology 2507 3321 +> 15 0 30 2462 topology 2505 3322 +> 16 0 30 2462 topology 2506 3322 +> 15 0 30 2462 topology 2508 3323 +> 16 0 30 2462 topology 2510 3323 +> 15 0 30 2462 topology 2508 3324 +> 16 0 30 2462 topology 2509 3324 +> 15 0 30 2462 topology 2511 3325 +> 16 0 30 2462 topology 2513 3325 +> 15 0 30 2462 topology 2511 3326 +> 16 0 30 2462 topology 2512 3326 +> 15 0 30 2462 topology 2514 3327 +> 16 0 30 2462 topology 2516 3327 +> 15 0 30 2462 topology 2514 3328 +> 16 0 30 2462 topology 2515 3328 +> 15 0 30 2462 topology 2517 3329 +> 16 0 30 2462 topology 2519 3329 +> 15 0 30 2462 topology 2517 3330 +> 16 0 30 2462 topology 2518 3330 +> 15 0 30 2462 topology 2520 3331 +> 16 0 30 2462 topology 2522 3331 +> 15 0 30 2462 topology 2520 3332 +> 16 0 30 2462 topology 2521 3332 +> 15 0 30 2462 topology 2523 3333 +> 16 0 30 2462 topology 2525 3333 +> 15 0 30 2462 topology 2523 3334 +> 16 0 30 2462 topology 2524 3334 +> 15 0 30 2462 topology 2526 3335 +> 16 0 30 2462 topology 2528 3335 +> 15 0 30 2462 topology 2526 3336 +> 16 0 30 2462 topology 2527 3336 +> 15 0 30 2462 topology 2529 3337 +> 16 0 30 2462 topology 2531 3337 +> 15 0 30 2462 topology 2529 3338 +> 16 0 30 2462 topology 2530 3338 +> 15 0 30 2462 topology 2532 3339 +> 16 0 30 2462 topology 2534 3339 +> 15 0 30 2462 topology 2532 3340 +> 16 0 30 2462 topology 2533 3340 +> 15 0 30 2462 topology 2535 3341 +> 16 0 30 2462 topology 2537 3341 +> 15 0 30 2462 topology 2535 3342 +> 16 0 30 2462 topology 2536 3342 +> 15 0 30 2462 topology 2538 3343 +> 16 0 30 2462 topology 2540 3343 +> 15 0 30 2462 topology 2538 3344 +> 16 0 30 2462 topology 2539 3344 +> 15 0 30 2462 topology 2541 3345 +> 16 0 30 2462 topology 2543 3345 +> 15 0 30 2462 topology 2541 3346 +> 16 0 30 2462 topology 2542 3346 +> 15 0 30 2462 topology 2544 3347 +> 16 0 30 2462 topology 2546 3347 +> 15 0 30 2462 topology 2544 3348 +> 16 0 30 2462 topology 2545 3348 +> 15 0 30 2462 topology 2547 3349 +> 16 0 30 2462 topology 2549 3349 +> 15 0 30 2462 topology 2547 3350 +> 16 0 30 2462 topology 2548 3350 +> 15 0 30 2462 topology 2550 3351 +> 16 0 30 2462 topology 2552 3351 +> 15 0 30 2462 topology 2550 3352 +> 16 0 30 2462 topology 2551 3352 +> 15 0 30 2462 topology 2553 3353 +> 16 0 30 2462 topology 2555 3353 +> 15 0 30 2462 topology 2553 3354 +> 16 0 30 2462 topology 2554 3354 +> 15 0 30 2462 topology 2556 3355 +> 16 0 30 2462 topology 2558 3355 +> 15 0 30 2462 topology 2556 3356 +> 16 0 30 2462 topology 2557 3356 +> 15 0 30 2462 topology 2559 3357 +> 16 0 30 2462 topology 2561 3357 +> 15 0 30 2462 topology 2559 3358 +> 16 0 30 2462 topology 2560 3358 +> 15 0 30 2462 topology 2562 3359 +> 16 0 30 2462 topology 2564 3359 +> 15 0 30 2462 topology 2562 3360 +> 16 0 30 2462 topology 2563 3360 +> 15 0 30 2462 topology 2565 3361 +> 16 0 30 2462 topology 2567 3361 +> 15 0 30 2462 topology 2565 3362 +> 16 0 30 2462 topology 2566 3362 +> 15 0 30 2462 topology 2568 3363 +> 16 0 30 2462 topology 2570 3363 +> 15 0 30 2462 topology 2568 3364 +> 16 0 30 2462 topology 2569 3364 +> 15 0 28 2573 topology 2657 3365 > 16 0 28 2573 topology 2683 3365 -> 15 0 28 2573 topology 2575 3366 +> 15 0 28 2573 topology 2656 3366 > 16 0 28 2573 topology 2683 3366 -> 15 0 28 2573 topology 2605 3367 +> 15 0 28 2573 topology 2660 3367 > 16 0 28 2573 topology 2683 3367 -> 15 0 29 2573 topology 2607 3368 -> 16 0 29 2573 topology 2609 3368 -> 15 0 28 2573 topology 2635 3369 +> 15 0 28 2573 topology 2659 3368 +> 16 0 28 2573 topology 2683 3368 +> 15 0 28 2573 topology 2663 3369 > 16 0 28 2573 topology 2683 3369 -> 15 0 29 2573 topology 2670 3370 -> 16 0 29 2573 topology 2671 3370 -> 15 0 28 2573 topology 2587 3371 +> 15 0 28 2573 topology 2662 3370 +> 16 0 28 2573 topology 2683 3370 +> 15 0 28 2573 topology 2666 3371 > 16 0 28 2573 topology 2683 3371 -> 15 0 29 2573 topology 2586 3372 -> 16 0 29 2573 topology 2588 3372 -> 15 0 28 2573 topology 2617 3373 +> 15 0 28 2573 topology 2665 3372 +> 16 0 28 2573 topology 2683 3372 +> 15 0 28 2573 topology 2669 3373 > 16 0 28 2573 topology 2683 3373 -> 15 0 29 2573 topology 2640 3374 -> 16 0 29 2573 topology 2642 3374 -> 15 0 28 2573 topology 2647 3375 +> 15 0 28 2573 topology 2668 3374 +> 16 0 28 2573 topology 2683 3374 +> 15 0 28 2573 topology 2672 3375 > 16 0 28 2573 topology 2683 3375 -> 15 0 29 2573 topology 2676 3376 -> 16 0 29 2573 topology 2677 3376 -> 15 0 28 2573 topology 2656 3377 +> 15 0 28 2573 topology 2671 3376 +> 16 0 28 2573 topology 2683 3376 +> 15 0 28 2573 topology 2675 3377 > 16 0 28 2573 topology 2683 3377 -> 15 0 29 2573 topology 2625 3378 -> 16 0 29 2573 topology 2626 3378 -> 15 0 29 2573 topology 2619 3379 -> 16 0 29 2573 topology 2621 3379 -> 15 0 28 2573 topology 2668 3380 +> 15 0 28 2573 topology 2674 3378 +> 16 0 28 2573 topology 2683 3378 +> 15 0 28 2573 topology 2678 3379 +> 16 0 28 2573 topology 2683 3379 +> 15 0 28 2573 topology 2677 3380 > 16 0 28 2573 topology 2683 3380 -> 15 0 29 2573 topology 2604 3381 -> 16 0 29 2573 topology 2605 3381 -> 15 0 29 2573 topology 2652 3382 -> 16 0 29 2573 topology 2654 3382 -> 15 0 28 2573 topology 2680 3383 +> 15 0 28 2573 topology 2681 3381 +> 16 0 28 2573 topology 2683 3381 +> 15 0 28 2573 topology 2680 3382 +> 16 0 28 2573 topology 2683 3382 +> 15 0 28 2573 topology 2576 3383 > 16 0 28 2573 topology 2683 3383 -> 15 0 29 2573 topology 2583 3384 -> 16 0 29 2573 topology 2584 3384 -> 15 0 29 2573 topology 2637 3385 -> 16 0 29 2573 topology 2638 3385 -> 15 0 28 2573 topology 2600 3386 +> 15 0 28 2573 topology 2575 3384 +> 16 0 28 2573 topology 2683 3384 +> 15 0 28 2573 topology 2579 3385 +> 16 0 28 2573 topology 2683 3385 +> 15 0 28 2573 topology 2578 3386 > 16 0 28 2573 topology 2683 3386 -> 15 0 28 2573 topology 2576 3387 +> 15 0 28 2573 topology 2582 3387 > 16 0 28 2573 topology 2683 3387 -> 15 0 29 2573 topology 2616 3388 -> 16 0 29 2573 topology 2617 3388 -> 15 0 28 2573 topology 2636 3389 +> 15 0 28 2573 topology 2581 3388 +> 16 0 28 2573 topology 2683 3388 +> 15 0 28 2573 topology 2585 3389 > 16 0 28 2573 topology 2683 3389 -> 15 0 28 2573 topology 2612 3390 +> 15 0 28 2573 topology 2584 3390 > 16 0 28 2573 topology 2683 3390 > 15 0 28 2573 topology 2588 3391 > 16 0 28 2573 topology 2683 3391 -> 15 0 29 2573 topology 2649 3392 -> 16 0 29 2573 topology 2650 3392 -> 15 0 28 2573 topology 2648 3393 +> 15 0 28 2573 topology 2587 3392 +> 16 0 28 2573 topology 2683 3392 +> 15 0 28 2573 topology 2591 3393 > 16 0 28 2573 topology 2683 3393 -> 15 0 28 2573 topology 2624 3394 +> 15 0 28 2573 topology 2590 3394 > 16 0 28 2573 topology 2683 3394 -> 15 0 29 2573 topology 2625 3395 -> 16 0 29 2573 topology 2627 3395 -> 15 0 28 2573 topology 2663 3396 +> 15 0 28 2573 topology 2594 3395 +> 16 0 28 2573 topology 2683 3395 +> 15 0 28 2573 topology 2593 3396 > 16 0 28 2573 topology 2683 3396 -> 15 0 29 2573 topology 2604 3397 -> 16 0 29 2573 topology 2606 3397 -> 15 0 28 2573 topology 2602 3398 +> 15 0 28 2573 topology 2597 3397 +> 16 0 28 2573 topology 2683 3397 +> 15 0 28 2573 topology 2596 3398 > 16 0 28 2573 topology 2683 3398 -> 15 0 28 2573 topology 2675 3399 +> 15 0 28 2573 topology 2600 3399 > 16 0 28 2573 topology 2683 3399 -> 15 0 28 2573 topology 2632 3400 +> 15 0 28 2573 topology 2599 3400 > 16 0 28 2573 topology 2683 3400 -> 15 0 28 2573 topology 2584 3401 +> 15 0 28 2573 topology 2603 3401 > 16 0 28 2573 topology 2683 3401 -> 15 0 29 2573 topology 2583 3402 -> 16 0 29 2573 topology 2585 3402 -> 15 0 29 2573 topology 2637 3403 -> 16 0 29 2573 topology 2639 3403 -> 15 0 28 2573 topology 2614 3404 +> 15 0 28 2573 topology 2602 3402 +> 16 0 28 2573 topology 2683 3402 +> 15 0 28 2573 topology 2606 3403 +> 16 0 28 2573 topology 2683 3403 +> 15 0 28 2573 topology 2605 3404 > 16 0 28 2573 topology 2683 3404 -> 15 0 28 2573 topology 2644 3405 +> 15 0 28 2573 topology 2609 3405 > 16 0 28 2573 topology 2683 3405 -> 15 0 29 2573 topology 2595 3406 -> 16 0 29 2573 topology 2596 3406 -> 15 0 29 2573 topology 2616 3407 -> 16 0 29 2573 topology 2618 3407 -> 15 0 29 2573 topology 2574 3408 -> 16 0 29 2573 topology 2575 3408 -> 15 0 29 2573 topology 2628 3409 -> 16 0 29 2573 topology 2629 3409 -> 15 0 28 2573 topology 2665 3410 +> 15 0 28 2573 topology 2608 3406 +> 16 0 28 2573 topology 2683 3406 +> 15 0 28 2573 topology 2612 3407 +> 16 0 28 2573 topology 2683 3407 +> 15 0 28 2573 topology 2611 3408 +> 16 0 28 2573 topology 2683 3408 +> 15 0 28 2573 topology 2615 3409 +> 16 0 28 2573 topology 2683 3409 +> 15 0 28 2573 topology 2614 3410 > 16 0 28 2573 topology 2683 3410 -> 15 0 29 2573 topology 2649 3411 -> 16 0 29 2573 topology 2651 3411 -> 15 0 29 2573 topology 2655 3412 -> 16 0 29 2573 topology 2657 3412 -> 15 0 29 2573 topology 2658 3413 -> 16 0 29 2573 topology 2660 3413 -> 15 0 29 2573 topology 2607 3414 -> 16 0 29 2573 topology 2608 3414 -> 15 0 28 2573 topology 2677 3415 +> 15 0 28 2573 topology 2618 3411 +> 16 0 28 2573 topology 2683 3411 +> 15 0 28 2573 topology 2617 3412 +> 16 0 28 2573 topology 2683 3412 +> 15 0 28 2573 topology 2621 3413 +> 16 0 28 2573 topology 2683 3413 +> 15 0 28 2573 topology 2620 3414 +> 16 0 28 2573 topology 2683 3414 +> 15 0 28 2573 topology 2624 3415 > 16 0 28 2573 topology 2683 3415 -> 15 0 29 2573 topology 2661 3416 -> 16 0 29 2573 topology 2663 3416 -> 15 0 29 2573 topology 2664 3417 -> 16 0 29 2573 topology 2666 3417 -> 15 0 29 2573 topology 2586 3418 -> 16 0 29 2573 topology 2587 3418 -> 15 0 28 2573 topology 2627 3419 +> 15 0 28 2573 topology 2623 3416 +> 16 0 28 2573 topology 2683 3416 +> 15 0 28 2573 topology 2627 3417 +> 16 0 28 2573 topology 2683 3417 +> 15 0 28 2573 topology 2626 3418 +> 16 0 28 2573 topology 2683 3418 +> 15 0 28 2573 topology 2630 3419 > 16 0 28 2573 topology 2683 3419 -> 15 0 29 2573 topology 2640 3420 -> 16 0 29 2573 topology 2641 3420 -> 15 0 28 2573 topology 2603 3421 +> 15 0 28 2573 topology 2629 3420 +> 16 0 28 2573 topology 2683 3420 +> 15 0 28 2573 topology 2633 3421 > 16 0 28 2573 topology 2683 3421 -> 15 0 29 2573 topology 2667 3422 -> 16 0 29 2573 topology 2669 3422 -> 15 0 28 2573 topology 2579 3423 +> 15 0 28 2573 topology 2632 3422 +> 16 0 28 2573 topology 2683 3422 +> 15 0 28 2573 topology 2636 3423 > 16 0 28 2573 topology 2683 3423 -> 15 0 29 2573 topology 2670 3424 -> 16 0 29 2573 topology 2672 3424 -> 15 0 29 2573 topology 2619 3425 -> 16 0 29 2573 topology 2620 3425 -> 15 0 28 2573 topology 2639 3426 +> 15 0 28 2573 topology 2635 3424 +> 16 0 28 2573 topology 2683 3424 +> 15 0 28 2573 topology 2639 3425 +> 16 0 28 2573 topology 2683 3425 +> 15 0 28 2573 topology 2638 3426 > 16 0 28 2573 topology 2683 3426 -> 15 0 28 2573 topology 2615 3427 +> 15 0 28 2573 topology 2642 3427 > 16 0 28 2573 topology 2683 3427 -> 15 0 29 2573 topology 2673 3428 -> 16 0 29 2573 topology 2675 3428 -> 15 0 28 2573 topology 2591 3429 +> 15 0 28 2573 topology 2641 3428 +> 16 0 28 2573 topology 2683 3428 +> 15 0 28 2573 topology 2645 3429 > 16 0 28 2573 topology 2683 3429 -> 15 0 29 2573 topology 2655 3430 -> 16 0 29 2573 topology 2656 3430 -> 15 0 29 2573 topology 2676 3431 -> 16 0 29 2573 topology 2678 3431 -> 15 0 28 2573 topology 2651 3432 +> 15 0 28 2573 topology 2644 3430 +> 16 0 28 2573 topology 2683 3430 +> 15 0 28 2573 topology 2648 3431 +> 16 0 28 2573 topology 2683 3431 +> 15 0 28 2573 topology 2647 3432 > 16 0 28 2573 topology 2683 3432 -> 15 0 29 2573 topology 2652 3433 -> 16 0 29 2573 topology 2653 3433 -> 15 0 29 2573 topology 2679 3434 -> 16 0 29 2573 topology 2681 3434 -> 15 0 29 2573 topology 2661 3435 -> 16 0 29 2573 topology 2662 3435 -> 15 0 29 2573 topology 2601 3436 -> 16 0 29 2573 topology 2603 3436 -> 15 0 28 2573 topology 2666 3437 -> 16 0 28 2573 topology 2683 3437 -> 15 0 28 2573 topology 2599 3438 -> 16 0 28 2573 topology 2683 3438 -> 15 0 28 2573 topology 2629 3439 -> 16 0 28 2573 topology 2683 3439 -> 15 0 29 2573 topology 2667 3440 -> 16 0 29 2573 topology 2668 3440 -> 15 0 29 2573 topology 2580 3441 -> 16 0 29 2573 topology 2582 3441 -> 15 0 29 2573 topology 2634 3442 -> 16 0 29 2573 topology 2636 3442 -> 15 0 28 2573 topology 2678 3443 -> 16 0 28 2573 topology 2683 3443 -> 15 0 28 2573 topology 2581 3444 -> 16 0 28 2573 topology 2683 3444 -> 15 0 28 2573 topology 2611 3445 -> 16 0 28 2573 topology 2683 3445 -> 15 0 28 2573 topology 2641 3446 -> 16 0 28 2573 topology 2683 3446 -> 15 0 29 2573 topology 2673 3447 -> 16 0 29 2573 topology 2674 3447 -> 15 0 29 2573 topology 2613 3448 -> 16 0 29 2573 topology 2615 3448 -> 15 0 28 2573 topology 2593 3449 -> 16 0 28 2573 topology 2683 3449 -> 15 0 28 2573 topology 2623 3450 -> 16 0 28 2573 topology 2683 3450 -> 15 0 29 2573 topology 2598 3451 -> 16 0 29 2573 topology 2599 3451 -> 15 0 28 2573 topology 2653 3452 -> 16 0 28 2573 topology 2683 3452 -> 15 0 29 2573 topology 2679 3453 -> 16 0 29 2573 topology 2680 3453 -> 15 0 29 2573 topology 2592 3454 -> 16 0 29 2573 topology 2594 3454 -> 15 0 29 2573 topology 2646 3455 -> 16 0 29 2573 topology 2648 3455 -> 15 0 28 2573 topology 2662 3456 -> 16 0 28 2573 topology 2683 3456 -> 15 0 29 2573 topology 2577 3457 -> 16 0 29 2573 topology 2578 3457 -> 15 0 29 2573 topology 2631 3458 -> 16 0 29 2573 topology 2632 3458 -> 15 0 28 2573 topology 2674 3459 -> 16 0 28 2573 topology 2683 3459 -> 15 0 29 2573 topology 2610 3460 -> 16 0 29 2573 topology 2611 3460 -> 15 0 28 2573 topology 2630 3461 -> 16 0 28 2573 topology 2683 3461 -> 15 0 29 2573 topology 2589 3462 -> 16 0 29 2573 topology 2590 3462 -> 15 0 28 2573 topology 2606 3463 -> 16 0 28 2573 topology 2683 3463 -> 15 0 29 2573 topology 2643 3464 -> 16 0 29 2573 topology 2644 3464 -> 15 0 28 2573 topology 2582 3465 -> 16 0 28 2573 topology 2683 3465 -> 15 0 28 2573 topology 2642 3466 -> 16 0 28 2573 topology 2683 3466 -> 15 0 28 2573 topology 2618 3467 -> 16 0 28 2573 topology 2683 3467 -> 15 0 29 2573 topology 2622 3468 -> 16 0 29 2573 topology 2623 3468 -> 15 0 28 2573 topology 2594 3469 -> 16 0 28 2573 topology 2683 3469 -> 15 0 28 2573 topology 2657 3470 -> 16 0 28 2573 topology 2683 3470 -> 15 0 29 2573 topology 2598 3471 -> 16 0 29 2573 topology 2600 3471 -> 15 0 28 2573 topology 2654 3472 -> 16 0 28 2573 topology 2683 3472 -> 15 0 28 2573 topology 2596 3473 -> 16 0 28 2573 topology 2683 3473 -> 15 0 28 2573 topology 2669 3474 -> 16 0 28 2573 topology 2683 3474 -> 15 0 29 2573 topology 2577 3475 -> 16 0 29 2573 topology 2579 3475 -> 15 0 28 2573 topology 2626 3476 -> 16 0 28 2573 topology 2683 3476 -> 15 0 29 2573 topology 2631 3477 -> 16 0 29 2573 topology 2633 3477 -> 15 0 28 2573 topology 2578 3478 -> 16 0 28 2573 topology 2683 3478 -> 15 0 28 2573 topology 2608 3479 -> 16 0 28 2573 topology 2683 3479 -> 15 0 28 2573 topology 2681 3480 -> 16 0 28 2573 topology 2683 3480 -> 15 0 29 2573 topology 2610 3481 -> 16 0 29 2573 topology 2612 3481 -> 15 0 28 2573 topology 2638 3482 -> 16 0 28 2573 topology 2683 3482 -> 15 0 28 2573 topology 2590 3483 -> 16 0 28 2573 topology 2683 3483 -> 15 0 28 2573 topology 2620 3484 -> 16 0 28 2573 topology 2683 3484 -> 15 0 29 2573 topology 2589 3485 -> 16 0 29 2573 topology 2591 3485 -> 15 0 29 2573 topology 2643 3486 -> 16 0 29 2573 topology 2645 3486 -> 15 0 28 2573 topology 2650 3487 -> 16 0 28 2573 topology 2683 3487 -> 15 0 28 2573 topology 2659 3488 -> 16 0 28 2573 topology 2683 3488 -> 15 0 29 2573 topology 2601 3489 -> 16 0 29 2573 topology 2602 3489 -> 15 0 29 2573 topology 2622 3490 -> 16 0 29 2573 topology 2624 3490 -> 15 0 28 2573 topology 2671 3491 -> 16 0 28 2573 topology 2683 3491 -> 15 0 29 2573 topology 2580 3492 -> 16 0 29 2573 topology 2581 3492 -> 15 0 29 2573 topology 2634 3493 -> 16 0 29 2573 topology 2635 3493 -> 15 0 30 2573 topology 2682 3494 -> 16 0 30 2573 topology 2683 3494 -> 15 0 28 2573 topology 2597 3495 -> 16 0 28 2573 topology 2683 3495 -> 15 0 29 2573 topology 2613 3496 -> 16 0 29 2573 topology 2614 3496 -> 15 0 28 2573 topology 2633 3497 -> 16 0 28 2573 topology 2683 3497 -> 15 0 28 2573 topology 2609 3498 -> 16 0 28 2573 topology 2683 3498 -> 15 0 28 2573 topology 2585 3499 -> 16 0 28 2573 topology 2683 3499 -> 15 0 29 2573 topology 2592 3500 -> 16 0 29 2573 topology 2593 3500 -> 15 0 29 2573 topology 2646 3501 -> 16 0 29 2573 topology 2647 3501 -> 15 0 28 2573 topology 2645 3502 -> 16 0 28 2573 topology 2683 3502 -> 15 0 29 2573 topology 2595 3503 -> 16 0 29 2573 topology 2597 3503 -> 15 0 28 2573 topology 2621 3504 -> 16 0 28 2573 topology 2683 3504 -> 15 0 29 2573 topology 2658 3505 -> 16 0 29 2573 topology 2659 3505 -> 15 0 28 2573 topology 2660 3506 -> 16 0 28 2573 topology 2683 3506 -> 15 0 29 2573 topology 2574 3507 -> 16 0 29 2573 topology 2576 3507 -> 15 0 29 2573 topology 2628 3508 -> 16 0 29 2573 topology 2630 3508 -> 15 0 29 2573 topology 2664 3509 -> 16 0 29 2573 topology 2665 3509 -> 15 0 28 2684 topology 2750 3510 +> 15 0 28 2573 topology 2651 3433 +> 16 0 28 2573 topology 2683 3433 +> 15 0 28 2573 topology 2650 3434 +> 16 0 28 2573 topology 2683 3434 +> 15 0 28 2573 topology 2654 3435 +> 16 0 28 2573 topology 2683 3435 +> 15 0 28 2573 topology 2653 3436 +> 16 0 28 2573 topology 2683 3436 +> 15 0 29 2573 topology 2682 3437 +> 16 0 29 2573 topology 2683 3437 +> 15 0 30 2573 topology 2655 3438 +> 16 0 30 2573 topology 2657 3438 +> 15 0 30 2573 topology 2655 3439 +> 16 0 30 2573 topology 2656 3439 +> 15 0 30 2573 topology 2658 3440 +> 16 0 30 2573 topology 2660 3440 +> 15 0 30 2573 topology 2658 3441 +> 16 0 30 2573 topology 2659 3441 +> 15 0 30 2573 topology 2661 3442 +> 16 0 30 2573 topology 2663 3442 +> 15 0 30 2573 topology 2661 3443 +> 16 0 30 2573 topology 2662 3443 +> 15 0 30 2573 topology 2664 3444 +> 16 0 30 2573 topology 2666 3444 +> 15 0 30 2573 topology 2664 3445 +> 16 0 30 2573 topology 2665 3445 +> 15 0 30 2573 topology 2667 3446 +> 16 0 30 2573 topology 2669 3446 +> 15 0 30 2573 topology 2667 3447 +> 16 0 30 2573 topology 2668 3447 +> 15 0 30 2573 topology 2670 3448 +> 16 0 30 2573 topology 2672 3448 +> 15 0 30 2573 topology 2670 3449 +> 16 0 30 2573 topology 2671 3449 +> 15 0 30 2573 topology 2673 3450 +> 16 0 30 2573 topology 2675 3450 +> 15 0 30 2573 topology 2673 3451 +> 16 0 30 2573 topology 2674 3451 +> 15 0 30 2573 topology 2676 3452 +> 16 0 30 2573 topology 2678 3452 +> 15 0 30 2573 topology 2676 3453 +> 16 0 30 2573 topology 2677 3453 +> 15 0 30 2573 topology 2679 3454 +> 16 0 30 2573 topology 2681 3454 +> 15 0 30 2573 topology 2679 3455 +> 16 0 30 2573 topology 2680 3455 +> 15 0 30 2573 topology 2574 3456 +> 16 0 30 2573 topology 2576 3456 +> 15 0 30 2573 topology 2574 3457 +> 16 0 30 2573 topology 2575 3457 +> 15 0 30 2573 topology 2577 3458 +> 16 0 30 2573 topology 2579 3458 +> 15 0 30 2573 topology 2577 3459 +> 16 0 30 2573 topology 2578 3459 +> 15 0 30 2573 topology 2580 3460 +> 16 0 30 2573 topology 2582 3460 +> 15 0 30 2573 topology 2580 3461 +> 16 0 30 2573 topology 2581 3461 +> 15 0 30 2573 topology 2583 3462 +> 16 0 30 2573 topology 2585 3462 +> 15 0 30 2573 topology 2583 3463 +> 16 0 30 2573 topology 2584 3463 +> 15 0 30 2573 topology 2586 3464 +> 16 0 30 2573 topology 2588 3464 +> 15 0 30 2573 topology 2586 3465 +> 16 0 30 2573 topology 2587 3465 +> 15 0 30 2573 topology 2589 3466 +> 16 0 30 2573 topology 2591 3466 +> 15 0 30 2573 topology 2589 3467 +> 16 0 30 2573 topology 2590 3467 +> 15 0 30 2573 topology 2592 3468 +> 16 0 30 2573 topology 2594 3468 +> 15 0 30 2573 topology 2592 3469 +> 16 0 30 2573 topology 2593 3469 +> 15 0 30 2573 topology 2595 3470 +> 16 0 30 2573 topology 2597 3470 +> 15 0 30 2573 topology 2595 3471 +> 16 0 30 2573 topology 2596 3471 +> 15 0 30 2573 topology 2598 3472 +> 16 0 30 2573 topology 2600 3472 +> 15 0 30 2573 topology 2598 3473 +> 16 0 30 2573 topology 2599 3473 +> 15 0 30 2573 topology 2601 3474 +> 16 0 30 2573 topology 2603 3474 +> 15 0 30 2573 topology 2601 3475 +> 16 0 30 2573 topology 2602 3475 +> 15 0 30 2573 topology 2604 3476 +> 16 0 30 2573 topology 2606 3476 +> 15 0 30 2573 topology 2604 3477 +> 16 0 30 2573 topology 2605 3477 +> 15 0 30 2573 topology 2607 3478 +> 16 0 30 2573 topology 2609 3478 +> 15 0 30 2573 topology 2607 3479 +> 16 0 30 2573 topology 2608 3479 +> 15 0 30 2573 topology 2610 3480 +> 16 0 30 2573 topology 2612 3480 +> 15 0 30 2573 topology 2610 3481 +> 16 0 30 2573 topology 2611 3481 +> 15 0 30 2573 topology 2613 3482 +> 16 0 30 2573 topology 2615 3482 +> 15 0 30 2573 topology 2613 3483 +> 16 0 30 2573 topology 2614 3483 +> 15 0 30 2573 topology 2616 3484 +> 16 0 30 2573 topology 2618 3484 +> 15 0 30 2573 topology 2616 3485 +> 16 0 30 2573 topology 2617 3485 +> 15 0 30 2573 topology 2619 3486 +> 16 0 30 2573 topology 2621 3486 +> 15 0 30 2573 topology 2619 3487 +> 16 0 30 2573 topology 2620 3487 +> 15 0 30 2573 topology 2622 3488 +> 16 0 30 2573 topology 2624 3488 +> 15 0 30 2573 topology 2622 3489 +> 16 0 30 2573 topology 2623 3489 +> 15 0 30 2573 topology 2625 3490 +> 16 0 30 2573 topology 2627 3490 +> 15 0 30 2573 topology 2625 3491 +> 16 0 30 2573 topology 2626 3491 +> 15 0 30 2573 topology 2628 3492 +> 16 0 30 2573 topology 2630 3492 +> 15 0 30 2573 topology 2628 3493 +> 16 0 30 2573 topology 2629 3493 +> 15 0 30 2573 topology 2631 3494 +> 16 0 30 2573 topology 2633 3494 +> 15 0 30 2573 topology 2631 3495 +> 16 0 30 2573 topology 2632 3495 +> 15 0 30 2573 topology 2634 3496 +> 16 0 30 2573 topology 2636 3496 +> 15 0 30 2573 topology 2634 3497 +> 16 0 30 2573 topology 2635 3497 +> 15 0 30 2573 topology 2637 3498 +> 16 0 30 2573 topology 2639 3498 +> 15 0 30 2573 topology 2637 3499 +> 16 0 30 2573 topology 2638 3499 +> 15 0 30 2573 topology 2640 3500 +> 16 0 30 2573 topology 2642 3500 +> 15 0 30 2573 topology 2640 3501 +> 16 0 30 2573 topology 2641 3501 +> 15 0 30 2573 topology 2643 3502 +> 16 0 30 2573 topology 2645 3502 +> 15 0 30 2573 topology 2643 3503 +> 16 0 30 2573 topology 2644 3503 +> 15 0 30 2573 topology 2646 3504 +> 16 0 30 2573 topology 2648 3504 +> 15 0 30 2573 topology 2646 3505 +> 16 0 30 2573 topology 2647 3505 +> 15 0 30 2573 topology 2649 3506 +> 16 0 30 2573 topology 2651 3506 +> 15 0 30 2573 topology 2649 3507 +> 16 0 30 2573 topology 2650 3507 +> 15 0 30 2573 topology 2652 3508 +> 16 0 30 2573 topology 2654 3508 +> 15 0 30 2573 topology 2652 3509 +> 16 0 30 2573 topology 2653 3509 +> 15 0 28 2684 topology 2687 3510 > 16 0 28 2684 topology 2794 3510 -> 15 0 28 2684 topology 2726 3511 +> 15 0 28 2684 topology 2686 3511 > 16 0 28 2684 topology 2794 3511 -> 15 0 28 2684 topology 2702 3512 +> 15 0 28 2684 topology 2690 3512 > 16 0 28 2684 topology 2794 3512 -> 15 0 28 2684 topology 2786 3513 +> 15 0 28 2684 topology 2689 3513 > 16 0 28 2684 topology 2794 3513 -> 15 0 28 2684 topology 2762 3514 +> 15 0 28 2684 topology 2693 3514 > 16 0 28 2684 topology 2794 3514 -> 15 0 28 2684 topology 2738 3515 +> 15 0 28 2684 topology 2692 3515 > 16 0 28 2684 topology 2794 3515 -> 15 0 28 2684 topology 2714 3516 +> 15 0 28 2684 topology 2696 3516 > 16 0 28 2684 topology 2794 3516 -> 15 0 28 2684 topology 2774 3517 +> 15 0 28 2684 topology 2695 3517 > 16 0 28 2684 topology 2794 3517 -> 15 0 28 2684 topology 2698 3518 +> 15 0 28 2684 topology 2699 3518 > 16 0 28 2684 topology 2794 3518 -> 15 0 29 2684 topology 2688 3519 -> 16 0 29 2684 topology 2690 3519 -> 15 0 28 2684 topology 2728 3520 +> 15 0 28 2684 topology 2698 3519 +> 16 0 28 2684 topology 2794 3519 +> 15 0 28 2684 topology 2702 3520 > 16 0 28 2684 topology 2794 3520 -> 15 0 28 2684 topology 2758 3521 +> 15 0 28 2684 topology 2701 3521 > 16 0 28 2684 topology 2794 3521 -> 15 0 29 2684 topology 2691 3522 -> 16 0 29 2684 topology 2693 3522 -> 15 0 28 2684 topology 2788 3523 +> 15 0 28 2684 topology 2705 3522 +> 16 0 28 2684 topology 2794 3522 +> 15 0 28 2684 topology 2704 3523 > 16 0 28 2684 topology 2794 3523 -> 15 0 28 2684 topology 2710 3524 +> 15 0 28 2684 topology 2708 3524 > 16 0 28 2684 topology 2794 3524 -> 15 0 29 2684 topology 2694 3525 -> 16 0 29 2684 topology 2696 3525 -> 15 0 28 2684 topology 2740 3526 +> 15 0 28 2684 topology 2707 3525 +> 16 0 28 2684 topology 2794 3525 +> 15 0 28 2684 topology 2711 3526 > 16 0 28 2684 topology 2794 3526 -> 15 0 29 2684 topology 2748 3527 -> 16 0 29 2684 topology 2750 3527 -> 15 0 30 2684 topology 2793 3528 -> 16 0 30 2684 topology 2794 3528 -> 15 0 28 2684 topology 2770 3529 +> 15 0 28 2684 topology 2710 3527 +> 16 0 28 2684 topology 2794 3527 +> 15 0 28 2684 topology 2714 3528 +> 16 0 28 2684 topology 2794 3528 +> 15 0 28 2684 topology 2713 3529 > 16 0 28 2684 topology 2794 3529 -> 15 0 29 2684 topology 2697 3530 -> 16 0 29 2684 topology 2699 3530 -> 15 0 29 2684 topology 2751 3531 -> 16 0 29 2684 topology 2753 3531 -> 15 0 29 2684 topology 2700 3532 -> 16 0 29 2684 topology 2702 3532 -> 15 0 29 2684 topology 2754 3533 -> 16 0 29 2684 topology 2756 3533 -> 15 0 29 2684 topology 2703 3534 -> 16 0 29 2684 topology 2705 3534 -> 15 0 29 2684 topology 2757 3535 -> 16 0 29 2684 topology 2759 3535 -> 15 0 29 2684 topology 2706 3536 -> 16 0 29 2684 topology 2708 3536 -> 15 0 29 2684 topology 2760 3537 -> 16 0 29 2684 topology 2762 3537 -> 15 0 29 2684 topology 2688 3538 -> 16 0 29 2684 topology 2689 3538 -> 15 0 29 2684 topology 2709 3539 -> 16 0 29 2684 topology 2711 3539 -> 15 0 29 2684 topology 2763 3540 -> 16 0 29 2684 topology 2765 3540 -> 15 0 29 2684 topology 2718 3541 -> 16 0 29 2684 topology 2719 3541 -> 15 0 28 2684 topology 2693 3542 +> 15 0 28 2684 topology 2717 3530 +> 16 0 28 2684 topology 2794 3530 +> 15 0 28 2684 topology 2716 3531 +> 16 0 28 2684 topology 2794 3531 +> 15 0 28 2684 topology 2720 3532 +> 16 0 28 2684 topology 2794 3532 +> 15 0 28 2684 topology 2719 3533 +> 16 0 28 2684 topology 2794 3533 +> 15 0 28 2684 topology 2723 3534 +> 16 0 28 2684 topology 2794 3534 +> 15 0 28 2684 topology 2722 3535 +> 16 0 28 2684 topology 2794 3535 +> 15 0 28 2684 topology 2726 3536 +> 16 0 28 2684 topology 2794 3536 +> 15 0 28 2684 topology 2725 3537 +> 16 0 28 2684 topology 2794 3537 +> 15 0 28 2684 topology 2729 3538 +> 16 0 28 2684 topology 2794 3538 +> 15 0 28 2684 topology 2728 3539 +> 16 0 28 2684 topology 2794 3539 +> 15 0 28 2684 topology 2732 3540 +> 16 0 28 2684 topology 2794 3540 +> 15 0 28 2684 topology 2731 3541 +> 16 0 28 2684 topology 2794 3541 +> 15 0 28 2684 topology 2735 3542 > 16 0 28 2684 topology 2794 3542 -> 15 0 29 2684 topology 2712 3543 -> 16 0 29 2684 topology 2714 3543 -> 15 0 29 2684 topology 2766 3544 -> 16 0 29 2684 topology 2768 3544 -> 15 0 29 2684 topology 2694 3545 -> 16 0 29 2684 topology 2695 3545 -> 15 0 29 2684 topology 2748 3546 -> 16 0 29 2684 topology 2749 3546 -> 15 0 29 2684 topology 2715 3547 -> 16 0 29 2684 topology 2717 3547 -> 15 0 28 2684 topology 2753 3548 +> 15 0 28 2684 topology 2734 3543 +> 16 0 28 2684 topology 2794 3543 +> 15 0 28 2684 topology 2738 3544 +> 16 0 28 2684 topology 2794 3544 +> 15 0 28 2684 topology 2737 3545 +> 16 0 28 2684 topology 2794 3545 +> 15 0 28 2684 topology 2741 3546 +> 16 0 28 2684 topology 2794 3546 +> 15 0 28 2684 topology 2740 3547 +> 16 0 28 2684 topology 2794 3547 +> 15 0 28 2684 topology 2744 3548 > 16 0 28 2684 topology 2794 3548 -> 15 0 29 2684 topology 2769 3549 -> 16 0 29 2684 topology 2771 3549 -> 15 0 29 2684 topology 2724 3550 -> 16 0 29 2684 topology 2725 3550 -> 15 0 28 2684 topology 2729 3551 +> 15 0 28 2684 topology 2743 3549 +> 16 0 28 2684 topology 2794 3549 +> 15 0 28 2684 topology 2747 3550 +> 16 0 28 2684 topology 2794 3550 +> 15 0 28 2684 topology 2746 3551 > 16 0 28 2684 topology 2794 3551 -> 15 0 29 2684 topology 2778 3552 -> 16 0 29 2684 topology 2779 3552 -> 15 0 28 2684 topology 2705 3553 +> 15 0 28 2684 topology 2750 3552 +> 16 0 28 2684 topology 2794 3552 +> 15 0 28 2684 topology 2749 3553 > 16 0 28 2684 topology 2794 3553 -> 15 0 29 2684 topology 2772 3554 -> 16 0 29 2684 topology 2774 3554 -> 15 0 29 2684 topology 2700 3555 -> 16 0 29 2684 topology 2701 3555 -> 15 0 29 2684 topology 2754 3556 -> 16 0 29 2684 topology 2755 3556 -> 15 0 28 2684 topology 2789 3557 +> 15 0 28 2684 topology 2753 3554 +> 16 0 28 2684 topology 2794 3554 +> 15 0 28 2684 topology 2752 3555 +> 16 0 28 2684 topology 2794 3555 +> 15 0 28 2684 topology 2756 3556 +> 16 0 28 2684 topology 2794 3556 +> 15 0 28 2684 topology 2755 3557 > 16 0 28 2684 topology 2794 3557 -> 15 0 28 2684 topology 2765 3558 +> 15 0 28 2684 topology 2759 3558 > 16 0 28 2684 topology 2794 3558 -> 15 0 29 2684 topology 2775 3559 -> 16 0 29 2684 topology 2777 3559 -> 15 0 29 2684 topology 2730 3560 -> 16 0 29 2684 topology 2731 3560 -> 15 0 28 2684 topology 2741 3561 +> 15 0 28 2684 topology 2758 3559 +> 16 0 28 2684 topology 2794 3559 +> 15 0 28 2684 topology 2762 3560 +> 16 0 28 2684 topology 2794 3560 +> 15 0 28 2684 topology 2761 3561 > 16 0 28 2684 topology 2794 3561 -> 15 0 29 2684 topology 2784 3562 -> 16 0 29 2684 topology 2785 3562 -> 15 0 28 2684 topology 2717 3563 +> 15 0 28 2684 topology 2765 3562 +> 16 0 28 2684 topology 2794 3562 +> 15 0 28 2684 topology 2764 3563 > 16 0 28 2684 topology 2794 3563 -> 15 0 29 2684 topology 2706 3564 -> 16 0 29 2684 topology 2707 3564 -> 15 0 29 2684 topology 2760 3565 -> 16 0 29 2684 topology 2761 3565 -> 15 0 28 2684 topology 2777 3566 +> 15 0 28 2684 topology 2768 3564 +> 16 0 28 2684 topology 2794 3564 +> 15 0 28 2684 topology 2767 3565 +> 16 0 28 2684 topology 2794 3565 +> 15 0 28 2684 topology 2771 3566 > 16 0 28 2684 topology 2794 3566 -> 15 0 29 2684 topology 2736 3567 -> 16 0 29 2684 topology 2737 3567 -> 15 0 29 2684 topology 2790 3568 -> 16 0 29 2684 topology 2791 3568 -> 15 0 29 2684 topology 2712 3569 -> 16 0 29 2684 topology 2713 3569 -> 15 0 29 2684 topology 2766 3570 -> 16 0 29 2684 topology 2767 3570 -> 15 0 28 2684 topology 2695 3571 +> 15 0 28 2684 topology 2770 3567 +> 16 0 28 2684 topology 2794 3567 +> 15 0 28 2684 topology 2774 3568 +> 16 0 28 2684 topology 2794 3568 +> 15 0 28 2684 topology 2773 3569 +> 16 0 28 2684 topology 2794 3569 +> 15 0 28 2684 topology 2777 3570 +> 16 0 28 2684 topology 2794 3570 +> 15 0 28 2684 topology 2776 3571 > 16 0 28 2684 topology 2794 3571 -> 15 0 28 2684 topology 2725 3572 +> 15 0 28 2684 topology 2780 3572 > 16 0 28 2684 topology 2794 3572 -> 15 0 29 2684 topology 2742 3573 -> 16 0 29 2684 topology 2743 3573 -> 15 0 28 2684 topology 2755 3574 +> 15 0 28 2684 topology 2779 3573 +> 16 0 28 2684 topology 2794 3573 +> 15 0 28 2684 topology 2783 3574 > 16 0 28 2684 topology 2794 3574 -> 15 0 29 2684 topology 2772 3575 -> 16 0 29 2684 topology 2773 3575 -> 15 0 28 2684 topology 2785 3576 +> 15 0 28 2684 topology 2782 3575 +> 16 0 28 2684 topology 2794 3575 +> 15 0 28 2684 topology 2786 3576 > 16 0 28 2684 topology 2794 3576 -> 15 0 28 2684 topology 2707 3577 +> 15 0 28 2684 topology 2785 3577 > 16 0 28 2684 topology 2794 3577 -> 15 0 28 2684 topology 2737 3578 +> 15 0 28 2684 topology 2789 3578 > 16 0 28 2684 topology 2794 3578 -> 15 0 28 2684 topology 2767 3579 +> 15 0 28 2684 topology 2788 3579 > 16 0 28 2684 topology 2794 3579 -> 15 0 28 2684 topology 2720 3580 +> 15 0 28 2684 topology 2792 3580 > 16 0 28 2684 topology 2794 3580 -> 15 0 28 2684 topology 2696 3581 +> 15 0 28 2684 topology 2791 3581 > 16 0 28 2684 topology 2794 3581 -> 15 0 28 2684 topology 2780 3582 -> 16 0 28 2684 topology 2794 3582 -> 15 0 28 2684 topology 2756 3583 -> 16 0 28 2684 topology 2794 3583 -> 15 0 28 2684 topology 2732 3584 -> 16 0 28 2684 topology 2794 3584 -> 15 0 28 2684 topology 2708 3585 -> 16 0 28 2684 topology 2794 3585 -> 15 0 28 2684 topology 2792 3586 -> 16 0 28 2684 topology 2794 3586 -> 15 0 28 2684 topology 2768 3587 -> 16 0 28 2684 topology 2794 3587 -> 15 0 28 2684 topology 2744 3588 -> 16 0 28 2684 topology 2794 3588 -> 15 0 28 2684 topology 2692 3589 -> 16 0 28 2684 topology 2794 3589 -> 15 0 28 2684 topology 2722 3590 -> 16 0 28 2684 topology 2794 3590 -> 15 0 28 2684 topology 2752 3591 -> 16 0 28 2684 topology 2794 3591 -> 15 0 28 2684 topology 2782 3592 -> 16 0 28 2684 topology 2794 3592 -> 15 0 28 2684 topology 2704 3593 -> 16 0 28 2684 topology 2794 3593 -> 15 0 29 2684 topology 2718 3594 -> 16 0 29 2684 topology 2720 3594 -> 15 0 28 2684 topology 2734 3595 -> 16 0 28 2684 topology 2794 3595 -> 15 0 28 2684 topology 2764 3596 -> 16 0 28 2684 topology 2794 3596 -> 15 0 28 2684 topology 2686 3597 -> 16 0 28 2684 topology 2794 3597 -> 15 0 29 2684 topology 2721 3598 -> 16 0 29 2684 topology 2723 3598 -> 15 0 28 2684 topology 2716 3599 -> 16 0 28 2684 topology 2794 3599 -> 15 0 29 2684 topology 2724 3600 -> 16 0 29 2684 topology 2726 3600 -> 15 0 28 2684 topology 2746 3601 -> 16 0 28 2684 topology 2794 3601 -> 15 0 29 2684 topology 2778 3602 -> 16 0 29 2684 topology 2780 3602 -> 15 0 28 2684 topology 2776 3603 -> 16 0 28 2684 topology 2794 3603 -> 15 0 29 2684 topology 2727 3604 -> 16 0 29 2684 topology 2729 3604 -> 15 0 29 2684 topology 2781 3605 -> 16 0 29 2684 topology 2783 3605 -> 15 0 29 2684 topology 2730 3606 -> 16 0 29 2684 topology 2732 3606 -> 15 0 29 2684 topology 2784 3607 -> 16 0 29 2684 topology 2786 3607 -> 15 0 29 2684 topology 2733 3608 -> 16 0 29 2684 topology 2735 3608 -> 15 0 29 2684 topology 2787 3609 -> 16 0 29 2684 topology 2789 3609 -> 15 0 29 2684 topology 2736 3610 -> 16 0 29 2684 topology 2738 3610 -> 15 0 29 2684 topology 2790 3611 -> 16 0 29 2684 topology 2792 3611 -> 15 0 29 2684 topology 2691 3612 -> 16 0 29 2684 topology 2692 3612 -> 15 0 29 2684 topology 2685 3613 -> 16 0 29 2684 topology 2687 3613 -> 15 0 29 2684 topology 2739 3614 -> 16 0 29 2684 topology 2741 3614 -> 15 0 29 2684 topology 2721 3615 -> 16 0 29 2684 topology 2722 3615 -> 15 0 28 2684 topology 2723 3616 -> 16 0 28 2684 topology 2794 3616 -> 15 0 28 2684 topology 2699 3617 -> 16 0 28 2684 topology 2794 3617 -> 15 0 29 2684 topology 2742 3618 -> 16 0 29 2684 topology 2744 3618 -> 15 0 29 2684 topology 2697 3619 -> 16 0 29 2684 topology 2698 3619 -> 15 0 29 2684 topology 2751 3620 -> 16 0 29 2684 topology 2752 3620 -> 15 0 28 2684 topology 2783 3621 -> 16 0 28 2684 topology 2794 3621 -> 15 0 29 2684 topology 2745 3622 -> 16 0 29 2684 topology 2747 3622 -> 15 0 28 2684 topology 2759 3623 -> 16 0 28 2684 topology 2794 3623 -> 15 0 29 2684 topology 2727 3624 -> 16 0 29 2684 topology 2728 3624 -> 15 0 28 2684 topology 2735 3625 -> 16 0 28 2684 topology 2794 3625 -> 15 0 29 2684 topology 2781 3626 -> 16 0 29 2684 topology 2782 3626 -> 15 0 28 2684 topology 2711 3627 -> 16 0 28 2684 topology 2794 3627 -> 15 0 28 2684 topology 2687 3628 -> 16 0 28 2684 topology 2794 3628 -> 15 0 29 2684 topology 2703 3629 -> 16 0 29 2684 topology 2704 3629 -> 15 0 29 2684 topology 2757 3630 -> 16 0 29 2684 topology 2758 3630 -> 15 0 28 2684 topology 2771 3631 -> 16 0 28 2684 topology 2794 3631 -> 15 0 29 2684 topology 2733 3632 -> 16 0 29 2684 topology 2734 3632 -> 15 0 28 2684 topology 2747 3633 -> 16 0 28 2684 topology 2794 3633 -> 15 0 29 2684 topology 2787 3634 -> 16 0 29 2684 topology 2788 3634 -> 15 0 29 2684 topology 2709 3635 -> 16 0 29 2684 topology 2710 3635 -> 15 0 29 2684 topology 2763 3636 -> 16 0 29 2684 topology 2764 3636 -> 15 0 28 2684 topology 2689 3637 -> 16 0 28 2684 topology 2794 3637 -> 15 0 29 2684 topology 2685 3638 -> 16 0 29 2684 topology 2686 3638 -> 15 0 28 2684 topology 2719 3639 -> 16 0 28 2684 topology 2794 3639 -> 15 0 29 2684 topology 2739 3640 -> 16 0 29 2684 topology 2740 3640 -> 15 0 28 2684 topology 2749 3641 -> 16 0 28 2684 topology 2794 3641 -> 15 0 29 2684 topology 2715 3642 -> 16 0 29 2684 topology 2716 3642 -> 15 0 29 2684 topology 2769 3643 -> 16 0 29 2684 topology 2770 3643 -> 15 0 28 2684 topology 2779 3644 -> 16 0 28 2684 topology 2794 3644 -> 15 0 28 2684 topology 2701 3645 -> 16 0 28 2684 topology 2794 3645 -> 15 0 28 2684 topology 2731 3646 -> 16 0 28 2684 topology 2794 3646 -> 15 0 29 2684 topology 2745 3647 -> 16 0 29 2684 topology 2746 3647 -> 15 0 28 2684 topology 2761 3648 -> 16 0 28 2684 topology 2794 3648 -> 15 0 29 2684 topology 2775 3649 -> 16 0 29 2684 topology 2776 3649 -> 15 0 28 2684 topology 2791 3650 -> 16 0 28 2684 topology 2794 3650 -> 15 0 28 2684 topology 2713 3651 -> 16 0 28 2684 topology 2794 3651 -> 15 0 28 2684 topology 2743 3652 -> 16 0 28 2684 topology 2794 3652 -> 15 0 28 2684 topology 2773 3653 -> 16 0 28 2684 topology 2794 3653 -> 15 0 28 2684 topology 2690 3654 -> 16 0 28 2684 topology 2794 3654 -> 15 0 29 2795 topology 2796 3655 -> 16 0 29 2795 topology 2798 3655 -> 15 0 29 2795 topology 2850 3656 -> 16 0 29 2795 topology 2852 3656 -> 15 0 29 2795 topology 2799 3657 -> 16 0 29 2795 topology 2801 3657 -> 15 0 29 2795 topology 2853 3658 -> 16 0 29 2795 topology 2855 3658 -> 15 0 29 2795 topology 2802 3659 -> 16 0 29 2795 topology 2804 3659 -> 15 0 29 2795 topology 2856 3660 -> 16 0 29 2795 topology 2858 3660 -> 15 0 29 2795 topology 2811 3661 -> 16 0 29 2795 topology 2812 3661 -> 15 0 28 2795 topology 2816 3662 +> 15 0 29 2684 topology 2793 3582 +> 16 0 29 2684 topology 2794 3582 +> 15 0 30 2684 topology 2685 3583 +> 16 0 30 2684 topology 2687 3583 +> 15 0 30 2684 topology 2685 3584 +> 16 0 30 2684 topology 2686 3584 +> 15 0 30 2684 topology 2688 3585 +> 16 0 30 2684 topology 2690 3585 +> 15 0 30 2684 topology 2688 3586 +> 16 0 30 2684 topology 2689 3586 +> 15 0 30 2684 topology 2691 3587 +> 16 0 30 2684 topology 2693 3587 +> 15 0 30 2684 topology 2691 3588 +> 16 0 30 2684 topology 2692 3588 +> 15 0 30 2684 topology 2694 3589 +> 16 0 30 2684 topology 2696 3589 +> 15 0 30 2684 topology 2694 3590 +> 16 0 30 2684 topology 2695 3590 +> 15 0 30 2684 topology 2697 3591 +> 16 0 30 2684 topology 2699 3591 +> 15 0 30 2684 topology 2697 3592 +> 16 0 30 2684 topology 2698 3592 +> 15 0 30 2684 topology 2700 3593 +> 16 0 30 2684 topology 2702 3593 +> 15 0 30 2684 topology 2700 3594 +> 16 0 30 2684 topology 2701 3594 +> 15 0 30 2684 topology 2703 3595 +> 16 0 30 2684 topology 2705 3595 +> 15 0 30 2684 topology 2703 3596 +> 16 0 30 2684 topology 2704 3596 +> 15 0 30 2684 topology 2706 3597 +> 16 0 30 2684 topology 2708 3597 +> 15 0 30 2684 topology 2706 3598 +> 16 0 30 2684 topology 2707 3598 +> 15 0 30 2684 topology 2709 3599 +> 16 0 30 2684 topology 2711 3599 +> 15 0 30 2684 topology 2709 3600 +> 16 0 30 2684 topology 2710 3600 +> 15 0 30 2684 topology 2712 3601 +> 16 0 30 2684 topology 2714 3601 +> 15 0 30 2684 topology 2712 3602 +> 16 0 30 2684 topology 2713 3602 +> 15 0 30 2684 topology 2715 3603 +> 16 0 30 2684 topology 2717 3603 +> 15 0 30 2684 topology 2715 3604 +> 16 0 30 2684 topology 2716 3604 +> 15 0 30 2684 topology 2718 3605 +> 16 0 30 2684 topology 2720 3605 +> 15 0 30 2684 topology 2718 3606 +> 16 0 30 2684 topology 2719 3606 +> 15 0 30 2684 topology 2721 3607 +> 16 0 30 2684 topology 2723 3607 +> 15 0 30 2684 topology 2721 3608 +> 16 0 30 2684 topology 2722 3608 +> 15 0 30 2684 topology 2724 3609 +> 16 0 30 2684 topology 2726 3609 +> 15 0 30 2684 topology 2724 3610 +> 16 0 30 2684 topology 2725 3610 +> 15 0 30 2684 topology 2727 3611 +> 16 0 30 2684 topology 2729 3611 +> 15 0 30 2684 topology 2727 3612 +> 16 0 30 2684 topology 2728 3612 +> 15 0 30 2684 topology 2730 3613 +> 16 0 30 2684 topology 2732 3613 +> 15 0 30 2684 topology 2730 3614 +> 16 0 30 2684 topology 2731 3614 +> 15 0 30 2684 topology 2733 3615 +> 16 0 30 2684 topology 2735 3615 +> 15 0 30 2684 topology 2733 3616 +> 16 0 30 2684 topology 2734 3616 +> 15 0 30 2684 topology 2736 3617 +> 16 0 30 2684 topology 2738 3617 +> 15 0 30 2684 topology 2736 3618 +> 16 0 30 2684 topology 2737 3618 +> 15 0 30 2684 topology 2739 3619 +> 16 0 30 2684 topology 2741 3619 +> 15 0 30 2684 topology 2739 3620 +> 16 0 30 2684 topology 2740 3620 +> 15 0 30 2684 topology 2742 3621 +> 16 0 30 2684 topology 2744 3621 +> 15 0 30 2684 topology 2742 3622 +> 16 0 30 2684 topology 2743 3622 +> 15 0 30 2684 topology 2745 3623 +> 16 0 30 2684 topology 2747 3623 +> 15 0 30 2684 topology 2745 3624 +> 16 0 30 2684 topology 2746 3624 +> 15 0 30 2684 topology 2748 3625 +> 16 0 30 2684 topology 2750 3625 +> 15 0 30 2684 topology 2748 3626 +> 16 0 30 2684 topology 2749 3626 +> 15 0 30 2684 topology 2751 3627 +> 16 0 30 2684 topology 2753 3627 +> 15 0 30 2684 topology 2751 3628 +> 16 0 30 2684 topology 2752 3628 +> 15 0 30 2684 topology 2754 3629 +> 16 0 30 2684 topology 2756 3629 +> 15 0 30 2684 topology 2754 3630 +> 16 0 30 2684 topology 2755 3630 +> 15 0 30 2684 topology 2757 3631 +> 16 0 30 2684 topology 2759 3631 +> 15 0 30 2684 topology 2757 3632 +> 16 0 30 2684 topology 2758 3632 +> 15 0 30 2684 topology 2760 3633 +> 16 0 30 2684 topology 2762 3633 +> 15 0 30 2684 topology 2760 3634 +> 16 0 30 2684 topology 2761 3634 +> 15 0 30 2684 topology 2763 3635 +> 16 0 30 2684 topology 2765 3635 +> 15 0 30 2684 topology 2763 3636 +> 16 0 30 2684 topology 2764 3636 +> 15 0 30 2684 topology 2766 3637 +> 16 0 30 2684 topology 2768 3637 +> 15 0 30 2684 topology 2766 3638 +> 16 0 30 2684 topology 2767 3638 +> 15 0 30 2684 topology 2769 3639 +> 16 0 30 2684 topology 2771 3639 +> 15 0 30 2684 topology 2769 3640 +> 16 0 30 2684 topology 2770 3640 +> 15 0 30 2684 topology 2772 3641 +> 16 0 30 2684 topology 2774 3641 +> 15 0 30 2684 topology 2772 3642 +> 16 0 30 2684 topology 2773 3642 +> 15 0 30 2684 topology 2775 3643 +> 16 0 30 2684 topology 2777 3643 +> 15 0 30 2684 topology 2775 3644 +> 16 0 30 2684 topology 2776 3644 +> 15 0 30 2684 topology 2778 3645 +> 16 0 30 2684 topology 2780 3645 +> 15 0 30 2684 topology 2778 3646 +> 16 0 30 2684 topology 2779 3646 +> 15 0 30 2684 topology 2781 3647 +> 16 0 30 2684 topology 2783 3647 +> 15 0 30 2684 topology 2781 3648 +> 16 0 30 2684 topology 2782 3648 +> 15 0 30 2684 topology 2784 3649 +> 16 0 30 2684 topology 2786 3649 +> 15 0 30 2684 topology 2784 3650 +> 16 0 30 2684 topology 2785 3650 +> 15 0 30 2684 topology 2787 3651 +> 16 0 30 2684 topology 2789 3651 +> 15 0 30 2684 topology 2787 3652 +> 16 0 30 2684 topology 2788 3652 +> 15 0 30 2684 topology 2790 3653 +> 16 0 30 2684 topology 2792 3653 +> 15 0 30 2684 topology 2790 3654 +> 16 0 30 2684 topology 2791 3654 +> 15 0 28 2795 topology 2798 3655 +> 16 0 28 2795 topology 2905 3655 +> 15 0 28 2795 topology 2797 3656 +> 16 0 28 2795 topology 2905 3656 +> 15 0 28 2795 topology 2801 3657 +> 16 0 28 2795 topology 2905 3657 +> 15 0 28 2795 topology 2800 3658 +> 16 0 28 2795 topology 2905 3658 +> 15 0 28 2795 topology 2804 3659 +> 16 0 28 2795 topology 2905 3659 +> 15 0 28 2795 topology 2803 3660 +> 16 0 28 2795 topology 2905 3660 +> 15 0 28 2795 topology 2807 3661 +> 16 0 28 2795 topology 2905 3661 +> 15 0 28 2795 topology 2806 3662 > 16 0 28 2795 topology 2905 3662 -> 15 0 29 2795 topology 2805 3663 -> 16 0 29 2795 topology 2807 3663 -> 15 0 29 2795 topology 2859 3664 -> 16 0 29 2795 topology 2861 3664 -> 15 0 29 2795 topology 2841 3665 -> 16 0 29 2795 topology 2842 3665 -> 15 0 28 2795 topology 2876 3666 +> 15 0 28 2795 topology 2810 3663 +> 16 0 28 2795 topology 2905 3663 +> 15 0 28 2795 topology 2809 3664 +> 16 0 28 2795 topology 2905 3664 +> 15 0 28 2795 topology 2813 3665 +> 16 0 28 2795 topology 2905 3665 +> 15 0 28 2795 topology 2812 3666 > 16 0 28 2795 topology 2905 3666 -> 15 0 29 2795 topology 2808 3667 -> 16 0 29 2795 topology 2810 3667 -> 15 0 28 2795 topology 2852 3668 +> 15 0 28 2795 topology 2816 3667 +> 16 0 28 2795 topology 2905 3667 +> 15 0 28 2795 topology 2815 3668 > 16 0 28 2795 topology 2905 3668 -> 15 0 29 2795 topology 2862 3669 -> 16 0 29 2795 topology 2864 3669 -> 15 0 29 2795 topology 2817 3670 -> 16 0 29 2795 topology 2818 3670 -> 15 0 28 2795 topology 2828 3671 +> 15 0 28 2795 topology 2819 3669 +> 16 0 28 2795 topology 2905 3669 +> 15 0 28 2795 topology 2818 3670 +> 16 0 28 2795 topology 2905 3670 +> 15 0 28 2795 topology 2822 3671 > 16 0 28 2795 topology 2905 3671 -> 15 0 29 2795 topology 2871 3672 -> 16 0 29 2795 topology 2872 3672 -> 15 0 28 2795 topology 2804 3673 +> 15 0 28 2795 topology 2821 3672 +> 16 0 28 2795 topology 2905 3672 +> 15 0 28 2795 topology 2825 3673 > 16 0 28 2795 topology 2905 3673 -> 15 0 29 2795 topology 2865 3674 -> 16 0 29 2795 topology 2867 3674 -> 15 0 29 2795 topology 2847 3675 -> 16 0 29 2795 topology 2848 3675 -> 15 0 28 2795 topology 2888 3676 +> 15 0 28 2795 topology 2824 3674 +> 16 0 28 2795 topology 2905 3674 +> 15 0 28 2795 topology 2828 3675 +> 16 0 28 2795 topology 2905 3675 +> 15 0 28 2795 topology 2827 3676 > 16 0 28 2795 topology 2905 3676 -> 15 0 29 2795 topology 2901 3677 -> 16 0 29 2795 topology 2902 3677 -> 15 0 28 2795 topology 2864 3678 +> 15 0 28 2795 topology 2831 3677 +> 16 0 28 2795 topology 2905 3677 +> 15 0 28 2795 topology 2830 3678 > 16 0 28 2795 topology 2905 3678 -> 15 0 29 2795 topology 2868 3679 -> 16 0 29 2795 topology 2870 3679 -> 15 0 29 2795 topology 2823 3680 -> 16 0 29 2795 topology 2824 3680 -> 15 0 28 2795 topology 2840 3681 +> 15 0 28 2795 topology 2834 3679 +> 16 0 28 2795 topology 2905 3679 +> 15 0 28 2795 topology 2833 3680 +> 16 0 28 2795 topology 2905 3680 +> 15 0 28 2795 topology 2837 3681 > 16 0 28 2795 topology 2905 3681 -> 15 0 29 2795 topology 2877 3682 -> 16 0 29 2795 topology 2878 3682 -> 15 0 29 2795 topology 2799 3683 -> 16 0 29 2795 topology 2800 3683 -> 15 0 29 2795 topology 2853 3684 -> 16 0 29 2795 topology 2854 3684 -> 15 0 28 2795 topology 2900 3685 +> 15 0 28 2795 topology 2836 3682 +> 16 0 28 2795 topology 2905 3682 +> 15 0 28 2795 topology 2840 3683 +> 16 0 28 2795 topology 2905 3683 +> 15 0 28 2795 topology 2839 3684 +> 16 0 28 2795 topology 2905 3684 +> 15 0 28 2795 topology 2843 3685 > 16 0 28 2795 topology 2905 3685 -> 15 0 29 2795 topology 2829 3686 -> 16 0 29 2795 topology 2830 3686 -> 15 0 29 2795 topology 2883 3687 -> 16 0 29 2795 topology 2884 3687 -> 15 0 29 2795 topology 2805 3688 -> 16 0 29 2795 topology 2806 3688 -> 15 0 28 2795 topology 2818 3689 +> 15 0 28 2795 topology 2842 3686 +> 16 0 28 2795 topology 2905 3686 +> 15 0 28 2795 topology 2846 3687 +> 16 0 28 2795 topology 2905 3687 +> 15 0 28 2795 topology 2845 3688 +> 16 0 28 2795 topology 2905 3688 +> 15 0 28 2795 topology 2849 3689 > 16 0 28 2795 topology 2905 3689 -> 15 0 29 2795 topology 2859 3690 -> 16 0 29 2795 topology 2860 3690 -> 15 0 28 2795 topology 2848 3691 +> 15 0 28 2795 topology 2848 3690 +> 16 0 28 2795 topology 2905 3690 +> 15 0 28 2795 topology 2852 3691 > 16 0 28 2795 topology 2905 3691 -> 15 0 29 2795 topology 2835 3692 -> 16 0 29 2795 topology 2836 3692 -> 15 0 28 2795 topology 2878 3693 +> 15 0 28 2795 topology 2851 3692 +> 16 0 28 2795 topology 2905 3692 +> 15 0 28 2795 topology 2855 3693 > 16 0 28 2795 topology 2905 3693 -> 15 0 29 2795 topology 2889 3694 -> 16 0 29 2795 topology 2890 3694 -> 15 0 28 2795 topology 2800 3695 +> 15 0 28 2795 topology 2854 3694 +> 16 0 28 2795 topology 2905 3694 +> 15 0 28 2795 topology 2858 3695 > 16 0 28 2795 topology 2905 3695 -> 15 0 28 2795 topology 2830 3696 +> 15 0 28 2795 topology 2857 3696 > 16 0 28 2795 topology 2905 3696 -> 15 0 29 2795 topology 2865 3697 -> 16 0 29 2795 topology 2866 3697 +> 15 0 28 2795 topology 2861 3697 +> 16 0 28 2795 topology 2905 3697 > 15 0 28 2795 topology 2860 3698 > 16 0 28 2795 topology 2905 3698 -> 15 0 28 2795 topology 2890 3699 +> 15 0 28 2795 topology 2864 3699 > 16 0 28 2795 topology 2905 3699 -> 15 0 29 2795 topology 2895 3700 -> 16 0 29 2795 topology 2896 3700 -> 15 0 28 2795 topology 2843 3701 +> 15 0 28 2795 topology 2863 3700 +> 16 0 28 2795 topology 2905 3700 +> 15 0 28 2795 topology 2867 3701 > 16 0 28 2795 topology 2905 3701 -> 15 0 28 2795 topology 2819 3702 +> 15 0 28 2795 topology 2866 3702 > 16 0 28 2795 topology 2905 3702 -> 15 0 28 2795 topology 2903 3703 +> 15 0 28 2795 topology 2870 3703 > 16 0 28 2795 topology 2905 3703 -> 15 0 28 2795 topology 2879 3704 +> 15 0 28 2795 topology 2869 3704 > 16 0 28 2795 topology 2905 3704 -> 15 0 28 2795 topology 2855 3705 +> 15 0 28 2795 topology 2873 3705 > 16 0 28 2795 topology 2905 3705 -> 15 0 28 2795 topology 2831 3706 +> 15 0 28 2795 topology 2872 3706 > 16 0 28 2795 topology 2905 3706 -> 15 0 28 2795 topology 2807 3707 +> 15 0 28 2795 topology 2876 3707 > 16 0 28 2795 topology 2905 3707 -> 15 0 28 2795 topology 2891 3708 +> 15 0 28 2795 topology 2875 3708 > 16 0 28 2795 topology 2905 3708 -> 15 0 28 2795 topology 2867 3709 +> 15 0 28 2795 topology 2879 3709 > 16 0 28 2795 topology 2905 3709 -> 15 0 28 2795 topology 2815 3710 +> 15 0 28 2795 topology 2878 3710 > 16 0 28 2795 topology 2905 3710 -> 15 0 28 2795 topology 2845 3711 +> 15 0 28 2795 topology 2882 3711 > 16 0 28 2795 topology 2905 3711 -> 15 0 28 2795 topology 2875 3712 +> 15 0 28 2795 topology 2881 3712 > 16 0 28 2795 topology 2905 3712 -> 15 0 28 2795 topology 2797 3713 +> 15 0 28 2795 topology 2885 3713 > 16 0 28 2795 topology 2905 3713 -> 15 0 30 2795 topology 2904 3714 -> 16 0 30 2795 topology 2905 3714 -> 15 0 28 2795 topology 2827 3715 +> 15 0 28 2795 topology 2884 3714 +> 16 0 28 2795 topology 2905 3714 +> 15 0 28 2795 topology 2888 3715 > 16 0 28 2795 topology 2905 3715 -> 15 0 28 2795 topology 2857 3716 +> 15 0 28 2795 topology 2887 3716 > 16 0 28 2795 topology 2905 3716 -> 15 0 29 2795 topology 2811 3717 -> 16 0 29 2795 topology 2813 3717 -> 15 0 28 2795 topology 2887 3718 +> 15 0 28 2795 topology 2891 3717 +> 16 0 28 2795 topology 2905 3717 +> 15 0 28 2795 topology 2890 3718 > 16 0 28 2795 topology 2905 3718 -> 15 0 28 2795 topology 2809 3719 +> 15 0 28 2795 topology 2894 3719 > 16 0 28 2795 topology 2905 3719 -> 15 0 29 2795 topology 2814 3720 -> 16 0 29 2795 topology 2816 3720 -> 15 0 28 2795 topology 2839 3721 +> 15 0 28 2795 topology 2893 3720 +> 16 0 28 2795 topology 2905 3720 +> 15 0 28 2795 topology 2897 3721 > 16 0 28 2795 topology 2905 3721 -> 15 0 28 2795 topology 2869 3722 +> 15 0 28 2795 topology 2896 3722 > 16 0 28 2795 topology 2905 3722 -> 15 0 29 2795 topology 2817 3723 -> 16 0 29 2795 topology 2819 3723 -> 15 0 29 2795 topology 2871 3724 -> 16 0 29 2795 topology 2873 3724 -> 15 0 28 2795 topology 2899 3725 +> 15 0 28 2795 topology 2900 3723 +> 16 0 28 2795 topology 2905 3723 +> 15 0 28 2795 topology 2899 3724 +> 16 0 28 2795 topology 2905 3724 +> 15 0 28 2795 topology 2903 3725 > 16 0 28 2795 topology 2905 3725 -> 15 0 29 2795 topology 2820 3726 -> 16 0 29 2795 topology 2822 3726 -> 15 0 29 2795 topology 2874 3727 -> 16 0 29 2795 topology 2876 3727 -> 15 0 29 2795 topology 2823 3728 -> 16 0 29 2795 topology 2825 3728 -> 15 0 29 2795 topology 2877 3729 -> 16 0 29 2795 topology 2879 3729 -> 15 0 29 2795 topology 2826 3730 -> 16 0 29 2795 topology 2828 3730 -> 15 0 29 2795 topology 2880 3731 -> 16 0 29 2795 topology 2882 3731 -> 15 0 29 2795 topology 2829 3732 -> 16 0 29 2795 topology 2831 3732 -> 15 0 29 2795 topology 2883 3733 -> 16 0 29 2795 topology 2885 3733 -> 15 0 29 2795 topology 2832 3734 -> 16 0 29 2795 topology 2834 3734 -> 15 0 28 2795 topology 2846 3735 -> 16 0 28 2795 topology 2905 3735 -> 15 0 29 2795 topology 2886 3736 -> 16 0 29 2795 topology 2888 3736 -> 15 0 29 2795 topology 2814 3737 -> 16 0 29 2795 topology 2815 3737 -> 15 0 28 2795 topology 2822 3738 -> 16 0 28 2795 topology 2905 3738 -> 15 0 28 2795 topology 2798 3739 -> 16 0 28 2795 topology 2905 3739 -> 15 0 29 2795 topology 2835 3740 -> 16 0 29 2795 topology 2837 3740 -> 15 0 29 2795 topology 2889 3741 -> 16 0 29 2795 topology 2891 3741 -> 15 0 29 2795 topology 2844 3742 -> 16 0 29 2795 topology 2845 3742 -> 15 0 28 2795 topology 2882 3743 -> 16 0 28 2795 topology 2905 3743 -> 15 0 29 2795 topology 2838 3744 -> 16 0 29 2795 topology 2840 3744 -> 15 0 28 2795 topology 2858 3745 -> 16 0 28 2795 topology 2905 3745 -> 15 0 29 2795 topology 2892 3746 -> 16 0 29 2795 topology 2894 3746 -> 15 0 29 2795 topology 2820 3747 -> 16 0 29 2795 topology 2821 3747 -> 15 0 28 2795 topology 2834 3748 -> 16 0 28 2795 topology 2905 3748 -> 15 0 29 2795 topology 2874 3749 -> 16 0 29 2795 topology 2875 3749 -> 15 0 28 2795 topology 2810 3750 -> 16 0 28 2795 topology 2905 3750 -> 15 0 29 2795 topology 2895 3751 -> 16 0 29 2795 topology 2897 3751 -> 15 0 29 2795 topology 2796 3752 -> 16 0 29 2795 topology 2797 3752 -> 15 0 29 2795 topology 2850 3753 -> 16 0 29 2795 topology 2851 3753 -> 15 0 28 2795 topology 2894 3754 -> 16 0 28 2795 topology 2905 3754 -> 15 0 28 2795 topology 2870 3755 -> 16 0 28 2795 topology 2905 3755 -> 15 0 29 2795 topology 2898 3756 -> 16 0 29 2795 topology 2900 3756 -> 15 0 29 2795 topology 2826 3757 -> 16 0 29 2795 topology 2827 3757 -> 15 0 29 2795 topology 2880 3758 -> 16 0 29 2795 topology 2881 3758 -> 15 0 29 2795 topology 2802 3759 -> 16 0 29 2795 topology 2803 3759 -> 15 0 28 2795 topology 2812 3760 -> 16 0 28 2795 topology 2905 3760 -> 15 0 29 2795 topology 2856 3761 -> 16 0 29 2795 topology 2857 3761 -> 15 0 28 2795 topology 2842 3762 -> 16 0 28 2795 topology 2905 3762 -> 15 0 29 2795 topology 2832 3763 -> 16 0 29 2795 topology 2833 3763 -> 15 0 28 2795 topology 2872 3764 -> 16 0 28 2795 topology 2905 3764 -> 15 0 29 2795 topology 2886 3765 -> 16 0 29 2795 topology 2887 3765 -> 15 0 28 2795 topology 2902 3766 -> 16 0 28 2795 topology 2905 3766 -> 15 0 29 2795 topology 2808 3767 -> 16 0 29 2795 topology 2809 3767 -> 15 0 28 2795 topology 2824 3768 -> 16 0 28 2795 topology 2905 3768 -> 15 0 29 2795 topology 2862 3769 -> 16 0 29 2795 topology 2863 3769 -> 15 0 28 2795 topology 2854 3770 -> 16 0 28 2795 topology 2905 3770 -> 15 0 29 2795 topology 2838 3771 -> 16 0 29 2795 topology 2839 3771 -> 15 0 28 2795 topology 2884 3772 -> 16 0 28 2795 topology 2905 3772 -> 15 0 29 2795 topology 2892 3773 -> 16 0 29 2795 topology 2893 3773 -> 15 0 28 2795 topology 2806 3774 -> 16 0 28 2795 topology 2905 3774 -> 15 0 28 2795 topology 2836 3775 -> 16 0 28 2795 topology 2905 3775 -> 15 0 29 2795 topology 2868 3776 -> 16 0 29 2795 topology 2869 3776 -> 15 0 28 2795 topology 2866 3777 -> 16 0 28 2795 topology 2905 3777 -> 15 0 28 2795 topology 2896 3778 -> 16 0 28 2795 topology 2905 3778 -> 15 0 29 2795 topology 2898 3779 -> 16 0 29 2795 topology 2899 3779 -> 15 0 28 2795 topology 2813 3780 -> 16 0 28 2795 topology 2905 3780 -> 15 0 28 2795 topology 2873 3781 -> 16 0 28 2795 topology 2905 3781 -> 15 0 28 2795 topology 2849 3782 -> 16 0 28 2795 topology 2905 3782 -> 15 0 28 2795 topology 2825 3783 -> 16 0 28 2795 topology 2905 3783 -> 15 0 28 2795 topology 2801 3784 -> 16 0 28 2795 topology 2905 3784 -> 15 0 28 2795 topology 2885 3785 -> 16 0 28 2795 topology 2905 3785 -> 15 0 28 2795 topology 2861 3786 -> 16 0 28 2795 topology 2905 3786 -> 15 0 28 2795 topology 2837 3787 -> 16 0 28 2795 topology 2905 3787 -> 15 0 28 2795 topology 2897 3788 -> 16 0 28 2795 topology 2905 3788 -> 15 0 28 2795 topology 2821 3789 -> 16 0 28 2795 topology 2905 3789 -> 15 0 28 2795 topology 2851 3790 -> 16 0 28 2795 topology 2905 3790 -> 15 0 28 2795 topology 2881 3791 -> 16 0 28 2795 topology 2905 3791 -> 15 0 28 2795 topology 2803 3792 -> 16 0 28 2795 topology 2905 3792 -> 15 0 28 2795 topology 2833 3793 -> 16 0 28 2795 topology 2905 3793 -> 15 0 28 2795 topology 2863 3794 -> 16 0 28 2795 topology 2905 3794 -> 15 0 29 2795 topology 2841 3795 -> 16 0 29 2795 topology 2843 3795 -> 15 0 28 2795 topology 2893 3796 -> 16 0 28 2795 topology 2905 3796 -> 15 0 29 2795 topology 2844 3797 -> 16 0 29 2795 topology 2846 3797 -> 15 0 29 2795 topology 2847 3798 -> 16 0 29 2795 topology 2849 3798 -> 15 0 29 2795 topology 2901 3799 -> 16 0 29 2795 topology 2903 3799 -> 15 0 28 2906 topology 2933 3800 +> 15 0 28 2795 topology 2902 3726 +> 16 0 28 2795 topology 2905 3726 +> 15 0 29 2795 topology 2904 3727 +> 16 0 29 2795 topology 2905 3727 +> 15 0 30 2795 topology 2796 3728 +> 16 0 30 2795 topology 2798 3728 +> 15 0 30 2795 topology 2796 3729 +> 16 0 30 2795 topology 2797 3729 +> 15 0 30 2795 topology 2799 3730 +> 16 0 30 2795 topology 2801 3730 +> 15 0 30 2795 topology 2799 3731 +> 16 0 30 2795 topology 2800 3731 +> 15 0 30 2795 topology 2802 3732 +> 16 0 30 2795 topology 2804 3732 +> 15 0 30 2795 topology 2802 3733 +> 16 0 30 2795 topology 2803 3733 +> 15 0 30 2795 topology 2805 3734 +> 16 0 30 2795 topology 2807 3734 +> 15 0 30 2795 topology 2805 3735 +> 16 0 30 2795 topology 2806 3735 +> 15 0 30 2795 topology 2808 3736 +> 16 0 30 2795 topology 2810 3736 +> 15 0 30 2795 topology 2808 3737 +> 16 0 30 2795 topology 2809 3737 +> 15 0 30 2795 topology 2811 3738 +> 16 0 30 2795 topology 2813 3738 +> 15 0 30 2795 topology 2811 3739 +> 16 0 30 2795 topology 2812 3739 +> 15 0 30 2795 topology 2814 3740 +> 16 0 30 2795 topology 2816 3740 +> 15 0 30 2795 topology 2814 3741 +> 16 0 30 2795 topology 2815 3741 +> 15 0 30 2795 topology 2817 3742 +> 16 0 30 2795 topology 2819 3742 +> 15 0 30 2795 topology 2817 3743 +> 16 0 30 2795 topology 2818 3743 +> 15 0 30 2795 topology 2820 3744 +> 16 0 30 2795 topology 2822 3744 +> 15 0 30 2795 topology 2820 3745 +> 16 0 30 2795 topology 2821 3745 +> 15 0 30 2795 topology 2823 3746 +> 16 0 30 2795 topology 2825 3746 +> 15 0 30 2795 topology 2823 3747 +> 16 0 30 2795 topology 2824 3747 +> 15 0 30 2795 topology 2826 3748 +> 16 0 30 2795 topology 2828 3748 +> 15 0 30 2795 topology 2826 3749 +> 16 0 30 2795 topology 2827 3749 +> 15 0 30 2795 topology 2829 3750 +> 16 0 30 2795 topology 2831 3750 +> 15 0 30 2795 topology 2829 3751 +> 16 0 30 2795 topology 2830 3751 +> 15 0 30 2795 topology 2832 3752 +> 16 0 30 2795 topology 2834 3752 +> 15 0 30 2795 topology 2832 3753 +> 16 0 30 2795 topology 2833 3753 +> 15 0 30 2795 topology 2835 3754 +> 16 0 30 2795 topology 2837 3754 +> 15 0 30 2795 topology 2835 3755 +> 16 0 30 2795 topology 2836 3755 +> 15 0 30 2795 topology 2838 3756 +> 16 0 30 2795 topology 2840 3756 +> 15 0 30 2795 topology 2838 3757 +> 16 0 30 2795 topology 2839 3757 +> 15 0 30 2795 topology 2841 3758 +> 16 0 30 2795 topology 2843 3758 +> 15 0 30 2795 topology 2841 3759 +> 16 0 30 2795 topology 2842 3759 +> 15 0 30 2795 topology 2844 3760 +> 16 0 30 2795 topology 2846 3760 +> 15 0 30 2795 topology 2844 3761 +> 16 0 30 2795 topology 2845 3761 +> 15 0 30 2795 topology 2847 3762 +> 16 0 30 2795 topology 2849 3762 +> 15 0 30 2795 topology 2847 3763 +> 16 0 30 2795 topology 2848 3763 +> 15 0 30 2795 topology 2850 3764 +> 16 0 30 2795 topology 2852 3764 +> 15 0 30 2795 topology 2850 3765 +> 16 0 30 2795 topology 2851 3765 +> 15 0 30 2795 topology 2853 3766 +> 16 0 30 2795 topology 2855 3766 +> 15 0 30 2795 topology 2853 3767 +> 16 0 30 2795 topology 2854 3767 +> 15 0 30 2795 topology 2856 3768 +> 16 0 30 2795 topology 2858 3768 +> 15 0 30 2795 topology 2856 3769 +> 16 0 30 2795 topology 2857 3769 +> 15 0 30 2795 topology 2859 3770 +> 16 0 30 2795 topology 2861 3770 +> 15 0 30 2795 topology 2859 3771 +> 16 0 30 2795 topology 2860 3771 +> 15 0 30 2795 topology 2862 3772 +> 16 0 30 2795 topology 2864 3772 +> 15 0 30 2795 topology 2862 3773 +> 16 0 30 2795 topology 2863 3773 +> 15 0 30 2795 topology 2865 3774 +> 16 0 30 2795 topology 2867 3774 +> 15 0 30 2795 topology 2865 3775 +> 16 0 30 2795 topology 2866 3775 +> 15 0 30 2795 topology 2868 3776 +> 16 0 30 2795 topology 2870 3776 +> 15 0 30 2795 topology 2868 3777 +> 16 0 30 2795 topology 2869 3777 +> 15 0 30 2795 topology 2871 3778 +> 16 0 30 2795 topology 2873 3778 +> 15 0 30 2795 topology 2871 3779 +> 16 0 30 2795 topology 2872 3779 +> 15 0 30 2795 topology 2874 3780 +> 16 0 30 2795 topology 2876 3780 +> 15 0 30 2795 topology 2874 3781 +> 16 0 30 2795 topology 2875 3781 +> 15 0 30 2795 topology 2877 3782 +> 16 0 30 2795 topology 2879 3782 +> 15 0 30 2795 topology 2877 3783 +> 16 0 30 2795 topology 2878 3783 +> 15 0 30 2795 topology 2880 3784 +> 16 0 30 2795 topology 2882 3784 +> 15 0 30 2795 topology 2880 3785 +> 16 0 30 2795 topology 2881 3785 +> 15 0 30 2795 topology 2883 3786 +> 16 0 30 2795 topology 2885 3786 +> 15 0 30 2795 topology 2883 3787 +> 16 0 30 2795 topology 2884 3787 +> 15 0 30 2795 topology 2886 3788 +> 16 0 30 2795 topology 2888 3788 +> 15 0 30 2795 topology 2886 3789 +> 16 0 30 2795 topology 2887 3789 +> 15 0 30 2795 topology 2889 3790 +> 16 0 30 2795 topology 2891 3790 +> 15 0 30 2795 topology 2889 3791 +> 16 0 30 2795 topology 2890 3791 +> 15 0 30 2795 topology 2892 3792 +> 16 0 30 2795 topology 2894 3792 +> 15 0 30 2795 topology 2892 3793 +> 16 0 30 2795 topology 2893 3793 +> 15 0 30 2795 topology 2895 3794 +> 16 0 30 2795 topology 2897 3794 +> 15 0 30 2795 topology 2895 3795 +> 16 0 30 2795 topology 2896 3795 +> 15 0 30 2795 topology 2898 3796 +> 16 0 30 2795 topology 2900 3796 +> 15 0 30 2795 topology 2898 3797 +> 16 0 30 2795 topology 2899 3797 +> 15 0 30 2795 topology 2901 3798 +> 16 0 30 2795 topology 2903 3798 +> 15 0 30 2795 topology 2901 3799 +> 16 0 30 2795 topology 2902 3799 +> 15 0 28 2906 topology 2909 3800 > 16 0 28 2906 topology 2980 3800 -> 15 0 28 2906 topology 2969 3801 +> 15 0 28 2906 topology 2908 3801 > 16 0 28 2906 topology 2980 3801 -> 15 0 28 2906 topology 2945 3802 +> 15 0 28 2906 topology 2912 3802 > 16 0 28 2906 topology 2980 3802 -> 15 0 28 2906 topology 2957 3803 +> 15 0 28 2906 topology 2911 3803 > 16 0 28 2906 topology 2980 3803 -> 15 0 28 2906 topology 2918 3804 +> 15 0 28 2906 topology 2915 3804 > 16 0 28 2906 topology 2980 3804 -> 15 0 29 2906 topology 2928 3805 -> 16 0 29 2906 topology 2930 3805 -> 15 0 28 2906 topology 2935 3806 +> 15 0 28 2906 topology 2914 3805 +> 16 0 28 2906 topology 2980 3805 +> 15 0 28 2906 topology 2918 3806 > 16 0 28 2906 topology 2980 3806 -> 15 0 28 2906 topology 2965 3807 +> 15 0 28 2906 topology 2917 3807 > 16 0 28 2906 topology 2980 3807 -> 15 0 29 2906 topology 2931 3808 -> 16 0 29 2906 topology 2933 3808 -> 15 0 29 2906 topology 2934 3809 -> 16 0 29 2906 topology 2936 3809 -> 15 0 28 2906 topology 2947 3810 +> 15 0 28 2906 topology 2921 3808 +> 16 0 28 2906 topology 2980 3808 +> 15 0 28 2906 topology 2920 3809 +> 16 0 28 2906 topology 2980 3809 +> 15 0 28 2906 topology 2924 3810 > 16 0 28 2906 topology 2980 3810 -> 15 0 28 2906 topology 2977 3811 +> 15 0 28 2906 topology 2923 3811 > 16 0 28 2906 topology 2980 3811 -> 15 0 29 2906 topology 2937 3812 -> 16 0 29 2906 topology 2939 3812 -> 15 0 29 2906 topology 2940 3813 -> 16 0 29 2906 topology 2942 3813 -> 15 0 29 2906 topology 2943 3814 -> 16 0 29 2906 topology 2945 3814 -> 15 0 28 2906 topology 2914 3815 +> 15 0 28 2906 topology 2927 3812 +> 16 0 28 2906 topology 2980 3812 +> 15 0 28 2906 topology 2926 3813 +> 16 0 28 2906 topology 2980 3813 +> 15 0 28 2906 topology 2930 3814 +> 16 0 28 2906 topology 2980 3814 +> 15 0 28 2906 topology 2929 3815 > 16 0 28 2906 topology 2980 3815 -> 15 0 29 2906 topology 2946 3816 -> 16 0 29 2906 topology 2948 3816 -> 15 0 29 2906 topology 2928 3817 -> 16 0 29 2906 topology 2929 3817 -> 15 0 29 2906 topology 2949 3818 -> 16 0 29 2906 topology 2951 3818 -> 15 0 28 2906 topology 2926 3819 +> 15 0 28 2906 topology 2933 3816 +> 16 0 28 2906 topology 2980 3816 +> 15 0 28 2906 topology 2932 3817 +> 16 0 28 2906 topology 2980 3817 +> 15 0 28 2906 topology 2936 3818 +> 16 0 28 2906 topology 2980 3818 +> 15 0 28 2906 topology 2935 3819 > 16 0 28 2906 topology 2980 3819 -> 15 0 29 2906 topology 2958 3820 -> 16 0 29 2906 topology 2959 3820 -> 15 0 29 2906 topology 2952 3821 -> 16 0 29 2906 topology 2954 3821 -> 15 0 29 2906 topology 2934 3822 -> 16 0 29 2906 topology 2935 3822 -> 15 0 29 2906 topology 2955 3823 -> 16 0 29 2906 topology 2957 3823 -> 15 0 28 2906 topology 2960 3824 +> 15 0 28 2906 topology 2939 3820 +> 16 0 28 2906 topology 2980 3820 +> 15 0 28 2906 topology 2938 3821 +> 16 0 28 2906 topology 2980 3821 +> 15 0 28 2906 topology 2942 3822 +> 16 0 28 2906 topology 2980 3822 +> 15 0 28 2906 topology 2941 3823 +> 16 0 28 2906 topology 2980 3823 +> 15 0 28 2906 topology 2945 3824 > 16 0 28 2906 topology 2980 3824 -> 15 0 28 2906 topology 2936 3825 +> 15 0 28 2906 topology 2944 3825 > 16 0 28 2906 topology 2980 3825 -> 15 0 29 2906 topology 2964 3826 -> 16 0 29 2906 topology 2965 3826 -> 15 0 29 2906 topology 2940 3827 -> 16 0 29 2906 topology 2941 3827 -> 15 0 28 2906 topology 2972 3828 +> 15 0 28 2906 topology 2948 3826 +> 16 0 28 2906 topology 2980 3826 +> 15 0 28 2906 topology 2947 3827 +> 16 0 28 2906 topology 2980 3827 +> 15 0 28 2906 topology 2951 3828 > 16 0 28 2906 topology 2980 3828 -> 15 0 28 2906 topology 2948 3829 +> 15 0 28 2906 topology 2950 3829 > 16 0 28 2906 topology 2980 3829 -> 15 0 29 2906 topology 2970 3830 -> 16 0 29 2906 topology 2971 3830 -> 15 0 29 2906 topology 2946 3831 -> 16 0 29 2906 topology 2947 3831 -> 15 0 29 2906 topology 2976 3832 -> 16 0 29 2906 topology 2977 3832 -> 15 0 28 2906 topology 2909 3833 +> 15 0 28 2906 topology 2954 3830 +> 16 0 28 2906 topology 2980 3830 +> 15 0 28 2906 topology 2953 3831 +> 16 0 28 2906 topology 2980 3831 +> 15 0 28 2906 topology 2957 3832 +> 16 0 28 2906 topology 2980 3832 +> 15 0 28 2906 topology 2956 3833 > 16 0 28 2906 topology 2980 3833 -> 15 0 29 2906 topology 2952 3834 -> 16 0 29 2906 topology 2953 3834 -> 15 0 28 2906 topology 2932 3835 +> 15 0 28 2906 topology 2960 3834 +> 16 0 28 2906 topology 2980 3834 +> 15 0 28 2906 topology 2959 3835 > 16 0 28 2906 topology 2980 3835 -> 15 0 28 2906 topology 2921 3836 +> 15 0 28 2906 topology 2963 3836 > 16 0 28 2906 topology 2980 3836 > 15 0 28 2906 topology 2962 3837 > 16 0 28 2906 topology 2980 3837 -> 15 0 29 2906 topology 2907 3838 -> 16 0 29 2906 topology 2908 3838 -> 15 0 28 2906 topology 2944 3839 +> 15 0 28 2906 topology 2966 3838 +> 16 0 28 2906 topology 2980 3838 +> 15 0 28 2906 topology 2965 3839 > 16 0 28 2906 topology 2980 3839 -> 15 0 28 2906 topology 2974 3840 +> 15 0 28 2906 topology 2969 3840 > 16 0 28 2906 topology 2980 3840 -> 15 0 29 2906 topology 2913 3841 -> 16 0 29 2906 topology 2914 3841 -> 15 0 28 2906 topology 2956 3842 +> 15 0 28 2906 topology 2968 3841 +> 16 0 28 2906 topology 2980 3841 +> 15 0 28 2906 topology 2972 3842 > 16 0 28 2906 topology 2980 3842 -> 15 0 28 2906 topology 2911 3843 +> 15 0 28 2906 topology 2971 3843 > 16 0 28 2906 topology 2980 3843 -> 15 0 29 2906 topology 2919 3844 -> 16 0 29 2906 topology 2920 3844 -> 15 0 28 2906 topology 2923 3845 +> 15 0 28 2906 topology 2975 3844 +> 16 0 28 2906 topology 2980 3844 +> 15 0 28 2906 topology 2974 3845 > 16 0 28 2906 topology 2980 3845 -> 15 0 29 2906 topology 2925 3846 -> 16 0 29 2906 topology 2926 3846 -> 15 0 28 2906 topology 2963 3847 +> 15 0 28 2906 topology 2978 3846 +> 16 0 28 2906 topology 2980 3846 +> 15 0 28 2906 topology 2977 3847 > 16 0 28 2906 topology 2980 3847 -> 15 0 28 2906 topology 2939 3848 -> 16 0 28 2906 topology 2980 3848 -> 15 0 28 2906 topology 2975 3849 -> 16 0 28 2906 topology 2980 3849 -> 15 0 28 2906 topology 2951 3850 -> 16 0 28 2906 topology 2980 3850 -> 15 0 28 2906 topology 2912 3851 -> 16 0 28 2906 topology 2980 3851 -> 15 0 28 2906 topology 2929 3852 -> 16 0 28 2906 topology 2980 3852 -> 15 0 28 2906 topology 2959 3853 -> 16 0 28 2906 topology 2980 3853 -> 15 0 28 2906 topology 2924 3854 -> 16 0 28 2906 topology 2980 3854 -> 15 0 28 2906 topology 2941 3855 -> 16 0 28 2906 topology 2980 3855 -> 15 0 29 2906 topology 2958 3856 -> 16 0 29 2906 topology 2960 3856 -> 15 0 28 2906 topology 2971 3857 -> 16 0 28 2906 topology 2980 3857 -> 15 0 29 2906 topology 2961 3858 -> 16 0 29 2906 topology 2963 3858 -> 15 0 28 2906 topology 2953 3859 -> 16 0 28 2906 topology 2980 3859 -> 15 0 29 2906 topology 2964 3860 -> 16 0 29 2906 topology 2966 3860 -> 15 0 30 2906 topology 2979 3861 -> 16 0 30 2906 topology 2980 3861 -> 15 0 29 2906 topology 2967 3862 -> 16 0 29 2906 topology 2969 3862 -> 15 0 28 2906 topology 2908 3863 -> 16 0 28 2906 topology 2980 3863 -> 15 0 29 2906 topology 2970 3864 -> 16 0 29 2906 topology 2972 3864 -> 15 0 29 2906 topology 2973 3865 -> 16 0 29 2906 topology 2975 3865 -> 15 0 28 2906 topology 2920 3866 -> 16 0 28 2906 topology 2980 3866 -> 15 0 29 2906 topology 2976 3867 -> 16 0 29 2906 topology 2978 3867 -> 15 0 29 2906 topology 2931 3868 -> 16 0 29 2906 topology 2932 3868 -> 15 0 28 2906 topology 2930 3869 -> 16 0 28 2906 topology 2980 3869 -> 15 0 29 2906 topology 2961 3870 -> 16 0 29 2906 topology 2962 3870 -> 15 0 29 2906 topology 2937 3871 -> 16 0 29 2906 topology 2938 3871 -> 15 0 28 2906 topology 2966 3872 -> 16 0 28 2906 topology 2980 3872 -> 15 0 28 2906 topology 2942 3873 -> 16 0 28 2906 topology 2980 3873 -> 15 0 29 2906 topology 2967 3874 -> 16 0 29 2906 topology 2968 3874 -> 15 0 29 2906 topology 2907 3875 -> 16 0 29 2906 topology 2909 3875 -> 15 0 29 2906 topology 2943 3876 -> 16 0 29 2906 topology 2944 3876 -> 15 0 29 2906 topology 2910 3877 -> 16 0 29 2906 topology 2912 3877 -> 15 0 28 2906 topology 2978 3878 -> 16 0 28 2906 topology 2980 3878 -> 15 0 28 2906 topology 2954 3879 -> 16 0 28 2906 topology 2980 3879 -> 15 0 29 2906 topology 2973 3880 -> 16 0 29 2906 topology 2974 3880 -> 15 0 29 2906 topology 2913 3881 -> 16 0 29 2906 topology 2915 3881 -> 15 0 29 2906 topology 2949 3882 -> 16 0 29 2906 topology 2950 3882 -> 15 0 29 2906 topology 2916 3883 -> 16 0 29 2906 topology 2918 3883 -> 15 0 28 2906 topology 2915 3884 -> 16 0 28 2906 topology 2980 3884 -> 15 0 29 2906 topology 2919 3885 -> 16 0 29 2906 topology 2921 3885 -> 15 0 29 2906 topology 2955 3886 -> 16 0 29 2906 topology 2956 3886 -> 15 0 29 2906 topology 2922 3887 -> 16 0 29 2906 topology 2924 3887 -> 15 0 28 2906 topology 2938 3888 -> 16 0 28 2906 topology 2980 3888 -> 15 0 29 2906 topology 2925 3889 -> 16 0 29 2906 topology 2927 3889 -> 15 0 28 2906 topology 2927 3890 -> 16 0 28 2906 topology 2980 3890 -> 15 0 28 2906 topology 2968 3891 -> 16 0 28 2906 topology 2980 3891 -> 15 0 29 2906 topology 2910 3892 -> 16 0 29 2906 topology 2911 3892 -> 15 0 28 2906 topology 2950 3893 -> 16 0 28 2906 topology 2980 3893 -> 15 0 29 2906 topology 2916 3894 -> 16 0 29 2906 topology 2917 3894 -> 15 0 28 2906 topology 2917 3895 -> 16 0 28 2906 topology 2980 3895 -> 15 0 29 2906 topology 2922 3896 -> 16 0 29 2906 topology 2923 3896 -> 15 0 29 2981 topology 3033 3897 -> 16 0 29 2981 topology 3035 3897 -> 15 0 29 2981 topology 3087 3898 -> 16 0 29 2981 topology 3089 3898 -> 15 0 29 2981 topology 2982 3899 -> 16 0 29 2981 topology 2984 3899 -> 15 0 29 2981 topology 3036 3900 -> 16 0 29 2981 topology 3038 3900 -> 15 0 29 2981 topology 2991 3901 -> 16 0 29 2981 topology 2992 3901 -> 15 0 29 2981 topology 2985 3902 -> 16 0 29 2981 topology 2987 3902 -> 15 0 29 2981 topology 3039 3903 -> 16 0 29 2981 topology 3041 3903 -> 15 0 29 2981 topology 3021 3904 -> 16 0 29 2981 topology 3022 3904 -> 15 0 29 2981 topology 2988 3905 -> 16 0 29 2981 topology 2990 3905 -> 15 0 29 2981 topology 3042 3906 -> 16 0 29 2981 topology 3044 3906 -> 15 0 29 2981 topology 2997 3907 -> 16 0 29 2981 topology 2998 3907 -> 15 0 28 2981 topology 3023 3908 +> 15 0 29 2906 topology 2979 3848 +> 16 0 29 2906 topology 2980 3848 +> 15 0 30 2906 topology 2907 3849 +> 16 0 30 2906 topology 2909 3849 +> 15 0 30 2906 topology 2907 3850 +> 16 0 30 2906 topology 2908 3850 +> 15 0 30 2906 topology 2910 3851 +> 16 0 30 2906 topology 2912 3851 +> 15 0 30 2906 topology 2910 3852 +> 16 0 30 2906 topology 2911 3852 +> 15 0 30 2906 topology 2913 3853 +> 16 0 30 2906 topology 2915 3853 +> 15 0 30 2906 topology 2913 3854 +> 16 0 30 2906 topology 2914 3854 +> 15 0 30 2906 topology 2916 3855 +> 16 0 30 2906 topology 2918 3855 +> 15 0 30 2906 topology 2916 3856 +> 16 0 30 2906 topology 2917 3856 +> 15 0 30 2906 topology 2919 3857 +> 16 0 30 2906 topology 2921 3857 +> 15 0 30 2906 topology 2919 3858 +> 16 0 30 2906 topology 2920 3858 +> 15 0 30 2906 topology 2922 3859 +> 16 0 30 2906 topology 2924 3859 +> 15 0 30 2906 topology 2922 3860 +> 16 0 30 2906 topology 2923 3860 +> 15 0 30 2906 topology 2925 3861 +> 16 0 30 2906 topology 2927 3861 +> 15 0 30 2906 topology 2925 3862 +> 16 0 30 2906 topology 2926 3862 +> 15 0 30 2906 topology 2928 3863 +> 16 0 30 2906 topology 2930 3863 +> 15 0 30 2906 topology 2928 3864 +> 16 0 30 2906 topology 2929 3864 +> 15 0 30 2906 topology 2931 3865 +> 16 0 30 2906 topology 2933 3865 +> 15 0 30 2906 topology 2931 3866 +> 16 0 30 2906 topology 2932 3866 +> 15 0 30 2906 topology 2934 3867 +> 16 0 30 2906 topology 2936 3867 +> 15 0 30 2906 topology 2934 3868 +> 16 0 30 2906 topology 2935 3868 +> 15 0 30 2906 topology 2937 3869 +> 16 0 30 2906 topology 2939 3869 +> 15 0 30 2906 topology 2937 3870 +> 16 0 30 2906 topology 2938 3870 +> 15 0 30 2906 topology 2940 3871 +> 16 0 30 2906 topology 2942 3871 +> 15 0 30 2906 topology 2940 3872 +> 16 0 30 2906 topology 2941 3872 +> 15 0 30 2906 topology 2943 3873 +> 16 0 30 2906 topology 2945 3873 +> 15 0 30 2906 topology 2943 3874 +> 16 0 30 2906 topology 2944 3874 +> 15 0 30 2906 topology 2946 3875 +> 16 0 30 2906 topology 2948 3875 +> 15 0 30 2906 topology 2946 3876 +> 16 0 30 2906 topology 2947 3876 +> 15 0 30 2906 topology 2949 3877 +> 16 0 30 2906 topology 2951 3877 +> 15 0 30 2906 topology 2949 3878 +> 16 0 30 2906 topology 2950 3878 +> 15 0 30 2906 topology 2952 3879 +> 16 0 30 2906 topology 2954 3879 +> 15 0 30 2906 topology 2952 3880 +> 16 0 30 2906 topology 2953 3880 +> 15 0 30 2906 topology 2955 3881 +> 16 0 30 2906 topology 2957 3881 +> 15 0 30 2906 topology 2955 3882 +> 16 0 30 2906 topology 2956 3882 +> 15 0 30 2906 topology 2958 3883 +> 16 0 30 2906 topology 2960 3883 +> 15 0 30 2906 topology 2958 3884 +> 16 0 30 2906 topology 2959 3884 +> 15 0 30 2906 topology 2961 3885 +> 16 0 30 2906 topology 2963 3885 +> 15 0 30 2906 topology 2961 3886 +> 16 0 30 2906 topology 2962 3886 +> 15 0 30 2906 topology 2964 3887 +> 16 0 30 2906 topology 2966 3887 +> 15 0 30 2906 topology 2964 3888 +> 16 0 30 2906 topology 2965 3888 +> 15 0 30 2906 topology 2967 3889 +> 16 0 30 2906 topology 2969 3889 +> 15 0 30 2906 topology 2967 3890 +> 16 0 30 2906 topology 2968 3890 +> 15 0 30 2906 topology 2970 3891 +> 16 0 30 2906 topology 2972 3891 +> 15 0 30 2906 topology 2970 3892 +> 16 0 30 2906 topology 2971 3892 +> 15 0 30 2906 topology 2973 3893 +> 16 0 30 2906 topology 2975 3893 +> 15 0 30 2906 topology 2973 3894 +> 16 0 30 2906 topology 2974 3894 +> 15 0 30 2906 topology 2976 3895 +> 16 0 30 2906 topology 2978 3895 +> 15 0 30 2906 topology 2976 3896 +> 16 0 30 2906 topology 2977 3896 +> 15 0 28 2981 topology 2984 3897 +> 16 0 28 2981 topology 3091 3897 +> 15 0 28 2981 topology 2983 3898 +> 16 0 28 2981 topology 3091 3898 +> 15 0 28 2981 topology 2987 3899 +> 16 0 28 2981 topology 3091 3899 +> 15 0 28 2981 topology 2986 3900 +> 16 0 28 2981 topology 3091 3900 +> 15 0 28 2981 topology 2990 3901 +> 16 0 28 2981 topology 3091 3901 +> 15 0 28 2981 topology 2989 3902 +> 16 0 28 2981 topology 3091 3902 +> 15 0 28 2981 topology 2993 3903 +> 16 0 28 2981 topology 3091 3903 +> 15 0 28 2981 topology 2992 3904 +> 16 0 28 2981 topology 3091 3904 +> 15 0 28 2981 topology 2996 3905 +> 16 0 28 2981 topology 3091 3905 +> 15 0 28 2981 topology 2995 3906 +> 16 0 28 2981 topology 3091 3906 +> 15 0 28 2981 topology 2999 3907 +> 16 0 28 2981 topology 3091 3907 +> 15 0 28 2981 topology 2998 3908 > 16 0 28 2981 topology 3091 3908 -> 15 0 29 2981 topology 3051 3909 -> 16 0 29 2981 topology 3052 3909 -> 15 0 28 2981 topology 2999 3910 +> 15 0 28 2981 topology 3002 3909 +> 16 0 28 2981 topology 3091 3909 +> 15 0 28 2981 topology 3001 3910 > 16 0 28 2981 topology 3091 3910 -> 15 0 29 2981 topology 3045 3911 -> 16 0 29 2981 topology 3047 3911 -> 15 0 29 2981 topology 3027 3912 -> 16 0 29 2981 topology 3028 3912 -> 15 0 29 2981 topology 3081 3913 -> 16 0 29 2981 topology 3082 3913 -> 15 0 28 2981 topology 3083 3914 +> 15 0 28 2981 topology 3005 3911 +> 16 0 28 2981 topology 3091 3911 +> 15 0 28 2981 topology 3004 3912 +> 16 0 28 2981 topology 3091 3912 +> 15 0 28 2981 topology 3008 3913 +> 16 0 28 2981 topology 3091 3913 +> 15 0 28 2981 topology 3007 3914 > 16 0 28 2981 topology 3091 3914 -> 15 0 29 2981 topology 3048 3915 -> 16 0 29 2981 topology 3050 3915 -> 15 0 28 2981 topology 3059 3916 +> 15 0 28 2981 topology 3011 3915 +> 16 0 28 2981 topology 3091 3915 +> 15 0 28 2981 topology 3010 3916 > 16 0 28 2981 topology 3091 3916 -> 15 0 29 2981 topology 3003 3917 -> 16 0 29 2981 topology 3004 3917 -> 15 0 28 2981 topology 3035 3918 +> 15 0 28 2981 topology 3014 3917 +> 16 0 28 2981 topology 3091 3917 +> 15 0 28 2981 topology 3013 3918 > 16 0 28 2981 topology 3091 3918 -> 15 0 29 2981 topology 3057 3919 -> 16 0 29 2981 topology 3058 3919 -> 15 0 28 2981 topology 3011 3920 +> 15 0 28 2981 topology 3017 3919 +> 16 0 28 2981 topology 3091 3919 +> 15 0 28 2981 topology 3016 3920 > 16 0 28 2981 topology 3091 3920 -> 15 0 28 2981 topology 2987 3921 +> 15 0 28 2981 topology 3020 3921 > 16 0 28 2981 topology 3091 3921 -> 15 0 29 2981 topology 3033 3922 -> 16 0 29 2981 topology 3034 3922 -> 15 0 29 2981 topology 3087 3923 -> 16 0 29 2981 topology 3088 3923 -> 15 0 28 2981 topology 3071 3924 +> 15 0 28 2981 topology 3019 3922 +> 16 0 28 2981 topology 3091 3922 +> 15 0 28 2981 topology 3023 3923 +> 16 0 28 2981 topology 3091 3923 +> 15 0 28 2981 topology 3022 3924 > 16 0 28 2981 topology 3091 3924 -> 15 0 29 2981 topology 3009 3925 -> 16 0 29 2981 topology 3010 3925 -> 15 0 28 2981 topology 3047 3926 +> 15 0 28 2981 topology 3026 3925 +> 16 0 28 2981 topology 3091 3925 +> 15 0 28 2981 topology 3025 3926 > 16 0 28 2981 topology 3091 3926 -> 15 0 29 2981 topology 3063 3927 -> 16 0 29 2981 topology 3064 3927 -> 15 0 29 2981 topology 2985 3928 -> 16 0 29 2981 topology 2986 3928 -> 15 0 29 2981 topology 3039 3929 -> 16 0 29 2981 topology 3040 3929 -> 15 0 29 2981 topology 3015 3930 -> 16 0 29 2981 topology 3016 3930 -> 15 0 29 2981 topology 3069 3931 -> 16 0 29 2981 topology 3070 3931 -> 15 0 28 2981 topology 2995 3932 +> 15 0 28 2981 topology 3029 3927 +> 16 0 28 2981 topology 3091 3927 +> 15 0 28 2981 topology 3028 3928 +> 16 0 28 2981 topology 3091 3928 +> 15 0 28 2981 topology 3032 3929 +> 16 0 28 2981 topology 3091 3929 +> 15 0 28 2981 topology 3031 3930 +> 16 0 28 2981 topology 3091 3930 +> 15 0 28 2981 topology 3035 3931 +> 16 0 28 2981 topology 3091 3931 +> 15 0 28 2981 topology 3034 3932 > 16 0 28 2981 topology 3091 3932 -> 15 0 28 2981 topology 3025 3933 +> 15 0 28 2981 topology 3038 3933 > 16 0 28 2981 topology 3091 3933 -> 15 0 29 2981 topology 3045 3934 -> 16 0 29 2981 topology 3046 3934 -> 15 0 28 2981 topology 3055 3935 +> 15 0 28 2981 topology 3037 3934 +> 16 0 28 2981 topology 3091 3934 +> 15 0 28 2981 topology 3041 3935 > 16 0 28 2981 topology 3091 3935 -> 15 0 29 2981 topology 3075 3936 -> 16 0 29 2981 topology 3076 3936 -> 15 0 28 2981 topology 3085 3937 +> 15 0 28 2981 topology 3040 3936 +> 16 0 28 2981 topology 3091 3936 +> 15 0 28 2981 topology 3044 3937 > 16 0 28 2981 topology 3091 3937 -> 15 0 28 2981 topology 3007 3938 +> 15 0 28 2981 topology 3043 3938 > 16 0 28 2981 topology 3091 3938 -> 15 0 28 2981 topology 3037 3939 +> 15 0 28 2981 topology 3047 3939 > 16 0 28 2981 topology 3091 3939 -> 15 0 28 2981 topology 3067 3940 +> 15 0 28 2981 topology 3046 3940 > 16 0 28 2981 topology 3091 3940 -> 15 0 28 2981 topology 2989 3941 +> 15 0 28 2981 topology 3050 3941 > 16 0 28 2981 topology 3091 3941 -> 15 0 28 2981 topology 3019 3942 +> 15 0 28 2981 topology 3049 3942 > 16 0 28 2981 topology 3091 3942 -> 15 0 28 2981 topology 3049 3943 +> 15 0 28 2981 topology 3053 3943 > 16 0 28 2981 topology 3091 3943 -> 15 0 28 2981 topology 3079 3944 +> 15 0 28 2981 topology 3052 3944 > 16 0 28 2981 topology 3091 3944 -> 15 0 28 2981 topology 3026 3945 +> 15 0 28 2981 topology 3056 3945 > 16 0 28 2981 topology 3091 3945 -> 15 0 28 2981 topology 3002 3946 +> 15 0 28 2981 topology 3055 3946 > 16 0 28 2981 topology 3091 3946 -> 15 0 28 2981 topology 3086 3947 +> 15 0 28 2981 topology 3059 3947 > 16 0 28 2981 topology 3091 3947 -> 15 0 28 2981 topology 3062 3948 +> 15 0 28 2981 topology 3058 3948 > 16 0 28 2981 topology 3091 3948 -> 15 0 28 2981 topology 3038 3949 +> 15 0 28 2981 topology 3062 3949 > 16 0 28 2981 topology 3091 3949 -> 15 0 28 2981 topology 3014 3950 +> 15 0 28 2981 topology 3061 3950 > 16 0 28 2981 topology 3091 3950 -> 15 0 28 2981 topology 2990 3951 +> 15 0 28 2981 topology 3065 3951 > 16 0 28 2981 topology 3091 3951 -> 15 0 28 2981 topology 3074 3952 +> 15 0 28 2981 topology 3064 3952 > 16 0 28 2981 topology 3091 3952 -> 15 0 28 2981 topology 3050 3953 +> 15 0 28 2981 topology 3068 3953 > 16 0 28 2981 topology 3091 3953 -> 15 0 28 2981 topology 2992 3954 +> 15 0 28 2981 topology 3067 3954 > 16 0 28 2981 topology 3091 3954 -> 15 0 28 2981 topology 3022 3955 +> 15 0 28 2981 topology 3071 3955 > 16 0 28 2981 topology 3091 3955 -> 15 0 28 2981 topology 3052 3956 +> 15 0 28 2981 topology 3070 3956 > 16 0 28 2981 topology 3091 3956 -> 15 0 29 2981 topology 2991 3957 -> 16 0 29 2981 topology 2993 3957 -> 15 0 28 2981 topology 3082 3958 +> 15 0 28 2981 topology 3074 3957 +> 16 0 28 2981 topology 3091 3957 +> 15 0 28 2981 topology 3073 3958 > 16 0 28 2981 topology 3091 3958 -> 15 0 28 2981 topology 3004 3959 +> 15 0 28 2981 topology 3077 3959 > 16 0 28 2981 topology 3091 3959 -> 15 0 29 2981 topology 2994 3960 -> 16 0 29 2981 topology 2996 3960 -> 15 0 28 2981 topology 3034 3961 +> 15 0 28 2981 topology 3076 3960 +> 16 0 28 2981 topology 3091 3960 +> 15 0 28 2981 topology 3080 3961 > 16 0 28 2981 topology 3091 3961 -> 15 0 28 2981 topology 3064 3962 +> 15 0 28 2981 topology 3079 3962 > 16 0 28 2981 topology 3091 3962 -> 15 0 28 2981 topology 2986 3963 +> 15 0 28 2981 topology 3083 3963 > 16 0 28 2981 topology 3091 3963 -> 15 0 29 2981 topology 2997 3964 -> 16 0 29 2981 topology 2999 3964 -> 15 0 29 2981 topology 3051 3965 -> 16 0 29 2981 topology 3053 3965 -> 15 0 28 2981 topology 3016 3966 +> 15 0 28 2981 topology 3082 3964 +> 16 0 28 2981 topology 3091 3964 +> 15 0 28 2981 topology 3086 3965 +> 16 0 28 2981 topology 3091 3965 +> 15 0 28 2981 topology 3085 3966 > 16 0 28 2981 topology 3091 3966 -> 15 0 29 2981 topology 3000 3967 -> 16 0 29 2981 topology 3002 3967 -> 15 0 28 2981 topology 3046 3968 +> 15 0 28 2981 topology 3089 3967 +> 16 0 28 2981 topology 3091 3967 +> 15 0 28 2981 topology 3088 3968 > 16 0 28 2981 topology 3091 3968 -> 15 0 29 2981 topology 3054 3969 -> 16 0 29 2981 topology 3056 3969 -> 15 0 28 2981 topology 3076 3970 -> 16 0 28 2981 topology 3091 3970 -> 15 0 29 2981 topology 3003 3971 -> 16 0 29 2981 topology 3005 3971 -> 15 0 29 2981 topology 3057 3972 -> 16 0 29 2981 topology 3059 3972 -> 15 0 29 2981 topology 3006 3973 -> 16 0 29 2981 topology 3008 3973 -> 15 0 29 2981 topology 3060 3974 -> 16 0 29 2981 topology 3062 3974 -> 15 0 29 2981 topology 3009 3975 -> 16 0 29 2981 topology 3011 3975 -> 15 0 29 2981 topology 3063 3976 -> 16 0 29 2981 topology 3065 3976 -> 15 0 29 2981 topology 3012 3977 -> 16 0 29 2981 topology 3014 3977 -> 15 0 29 2981 topology 3066 3978 -> 16 0 29 2981 topology 3068 3978 -> 15 0 29 2981 topology 2994 3979 -> 16 0 29 2981 topology 2995 3979 -> 15 0 28 2981 topology 2993 3980 -> 16 0 28 2981 topology 3091 3980 -> 15 0 29 2981 topology 3015 3981 -> 16 0 29 2981 topology 3017 3981 -> 15 0 29 2981 topology 3069 3982 -> 16 0 29 2981 topology 3071 3982 -> 15 0 29 2981 topology 3024 3983 -> 16 0 29 2981 topology 3025 3983 -> 15 0 29 2981 topology 3018 3984 -> 16 0 29 2981 topology 3020 3984 -> 15 0 28 2981 topology 3053 3985 -> 16 0 28 2981 topology 3091 3985 -> 15 0 29 2981 topology 3072 3986 -> 16 0 29 2981 topology 3074 3986 -> 15 0 29 2981 topology 3000 3987 -> 16 0 29 2981 topology 3001 3987 -> 15 0 28 2981 topology 3029 3988 -> 16 0 28 2981 topology 3091 3988 -> 15 0 29 2981 topology 3054 3989 -> 16 0 29 2981 topology 3055 3989 -> 15 0 28 2981 topology 3005 3990 -> 16 0 28 2981 topology 3091 3990 -> 15 0 29 2981 topology 3075 3991 -> 16 0 29 2981 topology 3077 3991 -> 15 0 29 2981 topology 3030 3992 -> 16 0 29 2981 topology 3031 3992 -> 15 0 29 2981 topology 3084 3993 -> 16 0 29 2981 topology 3085 3993 -> 15 0 28 2981 topology 3089 3994 -> 16 0 28 2981 topology 3091 3994 -> 15 0 28 2981 topology 3065 3995 -> 16 0 28 2981 topology 3091 3995 -> 15 0 29 2981 topology 3078 3996 -> 16 0 29 2981 topology 3080 3996 -> 15 0 29 2981 topology 3006 3997 -> 16 0 29 2981 topology 3007 3997 -> 15 0 28 2981 topology 3041 3998 -> 16 0 28 2981 topology 3091 3998 -> 15 0 29 2981 topology 3060 3999 -> 16 0 29 2981 topology 3061 3999 -> 15 0 28 2981 topology 3017 4000 -> 16 0 28 2981 topology 3091 4000 -> 15 0 29 2981 topology 2982 4001 -> 16 0 29 2981 topology 2983 4001 -> 15 0 29 2981 topology 3036 4002 -> 16 0 29 2981 topology 3037 4002 -> 15 0 28 2981 topology 3077 4003 -> 16 0 28 2981 topology 3091 4003 -> 15 0 29 2981 topology 3012 4004 -> 16 0 29 2981 topology 3013 4004 -> 15 0 29 2981 topology 3066 4005 -> 16 0 29 2981 topology 3067 4005 -> 15 0 29 2981 topology 2988 4006 -> 16 0 29 2981 topology 2989 4006 -> 15 0 29 2981 topology 3042 4007 -> 16 0 29 2981 topology 3043 4007 -> 15 0 29 2981 topology 3018 4008 -> 16 0 29 2981 topology 3019 4008 -> 15 0 29 2981 topology 3072 4009 -> 16 0 29 2981 topology 3073 4009 -> 15 0 28 2981 topology 3001 4010 -> 16 0 28 2981 topology 3091 4010 -> 15 0 28 2981 topology 3031 4011 -> 16 0 28 2981 topology 3091 4011 -> 15 0 29 2981 topology 3048 4012 -> 16 0 29 2981 topology 3049 4012 -> 15 0 28 2981 topology 3061 4013 -> 16 0 28 2981 topology 3091 4013 -> 15 0 28 2981 topology 2983 4014 -> 16 0 28 2981 topology 3091 4014 -> 15 0 29 2981 topology 3078 4015 -> 16 0 29 2981 topology 3079 4015 -> 15 0 28 2981 topology 3013 4016 -> 16 0 28 2981 topology 3091 4016 -> 15 0 28 2981 topology 3043 4017 -> 16 0 28 2981 topology 3091 4017 -> 15 0 28 2981 topology 3073 4018 -> 16 0 28 2981 topology 3091 4018 -> 15 0 28 2981 topology 2996 4019 -> 16 0 28 2981 topology 3091 4019 -> 15 0 28 2981 topology 3056 4020 -> 16 0 28 2981 topology 3091 4020 -> 15 0 28 2981 topology 3032 4021 -> 16 0 28 2981 topology 3091 4021 -> 15 0 28 2981 topology 3008 4022 -> 16 0 28 2981 topology 3091 4022 -> 15 0 28 2981 topology 2984 4023 -> 16 0 28 2981 topology 3091 4023 -> 15 0 28 2981 topology 3068 4024 -> 16 0 28 2981 topology 3091 4024 -> 15 0 28 2981 topology 3044 4025 -> 16 0 28 2981 topology 3091 4025 -> 15 0 28 2981 topology 3020 4026 -> 16 0 28 2981 topology 3091 4026 -> 15 0 28 2981 topology 3080 4027 -> 16 0 28 2981 topology 3091 4027 -> 15 0 28 2981 topology 2998 4028 -> 16 0 28 2981 topology 3091 4028 -> 15 0 28 2981 topology 3028 4029 -> 16 0 28 2981 topology 3091 4029 -> 15 0 28 2981 topology 3058 4030 -> 16 0 28 2981 topology 3091 4030 -> 15 0 29 2981 topology 3021 4031 -> 16 0 29 2981 topology 3023 4031 -> 15 0 28 2981 topology 3088 4032 -> 16 0 28 2981 topology 3091 4032 -> 15 0 28 2981 topology 3010 4033 -> 16 0 28 2981 topology 3091 4033 -> 15 0 30 2981 topology 3090 4034 -> 16 0 30 2981 topology 3091 4034 -> 15 0 29 2981 topology 3024 4035 -> 16 0 29 2981 topology 3026 4035 -> 15 0 28 2981 topology 3040 4036 -> 16 0 28 2981 topology 3091 4036 -> 15 0 28 2981 topology 3070 4037 -> 16 0 28 2981 topology 3091 4037 -> 15 0 29 2981 topology 3027 4038 -> 16 0 29 2981 topology 3029 4038 -> 15 0 29 2981 topology 3081 4039 -> 16 0 29 2981 topology 3083 4039 -> 15 0 29 2981 topology 3030 4040 -> 16 0 29 2981 topology 3032 4040 -> 15 0 29 2981 topology 3084 4041 -> 16 0 29 2981 topology 3086 4041 -> 15 0 28 3092 topology 3190 4042 +> 15 0 29 2981 topology 3090 3969 +> 16 0 29 2981 topology 3091 3969 +> 15 0 30 2981 topology 2982 3970 +> 16 0 30 2981 topology 2984 3970 +> 15 0 30 2981 topology 2982 3971 +> 16 0 30 2981 topology 2983 3971 +> 15 0 30 2981 topology 2985 3972 +> 16 0 30 2981 topology 2987 3972 +> 15 0 30 2981 topology 2985 3973 +> 16 0 30 2981 topology 2986 3973 +> 15 0 30 2981 topology 2988 3974 +> 16 0 30 2981 topology 2990 3974 +> 15 0 30 2981 topology 2988 3975 +> 16 0 30 2981 topology 2989 3975 +> 15 0 30 2981 topology 2991 3976 +> 16 0 30 2981 topology 2993 3976 +> 15 0 30 2981 topology 2991 3977 +> 16 0 30 2981 topology 2992 3977 +> 15 0 30 2981 topology 2994 3978 +> 16 0 30 2981 topology 2996 3978 +> 15 0 30 2981 topology 2994 3979 +> 16 0 30 2981 topology 2995 3979 +> 15 0 30 2981 topology 2997 3980 +> 16 0 30 2981 topology 2999 3980 +> 15 0 30 2981 topology 2997 3981 +> 16 0 30 2981 topology 2998 3981 +> 15 0 30 2981 topology 3000 3982 +> 16 0 30 2981 topology 3002 3982 +> 15 0 30 2981 topology 3000 3983 +> 16 0 30 2981 topology 3001 3983 +> 15 0 30 2981 topology 3003 3984 +> 16 0 30 2981 topology 3005 3984 +> 15 0 30 2981 topology 3003 3985 +> 16 0 30 2981 topology 3004 3985 +> 15 0 30 2981 topology 3006 3986 +> 16 0 30 2981 topology 3008 3986 +> 15 0 30 2981 topology 3006 3987 +> 16 0 30 2981 topology 3007 3987 +> 15 0 30 2981 topology 3009 3988 +> 16 0 30 2981 topology 3011 3988 +> 15 0 30 2981 topology 3009 3989 +> 16 0 30 2981 topology 3010 3989 +> 15 0 30 2981 topology 3012 3990 +> 16 0 30 2981 topology 3014 3990 +> 15 0 30 2981 topology 3012 3991 +> 16 0 30 2981 topology 3013 3991 +> 15 0 30 2981 topology 3015 3992 +> 16 0 30 2981 topology 3017 3992 +> 15 0 30 2981 topology 3015 3993 +> 16 0 30 2981 topology 3016 3993 +> 15 0 30 2981 topology 3018 3994 +> 16 0 30 2981 topology 3020 3994 +> 15 0 30 2981 topology 3018 3995 +> 16 0 30 2981 topology 3019 3995 +> 15 0 30 2981 topology 3021 3996 +> 16 0 30 2981 topology 3023 3996 +> 15 0 30 2981 topology 3021 3997 +> 16 0 30 2981 topology 3022 3997 +> 15 0 30 2981 topology 3024 3998 +> 16 0 30 2981 topology 3026 3998 +> 15 0 30 2981 topology 3024 3999 +> 16 0 30 2981 topology 3025 3999 +> 15 0 30 2981 topology 3027 4000 +> 16 0 30 2981 topology 3029 4000 +> 15 0 30 2981 topology 3027 4001 +> 16 0 30 2981 topology 3028 4001 +> 15 0 30 2981 topology 3030 4002 +> 16 0 30 2981 topology 3032 4002 +> 15 0 30 2981 topology 3030 4003 +> 16 0 30 2981 topology 3031 4003 +> 15 0 30 2981 topology 3033 4004 +> 16 0 30 2981 topology 3035 4004 +> 15 0 30 2981 topology 3033 4005 +> 16 0 30 2981 topology 3034 4005 +> 15 0 30 2981 topology 3036 4006 +> 16 0 30 2981 topology 3038 4006 +> 15 0 30 2981 topology 3036 4007 +> 16 0 30 2981 topology 3037 4007 +> 15 0 30 2981 topology 3039 4008 +> 16 0 30 2981 topology 3041 4008 +> 15 0 30 2981 topology 3039 4009 +> 16 0 30 2981 topology 3040 4009 +> 15 0 30 2981 topology 3042 4010 +> 16 0 30 2981 topology 3044 4010 +> 15 0 30 2981 topology 3042 4011 +> 16 0 30 2981 topology 3043 4011 +> 15 0 30 2981 topology 3045 4012 +> 16 0 30 2981 topology 3047 4012 +> 15 0 30 2981 topology 3045 4013 +> 16 0 30 2981 topology 3046 4013 +> 15 0 30 2981 topology 3048 4014 +> 16 0 30 2981 topology 3050 4014 +> 15 0 30 2981 topology 3048 4015 +> 16 0 30 2981 topology 3049 4015 +> 15 0 30 2981 topology 3051 4016 +> 16 0 30 2981 topology 3053 4016 +> 15 0 30 2981 topology 3051 4017 +> 16 0 30 2981 topology 3052 4017 +> 15 0 30 2981 topology 3054 4018 +> 16 0 30 2981 topology 3056 4018 +> 15 0 30 2981 topology 3054 4019 +> 16 0 30 2981 topology 3055 4019 +> 15 0 30 2981 topology 3057 4020 +> 16 0 30 2981 topology 3059 4020 +> 15 0 30 2981 topology 3057 4021 +> 16 0 30 2981 topology 3058 4021 +> 15 0 30 2981 topology 3060 4022 +> 16 0 30 2981 topology 3062 4022 +> 15 0 30 2981 topology 3060 4023 +> 16 0 30 2981 topology 3061 4023 +> 15 0 30 2981 topology 3063 4024 +> 16 0 30 2981 topology 3065 4024 +> 15 0 30 2981 topology 3063 4025 +> 16 0 30 2981 topology 3064 4025 +> 15 0 30 2981 topology 3066 4026 +> 16 0 30 2981 topology 3068 4026 +> 15 0 30 2981 topology 3066 4027 +> 16 0 30 2981 topology 3067 4027 +> 15 0 30 2981 topology 3069 4028 +> 16 0 30 2981 topology 3071 4028 +> 15 0 30 2981 topology 3069 4029 +> 16 0 30 2981 topology 3070 4029 +> 15 0 30 2981 topology 3072 4030 +> 16 0 30 2981 topology 3074 4030 +> 15 0 30 2981 topology 3072 4031 +> 16 0 30 2981 topology 3073 4031 +> 15 0 30 2981 topology 3075 4032 +> 16 0 30 2981 topology 3077 4032 +> 15 0 30 2981 topology 3075 4033 +> 16 0 30 2981 topology 3076 4033 +> 15 0 30 2981 topology 3078 4034 +> 16 0 30 2981 topology 3080 4034 +> 15 0 30 2981 topology 3078 4035 +> 16 0 30 2981 topology 3079 4035 +> 15 0 30 2981 topology 3081 4036 +> 16 0 30 2981 topology 3083 4036 +> 15 0 30 2981 topology 3081 4037 +> 16 0 30 2981 topology 3082 4037 +> 15 0 30 2981 topology 3084 4038 +> 16 0 30 2981 topology 3086 4038 +> 15 0 30 2981 topology 3084 4039 +> 16 0 30 2981 topology 3085 4039 +> 15 0 30 2981 topology 3087 4040 +> 16 0 30 2981 topology 3089 4040 +> 15 0 30 2981 topology 3087 4041 +> 16 0 30 2981 topology 3088 4041 +> 15 0 28 3092 topology 3095 4042 > 16 0 28 3092 topology 3202 4042 -> 15 0 29 3092 topology 3198 4043 -> 16 0 29 3092 topology 3199 4043 -> 15 0 28 3092 topology 3112 4044 +> 15 0 28 3092 topology 3094 4043 +> 16 0 28 3092 topology 3202 4043 +> 15 0 28 3092 topology 3098 4044 > 16 0 28 3092 topology 3202 4044 -> 15 0 28 3092 topology 3142 4045 +> 15 0 28 3092 topology 3097 4045 > 16 0 28 3092 topology 3202 4045 -> 15 0 28 3092 topology 3172 4046 +> 15 0 28 3092 topology 3101 4046 > 16 0 28 3092 topology 3202 4046 -> 15 0 28 3092 topology 3149 4047 +> 15 0 28 3092 topology 3100 4047 > 16 0 28 3092 topology 3202 4047 -> 15 0 28 3092 topology 3125 4048 +> 15 0 28 3092 topology 3104 4048 > 16 0 28 3092 topology 3202 4048 -> 15 0 28 3092 topology 3101 4049 +> 15 0 28 3092 topology 3103 4049 > 16 0 28 3092 topology 3202 4049 -> 15 0 28 3092 topology 3185 4050 +> 15 0 28 3092 topology 3107 4050 > 16 0 28 3092 topology 3202 4050 -> 15 0 28 3092 topology 3161 4051 +> 15 0 28 3092 topology 3106 4051 > 16 0 28 3092 topology 3202 4051 -> 15 0 28 3092 topology 3137 4052 +> 15 0 28 3092 topology 3110 4052 > 16 0 28 3092 topology 3202 4052 -> 15 0 28 3092 topology 3113 4053 +> 15 0 28 3092 topology 3109 4053 > 16 0 28 3092 topology 3202 4053 -> 15 0 28 3092 topology 3197 4054 +> 15 0 28 3092 topology 3113 4054 > 16 0 28 3092 topology 3202 4054 -> 15 0 28 3092 topology 3173 4055 +> 15 0 28 3092 topology 3112 4055 > 16 0 28 3092 topology 3202 4055 -> 15 0 28 3092 topology 3115 4056 +> 15 0 28 3092 topology 3116 4056 > 16 0 28 3092 topology 3202 4056 -> 15 0 28 3092 topology 3145 4057 +> 15 0 28 3092 topology 3115 4057 > 16 0 28 3092 topology 3202 4057 -> 15 0 28 3092 topology 3175 4058 +> 15 0 28 3092 topology 3119 4058 > 16 0 28 3092 topology 3202 4058 -> 15 0 30 3092 topology 3201 4059 -> 16 0 30 3092 topology 3202 4059 -> 15 0 28 3092 topology 3097 4060 +> 15 0 28 3092 topology 3118 4059 +> 16 0 28 3092 topology 3202 4059 +> 15 0 28 3092 topology 3122 4060 > 16 0 28 3092 topology 3202 4060 -> 15 0 28 3092 topology 3127 4061 +> 15 0 28 3092 topology 3121 4061 > 16 0 28 3092 topology 3202 4061 -> 15 0 28 3092 topology 3157 4062 +> 15 0 28 3092 topology 3125 4062 > 16 0 28 3092 topology 3202 4062 -> 15 0 28 3092 topology 3187 4063 +> 15 0 28 3092 topology 3124 4063 > 16 0 28 3092 topology 3202 4063 -> 15 0 28 3092 topology 3109 4064 +> 15 0 28 3092 topology 3128 4064 > 16 0 28 3092 topology 3202 4064 -> 15 0 28 3092 topology 3139 4065 +> 15 0 28 3092 topology 3127 4065 > 16 0 28 3092 topology 3202 4065 -> 15 0 29 3092 topology 3144 4066 -> 16 0 29 3092 topology 3146 4066 -> 15 0 28 3092 topology 3169 4067 +> 15 0 28 3092 topology 3131 4066 +> 16 0 28 3092 topology 3202 4066 +> 15 0 28 3092 topology 3130 4067 > 16 0 28 3092 topology 3202 4067 -> 15 0 29 3092 topology 3093 4068 -> 16 0 29 3092 topology 3095 4068 -> 15 0 29 3092 topology 3147 4069 -> 16 0 29 3092 topology 3149 4069 -> 15 0 28 3092 topology 3199 4070 +> 15 0 28 3092 topology 3134 4068 +> 16 0 28 3092 topology 3202 4068 +> 15 0 28 3092 topology 3133 4069 +> 16 0 28 3092 topology 3202 4069 +> 15 0 28 3092 topology 3137 4070 > 16 0 28 3092 topology 3202 4070 -> 15 0 29 3092 topology 3096 4071 -> 16 0 29 3092 topology 3098 4071 -> 15 0 29 3092 topology 3150 4072 -> 16 0 29 3092 topology 3152 4072 -> 15 0 29 3092 topology 3099 4073 -> 16 0 29 3092 topology 3101 4073 -> 15 0 29 3092 topology 3153 4074 -> 16 0 29 3092 topology 3155 4074 -> 15 0 29 3092 topology 3102 4075 -> 16 0 29 3092 topology 3104 4075 -> 15 0 29 3092 topology 3156 4076 -> 16 0 29 3092 topology 3158 4076 -> 15 0 29 3092 topology 3105 4077 -> 16 0 29 3092 topology 3107 4077 -> 15 0 29 3092 topology 3159 4078 -> 16 0 29 3092 topology 3161 4078 -> 15 0 28 3092 topology 3116 4079 +> 15 0 28 3092 topology 3136 4071 +> 16 0 28 3092 topology 3202 4071 +> 15 0 28 3092 topology 3140 4072 +> 16 0 28 3092 topology 3202 4072 +> 15 0 28 3092 topology 3139 4073 +> 16 0 28 3092 topology 3202 4073 +> 15 0 28 3092 topology 3143 4074 +> 16 0 28 3092 topology 3202 4074 +> 15 0 28 3092 topology 3142 4075 +> 16 0 28 3092 topology 3202 4075 +> 15 0 28 3092 topology 3146 4076 +> 16 0 28 3092 topology 3202 4076 +> 15 0 28 3092 topology 3145 4077 +> 16 0 28 3092 topology 3202 4077 +> 15 0 28 3092 topology 3149 4078 +> 16 0 28 3092 topology 3202 4078 +> 15 0 28 3092 topology 3148 4079 > 16 0 28 3092 topology 3202 4079 -> 15 0 29 3092 topology 3108 4080 -> 16 0 29 3092 topology 3110 4080 -> 15 0 29 3092 topology 3162 4081 -> 16 0 29 3092 topology 3164 4081 -> 15 0 29 3092 topology 3117 4082 -> 16 0 29 3092 topology 3118 4082 -> 15 0 28 3092 topology 3176 4083 +> 15 0 28 3092 topology 3152 4080 +> 16 0 28 3092 topology 3202 4080 +> 15 0 28 3092 topology 3151 4081 +> 16 0 28 3092 topology 3202 4081 +> 15 0 28 3092 topology 3155 4082 +> 16 0 28 3092 topology 3202 4082 +> 15 0 28 3092 topology 3154 4083 > 16 0 28 3092 topology 3202 4083 -> 15 0 29 3092 topology 3111 4084 -> 16 0 29 3092 topology 3113 4084 -> 15 0 28 3092 topology 3152 4085 +> 15 0 28 3092 topology 3158 4084 +> 16 0 28 3092 topology 3202 4084 +> 15 0 28 3092 topology 3157 4085 > 16 0 28 3092 topology 3202 4085 -> 15 0 29 3092 topology 3165 4086 -> 16 0 29 3092 topology 3167 4086 -> 15 0 29 3092 topology 3093 4087 -> 16 0 29 3092 topology 3094 4087 -> 15 0 28 3092 topology 3128 4088 +> 15 0 28 3092 topology 3161 4086 +> 16 0 28 3092 topology 3202 4086 +> 15 0 28 3092 topology 3160 4087 +> 16 0 28 3092 topology 3202 4087 +> 15 0 28 3092 topology 3164 4088 > 16 0 28 3092 topology 3202 4088 -> 15 0 29 3092 topology 3147 4089 -> 16 0 29 3092 topology 3148 4089 -> 15 0 28 3092 topology 3104 4090 +> 15 0 28 3092 topology 3163 4089 +> 16 0 28 3092 topology 3202 4089 +> 15 0 28 3092 topology 3167 4090 > 16 0 28 3092 topology 3202 4090 -> 15 0 29 3092 topology 3168 4091 -> 16 0 29 3092 topology 3170 4091 -> 15 0 29 3092 topology 3123 4092 -> 16 0 29 3092 topology 3124 4092 -> 15 0 29 3092 topology 3177 4093 -> 16 0 29 3092 topology 3178 4093 -> 15 0 28 3092 topology 3188 4094 +> 15 0 28 3092 topology 3166 4091 +> 16 0 28 3092 topology 3202 4091 +> 15 0 28 3092 topology 3170 4092 +> 16 0 28 3092 topology 3202 4092 +> 15 0 28 3092 topology 3169 4093 +> 16 0 28 3092 topology 3202 4093 +> 15 0 28 3092 topology 3173 4094 > 16 0 28 3092 topology 3202 4094 -> 15 0 28 3092 topology 3164 4095 +> 15 0 28 3092 topology 3172 4095 > 16 0 28 3092 topology 3202 4095 -> 15 0 29 3092 topology 3171 4096 -> 16 0 29 3092 topology 3173 4096 -> 15 0 29 3092 topology 3099 4097 -> 16 0 29 3092 topology 3100 4097 -> 15 0 28 3092 topology 3140 4098 +> 15 0 28 3092 topology 3176 4096 +> 16 0 28 3092 topology 3202 4096 +> 15 0 28 3092 topology 3175 4097 +> 16 0 28 3092 topology 3202 4097 +> 15 0 28 3092 topology 3179 4098 > 16 0 28 3092 topology 3202 4098 -> 15 0 29 3092 topology 3153 4099 -> 16 0 29 3092 topology 3154 4099 -> 15 0 29 3092 topology 3129 4100 -> 16 0 29 3092 topology 3130 4100 -> 15 0 29 3092 topology 3183 4101 -> 16 0 29 3092 topology 3184 4101 -> 15 0 28 3092 topology 3200 4102 +> 15 0 28 3092 topology 3178 4099 +> 16 0 28 3092 topology 3202 4099 +> 15 0 28 3092 topology 3182 4100 +> 16 0 28 3092 topology 3202 4100 +> 15 0 28 3092 topology 3181 4101 +> 16 0 28 3092 topology 3202 4101 +> 15 0 28 3092 topology 3185 4102 > 16 0 28 3092 topology 3202 4102 -> 15 0 29 3092 topology 3105 4103 -> 16 0 29 3092 topology 3106 4103 -> 15 0 29 3092 topology 3159 4104 -> 16 0 29 3092 topology 3160 4104 -> 15 0 29 3092 topology 3135 4105 -> 16 0 29 3092 topology 3136 4105 -> 15 0 29 3092 topology 3189 4106 -> 16 0 29 3092 topology 3190 4106 -> 15 0 28 3092 topology 3094 4107 +> 15 0 28 3092 topology 3184 4103 +> 16 0 28 3092 topology 3202 4103 +> 15 0 28 3092 topology 3188 4104 +> 16 0 28 3092 topology 3202 4104 +> 15 0 28 3092 topology 3187 4105 +> 16 0 28 3092 topology 3202 4105 +> 15 0 28 3092 topology 3191 4106 +> 16 0 28 3092 topology 3202 4106 +> 15 0 28 3092 topology 3190 4107 > 16 0 28 3092 topology 3202 4107 -> 15 0 29 3092 topology 3111 4108 -> 16 0 29 3092 topology 3112 4108 -> 15 0 28 3092 topology 3124 4109 +> 15 0 28 3092 topology 3194 4108 +> 16 0 28 3092 topology 3202 4108 +> 15 0 28 3092 topology 3193 4109 > 16 0 28 3092 topology 3202 4109 -> 15 0 29 3092 topology 3165 4110 -> 16 0 29 3092 topology 3166 4110 -> 15 0 28 3092 topology 3154 4111 +> 15 0 28 3092 topology 3197 4110 +> 16 0 28 3092 topology 3202 4110 +> 15 0 28 3092 topology 3196 4111 > 16 0 28 3092 topology 3202 4111 -> 15 0 29 3092 topology 3141 4112 -> 16 0 29 3092 topology 3142 4112 -> 15 0 28 3092 topology 3184 4113 +> 15 0 28 3092 topology 3200 4112 +> 16 0 28 3092 topology 3202 4112 +> 15 0 28 3092 topology 3199 4113 > 16 0 28 3092 topology 3202 4113 -> 15 0 29 3092 topology 3195 4114 -> 16 0 29 3092 topology 3196 4114 -> 15 0 28 3092 topology 3106 4115 -> 16 0 28 3092 topology 3202 4115 -> 15 0 28 3092 topology 3136 4116 -> 16 0 28 3092 topology 3202 4116 -> 15 0 29 3092 topology 3171 4117 -> 16 0 29 3092 topology 3172 4117 -> 15 0 28 3092 topology 3166 4118 -> 16 0 28 3092 topology 3202 4118 -> 15 0 28 3092 topology 3196 4119 -> 16 0 28 3092 topology 3202 4119 -> 15 0 28 3092 topology 3119 4120 -> 16 0 28 3092 topology 3202 4120 -> 15 0 28 3092 topology 3095 4121 -> 16 0 28 3092 topology 3202 4121 -> 15 0 28 3092 topology 3179 4122 -> 16 0 28 3092 topology 3202 4122 -> 15 0 28 3092 topology 3155 4123 -> 16 0 28 3092 topology 3202 4123 -> 15 0 28 3092 topology 3131 4124 -> 16 0 28 3092 topology 3202 4124 -> 15 0 28 3092 topology 3107 4125 -> 16 0 28 3092 topology 3202 4125 -> 15 0 28 3092 topology 3191 4126 -> 16 0 28 3092 topology 3202 4126 -> 15 0 28 3092 topology 3167 4127 -> 16 0 28 3092 topology 3202 4127 -> 15 0 28 3092 topology 3143 4128 -> 16 0 28 3092 topology 3202 4128 -> 15 0 28 3092 topology 3121 4129 -> 16 0 28 3092 topology 3202 4129 -> 15 0 28 3092 topology 3151 4130 -> 16 0 28 3092 topology 3202 4130 -> 15 0 28 3092 topology 3181 4131 -> 16 0 28 3092 topology 3202 4131 -> 15 0 28 3092 topology 3103 4132 -> 16 0 28 3092 topology 3202 4132 -> 15 0 29 3092 topology 3114 4133 -> 16 0 29 3092 topology 3116 4133 -> 15 0 28 3092 topology 3133 4134 -> 16 0 28 3092 topology 3202 4134 -> 15 0 28 3092 topology 3163 4135 -> 16 0 28 3092 topology 3202 4135 -> 15 0 29 3092 topology 3117 4136 -> 16 0 29 3092 topology 3119 4136 -> 15 0 28 3092 topology 3193 4137 -> 16 0 28 3092 topology 3202 4137 -> 15 0 29 3092 topology 3120 4138 -> 16 0 29 3092 topology 3122 4138 -> 15 0 29 3092 topology 3174 4139 -> 16 0 29 3092 topology 3176 4139 -> 15 0 29 3092 topology 3123 4140 -> 16 0 29 3092 topology 3125 4140 -> 15 0 29 3092 topology 3177 4141 -> 16 0 29 3092 topology 3179 4141 -> 15 0 29 3092 topology 3126 4142 -> 16 0 29 3092 topology 3128 4142 -> 15 0 29 3092 topology 3180 4143 -> 16 0 29 3092 topology 3182 4143 -> 15 0 29 3092 topology 3129 4144 -> 16 0 29 3092 topology 3131 4144 -> 15 0 29 3092 topology 3183 4145 -> 16 0 29 3092 topology 3185 4145 -> 15 0 29 3092 topology 3132 4146 -> 16 0 29 3092 topology 3134 4146 -> 15 0 29 3092 topology 3186 4147 -> 16 0 29 3092 topology 3188 4147 -> 15 0 29 3092 topology 3114 4148 -> 16 0 29 3092 topology 3115 4148 -> 15 0 29 3092 topology 3135 4149 -> 16 0 29 3092 topology 3137 4149 -> 15 0 28 3092 topology 3146 4150 -> 16 0 28 3092 topology 3202 4150 -> 15 0 29 3092 topology 3189 4151 -> 16 0 29 3092 topology 3191 4151 -> 15 0 28 3092 topology 3122 4152 -> 16 0 28 3092 topology 3202 4152 -> 15 0 29 3092 topology 3144 4153 -> 16 0 29 3092 topology 3145 4153 -> 15 0 28 3092 topology 3098 4154 -> 16 0 28 3092 topology 3202 4154 -> 15 0 29 3092 topology 3138 4155 -> 16 0 29 3092 topology 3140 4155 -> 15 0 29 3092 topology 3192 4156 -> 16 0 29 3092 topology 3194 4156 -> 15 0 29 3092 topology 3120 4157 -> 16 0 29 3092 topology 3121 4157 -> 15 0 29 3092 topology 3174 4158 -> 16 0 29 3092 topology 3175 4158 -> 15 0 28 3092 topology 3182 4159 -> 16 0 28 3092 topology 3202 4159 -> 15 0 29 3092 topology 3141 4160 -> 16 0 29 3092 topology 3143 4160 -> 15 0 28 3092 topology 3158 4161 -> 16 0 28 3092 topology 3202 4161 -> 15 0 29 3092 topology 3195 4162 -> 16 0 29 3092 topology 3197 4162 -> 15 0 29 3092 topology 3096 4163 -> 16 0 29 3092 topology 3097 4163 -> 15 0 28 3092 topology 3134 4164 -> 16 0 28 3092 topology 3202 4164 -> 15 0 29 3092 topology 3150 4165 -> 16 0 29 3092 topology 3151 4165 -> 15 0 28 3092 topology 3110 4166 -> 16 0 28 3092 topology 3202 4166 -> 15 0 29 3092 topology 3198 4167 -> 16 0 29 3092 topology 3200 4167 -> 15 0 29 3092 topology 3126 4168 -> 16 0 29 3092 topology 3127 4168 -> 15 0 29 3092 topology 3180 4169 -> 16 0 29 3092 topology 3181 4169 -> 15 0 28 3092 topology 3194 4170 -> 16 0 28 3092 topology 3202 4170 -> 15 0 28 3092 topology 3170 4171 -> 16 0 28 3092 topology 3202 4171 -> 15 0 29 3092 topology 3102 4172 -> 16 0 29 3092 topology 3103 4172 -> 15 0 29 3092 topology 3156 4173 -> 16 0 29 3092 topology 3157 4173 -> 15 0 29 3092 topology 3132 4174 -> 16 0 29 3092 topology 3133 4174 -> 15 0 29 3092 topology 3186 4175 -> 16 0 29 3092 topology 3187 4175 -> 15 0 29 3092 topology 3108 4176 -> 16 0 29 3092 topology 3109 4176 -> 15 0 28 3092 topology 3118 4177 -> 16 0 28 3092 topology 3202 4177 -> 15 0 29 3092 topology 3162 4178 -> 16 0 29 3092 topology 3163 4178 -> 15 0 28 3092 topology 3148 4179 -> 16 0 28 3092 topology 3202 4179 -> 15 0 29 3092 topology 3138 4180 -> 16 0 29 3092 topology 3139 4180 -> 15 0 28 3092 topology 3178 4181 -> 16 0 28 3092 topology 3202 4181 -> 15 0 29 3092 topology 3192 4182 -> 16 0 29 3092 topology 3193 4182 -> 15 0 28 3092 topology 3100 4183 -> 16 0 28 3092 topology 3202 4183 -> 15 0 28 3092 topology 3130 4184 -> 16 0 28 3092 topology 3202 4184 -> 15 0 29 3092 topology 3168 4185 -> 16 0 29 3092 topology 3169 4185 -> 15 0 28 3092 topology 3160 4186 -> 16 0 28 3092 topology 3202 4186 -> 15 0 28 3203 topology 3242 4187 +> 15 0 29 3092 topology 3201 4114 +> 16 0 29 3092 topology 3202 4114 +> 15 0 30 3092 topology 3093 4115 +> 16 0 30 3092 topology 3095 4115 +> 15 0 30 3092 topology 3093 4116 +> 16 0 30 3092 topology 3094 4116 +> 15 0 30 3092 topology 3096 4117 +> 16 0 30 3092 topology 3098 4117 +> 15 0 30 3092 topology 3096 4118 +> 16 0 30 3092 topology 3097 4118 +> 15 0 30 3092 topology 3099 4119 +> 16 0 30 3092 topology 3101 4119 +> 15 0 30 3092 topology 3099 4120 +> 16 0 30 3092 topology 3100 4120 +> 15 0 30 3092 topology 3102 4121 +> 16 0 30 3092 topology 3104 4121 +> 15 0 30 3092 topology 3102 4122 +> 16 0 30 3092 topology 3103 4122 +> 15 0 30 3092 topology 3105 4123 +> 16 0 30 3092 topology 3107 4123 +> 15 0 30 3092 topology 3105 4124 +> 16 0 30 3092 topology 3106 4124 +> 15 0 30 3092 topology 3108 4125 +> 16 0 30 3092 topology 3110 4125 +> 15 0 30 3092 topology 3108 4126 +> 16 0 30 3092 topology 3109 4126 +> 15 0 30 3092 topology 3111 4127 +> 16 0 30 3092 topology 3113 4127 +> 15 0 30 3092 topology 3111 4128 +> 16 0 30 3092 topology 3112 4128 +> 15 0 30 3092 topology 3114 4129 +> 16 0 30 3092 topology 3116 4129 +> 15 0 30 3092 topology 3114 4130 +> 16 0 30 3092 topology 3115 4130 +> 15 0 30 3092 topology 3117 4131 +> 16 0 30 3092 topology 3119 4131 +> 15 0 30 3092 topology 3117 4132 +> 16 0 30 3092 topology 3118 4132 +> 15 0 30 3092 topology 3120 4133 +> 16 0 30 3092 topology 3122 4133 +> 15 0 30 3092 topology 3120 4134 +> 16 0 30 3092 topology 3121 4134 +> 15 0 30 3092 topology 3123 4135 +> 16 0 30 3092 topology 3125 4135 +> 15 0 30 3092 topology 3123 4136 +> 16 0 30 3092 topology 3124 4136 +> 15 0 30 3092 topology 3126 4137 +> 16 0 30 3092 topology 3128 4137 +> 15 0 30 3092 topology 3126 4138 +> 16 0 30 3092 topology 3127 4138 +> 15 0 30 3092 topology 3129 4139 +> 16 0 30 3092 topology 3131 4139 +> 15 0 30 3092 topology 3129 4140 +> 16 0 30 3092 topology 3130 4140 +> 15 0 30 3092 topology 3132 4141 +> 16 0 30 3092 topology 3134 4141 +> 15 0 30 3092 topology 3132 4142 +> 16 0 30 3092 topology 3133 4142 +> 15 0 30 3092 topology 3135 4143 +> 16 0 30 3092 topology 3137 4143 +> 15 0 30 3092 topology 3135 4144 +> 16 0 30 3092 topology 3136 4144 +> 15 0 30 3092 topology 3138 4145 +> 16 0 30 3092 topology 3140 4145 +> 15 0 30 3092 topology 3138 4146 +> 16 0 30 3092 topology 3139 4146 +> 15 0 30 3092 topology 3141 4147 +> 16 0 30 3092 topology 3143 4147 +> 15 0 30 3092 topology 3141 4148 +> 16 0 30 3092 topology 3142 4148 +> 15 0 30 3092 topology 3144 4149 +> 16 0 30 3092 topology 3146 4149 +> 15 0 30 3092 topology 3144 4150 +> 16 0 30 3092 topology 3145 4150 +> 15 0 30 3092 topology 3147 4151 +> 16 0 30 3092 topology 3149 4151 +> 15 0 30 3092 topology 3147 4152 +> 16 0 30 3092 topology 3148 4152 +> 15 0 30 3092 topology 3150 4153 +> 16 0 30 3092 topology 3152 4153 +> 15 0 30 3092 topology 3150 4154 +> 16 0 30 3092 topology 3151 4154 +> 15 0 30 3092 topology 3153 4155 +> 16 0 30 3092 topology 3155 4155 +> 15 0 30 3092 topology 3153 4156 +> 16 0 30 3092 topology 3154 4156 +> 15 0 30 3092 topology 3156 4157 +> 16 0 30 3092 topology 3158 4157 +> 15 0 30 3092 topology 3156 4158 +> 16 0 30 3092 topology 3157 4158 +> 15 0 30 3092 topology 3159 4159 +> 16 0 30 3092 topology 3161 4159 +> 15 0 30 3092 topology 3159 4160 +> 16 0 30 3092 topology 3160 4160 +> 15 0 30 3092 topology 3162 4161 +> 16 0 30 3092 topology 3164 4161 +> 15 0 30 3092 topology 3162 4162 +> 16 0 30 3092 topology 3163 4162 +> 15 0 30 3092 topology 3165 4163 +> 16 0 30 3092 topology 3167 4163 +> 15 0 30 3092 topology 3165 4164 +> 16 0 30 3092 topology 3166 4164 +> 15 0 30 3092 topology 3168 4165 +> 16 0 30 3092 topology 3170 4165 +> 15 0 30 3092 topology 3168 4166 +> 16 0 30 3092 topology 3169 4166 +> 15 0 30 3092 topology 3171 4167 +> 16 0 30 3092 topology 3173 4167 +> 15 0 30 3092 topology 3171 4168 +> 16 0 30 3092 topology 3172 4168 +> 15 0 30 3092 topology 3174 4169 +> 16 0 30 3092 topology 3176 4169 +> 15 0 30 3092 topology 3174 4170 +> 16 0 30 3092 topology 3175 4170 +> 15 0 30 3092 topology 3177 4171 +> 16 0 30 3092 topology 3179 4171 +> 15 0 30 3092 topology 3177 4172 +> 16 0 30 3092 topology 3178 4172 +> 15 0 30 3092 topology 3180 4173 +> 16 0 30 3092 topology 3182 4173 +> 15 0 30 3092 topology 3180 4174 +> 16 0 30 3092 topology 3181 4174 +> 15 0 30 3092 topology 3183 4175 +> 16 0 30 3092 topology 3185 4175 +> 15 0 30 3092 topology 3183 4176 +> 16 0 30 3092 topology 3184 4176 +> 15 0 30 3092 topology 3186 4177 +> 16 0 30 3092 topology 3188 4177 +> 15 0 30 3092 topology 3186 4178 +> 16 0 30 3092 topology 3187 4178 +> 15 0 30 3092 topology 3189 4179 +> 16 0 30 3092 topology 3191 4179 +> 15 0 30 3092 topology 3189 4180 +> 16 0 30 3092 topology 3190 4180 +> 15 0 30 3092 topology 3192 4181 +> 16 0 30 3092 topology 3194 4181 +> 15 0 30 3092 topology 3192 4182 +> 16 0 30 3092 topology 3193 4182 +> 15 0 30 3092 topology 3195 4183 +> 16 0 30 3092 topology 3197 4183 +> 15 0 30 3092 topology 3195 4184 +> 16 0 30 3092 topology 3196 4184 +> 15 0 30 3092 topology 3198 4185 +> 16 0 30 3092 topology 3200 4185 +> 15 0 30 3092 topology 3198 4186 +> 16 0 30 3092 topology 3199 4186 +> 15 0 28 3203 topology 3206 4187 > 16 0 28 3203 topology 3271 4187 -> 15 0 28 3203 topology 3254 4188 +> 15 0 28 3203 topology 3205 4188 > 16 0 28 3203 topology 3271 4188 -> 15 0 28 3203 topology 3266 4189 +> 15 0 28 3203 topology 3209 4189 > 16 0 28 3203 topology 3271 4189 -> 15 0 28 3203 topology 3215 4190 +> 15 0 28 3203 topology 3208 4190 > 16 0 28 3203 topology 3271 4190 -> 15 0 28 3203 topology 3238 4191 +> 15 0 28 3203 topology 3212 4191 > 16 0 28 3203 topology 3271 4191 -> 15 0 28 3203 topology 3227 4192 +> 15 0 28 3203 topology 3211 4192 > 16 0 28 3203 topology 3271 4192 -> 15 0 28 3203 topology 3268 4193 +> 15 0 28 3203 topology 3215 4193 > 16 0 28 3203 topology 3271 4193 -> 15 0 29 3203 topology 3237 4194 -> 16 0 29 3203 topology 3239 4194 -> 15 0 28 3203 topology 3250 4195 +> 15 0 28 3203 topology 3214 4194 +> 16 0 28 3203 topology 3271 4194 +> 15 0 28 3203 topology 3218 4195 > 16 0 28 3203 topology 3271 4195 -> 15 0 29 3203 topology 3240 4196 -> 16 0 29 3203 topology 3242 4196 -> 15 0 29 3203 topology 3243 4197 -> 16 0 29 3203 topology 3245 4197 -> 15 0 28 3203 topology 3262 4198 +> 15 0 28 3203 topology 3217 4196 +> 16 0 28 3203 topology 3271 4196 +> 15 0 28 3203 topology 3221 4197 +> 16 0 28 3203 topology 3271 4197 +> 15 0 28 3203 topology 3220 4198 > 16 0 28 3203 topology 3271 4198 -> 15 0 29 3203 topology 3246 4199 -> 16 0 29 3203 topology 3248 4199 -> 15 0 28 3203 topology 3217 4200 +> 15 0 28 3203 topology 3224 4199 +> 16 0 28 3203 topology 3271 4199 +> 15 0 28 3203 topology 3223 4200 > 16 0 28 3203 topology 3271 4200 -> 15 0 29 3203 topology 3249 4201 -> 16 0 29 3203 topology 3251 4201 -> 15 0 29 3203 topology 3252 4202 -> 16 0 29 3203 topology 3254 4202 -> 15 0 28 3203 topology 3229 4203 +> 15 0 28 3203 topology 3227 4201 +> 16 0 28 3203 topology 3271 4201 +> 15 0 28 3203 topology 3226 4202 +> 16 0 28 3203 topology 3271 4202 +> 15 0 28 3203 topology 3230 4203 > 16 0 28 3203 topology 3271 4203 -> 15 0 29 3203 topology 3255 4204 -> 16 0 29 3203 topology 3257 4204 -> 15 0 29 3203 topology 3237 4205 -> 16 0 29 3203 topology 3238 4205 -> 15 0 29 3203 topology 3258 4206 -> 16 0 29 3203 topology 3260 4206 -> 15 0 29 3203 topology 3267 4207 -> 16 0 29 3203 topology 3268 4207 -> 15 0 29 3203 topology 3261 4208 -> 16 0 29 3203 topology 3263 4208 -> 15 0 28 3203 topology 3269 4209 +> 15 0 28 3203 topology 3229 4204 +> 16 0 28 3203 topology 3271 4204 +> 15 0 28 3203 topology 3233 4205 +> 16 0 28 3203 topology 3271 4205 +> 15 0 28 3203 topology 3232 4206 +> 16 0 28 3203 topology 3271 4206 +> 15 0 28 3203 topology 3236 4207 +> 16 0 28 3203 topology 3271 4207 +> 15 0 28 3203 topology 3235 4208 +> 16 0 28 3203 topology 3271 4208 +> 15 0 28 3203 topology 3239 4209 > 16 0 28 3203 topology 3271 4209 -> 15 0 29 3203 topology 3243 4210 -> 16 0 29 3203 topology 3244 4210 -> 15 0 28 3203 topology 3245 4211 +> 15 0 28 3203 topology 3238 4210 +> 16 0 28 3203 topology 3271 4210 +> 15 0 28 3203 topology 3242 4211 > 16 0 28 3203 topology 3271 4211 -> 15 0 29 3203 topology 3264 4212 -> 16 0 29 3203 topology 3266 4212 -> 15 0 29 3203 topology 3249 4213 -> 16 0 29 3203 topology 3250 4213 -> 15 0 28 3203 topology 3257 4214 +> 15 0 28 3203 topology 3241 4212 +> 16 0 28 3203 topology 3271 4212 +> 15 0 28 3203 topology 3245 4213 +> 16 0 28 3203 topology 3271 4213 +> 15 0 28 3203 topology 3244 4214 > 16 0 28 3203 topology 3271 4214 -> 15 0 29 3203 topology 3255 4215 -> 16 0 29 3203 topology 3256 4215 -> 15 0 28 3203 topology 3218 4216 +> 15 0 28 3203 topology 3248 4215 +> 16 0 28 3203 topology 3271 4215 +> 15 0 28 3203 topology 3247 4216 > 16 0 28 3203 topology 3271 4216 -> 15 0 29 3203 topology 3261 4217 -> 16 0 29 3203 topology 3262 4217 -> 15 0 28 3203 topology 3230 4218 +> 15 0 28 3203 topology 3251 4217 +> 16 0 28 3203 topology 3271 4217 +> 15 0 28 3203 topology 3250 4218 > 16 0 28 3203 topology 3271 4218 -> 15 0 28 3203 topology 3206 4219 +> 15 0 28 3203 topology 3254 4219 > 16 0 28 3203 topology 3271 4219 -> 15 0 29 3203 topology 3210 4220 -> 16 0 29 3203 topology 3211 4220 -> 15 0 28 3203 topology 3247 4221 +> 15 0 28 3203 topology 3253 4220 +> 16 0 28 3203 topology 3271 4220 +> 15 0 28 3203 topology 3257 4221 > 16 0 28 3203 topology 3271 4221 -> 15 0 29 3203 topology 3204 4222 -> 16 0 29 3203 topology 3206 4222 -> 15 0 29 3203 topology 3216 4223 -> 16 0 29 3203 topology 3217 4223 +> 15 0 28 3203 topology 3256 4222 +> 16 0 28 3203 topology 3271 4222 +> 15 0 28 3203 topology 3260 4223 +> 16 0 28 3203 topology 3271 4223 > 15 0 28 3203 topology 3259 4224 > 16 0 28 3203 topology 3271 4224 -> 15 0 30 3203 topology 3270 4225 -> 16 0 30 3203 topology 3271 4225 -> 15 0 28 3203 topology 3214 4226 +> 15 0 28 3203 topology 3263 4225 +> 16 0 28 3203 topology 3271 4225 +> 15 0 28 3203 topology 3262 4226 > 16 0 28 3203 topology 3271 4226 -> 15 0 29 3203 topology 3222 4227 -> 16 0 29 3203 topology 3223 4227 -> 15 0 28 3203 topology 3226 4228 +> 15 0 28 3203 topology 3266 4227 +> 16 0 28 3203 topology 3271 4227 +> 15 0 28 3203 topology 3265 4228 > 16 0 28 3203 topology 3271 4228 -> 15 0 29 3203 topology 3228 4229 -> 16 0 29 3203 topology 3229 4229 -> 15 0 29 3203 topology 3204 4230 -> 16 0 29 3203 topology 3205 4230 -> 15 0 29 3203 topology 3234 4231 -> 16 0 29 3203 topology 3235 4231 -> 15 0 28 3203 topology 3248 4232 -> 16 0 28 3203 topology 3271 4232 -> 15 0 28 3203 topology 3260 4233 -> 16 0 28 3203 topology 3271 4233 -> 15 0 28 3203 topology 3209 4234 -> 16 0 28 3203 topology 3271 4234 -> 15 0 28 3203 topology 3221 4235 -> 16 0 28 3203 topology 3271 4235 -> 15 0 28 3203 topology 3244 4236 -> 16 0 28 3203 topology 3271 4236 -> 15 0 28 3203 topology 3233 4237 -> 16 0 28 3203 topology 3271 4237 -> 15 0 28 3203 topology 3256 4238 -> 16 0 28 3203 topology 3271 4238 -> 15 0 29 3203 topology 3267 4239 -> 16 0 29 3203 topology 3269 4239 -> 15 0 28 3203 topology 3211 4240 -> 16 0 28 3203 topology 3271 4240 -> 15 0 28 3203 topology 3223 4241 -> 16 0 28 3203 topology 3271 4241 -> 15 0 28 3203 topology 3205 4242 -> 16 0 28 3203 topology 3271 4242 -> 15 0 28 3203 topology 3235 4243 -> 16 0 28 3203 topology 3271 4243 -> 15 0 28 3203 topology 3239 4244 -> 16 0 28 3203 topology 3271 4244 -> 15 0 29 3203 topology 3240 4245 -> 16 0 29 3203 topology 3241 4245 -> 15 0 29 3203 topology 3207 4246 -> 16 0 29 3203 topology 3209 4246 -> 15 0 29 3203 topology 3210 4247 -> 16 0 29 3203 topology 3212 4247 -> 15 0 29 3203 topology 3246 4248 -> 16 0 29 3203 topology 3247 4248 -> 15 0 28 3203 topology 3251 4249 -> 16 0 28 3203 topology 3271 4249 -> 15 0 29 3203 topology 3213 4250 -> 16 0 29 3203 topology 3215 4250 -> 15 0 29 3203 topology 3216 4251 -> 16 0 29 3203 topology 3218 4251 -> 15 0 29 3203 topology 3252 4252 -> 16 0 29 3203 topology 3253 4252 -> 15 0 28 3203 topology 3263 4253 -> 16 0 28 3203 topology 3271 4253 -> 15 0 28 3203 topology 3212 4254 -> 16 0 28 3203 topology 3271 4254 -> 15 0 29 3203 topology 3219 4255 -> 16 0 29 3203 topology 3221 4255 -> 15 0 29 3203 topology 3222 4256 -> 16 0 29 3203 topology 3224 4256 -> 15 0 29 3203 topology 3258 4257 -> 16 0 29 3203 topology 3259 4257 -> 15 0 28 3203 topology 3224 4258 -> 16 0 28 3203 topology 3271 4258 -> 15 0 29 3203 topology 3225 4259 -> 16 0 29 3203 topology 3227 4259 -> 15 0 29 3203 topology 3207 4260 -> 16 0 29 3203 topology 3208 4260 -> 15 0 28 3203 topology 3241 4261 -> 16 0 28 3203 topology 3271 4261 -> 15 0 29 3203 topology 3228 4262 -> 16 0 29 3203 topology 3230 4262 -> 15 0 29 3203 topology 3264 4263 -> 16 0 29 3203 topology 3265 4263 -> 15 0 29 3203 topology 3231 4264 -> 16 0 29 3203 topology 3233 4264 -> 15 0 28 3203 topology 3236 4265 -> 16 0 28 3203 topology 3271 4265 -> 15 0 29 3203 topology 3213 4266 -> 16 0 29 3203 topology 3214 4266 -> 15 0 28 3203 topology 3253 4267 -> 16 0 28 3203 topology 3271 4267 -> 15 0 29 3203 topology 3234 4268 -> 16 0 29 3203 topology 3236 4268 -> 15 0 28 3203 topology 3208 4269 -> 16 0 28 3203 topology 3271 4269 -> 15 0 29 3203 topology 3219 4270 -> 16 0 29 3203 topology 3220 4270 -> 15 0 28 3203 topology 3265 4271 -> 16 0 28 3203 topology 3271 4271 -> 15 0 28 3203 topology 3220 4272 -> 16 0 28 3203 topology 3271 4272 -> 15 0 29 3203 topology 3225 4273 -> 16 0 29 3203 topology 3226 4273 -> 15 0 28 3203 topology 3232 4274 -> 16 0 28 3203 topology 3271 4274 -> 15 0 29 3203 topology 3231 4275 -> 16 0 29 3203 topology 3232 4275 -> 15 0 28 3272 topology 3281 4276 +> 15 0 28 3203 topology 3269 4229 +> 16 0 28 3203 topology 3271 4229 +> 15 0 28 3203 topology 3268 4230 +> 16 0 28 3203 topology 3271 4230 +> 15 0 29 3203 topology 3270 4231 +> 16 0 29 3203 topology 3271 4231 +> 15 0 30 3203 topology 3204 4232 +> 16 0 30 3203 topology 3206 4232 +> 15 0 30 3203 topology 3204 4233 +> 16 0 30 3203 topology 3205 4233 +> 15 0 30 3203 topology 3207 4234 +> 16 0 30 3203 topology 3209 4234 +> 15 0 30 3203 topology 3207 4235 +> 16 0 30 3203 topology 3208 4235 +> 15 0 30 3203 topology 3210 4236 +> 16 0 30 3203 topology 3212 4236 +> 15 0 30 3203 topology 3210 4237 +> 16 0 30 3203 topology 3211 4237 +> 15 0 30 3203 topology 3213 4238 +> 16 0 30 3203 topology 3215 4238 +> 15 0 30 3203 topology 3213 4239 +> 16 0 30 3203 topology 3214 4239 +> 15 0 30 3203 topology 3216 4240 +> 16 0 30 3203 topology 3218 4240 +> 15 0 30 3203 topology 3216 4241 +> 16 0 30 3203 topology 3217 4241 +> 15 0 30 3203 topology 3219 4242 +> 16 0 30 3203 topology 3221 4242 +> 15 0 30 3203 topology 3219 4243 +> 16 0 30 3203 topology 3220 4243 +> 15 0 30 3203 topology 3222 4244 +> 16 0 30 3203 topology 3224 4244 +> 15 0 30 3203 topology 3222 4245 +> 16 0 30 3203 topology 3223 4245 +> 15 0 30 3203 topology 3225 4246 +> 16 0 30 3203 topology 3227 4246 +> 15 0 30 3203 topology 3225 4247 +> 16 0 30 3203 topology 3226 4247 +> 15 0 30 3203 topology 3228 4248 +> 16 0 30 3203 topology 3230 4248 +> 15 0 30 3203 topology 3228 4249 +> 16 0 30 3203 topology 3229 4249 +> 15 0 30 3203 topology 3231 4250 +> 16 0 30 3203 topology 3233 4250 +> 15 0 30 3203 topology 3231 4251 +> 16 0 30 3203 topology 3232 4251 +> 15 0 30 3203 topology 3234 4252 +> 16 0 30 3203 topology 3236 4252 +> 15 0 30 3203 topology 3234 4253 +> 16 0 30 3203 topology 3235 4253 +> 15 0 30 3203 topology 3237 4254 +> 16 0 30 3203 topology 3239 4254 +> 15 0 30 3203 topology 3237 4255 +> 16 0 30 3203 topology 3238 4255 +> 15 0 30 3203 topology 3240 4256 +> 16 0 30 3203 topology 3242 4256 +> 15 0 30 3203 topology 3240 4257 +> 16 0 30 3203 topology 3241 4257 +> 15 0 30 3203 topology 3243 4258 +> 16 0 30 3203 topology 3245 4258 +> 15 0 30 3203 topology 3243 4259 +> 16 0 30 3203 topology 3244 4259 +> 15 0 30 3203 topology 3246 4260 +> 16 0 30 3203 topology 3248 4260 +> 15 0 30 3203 topology 3246 4261 +> 16 0 30 3203 topology 3247 4261 +> 15 0 30 3203 topology 3249 4262 +> 16 0 30 3203 topology 3251 4262 +> 15 0 30 3203 topology 3249 4263 +> 16 0 30 3203 topology 3250 4263 +> 15 0 30 3203 topology 3252 4264 +> 16 0 30 3203 topology 3254 4264 +> 15 0 30 3203 topology 3252 4265 +> 16 0 30 3203 topology 3253 4265 +> 15 0 30 3203 topology 3255 4266 +> 16 0 30 3203 topology 3257 4266 +> 15 0 30 3203 topology 3255 4267 +> 16 0 30 3203 topology 3256 4267 +> 15 0 30 3203 topology 3258 4268 +> 16 0 30 3203 topology 3260 4268 +> 15 0 30 3203 topology 3258 4269 +> 16 0 30 3203 topology 3259 4269 +> 15 0 30 3203 topology 3261 4270 +> 16 0 30 3203 topology 3263 4270 +> 15 0 30 3203 topology 3261 4271 +> 16 0 30 3203 topology 3262 4271 +> 15 0 30 3203 topology 3264 4272 +> 16 0 30 3203 topology 3266 4272 +> 15 0 30 3203 topology 3264 4273 +> 16 0 30 3203 topology 3265 4273 +> 15 0 30 3203 topology 3267 4274 +> 16 0 30 3203 topology 3269 4274 +> 15 0 30 3203 topology 3267 4275 +> 16 0 30 3203 topology 3268 4275 +> 15 0 28 3272 topology 3275 4276 > 16 0 28 3272 topology 3292 4276 -> 15 0 28 3272 topology 3277 4277 +> 15 0 28 3272 topology 3274 4277 > 16 0 28 3272 topology 3292 4277 -> 15 0 28 3272 topology 3289 4278 +> 15 0 28 3272 topology 3278 4278 > 16 0 28 3272 topology 3292 4278 -> 15 0 29 3272 topology 3273 4279 -> 16 0 29 3272 topology 3274 4279 -> 15 0 29 3272 topology 3279 4280 -> 16 0 29 3272 topology 3280 4280 -> 15 0 29 3272 topology 3285 4281 -> 16 0 29 3272 topology 3286 4281 +> 15 0 28 3272 topology 3277 4279 +> 16 0 28 3272 topology 3292 4279 +> 15 0 28 3272 topology 3281 4280 +> 16 0 28 3272 topology 3292 4280 +> 15 0 28 3272 topology 3280 4281 +> 16 0 28 3272 topology 3292 4281 > 15 0 28 3272 topology 3284 4282 > 16 0 28 3272 topology 3292 4282 -> 15 0 28 3272 topology 3274 4283 +> 15 0 28 3272 topology 3283 4283 > 16 0 28 3272 topology 3292 4283 -> 15 0 30 3272 topology 3291 4284 -> 16 0 30 3272 topology 3292 4284 +> 15 0 28 3272 topology 3287 4284 +> 16 0 28 3272 topology 3292 4284 > 15 0 28 3272 topology 3286 4285 > 16 0 28 3272 topology 3292 4285 -> 15 0 28 3272 topology 3275 4286 +> 15 0 28 3272 topology 3290 4286 > 16 0 28 3272 topology 3292 4286 -> 15 0 28 3272 topology 3287 4287 +> 15 0 28 3272 topology 3289 4287 > 16 0 28 3272 topology 3292 4287 -> 15 0 29 3272 topology 3273 4288 -> 16 0 29 3272 topology 3275 4288 -> 15 0 29 3272 topology 3276 4289 -> 16 0 29 3272 topology 3278 4289 -> 15 0 29 3272 topology 3279 4290 -> 16 0 29 3272 topology 3281 4290 -> 15 0 28 3272 topology 3283 4291 -> 16 0 28 3272 topology 3292 4291 -> 15 0 29 3272 topology 3282 4292 -> 16 0 29 3272 topology 3284 4292 -> 15 0 29 3272 topology 3285 4293 -> 16 0 29 3272 topology 3287 4293 -> 15 0 29 3272 topology 3288 4294 -> 16 0 29 3272 topology 3290 4294 -> 15 0 29 3272 topology 3276 4295 -> 16 0 29 3272 topology 3277 4295 -> 15 0 29 3272 topology 3282 4296 -> 16 0 29 3272 topology 3283 4296 -> 15 0 28 3272 topology 3278 4297 -> 16 0 28 3272 topology 3292 4297 -> 15 0 29 3272 topology 3288 4298 -> 16 0 29 3272 topology 3289 4298 -> 15 0 28 3272 topology 3290 4299 -> 16 0 28 3272 topology 3292 4299 -> 15 0 28 3272 topology 3280 4300 -> 16 0 28 3272 topology 3292 4300 -> 15 0 29 3293 topology 3294 4301 -> 16 0 29 3293 topology 3295 4301 -> 15 0 29 3293 topology 3300 4302 -> 16 0 29 3293 topology 3301 4302 -> 15 0 28 3293 topology 3302 4303 +> 15 0 29 3272 topology 3291 4288 +> 16 0 29 3272 topology 3292 4288 +> 15 0 30 3272 topology 3273 4289 +> 16 0 30 3272 topology 3275 4289 +> 15 0 30 3272 topology 3273 4290 +> 16 0 30 3272 topology 3274 4290 +> 15 0 30 3272 topology 3276 4291 +> 16 0 30 3272 topology 3278 4291 +> 15 0 30 3272 topology 3276 4292 +> 16 0 30 3272 topology 3277 4292 +> 15 0 30 3272 topology 3279 4293 +> 16 0 30 3272 topology 3281 4293 +> 15 0 30 3272 topology 3279 4294 +> 16 0 30 3272 topology 3280 4294 +> 15 0 30 3272 topology 3282 4295 +> 16 0 30 3272 topology 3284 4295 +> 15 0 30 3272 topology 3282 4296 +> 16 0 30 3272 topology 3283 4296 +> 15 0 30 3272 topology 3285 4297 +> 16 0 30 3272 topology 3287 4297 +> 15 0 30 3272 topology 3285 4298 +> 16 0 30 3272 topology 3286 4298 +> 15 0 30 3272 topology 3288 4299 +> 16 0 30 3272 topology 3290 4299 +> 15 0 30 3272 topology 3288 4300 +> 16 0 30 3272 topology 3289 4300 +> 15 0 28 3293 topology 3296 4301 +> 16 0 28 3293 topology 3313 4301 +> 15 0 28 3293 topology 3295 4302 +> 16 0 28 3293 topology 3313 4302 +> 15 0 28 3293 topology 3299 4303 > 16 0 28 3293 topology 3313 4303 -> 15 0 28 3293 topology 3304 4304 +> 15 0 28 3293 topology 3298 4304 > 16 0 28 3293 topology 3313 4304 -> 15 0 28 3293 topology 3298 4305 +> 15 0 28 3293 topology 3302 4305 > 16 0 28 3293 topology 3313 4305 -> 15 0 28 3293 topology 3305 4306 +> 15 0 28 3293 topology 3301 4306 > 16 0 28 3293 topology 3313 4306 -> 15 0 29 3293 topology 3303 4307 -> 16 0 29 3293 topology 3305 4307 -> 15 0 29 3293 topology 3306 4308 -> 16 0 29 3293 topology 3308 4308 -> 15 0 30 3293 topology 3312 4309 -> 16 0 30 3293 topology 3313 4309 -> 15 0 29 3293 topology 3309 4310 -> 16 0 29 3293 topology 3311 4310 -> 15 0 28 3293 topology 3295 4311 +> 15 0 28 3293 topology 3305 4307 +> 16 0 28 3293 topology 3313 4307 +> 15 0 28 3293 topology 3304 4308 +> 16 0 28 3293 topology 3313 4308 +> 15 0 28 3293 topology 3308 4309 +> 16 0 28 3293 topology 3313 4309 +> 15 0 28 3293 topology 3307 4310 +> 16 0 28 3293 topology 3313 4310 +> 15 0 28 3293 topology 3311 4311 > 16 0 28 3293 topology 3313 4311 -> 15 0 29 3293 topology 3303 4312 -> 16 0 29 3293 topology 3304 4312 -> 15 0 29 3293 topology 3309 4313 -> 16 0 29 3293 topology 3310 4313 -> 15 0 28 3293 topology 3308 4314 -> 16 0 28 3293 topology 3313 4314 -> 15 0 28 3293 topology 3296 4315 -> 16 0 28 3293 topology 3313 4315 -> 15 0 29 3293 topology 3297 4316 -> 16 0 29 3293 topology 3298 4316 -> 15 0 28 3293 topology 3310 4317 -> 16 0 28 3293 topology 3313 4317 -> 15 0 28 3293 topology 3311 4318 -> 16 0 28 3293 topology 3313 4318 -> 15 0 28 3293 topology 3299 4319 -> 16 0 28 3293 topology 3313 4319 -> 15 0 28 3293 topology 3307 4320 -> 16 0 28 3293 topology 3313 4320 -> 15 0 28 3293 topology 3301 4321 -> 16 0 28 3293 topology 3313 4321 -> 15 0 29 3293 topology 3294 4322 -> 16 0 29 3293 topology 3296 4322 -> 15 0 29 3293 topology 3297 4323 -> 16 0 29 3293 topology 3299 4323 -> 15 0 29 3293 topology 3306 4324 -> 16 0 29 3293 topology 3307 4324 -> 15 0 29 3293 topology 3300 4325 -> 16 0 29 3293 topology 3302 4325 +> 15 0 28 3293 topology 3310 4312 +> 16 0 28 3293 topology 3313 4312 +> 15 0 29 3293 topology 3312 4313 +> 16 0 29 3293 topology 3313 4313 +> 15 0 30 3293 topology 3294 4314 +> 16 0 30 3293 topology 3296 4314 +> 15 0 30 3293 topology 3294 4315 +> 16 0 30 3293 topology 3295 4315 +> 15 0 30 3293 topology 3297 4316 +> 16 0 30 3293 topology 3299 4316 +> 15 0 30 3293 topology 3297 4317 +> 16 0 30 3293 topology 3298 4317 +> 15 0 30 3293 topology 3300 4318 +> 16 0 30 3293 topology 3302 4318 +> 15 0 30 3293 topology 3300 4319 +> 16 0 30 3293 topology 3301 4319 +> 15 0 30 3293 topology 3303 4320 +> 16 0 30 3293 topology 3305 4320 +> 15 0 30 3293 topology 3303 4321 +> 16 0 30 3293 topology 3304 4321 +> 15 0 30 3293 topology 3306 4322 +> 16 0 30 3293 topology 3308 4322 +> 15 0 30 3293 topology 3306 4323 +> 16 0 30 3293 topology 3307 4323 +> 15 0 30 3293 topology 3309 4324 +> 16 0 30 3293 topology 3311 4324 +> 15 0 30 3293 topology 3309 4325 +> 16 0 30 3293 topology 3310 4325 > 15 0 31 2350 topology 3316 4326 -> 16 0 31 2350 topology 2793 4326 +> 16 0 31 2350 topology 3315 4326 > 15 0 31 2350 topology 3316 4327 -> 16 0 31 2350 topology 3201 4327 +> 16 0 31 2350 topology 2571 4327 > 15 0 31 2350 topology 3316 4328 -> 16 0 31 2350 topology 3312 4328 +> 16 0 31 2350 topology 2682 4328 > 15 0 31 2350 topology 3316 4329 -> 16 0 31 2350 topology 2904 4329 +> 16 0 31 2350 topology 2793 4329 > 15 0 31 2350 topology 3316 4330 -> 16 0 31 2350 topology 2571 4330 +> 16 0 31 2350 topology 2904 4330 > 15 0 31 2350 topology 3316 4331 -> 16 0 31 2350 topology 3315 4331 +> 16 0 31 2350 topology 2979 4331 > 15 0 31 2350 topology 3316 4332 -> 16 0 31 2350 topology 3270 4332 +> 16 0 31 2350 topology 3090 4332 > 15 0 31 2350 topology 3316 4333 -> 16 0 31 2350 topology 2979 4333 -> 15 0 32 2350 topology 2460 4334 -> 16 0 32 2350 topology 3316 4334 +> 16 0 31 2350 topology 3201 4333 +> 15 0 31 2350 topology 3316 4334 +> 16 0 31 2350 topology 3270 4334 > 15 0 31 2350 topology 3316 4335 -> 16 0 31 2350 topology 2682 4335 +> 16 0 31 2350 topology 3291 4335 > 15 0 31 2350 topology 3316 4336 -> 16 0 31 2350 topology 3090 4336 -> 15 0 31 2350 topology 3316 4337 -> 16 0 31 2350 topology 3291 4337 -> 15 0 23 3318 topology 3375 4338 +> 16 0 31 2350 topology 3312 4336 +> 15 0 32 2350 topology 2460 4337 +> 16 0 32 2350 topology 3316 4337 +> 15 0 23 3318 topology 3348 4338 > 16 0 23 3318 topology 3410 4338 -> 15 0 24 3318 topology 3385 4339 -> 16 0 24 3318 topology 3387 4339 -> 15 0 24 3318 topology 3361 4340 -> 16 0 24 3318 topology 3363 4340 -> 15 0 23 3318 topology 3347 4341 +> 15 0 23 3318 topology 3347 4339 +> 16 0 23 3318 topology 3410 4339 +> 15 0 23 3318 topology 3351 4340 +> 16 0 23 3318 topology 3410 4340 +> 15 0 23 3318 topology 3350 4341 > 16 0 23 3318 topology 3410 4341 -> 15 0 25 3318 topology 3409 4342 -> 16 0 25 3318 topology 3410 4342 -> 15 0 24 3318 topology 3337 4343 -> 16 0 24 3318 topology 3339 4343 -> 15 0 23 3318 topology 3377 4344 +> 15 0 23 3318 topology 3354 4342 +> 16 0 23 3318 topology 3410 4342 +> 15 0 23 3318 topology 3353 4343 +> 16 0 23 3318 topology 3410 4343 +> 15 0 23 3318 topology 3357 4344 > 16 0 23 3318 topology 3410 4344 -> 15 0 24 3318 topology 3391 4345 -> 16 0 24 3318 topology 3393 4345 -> 15 0 24 3318 topology 3346 4346 -> 16 0 24 3318 topology 3347 4346 -> 15 0 23 3318 topology 3407 4347 +> 15 0 23 3318 topology 3356 4345 +> 16 0 23 3318 topology 3410 4345 +> 15 0 23 3318 topology 3360 4346 +> 16 0 23 3318 topology 3410 4346 +> 15 0 23 3318 topology 3359 4347 > 16 0 23 3318 topology 3410 4347 -> 15 0 24 3318 topology 3367 4348 -> 16 0 24 3318 topology 3369 4348 -> 15 0 24 3318 topology 3349 4349 -> 16 0 24 3318 topology 3350 4349 -> 15 0 23 3318 topology 3359 4350 +> 15 0 23 3318 topology 3363 4348 +> 16 0 23 3318 topology 3410 4348 +> 15 0 23 3318 topology 3362 4349 +> 16 0 23 3318 topology 3410 4349 +> 15 0 23 3318 topology 3366 4350 > 16 0 23 3318 topology 3410 4350 -> 15 0 23 3318 topology 3389 4351 +> 15 0 23 3318 topology 3365 4351 > 16 0 23 3318 topology 3410 4351 -> 15 0 24 3318 topology 3397 4352 -> 16 0 24 3318 topology 3399 4352 -> 15 0 23 3318 topology 3330 4353 +> 15 0 23 3318 topology 3369 4352 +> 16 0 23 3318 topology 3410 4352 +> 15 0 23 3318 topology 3368 4353 > 16 0 23 3318 topology 3410 4353 -> 15 0 24 3318 topology 3352 4354 -> 16 0 24 3318 topology 3353 4354 -> 15 0 24 3318 topology 3406 4355 -> 16 0 24 3318 topology 3407 4355 -> 15 0 24 3318 topology 3373 4356 -> 16 0 24 3318 topology 3375 4356 -> 15 0 24 3318 topology 3328 4357 -> 16 0 24 3318 topology 3329 4357 -> 15 0 24 3318 topology 3355 4358 -> 16 0 24 3318 topology 3356 4358 -> 15 0 23 3318 topology 3371 4359 +> 15 0 23 3318 topology 3372 4354 +> 16 0 23 3318 topology 3410 4354 +> 15 0 23 3318 topology 3371 4355 +> 16 0 23 3318 topology 3410 4355 +> 15 0 23 3318 topology 3375 4356 +> 16 0 23 3318 topology 3410 4356 +> 15 0 23 3318 topology 3374 4357 +> 16 0 23 3318 topology 3410 4357 +> 15 0 23 3318 topology 3321 4358 +> 16 0 23 3318 topology 3410 4358 +> 15 0 23 3318 topology 3320 4359 > 16 0 23 3318 topology 3410 4359 -> 15 0 23 3318 topology 3401 4360 +> 15 0 23 3318 topology 3378 4360 > 16 0 23 3318 topology 3410 4360 -> 15 0 24 3318 topology 3403 4361 -> 16 0 24 3318 topology 3405 4361 -> 15 0 23 3318 topology 3342 4362 +> 15 0 23 3318 topology 3377 4361 +> 16 0 23 3318 topology 3410 4361 +> 15 0 23 3318 topology 3381 4362 > 16 0 23 3318 topology 3410 4362 -> 15 0 24 3318 topology 3358 4363 -> 16 0 24 3318 topology 3359 4363 -> 15 0 24 3318 topology 3361 4364 -> 16 0 24 3318 topology 3362 4364 -> 15 0 24 3318 topology 3364 4365 -> 16 0 24 3318 topology 3365 4365 -> 15 0 24 3318 topology 3340 4366 -> 16 0 24 3318 topology 3341 4366 -> 15 0 24 3318 topology 3367 4367 -> 16 0 24 3318 topology 3368 4367 -> 15 0 23 3318 topology 3326 4368 +> 15 0 23 3318 topology 3380 4363 +> 16 0 23 3318 topology 3410 4363 +> 15 0 23 3318 topology 3384 4364 +> 16 0 23 3318 topology 3410 4364 +> 15 0 23 3318 topology 3383 4365 +> 16 0 23 3318 topology 3410 4365 +> 15 0 23 3318 topology 3387 4366 +> 16 0 23 3318 topology 3410 4366 +> 15 0 23 3318 topology 3386 4367 +> 16 0 23 3318 topology 3410 4367 +> 15 0 23 3318 topology 3390 4368 > 16 0 23 3318 topology 3410 4368 -> 15 0 24 3318 topology 3370 4369 -> 16 0 24 3318 topology 3371 4369 -> 15 0 24 3318 topology 3373 4370 -> 16 0 24 3318 topology 3374 4370 -> 15 0 23 3318 topology 3378 4371 +> 15 0 23 3318 topology 3389 4369 +> 16 0 23 3318 topology 3410 4369 +> 15 0 23 3318 topology 3393 4370 +> 16 0 23 3318 topology 3410 4370 +> 15 0 23 3318 topology 3392 4371 > 16 0 23 3318 topology 3410 4371 -> 15 0 23 3318 topology 3354 4372 +> 15 0 23 3318 topology 3396 4372 > 16 0 23 3318 topology 3410 4372 -> 15 0 23 3318 topology 3338 4373 +> 15 0 23 3318 topology 3395 4373 > 16 0 23 3318 topology 3410 4373 -> 15 0 23 3318 topology 3390 4374 +> 15 0 23 3318 topology 3399 4374 > 16 0 23 3318 topology 3410 4374 -> 15 0 23 3318 topology 3366 4375 +> 15 0 23 3318 topology 3398 4375 > 16 0 23 3318 topology 3410 4375 -> 15 0 24 3318 topology 3328 4376 -> 16 0 24 3318 topology 3330 4376 -> 15 0 23 3318 topology 3402 4377 +> 15 0 23 3318 topology 3402 4376 +> 16 0 23 3318 topology 3410 4376 +> 15 0 23 3318 topology 3401 4377 > 16 0 23 3318 topology 3410 4377 -> 15 0 23 3318 topology 3321 4378 +> 15 0 23 3318 topology 3405 4378 > 16 0 23 3318 topology 3410 4378 -> 15 0 24 3318 topology 3340 4379 -> 16 0 24 3318 topology 3342 4379 -> 15 0 23 3318 topology 3356 4380 +> 15 0 23 3318 topology 3404 4379 +> 16 0 23 3318 topology 3410 4379 +> 15 0 23 3318 topology 3324 4380 > 16 0 23 3318 topology 3410 4380 -> 15 0 23 3318 topology 3386 4381 +> 15 0 23 3318 topology 3323 4381 > 16 0 23 3318 topology 3410 4381 -> 15 0 24 3318 topology 3325 4382 -> 16 0 24 3318 topology 3326 4382 -> 15 0 23 3318 topology 3333 4383 +> 15 0 23 3318 topology 3408 4382 +> 16 0 23 3318 topology 3410 4382 +> 15 0 23 3318 topology 3407 4383 > 16 0 23 3318 topology 3410 4383 -> 15 0 23 3318 topology 3368 4384 +> 15 0 23 3318 topology 3327 4384 > 16 0 23 3318 topology 3410 4384 -> 15 0 23 3318 topology 3398 4385 +> 15 0 23 3318 topology 3326 4385 > 16 0 23 3318 topology 3410 4385 -> 15 0 23 3318 topology 3345 4386 +> 15 0 23 3318 topology 3330 4386 > 16 0 23 3318 topology 3410 4386 -> 15 0 24 3318 topology 3337 4387 -> 16 0 24 3318 topology 3338 4387 -> 15 0 23 3318 topology 3323 4388 +> 15 0 23 3318 topology 3329 4387 +> 16 0 23 3318 topology 3410 4387 +> 15 0 23 3318 topology 3333 4388 > 16 0 23 3318 topology 3410 4388 -> 15 0 24 3318 topology 3319 4389 -> 16 0 24 3318 topology 3321 4389 -> 15 0 23 3318 topology 3335 4390 +> 15 0 23 3318 topology 3332 4389 +> 16 0 23 3318 topology 3410 4389 +> 15 0 23 3318 topology 3336 4390 > 16 0 23 3318 topology 3410 4390 -> 15 0 24 3318 topology 3346 4391 -> 16 0 24 3318 topology 3348 4391 -> 15 0 23 3318 topology 3381 4392 +> 15 0 23 3318 topology 3335 4391 +> 16 0 23 3318 topology 3410 4391 +> 15 0 23 3318 topology 3339 4392 > 16 0 23 3318 topology 3410 4392 -> 15 0 23 3318 topology 3357 4393 +> 15 0 23 3318 topology 3338 4393 > 16 0 23 3318 topology 3410 4393 -> 15 0 24 3318 topology 3376 4394 -> 16 0 24 3318 topology 3378 4394 -> 15 0 24 3318 topology 3352 4395 -> 16 0 24 3318 topology 3354 4395 -> 15 0 23 3318 topology 3393 4396 +> 15 0 23 3318 topology 3342 4394 +> 16 0 23 3318 topology 3410 4394 +> 15 0 23 3318 topology 3341 4395 +> 16 0 23 3318 topology 3410 4395 +> 15 0 23 3318 topology 3345 4396 > 16 0 23 3318 topology 3410 4396 -> 15 0 24 3318 topology 3406 4397 -> 16 0 24 3318 topology 3408 4397 -> 15 0 23 3318 topology 3369 4398 -> 16 0 23 3318 topology 3410 4398 -> 15 0 24 3318 topology 3382 4399 -> 16 0 24 3318 topology 3384 4399 -> 15 0 24 3318 topology 3331 4400 -> 16 0 24 3318 topology 3333 4400 -> 15 0 24 3318 topology 3358 4401 -> 16 0 24 3318 topology 3360 4401 -> 15 0 23 3318 topology 3405 4402 -> 16 0 23 3318 topology 3410 4402 -> 15 0 24 3318 topology 3388 4403 -> 16 0 24 3318 topology 3390 4403 -> 15 0 24 3318 topology 3364 4404 -> 16 0 24 3318 topology 3366 4404 -> 15 0 23 3318 topology 3353 4405 -> 16 0 23 3318 topology 3410 4405 -> 15 0 23 3318 topology 3383 4406 -> 16 0 23 3318 topology 3410 4406 -> 15 0 24 3318 topology 3394 4407 -> 16 0 24 3318 topology 3396 4407 -> 15 0 24 3318 topology 3322 4408 -> 16 0 24 3318 topology 3323 4408 -> 15 0 23 3318 topology 3324 4409 -> 16 0 23 3318 topology 3410 4409 -> 15 0 24 3318 topology 3376 4410 -> 16 0 24 3318 topology 3377 4410 -> 15 0 24 3318 topology 3343 4411 -> 16 0 24 3318 topology 3345 4411 -> 15 0 24 3318 topology 3370 4412 -> 16 0 24 3318 topology 3372 4412 -> 15 0 23 3318 topology 3365 4413 -> 16 0 23 3318 topology 3410 4413 -> 15 0 24 3318 topology 3379 4414 -> 16 0 24 3318 topology 3380 4414 -> 15 0 23 3318 topology 3395 4415 -> 16 0 23 3318 topology 3410 4415 -> 15 0 24 3318 topology 3400 4416 -> 16 0 24 3318 topology 3402 4416 -> 15 0 23 3318 topology 3336 4417 -> 16 0 23 3318 topology 3410 4417 -> 15 0 24 3318 topology 3382 4418 -> 16 0 24 3318 topology 3383 4418 -> 15 0 24 3318 topology 3385 4419 -> 16 0 24 3318 topology 3386 4419 -> 15 0 24 3318 topology 3334 4420 -> 16 0 24 3318 topology 3335 4420 -> 15 0 24 3318 topology 3388 4421 -> 16 0 24 3318 topology 3389 4421 -> 15 0 24 3318 topology 3391 4422 -> 16 0 24 3318 topology 3392 4422 -> 15 0 23 3318 topology 3320 4423 -> 16 0 23 3318 topology 3410 4423 -> 15 0 24 3318 topology 3394 4424 -> 16 0 24 3318 topology 3395 4424 -> 15 0 24 3318 topology 3397 4425 -> 16 0 24 3318 topology 3398 4425 -> 15 0 23 3318 topology 3348 4426 -> 16 0 23 3318 topology 3410 4426 -> 15 0 23 3318 topology 3332 4427 -> 16 0 23 3318 topology 3410 4427 -> 15 0 24 3318 topology 3400 4428 -> 16 0 24 3318 topology 3401 4428 -> 15 0 23 3318 topology 3408 4429 -> 16 0 23 3318 topology 3410 4429 -> 15 0 23 3318 topology 3384 4430 -> 16 0 23 3318 topology 3410 4430 -> 15 0 24 3318 topology 3403 4431 -> 16 0 24 3318 topology 3404 4431 -> 15 0 24 3318 topology 3322 4432 -> 16 0 24 3318 topology 3324 4432 -> 15 0 23 3318 topology 3360 4433 -> 16 0 23 3318 topology 3410 4433 -> 15 0 23 3318 topology 3344 4434 -> 16 0 23 3318 topology 3410 4434 -> 15 0 23 3318 topology 3396 4435 -> 16 0 23 3318 topology 3410 4435 -> 15 0 23 3318 topology 3372 4436 -> 16 0 23 3318 topology 3410 4436 -> 15 0 24 3318 topology 3334 4437 -> 16 0 24 3318 topology 3336 4437 -> 15 0 23 3318 topology 3350 4438 -> 16 0 23 3318 topology 3410 4438 -> 15 0 24 3318 topology 3319 4439 -> 16 0 24 3318 topology 3320 4439 -> 15 0 23 3318 topology 3380 4440 -> 16 0 23 3318 topology 3410 4440 -> 15 0 23 3318 topology 3327 4441 -> 16 0 23 3318 topology 3410 4441 -> 15 0 23 3318 topology 3362 4442 -> 16 0 23 3318 topology 3410 4442 -> 15 0 23 3318 topology 3392 4443 -> 16 0 23 3318 topology 3410 4443 -> 15 0 23 3318 topology 3339 4444 -> 16 0 23 3318 topology 3410 4444 -> 15 0 23 3318 topology 3374 4445 -> 16 0 23 3318 topology 3410 4445 -> 15 0 24 3318 topology 3331 4446 -> 16 0 24 3318 topology 3332 4446 -> 15 0 23 3318 topology 3404 4447 -> 16 0 23 3318 topology 3410 4447 -> 15 0 24 3318 topology 3343 4448 -> 16 0 24 3318 topology 3344 4448 -> 15 0 23 3318 topology 3329 4449 -> 16 0 23 3318 topology 3410 4449 -> 15 0 23 3318 topology 3351 4450 -> 16 0 23 3318 topology 3410 4450 -> 15 0 23 3318 topology 3341 4451 -> 16 0 23 3318 topology 3410 4451 -> 15 0 24 3318 topology 3349 4452 -> 16 0 24 3318 topology 3351 4452 -> 15 0 23 3318 topology 3387 4453 -> 16 0 23 3318 topology 3410 4453 -> 15 0 23 3318 topology 3363 4454 -> 16 0 23 3318 topology 3410 4454 -> 15 0 24 3318 topology 3325 4455 -> 16 0 24 3318 topology 3327 4455 -> 15 0 24 3318 topology 3379 4456 -> 16 0 24 3318 topology 3381 4456 -> 15 0 24 3318 topology 3355 4457 -> 16 0 24 3318 topology 3357 4457 -> 15 0 23 3318 topology 3399 4458 -> 16 0 23 3318 topology 3410 4458 +> 15 0 23 3318 topology 3344 4397 +> 16 0 23 3318 topology 3410 4397 +> 15 0 24 3318 topology 3409 4398 +> 16 0 24 3318 topology 3410 4398 +> 15 0 25 3318 topology 3346 4399 +> 16 0 25 3318 topology 3348 4399 +> 15 0 25 3318 topology 3346 4400 +> 16 0 25 3318 topology 3347 4400 +> 15 0 25 3318 topology 3349 4401 +> 16 0 25 3318 topology 3351 4401 +> 15 0 25 3318 topology 3349 4402 +> 16 0 25 3318 topology 3350 4402 +> 15 0 25 3318 topology 3352 4403 +> 16 0 25 3318 topology 3354 4403 +> 15 0 25 3318 topology 3352 4404 +> 16 0 25 3318 topology 3353 4404 +> 15 0 25 3318 topology 3355 4405 +> 16 0 25 3318 topology 3357 4405 +> 15 0 25 3318 topology 3355 4406 +> 16 0 25 3318 topology 3356 4406 +> 15 0 25 3318 topology 3358 4407 +> 16 0 25 3318 topology 3360 4407 +> 15 0 25 3318 topology 3358 4408 +> 16 0 25 3318 topology 3359 4408 +> 15 0 25 3318 topology 3361 4409 +> 16 0 25 3318 topology 3363 4409 +> 15 0 25 3318 topology 3361 4410 +> 16 0 25 3318 topology 3362 4410 +> 15 0 25 3318 topology 3364 4411 +> 16 0 25 3318 topology 3366 4411 +> 15 0 25 3318 topology 3364 4412 +> 16 0 25 3318 topology 3365 4412 +> 15 0 25 3318 topology 3367 4413 +> 16 0 25 3318 topology 3369 4413 +> 15 0 25 3318 topology 3367 4414 +> 16 0 25 3318 topology 3368 4414 +> 15 0 25 3318 topology 3370 4415 +> 16 0 25 3318 topology 3372 4415 +> 15 0 25 3318 topology 3370 4416 +> 16 0 25 3318 topology 3371 4416 +> 15 0 25 3318 topology 3373 4417 +> 16 0 25 3318 topology 3375 4417 +> 15 0 25 3318 topology 3373 4418 +> 16 0 25 3318 topology 3374 4418 +> 15 0 25 3318 topology 3319 4419 +> 16 0 25 3318 topology 3321 4419 +> 15 0 25 3318 topology 3319 4420 +> 16 0 25 3318 topology 3320 4420 +> 15 0 25 3318 topology 3376 4421 +> 16 0 25 3318 topology 3378 4421 +> 15 0 25 3318 topology 3376 4422 +> 16 0 25 3318 topology 3377 4422 +> 15 0 25 3318 topology 3379 4423 +> 16 0 25 3318 topology 3381 4423 +> 15 0 25 3318 topology 3379 4424 +> 16 0 25 3318 topology 3380 4424 +> 15 0 25 3318 topology 3382 4425 +> 16 0 25 3318 topology 3384 4425 +> 15 0 25 3318 topology 3382 4426 +> 16 0 25 3318 topology 3383 4426 +> 15 0 25 3318 topology 3385 4427 +> 16 0 25 3318 topology 3387 4427 +> 15 0 25 3318 topology 3385 4428 +> 16 0 25 3318 topology 3386 4428 +> 15 0 25 3318 topology 3388 4429 +> 16 0 25 3318 topology 3390 4429 +> 15 0 25 3318 topology 3388 4430 +> 16 0 25 3318 topology 3389 4430 +> 15 0 25 3318 topology 3391 4431 +> 16 0 25 3318 topology 3393 4431 +> 15 0 25 3318 topology 3391 4432 +> 16 0 25 3318 topology 3392 4432 +> 15 0 25 3318 topology 3394 4433 +> 16 0 25 3318 topology 3396 4433 +> 15 0 25 3318 topology 3394 4434 +> 16 0 25 3318 topology 3395 4434 +> 15 0 25 3318 topology 3397 4435 +> 16 0 25 3318 topology 3399 4435 +> 15 0 25 3318 topology 3397 4436 +> 16 0 25 3318 topology 3398 4436 +> 15 0 25 3318 topology 3400 4437 +> 16 0 25 3318 topology 3402 4437 +> 15 0 25 3318 topology 3400 4438 +> 16 0 25 3318 topology 3401 4438 +> 15 0 25 3318 topology 3403 4439 +> 16 0 25 3318 topology 3405 4439 +> 15 0 25 3318 topology 3403 4440 +> 16 0 25 3318 topology 3404 4440 +> 15 0 25 3318 topology 3322 4441 +> 16 0 25 3318 topology 3324 4441 +> 15 0 25 3318 topology 3322 4442 +> 16 0 25 3318 topology 3323 4442 +> 15 0 25 3318 topology 3406 4443 +> 16 0 25 3318 topology 3408 4443 +> 15 0 25 3318 topology 3406 4444 +> 16 0 25 3318 topology 3407 4444 +> 15 0 25 3318 topology 3325 4445 +> 16 0 25 3318 topology 3327 4445 +> 15 0 25 3318 topology 3325 4446 +> 16 0 25 3318 topology 3326 4446 +> 15 0 25 3318 topology 3328 4447 +> 16 0 25 3318 topology 3330 4447 +> 15 0 25 3318 topology 3328 4448 +> 16 0 25 3318 topology 3329 4448 +> 15 0 25 3318 topology 3331 4449 +> 16 0 25 3318 topology 3333 4449 +> 15 0 25 3318 topology 3331 4450 +> 16 0 25 3318 topology 3332 4450 +> 15 0 25 3318 topology 3334 4451 +> 16 0 25 3318 topology 3336 4451 +> 15 0 25 3318 topology 3334 4452 +> 16 0 25 3318 topology 3335 4452 +> 15 0 25 3318 topology 3337 4453 +> 16 0 25 3318 topology 3339 4453 +> 15 0 25 3318 topology 3337 4454 +> 16 0 25 3318 topology 3338 4454 +> 15 0 25 3318 topology 3340 4455 +> 16 0 25 3318 topology 3342 4455 +> 15 0 25 3318 topology 3340 4456 +> 16 0 25 3318 topology 3341 4456 +> 15 0 25 3318 topology 3343 4457 +> 16 0 25 3318 topology 3345 4457 +> 15 0 25 3318 topology 3343 4458 +> 16 0 25 3318 topology 3344 4458 > 15 0 26 2349 topology 3317 4459 > 16 0 26 2349 topology 3413 4459 > 15 0 26 2349 topology 3411 4460 -> 16 0 26 2349 topology 3409 4460 -> 15 0 21 2349 topology 3317 4461 -> 16 0 21 2349 topology 3411 4461 -> 15 0 33 2349 topology 3315 4462 -> 16 0 33 2349 topology 3317 4462 +> 16 0 26 2349 topology 3413 4460 +> 15 0 34 2349 topology 3315 4461 +> 16 0 34 2349 topology 3317 4461 +> 15 0 20 2349 topology 3317 4462 +> 16 0 20 2349 topology 3411 4462 > 15 0 26 2349 topology 3411 4463 -> 16 0 26 2349 topology 3413 4463 -> 15 0 24 3416 topology 3501 4464 -> 16 0 24 3416 topology 3502 4464 -> 15 0 24 3416 topology 3555 4465 -> 16 0 24 3416 topology 3556 4465 -> 15 0 24 3416 topology 3420 4466 -> 16 0 24 3416 topology 3422 4466 -> 15 0 24 3416 topology 3447 4467 -> 16 0 24 3416 topology 3449 4467 -> 15 0 23 3416 topology 3449 4468 +> 16 0 26 2349 topology 3409 4463 +> 15 0 23 3416 topology 3446 4464 +> 16 0 23 3416 topology 3610 4464 +> 15 0 23 3416 topology 3445 4465 +> 16 0 23 3416 topology 3610 4465 +> 15 0 23 3416 topology 3449 4466 +> 16 0 23 3416 topology 3610 4466 +> 15 0 23 3416 topology 3448 4467 +> 16 0 23 3416 topology 3610 4467 +> 15 0 23 3416 topology 3452 4468 > 16 0 23 3416 topology 3610 4468 -> 15 0 23 3416 topology 3433 4469 +> 15 0 23 3416 topology 3451 4469 > 16 0 23 3416 topology 3610 4469 -> 15 0 24 3416 topology 3558 4470 -> 16 0 24 3416 topology 3559 4470 -> 15 0 24 3416 topology 3477 4471 -> 16 0 24 3416 topology 3479 4471 -> 15 0 23 3416 topology 3509 4472 +> 15 0 23 3416 topology 3455 4470 +> 16 0 23 3416 topology 3610 4470 +> 15 0 23 3416 topology 3454 4471 +> 16 0 23 3416 topology 3610 4471 +> 15 0 23 3416 topology 3458 4472 > 16 0 23 3416 topology 3610 4472 -> 15 0 23 3416 topology 3485 4473 +> 15 0 23 3416 topology 3457 4473 > 16 0 23 3416 topology 3610 4473 -> 15 0 24 3416 topology 3561 4474 -> 16 0 24 3416 topology 3562 4474 -> 15 0 24 3416 topology 3453 4475 -> 16 0 24 3416 topology 3455 4475 -> 15 0 23 3416 topology 3461 4476 +> 15 0 23 3416 topology 3461 4474 +> 16 0 23 3416 topology 3610 4474 +> 15 0 23 3416 topology 3460 4475 +> 16 0 23 3416 topology 3610 4475 +> 15 0 23 3416 topology 3464 4476 > 16 0 23 3416 topology 3610 4476 -> 15 0 24 3416 topology 3507 4477 -> 16 0 24 3416 topology 3509 4477 -> 15 0 23 3416 topology 3569 4478 +> 15 0 23 3416 topology 3463 4477 +> 16 0 23 3416 topology 3610 4477 +> 15 0 23 3416 topology 3467 4478 > 16 0 23 3416 topology 3610 4478 -> 15 0 23 3416 topology 3545 4479 +> 15 0 23 3416 topology 3466 4479 > 16 0 23 3416 topology 3610 4479 -> 15 0 24 3416 topology 3483 4480 -> 16 0 24 3416 topology 3485 4480 -> 15 0 23 3416 topology 3521 4481 +> 15 0 23 3416 topology 3470 4480 +> 16 0 23 3416 topology 3610 4480 +> 15 0 23 3416 topology 3469 4481 > 16 0 23 3416 topology 3610 4481 -> 15 0 24 3416 topology 3537 4482 -> 16 0 24 3416 topology 3539 4482 -> 15 0 23 3416 topology 3497 4483 +> 15 0 23 3416 topology 3473 4482 +> 16 0 23 3416 topology 3610 4482 +> 15 0 23 3416 topology 3472 4483 > 16 0 23 3416 topology 3610 4483 -> 15 0 23 3416 topology 3605 4484 +> 15 0 23 3416 topology 3419 4484 > 16 0 23 3416 topology 3610 4484 -> 15 0 24 3416 topology 3432 4485 -> 16 0 24 3416 topology 3434 4485 -> 15 0 24 3416 topology 3459 4486 -> 16 0 24 3416 topology 3461 4486 -> 15 0 23 3416 topology 3473 4487 +> 15 0 23 3416 topology 3418 4485 +> 16 0 23 3416 topology 3610 4485 +> 15 0 23 3416 topology 3476 4486 +> 16 0 23 3416 topology 3610 4486 +> 15 0 23 3416 topology 3475 4487 > 16 0 23 3416 topology 3610 4487 -> 15 0 24 3416 topology 3513 4488 -> 16 0 24 3416 topology 3515 4488 -> 15 0 24 3416 topology 3567 4489 -> 16 0 24 3416 topology 3569 4489 -> 15 0 23 3416 topology 3581 4490 +> 15 0 23 3416 topology 3479 4488 +> 16 0 23 3416 topology 3610 4488 +> 15 0 23 3416 topology 3478 4489 +> 16 0 23 3416 topology 3610 4489 +> 15 0 23 3416 topology 3482 4490 > 16 0 23 3416 topology 3610 4490 -> 15 0 23 3416 topology 3557 4491 +> 15 0 23 3416 topology 3481 4491 > 16 0 23 3416 topology 3610 4491 -> 15 0 24 3416 topology 3489 4492 -> 16 0 24 3416 topology 3491 4492 -> 15 0 23 3416 topology 3533 4493 +> 15 0 23 3416 topology 3485 4492 +> 16 0 23 3416 topology 3610 4492 +> 15 0 23 3416 topology 3484 4493 > 16 0 23 3416 topology 3610 4493 -> 15 0 24 3416 topology 3543 4494 -> 16 0 24 3416 topology 3545 4494 -> 15 0 24 3416 topology 3597 4495 -> 16 0 24 3416 topology 3599 4495 -> 15 0 23 3416 topology 3445 4496 +> 15 0 23 3416 topology 3488 4494 +> 16 0 23 3416 topology 3610 4494 +> 15 0 23 3416 topology 3487 4495 +> 16 0 23 3416 topology 3610 4495 +> 15 0 23 3416 topology 3491 4496 > 16 0 23 3416 topology 3610 4496 -> 15 0 24 3416 topology 3465 4497 -> 16 0 24 3416 topology 3467 4497 -> 15 0 24 3416 topology 3519 4498 -> 16 0 24 3416 topology 3521 4498 -> 15 0 24 3416 topology 3573 4499 -> 16 0 24 3416 topology 3575 4499 -> 15 0 23 3416 topology 3593 4500 +> 15 0 23 3416 topology 3490 4497 +> 16 0 23 3416 topology 3610 4497 +> 15 0 23 3416 topology 3494 4498 +> 16 0 23 3416 topology 3610 4498 +> 15 0 23 3416 topology 3493 4499 +> 16 0 23 3416 topology 3610 4499 +> 15 0 23 3416 topology 3497 4500 > 16 0 23 3416 topology 3610 4500 -> 15 0 24 3416 topology 3420 4501 -> 16 0 24 3416 topology 3421 4501 -> 15 0 23 3416 topology 3475 4502 +> 15 0 23 3416 topology 3496 4501 +> 16 0 23 3416 topology 3610 4501 +> 15 0 23 3416 topology 3500 4502 > 16 0 23 3416 topology 3610 4502 -> 15 0 24 3416 topology 3495 4503 -> 16 0 24 3416 topology 3497 4503 -> 15 0 23 3416 topology 3505 4504 +> 15 0 23 3416 topology 3499 4503 +> 16 0 23 3416 topology 3610 4503 +> 15 0 23 3416 topology 3503 4504 > 16 0 23 3416 topology 3610 4504 -> 15 0 24 3416 topology 3549 4505 -> 16 0 24 3416 topology 3551 4505 -> 15 0 24 3416 topology 3603 4506 -> 16 0 24 3416 topology 3605 4506 -> 15 0 25 3416 topology 3609 4507 -> 16 0 25 3416 topology 3610 4507 -> 15 0 23 3416 topology 3535 4508 +> 15 0 23 3416 topology 3502 4505 +> 16 0 23 3416 topology 3610 4505 +> 15 0 23 3416 topology 3422 4506 +> 16 0 23 3416 topology 3610 4506 +> 15 0 23 3416 topology 3421 4507 +> 16 0 23 3416 topology 3610 4507 +> 15 0 23 3416 topology 3506 4508 > 16 0 23 3416 topology 3610 4508 -> 15 0 23 3416 topology 3422 4509 +> 15 0 23 3416 topology 3505 4509 > 16 0 23 3416 topology 3610 4509 -> 15 0 23 3416 topology 3457 4510 +> 15 0 23 3416 topology 3509 4510 > 16 0 23 3416 topology 3610 4510 -> 15 0 24 3416 topology 3471 4511 -> 16 0 24 3416 topology 3473 4511 -> 15 0 24 3416 topology 3525 4512 -> 16 0 24 3416 topology 3527 4512 -> 15 0 23 3416 topology 3565 4513 +> 15 0 23 3416 topology 3508 4511 +> 16 0 23 3416 topology 3610 4511 +> 15 0 23 3416 topology 3512 4512 +> 16 0 23 3416 topology 3610 4512 +> 15 0 23 3416 topology 3511 4513 > 16 0 23 3416 topology 3610 4513 -> 15 0 24 3416 topology 3579 4514 -> 16 0 24 3416 topology 3581 4514 -> 15 0 23 3416 topology 3487 4515 +> 15 0 23 3416 topology 3515 4514 +> 16 0 23 3416 topology 3610 4514 +> 15 0 23 3416 topology 3514 4515 > 16 0 23 3416 topology 3610 4515 -> 15 0 23 3416 topology 3595 4516 +> 15 0 23 3416 topology 3518 4516 > 16 0 23 3416 topology 3610 4516 -> 15 0 24 3416 topology 3501 4517 -> 16 0 24 3416 topology 3503 4517 -> 15 0 23 3416 topology 3517 4518 +> 15 0 23 3416 topology 3517 4517 +> 16 0 23 3416 topology 3610 4517 +> 15 0 23 3416 topology 3521 4518 > 16 0 23 3416 topology 3610 4518 -> 15 0 24 3416 topology 3555 4519 -> 16 0 24 3416 topology 3557 4519 -> 15 0 23 3416 topology 3547 4520 +> 15 0 23 3416 topology 3520 4519 +> 16 0 23 3416 topology 3610 4519 +> 15 0 23 3416 topology 3524 4520 > 16 0 23 3416 topology 3610 4520 -> 15 0 23 3416 topology 3434 4521 +> 15 0 23 3416 topology 3523 4521 > 16 0 23 3416 topology 3610 4521 -> 15 0 23 3416 topology 3469 4522 +> 15 0 23 3416 topology 3527 4522 > 16 0 23 3416 topology 3610 4522 -> 15 0 24 3416 topology 3531 4523 -> 16 0 24 3416 topology 3533 4523 -> 15 0 23 3416 topology 3577 4524 +> 15 0 23 3416 topology 3526 4523 +> 16 0 23 3416 topology 3610 4523 +> 15 0 23 3416 topology 3530 4524 > 16 0 23 3416 topology 3610 4524 -> 15 0 24 3416 topology 3585 4525 -> 16 0 24 3416 topology 3587 4525 -> 15 0 24 3416 topology 3432 4526 -> 16 0 24 3416 topology 3433 4526 -> 15 0 23 3416 topology 3499 4527 +> 15 0 23 3416 topology 3529 4525 +> 16 0 23 3416 topology 3610 4525 +> 15 0 23 3416 topology 3533 4526 +> 16 0 23 3416 topology 3610 4526 +> 15 0 23 3416 topology 3532 4527 > 16 0 23 3416 topology 3610 4527 -> 15 0 23 3416 topology 3607 4528 +> 15 0 23 3416 topology 3425 4528 > 16 0 23 3416 topology 3610 4528 -> 15 0 23 3416 topology 3529 4529 +> 15 0 23 3416 topology 3424 4529 > 16 0 23 3416 topology 3610 4529 -> 15 0 24 3416 topology 3561 4530 -> 16 0 24 3416 topology 3563 4530 -> 15 0 23 3416 topology 3559 4531 +> 15 0 23 3416 topology 3536 4530 +> 16 0 23 3416 topology 3610 4530 +> 15 0 23 3416 topology 3535 4531 > 16 0 23 3416 topology 3610 4531 -> 15 0 23 3416 topology 3589 4532 +> 15 0 23 3416 topology 3539 4532 > 16 0 23 3416 topology 3610 4532 -> 15 0 24 3416 topology 3591 4533 -> 16 0 24 3416 topology 3593 4533 -> 15 0 23 3416 topology 3418 4534 +> 15 0 23 3416 topology 3538 4533 +> 16 0 23 3416 topology 3610 4533 +> 15 0 23 3416 topology 3542 4534 > 16 0 23 3416 topology 3610 4534 -> 15 0 23 3416 topology 3430 4535 +> 15 0 23 3416 topology 3541 4535 > 16 0 23 3416 topology 3610 4535 -> 15 0 23 3416 topology 3476 4536 +> 15 0 23 3416 topology 3545 4536 > 16 0 23 3416 topology 3610 4536 -> 15 0 23 3416 topology 3452 4537 +> 15 0 23 3416 topology 3544 4537 > 16 0 23 3416 topology 3610 4537 -> 15 0 24 3416 topology 3423 4538 -> 16 0 24 3416 topology 3425 4538 -> 15 0 23 3416 topology 3536 4539 +> 15 0 23 3416 topology 3548 4538 +> 16 0 23 3416 topology 3610 4538 +> 15 0 23 3416 topology 3547 4539 > 16 0 23 3416 topology 3610 4539 -> 15 0 23 3416 topology 3512 4540 +> 15 0 23 3416 topology 3551 4540 > 16 0 23 3416 topology 3610 4540 -> 15 0 23 3416 topology 3442 4541 +> 15 0 23 3416 topology 3550 4541 > 16 0 23 3416 topology 3610 4541 -> 15 0 23 3416 topology 3488 4542 +> 15 0 23 3416 topology 3554 4542 > 16 0 23 3416 topology 3610 4542 -> 15 0 23 3416 topology 3596 4543 +> 15 0 23 3416 topology 3553 4543 > 16 0 23 3416 topology 3610 4543 -> 15 0 23 3416 topology 3464 4544 +> 15 0 23 3416 topology 3557 4544 > 16 0 23 3416 topology 3610 4544 -> 15 0 23 3416 topology 3572 4545 +> 15 0 23 3416 topology 3556 4545 > 16 0 23 3416 topology 3610 4545 -> 15 0 23 3416 topology 3548 4546 +> 15 0 23 3416 topology 3560 4546 > 16 0 23 3416 topology 3610 4546 -> 15 0 23 3416 topology 3524 4547 +> 15 0 23 3416 topology 3559 4547 > 16 0 23 3416 topology 3610 4547 -> 15 0 23 3416 topology 3500 4548 +> 15 0 23 3416 topology 3563 4548 > 16 0 23 3416 topology 3610 4548 -> 15 0 23 3416 topology 3608 4549 +> 15 0 23 3416 topology 3562 4549 > 16 0 23 3416 topology 3610 4549 -> 15 0 23 3416 topology 3584 4550 +> 15 0 23 3416 topology 3428 4550 > 16 0 23 3416 topology 3610 4550 -> 15 0 24 3416 topology 3435 4551 -> 16 0 24 3416 topology 3437 4551 -> 15 0 23 3416 topology 3560 4552 +> 15 0 23 3416 topology 3427 4551 +> 16 0 23 3416 topology 3610 4551 +> 15 0 23 3416 topology 3566 4552 > 16 0 23 3416 topology 3610 4552 -> 15 0 24 3416 topology 3417 4553 -> 16 0 24 3416 topology 3418 4553 -> 15 0 24 3416 topology 3444 4554 -> 16 0 24 3416 topology 3445 4554 -> 15 0 24 3416 topology 3447 4555 -> 16 0 24 3416 topology 3448 4555 -> 15 0 24 3416 topology 3450 4556 -> 16 0 24 3416 topology 3451 4556 -> 15 0 23 3416 topology 3454 4557 +> 15 0 23 3416 topology 3565 4553 +> 16 0 23 3416 topology 3610 4553 +> 15 0 23 3416 topology 3569 4554 +> 16 0 23 3416 topology 3610 4554 +> 15 0 23 3416 topology 3568 4555 +> 16 0 23 3416 topology 3610 4555 +> 15 0 23 3416 topology 3572 4556 +> 16 0 23 3416 topology 3610 4556 +> 15 0 23 3416 topology 3571 4557 > 16 0 23 3416 topology 3610 4557 -> 15 0 24 3416 topology 3504 4558 -> 16 0 24 3416 topology 3505 4558 -> 15 0 23 3416 topology 3484 4559 +> 15 0 23 3416 topology 3575 4558 +> 16 0 23 3416 topology 3610 4558 +> 15 0 23 3416 topology 3574 4559 > 16 0 23 3416 topology 3610 4559 -> 15 0 23 3416 topology 3425 4560 +> 15 0 23 3416 topology 3578 4560 > 16 0 23 3416 topology 3610 4560 -> 15 0 24 3416 topology 3453 4561 -> 16 0 24 3416 topology 3454 4561 -> 15 0 24 3416 topology 3507 4562 -> 16 0 24 3416 topology 3508 4562 -> 15 0 23 3416 topology 3514 4563 +> 15 0 23 3416 topology 3577 4561 +> 16 0 23 3416 topology 3610 4561 +> 15 0 23 3416 topology 3581 4562 +> 16 0 23 3416 topology 3610 4562 +> 15 0 23 3416 topology 3580 4563 > 16 0 23 3416 topology 3610 4563 -> 15 0 23 3416 topology 3544 4564 +> 15 0 23 3416 topology 3584 4564 > 16 0 23 3416 topology 3610 4564 -> 15 0 24 3416 topology 3429 4565 -> 16 0 24 3416 topology 3430 4565 -> 15 0 24 3416 topology 3456 4566 -> 16 0 24 3416 topology 3457 4566 -> 15 0 23 3416 topology 3466 4567 +> 15 0 23 3416 topology 3583 4565 +> 16 0 23 3416 topology 3610 4565 +> 15 0 23 3416 topology 3587 4566 +> 16 0 23 3416 topology 3610 4566 +> 15 0 23 3416 topology 3586 4567 > 16 0 23 3416 topology 3610 4567 -> 15 0 24 3416 topology 3510 4568 -> 16 0 24 3416 topology 3511 4568 -> 15 0 24 3416 topology 3564 4569 -> 16 0 24 3416 topology 3565 4569 -> 15 0 23 3416 topology 3574 4570 +> 15 0 23 3416 topology 3590 4568 +> 16 0 23 3416 topology 3610 4568 +> 15 0 23 3416 topology 3589 4569 +> 16 0 23 3416 topology 3610 4569 +> 15 0 23 3416 topology 3593 4570 > 16 0 23 3416 topology 3610 4570 -> 15 0 23 3416 topology 3496 4571 +> 15 0 23 3416 topology 3592 4571 > 16 0 23 3416 topology 3610 4571 -> 15 0 23 3416 topology 3604 4572 +> 15 0 23 3416 topology 3431 4572 > 16 0 23 3416 topology 3610 4572 -> 15 0 23 3416 topology 3437 4573 +> 15 0 23 3416 topology 3430 4573 > 16 0 23 3416 topology 3610 4573 -> 15 0 24 3416 topology 3459 4574 -> 16 0 24 3416 topology 3460 4574 -> 15 0 24 3416 topology 3513 4575 -> 16 0 24 3416 topology 3514 4575 -> 15 0 23 3416 topology 3526 4576 +> 15 0 23 3416 topology 3596 4574 +> 16 0 23 3416 topology 3610 4574 +> 15 0 23 3416 topology 3595 4575 +> 16 0 23 3416 topology 3610 4575 +> 15 0 23 3416 topology 3599 4576 > 16 0 23 3416 topology 3610 4576 -> 15 0 24 3416 topology 3567 4577 -> 16 0 24 3416 topology 3568 4577 -> 15 0 23 3416 topology 3556 4578 +> 15 0 23 3416 topology 3598 4577 +> 16 0 23 3416 topology 3610 4577 +> 15 0 23 3416 topology 3602 4578 > 16 0 23 3416 topology 3610 4578 -> 15 0 24 3416 topology 3462 4579 -> 16 0 24 3416 topology 3463 4579 -> 15 0 24 3416 topology 3516 4580 -> 16 0 24 3416 topology 3517 4580 -> 15 0 24 3416 topology 3570 4581 -> 16 0 24 3416 topology 3571 4581 -> 15 0 23 3416 topology 3586 4582 +> 15 0 23 3416 topology 3601 4579 +> 16 0 23 3416 topology 3610 4579 +> 15 0 23 3416 topology 3605 4580 +> 16 0 23 3416 topology 3610 4580 +> 15 0 23 3416 topology 3604 4581 +> 16 0 23 3416 topology 3610 4581 +> 15 0 23 3416 topology 3608 4582 > 16 0 23 3416 topology 3610 4582 -> 15 0 24 3416 topology 3465 4583 -> 16 0 24 3416 topology 3466 4583 -> 15 0 24 3416 topology 3519 4584 -> 16 0 24 3416 topology 3520 4584 -> 15 0 24 3416 topology 3573 4585 -> 16 0 24 3416 topology 3574 4585 -> 15 0 24 3416 topology 3441 4586 -> 16 0 24 3416 topology 3442 4586 -> 15 0 24 3416 topology 3468 4587 -> 16 0 24 3416 topology 3469 4587 -> 15 0 24 3416 topology 3522 4588 -> 16 0 24 3416 topology 3523 4588 -> 15 0 24 3416 topology 3576 4589 -> 16 0 24 3416 topology 3577 4589 -> 15 0 24 3416 topology 3471 4590 -> 16 0 24 3416 topology 3472 4590 -> 15 0 24 3416 topology 3525 4591 -> 16 0 24 3416 topology 3526 4591 -> 15 0 24 3416 topology 3579 4592 -> 16 0 24 3416 topology 3580 4592 -> 15 0 24 3416 topology 3444 4593 -> 16 0 24 3416 topology 3446 4593 -> 15 0 23 3416 topology 3427 4594 -> 16 0 23 3416 topology 3610 4594 -> 15 0 24 3416 topology 3528 4595 -> 16 0 24 3416 topology 3529 4595 -> 15 0 24 3416 topology 3582 4596 -> 16 0 24 3416 topology 3583 4596 -> 15 0 24 3416 topology 3474 4597 -> 16 0 24 3416 topology 3476 4597 -> 15 0 23 3416 topology 3479 4598 -> 16 0 23 3416 topology 3610 4598 -> 15 0 24 3416 topology 3531 4599 -> 16 0 24 3416 topology 3532 4599 -> 15 0 24 3416 topology 3585 4600 -> 16 0 24 3416 topology 3586 4600 -> 15 0 24 3416 topology 3450 4601 -> 16 0 24 3416 topology 3452 4601 -> 15 0 23 3416 topology 3455 4602 -> 16 0 23 3416 topology 3610 4602 -> 15 0 24 3416 topology 3504 4603 -> 16 0 24 3416 topology 3506 4603 -> 15 0 23 3416 topology 3439 4604 -> 16 0 23 3416 topology 3610 4604 -> 15 0 23 3416 topology 3539 4605 -> 16 0 23 3416 topology 3610 4605 -> 15 0 24 3416 topology 3588 4606 -> 16 0 24 3416 topology 3589 4606 -> 15 0 24 3416 topology 3426 4607 -> 16 0 24 3416 topology 3428 4607 -> 15 0 24 3416 topology 3480 4608 -> 16 0 24 3416 topology 3482 4608 -> 15 0 23 3416 topology 3515 4609 -> 16 0 23 3416 topology 3610 4609 -> 15 0 24 3416 topology 3534 4610 -> 16 0 24 3416 topology 3536 4610 -> 15 0 23 3416 topology 3491 4611 -> 16 0 23 3416 topology 3610 4611 -> 15 0 24 3416 topology 3591 4612 -> 16 0 24 3416 topology 3592 4612 -> 15 0 23 3416 topology 3599 4613 -> 16 0 23 3416 topology 3610 4613 -> 15 0 24 3416 topology 3456 4614 -> 16 0 24 3416 topology 3458 4614 -> 15 0 23 3416 topology 3467 4615 -> 16 0 23 3416 topology 3610 4615 -> 15 0 24 3416 topology 3510 4616 -> 16 0 24 3416 topology 3512 4616 -> 15 0 24 3416 topology 3564 4617 -> 16 0 24 3416 topology 3566 4617 -> 15 0 23 3416 topology 3575 4618 -> 16 0 23 3416 topology 3610 4618 -> 15 0 23 3416 topology 3551 4619 -> 16 0 23 3416 topology 3610 4619 -> 15 0 24 3416 topology 3486 4620 -> 16 0 24 3416 topology 3488 4620 -> 15 0 23 3416 topology 3527 4621 -> 16 0 23 3416 topology 3610 4621 -> 15 0 24 3416 topology 3540 4622 -> 16 0 24 3416 topology 3542 4622 -> 15 0 24 3416 topology 3594 4623 -> 16 0 24 3416 topology 3596 4623 -> 15 0 23 3416 topology 3503 4624 -> 16 0 23 3416 topology 3610 4624 -> 15 0 24 3416 topology 3462 4625 -> 16 0 24 3416 topology 3464 4625 -> 15 0 24 3416 topology 3516 4626 -> 16 0 24 3416 topology 3518 4626 -> 15 0 24 3416 topology 3570 4627 -> 16 0 24 3416 topology 3572 4627 -> 15 0 23 3416 topology 3587 4628 -> 16 0 23 3416 topology 3610 4628 -> 15 0 23 3416 topology 3563 4629 -> 16 0 23 3416 topology 3610 4629 -> 15 0 24 3416 topology 3438 4630 -> 16 0 24 3416 topology 3440 4630 -> 15 0 24 3416 topology 3492 4631 -> 16 0 24 3416 topology 3494 4631 -> 15 0 24 3416 topology 3546 4632 -> 16 0 24 3416 topology 3548 4632 -> 15 0 24 3416 topology 3600 4633 -> 16 0 24 3416 topology 3602 4633 -> 15 0 23 3416 topology 3451 4634 -> 16 0 23 3416 topology 3610 4634 -> 15 0 24 3416 topology 3468 4635 -> 16 0 24 3416 topology 3470 4635 -> 15 0 24 3416 topology 3522 4636 -> 16 0 24 3416 topology 3524 4636 -> 15 0 24 3416 topology 3576 4637 -> 16 0 24 3416 topology 3578 4637 -> 15 0 23 3416 topology 3481 4638 -> 16 0 23 3416 topology 3610 4638 -> 15 0 24 3416 topology 3498 4639 -> 16 0 24 3416 topology 3500 4639 -> 15 0 23 3416 topology 3511 4640 -> 16 0 23 3416 topology 3610 4640 -> 15 0 24 3416 topology 3552 4641 -> 16 0 24 3416 topology 3554 4641 -> 15 0 24 3416 topology 3606 4642 -> 16 0 24 3416 topology 3608 4642 -> 15 0 24 3416 topology 3426 4643 -> 16 0 24 3416 topology 3427 4643 -> 15 0 23 3416 topology 3541 4644 -> 16 0 23 3416 topology 3610 4644 -> 15 0 23 3416 topology 3428 4645 -> 16 0 23 3416 topology 3610 4645 -> 15 0 23 3416 topology 3463 4646 -> 16 0 23 3416 topology 3610 4646 -> 15 0 24 3416 topology 3528 4647 -> 16 0 24 3416 topology 3530 4647 -> 15 0 23 3416 topology 3571 4648 -> 16 0 23 3416 topology 3610 4648 -> 15 0 24 3416 topology 3582 4649 -> 16 0 24 3416 topology 3584 4649 -> 15 0 23 3416 topology 3493 4650 -> 16 0 23 3416 topology 3610 4650 -> 15 0 23 3416 topology 3601 4651 -> 16 0 23 3416 topology 3610 4651 -> 15 0 23 3416 topology 3523 4652 -> 16 0 23 3416 topology 3610 4652 -> 15 0 24 3416 topology 3558 4653 -> 16 0 24 3416 topology 3560 4653 -> 15 0 23 3416 topology 3553 4654 -> 16 0 23 3416 topology 3610 4654 -> 15 0 23 3416 topology 3440 4655 -> 16 0 23 3416 topology 3610 4655 -> 15 0 23 3416 topology 3583 4656 -> 16 0 23 3416 topology 3610 4656 -> 15 0 24 3416 topology 3588 4657 -> 16 0 24 3416 topology 3590 4657 -> 15 0 24 3416 topology 3438 4658 -> 16 0 24 3416 topology 3439 4658 -> 15 0 24 3416 topology 3417 4659 -> 16 0 24 3416 topology 3419 4659 -> 15 0 23 3416 topology 3424 4660 -> 16 0 23 3416 topology 3610 4660 -> 15 0 23 3416 topology 3446 4661 -> 16 0 23 3416 topology 3610 4661 -> 15 0 23 3416 topology 3506 4662 -> 16 0 23 3416 topology 3610 4662 -> 15 0 23 3416 topology 3436 4663 -> 16 0 23 3416 topology 3610 4663 -> 15 0 23 3416 topology 3482 4664 -> 16 0 23 3416 topology 3610 4664 -> 15 0 23 3416 topology 3458 4665 -> 16 0 23 3416 topology 3610 4665 -> 15 0 23 3416 topology 3566 4666 -> 16 0 23 3416 topology 3610 4666 -> 15 0 23 3416 topology 3542 4667 -> 16 0 23 3416 topology 3610 4667 -> 15 0 23 3416 topology 3518 4668 -> 16 0 23 3416 topology 3610 4668 -> 15 0 24 3416 topology 3429 4669 -> 16 0 24 3416 topology 3431 4669 -> 15 0 23 3416 topology 3494 4670 -> 16 0 23 3416 topology 3610 4670 -> 15 0 23 3416 topology 3602 4671 -> 16 0 23 3416 topology 3610 4671 -> 15 0 23 3416 topology 3470 4672 -> 16 0 23 3416 topology 3610 4672 -> 15 0 23 3416 topology 3578 4673 -> 16 0 23 3416 topology 3610 4673 -> 15 0 23 3416 topology 3554 4674 -> 16 0 23 3416 topology 3610 4674 -> 15 0 23 3416 topology 3530 4675 -> 16 0 23 3416 topology 3610 4675 -> 15 0 23 3416 topology 3590 4676 -> 16 0 23 3416 topology 3610 4676 -> 15 0 23 3416 topology 3448 4677 -> 16 0 23 3416 topology 3610 4677 -> 15 0 24 3416 topology 3474 4678 -> 16 0 24 3416 topology 3475 4678 -> 15 0 24 3416 topology 3441 4679 -> 16 0 24 3416 topology 3443 4679 -> 15 0 23 3416 topology 3478 4680 -> 16 0 23 3416 topology 3610 4680 -> 15 0 23 3416 topology 3419 4681 -> 16 0 23 3416 topology 3610 4681 -> 15 0 24 3416 topology 3423 4682 -> 16 0 24 3416 topology 3424 4682 -> 15 0 24 3416 topology 3477 4683 -> 16 0 24 3416 topology 3478 4683 -> 15 0 23 3416 topology 3508 4684 -> 16 0 23 3416 topology 3610 4684 -> 15 0 23 3416 topology 3538 4685 -> 16 0 23 3416 topology 3610 4685 -> 15 0 23 3416 topology 3460 4686 -> 16 0 23 3416 topology 3610 4686 -> 15 0 24 3416 topology 3480 4687 -> 16 0 24 3416 topology 3481 4687 -> 15 0 24 3416 topology 3534 4688 -> 16 0 24 3416 topology 3535 4688 -> 15 0 23 3416 topology 3568 4689 -> 16 0 23 3416 topology 3610 4689 -> 15 0 23 3416 topology 3490 4690 -> 16 0 23 3416 topology 3610 4690 -> 15 0 23 3416 topology 3598 4691 -> 16 0 23 3416 topology 3610 4691 -> 15 0 23 3416 topology 3431 4692 -> 16 0 23 3416 topology 3610 4692 -> 15 0 24 3416 topology 3483 4693 -> 16 0 24 3416 topology 3484 4693 -> 15 0 23 3416 topology 3520 4694 -> 16 0 23 3416 topology 3610 4694 -> 15 0 24 3416 topology 3537 4695 -> 16 0 24 3416 topology 3538 4695 -> 15 0 23 3416 topology 3550 4696 -> 16 0 23 3416 topology 3610 4696 -> 15 0 23 3416 topology 3472 4697 -> 16 0 23 3416 topology 3610 4697 -> 15 0 24 3416 topology 3486 4698 -> 16 0 24 3416 topology 3487 4698 -> 15 0 24 3416 topology 3540 4699 -> 16 0 24 3416 topology 3541 4699 -> 15 0 23 3416 topology 3580 4700 -> 16 0 23 3416 topology 3610 4700 -> 15 0 24 3416 topology 3594 4701 -> 16 0 24 3416 topology 3595 4701 -> 15 0 23 3416 topology 3502 4702 -> 16 0 23 3416 topology 3610 4702 -> 15 0 24 3416 topology 3435 4703 -> 16 0 24 3416 topology 3436 4703 -> 15 0 23 3416 topology 3443 4704 -> 16 0 23 3416 topology 3610 4704 -> 15 0 24 3416 topology 3489 4705 -> 16 0 24 3416 topology 3490 4705 -> 15 0 23 3416 topology 3532 4706 -> 16 0 23 3416 topology 3610 4706 -> 15 0 24 3416 topology 3543 4707 -> 16 0 24 3416 topology 3544 4707 -> 15 0 24 3416 topology 3597 4708 -> 16 0 24 3416 topology 3598 4708 -> 15 0 23 3416 topology 3562 4709 -> 16 0 23 3416 topology 3610 4709 -> 15 0 24 3416 topology 3492 4710 -> 16 0 24 3416 topology 3493 4710 -> 15 0 24 3416 topology 3546 4711 -> 16 0 24 3416 topology 3547 4711 -> 15 0 23 3416 topology 3592 4712 -> 16 0 23 3416 topology 3610 4712 -> 15 0 24 3416 topology 3600 4713 -> 16 0 24 3416 topology 3601 4713 -> 15 0 24 3416 topology 3495 4714 -> 16 0 24 3416 topology 3496 4714 -> 15 0 24 3416 topology 3549 4715 -> 16 0 24 3416 topology 3550 4715 -> 15 0 24 3416 topology 3603 4716 -> 16 0 24 3416 topology 3604 4716 -> 15 0 23 3416 topology 3421 4717 -> 16 0 23 3416 topology 3610 4717 -> 15 0 24 3416 topology 3498 4718 -> 16 0 24 3416 topology 3499 4718 -> 15 0 24 3416 topology 3552 4719 -> 16 0 24 3416 topology 3553 4719 -> 15 0 24 3416 topology 3606 4720 -> 16 0 24 3416 topology 3607 4720 -> 15 0 24 3612 topology 3664 4721 -> 16 0 24 3612 topology 3666 4721 -> 15 0 23 3612 topology 3674 4722 +> 15 0 23 3416 topology 3607 4583 +> 16 0 23 3416 topology 3610 4583 +> 15 0 23 3416 topology 3434 4584 +> 16 0 23 3416 topology 3610 4584 +> 15 0 23 3416 topology 3433 4585 +> 16 0 23 3416 topology 3610 4585 +> 15 0 23 3416 topology 3437 4586 +> 16 0 23 3416 topology 3610 4586 +> 15 0 23 3416 topology 3436 4587 +> 16 0 23 3416 topology 3610 4587 +> 15 0 23 3416 topology 3440 4588 +> 16 0 23 3416 topology 3610 4588 +> 15 0 23 3416 topology 3439 4589 +> 16 0 23 3416 topology 3610 4589 +> 15 0 23 3416 topology 3443 4590 +> 16 0 23 3416 topology 3610 4590 +> 15 0 23 3416 topology 3442 4591 +> 16 0 23 3416 topology 3610 4591 +> 15 0 24 3416 topology 3609 4592 +> 16 0 24 3416 topology 3610 4592 +> 15 0 25 3416 topology 3444 4593 +> 16 0 25 3416 topology 3446 4593 +> 15 0 25 3416 topology 3444 4594 +> 16 0 25 3416 topology 3445 4594 +> 15 0 25 3416 topology 3447 4595 +> 16 0 25 3416 topology 3449 4595 +> 15 0 25 3416 topology 3447 4596 +> 16 0 25 3416 topology 3448 4596 +> 15 0 25 3416 topology 3450 4597 +> 16 0 25 3416 topology 3452 4597 +> 15 0 25 3416 topology 3450 4598 +> 16 0 25 3416 topology 3451 4598 +> 15 0 25 3416 topology 3453 4599 +> 16 0 25 3416 topology 3455 4599 +> 15 0 25 3416 topology 3453 4600 +> 16 0 25 3416 topology 3454 4600 +> 15 0 25 3416 topology 3456 4601 +> 16 0 25 3416 topology 3458 4601 +> 15 0 25 3416 topology 3456 4602 +> 16 0 25 3416 topology 3457 4602 +> 15 0 25 3416 topology 3459 4603 +> 16 0 25 3416 topology 3461 4603 +> 15 0 25 3416 topology 3459 4604 +> 16 0 25 3416 topology 3460 4604 +> 15 0 25 3416 topology 3462 4605 +> 16 0 25 3416 topology 3464 4605 +> 15 0 25 3416 topology 3462 4606 +> 16 0 25 3416 topology 3463 4606 +> 15 0 25 3416 topology 3465 4607 +> 16 0 25 3416 topology 3467 4607 +> 15 0 25 3416 topology 3465 4608 +> 16 0 25 3416 topology 3466 4608 +> 15 0 25 3416 topology 3468 4609 +> 16 0 25 3416 topology 3470 4609 +> 15 0 25 3416 topology 3468 4610 +> 16 0 25 3416 topology 3469 4610 +> 15 0 25 3416 topology 3471 4611 +> 16 0 25 3416 topology 3473 4611 +> 15 0 25 3416 topology 3471 4612 +> 16 0 25 3416 topology 3472 4612 +> 15 0 25 3416 topology 3417 4613 +> 16 0 25 3416 topology 3419 4613 +> 15 0 25 3416 topology 3417 4614 +> 16 0 25 3416 topology 3418 4614 +> 15 0 25 3416 topology 3474 4615 +> 16 0 25 3416 topology 3476 4615 +> 15 0 25 3416 topology 3474 4616 +> 16 0 25 3416 topology 3475 4616 +> 15 0 25 3416 topology 3477 4617 +> 16 0 25 3416 topology 3479 4617 +> 15 0 25 3416 topology 3477 4618 +> 16 0 25 3416 topology 3478 4618 +> 15 0 25 3416 topology 3480 4619 +> 16 0 25 3416 topology 3482 4619 +> 15 0 25 3416 topology 3480 4620 +> 16 0 25 3416 topology 3481 4620 +> 15 0 25 3416 topology 3483 4621 +> 16 0 25 3416 topology 3485 4621 +> 15 0 25 3416 topology 3483 4622 +> 16 0 25 3416 topology 3484 4622 +> 15 0 25 3416 topology 3486 4623 +> 16 0 25 3416 topology 3488 4623 +> 15 0 25 3416 topology 3486 4624 +> 16 0 25 3416 topology 3487 4624 +> 15 0 25 3416 topology 3489 4625 +> 16 0 25 3416 topology 3491 4625 +> 15 0 25 3416 topology 3489 4626 +> 16 0 25 3416 topology 3490 4626 +> 15 0 25 3416 topology 3492 4627 +> 16 0 25 3416 topology 3494 4627 +> 15 0 25 3416 topology 3492 4628 +> 16 0 25 3416 topology 3493 4628 +> 15 0 25 3416 topology 3495 4629 +> 16 0 25 3416 topology 3497 4629 +> 15 0 25 3416 topology 3495 4630 +> 16 0 25 3416 topology 3496 4630 +> 15 0 25 3416 topology 3498 4631 +> 16 0 25 3416 topology 3500 4631 +> 15 0 25 3416 topology 3498 4632 +> 16 0 25 3416 topology 3499 4632 +> 15 0 25 3416 topology 3501 4633 +> 16 0 25 3416 topology 3503 4633 +> 15 0 25 3416 topology 3501 4634 +> 16 0 25 3416 topology 3502 4634 +> 15 0 25 3416 topology 3420 4635 +> 16 0 25 3416 topology 3422 4635 +> 15 0 25 3416 topology 3420 4636 +> 16 0 25 3416 topology 3421 4636 +> 15 0 25 3416 topology 3504 4637 +> 16 0 25 3416 topology 3506 4637 +> 15 0 25 3416 topology 3504 4638 +> 16 0 25 3416 topology 3505 4638 +> 15 0 25 3416 topology 3507 4639 +> 16 0 25 3416 topology 3509 4639 +> 15 0 25 3416 topology 3507 4640 +> 16 0 25 3416 topology 3508 4640 +> 15 0 25 3416 topology 3510 4641 +> 16 0 25 3416 topology 3512 4641 +> 15 0 25 3416 topology 3510 4642 +> 16 0 25 3416 topology 3511 4642 +> 15 0 25 3416 topology 3513 4643 +> 16 0 25 3416 topology 3515 4643 +> 15 0 25 3416 topology 3513 4644 +> 16 0 25 3416 topology 3514 4644 +> 15 0 25 3416 topology 3516 4645 +> 16 0 25 3416 topology 3518 4645 +> 15 0 25 3416 topology 3516 4646 +> 16 0 25 3416 topology 3517 4646 +> 15 0 25 3416 topology 3519 4647 +> 16 0 25 3416 topology 3521 4647 +> 15 0 25 3416 topology 3519 4648 +> 16 0 25 3416 topology 3520 4648 +> 15 0 25 3416 topology 3522 4649 +> 16 0 25 3416 topology 3524 4649 +> 15 0 25 3416 topology 3522 4650 +> 16 0 25 3416 topology 3523 4650 +> 15 0 25 3416 topology 3525 4651 +> 16 0 25 3416 topology 3527 4651 +> 15 0 25 3416 topology 3525 4652 +> 16 0 25 3416 topology 3526 4652 +> 15 0 25 3416 topology 3528 4653 +> 16 0 25 3416 topology 3530 4653 +> 15 0 25 3416 topology 3528 4654 +> 16 0 25 3416 topology 3529 4654 +> 15 0 25 3416 topology 3531 4655 +> 16 0 25 3416 topology 3533 4655 +> 15 0 25 3416 topology 3531 4656 +> 16 0 25 3416 topology 3532 4656 +> 15 0 25 3416 topology 3423 4657 +> 16 0 25 3416 topology 3425 4657 +> 15 0 25 3416 topology 3423 4658 +> 16 0 25 3416 topology 3424 4658 +> 15 0 25 3416 topology 3534 4659 +> 16 0 25 3416 topology 3536 4659 +> 15 0 25 3416 topology 3534 4660 +> 16 0 25 3416 topology 3535 4660 +> 15 0 25 3416 topology 3537 4661 +> 16 0 25 3416 topology 3539 4661 +> 15 0 25 3416 topology 3537 4662 +> 16 0 25 3416 topology 3538 4662 +> 15 0 25 3416 topology 3540 4663 +> 16 0 25 3416 topology 3542 4663 +> 15 0 25 3416 topology 3540 4664 +> 16 0 25 3416 topology 3541 4664 +> 15 0 25 3416 topology 3543 4665 +> 16 0 25 3416 topology 3545 4665 +> 15 0 25 3416 topology 3543 4666 +> 16 0 25 3416 topology 3544 4666 +> 15 0 25 3416 topology 3546 4667 +> 16 0 25 3416 topology 3548 4667 +> 15 0 25 3416 topology 3546 4668 +> 16 0 25 3416 topology 3547 4668 +> 15 0 25 3416 topology 3549 4669 +> 16 0 25 3416 topology 3551 4669 +> 15 0 25 3416 topology 3549 4670 +> 16 0 25 3416 topology 3550 4670 +> 15 0 25 3416 topology 3552 4671 +> 16 0 25 3416 topology 3554 4671 +> 15 0 25 3416 topology 3552 4672 +> 16 0 25 3416 topology 3553 4672 +> 15 0 25 3416 topology 3555 4673 +> 16 0 25 3416 topology 3557 4673 +> 15 0 25 3416 topology 3555 4674 +> 16 0 25 3416 topology 3556 4674 +> 15 0 25 3416 topology 3558 4675 +> 16 0 25 3416 topology 3560 4675 +> 15 0 25 3416 topology 3558 4676 +> 16 0 25 3416 topology 3559 4676 +> 15 0 25 3416 topology 3561 4677 +> 16 0 25 3416 topology 3563 4677 +> 15 0 25 3416 topology 3561 4678 +> 16 0 25 3416 topology 3562 4678 +> 15 0 25 3416 topology 3426 4679 +> 16 0 25 3416 topology 3428 4679 +> 15 0 25 3416 topology 3426 4680 +> 16 0 25 3416 topology 3427 4680 +> 15 0 25 3416 topology 3564 4681 +> 16 0 25 3416 topology 3566 4681 +> 15 0 25 3416 topology 3564 4682 +> 16 0 25 3416 topology 3565 4682 +> 15 0 25 3416 topology 3567 4683 +> 16 0 25 3416 topology 3569 4683 +> 15 0 25 3416 topology 3567 4684 +> 16 0 25 3416 topology 3568 4684 +> 15 0 25 3416 topology 3570 4685 +> 16 0 25 3416 topology 3572 4685 +> 15 0 25 3416 topology 3570 4686 +> 16 0 25 3416 topology 3571 4686 +> 15 0 25 3416 topology 3573 4687 +> 16 0 25 3416 topology 3575 4687 +> 15 0 25 3416 topology 3573 4688 +> 16 0 25 3416 topology 3574 4688 +> 15 0 25 3416 topology 3576 4689 +> 16 0 25 3416 topology 3578 4689 +> 15 0 25 3416 topology 3576 4690 +> 16 0 25 3416 topology 3577 4690 +> 15 0 25 3416 topology 3579 4691 +> 16 0 25 3416 topology 3581 4691 +> 15 0 25 3416 topology 3579 4692 +> 16 0 25 3416 topology 3580 4692 +> 15 0 25 3416 topology 3582 4693 +> 16 0 25 3416 topology 3584 4693 +> 15 0 25 3416 topology 3582 4694 +> 16 0 25 3416 topology 3583 4694 +> 15 0 25 3416 topology 3585 4695 +> 16 0 25 3416 topology 3587 4695 +> 15 0 25 3416 topology 3585 4696 +> 16 0 25 3416 topology 3586 4696 +> 15 0 25 3416 topology 3588 4697 +> 16 0 25 3416 topology 3590 4697 +> 15 0 25 3416 topology 3588 4698 +> 16 0 25 3416 topology 3589 4698 +> 15 0 25 3416 topology 3591 4699 +> 16 0 25 3416 topology 3593 4699 +> 15 0 25 3416 topology 3591 4700 +> 16 0 25 3416 topology 3592 4700 +> 15 0 25 3416 topology 3429 4701 +> 16 0 25 3416 topology 3431 4701 +> 15 0 25 3416 topology 3429 4702 +> 16 0 25 3416 topology 3430 4702 +> 15 0 25 3416 topology 3594 4703 +> 16 0 25 3416 topology 3596 4703 +> 15 0 25 3416 topology 3594 4704 +> 16 0 25 3416 topology 3595 4704 +> 15 0 25 3416 topology 3597 4705 +> 16 0 25 3416 topology 3599 4705 +> 15 0 25 3416 topology 3597 4706 +> 16 0 25 3416 topology 3598 4706 +> 15 0 25 3416 topology 3600 4707 +> 16 0 25 3416 topology 3602 4707 +> 15 0 25 3416 topology 3600 4708 +> 16 0 25 3416 topology 3601 4708 +> 15 0 25 3416 topology 3603 4709 +> 16 0 25 3416 topology 3605 4709 +> 15 0 25 3416 topology 3603 4710 +> 16 0 25 3416 topology 3604 4710 +> 15 0 25 3416 topology 3606 4711 +> 16 0 25 3416 topology 3608 4711 +> 15 0 25 3416 topology 3606 4712 +> 16 0 25 3416 topology 3607 4712 +> 15 0 25 3416 topology 3432 4713 +> 16 0 25 3416 topology 3434 4713 +> 15 0 25 3416 topology 3432 4714 +> 16 0 25 3416 topology 3433 4714 +> 15 0 25 3416 topology 3435 4715 +> 16 0 25 3416 topology 3437 4715 +> 15 0 25 3416 topology 3435 4716 +> 16 0 25 3416 topology 3436 4716 +> 15 0 25 3416 topology 3438 4717 +> 16 0 25 3416 topology 3440 4717 +> 15 0 25 3416 topology 3438 4718 +> 16 0 25 3416 topology 3439 4718 +> 15 0 25 3416 topology 3441 4719 +> 16 0 25 3416 topology 3443 4719 +> 15 0 25 3416 topology 3441 4720 +> 16 0 25 3416 topology 3442 4720 +> 15 0 23 3612 topology 3642 4721 +> 16 0 23 3612 topology 3713 4721 +> 15 0 23 3612 topology 3641 4722 > 16 0 23 3612 topology 3713 4722 -> 15 0 23 3612 topology 3615 4723 +> 15 0 23 3612 topology 3645 4723 > 16 0 23 3612 topology 3713 4723 -> 15 0 24 3612 topology 3619 4724 -> 16 0 24 3612 topology 3620 4724 -> 15 0 24 3612 topology 3673 4725 -> 16 0 24 3612 topology 3674 4725 -> 15 0 23 3612 topology 3704 4726 +> 15 0 23 3612 topology 3644 4724 +> 16 0 23 3612 topology 3713 4724 +> 15 0 23 3612 topology 3648 4725 +> 16 0 23 3612 topology 3713 4725 +> 15 0 23 3612 topology 3647 4726 > 16 0 23 3612 topology 3713 4726 -> 15 0 24 3612 topology 3622 4727 -> 16 0 24 3612 topology 3623 4727 -> 15 0 23 3612 topology 3656 4728 +> 15 0 23 3612 topology 3651 4727 +> 16 0 23 3612 topology 3713 4727 +> 15 0 23 3612 topology 3650 4728 > 16 0 23 3612 topology 3713 4728 -> 15 0 23 3612 topology 3686 4729 +> 15 0 23 3612 topology 3654 4729 > 16 0 23 3612 topology 3713 4729 -> 15 0 24 3612 topology 3697 4730 -> 16 0 24 3612 topology 3699 4730 -> 15 0 24 3612 topology 3625 4731 -> 16 0 24 3612 topology 3626 4731 -> 15 0 23 3612 topology 3627 4732 +> 15 0 23 3612 topology 3653 4730 +> 16 0 23 3612 topology 3713 4730 +> 15 0 23 3612 topology 3657 4731 +> 16 0 23 3612 topology 3713 4731 +> 15 0 23 3612 topology 3656 4732 > 16 0 23 3612 topology 3713 4732 -> 15 0 24 3612 topology 3652 4733 -> 16 0 24 3612 topology 3653 4733 -> 15 0 24 3612 topology 3706 4734 -> 16 0 24 3612 topology 3707 4734 -> 15 0 24 3612 topology 3628 4735 -> 16 0 24 3612 topology 3629 4735 -> 15 0 23 3612 topology 3668 4736 +> 15 0 23 3612 topology 3660 4733 +> 16 0 23 3612 topology 3713 4733 +> 15 0 23 3612 topology 3659 4734 +> 16 0 23 3612 topology 3713 4734 +> 15 0 23 3612 topology 3663 4735 +> 16 0 23 3612 topology 3713 4735 +> 15 0 23 3612 topology 3662 4736 > 16 0 23 3612 topology 3713 4736 -> 15 0 23 3612 topology 3698 4737 +> 15 0 23 3612 topology 3666 4737 > 16 0 23 3612 topology 3713 4737 -> 15 0 24 3612 topology 3631 4738 -> 16 0 24 3612 topology 3632 4738 -> 15 0 23 3612 topology 3639 4739 +> 15 0 23 3612 topology 3665 4738 +> 16 0 23 3612 topology 3713 4738 +> 15 0 23 3612 topology 3669 4739 > 16 0 23 3612 topology 3713 4739 -> 15 0 24 3612 topology 3685 4740 -> 16 0 24 3612 topology 3686 4740 -> 15 0 24 3612 topology 3634 4741 -> 16 0 24 3612 topology 3635 4741 -> 15 0 24 3612 topology 3637 4742 -> 16 0 24 3612 topology 3638 4742 -> 15 0 24 3612 topology 3664 4743 -> 16 0 24 3612 topology 3665 4743 -> 15 0 23 3612 topology 3617 4744 +> 15 0 23 3612 topology 3668 4740 +> 16 0 23 3612 topology 3713 4740 +> 15 0 23 3612 topology 3615 4741 +> 16 0 23 3612 topology 3713 4741 +> 15 0 23 3612 topology 3614 4742 +> 16 0 23 3612 topology 3713 4742 +> 15 0 23 3612 topology 3672 4743 +> 16 0 23 3612 topology 3713 4743 +> 15 0 23 3612 topology 3671 4744 > 16 0 23 3612 topology 3713 4744 -> 15 0 24 3612 topology 3613 4745 -> 16 0 24 3612 topology 3615 4745 -> 15 0 24 3612 topology 3697 4746 -> 16 0 24 3612 topology 3698 4746 -> 15 0 23 3612 topology 3645 4747 +> 15 0 23 3612 topology 3675 4745 +> 16 0 23 3612 topology 3713 4745 +> 15 0 23 3612 topology 3674 4746 +> 16 0 23 3612 topology 3713 4746 +> 15 0 23 3612 topology 3678 4747 > 16 0 23 3612 topology 3713 4747 -> 15 0 24 3612 topology 3670 4748 -> 16 0 24 3612 topology 3672 4748 -> 15 0 23 3612 topology 3629 4749 +> 15 0 23 3612 topology 3677 4748 +> 16 0 23 3612 topology 3713 4748 +> 15 0 23 3612 topology 3681 4749 > 16 0 23 3612 topology 3713 4749 -> 15 0 24 3612 topology 3619 4750 -> 16 0 24 3612 topology 3621 4750 -> 15 0 23 3612 topology 3705 4751 +> 15 0 23 3612 topology 3680 4750 +> 16 0 23 3612 topology 3713 4750 +> 15 0 23 3612 topology 3684 4751 > 16 0 23 3612 topology 3713 4751 -> 15 0 23 3612 topology 3681 4752 +> 15 0 23 3612 topology 3683 4752 > 16 0 23 3612 topology 3713 4752 -> 15 0 24 3612 topology 3649 4753 -> 16 0 24 3612 topology 3651 4753 -> 15 0 23 3612 topology 3657 4754 +> 15 0 23 3612 topology 3687 4753 +> 16 0 23 3612 topology 3713 4753 +> 15 0 23 3612 topology 3686 4754 > 16 0 23 3612 topology 3713 4754 -> 15 0 24 3612 topology 3703 4755 -> 16 0 24 3612 topology 3705 4755 -> 15 0 24 3612 topology 3625 4756 -> 16 0 24 3612 topology 3627 4756 +> 15 0 23 3612 topology 3690 4755 +> 16 0 23 3612 topology 3713 4755 +> 15 0 23 3612 topology 3689 4756 +> 16 0 23 3612 topology 3713 4756 > 15 0 23 3612 topology 3693 4757 > 16 0 23 3612 topology 3713 4757 -> 15 0 23 3612 topology 3669 4758 +> 15 0 23 3612 topology 3692 4758 > 16 0 23 3612 topology 3713 4758 -> 15 0 24 3612 topology 3682 4759 -> 16 0 24 3612 topology 3684 4759 -> 15 0 24 3612 topology 3631 4760 -> 16 0 24 3612 topology 3633 4760 -> 15 0 23 3612 topology 3641 4761 +> 15 0 23 3612 topology 3696 4759 +> 16 0 23 3612 topology 3713 4759 +> 15 0 23 3612 topology 3695 4760 +> 16 0 23 3612 topology 3713 4760 +> 15 0 23 3612 topology 3699 4761 > 16 0 23 3612 topology 3713 4761 -> 15 0 24 3612 topology 3661 4762 -> 16 0 24 3612 topology 3663 4762 -> 15 0 24 3612 topology 3643 4763 -> 16 0 24 3612 topology 3644 4763 -> 15 0 23 3612 topology 3671 4764 +> 15 0 23 3612 topology 3698 4762 +> 16 0 23 3612 topology 3713 4762 +> 15 0 23 3612 topology 3618 4763 +> 16 0 23 3612 topology 3713 4763 +> 15 0 23 3612 topology 3617 4764 > 16 0 23 3612 topology 3713 4764 -> 15 0 24 3612 topology 3637 4765 -> 16 0 24 3612 topology 3639 4765 +> 15 0 23 3612 topology 3702 4765 +> 16 0 23 3612 topology 3713 4765 > 15 0 23 3612 topology 3701 4766 > 16 0 23 3612 topology 3713 4766 -> 15 0 23 3612 topology 3618 4767 +> 15 0 23 3612 topology 3705 4767 > 16 0 23 3612 topology 3713 4767 -> 15 0 23 3612 topology 3653 4768 +> 15 0 23 3612 topology 3704 4768 > 16 0 23 3612 topology 3713 4768 -> 15 0 24 3612 topology 3694 4769 -> 16 0 24 3612 topology 3696 4769 -> 15 0 24 3612 topology 3676 4770 -> 16 0 24 3612 topology 3677 4770 -> 15 0 23 3612 topology 3683 4771 +> 15 0 23 3612 topology 3708 4769 +> 16 0 23 3612 topology 3713 4769 +> 15 0 23 3612 topology 3707 4770 +> 16 0 23 3612 topology 3713 4770 +> 15 0 23 3612 topology 3711 4771 > 16 0 23 3612 topology 3713 4771 -> 15 0 23 3612 topology 3630 4772 +> 15 0 23 3612 topology 3710 4772 > 16 0 23 3612 topology 3713 4772 -> 15 0 23 3612 topology 3665 4773 +> 15 0 23 3612 topology 3621 4773 > 16 0 23 3612 topology 3713 4773 -> 15 0 24 3612 topology 3655 4774 -> 16 0 24 3612 topology 3656 4774 -> 15 0 23 3612 topology 3695 4775 +> 15 0 23 3612 topology 3620 4774 +> 16 0 23 3612 topology 3713 4774 +> 15 0 23 3612 topology 3624 4775 > 16 0 23 3612 topology 3713 4775 -> 15 0 24 3612 topology 3709 4776 -> 16 0 24 3612 topology 3710 4776 -> 15 0 25 3612 topology 3712 4777 -> 16 0 25 3612 topology 3713 4777 -> 15 0 24 3612 topology 3688 4778 -> 16 0 24 3612 topology 3689 4778 -> 15 0 23 3612 topology 3614 4779 +> 15 0 23 3612 topology 3623 4776 +> 16 0 23 3612 topology 3713 4776 +> 15 0 23 3612 topology 3627 4777 +> 16 0 23 3612 topology 3713 4777 +> 15 0 23 3612 topology 3626 4778 +> 16 0 23 3612 topology 3713 4778 +> 15 0 23 3612 topology 3630 4779 > 16 0 23 3612 topology 3713 4779 -> 15 0 24 3612 topology 3667 4780 -> 16 0 24 3612 topology 3668 4780 -> 15 0 23 3612 topology 3626 4781 +> 15 0 23 3612 topology 3629 4780 +> 16 0 23 3612 topology 3713 4780 +> 15 0 23 3612 topology 3633 4781 > 16 0 23 3612 topology 3713 4781 -> 15 0 23 3612 topology 3672 4782 +> 15 0 23 3612 topology 3632 4782 > 16 0 23 3612 topology 3713 4782 -> 15 0 23 3612 topology 3648 4783 +> 15 0 23 3612 topology 3636 4783 > 16 0 23 3612 topology 3713 4783 -> 15 0 24 3612 topology 3646 4784 -> 16 0 24 3612 topology 3648 4784 -> 15 0 24 3612 topology 3700 4785 -> 16 0 24 3612 topology 3702 4785 -> 15 0 23 3612 topology 3708 4786 +> 15 0 23 3612 topology 3635 4784 +> 16 0 23 3612 topology 3713 4784 +> 15 0 23 3612 topology 3639 4785 +> 16 0 23 3612 topology 3713 4785 +> 15 0 23 3612 topology 3638 4786 > 16 0 23 3612 topology 3713 4786 -> 15 0 23 3612 topology 3638 4787 -> 16 0 23 3612 topology 3713 4787 -> 15 0 23 3612 topology 3684 4788 -> 16 0 23 3612 topology 3713 4788 -> 15 0 23 3612 topology 3660 4789 -> 16 0 23 3612 topology 3713 4789 -> 15 0 24 3612 topology 3679 4790 -> 16 0 24 3612 topology 3681 4790 -> 15 0 23 3612 topology 3696 4791 -> 16 0 23 3612 topology 3713 4791 -> 15 0 24 3612 topology 3658 4792 -> 16 0 24 3612 topology 3660 4792 -> 15 0 24 3612 topology 3691 4793 -> 16 0 24 3612 topology 3693 4793 -> 15 0 24 3612 topology 3646 4794 -> 16 0 24 3612 topology 3647 4794 -> 15 0 23 3612 topology 3650 4795 -> 16 0 23 3612 topology 3713 4795 -> 15 0 24 3612 topology 3700 4796 -> 16 0 24 3612 topology 3701 4796 -> 15 0 23 3612 topology 3680 4797 -> 16 0 23 3612 topology 3713 4797 -> 15 0 23 3612 topology 3621 4798 -> 16 0 23 3612 topology 3713 4798 -> 15 0 23 3612 topology 3710 4799 -> 16 0 23 3612 topology 3713 4799 -> 15 0 23 3612 topology 3662 4800 -> 16 0 23 3612 topology 3713 4800 -> 15 0 24 3612 topology 3679 4801 -> 16 0 24 3612 topology 3680 4801 -> 15 0 23 3612 topology 3692 4802 -> 16 0 23 3612 topology 3713 4802 -> 15 0 23 3612 topology 3633 4803 -> 16 0 23 3612 topology 3713 4803 -> 15 0 24 3612 topology 3658 4804 -> 16 0 24 3612 topology 3659 4804 -> 15 0 24 3612 topology 3691 4805 -> 16 0 24 3612 topology 3692 4805 -> 15 0 23 3612 topology 3623 4806 -> 16 0 23 3612 topology 3713 4806 -> 15 0 24 3612 topology 3616 4807 -> 16 0 24 3612 topology 3618 4807 -> 15 0 24 3612 topology 3643 4808 -> 16 0 24 3612 topology 3645 4808 -> 15 0 23 3612 topology 3675 4809 -> 16 0 23 3612 topology 3713 4809 -> 15 0 23 3612 topology 3651 4810 -> 16 0 23 3612 topology 3713 4810 -> 15 0 23 3612 topology 3635 4811 -> 16 0 23 3612 topology 3713 4811 -> 15 0 24 3612 topology 3622 4812 -> 16 0 24 3612 topology 3624 4812 -> 15 0 24 3612 topology 3676 4813 -> 16 0 24 3612 topology 3678 4813 -> 15 0 23 3612 topology 3711 4814 -> 16 0 23 3612 topology 3713 4814 -> 15 0 23 3612 topology 3687 4815 -> 16 0 23 3612 topology 3713 4815 -> 15 0 23 3612 topology 3663 4816 -> 16 0 23 3612 topology 3713 4816 -> 15 0 24 3612 topology 3628 4817 -> 16 0 24 3612 topology 3630 4817 -> 15 0 24 3612 topology 3655 4818 -> 16 0 24 3612 topology 3657 4818 -> 15 0 24 3612 topology 3709 4819 -> 16 0 24 3612 topology 3711 4819 -> 15 0 23 3612 topology 3699 4820 -> 16 0 23 3612 topology 3713 4820 -> 15 0 24 3612 topology 3634 4821 -> 16 0 24 3612 topology 3636 4821 -> 15 0 24 3612 topology 3688 4822 -> 16 0 24 3612 topology 3690 4822 -> 15 0 24 3612 topology 3670 4823 -> 16 0 24 3612 topology 3671 4823 -> 15 0 23 3612 topology 3647 4824 -> 16 0 23 3612 topology 3713 4824 -> 15 0 23 3612 topology 3677 4825 -> 16 0 23 3612 topology 3713 4825 -> 15 0 24 3612 topology 3667 4826 -> 16 0 24 3612 topology 3669 4826 -> 15 0 23 3612 topology 3707 4827 -> 16 0 23 3612 topology 3713 4827 -> 15 0 24 3612 topology 3649 4828 -> 16 0 24 3612 topology 3650 4828 -> 15 0 24 3612 topology 3703 4829 -> 16 0 24 3612 topology 3704 4829 -> 15 0 23 3612 topology 3624 4830 -> 16 0 23 3612 topology 3713 4830 -> 15 0 23 3612 topology 3659 4831 -> 16 0 23 3612 topology 3713 4831 -> 15 0 23 3612 topology 3689 4832 -> 16 0 23 3612 topology 3713 4832 -> 15 0 24 3612 topology 3682 4833 -> 16 0 24 3612 topology 3683 4833 -> 15 0 23 3612 topology 3636 4834 -> 16 0 23 3612 topology 3713 4834 -> 15 0 24 3612 topology 3661 4835 -> 16 0 24 3612 topology 3662 4835 -> 15 0 24 3612 topology 3694 4836 -> 16 0 24 3612 topology 3695 4836 -> 15 0 23 3612 topology 3620 4837 -> 16 0 23 3612 topology 3713 4837 -> 15 0 24 3612 topology 3640 4838 -> 16 0 24 3612 topology 3642 4838 -> 15 0 23 3612 topology 3642 4839 -> 16 0 23 3612 topology 3713 4839 -> 15 0 23 3612 topology 3702 4840 -> 16 0 23 3612 topology 3713 4840 -> 15 0 23 3612 topology 3632 4841 -> 16 0 23 3612 topology 3713 4841 -> 15 0 24 3612 topology 3673 4842 -> 16 0 24 3612 topology 3675 4842 -> 15 0 23 3612 topology 3678 4843 -> 16 0 23 3612 topology 3713 4843 -> 15 0 23 3612 topology 3654 4844 -> 16 0 23 3612 topology 3713 4844 -> 15 0 24 3612 topology 3652 4845 -> 16 0 24 3612 topology 3654 4845 -> 15 0 23 3612 topology 3690 4846 -> 16 0 23 3612 topology 3713 4846 -> 15 0 24 3612 topology 3706 4847 -> 16 0 24 3612 topology 3708 4847 -> 15 0 23 3612 topology 3666 4848 -> 16 0 23 3612 topology 3713 4848 -> 15 0 24 3612 topology 3685 4849 -> 16 0 24 3612 topology 3687 4849 -> 15 0 24 3612 topology 3613 4850 -> 16 0 24 3612 topology 3614 4850 -> 15 0 24 3612 topology 3640 4851 -> 16 0 24 3612 topology 3641 4851 -> 15 0 24 3612 topology 3616 4852 -> 16 0 24 3612 topology 3617 4852 -> 15 0 23 3612 topology 3644 4853 -> 16 0 23 3612 topology 3713 4853 -> 15 0 23 3715 topology 3721 4854 +> 15 0 24 3612 topology 3712 4787 +> 16 0 24 3612 topology 3713 4787 +> 15 0 25 3612 topology 3640 4788 +> 16 0 25 3612 topology 3642 4788 +> 15 0 25 3612 topology 3640 4789 +> 16 0 25 3612 topology 3641 4789 +> 15 0 25 3612 topology 3643 4790 +> 16 0 25 3612 topology 3645 4790 +> 15 0 25 3612 topology 3643 4791 +> 16 0 25 3612 topology 3644 4791 +> 15 0 25 3612 topology 3646 4792 +> 16 0 25 3612 topology 3648 4792 +> 15 0 25 3612 topology 3646 4793 +> 16 0 25 3612 topology 3647 4793 +> 15 0 25 3612 topology 3649 4794 +> 16 0 25 3612 topology 3651 4794 +> 15 0 25 3612 topology 3649 4795 +> 16 0 25 3612 topology 3650 4795 +> 15 0 25 3612 topology 3652 4796 +> 16 0 25 3612 topology 3654 4796 +> 15 0 25 3612 topology 3652 4797 +> 16 0 25 3612 topology 3653 4797 +> 15 0 25 3612 topology 3655 4798 +> 16 0 25 3612 topology 3657 4798 +> 15 0 25 3612 topology 3655 4799 +> 16 0 25 3612 topology 3656 4799 +> 15 0 25 3612 topology 3658 4800 +> 16 0 25 3612 topology 3660 4800 +> 15 0 25 3612 topology 3658 4801 +> 16 0 25 3612 topology 3659 4801 +> 15 0 25 3612 topology 3661 4802 +> 16 0 25 3612 topology 3663 4802 +> 15 0 25 3612 topology 3661 4803 +> 16 0 25 3612 topology 3662 4803 +> 15 0 25 3612 topology 3664 4804 +> 16 0 25 3612 topology 3666 4804 +> 15 0 25 3612 topology 3664 4805 +> 16 0 25 3612 topology 3665 4805 +> 15 0 25 3612 topology 3667 4806 +> 16 0 25 3612 topology 3669 4806 +> 15 0 25 3612 topology 3667 4807 +> 16 0 25 3612 topology 3668 4807 +> 15 0 25 3612 topology 3613 4808 +> 16 0 25 3612 topology 3615 4808 +> 15 0 25 3612 topology 3613 4809 +> 16 0 25 3612 topology 3614 4809 +> 15 0 25 3612 topology 3670 4810 +> 16 0 25 3612 topology 3672 4810 +> 15 0 25 3612 topology 3670 4811 +> 16 0 25 3612 topology 3671 4811 +> 15 0 25 3612 topology 3673 4812 +> 16 0 25 3612 topology 3675 4812 +> 15 0 25 3612 topology 3673 4813 +> 16 0 25 3612 topology 3674 4813 +> 15 0 25 3612 topology 3676 4814 +> 16 0 25 3612 topology 3678 4814 +> 15 0 25 3612 topology 3676 4815 +> 16 0 25 3612 topology 3677 4815 +> 15 0 25 3612 topology 3679 4816 +> 16 0 25 3612 topology 3681 4816 +> 15 0 25 3612 topology 3679 4817 +> 16 0 25 3612 topology 3680 4817 +> 15 0 25 3612 topology 3682 4818 +> 16 0 25 3612 topology 3684 4818 +> 15 0 25 3612 topology 3682 4819 +> 16 0 25 3612 topology 3683 4819 +> 15 0 25 3612 topology 3685 4820 +> 16 0 25 3612 topology 3687 4820 +> 15 0 25 3612 topology 3685 4821 +> 16 0 25 3612 topology 3686 4821 +> 15 0 25 3612 topology 3688 4822 +> 16 0 25 3612 topology 3690 4822 +> 15 0 25 3612 topology 3688 4823 +> 16 0 25 3612 topology 3689 4823 +> 15 0 25 3612 topology 3691 4824 +> 16 0 25 3612 topology 3693 4824 +> 15 0 25 3612 topology 3691 4825 +> 16 0 25 3612 topology 3692 4825 +> 15 0 25 3612 topology 3694 4826 +> 16 0 25 3612 topology 3696 4826 +> 15 0 25 3612 topology 3694 4827 +> 16 0 25 3612 topology 3695 4827 +> 15 0 25 3612 topology 3697 4828 +> 16 0 25 3612 topology 3699 4828 +> 15 0 25 3612 topology 3697 4829 +> 16 0 25 3612 topology 3698 4829 +> 15 0 25 3612 topology 3616 4830 +> 16 0 25 3612 topology 3618 4830 +> 15 0 25 3612 topology 3616 4831 +> 16 0 25 3612 topology 3617 4831 +> 15 0 25 3612 topology 3700 4832 +> 16 0 25 3612 topology 3702 4832 +> 15 0 25 3612 topology 3700 4833 +> 16 0 25 3612 topology 3701 4833 +> 15 0 25 3612 topology 3703 4834 +> 16 0 25 3612 topology 3705 4834 +> 15 0 25 3612 topology 3703 4835 +> 16 0 25 3612 topology 3704 4835 +> 15 0 25 3612 topology 3706 4836 +> 16 0 25 3612 topology 3708 4836 +> 15 0 25 3612 topology 3706 4837 +> 16 0 25 3612 topology 3707 4837 +> 15 0 25 3612 topology 3709 4838 +> 16 0 25 3612 topology 3711 4838 +> 15 0 25 3612 topology 3709 4839 +> 16 0 25 3612 topology 3710 4839 +> 15 0 25 3612 topology 3619 4840 +> 16 0 25 3612 topology 3621 4840 +> 15 0 25 3612 topology 3619 4841 +> 16 0 25 3612 topology 3620 4841 +> 15 0 25 3612 topology 3622 4842 +> 16 0 25 3612 topology 3624 4842 +> 15 0 25 3612 topology 3622 4843 +> 16 0 25 3612 topology 3623 4843 +> 15 0 25 3612 topology 3625 4844 +> 16 0 25 3612 topology 3627 4844 +> 15 0 25 3612 topology 3625 4845 +> 16 0 25 3612 topology 3626 4845 +> 15 0 25 3612 topology 3628 4846 +> 16 0 25 3612 topology 3630 4846 +> 15 0 25 3612 topology 3628 4847 +> 16 0 25 3612 topology 3629 4847 +> 15 0 25 3612 topology 3631 4848 +> 16 0 25 3612 topology 3633 4848 +> 15 0 25 3612 topology 3631 4849 +> 16 0 25 3612 topology 3632 4849 +> 15 0 25 3612 topology 3634 4850 +> 16 0 25 3612 topology 3636 4850 +> 15 0 25 3612 topology 3634 4851 +> 16 0 25 3612 topology 3635 4851 +> 15 0 25 3612 topology 3637 4852 +> 16 0 25 3612 topology 3639 4852 +> 15 0 25 3612 topology 3637 4853 +> 16 0 25 3612 topology 3638 4853 +> 15 0 23 3715 topology 3745 4854 > 16 0 23 3715 topology 3792 4854 -> 15 0 24 3715 topology 3779 4855 -> 16 0 24 3715 topology 3780 4855 -> 15 0 23 3715 topology 3762 4856 +> 15 0 23 3715 topology 3744 4855 +> 16 0 23 3715 topology 3792 4855 +> 15 0 23 3715 topology 3748 4856 > 16 0 23 3715 topology 3792 4856 -> 15 0 24 3715 topology 3782 4857 -> 16 0 24 3715 topology 3783 4857 -> 15 0 23 3715 topology 3733 4858 +> 15 0 23 3715 topology 3747 4857 +> 16 0 23 3715 topology 3792 4857 +> 15 0 23 3715 topology 3751 4858 > 16 0 23 3715 topology 3792 4858 -> 15 0 24 3715 topology 3731 4859 -> 16 0 24 3715 topology 3732 4859 -> 15 0 24 3715 topology 3785 4860 -> 16 0 24 3715 topology 3786 4860 -> 15 0 24 3715 topology 3788 4861 -> 16 0 24 3715 topology 3789 4861 -> 15 0 23 3715 topology 3717 4862 +> 15 0 23 3715 topology 3750 4859 +> 16 0 23 3715 topology 3792 4859 +> 15 0 23 3715 topology 3754 4860 +> 16 0 23 3715 topology 3792 4860 +> 15 0 23 3715 topology 3753 4861 +> 16 0 23 3715 topology 3792 4861 +> 15 0 23 3715 topology 3757 4862 > 16 0 23 3715 topology 3792 4862 -> 15 0 24 3715 topology 3716 4863 -> 16 0 24 3715 topology 3718 4863 -> 15 0 24 3715 topology 3743 4864 -> 16 0 24 3715 topology 3745 4864 -> 15 0 23 3715 topology 3745 4865 +> 15 0 23 3715 topology 3756 4863 +> 16 0 23 3715 topology 3792 4863 +> 15 0 23 3715 topology 3760 4864 +> 16 0 23 3715 topology 3792 4864 +> 15 0 23 3715 topology 3759 4865 > 16 0 23 3715 topology 3792 4865 -> 15 0 23 3715 topology 3729 4866 +> 15 0 23 3715 topology 3763 4866 > 16 0 23 3715 topology 3792 4866 -> 15 0 24 3715 topology 3773 4867 -> 16 0 24 3715 topology 3775 4867 -> 15 0 24 3715 topology 3749 4868 -> 16 0 24 3715 topology 3751 4868 -> 15 0 23 3715 topology 3781 4869 +> 15 0 23 3715 topology 3762 4867 +> 16 0 23 3715 topology 3792 4867 +> 15 0 23 3715 topology 3766 4868 +> 16 0 23 3715 topology 3792 4868 +> 15 0 23 3715 topology 3765 4869 > 16 0 23 3715 topology 3792 4869 -> 15 0 23 3715 topology 3757 4870 +> 15 0 23 3715 topology 3769 4870 > 16 0 23 3715 topology 3792 4870 -> 15 0 23 3715 topology 3741 4871 +> 15 0 23 3715 topology 3768 4871 > 16 0 23 3715 topology 3792 4871 -> 15 0 24 3715 topology 3779 4872 -> 16 0 24 3715 topology 3781 4872 -> 15 0 24 3715 topology 3728 4873 -> 16 0 24 3715 topology 3730 4873 -> 15 0 24 3715 topology 3755 4874 -> 16 0 24 3715 topology 3757 4874 -> 15 0 23 3715 topology 3769 4875 +> 15 0 23 3715 topology 3772 4872 +> 16 0 23 3715 topology 3792 4872 +> 15 0 23 3715 topology 3771 4873 +> 16 0 23 3715 topology 3792 4873 +> 15 0 23 3715 topology 3718 4874 +> 16 0 23 3715 topology 3792 4874 +> 15 0 23 3715 topology 3717 4875 > 16 0 23 3715 topology 3792 4875 -> 15 0 24 3715 topology 3785 4876 -> 16 0 24 3715 topology 3787 4876 -> 15 0 24 3715 topology 3761 4877 -> 16 0 24 3715 topology 3763 4877 -> 15 0 24 3715 topology 3716 4878 -> 16 0 24 3715 topology 3717 4878 -> 15 0 23 3715 topology 3747 4879 +> 15 0 23 3715 topology 3775 4876 +> 16 0 23 3715 topology 3792 4876 +> 15 0 23 3715 topology 3774 4877 +> 16 0 23 3715 topology 3792 4877 +> 15 0 23 3715 topology 3778 4878 +> 16 0 23 3715 topology 3792 4878 +> 15 0 23 3715 topology 3777 4879 > 16 0 23 3715 topology 3792 4879 -> 15 0 24 3715 topology 3740 4880 -> 16 0 24 3715 topology 3742 4880 -> 15 0 24 3715 topology 3767 4881 -> 16 0 24 3715 topology 3769 4881 -> 15 0 23 3715 topology 3777 4882 +> 15 0 23 3715 topology 3781 4880 +> 16 0 23 3715 topology 3792 4880 +> 15 0 23 3715 topology 3780 4881 +> 16 0 23 3715 topology 3792 4881 +> 15 0 23 3715 topology 3784 4882 > 16 0 23 3715 topology 3792 4882 -> 15 0 23 3715 topology 3724 4883 +> 15 0 23 3715 topology 3783 4883 > 16 0 23 3715 topology 3792 4883 -> 15 0 23 3715 topology 3759 4884 +> 15 0 23 3715 topology 3787 4884 > 16 0 23 3715 topology 3792 4884 -> 15 0 23 3715 topology 3789 4885 +> 15 0 23 3715 topology 3786 4885 > 16 0 23 3715 topology 3792 4885 -> 15 0 24 3715 topology 3728 4886 -> 16 0 24 3715 topology 3729 4886 -> 15 0 23 3715 topology 3736 4887 +> 15 0 23 3715 topology 3790 4886 +> 16 0 23 3715 topology 3792 4886 +> 15 0 23 3715 topology 3789 4887 > 16 0 23 3715 topology 3792 4887 -> 15 0 23 3715 topology 3771 4888 +> 15 0 23 3715 topology 3721 4888 > 16 0 23 3715 topology 3792 4888 -> 15 0 24 3715 topology 3740 4889 -> 16 0 24 3715 topology 3741 4889 -> 15 0 23 3715 topology 3726 4890 +> 15 0 23 3715 topology 3720 4889 +> 16 0 23 3715 topology 3792 4889 +> 15 0 23 3715 topology 3724 4890 > 16 0 23 3715 topology 3792 4890 -> 15 0 24 3715 topology 3719 4891 -> 16 0 24 3715 topology 3721 4891 -> 15 0 23 3715 topology 3748 4892 +> 15 0 23 3715 topology 3723 4891 +> 16 0 23 3715 topology 3792 4891 +> 15 0 23 3715 topology 3727 4892 > 16 0 23 3715 topology 3792 4892 -> 15 0 23 3715 topology 3738 4893 +> 15 0 23 3715 topology 3726 4893 > 16 0 23 3715 topology 3792 4893 -> 15 0 23 3715 topology 3784 4894 +> 15 0 23 3715 topology 3730 4894 > 16 0 23 3715 topology 3792 4894 -> 15 0 23 3715 topology 3760 4895 +> 15 0 23 3715 topology 3729 4895 > 16 0 23 3715 topology 3792 4895 -> 15 0 24 3715 topology 3731 4896 -> 16 0 24 3715 topology 3733 4896 -> 15 0 23 3715 topology 3772 4897 +> 15 0 23 3715 topology 3733 4896 +> 16 0 23 3715 topology 3792 4896 +> 15 0 23 3715 topology 3732 4897 > 16 0 23 3715 topology 3792 4897 -> 15 0 24 3715 topology 3743 4898 -> 16 0 24 3715 topology 3744 4898 -> 15 0 23 3715 topology 3744 4899 +> 15 0 23 3715 topology 3736 4898 +> 16 0 23 3715 topology 3792 4898 +> 15 0 23 3715 topology 3735 4899 > 16 0 23 3715 topology 3792 4899 -> 15 0 24 3715 topology 3746 4900 -> 16 0 24 3715 topology 3747 4900 -> 15 0 23 3715 topology 3774 4901 +> 15 0 23 3715 topology 3739 4900 +> 16 0 23 3715 topology 3792 4900 +> 15 0 23 3715 topology 3738 4901 > 16 0 23 3715 topology 3792 4901 -> 15 0 24 3715 topology 3749 4902 -> 16 0 24 3715 topology 3750 4902 -> 15 0 23 3715 topology 3756 4903 +> 15 0 23 3715 topology 3742 4902 +> 16 0 23 3715 topology 3792 4902 +> 15 0 23 3715 topology 3741 4903 > 16 0 23 3715 topology 3792 4903 -> 15 0 24 3715 topology 3725 4904 -> 16 0 24 3715 topology 3726 4904 -> 15 0 24 3715 topology 3752 4905 -> 16 0 24 3715 topology 3753 4905 -> 15 0 23 3715 topology 3786 4906 -> 16 0 23 3715 topology 3792 4906 -> 15 0 23 3715 topology 3727 4907 -> 16 0 23 3715 topology 3792 4907 -> 15 0 24 3715 topology 3755 4908 -> 16 0 24 3715 topology 3756 4908 -> 15 0 23 3715 topology 3768 4909 -> 16 0 23 3715 topology 3792 4909 -> 15 0 24 3715 topology 3758 4910 -> 16 0 24 3715 topology 3759 4910 -> 15 0 23 3715 topology 3739 4911 -> 16 0 23 3715 topology 3792 4911 -> 15 0 24 3715 topology 3761 4912 -> 16 0 24 3715 topology 3762 4912 -> 15 0 24 3715 topology 3737 4913 -> 16 0 24 3715 topology 3738 4913 -> 15 0 24 3715 topology 3764 4914 -> 16 0 24 3715 topology 3765 4914 -> 15 0 24 3715 topology 3767 4915 -> 16 0 24 3715 topology 3768 4915 -> 15 0 24 3715 topology 3770 4916 -> 16 0 24 3715 topology 3771 4916 -> 15 0 23 3715 topology 3723 4917 -> 16 0 23 3715 topology 3792 4917 -> 15 0 24 3715 topology 3746 4918 -> 16 0 24 3715 topology 3748 4918 -> 15 0 23 3715 topology 3775 4919 -> 16 0 23 3715 topology 3792 4919 -> 15 0 23 3715 topology 3751 4920 -> 16 0 23 3715 topology 3792 4920 -> 15 0 24 3715 topology 3722 4921 -> 16 0 24 3715 topology 3724 4921 -> 15 0 23 3715 topology 3735 4922 -> 16 0 23 3715 topology 3792 4922 -> 15 0 24 3715 topology 3776 4923 -> 16 0 24 3715 topology 3778 4923 -> 15 0 24 3715 topology 3752 4924 -> 16 0 24 3715 topology 3754 4924 -> 15 0 23 3715 topology 3787 4925 -> 16 0 23 3715 topology 3792 4925 -> 15 0 23 3715 topology 3763 4926 -> 16 0 23 3715 topology 3792 4926 -> 15 0 25 3715 topology 3791 4927 -> 16 0 25 3715 topology 3792 4927 -> 15 0 24 3715 topology 3782 4928 -> 16 0 24 3715 topology 3784 4928 -> 15 0 24 3715 topology 3758 4929 -> 16 0 24 3715 topology 3760 4929 -> 15 0 24 3715 topology 3734 4930 -> 16 0 24 3715 topology 3736 4930 -> 15 0 24 3715 topology 3788 4931 -> 16 0 24 3715 topology 3790 4931 -> 15 0 24 3715 topology 3764 4932 -> 16 0 24 3715 topology 3766 4932 -> 15 0 23 3715 topology 3718 4933 -> 16 0 23 3715 topology 3792 4933 -> 15 0 24 3715 topology 3722 4934 -> 16 0 24 3715 topology 3723 4934 -> 15 0 23 3715 topology 3753 4935 -> 16 0 23 3715 topology 3792 4935 -> 15 0 24 3715 topology 3770 4936 -> 16 0 24 3715 topology 3772 4936 -> 15 0 23 3715 topology 3783 4937 -> 16 0 23 3715 topology 3792 4937 -> 15 0 23 3715 topology 3730 4938 -> 16 0 23 3715 topology 3792 4938 -> 15 0 23 3715 topology 3765 4939 -> 16 0 23 3715 topology 3792 4939 -> 15 0 24 3715 topology 3734 4940 -> 16 0 24 3715 topology 3735 4940 -> 15 0 23 3715 topology 3742 4941 -> 16 0 23 3715 topology 3792 4941 -> 15 0 23 3715 topology 3720 4942 -> 16 0 23 3715 topology 3792 4942 -> 15 0 23 3715 topology 3732 4943 -> 16 0 23 3715 topology 3792 4943 -> 15 0 23 3715 topology 3778 4944 -> 16 0 23 3715 topology 3792 4944 -> 15 0 23 3715 topology 3754 4945 -> 16 0 23 3715 topology 3792 4945 -> 15 0 24 3715 topology 3725 4946 -> 16 0 24 3715 topology 3727 4946 -> 15 0 23 3715 topology 3790 4947 -> 16 0 23 3715 topology 3792 4947 -> 15 0 23 3715 topology 3766 4948 -> 16 0 23 3715 topology 3792 4948 -> 15 0 24 3715 topology 3737 4949 -> 16 0 24 3715 topology 3739 4949 -> 15 0 24 3715 topology 3719 4950 -> 16 0 24 3715 topology 3720 4950 -> 15 0 24 3715 topology 3773 4951 -> 16 0 24 3715 topology 3774 4951 -> 15 0 23 3715 topology 3750 4952 -> 16 0 23 3715 topology 3792 4952 -> 15 0 24 3715 topology 3776 4953 -> 16 0 24 3715 topology 3777 4953 -> 15 0 23 3715 topology 3780 4954 -> 16 0 23 3715 topology 3792 4954 -> 15 0 23 3794 topology 3907 4955 +> 15 0 24 3715 topology 3791 4904 +> 16 0 24 3715 topology 3792 4904 +> 15 0 25 3715 topology 3743 4905 +> 16 0 25 3715 topology 3745 4905 +> 15 0 25 3715 topology 3743 4906 +> 16 0 25 3715 topology 3744 4906 +> 15 0 25 3715 topology 3746 4907 +> 16 0 25 3715 topology 3748 4907 +> 15 0 25 3715 topology 3746 4908 +> 16 0 25 3715 topology 3747 4908 +> 15 0 25 3715 topology 3749 4909 +> 16 0 25 3715 topology 3751 4909 +> 15 0 25 3715 topology 3749 4910 +> 16 0 25 3715 topology 3750 4910 +> 15 0 25 3715 topology 3752 4911 +> 16 0 25 3715 topology 3754 4911 +> 15 0 25 3715 topology 3752 4912 +> 16 0 25 3715 topology 3753 4912 +> 15 0 25 3715 topology 3755 4913 +> 16 0 25 3715 topology 3757 4913 +> 15 0 25 3715 topology 3755 4914 +> 16 0 25 3715 topology 3756 4914 +> 15 0 25 3715 topology 3758 4915 +> 16 0 25 3715 topology 3760 4915 +> 15 0 25 3715 topology 3758 4916 +> 16 0 25 3715 topology 3759 4916 +> 15 0 25 3715 topology 3761 4917 +> 16 0 25 3715 topology 3763 4917 +> 15 0 25 3715 topology 3761 4918 +> 16 0 25 3715 topology 3762 4918 +> 15 0 25 3715 topology 3764 4919 +> 16 0 25 3715 topology 3766 4919 +> 15 0 25 3715 topology 3764 4920 +> 16 0 25 3715 topology 3765 4920 +> 15 0 25 3715 topology 3767 4921 +> 16 0 25 3715 topology 3769 4921 +> 15 0 25 3715 topology 3767 4922 +> 16 0 25 3715 topology 3768 4922 +> 15 0 25 3715 topology 3770 4923 +> 16 0 25 3715 topology 3772 4923 +> 15 0 25 3715 topology 3770 4924 +> 16 0 25 3715 topology 3771 4924 +> 15 0 25 3715 topology 3716 4925 +> 16 0 25 3715 topology 3718 4925 +> 15 0 25 3715 topology 3716 4926 +> 16 0 25 3715 topology 3717 4926 +> 15 0 25 3715 topology 3773 4927 +> 16 0 25 3715 topology 3775 4927 +> 15 0 25 3715 topology 3773 4928 +> 16 0 25 3715 topology 3774 4928 +> 15 0 25 3715 topology 3776 4929 +> 16 0 25 3715 topology 3778 4929 +> 15 0 25 3715 topology 3776 4930 +> 16 0 25 3715 topology 3777 4930 +> 15 0 25 3715 topology 3779 4931 +> 16 0 25 3715 topology 3781 4931 +> 15 0 25 3715 topology 3779 4932 +> 16 0 25 3715 topology 3780 4932 +> 15 0 25 3715 topology 3782 4933 +> 16 0 25 3715 topology 3784 4933 +> 15 0 25 3715 topology 3782 4934 +> 16 0 25 3715 topology 3783 4934 +> 15 0 25 3715 topology 3785 4935 +> 16 0 25 3715 topology 3787 4935 +> 15 0 25 3715 topology 3785 4936 +> 16 0 25 3715 topology 3786 4936 +> 15 0 25 3715 topology 3788 4937 +> 16 0 25 3715 topology 3790 4937 +> 15 0 25 3715 topology 3788 4938 +> 16 0 25 3715 topology 3789 4938 +> 15 0 25 3715 topology 3719 4939 +> 16 0 25 3715 topology 3721 4939 +> 15 0 25 3715 topology 3719 4940 +> 16 0 25 3715 topology 3720 4940 +> 15 0 25 3715 topology 3722 4941 +> 16 0 25 3715 topology 3724 4941 +> 15 0 25 3715 topology 3722 4942 +> 16 0 25 3715 topology 3723 4942 +> 15 0 25 3715 topology 3725 4943 +> 16 0 25 3715 topology 3727 4943 +> 15 0 25 3715 topology 3725 4944 +> 16 0 25 3715 topology 3726 4944 +> 15 0 25 3715 topology 3728 4945 +> 16 0 25 3715 topology 3730 4945 +> 15 0 25 3715 topology 3728 4946 +> 16 0 25 3715 topology 3729 4946 +> 15 0 25 3715 topology 3731 4947 +> 16 0 25 3715 topology 3733 4947 +> 15 0 25 3715 topology 3731 4948 +> 16 0 25 3715 topology 3732 4948 +> 15 0 25 3715 topology 3734 4949 +> 16 0 25 3715 topology 3736 4949 +> 15 0 25 3715 topology 3734 4950 +> 16 0 25 3715 topology 3735 4950 +> 15 0 25 3715 topology 3737 4951 +> 16 0 25 3715 topology 3739 4951 +> 15 0 25 3715 topology 3737 4952 +> 16 0 25 3715 topology 3738 4952 +> 15 0 25 3715 topology 3740 4953 +> 16 0 25 3715 topology 3742 4953 +> 15 0 25 3715 topology 3740 4954 +> 16 0 25 3715 topology 3741 4954 +> 15 0 23 3794 topology 3824 4955 > 16 0 23 3794 topology 3916 4955 -> 15 0 24 3794 topology 3870 4956 -> 16 0 24 3794 topology 3871 4956 -> 15 0 23 3794 topology 3796 4957 +> 15 0 23 3794 topology 3823 4956 +> 16 0 23 3794 topology 3916 4956 +> 15 0 23 3794 topology 3827 4957 > 16 0 23 3794 topology 3916 4957 -> 15 0 24 3794 topology 3849 4958 -> 16 0 24 3794 topology 3850 4958 -> 15 0 24 3794 topology 3903 4959 -> 16 0 24 3794 topology 3904 4959 -> 15 0 23 3794 topology 3808 4960 +> 15 0 23 3794 topology 3826 4958 +> 16 0 23 3794 topology 3916 4958 +> 15 0 23 3794 topology 3830 4959 +> 16 0 23 3794 topology 3916 4959 +> 15 0 23 3794 topology 3829 4960 > 16 0 23 3794 topology 3916 4960 -> 15 0 23 3794 topology 3854 4961 +> 15 0 23 3794 topology 3833 4961 > 16 0 23 3794 topology 3916 4961 -> 15 0 23 3794 topology 3830 4962 +> 15 0 23 3794 topology 3832 4962 > 16 0 23 3794 topology 3916 4962 -> 15 0 24 3794 topology 3828 4963 -> 16 0 24 3794 topology 3830 4963 -> 15 0 24 3794 topology 3882 4964 -> 16 0 24 3794 topology 3884 4964 -> 15 0 23 3794 topology 3914 4965 +> 15 0 23 3794 topology 3836 4963 +> 16 0 23 3794 topology 3916 4963 +> 15 0 23 3794 topology 3835 4964 +> 16 0 23 3794 topology 3916 4964 +> 15 0 23 3794 topology 3839 4965 > 16 0 23 3794 topology 3916 4965 -> 15 0 23 3794 topology 3890 4966 +> 15 0 23 3794 topology 3838 4966 > 16 0 23 3794 topology 3916 4966 -> 15 0 23 3794 topology 3820 4967 +> 15 0 23 3794 topology 3842 4967 > 16 0 23 3794 topology 3916 4967 -> 15 0 23 3794 topology 3866 4968 +> 15 0 23 3794 topology 3841 4968 > 16 0 23 3794 topology 3916 4968 -> 15 0 23 3794 topology 3842 4969 +> 15 0 23 3794 topology 3845 4969 > 16 0 23 3794 topology 3916 4969 -> 15 0 24 3794 topology 3861 4970 -> 16 0 24 3794 topology 3863 4970 -> 15 0 23 3794 topology 3902 4971 +> 15 0 23 3794 topology 3844 4970 +> 16 0 23 3794 topology 3916 4970 +> 15 0 23 3794 topology 3848 4971 > 16 0 23 3794 topology 3916 4971 -> 15 0 23 3794 topology 3878 4972 +> 15 0 23 3794 topology 3847 4972 > 16 0 23 3794 topology 3916 4972 -> 15 0 24 3794 topology 3840 4973 -> 16 0 24 3794 topology 3842 4973 -> 15 0 24 3794 topology 3894 4974 -> 16 0 24 3794 topology 3896 4974 -> 15 0 24 3794 topology 3873 4975 -> 16 0 24 3794 topology 3875 4975 -> 15 0 24 3794 topology 3828 4976 -> 16 0 24 3794 topology 3829 4976 -> 15 0 23 3794 topology 3832 4977 +> 15 0 23 3794 topology 3851 4973 +> 16 0 23 3794 topology 3916 4973 +> 15 0 23 3794 topology 3850 4974 +> 16 0 23 3794 topology 3916 4974 +> 15 0 23 3794 topology 3797 4975 +> 16 0 23 3794 topology 3916 4975 +> 15 0 23 3794 topology 3796 4976 +> 16 0 23 3794 topology 3916 4976 +> 15 0 23 3794 topology 3854 4977 > 16 0 23 3794 topology 3916 4977 -> 15 0 24 3794 topology 3882 4978 -> 16 0 24 3794 topology 3883 4978 -> 15 0 23 3794 topology 3862 4979 +> 15 0 23 3794 topology 3853 4978 +> 16 0 23 3794 topology 3916 4978 +> 15 0 23 3794 topology 3857 4979 > 16 0 23 3794 topology 3916 4979 -> 15 0 23 3794 topology 3803 4980 +> 15 0 23 3794 topology 3856 4980 > 16 0 23 3794 topology 3916 4980 -> 15 0 23 3794 topology 3892 4981 +> 15 0 23 3794 topology 3860 4981 > 16 0 23 3794 topology 3916 4981 -> 15 0 24 3794 topology 3906 4982 -> 16 0 24 3794 topology 3908 4982 -> 15 0 23 3794 topology 3844 4983 +> 15 0 23 3794 topology 3859 4982 +> 16 0 23 3794 topology 3916 4982 +> 15 0 23 3794 topology 3863 4983 > 16 0 23 3794 topology 3916 4983 -> 15 0 24 3794 topology 3861 4984 -> 16 0 24 3794 topology 3862 4984 -> 15 0 23 3794 topology 3874 4985 +> 15 0 23 3794 topology 3862 4984 +> 16 0 23 3794 topology 3916 4984 +> 15 0 23 3794 topology 3866 4985 > 16 0 23 3794 topology 3916 4985 -> 15 0 23 3794 topology 3815 4986 +> 15 0 23 3794 topology 3865 4986 > 16 0 23 3794 topology 3916 4986 -> 15 0 23 3794 topology 3904 4987 +> 15 0 23 3794 topology 3869 4987 > 16 0 23 3794 topology 3916 4987 -> 15 0 24 3794 topology 3840 4988 -> 16 0 24 3794 topology 3841 4988 -> 15 0 24 3794 topology 3894 4989 -> 16 0 24 3794 topology 3895 4989 -> 15 0 24 3794 topology 3873 4990 -> 16 0 24 3794 topology 3874 4990 -> 15 0 23 3794 topology 3805 4991 +> 15 0 23 3794 topology 3868 4988 +> 16 0 23 3794 topology 3916 4988 +> 15 0 23 3794 topology 3872 4989 +> 16 0 23 3794 topology 3916 4989 +> 15 0 23 3794 topology 3871 4990 +> 16 0 23 3794 topology 3916 4990 +> 15 0 23 3794 topology 3875 4991 > 16 0 23 3794 topology 3916 4991 -> 15 0 24 3794 topology 3906 4992 -> 16 0 24 3794 topology 3907 4992 -> 15 0 24 3794 topology 3798 4993 -> 16 0 24 3794 topology 3800 4993 -> 15 0 24 3794 topology 3825 4994 -> 16 0 24 3794 topology 3827 4994 -> 15 0 23 3794 topology 3857 4995 +> 15 0 23 3794 topology 3874 4992 +> 16 0 23 3794 topology 3916 4992 +> 15 0 23 3794 topology 3878 4993 +> 16 0 23 3794 topology 3916 4993 +> 15 0 23 3794 topology 3877 4994 +> 16 0 23 3794 topology 3916 4994 +> 15 0 23 3794 topology 3881 4995 > 16 0 23 3794 topology 3916 4995 -> 15 0 23 3794 topology 3833 4996 +> 15 0 23 3794 topology 3880 4996 > 16 0 23 3794 topology 3916 4996 -> 15 0 25 3794 topology 3915 4997 -> 16 0 25 3794 topology 3916 4997 -> 15 0 23 3794 topology 3817 4998 +> 15 0 23 3794 topology 3800 4997 +> 16 0 23 3794 topology 3916 4997 +> 15 0 23 3794 topology 3799 4998 > 16 0 23 3794 topology 3916 4998 -> 15 0 24 3794 topology 3804 4999 -> 16 0 24 3794 topology 3806 4999 -> 15 0 24 3794 topology 3858 5000 -> 16 0 24 3794 topology 3860 5000 -> 15 0 23 3794 topology 3893 5001 +> 15 0 23 3794 topology 3884 4999 +> 16 0 23 3794 topology 3916 4999 +> 15 0 23 3794 topology 3883 5000 +> 16 0 23 3794 topology 3916 5000 +> 15 0 23 3794 topology 3887 5001 > 16 0 23 3794 topology 3916 5001 -> 15 0 24 3794 topology 3912 5002 -> 16 0 24 3794 topology 3914 5002 -> 15 0 23 3794 topology 3869 5003 +> 15 0 23 3794 topology 3886 5002 +> 16 0 23 3794 topology 3916 5002 +> 15 0 23 3794 topology 3890 5003 > 16 0 23 3794 topology 3916 5003 -> 15 0 23 3794 topology 3845 5004 +> 15 0 23 3794 topology 3889 5004 > 16 0 23 3794 topology 3916 5004 -> 15 0 24 3794 topology 3810 5005 -> 16 0 24 3794 topology 3812 5005 -> 15 0 24 3794 topology 3837 5006 -> 16 0 24 3794 topology 3839 5006 -> 15 0 24 3794 topology 3891 5007 -> 16 0 24 3794 topology 3893 5007 -> 15 0 23 3794 topology 3905 5008 +> 15 0 23 3794 topology 3893 5005 +> 16 0 23 3794 topology 3916 5005 +> 15 0 23 3794 topology 3892 5006 +> 16 0 23 3794 topology 3916 5006 +> 15 0 23 3794 topology 3896 5007 +> 16 0 23 3794 topology 3916 5007 +> 15 0 23 3794 topology 3895 5008 > 16 0 23 3794 topology 3916 5008 -> 15 0 23 3794 topology 3881 5009 +> 15 0 23 3794 topology 3899 5009 > 16 0 23 3794 topology 3916 5009 -> 15 0 24 3794 topology 3816 5010 -> 16 0 24 3794 topology 3818 5010 -> 15 0 24 3794 topology 3870 5011 -> 16 0 24 3794 topology 3872 5011 -> 15 0 24 3794 topology 3852 5012 -> 16 0 24 3794 topology 3853 5012 -> 15 0 23 3794 topology 3829 5013 +> 15 0 23 3794 topology 3898 5010 +> 16 0 23 3794 topology 3916 5010 +> 15 0 23 3794 topology 3902 5011 +> 16 0 23 3794 topology 3916 5011 +> 15 0 23 3794 topology 3901 5012 +> 16 0 23 3794 topology 3916 5012 +> 15 0 23 3794 topology 3905 5013 > 16 0 23 3794 topology 3916 5013 -> 15 0 23 3794 topology 3859 5014 +> 15 0 23 3794 topology 3904 5014 > 16 0 23 3794 topology 3916 5014 -> 15 0 24 3794 topology 3849 5015 -> 16 0 24 3794 topology 3851 5015 -> 15 0 23 3794 topology 3889 5016 +> 15 0 23 3794 topology 3908 5015 +> 16 0 23 3794 topology 3916 5015 +> 15 0 23 3794 topology 3907 5016 > 16 0 23 3794 topology 3916 5016 -> 15 0 24 3794 topology 3903 5017 -> 16 0 24 3794 topology 3905 5017 -> 15 0 24 3794 topology 3831 5018 -> 16 0 24 3794 topology 3832 5018 -> 15 0 24 3794 topology 3885 5019 -> 16 0 24 3794 topology 3886 5019 -> 15 0 23 3794 topology 3806 5020 +> 15 0 23 3794 topology 3911 5017 +> 16 0 23 3794 topology 3916 5017 +> 15 0 23 3794 topology 3910 5018 +> 16 0 23 3794 topology 3916 5018 +> 15 0 23 3794 topology 3803 5019 +> 16 0 23 3794 topology 3916 5019 +> 15 0 23 3794 topology 3802 5020 > 16 0 23 3794 topology 3916 5020 -> 15 0 23 3794 topology 3841 5021 +> 15 0 23 3794 topology 3914 5021 > 16 0 23 3794 topology 3916 5021 -> 15 0 23 3794 topology 3871 5022 +> 15 0 23 3794 topology 3913 5022 > 16 0 23 3794 topology 3916 5022 -> 15 0 23 3794 topology 3901 5023 +> 15 0 23 3794 topology 3806 5023 > 16 0 23 3794 topology 3916 5023 -> 15 0 24 3794 topology 3864 5024 -> 16 0 24 3794 topology 3865 5024 -> 15 0 23 3794 topology 3818 5025 +> 15 0 23 3794 topology 3805 5024 +> 16 0 23 3794 topology 3916 5024 +> 15 0 23 3794 topology 3809 5025 > 16 0 23 3794 topology 3916 5025 -> 15 0 24 3794 topology 3843 5026 -> 16 0 24 3794 topology 3844 5026 -> 15 0 24 3794 topology 3897 5027 -> 16 0 24 3794 topology 3898 5027 -> 15 0 24 3794 topology 3876 5028 -> 16 0 24 3794 topology 3877 5028 -> 15 0 23 3794 topology 3802 5029 +> 15 0 23 3794 topology 3808 5026 +> 16 0 23 3794 topology 3916 5026 +> 15 0 23 3794 topology 3812 5027 +> 16 0 23 3794 topology 3916 5027 +> 15 0 23 3794 topology 3811 5028 +> 16 0 23 3794 topology 3916 5028 +> 15 0 23 3794 topology 3815 5029 > 16 0 23 3794 topology 3916 5029 -> 15 0 24 3794 topology 3822 5030 -> 16 0 24 3794 topology 3824 5030 -> 15 0 23 3794 topology 3824 5031 +> 15 0 23 3794 topology 3814 5030 +> 16 0 23 3794 topology 3916 5030 +> 15 0 23 3794 topology 3818 5031 > 16 0 23 3794 topology 3916 5031 -> 15 0 23 3794 topology 3884 5032 +> 15 0 23 3794 topology 3817 5032 > 16 0 23 3794 topology 3916 5032 -> 15 0 24 3794 topology 3909 5033 -> 16 0 24 3794 topology 3910 5033 -> 15 0 23 3794 topology 3814 5034 +> 15 0 23 3794 topology 3821 5033 +> 16 0 23 3794 topology 3916 5033 +> 15 0 23 3794 topology 3820 5034 > 16 0 23 3794 topology 3916 5034 -> 15 0 24 3794 topology 3855 5035 -> 16 0 24 3794 topology 3857 5035 -> 15 0 23 3794 topology 3860 5036 -> 16 0 23 3794 topology 3916 5036 -> 15 0 23 3794 topology 3836 5037 -> 16 0 23 3794 topology 3916 5037 -> 15 0 23 3794 topology 3896 5038 -> 16 0 23 3794 topology 3916 5038 -> 15 0 24 3794 topology 3834 5039 -> 16 0 24 3794 topology 3836 5039 -> 15 0 23 3794 topology 3872 5040 -> 16 0 23 3794 topology 3916 5040 -> 15 0 24 3794 topology 3888 5041 -> 16 0 24 3794 topology 3890 5041 -> 15 0 23 3794 topology 3848 5042 -> 16 0 23 3794 topology 3916 5042 -> 15 0 23 3794 topology 3908 5043 -> 16 0 23 3794 topology 3916 5043 -> 15 0 24 3794 topology 3867 5044 -> 16 0 24 3794 topology 3869 5044 -> 15 0 24 3794 topology 3795 5045 -> 16 0 24 3794 topology 3796 5045 -> 15 0 24 3794 topology 3822 5046 -> 16 0 24 3794 topology 3823 5046 -> 15 0 24 3794 topology 3798 5047 -> 16 0 24 3794 topology 3799 5047 -> 15 0 23 3794 topology 3826 5048 -> 16 0 23 3794 topology 3916 5048 -> 15 0 24 3794 topology 3846 5049 -> 16 0 24 3794 topology 3848 5049 -> 15 0 23 3794 topology 3856 5050 -> 16 0 23 3794 topology 3916 5050 -> 15 0 24 3794 topology 3900 5051 -> 16 0 24 3794 topology 3902 5051 -> 15 0 23 3794 topology 3797 5052 -> 16 0 23 3794 topology 3916 5052 -> 15 0 24 3794 topology 3801 5053 -> 16 0 24 3794 topology 3802 5053 -> 15 0 24 3794 topology 3855 5054 -> 16 0 24 3794 topology 3856 5054 -> 15 0 23 3794 topology 3886 5055 -> 16 0 23 3794 topology 3916 5055 -> 15 0 24 3794 topology 3804 5056 -> 16 0 24 3794 topology 3805 5056 -> 15 0 23 3794 topology 3838 5057 -> 16 0 23 3794 topology 3916 5057 -> 15 0 23 3794 topology 3868 5058 -> 16 0 23 3794 topology 3916 5058 -> 15 0 24 3794 topology 3879 5059 -> 16 0 24 3794 topology 3881 5059 -> 15 0 24 3794 topology 3807 5060 -> 16 0 24 3794 topology 3808 5060 -> 15 0 23 3794 topology 3809 5061 -> 16 0 23 3794 topology 3916 5061 -> 15 0 24 3794 topology 3834 5062 -> 16 0 24 3794 topology 3835 5062 -> 15 0 24 3794 topology 3888 5063 -> 16 0 24 3794 topology 3889 5063 -> 15 0 23 3794 topology 3898 5064 -> 16 0 23 3794 topology 3916 5064 -> 15 0 24 3794 topology 3810 5065 -> 16 0 24 3794 topology 3811 5065 -> 15 0 23 3794 topology 3850 5066 -> 16 0 23 3794 topology 3916 5066 -> 15 0 23 3794 topology 3880 5067 -> 16 0 23 3794 topology 3916 5067 -> 15 0 24 3794 topology 3813 5068 -> 16 0 24 3794 topology 3814 5068 -> 15 0 23 3794 topology 3821 5069 -> 16 0 23 3794 topology 3916 5069 -> 15 0 24 3794 topology 3867 5070 -> 16 0 24 3794 topology 3868 5070 -> 15 0 23 3794 topology 3910 5071 -> 16 0 23 3794 topology 3916 5071 -> 15 0 24 3794 topology 3816 5072 -> 16 0 24 3794 topology 3817 5072 -> 15 0 24 3794 topology 3819 5073 -> 16 0 24 3794 topology 3820 5073 -> 15 0 24 3794 topology 3846 5074 -> 16 0 24 3794 topology 3847 5074 -> 15 0 24 3794 topology 3900 5075 -> 16 0 24 3794 topology 3901 5075 -> 15 0 23 3794 topology 3799 5076 -> 16 0 23 3794 topology 3916 5076 -> 15 0 24 3794 topology 3795 5077 -> 16 0 24 3794 topology 3797 5077 -> 15 0 24 3794 topology 3879 5078 -> 16 0 24 3794 topology 3880 5078 -> 15 0 23 3794 topology 3827 5079 -> 16 0 23 3794 topology 3916 5079 -> 15 0 24 3794 topology 3852 5080 -> 16 0 24 3794 topology 3854 5080 -> 15 0 23 3794 topology 3811 5081 -> 16 0 23 3794 topology 3916 5081 -> 15 0 24 3794 topology 3801 5082 -> 16 0 24 3794 topology 3803 5082 -> 15 0 23 3794 topology 3887 5083 -> 16 0 23 3794 topology 3916 5083 -> 15 0 23 3794 topology 3863 5084 -> 16 0 23 3794 topology 3916 5084 -> 15 0 24 3794 topology 3831 5085 -> 16 0 24 3794 topology 3833 5085 -> 15 0 23 3794 topology 3839 5086 -> 16 0 23 3794 topology 3916 5086 -> 15 0 24 3794 topology 3885 5087 -> 16 0 24 3794 topology 3887 5087 -> 15 0 24 3794 topology 3807 5088 -> 16 0 24 3794 topology 3809 5088 -> 15 0 23 3794 topology 3899 5089 -> 16 0 23 3794 topology 3916 5089 -> 15 0 23 3794 topology 3875 5090 -> 16 0 23 3794 topology 3916 5090 -> 15 0 23 3794 topology 3851 5091 -> 16 0 23 3794 topology 3916 5091 -> 15 0 24 3794 topology 3864 5092 -> 16 0 24 3794 topology 3866 5092 -> 15 0 24 3794 topology 3813 5093 -> 16 0 24 3794 topology 3815 5093 -> 15 0 23 3794 topology 3911 5094 -> 16 0 23 3794 topology 3916 5094 -> 15 0 23 3794 topology 3823 5095 -> 16 0 23 3794 topology 3916 5095 -> 15 0 24 3794 topology 3843 5096 -> 16 0 24 3794 topology 3845 5096 -> 15 0 24 3794 topology 3897 5097 -> 16 0 24 3794 topology 3899 5097 -> 15 0 24 3794 topology 3825 5098 -> 16 0 24 3794 topology 3826 5098 -> 15 0 23 3794 topology 3853 5099 -> 16 0 23 3794 topology 3916 5099 -> 15 0 24 3794 topology 3819 5100 -> 16 0 24 3794 topology 3821 5100 -> 15 0 23 3794 topology 3883 5101 -> 16 0 23 3794 topology 3916 5101 -> 15 0 23 3794 topology 3913 5102 -> 16 0 23 3794 topology 3916 5102 -> 15 0 23 3794 topology 3800 5103 -> 16 0 23 3794 topology 3916 5103 -> 15 0 23 3794 topology 3835 5104 -> 16 0 23 3794 topology 3916 5104 -> 15 0 24 3794 topology 3876 5105 -> 16 0 24 3794 topology 3878 5105 -> 15 0 24 3794 topology 3858 5106 -> 16 0 24 3794 topology 3859 5106 -> 15 0 23 3794 topology 3865 5107 -> 16 0 23 3794 topology 3916 5107 -> 15 0 24 3794 topology 3912 5108 -> 16 0 24 3794 topology 3913 5108 -> 15 0 23 3794 topology 3895 5109 -> 16 0 23 3794 topology 3916 5109 -> 15 0 23 3794 topology 3812 5110 -> 16 0 23 3794 topology 3916 5110 -> 15 0 23 3794 topology 3847 5111 -> 16 0 23 3794 topology 3916 5111 -> 15 0 24 3794 topology 3909 5112 -> 16 0 24 3794 topology 3911 5112 -> 15 0 24 3794 topology 3837 5113 -> 16 0 24 3794 topology 3838 5113 -> 15 0 23 3794 topology 3877 5114 -> 16 0 23 3794 topology 3916 5114 -> 15 0 24 3794 topology 3891 5115 -> 16 0 24 3794 topology 3892 5115 -> 15 0 21 3415 topology 3611 5116 -> 16 0 21 3415 topology 3917 5116 +> 15 0 24 3794 topology 3915 5035 +> 16 0 24 3794 topology 3916 5035 +> 15 0 25 3794 topology 3822 5036 +> 16 0 25 3794 topology 3824 5036 +> 15 0 25 3794 topology 3822 5037 +> 16 0 25 3794 topology 3823 5037 +> 15 0 25 3794 topology 3825 5038 +> 16 0 25 3794 topology 3827 5038 +> 15 0 25 3794 topology 3825 5039 +> 16 0 25 3794 topology 3826 5039 +> 15 0 25 3794 topology 3828 5040 +> 16 0 25 3794 topology 3830 5040 +> 15 0 25 3794 topology 3828 5041 +> 16 0 25 3794 topology 3829 5041 +> 15 0 25 3794 topology 3831 5042 +> 16 0 25 3794 topology 3833 5042 +> 15 0 25 3794 topology 3831 5043 +> 16 0 25 3794 topology 3832 5043 +> 15 0 25 3794 topology 3834 5044 +> 16 0 25 3794 topology 3836 5044 +> 15 0 25 3794 topology 3834 5045 +> 16 0 25 3794 topology 3835 5045 +> 15 0 25 3794 topology 3837 5046 +> 16 0 25 3794 topology 3839 5046 +> 15 0 25 3794 topology 3837 5047 +> 16 0 25 3794 topology 3838 5047 +> 15 0 25 3794 topology 3840 5048 +> 16 0 25 3794 topology 3842 5048 +> 15 0 25 3794 topology 3840 5049 +> 16 0 25 3794 topology 3841 5049 +> 15 0 25 3794 topology 3843 5050 +> 16 0 25 3794 topology 3845 5050 +> 15 0 25 3794 topology 3843 5051 +> 16 0 25 3794 topology 3844 5051 +> 15 0 25 3794 topology 3846 5052 +> 16 0 25 3794 topology 3848 5052 +> 15 0 25 3794 topology 3846 5053 +> 16 0 25 3794 topology 3847 5053 +> 15 0 25 3794 topology 3849 5054 +> 16 0 25 3794 topology 3851 5054 +> 15 0 25 3794 topology 3849 5055 +> 16 0 25 3794 topology 3850 5055 +> 15 0 25 3794 topology 3795 5056 +> 16 0 25 3794 topology 3797 5056 +> 15 0 25 3794 topology 3795 5057 +> 16 0 25 3794 topology 3796 5057 +> 15 0 25 3794 topology 3852 5058 +> 16 0 25 3794 topology 3854 5058 +> 15 0 25 3794 topology 3852 5059 +> 16 0 25 3794 topology 3853 5059 +> 15 0 25 3794 topology 3855 5060 +> 16 0 25 3794 topology 3857 5060 +> 15 0 25 3794 topology 3855 5061 +> 16 0 25 3794 topology 3856 5061 +> 15 0 25 3794 topology 3858 5062 +> 16 0 25 3794 topology 3860 5062 +> 15 0 25 3794 topology 3858 5063 +> 16 0 25 3794 topology 3859 5063 +> 15 0 25 3794 topology 3861 5064 +> 16 0 25 3794 topology 3863 5064 +> 15 0 25 3794 topology 3861 5065 +> 16 0 25 3794 topology 3862 5065 +> 15 0 25 3794 topology 3864 5066 +> 16 0 25 3794 topology 3866 5066 +> 15 0 25 3794 topology 3864 5067 +> 16 0 25 3794 topology 3865 5067 +> 15 0 25 3794 topology 3867 5068 +> 16 0 25 3794 topology 3869 5068 +> 15 0 25 3794 topology 3867 5069 +> 16 0 25 3794 topology 3868 5069 +> 15 0 25 3794 topology 3870 5070 +> 16 0 25 3794 topology 3872 5070 +> 15 0 25 3794 topology 3870 5071 +> 16 0 25 3794 topology 3871 5071 +> 15 0 25 3794 topology 3873 5072 +> 16 0 25 3794 topology 3875 5072 +> 15 0 25 3794 topology 3873 5073 +> 16 0 25 3794 topology 3874 5073 +> 15 0 25 3794 topology 3876 5074 +> 16 0 25 3794 topology 3878 5074 +> 15 0 25 3794 topology 3876 5075 +> 16 0 25 3794 topology 3877 5075 +> 15 0 25 3794 topology 3879 5076 +> 16 0 25 3794 topology 3881 5076 +> 15 0 25 3794 topology 3879 5077 +> 16 0 25 3794 topology 3880 5077 +> 15 0 25 3794 topology 3798 5078 +> 16 0 25 3794 topology 3800 5078 +> 15 0 25 3794 topology 3798 5079 +> 16 0 25 3794 topology 3799 5079 +> 15 0 25 3794 topology 3882 5080 +> 16 0 25 3794 topology 3884 5080 +> 15 0 25 3794 topology 3882 5081 +> 16 0 25 3794 topology 3883 5081 +> 15 0 25 3794 topology 3885 5082 +> 16 0 25 3794 topology 3887 5082 +> 15 0 25 3794 topology 3885 5083 +> 16 0 25 3794 topology 3886 5083 +> 15 0 25 3794 topology 3888 5084 +> 16 0 25 3794 topology 3890 5084 +> 15 0 25 3794 topology 3888 5085 +> 16 0 25 3794 topology 3889 5085 +> 15 0 25 3794 topology 3891 5086 +> 16 0 25 3794 topology 3893 5086 +> 15 0 25 3794 topology 3891 5087 +> 16 0 25 3794 topology 3892 5087 +> 15 0 25 3794 topology 3894 5088 +> 16 0 25 3794 topology 3896 5088 +> 15 0 25 3794 topology 3894 5089 +> 16 0 25 3794 topology 3895 5089 +> 15 0 25 3794 topology 3897 5090 +> 16 0 25 3794 topology 3899 5090 +> 15 0 25 3794 topology 3897 5091 +> 16 0 25 3794 topology 3898 5091 +> 15 0 25 3794 topology 3900 5092 +> 16 0 25 3794 topology 3902 5092 +> 15 0 25 3794 topology 3900 5093 +> 16 0 25 3794 topology 3901 5093 +> 15 0 25 3794 topology 3903 5094 +> 16 0 25 3794 topology 3905 5094 +> 15 0 25 3794 topology 3903 5095 +> 16 0 25 3794 topology 3904 5095 +> 15 0 25 3794 topology 3906 5096 +> 16 0 25 3794 topology 3908 5096 +> 15 0 25 3794 topology 3906 5097 +> 16 0 25 3794 topology 3907 5097 +> 15 0 25 3794 topology 3909 5098 +> 16 0 25 3794 topology 3911 5098 +> 15 0 25 3794 topology 3909 5099 +> 16 0 25 3794 topology 3910 5099 +> 15 0 25 3794 topology 3801 5100 +> 16 0 25 3794 topology 3803 5100 +> 15 0 25 3794 topology 3801 5101 +> 16 0 25 3794 topology 3802 5101 +> 15 0 25 3794 topology 3912 5102 +> 16 0 25 3794 topology 3914 5102 +> 15 0 25 3794 topology 3912 5103 +> 16 0 25 3794 topology 3913 5103 +> 15 0 25 3794 topology 3804 5104 +> 16 0 25 3794 topology 3806 5104 +> 15 0 25 3794 topology 3804 5105 +> 16 0 25 3794 topology 3805 5105 +> 15 0 25 3794 topology 3807 5106 +> 16 0 25 3794 topology 3809 5106 +> 15 0 25 3794 topology 3807 5107 +> 16 0 25 3794 topology 3808 5107 +> 15 0 25 3794 topology 3810 5108 +> 16 0 25 3794 topology 3812 5108 +> 15 0 25 3794 topology 3810 5109 +> 16 0 25 3794 topology 3811 5109 +> 15 0 25 3794 topology 3813 5110 +> 16 0 25 3794 topology 3815 5110 +> 15 0 25 3794 topology 3813 5111 +> 16 0 25 3794 topology 3814 5111 +> 15 0 25 3794 topology 3816 5112 +> 16 0 25 3794 topology 3818 5112 +> 15 0 25 3794 topology 3816 5113 +> 16 0 25 3794 topology 3817 5113 +> 15 0 25 3794 topology 3819 5114 +> 16 0 25 3794 topology 3821 5114 +> 15 0 25 3794 topology 3819 5115 +> 16 0 25 3794 topology 3820 5115 +> 15 0 26 3415 topology 3611 5116 +> 16 0 26 3415 topology 3919 5116 > 15 0 26 3415 topology 3714 5117 > 16 0 26 3415 topology 3919 5117 -> 15 0 21 3415 topology 3611 5118 -> 16 0 21 3415 topology 3793 5118 -> 15 0 26 3415 topology 3793 5119 -> 16 0 26 3415 topology 3791 5119 -> 15 0 26 3415 topology 3611 5120 -> 16 0 26 3415 topology 3919 5120 -> 15 0 26 3415 topology 3917 5121 -> 16 0 26 3415 topology 3919 5121 -> 15 0 21 3415 topology 3793 5122 -> 16 0 21 3415 topology 3917 5122 -> 15 0 26 3415 topology 3714 5123 -> 16 0 26 3415 topology 3712 5123 -> 15 0 26 3415 topology 3917 5124 -> 16 0 26 3415 topology 3915 5124 -> 15 0 21 3415 topology 3714 5125 -> 16 0 21 3415 topology 3793 5125 -> 15 0 26 3415 topology 3793 5126 -> 16 0 26 3415 topology 3919 5126 -> 15 0 21 3415 topology 3611 5127 -> 16 0 21 3415 topology 3714 5127 -> 15 0 27 3415 topology 3609 5128 -> 16 0 27 3415 topology 3611 5128 -> 15 0 21 3415 topology 3714 5129 -> 16 0 21 3415 topology 3917 5129 -> 15 0 23 3922 topology 4059 5130 +> 15 0 26 3415 topology 3793 5118 +> 16 0 26 3415 topology 3919 5118 +> 15 0 26 3415 topology 3917 5119 +> 16 0 26 3415 topology 3919 5119 +> 15 0 27 3415 topology 3609 5120 +> 16 0 27 3415 topology 3611 5120 +> 15 0 20 3415 topology 3611 5121 +> 16 0 20 3415 topology 3714 5121 +> 15 0 20 3415 topology 3611 5122 +> 16 0 20 3415 topology 3793 5122 +> 15 0 20 3415 topology 3714 5123 +> 16 0 20 3415 topology 3793 5123 +> 15 0 20 3415 topology 3611 5124 +> 16 0 20 3415 topology 3917 5124 +> 15 0 20 3415 topology 3714 5125 +> 16 0 20 3415 topology 3917 5125 +> 15 0 20 3415 topology 3793 5126 +> 16 0 20 3415 topology 3917 5126 +> 15 0 26 3415 topology 3714 5127 +> 16 0 26 3415 topology 3712 5127 +> 15 0 26 3415 topology 3793 5128 +> 16 0 26 3415 topology 3791 5128 +> 15 0 26 3415 topology 3917 5129 +> 16 0 26 3415 topology 3915 5129 +> 15 0 23 3922 topology 3952 5130 > 16 0 23 3922 topology 4092 5130 -> 15 0 24 3922 topology 3926 5131 -> 16 0 24 3922 topology 3928 5131 -> 15 0 23 3922 topology 3952 5132 +> 15 0 23 3922 topology 3951 5131 +> 16 0 23 3922 topology 4092 5131 +> 15 0 23 3922 topology 3955 5132 > 16 0 23 3922 topology 4092 5132 -> 15 0 23 3922 topology 3936 5133 +> 15 0 23 3922 topology 3954 5133 > 16 0 23 3922 topology 4092 5133 -> 15 0 23 3922 topology 3988 5134 +> 15 0 23 3922 topology 3958 5134 > 16 0 23 3922 topology 4092 5134 -> 15 0 23 3922 topology 4072 5135 +> 15 0 23 3922 topology 3957 5135 > 16 0 23 3922 topology 4092 5135 -> 15 0 23 3922 topology 4024 5136 +> 15 0 23 3922 topology 3961 5136 > 16 0 23 3922 topology 4092 5136 -> 15 0 24 3922 topology 3953 5137 -> 16 0 24 3922 topology 3954 5137 -> 15 0 23 3922 topology 3976 5138 +> 15 0 23 3922 topology 3960 5137 +> 16 0 23 3922 topology 4092 5137 +> 15 0 23 3922 topology 3964 5138 > 16 0 23 3922 topology 4092 5138 -> 15 0 23 3922 topology 4060 5139 +> 15 0 23 3922 topology 3963 5139 > 16 0 23 3922 topology 4092 5139 -> 15 0 24 3922 topology 4013 5140 -> 16 0 24 3922 topology 4014 5140 -> 15 0 24 3922 topology 3989 5141 -> 16 0 24 3922 topology 3990 5141 -> 15 0 24 3922 topology 3938 5142 -> 16 0 24 3922 topology 3939 5142 -> 15 0 24 3922 topology 3965 5143 -> 16 0 24 3922 topology 3966 5143 -> 15 0 23 3922 topology 3984 5144 +> 15 0 23 3922 topology 3967 5140 +> 16 0 23 3922 topology 4092 5140 +> 15 0 23 3922 topology 3966 5141 +> 16 0 23 3922 topology 4092 5141 +> 15 0 23 3922 topology 3970 5142 +> 16 0 23 3922 topology 4092 5142 +> 15 0 23 3922 topology 3969 5143 +> 16 0 23 3922 topology 4092 5143 +> 15 0 23 3922 topology 3973 5144 > 16 0 23 3922 topology 4092 5144 -> 15 0 24 3922 topology 4073 5145 -> 16 0 24 3922 topology 4074 5145 -> 15 0 23 3922 topology 4044 5146 +> 15 0 23 3922 topology 3972 5145 +> 16 0 23 3922 topology 4092 5145 +> 15 0 23 3922 topology 3976 5146 > 16 0 23 3922 topology 4092 5146 -> 15 0 24 3922 topology 4049 5147 -> 16 0 24 3922 topology 4050 5147 -> 15 0 23 3922 topology 3966 5148 +> 15 0 23 3922 topology 3975 5147 +> 16 0 23 3922 topology 4092 5147 +> 15 0 23 3922 topology 3979 5148 > 16 0 23 3922 topology 4092 5148 -> 15 0 24 3922 topology 4025 5149 -> 16 0 24 3922 topology 4026 5149 -> 15 0 23 3922 topology 4026 5150 +> 15 0 23 3922 topology 3978 5149 +> 16 0 23 3922 topology 4092 5149 +> 15 0 23 3922 topology 3925 5150 > 16 0 23 3922 topology 4092 5150 -> 15 0 24 3922 topology 4001 5151 -> 16 0 24 3922 topology 4002 5151 -> 15 0 23 3922 topology 3943 5152 +> 15 0 23 3922 topology 3924 5151 +> 16 0 23 3922 topology 4092 5151 +> 15 0 23 3922 topology 3982 5152 > 16 0 23 3922 topology 4092 5152 -> 15 0 23 3922 topology 4086 5153 +> 15 0 23 3922 topology 3981 5153 > 16 0 23 3922 topology 4092 5153 -> 15 0 24 3922 topology 3977 5154 -> 16 0 24 3922 topology 3978 5154 -> 15 0 23 3922 topology 4008 5155 +> 15 0 23 3922 topology 3985 5154 +> 16 0 23 3922 topology 4092 5154 +> 15 0 23 3922 topology 3984 5155 > 16 0 23 3922 topology 4092 5155 -> 15 0 24 3922 topology 4085 5156 -> 16 0 24 3922 topology 4086 5156 -> 15 0 24 3922 topology 4061 5157 -> 16 0 24 3922 topology 4062 5157 -> 15 0 23 3922 topology 4068 5158 +> 15 0 23 3922 topology 3988 5156 +> 16 0 23 3922 topology 4092 5156 +> 15 0 23 3922 topology 3987 5157 +> 16 0 23 3922 topology 4092 5157 +> 15 0 23 3922 topology 3991 5158 > 16 0 23 3922 topology 4092 5158 -> 15 0 24 3922 topology 3980 5159 -> 16 0 24 3922 topology 3982 5159 -> 15 0 24 3922 topology 4037 5160 -> 16 0 24 3922 topology 4038 5160 -> 15 0 24 3922 topology 3986 5161 -> 16 0 24 3922 topology 3988 5161 -> 15 0 24 3922 topology 3935 5162 -> 16 0 24 3922 topology 3937 5162 -> 15 0 24 3922 topology 4043 5163 -> 16 0 24 3922 topology 4045 5163 -> 15 0 24 3922 topology 3992 5164 -> 16 0 24 3922 topology 3994 5164 -> 15 0 23 3922 topology 4015 5165 +> 15 0 23 3922 topology 3990 5159 +> 16 0 23 3922 topology 4092 5159 +> 15 0 23 3922 topology 3994 5160 +> 16 0 23 3922 topology 4092 5160 +> 15 0 23 3922 topology 3993 5161 +> 16 0 23 3922 topology 4092 5161 +> 15 0 23 3922 topology 3997 5162 +> 16 0 23 3922 topology 4092 5162 +> 15 0 23 3922 topology 3996 5163 +> 16 0 23 3922 topology 4092 5163 +> 15 0 23 3922 topology 4000 5164 +> 16 0 23 3922 topology 4092 5164 +> 15 0 23 3922 topology 3999 5165 > 16 0 23 3922 topology 4092 5165 -> 15 0 23 3922 topology 3945 5166 +> 15 0 23 3922 topology 4003 5166 > 16 0 23 3922 topology 4092 5166 -> 15 0 24 3922 topology 4049 5167 -> 16 0 24 3922 topology 4051 5167 -> 15 0 23 3922 topology 3967 5168 +> 15 0 23 3922 topology 4002 5167 +> 16 0 23 3922 topology 4092 5167 +> 15 0 23 3922 topology 4006 5168 > 16 0 23 3922 topology 4092 5168 -> 15 0 24 3922 topology 3998 5169 -> 16 0 24 3922 topology 4000 5169 -> 15 0 23 3922 topology 4051 5170 +> 15 0 23 3922 topology 4005 5169 +> 16 0 23 3922 topology 4092 5169 +> 15 0 23 3922 topology 4009 5170 > 16 0 23 3922 topology 4092 5170 -> 15 0 23 3922 topology 4003 5171 +> 15 0 23 3922 topology 4008 5171 > 16 0 23 3922 topology 4092 5171 -> 15 0 24 3922 topology 4055 5172 -> 16 0 24 3922 topology 4057 5172 -> 15 0 23 3922 topology 4087 5173 +> 15 0 23 3922 topology 3928 5172 +> 16 0 23 3922 topology 4092 5172 +> 15 0 23 3922 topology 3927 5173 > 16 0 23 3922 topology 4092 5173 -> 15 0 24 3922 topology 4004 5174 -> 16 0 24 3922 topology 4006 5174 -> 15 0 23 3922 topology 4039 5175 +> 15 0 23 3922 topology 4012 5174 +> 16 0 23 3922 topology 4092 5174 +> 15 0 23 3922 topology 4011 5175 > 16 0 23 3922 topology 4092 5175 -> 15 0 24 3922 topology 4061 5176 -> 16 0 24 3922 topology 4063 5176 -> 15 0 23 3922 topology 3951 5177 +> 15 0 23 3922 topology 4015 5176 +> 16 0 23 3922 topology 4092 5176 +> 15 0 23 3922 topology 4014 5177 > 16 0 23 3922 topology 4092 5177 -> 15 0 23 3922 topology 4011 5178 +> 15 0 23 3922 topology 4018 5178 > 16 0 23 3922 topology 4092 5178 -> 15 0 24 3922 topology 4067 5179 -> 16 0 24 3922 topology 4069 5179 -> 15 0 24 3922 topology 3941 5180 -> 16 0 24 3922 topology 3942 5180 -> 15 0 23 3922 topology 4071 5181 +> 15 0 23 3922 topology 4017 5179 +> 16 0 23 3922 topology 4092 5179 +> 15 0 23 3922 topology 4021 5180 +> 16 0 23 3922 topology 4092 5180 +> 15 0 23 3922 topology 4020 5181 > 16 0 23 3922 topology 4092 5181 -> 15 0 23 3922 topology 3993 5182 +> 15 0 23 3922 topology 4024 5182 > 16 0 23 3922 topology 4092 5182 -> 15 0 23 3922 topology 3934 5183 +> 15 0 23 3922 topology 4023 5183 > 16 0 23 3922 topology 4092 5183 -> 15 0 23 3922 topology 4053 5184 +> 15 0 23 3922 topology 4027 5184 > 16 0 23 3922 topology 4092 5184 -> 15 0 23 3922 topology 3975 5185 +> 15 0 23 3922 topology 4026 5185 > 16 0 23 3922 topology 4092 5185 -> 15 0 23 3922 topology 4035 5186 +> 15 0 23 3922 topology 4030 5186 > 16 0 23 3922 topology 4092 5186 -> 15 0 23 3922 topology 3930 5187 +> 15 0 23 3922 topology 4029 5187 > 16 0 23 3922 topology 4092 5187 -> 15 0 23 3922 topology 3958 5188 +> 15 0 23 3922 topology 4033 5188 > 16 0 23 3922 topology 4092 5188 -> 15 0 23 3922 topology 4042 5189 +> 15 0 23 3922 topology 4032 5189 > 16 0 23 3922 topology 4092 5189 -> 15 0 23 3922 topology 3994 5190 +> 15 0 23 3922 topology 4036 5190 > 16 0 23 3922 topology 4092 5190 -> 15 0 24 3922 topology 3944 5191 -> 16 0 24 3922 topology 3946 5191 -> 15 0 23 3922 topology 4078 5192 +> 15 0 23 3922 topology 4035 5191 +> 16 0 23 3922 topology 4092 5191 +> 15 0 23 3922 topology 4039 5192 > 16 0 23 3922 topology 4092 5192 -> 15 0 24 3922 topology 3980 5193 -> 16 0 24 3922 topology 3981 5193 -> 15 0 23 3922 topology 4030 5194 +> 15 0 23 3922 topology 4038 5193 +> 16 0 23 3922 topology 4092 5193 +> 15 0 23 3922 topology 3931 5194 > 16 0 23 3922 topology 4092 5194 -> 15 0 24 3922 topology 3956 5195 -> 16 0 24 3922 topology 3957 5195 -> 15 0 24 3922 topology 4040 5196 -> 16 0 24 3922 topology 4041 5196 -> 15 0 23 3922 topology 4066 5197 +> 15 0 23 3922 topology 3930 5195 +> 16 0 23 3922 topology 4092 5195 +> 15 0 23 3922 topology 4042 5196 +> 16 0 23 3922 topology 4092 5196 +> 15 0 23 3922 topology 4041 5197 > 16 0 23 3922 topology 4092 5197 -> 15 0 24 3922 topology 4016 5198 -> 16 0 24 3922 topology 4017 5198 -> 15 0 24 3922 topology 3992 5199 -> 16 0 24 3922 topology 3993 5199 -> 15 0 23 3922 topology 3925 5200 +> 15 0 23 3922 topology 4045 5198 +> 16 0 23 3922 topology 4092 5198 +> 15 0 23 3922 topology 4044 5199 +> 16 0 23 3922 topology 4092 5199 +> 15 0 23 3922 topology 4048 5200 > 16 0 23 3922 topology 4092 5200 -> 15 0 23 3922 topology 3960 5201 +> 15 0 23 3922 topology 4047 5201 > 16 0 23 3922 topology 4092 5201 -> 15 0 24 3922 topology 3968 5202 -> 16 0 24 3922 topology 3969 5202 -> 15 0 24 3922 topology 4076 5203 -> 16 0 24 3922 topology 4077 5203 -> 15 0 23 3922 topology 4020 5204 +> 15 0 23 3922 topology 4051 5202 +> 16 0 23 3922 topology 4092 5202 +> 15 0 23 3922 topology 4050 5203 +> 16 0 23 3922 topology 4092 5203 +> 15 0 23 3922 topology 4054 5204 > 16 0 23 3922 topology 4092 5204 -> 15 0 24 3922 topology 3944 5205 -> 16 0 24 3922 topology 3945 5205 -> 15 0 24 3922 topology 4052 5206 -> 16 0 24 3922 topology 4053 5206 -> 15 0 23 3922 topology 4080 5207 +> 15 0 23 3922 topology 4053 5205 +> 16 0 23 3922 topology 4092 5205 +> 15 0 23 3922 topology 4057 5206 +> 16 0 23 3922 topology 4092 5206 +> 15 0 23 3922 topology 4056 5207 > 16 0 23 3922 topology 4092 5207 -> 15 0 23 3922 topology 4002 5208 +> 15 0 23 3922 topology 4060 5208 > 16 0 23 3922 topology 4092 5208 -> 15 0 24 3922 topology 4028 5209 -> 16 0 24 3922 topology 4029 5209 -> 15 0 24 3922 topology 4004 5210 -> 16 0 24 3922 topology 4005 5210 +> 15 0 23 3922 topology 4059 5209 +> 16 0 23 3922 topology 4092 5209 +> 15 0 23 3922 topology 4063 5210 +> 16 0 23 3922 topology 4092 5210 > 15 0 23 3922 topology 4062 5211 > 16 0 23 3922 topology 4092 5211 -> 15 0 23 3922 topology 3949 5212 +> 15 0 23 3922 topology 4066 5212 > 16 0 23 3922 topology 4092 5212 -> 15 0 24 3922 topology 3950 5213 -> 16 0 24 3922 topology 3952 5213 -> 15 0 24 3922 topology 4088 5214 -> 16 0 24 3922 topology 4089 5214 -> 15 0 24 3922 topology 4064 5215 -> 16 0 24 3922 topology 4065 5215 -> 15 0 24 3922 topology 3929 5216 -> 16 0 24 3922 topology 3931 5216 -> 15 0 24 3922 topology 3956 5217 -> 16 0 24 3922 topology 3958 5217 -> 15 0 24 3922 topology 4013 5218 -> 16 0 24 3922 topology 4015 5218 -> 15 0 24 3922 topology 3962 5219 -> 16 0 24 3922 topology 3964 5219 -> 15 0 24 3922 topology 4070 5220 -> 16 0 24 3922 topology 4072 5220 -> 15 0 23 3922 topology 3939 5221 +> 15 0 23 3922 topology 4065 5213 +> 16 0 23 3922 topology 4092 5213 +> 15 0 23 3922 topology 4069 5214 +> 16 0 23 3922 topology 4092 5214 +> 15 0 23 3922 topology 4068 5215 +> 16 0 23 3922 topology 4092 5215 +> 15 0 23 3922 topology 3934 5216 +> 16 0 23 3922 topology 4092 5216 +> 15 0 23 3922 topology 3933 5217 +> 16 0 23 3922 topology 4092 5217 +> 15 0 23 3922 topology 4072 5218 +> 16 0 23 3922 topology 4092 5218 +> 15 0 23 3922 topology 4071 5219 +> 16 0 23 3922 topology 4092 5219 +> 15 0 23 3922 topology 4075 5220 +> 16 0 23 3922 topology 4092 5220 +> 15 0 23 3922 topology 4074 5221 > 16 0 23 3922 topology 4092 5221 -> 15 0 23 3922 topology 3985 5222 +> 15 0 23 3922 topology 4078 5222 > 16 0 23 3922 topology 4092 5222 -> 15 0 24 3922 topology 4019 5223 -> 16 0 24 3922 topology 4021 5223 -> 15 0 24 3922 topology 3968 5224 -> 16 0 24 3922 topology 3970 5224 -> 15 0 24 3922 topology 4076 5225 -> 16 0 24 3922 topology 4078 5225 -> 15 0 24 3922 topology 3923 5226 -> 16 0 24 3922 topology 3924 5226 -> 15 0 23 3922 topology 4021 5227 +> 15 0 23 3922 topology 4077 5223 +> 16 0 23 3922 topology 4092 5223 +> 15 0 23 3922 topology 4081 5224 +> 16 0 23 3922 topology 4092 5224 +> 15 0 23 3922 topology 4080 5225 +> 16 0 23 3922 topology 4092 5225 +> 15 0 23 3922 topology 4084 5226 +> 16 0 23 3922 topology 4092 5226 +> 15 0 23 3922 topology 4083 5227 > 16 0 23 3922 topology 4092 5227 -> 15 0 24 3922 topology 4025 5228 -> 16 0 24 3922 topology 4027 5228 -> 15 0 23 3922 topology 3973 5229 +> 15 0 23 3922 topology 4087 5228 +> 16 0 23 3922 topology 4092 5228 +> 15 0 23 3922 topology 4086 5229 > 16 0 23 3922 topology 4092 5229 -> 15 0 24 3922 topology 3974 5230 -> 16 0 24 3922 topology 3976 5230 -> 15 0 23 3922 topology 4057 5231 +> 15 0 23 3922 topology 4090 5230 +> 16 0 23 3922 topology 4092 5230 +> 15 0 23 3922 topology 4089 5231 > 16 0 23 3922 topology 4092 5231 -> 15 0 24 3922 topology 4082 5232 -> 16 0 24 3922 topology 4084 5232 -> 15 0 23 3922 topology 4009 5233 +> 15 0 23 3922 topology 3937 5232 +> 16 0 23 3922 topology 4092 5232 +> 15 0 23 3922 topology 3936 5233 > 16 0 23 3922 topology 4092 5233 -> 15 0 24 3922 topology 4031 5234 -> 16 0 24 3922 topology 4033 5234 -> 15 0 24 3922 topology 4088 5235 -> 16 0 24 3922 topology 4090 5235 -> 15 0 24 3922 topology 4037 5236 -> 16 0 24 3922 topology 4039 5236 -> 15 0 23 3922 topology 3987 5237 +> 15 0 23 3922 topology 3940 5234 +> 16 0 23 3922 topology 4092 5234 +> 15 0 23 3922 topology 3939 5235 +> 16 0 23 3922 topology 4092 5235 +> 15 0 23 3922 topology 3943 5236 +> 16 0 23 3922 topology 4092 5236 +> 15 0 23 3922 topology 3942 5237 > 16 0 23 3922 topology 4092 5237 -> 15 0 23 3922 topology 4047 5238 +> 15 0 23 3922 topology 3946 5238 > 16 0 23 3922 topology 4092 5238 -> 15 0 23 3922 topology 3969 5239 +> 15 0 23 3922 topology 3945 5239 > 16 0 23 3922 topology 4092 5239 -> 15 0 23 3922 topology 4029 5240 +> 15 0 23 3922 topology 3949 5240 > 16 0 23 3922 topology 4092 5240 -> 15 0 24 3922 topology 3947 5241 -> 16 0 24 3922 topology 3948 5241 -> 15 0 23 3922 topology 3940 5242 -> 16 0 23 3922 topology 4092 5242 -> 15 0 23 3922 topology 4089 5243 -> 16 0 23 3922 topology 4092 5243 -> 15 0 23 3922 topology 3924 5244 -> 16 0 23 3922 topology 4092 5244 -> 15 0 23 3922 topology 4012 5245 -> 16 0 23 3922 topology 4092 5245 -> 15 0 24 3922 topology 3938 5246 -> 16 0 24 3922 topology 3940 5246 -> 15 0 23 3922 topology 3964 5247 -> 16 0 23 3922 topology 4092 5247 -> 15 0 23 3922 topology 4048 5248 -> 16 0 23 3922 topology 4092 5248 -> 15 0 23 3922 topology 3948 5249 -> 16 0 23 3922 topology 4092 5249 -> 15 0 23 3922 topology 4000 5250 -> 16 0 23 3922 topology 4092 5250 -> 15 0 24 3922 topology 3926 5251 -> 16 0 24 3922 topology 3927 5251 -> 15 0 23 3922 topology 4084 5252 -> 16 0 23 3922 topology 4092 5252 -> 15 0 24 3922 topology 3983 5253 -> 16 0 24 3922 topology 3984 5253 -> 15 0 23 3922 topology 4036 5254 -> 16 0 23 3922 topology 4092 5254 -> 15 0 24 3922 topology 3959 5255 -> 16 0 24 3922 topology 3960 5255 -> 15 0 24 3922 topology 4043 5256 -> 16 0 24 3922 topology 4044 5256 -> 15 0 23 3922 topology 3954 5257 -> 16 0 23 3922 topology 4092 5257 -> 15 0 24 3922 topology 4019 5258 -> 16 0 24 3922 topology 4020 5258 -> 15 0 23 3922 topology 4014 5259 -> 16 0 23 3922 topology 4092 5259 -> 15 0 24 3922 topology 3995 5260 -> 16 0 24 3922 topology 3996 5260 -> 15 0 23 3922 topology 3931 5261 -> 16 0 23 3922 topology 4092 5261 -> 15 0 23 3922 topology 4074 5262 -> 16 0 23 3922 topology 4092 5262 -> 15 0 23 3922 topology 3996 5263 -> 16 0 23 3922 topology 4092 5263 -> 15 0 24 3922 topology 3971 5264 -> 16 0 24 3922 topology 3972 5264 -> 15 0 24 3922 topology 4079 5265 -> 16 0 24 3922 topology 4080 5265 -> 15 0 23 3922 topology 4056 5266 -> 16 0 23 3922 topology 4092 5266 -> 15 0 24 3922 topology 4055 5267 -> 16 0 24 3922 topology 4056 5267 -> 15 0 23 3922 topology 3978 5268 -> 16 0 23 3922 topology 4092 5268 -> 15 0 24 3922 topology 4031 5269 -> 16 0 24 3922 topology 4032 5269 -> 15 0 23 3922 topology 4038 5270 -> 16 0 23 3922 topology 4092 5270 -> 15 0 24 3922 topology 3923 5271 -> 16 0 24 3922 topology 3925 5271 -> 15 0 24 3922 topology 4007 5272 -> 16 0 24 3922 topology 4008 5272 -> 15 0 24 3922 topology 3983 5273 -> 16 0 24 3922 topology 3985 5273 -> 15 0 24 3922 topology 4067 5274 -> 16 0 24 3922 topology 4068 5274 -> 15 0 24 3922 topology 4040 5275 -> 16 0 24 3922 topology 4042 5275 -> 15 0 24 3922 topology 3989 5276 -> 16 0 24 3922 topology 3991 5276 -> 15 0 23 3922 topology 3933 5277 -> 16 0 23 3922 topology 4092 5277 -> 15 0 23 3922 topology 3955 5278 -> 16 0 23 3922 topology 4092 5278 -> 15 0 24 3922 topology 4046 5279 -> 16 0 24 3922 topology 4048 5279 -> 15 0 24 3922 topology 3995 5280 -> 16 0 24 3922 topology 3997 5280 -> 15 0 23 3922 topology 3991 5281 -> 16 0 23 3922 topology 4092 5281 -> 15 0 23 3922 topology 4075 5282 -> 16 0 23 3922 topology 4092 5282 -> 15 0 24 3922 topology 4052 5283 -> 16 0 24 3922 topology 4054 5283 -> 15 0 23 3922 topology 4027 5284 -> 16 0 23 3922 topology 4092 5284 -> 15 0 24 3922 topology 4001 5285 -> 16 0 24 3922 topology 4003 5285 -> 15 0 24 3922 topology 3947 5286 -> 16 0 24 3922 topology 3949 5286 -> 15 0 23 3922 topology 3979 5287 -> 16 0 23 3922 topology 4092 5287 -> 15 0 24 3922 topology 3929 5288 -> 16 0 24 3922 topology 3930 5288 -> 15 0 23 3922 topology 4063 5289 -> 16 0 23 3922 topology 4092 5289 -> 15 0 24 3922 topology 4058 5290 -> 16 0 24 3922 topology 4060 5290 -> 15 0 24 3922 topology 4007 5291 -> 16 0 24 3922 topology 4009 5291 -> 15 0 23 3922 topology 3981 5292 -> 16 0 23 3922 topology 4092 5292 -> 15 0 24 3922 topology 4064 5293 -> 16 0 24 3922 topology 4066 5293 -> 15 0 23 3922 topology 4041 5294 -> 16 0 23 3922 topology 4092 5294 -> 15 0 23 3922 topology 3963 5295 -> 16 0 23 3922 topology 4092 5295 -> 15 0 23 3922 topology 4023 5296 -> 16 0 23 3922 topology 4092 5296 -> 15 0 23 3922 topology 4083 5297 -> 16 0 23 3922 topology 4092 5297 -> 15 0 23 3922 topology 4005 5298 -> 16 0 23 3922 topology 4092 5298 -> 15 0 23 3922 topology 3946 5299 -> 16 0 23 3922 topology 4092 5299 -> 15 0 23 3922 topology 4065 5300 -> 16 0 23 3922 topology 4092 5300 -> 15 0 24 3922 topology 3932 5301 -> 16 0 24 3922 topology 3934 5301 -> 15 0 25 3922 topology 4091 5302 -> 16 0 25 3922 topology 4092 5302 -> 15 0 23 3922 topology 3982 5303 -> 16 0 23 3922 topology 4092 5303 -> 15 0 23 3922 topology 3942 5304 -> 16 0 23 3922 topology 4092 5304 -> 15 0 23 3922 topology 4018 5305 -> 16 0 23 3922 topology 4092 5305 -> 15 0 24 3922 topology 3950 5306 -> 16 0 24 3922 topology 3951 5306 -> 15 0 23 3922 topology 3970 5307 -> 16 0 23 3922 topology 4092 5307 -> 15 0 23 3922 topology 4054 5308 -> 16 0 23 3922 topology 4092 5308 -> 15 0 24 3922 topology 4010 5309 -> 16 0 24 3922 topology 4011 5309 -> 15 0 23 3922 topology 4006 5310 -> 16 0 23 3922 topology 4092 5310 -> 15 0 23 3922 topology 4090 5311 -> 16 0 23 3922 topology 4092 5311 -> 15 0 24 3922 topology 3986 5312 -> 16 0 24 3922 topology 3987 5312 -> 15 0 24 3922 topology 3932 5313 -> 16 0 24 3922 topology 3933 5313 -> 15 0 24 3922 topology 3962 5314 -> 16 0 24 3922 topology 3963 5314 -> 15 0 24 3922 topology 4070 5315 -> 16 0 24 3922 topology 4071 5315 -> 15 0 24 3922 topology 4046 5316 -> 16 0 24 3922 topology 4047 5316 -> 15 0 24 3922 topology 4022 5317 -> 16 0 24 3922 topology 4023 5317 -> 15 0 23 3922 topology 3990 5318 -> 16 0 23 3922 topology 4092 5318 -> 15 0 23 3922 topology 4050 5319 -> 16 0 23 3922 topology 4092 5319 -> 15 0 24 3922 topology 3998 5320 -> 16 0 24 3922 topology 3999 5320 -> 15 0 23 3922 topology 3972 5321 -> 16 0 23 3922 topology 4092 5321 -> 15 0 23 3922 topology 3937 5322 -> 16 0 23 3922 topology 4092 5322 -> 15 0 24 3922 topology 3974 5323 -> 16 0 24 3922 topology 3975 5323 -> 15 0 24 3922 topology 4082 5324 -> 16 0 24 3922 topology 4083 5324 -> 15 0 23 3922 topology 4032 5325 -> 16 0 23 3922 topology 4092 5325 -> 15 0 24 3922 topology 4058 5326 -> 16 0 24 3922 topology 4059 5326 -> 15 0 24 3922 topology 4034 5327 -> 16 0 24 3922 topology 4035 5327 -> 15 0 24 3922 topology 3953 5328 -> 16 0 24 3922 topology 3955 5328 -> 15 0 24 3922 topology 4010 5329 -> 16 0 24 3922 topology 4012 5329 -> 15 0 24 3922 topology 3959 5330 -> 16 0 24 3922 topology 3961 5330 -> 15 0 23 3922 topology 3927 5331 -> 16 0 23 3922 topology 4092 5331 -> 15 0 24 3922 topology 4016 5332 -> 16 0 24 3922 topology 4018 5332 -> 15 0 24 3922 topology 3965 5333 -> 16 0 24 3922 topology 3967 5333 -> 15 0 24 3922 topology 4073 5334 -> 16 0 24 3922 topology 4075 5334 -> 15 0 23 3922 topology 3961 5335 -> 16 0 23 3922 topology 4092 5335 -> 15 0 23 3922 topology 4045 5336 -> 16 0 23 3922 topology 4092 5336 -> 15 0 24 3922 topology 4022 5337 -> 16 0 24 3922 topology 4024 5337 -> 15 0 24 3922 topology 3941 5338 -> 16 0 24 3922 topology 3943 5338 -> 15 0 23 3922 topology 3997 5339 -> 16 0 23 3922 topology 4092 5339 -> 15 0 24 3922 topology 3971 5340 -> 16 0 24 3922 topology 3973 5340 -> 15 0 24 3922 topology 4079 5341 -> 16 0 24 3922 topology 4081 5341 -> 15 0 23 3922 topology 4081 5342 -> 16 0 23 3922 topology 4092 5342 -> 15 0 24 3922 topology 4028 5343 -> 16 0 24 3922 topology 4030 5343 -> 15 0 23 3922 topology 4033 5344 -> 16 0 23 3922 topology 4092 5344 -> 15 0 24 3922 topology 3977 5345 -> 16 0 24 3922 topology 3979 5345 -> 15 0 24 3922 topology 4085 5346 -> 16 0 24 3922 topology 4087 5346 -> 15 0 24 3922 topology 4034 5347 -> 16 0 24 3922 topology 4036 5347 -> 15 0 23 3922 topology 4069 5348 -> 16 0 23 3922 topology 4092 5348 -> 15 0 24 3922 topology 3935 5349 -> 16 0 24 3922 topology 3936 5349 -> 15 0 23 3922 topology 3957 5350 -> 16 0 23 3922 topology 4092 5350 -> 15 0 23 3922 topology 4017 5351 -> 16 0 23 3922 topology 4092 5351 -> 15 0 23 3922 topology 3928 5352 -> 16 0 23 3922 topology 4092 5352 -> 15 0 23 3922 topology 4077 5353 -> 16 0 23 3922 topology 4092 5353 -> 15 0 23 3922 topology 3999 5354 -> 16 0 23 3922 topology 4092 5354 -> 15 0 23 4094 topology 4130 5355 +> 15 0 23 3922 topology 3948 5241 +> 16 0 23 3922 topology 4092 5241 +> 15 0 24 3922 topology 4091 5242 +> 16 0 24 3922 topology 4092 5242 +> 15 0 25 3922 topology 3950 5243 +> 16 0 25 3922 topology 3952 5243 +> 15 0 25 3922 topology 3950 5244 +> 16 0 25 3922 topology 3951 5244 +> 15 0 25 3922 topology 3953 5245 +> 16 0 25 3922 topology 3955 5245 +> 15 0 25 3922 topology 3953 5246 +> 16 0 25 3922 topology 3954 5246 +> 15 0 25 3922 topology 3956 5247 +> 16 0 25 3922 topology 3958 5247 +> 15 0 25 3922 topology 3956 5248 +> 16 0 25 3922 topology 3957 5248 +> 15 0 25 3922 topology 3959 5249 +> 16 0 25 3922 topology 3961 5249 +> 15 0 25 3922 topology 3959 5250 +> 16 0 25 3922 topology 3960 5250 +> 15 0 25 3922 topology 3962 5251 +> 16 0 25 3922 topology 3964 5251 +> 15 0 25 3922 topology 3962 5252 +> 16 0 25 3922 topology 3963 5252 +> 15 0 25 3922 topology 3965 5253 +> 16 0 25 3922 topology 3967 5253 +> 15 0 25 3922 topology 3965 5254 +> 16 0 25 3922 topology 3966 5254 +> 15 0 25 3922 topology 3968 5255 +> 16 0 25 3922 topology 3970 5255 +> 15 0 25 3922 topology 3968 5256 +> 16 0 25 3922 topology 3969 5256 +> 15 0 25 3922 topology 3971 5257 +> 16 0 25 3922 topology 3973 5257 +> 15 0 25 3922 topology 3971 5258 +> 16 0 25 3922 topology 3972 5258 +> 15 0 25 3922 topology 3974 5259 +> 16 0 25 3922 topology 3976 5259 +> 15 0 25 3922 topology 3974 5260 +> 16 0 25 3922 topology 3975 5260 +> 15 0 25 3922 topology 3977 5261 +> 16 0 25 3922 topology 3979 5261 +> 15 0 25 3922 topology 3977 5262 +> 16 0 25 3922 topology 3978 5262 +> 15 0 25 3922 topology 3923 5263 +> 16 0 25 3922 topology 3925 5263 +> 15 0 25 3922 topology 3923 5264 +> 16 0 25 3922 topology 3924 5264 +> 15 0 25 3922 topology 3980 5265 +> 16 0 25 3922 topology 3982 5265 +> 15 0 25 3922 topology 3980 5266 +> 16 0 25 3922 topology 3981 5266 +> 15 0 25 3922 topology 3983 5267 +> 16 0 25 3922 topology 3985 5267 +> 15 0 25 3922 topology 3983 5268 +> 16 0 25 3922 topology 3984 5268 +> 15 0 25 3922 topology 3986 5269 +> 16 0 25 3922 topology 3988 5269 +> 15 0 25 3922 topology 3986 5270 +> 16 0 25 3922 topology 3987 5270 +> 15 0 25 3922 topology 3989 5271 +> 16 0 25 3922 topology 3991 5271 +> 15 0 25 3922 topology 3989 5272 +> 16 0 25 3922 topology 3990 5272 +> 15 0 25 3922 topology 3992 5273 +> 16 0 25 3922 topology 3994 5273 +> 15 0 25 3922 topology 3992 5274 +> 16 0 25 3922 topology 3993 5274 +> 15 0 25 3922 topology 3995 5275 +> 16 0 25 3922 topology 3997 5275 +> 15 0 25 3922 topology 3995 5276 +> 16 0 25 3922 topology 3996 5276 +> 15 0 25 3922 topology 3998 5277 +> 16 0 25 3922 topology 4000 5277 +> 15 0 25 3922 topology 3998 5278 +> 16 0 25 3922 topology 3999 5278 +> 15 0 25 3922 topology 4001 5279 +> 16 0 25 3922 topology 4003 5279 +> 15 0 25 3922 topology 4001 5280 +> 16 0 25 3922 topology 4002 5280 +> 15 0 25 3922 topology 4004 5281 +> 16 0 25 3922 topology 4006 5281 +> 15 0 25 3922 topology 4004 5282 +> 16 0 25 3922 topology 4005 5282 +> 15 0 25 3922 topology 4007 5283 +> 16 0 25 3922 topology 4009 5283 +> 15 0 25 3922 topology 4007 5284 +> 16 0 25 3922 topology 4008 5284 +> 15 0 25 3922 topology 3926 5285 +> 16 0 25 3922 topology 3928 5285 +> 15 0 25 3922 topology 3926 5286 +> 16 0 25 3922 topology 3927 5286 +> 15 0 25 3922 topology 4010 5287 +> 16 0 25 3922 topology 4012 5287 +> 15 0 25 3922 topology 4010 5288 +> 16 0 25 3922 topology 4011 5288 +> 15 0 25 3922 topology 4013 5289 +> 16 0 25 3922 topology 4015 5289 +> 15 0 25 3922 topology 4013 5290 +> 16 0 25 3922 topology 4014 5290 +> 15 0 25 3922 topology 4016 5291 +> 16 0 25 3922 topology 4018 5291 +> 15 0 25 3922 topology 4016 5292 +> 16 0 25 3922 topology 4017 5292 +> 15 0 25 3922 topology 4019 5293 +> 16 0 25 3922 topology 4021 5293 +> 15 0 25 3922 topology 4019 5294 +> 16 0 25 3922 topology 4020 5294 +> 15 0 25 3922 topology 4022 5295 +> 16 0 25 3922 topology 4024 5295 +> 15 0 25 3922 topology 4022 5296 +> 16 0 25 3922 topology 4023 5296 +> 15 0 25 3922 topology 4025 5297 +> 16 0 25 3922 topology 4027 5297 +> 15 0 25 3922 topology 4025 5298 +> 16 0 25 3922 topology 4026 5298 +> 15 0 25 3922 topology 4028 5299 +> 16 0 25 3922 topology 4030 5299 +> 15 0 25 3922 topology 4028 5300 +> 16 0 25 3922 topology 4029 5300 +> 15 0 25 3922 topology 4031 5301 +> 16 0 25 3922 topology 4033 5301 +> 15 0 25 3922 topology 4031 5302 +> 16 0 25 3922 topology 4032 5302 +> 15 0 25 3922 topology 4034 5303 +> 16 0 25 3922 topology 4036 5303 +> 15 0 25 3922 topology 4034 5304 +> 16 0 25 3922 topology 4035 5304 +> 15 0 25 3922 topology 4037 5305 +> 16 0 25 3922 topology 4039 5305 +> 15 0 25 3922 topology 4037 5306 +> 16 0 25 3922 topology 4038 5306 +> 15 0 25 3922 topology 3929 5307 +> 16 0 25 3922 topology 3931 5307 +> 15 0 25 3922 topology 3929 5308 +> 16 0 25 3922 topology 3930 5308 +> 15 0 25 3922 topology 4040 5309 +> 16 0 25 3922 topology 4042 5309 +> 15 0 25 3922 topology 4040 5310 +> 16 0 25 3922 topology 4041 5310 +> 15 0 25 3922 topology 4043 5311 +> 16 0 25 3922 topology 4045 5311 +> 15 0 25 3922 topology 4043 5312 +> 16 0 25 3922 topology 4044 5312 +> 15 0 25 3922 topology 4046 5313 +> 16 0 25 3922 topology 4048 5313 +> 15 0 25 3922 topology 4046 5314 +> 16 0 25 3922 topology 4047 5314 +> 15 0 25 3922 topology 4049 5315 +> 16 0 25 3922 topology 4051 5315 +> 15 0 25 3922 topology 4049 5316 +> 16 0 25 3922 topology 4050 5316 +> 15 0 25 3922 topology 4052 5317 +> 16 0 25 3922 topology 4054 5317 +> 15 0 25 3922 topology 4052 5318 +> 16 0 25 3922 topology 4053 5318 +> 15 0 25 3922 topology 4055 5319 +> 16 0 25 3922 topology 4057 5319 +> 15 0 25 3922 topology 4055 5320 +> 16 0 25 3922 topology 4056 5320 +> 15 0 25 3922 topology 4058 5321 +> 16 0 25 3922 topology 4060 5321 +> 15 0 25 3922 topology 4058 5322 +> 16 0 25 3922 topology 4059 5322 +> 15 0 25 3922 topology 4061 5323 +> 16 0 25 3922 topology 4063 5323 +> 15 0 25 3922 topology 4061 5324 +> 16 0 25 3922 topology 4062 5324 +> 15 0 25 3922 topology 4064 5325 +> 16 0 25 3922 topology 4066 5325 +> 15 0 25 3922 topology 4064 5326 +> 16 0 25 3922 topology 4065 5326 +> 15 0 25 3922 topology 4067 5327 +> 16 0 25 3922 topology 4069 5327 +> 15 0 25 3922 topology 4067 5328 +> 16 0 25 3922 topology 4068 5328 +> 15 0 25 3922 topology 3932 5329 +> 16 0 25 3922 topology 3934 5329 +> 15 0 25 3922 topology 3932 5330 +> 16 0 25 3922 topology 3933 5330 +> 15 0 25 3922 topology 4070 5331 +> 16 0 25 3922 topology 4072 5331 +> 15 0 25 3922 topology 4070 5332 +> 16 0 25 3922 topology 4071 5332 +> 15 0 25 3922 topology 4073 5333 +> 16 0 25 3922 topology 4075 5333 +> 15 0 25 3922 topology 4073 5334 +> 16 0 25 3922 topology 4074 5334 +> 15 0 25 3922 topology 4076 5335 +> 16 0 25 3922 topology 4078 5335 +> 15 0 25 3922 topology 4076 5336 +> 16 0 25 3922 topology 4077 5336 +> 15 0 25 3922 topology 4079 5337 +> 16 0 25 3922 topology 4081 5337 +> 15 0 25 3922 topology 4079 5338 +> 16 0 25 3922 topology 4080 5338 +> 15 0 25 3922 topology 4082 5339 +> 16 0 25 3922 topology 4084 5339 +> 15 0 25 3922 topology 4082 5340 +> 16 0 25 3922 topology 4083 5340 +> 15 0 25 3922 topology 4085 5341 +> 16 0 25 3922 topology 4087 5341 +> 15 0 25 3922 topology 4085 5342 +> 16 0 25 3922 topology 4086 5342 +> 15 0 25 3922 topology 4088 5343 +> 16 0 25 3922 topology 4090 5343 +> 15 0 25 3922 topology 4088 5344 +> 16 0 25 3922 topology 4089 5344 +> 15 0 25 3922 topology 3935 5345 +> 16 0 25 3922 topology 3937 5345 +> 15 0 25 3922 topology 3935 5346 +> 16 0 25 3922 topology 3936 5346 +> 15 0 25 3922 topology 3938 5347 +> 16 0 25 3922 topology 3940 5347 +> 15 0 25 3922 topology 3938 5348 +> 16 0 25 3922 topology 3939 5348 +> 15 0 25 3922 topology 3941 5349 +> 16 0 25 3922 topology 3943 5349 +> 15 0 25 3922 topology 3941 5350 +> 16 0 25 3922 topology 3942 5350 +> 15 0 25 3922 topology 3944 5351 +> 16 0 25 3922 topology 3946 5351 +> 15 0 25 3922 topology 3944 5352 +> 16 0 25 3922 topology 3945 5352 +> 15 0 25 3922 topology 3947 5353 +> 16 0 25 3922 topology 3949 5353 +> 15 0 25 3922 topology 3947 5354 +> 16 0 25 3922 topology 3948 5354 +> 15 0 23 4094 topology 4124 5355 > 16 0 23 4094 topology 4246 5355 -> 15 0 23 4094 topology 4114 5356 +> 15 0 23 4094 topology 4123 5356 > 16 0 23 4094 topology 4246 5356 -> 15 0 23 4094 topology 4214 5357 +> 15 0 23 4094 topology 4127 5357 > 16 0 23 4094 topology 4246 5357 -> 15 0 24 4094 topology 4167 5358 -> 16 0 24 4094 topology 4169 5358 -> 15 0 24 4094 topology 4122 5359 -> 16 0 24 4094 topology 4123 5359 -> 15 0 23 4094 topology 4166 5360 +> 15 0 23 4094 topology 4126 5358 +> 16 0 23 4094 topology 4246 5358 +> 15 0 23 4094 topology 4130 5359 +> 16 0 23 4094 topology 4246 5359 +> 15 0 23 4094 topology 4129 5360 > 16 0 23 4094 topology 4246 5360 -> 15 0 24 4094 topology 4146 5361 -> 16 0 24 4094 topology 4148 5361 -> 15 0 23 4094 topology 4202 5362 +> 15 0 23 4094 topology 4133 5361 +> 16 0 23 4094 topology 4246 5361 +> 15 0 23 4094 topology 4132 5362 > 16 0 23 4094 topology 4246 5362 -> 15 0 24 4094 topology 4155 5363 -> 16 0 24 4094 topology 4156 5363 -> 15 0 23 4094 topology 4238 5364 +> 15 0 23 4094 topology 4136 5363 +> 16 0 23 4094 topology 4246 5363 +> 15 0 23 4094 topology 4135 5364 > 16 0 23 4094 topology 4246 5364 -> 15 0 24 4094 topology 4233 5365 -> 16 0 24 4094 topology 4235 5365 -> 15 0 24 4094 topology 4188 5366 -> 16 0 24 4094 topology 4189 5366 -> 15 0 23 4094 topology 4132 5367 +> 15 0 23 4094 topology 4139 5365 +> 16 0 23 4094 topology 4246 5365 +> 15 0 23 4094 topology 4138 5366 +> 16 0 23 4094 topology 4246 5366 +> 15 0 23 4094 topology 4142 5367 > 16 0 23 4094 topology 4246 5367 -> 15 0 24 4094 topology 4221 5368 -> 16 0 24 4094 topology 4222 5368 -> 15 0 23 4094 topology 4192 5369 +> 15 0 23 4094 topology 4141 5368 +> 16 0 23 4094 topology 4246 5368 +> 15 0 23 4094 topology 4145 5369 > 16 0 23 4094 topology 4246 5369 -> 15 0 23 4094 topology 4109 5370 +> 15 0 23 4094 topology 4144 5370 > 16 0 23 4094 topology 4246 5370 -> 15 0 24 4094 topology 4146 5371 -> 16 0 24 4094 topology 4147 5371 -> 15 0 23 4094 topology 4174 5372 +> 15 0 23 4094 topology 4148 5371 +> 16 0 23 4094 topology 4246 5371 +> 15 0 23 4094 topology 4147 5372 > 16 0 23 4094 topology 4246 5372 -> 15 0 23 4094 topology 4234 5373 +> 15 0 23 4094 topology 4151 5373 > 16 0 23 4094 topology 4246 5373 -> 15 0 24 4094 topology 4179 5374 -> 16 0 24 4094 topology 4180 5374 -> 15 0 24 4094 topology 4125 5375 -> 16 0 24 4094 topology 4127 5375 -> 15 0 23 4094 topology 4099 5376 +> 15 0 23 4094 topology 4150 5374 +> 16 0 23 4094 topology 4246 5374 +> 15 0 23 4094 topology 4097 5375 +> 16 0 23 4094 topology 4246 5375 +> 15 0 23 4094 topology 4096 5376 > 16 0 23 4094 topology 4246 5376 -> 15 0 24 4094 topology 4212 5377 -> 16 0 24 4094 topology 4214 5377 -> 15 0 23 4094 topology 4157 5378 +> 15 0 23 4094 topology 4154 5377 +> 16 0 23 4094 topology 4246 5377 +> 15 0 23 4094 topology 4153 5378 > 16 0 23 4094 topology 4246 5378 -> 15 0 24 4094 topology 4191 5379 -> 16 0 24 4094 topology 4193 5379 -> 15 0 23 4094 topology 4193 5380 +> 15 0 23 4094 topology 4157 5379 +> 16 0 23 4094 topology 4246 5379 +> 15 0 23 4094 topology 4156 5380 > 16 0 23 4094 topology 4246 5380 -> 15 0 24 4094 topology 4170 5381 -> 16 0 24 4094 topology 4172 5381 -> 15 0 23 4094 topology 4145 5382 +> 15 0 23 4094 topology 4160 5381 +> 16 0 23 4094 topology 4246 5381 +> 15 0 23 4094 topology 4159 5382 > 16 0 23 4094 topology 4246 5382 -> 15 0 24 4094 topology 4152 5383 -> 16 0 24 4094 topology 4153 5383 -> 15 0 25 4094 topology 4245 5384 -> 16 0 25 4094 topology 4246 5384 -> 15 0 23 4094 topology 4229 5385 +> 15 0 23 4094 topology 4163 5383 +> 16 0 23 4094 topology 4246 5383 +> 15 0 23 4094 topology 4162 5384 +> 16 0 23 4094 topology 4246 5384 +> 15 0 23 4094 topology 4166 5385 > 16 0 23 4094 topology 4246 5385 -> 15 0 24 4094 topology 4149 5386 -> 16 0 24 4094 topology 4151 5386 -> 15 0 23 4094 topology 4181 5387 +> 15 0 23 4094 topology 4165 5386 +> 16 0 23 4094 topology 4246 5386 +> 15 0 23 4094 topology 4169 5387 > 16 0 23 4094 topology 4246 5387 -> 15 0 24 4094 topology 4104 5388 -> 16 0 24 4094 topology 4105 5388 -> 15 0 24 4094 topology 4185 5389 -> 16 0 24 4094 topology 4186 5389 -> 15 0 24 4094 topology 4236 5390 -> 16 0 24 4094 topology 4238 5390 -> 15 0 24 4094 topology 4218 5391 -> 16 0 24 4094 topology 4219 5391 -> 15 0 23 4094 topology 4159 5392 +> 15 0 23 4094 topology 4168 5388 +> 16 0 23 4094 topology 4246 5388 +> 15 0 23 4094 topology 4172 5389 +> 16 0 23 4094 topology 4246 5389 +> 15 0 23 4094 topology 4171 5390 +> 16 0 23 4094 topology 4246 5390 +> 15 0 23 4094 topology 4175 5391 +> 16 0 23 4094 topology 4246 5391 +> 15 0 23 4094 topology 4174 5392 > 16 0 23 4094 topology 4246 5392 -> 15 0 23 4094 topology 4100 5393 +> 15 0 23 4094 topology 4178 5393 > 16 0 23 4094 topology 4246 5393 -> 15 0 23 4094 topology 4219 5394 +> 15 0 23 4094 topology 4177 5394 > 16 0 23 4094 topology 4246 5394 -> 15 0 24 4094 topology 4116 5395 -> 16 0 24 4094 topology 4117 5395 -> 15 0 23 4094 topology 4141 5396 +> 15 0 23 4094 topology 4181 5395 +> 16 0 23 4094 topology 4246 5395 +> 15 0 23 4094 topology 4180 5396 > 16 0 23 4094 topology 4246 5396 -> 15 0 24 4094 topology 4143 5397 -> 16 0 24 4094 topology 4144 5397 -> 15 0 23 4094 topology 4201 5398 +> 15 0 23 4094 topology 4100 5397 +> 16 0 23 4094 topology 4246 5397 +> 15 0 23 4094 topology 4099 5398 > 16 0 23 4094 topology 4246 5398 -> 15 0 24 4094 topology 4176 5399 -> 16 0 24 4094 topology 4177 5399 -> 15 0 24 4094 topology 4209 5400 -> 16 0 24 4094 topology 4210 5400 -> 15 0 24 4094 topology 4128 5401 -> 16 0 24 4094 topology 4130 5401 -> 15 0 24 4094 topology 4215 5402 -> 16 0 24 4094 topology 4217 5402 -> 15 0 23 4094 topology 4108 5403 +> 15 0 23 4094 topology 4184 5399 +> 16 0 23 4094 topology 4246 5399 +> 15 0 23 4094 topology 4183 5400 +> 16 0 23 4094 topology 4246 5400 +> 15 0 23 4094 topology 4187 5401 +> 16 0 23 4094 topology 4246 5401 +> 15 0 23 4094 topology 4186 5402 +> 16 0 23 4094 topology 4246 5402 +> 15 0 23 4094 topology 4190 5403 > 16 0 23 4094 topology 4246 5403 -> 15 0 23 4094 topology 4184 5404 +> 15 0 23 4094 topology 4189 5404 > 16 0 23 4094 topology 4246 5404 -> 15 0 23 4094 topology 4136 5405 +> 15 0 23 4094 topology 4193 5405 > 16 0 23 4094 topology 4246 5405 -> 15 0 24 4094 topology 4194 5406 -> 16 0 24 4094 topology 4196 5406 -> 15 0 23 4094 topology 4220 5407 +> 15 0 23 4094 topology 4192 5406 +> 16 0 23 4094 topology 4246 5406 +> 15 0 23 4094 topology 4196 5407 > 16 0 23 4094 topology 4246 5407 -> 15 0 23 4094 topology 4172 5408 +> 15 0 23 4094 topology 4195 5408 > 16 0 23 4094 topology 4246 5408 -> 15 0 24 4094 topology 4173 5409 -> 16 0 24 4094 topology 4175 5409 -> 15 0 24 4094 topology 4182 5410 -> 16 0 24 4094 topology 4183 5410 -> 15 0 23 4094 topology 4208 5411 +> 15 0 23 4094 topology 4199 5409 +> 16 0 23 4094 topology 4246 5409 +> 15 0 23 4094 topology 4198 5410 +> 16 0 23 4094 topology 4246 5410 +> 15 0 23 4094 topology 4202 5411 > 16 0 23 4094 topology 4246 5411 -> 15 0 24 4094 topology 4215 5412 -> 16 0 24 4094 topology 4216 5412 -> 15 0 23 4094 topology 4126 5413 +> 15 0 23 4094 topology 4201 5412 +> 16 0 23 4094 topology 4246 5412 +> 15 0 23 4094 topology 4205 5413 > 16 0 23 4094 topology 4246 5413 -> 15 0 23 4094 topology 4186 5414 +> 15 0 23 4094 topology 4204 5414 > 16 0 23 4094 topology 4246 5414 -> 15 0 24 4094 topology 4239 5415 -> 16 0 24 4094 topology 4241 5415 -> 15 0 24 4094 topology 4140 5416 -> 16 0 24 4094 topology 4141 5416 -> 15 0 23 4094 topology 4168 5417 +> 15 0 23 4094 topology 4208 5415 +> 16 0 23 4094 topology 4246 5415 +> 15 0 23 4094 topology 4207 5416 +> 16 0 23 4094 topology 4246 5416 +> 15 0 23 4094 topology 4211 5417 > 16 0 23 4094 topology 4246 5417 -> 15 0 24 4094 topology 4173 5418 -> 16 0 24 4094 topology 4174 5418 -> 15 0 23 4094 topology 4228 5419 +> 15 0 23 4094 topology 4210 5418 +> 16 0 23 4094 topology 4246 5418 +> 15 0 23 4094 topology 4103 5419 > 16 0 23 4094 topology 4246 5419 -> 15 0 23 4094 topology 4115 5420 +> 15 0 23 4094 topology 4102 5420 > 16 0 23 4094 topology 4246 5420 -> 15 0 23 4094 topology 4150 5421 +> 15 0 23 4094 topology 4214 5421 > 16 0 23 4094 topology 4246 5421 -> 15 0 23 4094 topology 4210 5422 +> 15 0 23 4094 topology 4213 5422 > 16 0 23 4094 topology 4246 5422 -> 15 0 24 4094 topology 4206 5423 -> 16 0 24 4094 topology 4207 5423 -> 15 0 24 4094 topology 4152 5424 -> 16 0 24 4094 topology 4154 5424 -> 15 0 24 4094 topology 4239 5425 -> 16 0 24 4094 topology 4240 5425 -> 15 0 24 4094 topology 4131 5426 -> 16 0 24 4094 topology 4133 5426 -> 15 0 23 4094 topology 4127 5427 +> 15 0 23 4094 topology 4217 5423 +> 16 0 23 4094 topology 4246 5423 +> 15 0 23 4094 topology 4216 5424 +> 16 0 23 4094 topology 4246 5424 +> 15 0 23 4094 topology 4220 5425 +> 16 0 23 4094 topology 4246 5425 +> 15 0 23 4094 topology 4219 5426 +> 16 0 23 4094 topology 4246 5426 +> 15 0 23 4094 topology 4223 5427 > 16 0 23 4094 topology 4246 5427 -> 15 0 24 4094 topology 4218 5428 -> 16 0 24 4094 topology 4220 5428 -> 15 0 23 4094 topology 4117 5429 +> 15 0 23 4094 topology 4222 5428 +> 16 0 23 4094 topology 4246 5428 +> 15 0 23 4094 topology 4226 5429 > 16 0 23 4094 topology 4246 5429 -> 15 0 23 4094 topology 4163 5430 +> 15 0 23 4094 topology 4225 5430 > 16 0 23 4094 topology 4246 5430 -> 15 0 24 4094 topology 4197 5431 -> 16 0 24 4094 topology 4199 5431 -> 15 0 23 4094 topology 4199 5432 +> 15 0 23 4094 topology 4229 5431 +> 16 0 23 4094 topology 4246 5431 +> 15 0 23 4094 topology 4228 5432 > 16 0 23 4094 topology 4246 5432 -> 15 0 24 4094 topology 4101 5433 -> 16 0 24 4094 topology 4102 5433 -> 15 0 23 4094 topology 4151 5434 +> 15 0 23 4094 topology 4232 5433 +> 16 0 23 4094 topology 4246 5433 +> 15 0 23 4094 topology 4231 5434 > 16 0 23 4094 topology 4246 5434 -> 15 0 24 4094 topology 4176 5435 -> 16 0 24 4094 topology 4178 5435 -> 15 0 23 4094 topology 4235 5436 +> 15 0 23 4094 topology 4235 5435 +> 16 0 23 4094 topology 4246 5435 +> 15 0 23 4094 topology 4234 5436 > 16 0 23 4094 topology 4246 5436 -> 15 0 24 4094 topology 4212 5437 -> 16 0 24 4094 topology 4213 5437 -> 15 0 23 4094 topology 4153 5438 +> 15 0 23 4094 topology 4238 5437 +> 16 0 23 4094 topology 4246 5437 +> 15 0 23 4094 topology 4237 5438 > 16 0 23 4094 topology 4246 5438 -> 15 0 24 4094 topology 4137 5439 -> 16 0 24 4094 topology 4138 5439 -> 15 0 23 4094 topology 4213 5440 +> 15 0 23 4094 topology 4241 5439 +> 16 0 23 4094 topology 4246 5439 +> 15 0 23 4094 topology 4240 5440 > 16 0 23 4094 topology 4246 5440 -> 15 0 24 4094 topology 4113 5441 -> 16 0 24 4094 topology 4114 5441 -> 15 0 23 4094 topology 4135 5442 +> 15 0 23 4094 topology 4106 5441 +> 16 0 23 4094 topology 4246 5441 +> 15 0 23 4094 topology 4105 5442 > 16 0 23 4094 topology 4246 5442 -> 15 0 23 4094 topology 4106 5443 +> 15 0 23 4094 topology 4244 5443 > 16 0 23 4094 topology 4246 5443 -> 15 0 24 4094 topology 4170 5444 -> 16 0 24 4094 topology 4171 5444 -> 15 0 23 4094 topology 4195 5445 +> 15 0 23 4094 topology 4243 5444 +> 16 0 23 4094 topology 4246 5444 +> 15 0 23 4094 topology 4109 5445 > 16 0 23 4094 topology 4246 5445 -> 15 0 23 4094 topology 4177 5446 +> 15 0 23 4094 topology 4108 5446 > 16 0 23 4094 topology 4246 5446 -> 15 0 24 4094 topology 4203 5447 -> 16 0 24 4094 topology 4204 5447 -> 15 0 24 4094 topology 4095 5448 -> 16 0 24 4094 topology 4097 5448 -> 15 0 23 4094 topology 4237 5449 +> 15 0 23 4094 topology 4112 5447 +> 16 0 23 4094 topology 4246 5447 +> 15 0 23 4094 topology 4111 5448 +> 16 0 23 4094 topology 4246 5448 +> 15 0 23 4094 topology 4115 5449 > 16 0 23 4094 topology 4246 5449 -> 15 0 24 4094 topology 4098 5450 -> 16 0 24 4094 topology 4100 5450 -> 15 0 24 4094 topology 4236 5451 -> 16 0 24 4094 topology 4237 5451 -> 15 0 24 4094 topology 4101 5452 -> 16 0 24 4094 topology 4103 5452 -> 15 0 24 4094 topology 4155 5453 -> 16 0 24 4094 topology 4157 5453 -> 15 0 24 4094 topology 4104 5454 -> 16 0 24 4094 topology 4106 5454 -> 15 0 23 4094 topology 4102 5455 -> 16 0 23 4094 topology 4246 5455 -> 15 0 24 4094 topology 4107 5456 -> 16 0 24 4094 topology 4109 5456 -> 15 0 24 4094 topology 4134 5457 -> 16 0 24 4094 topology 4136 5457 -> 15 0 24 4094 topology 4242 5458 -> 16 0 24 4094 topology 4244 5458 -> 15 0 23 4094 topology 4154 5459 -> 16 0 23 4094 topology 4246 5459 -> 15 0 24 4094 topology 4110 5460 -> 16 0 24 4094 topology 4112 5460 -> 15 0 24 4094 topology 4221 5461 -> 16 0 24 4094 topology 4223 5461 -> 15 0 23 4094 topology 4190 5462 -> 16 0 23 4094 topology 4246 5462 -> 15 0 24 4094 topology 4113 5463 -> 16 0 24 4094 topology 4115 5463 -> 15 0 23 4094 topology 4142 5464 -> 16 0 23 4094 topology 4246 5464 -> 15 0 24 4094 topology 4116 5465 -> 16 0 24 4094 topology 4118 5465 -> 15 0 23 4094 topology 4226 5466 -> 16 0 23 4094 topology 4246 5466 -> 15 0 24 4094 topology 4200 5467 -> 16 0 24 4094 topology 4202 5467 -> 15 0 24 4094 topology 4119 5468 -> 16 0 24 4094 topology 4121 5468 -> 15 0 23 4094 topology 4178 5469 -> 16 0 23 4094 topology 4246 5469 -> 15 0 24 4094 topology 4179 5470 -> 16 0 24 4094 topology 4181 5470 -> 15 0 24 4094 topology 4134 5471 -> 16 0 24 4094 topology 4135 5471 -> 15 0 24 4094 topology 4242 5472 -> 16 0 24 4094 topology 4243 5472 -> 15 0 23 4094 topology 4097 5473 -> 16 0 23 4094 topology 4246 5473 -> 15 0 24 4094 topology 4167 5474 -> 16 0 24 4094 topology 4168 5474 -> 15 0 23 4094 topology 4162 5475 -> 16 0 23 4094 topology 4246 5475 -> 15 0 23 4094 topology 4222 5476 -> 16 0 23 4094 topology 4246 5476 -> 15 0 23 4094 topology 4144 5477 -> 16 0 23 4094 topology 4246 5477 -> 15 0 24 4094 topology 4200 5478 -> 16 0 24 4094 topology 4201 5478 -> 15 0 23 4094 topology 4204 5479 -> 16 0 23 4094 topology 4246 5479 -> 15 0 23 4094 topology 4121 5480 -> 16 0 23 4094 topology 4246 5480 -> 15 0 24 4094 topology 4233 5481 -> 16 0 24 4094 topology 4234 5481 -> 15 0 24 4094 topology 4158 5482 -> 16 0 24 4094 topology 4160 5482 -> 15 0 24 4094 topology 4137 5483 -> 16 0 24 4094 topology 4139 5483 -> 15 0 23 4094 topology 4111 5484 -> 16 0 23 4094 topology 4246 5484 -> 15 0 23 4094 topology 4133 5485 -> 16 0 23 4094 topology 4246 5485 -> 15 0 23 4094 topology 4217 5486 -> 16 0 23 4094 topology 4246 5486 -> 15 0 24 4094 topology 4224 5487 -> 16 0 24 4094 topology 4226 5487 -> 15 0 23 4094 topology 4169 5488 -> 16 0 23 4094 topology 4246 5488 -> 15 0 24 4094 topology 4098 5489 -> 16 0 24 4094 topology 4099 5489 -> 15 0 23 4094 topology 4205 5490 -> 16 0 23 4094 topology 4246 5490 -> 15 0 24 4094 topology 4203 5491 -> 16 0 24 4094 topology 4205 5491 -> 15 0 24 4094 topology 4131 5492 -> 16 0 24 4094 topology 4132 5492 -> 15 0 23 4094 topology 4241 5493 -> 16 0 23 4094 topology 4246 5493 -> 15 0 24 4094 topology 4164 5494 -> 16 0 24 4094 topology 4165 5494 -> 15 0 23 4094 topology 4129 5495 -> 16 0 23 4094 topology 4246 5495 -> 15 0 24 4094 topology 4110 5496 -> 16 0 24 4094 topology 4111 5496 -> 15 0 23 4094 topology 4189 5497 -> 16 0 23 4094 topology 4246 5497 -> 15 0 24 4094 topology 4197 5498 -> 16 0 24 4094 topology 4198 5498 -> 15 0 23 4094 topology 4171 5499 -> 16 0 23 4094 topology 4246 5499 -> 15 0 23 4094 topology 4112 5500 -> 16 0 23 4094 topology 4246 5500 -> 15 0 23 4094 topology 4231 5501 -> 16 0 23 4094 topology 4246 5501 -> 15 0 24 4094 topology 4230 5502 -> 16 0 24 4094 topology 4231 5502 -> 15 0 24 4094 topology 4182 5503 -> 16 0 24 4094 topology 4184 5503 -> 15 0 23 4094 topology 4096 5504 -> 16 0 23 4094 topology 4246 5504 -> 15 0 24 4094 topology 4161 5505 -> 16 0 24 4094 topology 4163 5505 -> 15 0 23 4094 topology 4124 5506 -> 16 0 23 4094 topology 4246 5506 -> 15 0 23 4094 topology 4160 5507 -> 16 0 23 4094 topology 4246 5507 -> 15 0 24 4094 topology 4140 5508 -> 16 0 24 4094 topology 4142 5508 -> 15 0 23 4094 topology 4244 5509 -> 16 0 23 4094 topology 4246 5509 -> 15 0 23 4094 topology 4120 5510 -> 16 0 23 4094 topology 4246 5510 -> 15 0 23 4094 topology 4196 5511 -> 16 0 23 4094 topology 4246 5511 -> 15 0 24 4094 topology 4227 5512 -> 16 0 24 4094 topology 4229 5512 -> 15 0 23 4094 topology 4148 5513 -> 16 0 23 4094 topology 4246 5513 -> 15 0 23 4094 topology 4232 5514 -> 16 0 23 4094 topology 4246 5514 -> 15 0 24 4094 topology 4128 5515 -> 16 0 24 4094 topology 4129 5515 -> 15 0 24 4094 topology 4206 5516 -> 16 0 24 4094 topology 4208 5516 -> 15 0 24 4094 topology 4161 5517 -> 16 0 24 4094 topology 4162 5517 -> 15 0 23 4094 topology 4156 5518 -> 16 0 23 4094 topology 4246 5518 -> 15 0 23 4094 topology 4216 5519 -> 16 0 23 4094 topology 4246 5519 -> 15 0 24 4094 topology 4194 5520 -> 16 0 24 4094 topology 4195 5520 -> 15 0 23 4094 topology 4138 5521 -> 16 0 23 4094 topology 4246 5521 -> 15 0 23 4094 topology 4103 5522 -> 16 0 23 4094 topology 4246 5522 -> 15 0 23 4094 topology 4198 5523 -> 16 0 23 4094 topology 4246 5523 -> 15 0 24 4094 topology 4227 5524 -> 16 0 24 4094 topology 4228 5524 -> 15 0 23 4094 topology 4180 5525 -> 16 0 23 4094 topology 4246 5525 -> 15 0 23 4094 topology 4240 5526 -> 16 0 23 4094 topology 4246 5526 -> 15 0 24 4094 topology 4185 5527 -> 16 0 24 4094 topology 4187 5527 -> 15 0 23 4094 topology 4105 5528 -> 16 0 23 4094 topology 4246 5528 -> 15 0 24 4094 topology 4164 5529 -> 16 0 24 4094 topology 4166 5529 -> 15 0 23 4094 topology 4187 5530 -> 16 0 23 4094 topology 4246 5530 -> 15 0 23 4094 topology 4139 5531 -> 16 0 23 4094 topology 4246 5531 -> 15 0 24 4094 topology 4095 5532 -> 16 0 24 4094 topology 4096 5532 -> 15 0 23 4094 topology 4223 5533 -> 16 0 23 4094 topology 4246 5533 -> 15 0 24 4094 topology 4143 5534 -> 16 0 24 4094 topology 4145 5534 -> 15 0 24 4094 topology 4125 5535 -> 16 0 24 4094 topology 4126 5535 -> 15 0 23 4094 topology 4175 5536 -> 16 0 23 4094 topology 4246 5536 -> 15 0 24 4094 topology 4230 5537 -> 16 0 24 4094 topology 4232 5537 -> 15 0 23 4094 topology 4211 5538 -> 16 0 23 4094 topology 4246 5538 -> 15 0 24 4094 topology 4158 5539 -> 16 0 24 4094 topology 4159 5539 -> 15 0 23 4094 topology 4123 5540 -> 16 0 23 4094 topology 4246 5540 -> 15 0 24 4094 topology 4107 5541 -> 16 0 24 4094 topology 4108 5541 -> 15 0 24 4094 topology 4209 5542 -> 16 0 24 4094 topology 4211 5542 -> 15 0 24 4094 topology 4191 5543 -> 16 0 24 4094 topology 4192 5543 -> 15 0 23 4094 topology 4183 5544 -> 16 0 23 4094 topology 4246 5544 -> 15 0 23 4094 topology 4243 5545 -> 16 0 23 4094 topology 4246 5545 -> 15 0 23 4094 topology 4165 5546 -> 16 0 23 4094 topology 4246 5546 -> 15 0 24 4094 topology 4224 5547 -> 16 0 24 4094 topology 4225 5547 -> 15 0 23 4094 topology 4225 5548 -> 16 0 23 4094 topology 4246 5548 -> 15 0 23 4094 topology 4147 5549 -> 16 0 23 4094 topology 4246 5549 -> 15 0 24 4094 topology 4119 5550 -> 16 0 24 4094 topology 4120 5550 -> 15 0 23 4094 topology 4207 5551 -> 16 0 23 4094 topology 4246 5551 -> 15 0 24 4094 topology 4149 5552 -> 16 0 24 4094 topology 4150 5552 -> 15 0 23 4094 topology 4118 5553 -> 16 0 23 4094 topology 4246 5553 -> 15 0 24 4094 topology 4122 5554 -> 16 0 24 4094 topology 4124 5554 -> 15 0 24 4094 topology 4188 5555 -> 16 0 24 4094 topology 4190 5555 -> 15 0 23 4248 topology 4260 5556 +> 15 0 23 4094 topology 4114 5450 +> 16 0 23 4094 topology 4246 5450 +> 15 0 23 4094 topology 4118 5451 +> 16 0 23 4094 topology 4246 5451 +> 15 0 23 4094 topology 4117 5452 +> 16 0 23 4094 topology 4246 5452 +> 15 0 23 4094 topology 4121 5453 +> 16 0 23 4094 topology 4246 5453 +> 15 0 23 4094 topology 4120 5454 +> 16 0 23 4094 topology 4246 5454 +> 15 0 24 4094 topology 4245 5455 +> 16 0 24 4094 topology 4246 5455 +> 15 0 25 4094 topology 4122 5456 +> 16 0 25 4094 topology 4124 5456 +> 15 0 25 4094 topology 4122 5457 +> 16 0 25 4094 topology 4123 5457 +> 15 0 25 4094 topology 4125 5458 +> 16 0 25 4094 topology 4127 5458 +> 15 0 25 4094 topology 4125 5459 +> 16 0 25 4094 topology 4126 5459 +> 15 0 25 4094 topology 4128 5460 +> 16 0 25 4094 topology 4130 5460 +> 15 0 25 4094 topology 4128 5461 +> 16 0 25 4094 topology 4129 5461 +> 15 0 25 4094 topology 4131 5462 +> 16 0 25 4094 topology 4133 5462 +> 15 0 25 4094 topology 4131 5463 +> 16 0 25 4094 topology 4132 5463 +> 15 0 25 4094 topology 4134 5464 +> 16 0 25 4094 topology 4136 5464 +> 15 0 25 4094 topology 4134 5465 +> 16 0 25 4094 topology 4135 5465 +> 15 0 25 4094 topology 4137 5466 +> 16 0 25 4094 topology 4139 5466 +> 15 0 25 4094 topology 4137 5467 +> 16 0 25 4094 topology 4138 5467 +> 15 0 25 4094 topology 4140 5468 +> 16 0 25 4094 topology 4142 5468 +> 15 0 25 4094 topology 4140 5469 +> 16 0 25 4094 topology 4141 5469 +> 15 0 25 4094 topology 4143 5470 +> 16 0 25 4094 topology 4145 5470 +> 15 0 25 4094 topology 4143 5471 +> 16 0 25 4094 topology 4144 5471 +> 15 0 25 4094 topology 4146 5472 +> 16 0 25 4094 topology 4148 5472 +> 15 0 25 4094 topology 4146 5473 +> 16 0 25 4094 topology 4147 5473 +> 15 0 25 4094 topology 4149 5474 +> 16 0 25 4094 topology 4151 5474 +> 15 0 25 4094 topology 4149 5475 +> 16 0 25 4094 topology 4150 5475 +> 15 0 25 4094 topology 4095 5476 +> 16 0 25 4094 topology 4097 5476 +> 15 0 25 4094 topology 4095 5477 +> 16 0 25 4094 topology 4096 5477 +> 15 0 25 4094 topology 4152 5478 +> 16 0 25 4094 topology 4154 5478 +> 15 0 25 4094 topology 4152 5479 +> 16 0 25 4094 topology 4153 5479 +> 15 0 25 4094 topology 4155 5480 +> 16 0 25 4094 topology 4157 5480 +> 15 0 25 4094 topology 4155 5481 +> 16 0 25 4094 topology 4156 5481 +> 15 0 25 4094 topology 4158 5482 +> 16 0 25 4094 topology 4160 5482 +> 15 0 25 4094 topology 4158 5483 +> 16 0 25 4094 topology 4159 5483 +> 15 0 25 4094 topology 4161 5484 +> 16 0 25 4094 topology 4163 5484 +> 15 0 25 4094 topology 4161 5485 +> 16 0 25 4094 topology 4162 5485 +> 15 0 25 4094 topology 4164 5486 +> 16 0 25 4094 topology 4166 5486 +> 15 0 25 4094 topology 4164 5487 +> 16 0 25 4094 topology 4165 5487 +> 15 0 25 4094 topology 4167 5488 +> 16 0 25 4094 topology 4169 5488 +> 15 0 25 4094 topology 4167 5489 +> 16 0 25 4094 topology 4168 5489 +> 15 0 25 4094 topology 4170 5490 +> 16 0 25 4094 topology 4172 5490 +> 15 0 25 4094 topology 4170 5491 +> 16 0 25 4094 topology 4171 5491 +> 15 0 25 4094 topology 4173 5492 +> 16 0 25 4094 topology 4175 5492 +> 15 0 25 4094 topology 4173 5493 +> 16 0 25 4094 topology 4174 5493 +> 15 0 25 4094 topology 4176 5494 +> 16 0 25 4094 topology 4178 5494 +> 15 0 25 4094 topology 4176 5495 +> 16 0 25 4094 topology 4177 5495 +> 15 0 25 4094 topology 4179 5496 +> 16 0 25 4094 topology 4181 5496 +> 15 0 25 4094 topology 4179 5497 +> 16 0 25 4094 topology 4180 5497 +> 15 0 25 4094 topology 4098 5498 +> 16 0 25 4094 topology 4100 5498 +> 15 0 25 4094 topology 4098 5499 +> 16 0 25 4094 topology 4099 5499 +> 15 0 25 4094 topology 4182 5500 +> 16 0 25 4094 topology 4184 5500 +> 15 0 25 4094 topology 4182 5501 +> 16 0 25 4094 topology 4183 5501 +> 15 0 25 4094 topology 4185 5502 +> 16 0 25 4094 topology 4187 5502 +> 15 0 25 4094 topology 4185 5503 +> 16 0 25 4094 topology 4186 5503 +> 15 0 25 4094 topology 4188 5504 +> 16 0 25 4094 topology 4190 5504 +> 15 0 25 4094 topology 4188 5505 +> 16 0 25 4094 topology 4189 5505 +> 15 0 25 4094 topology 4191 5506 +> 16 0 25 4094 topology 4193 5506 +> 15 0 25 4094 topology 4191 5507 +> 16 0 25 4094 topology 4192 5507 +> 15 0 25 4094 topology 4194 5508 +> 16 0 25 4094 topology 4196 5508 +> 15 0 25 4094 topology 4194 5509 +> 16 0 25 4094 topology 4195 5509 +> 15 0 25 4094 topology 4197 5510 +> 16 0 25 4094 topology 4199 5510 +> 15 0 25 4094 topology 4197 5511 +> 16 0 25 4094 topology 4198 5511 +> 15 0 25 4094 topology 4200 5512 +> 16 0 25 4094 topology 4202 5512 +> 15 0 25 4094 topology 4200 5513 +> 16 0 25 4094 topology 4201 5513 +> 15 0 25 4094 topology 4203 5514 +> 16 0 25 4094 topology 4205 5514 +> 15 0 25 4094 topology 4203 5515 +> 16 0 25 4094 topology 4204 5515 +> 15 0 25 4094 topology 4206 5516 +> 16 0 25 4094 topology 4208 5516 +> 15 0 25 4094 topology 4206 5517 +> 16 0 25 4094 topology 4207 5517 +> 15 0 25 4094 topology 4209 5518 +> 16 0 25 4094 topology 4211 5518 +> 15 0 25 4094 topology 4209 5519 +> 16 0 25 4094 topology 4210 5519 +> 15 0 25 4094 topology 4101 5520 +> 16 0 25 4094 topology 4103 5520 +> 15 0 25 4094 topology 4101 5521 +> 16 0 25 4094 topology 4102 5521 +> 15 0 25 4094 topology 4212 5522 +> 16 0 25 4094 topology 4214 5522 +> 15 0 25 4094 topology 4212 5523 +> 16 0 25 4094 topology 4213 5523 +> 15 0 25 4094 topology 4215 5524 +> 16 0 25 4094 topology 4217 5524 +> 15 0 25 4094 topology 4215 5525 +> 16 0 25 4094 topology 4216 5525 +> 15 0 25 4094 topology 4218 5526 +> 16 0 25 4094 topology 4220 5526 +> 15 0 25 4094 topology 4218 5527 +> 16 0 25 4094 topology 4219 5527 +> 15 0 25 4094 topology 4221 5528 +> 16 0 25 4094 topology 4223 5528 +> 15 0 25 4094 topology 4221 5529 +> 16 0 25 4094 topology 4222 5529 +> 15 0 25 4094 topology 4224 5530 +> 16 0 25 4094 topology 4226 5530 +> 15 0 25 4094 topology 4224 5531 +> 16 0 25 4094 topology 4225 5531 +> 15 0 25 4094 topology 4227 5532 +> 16 0 25 4094 topology 4229 5532 +> 15 0 25 4094 topology 4227 5533 +> 16 0 25 4094 topology 4228 5533 +> 15 0 25 4094 topology 4230 5534 +> 16 0 25 4094 topology 4232 5534 +> 15 0 25 4094 topology 4230 5535 +> 16 0 25 4094 topology 4231 5535 +> 15 0 25 4094 topology 4233 5536 +> 16 0 25 4094 topology 4235 5536 +> 15 0 25 4094 topology 4233 5537 +> 16 0 25 4094 topology 4234 5537 +> 15 0 25 4094 topology 4236 5538 +> 16 0 25 4094 topology 4238 5538 +> 15 0 25 4094 topology 4236 5539 +> 16 0 25 4094 topology 4237 5539 +> 15 0 25 4094 topology 4239 5540 +> 16 0 25 4094 topology 4241 5540 +> 15 0 25 4094 topology 4239 5541 +> 16 0 25 4094 topology 4240 5541 +> 15 0 25 4094 topology 4104 5542 +> 16 0 25 4094 topology 4106 5542 +> 15 0 25 4094 topology 4104 5543 +> 16 0 25 4094 topology 4105 5543 +> 15 0 25 4094 topology 4242 5544 +> 16 0 25 4094 topology 4244 5544 +> 15 0 25 4094 topology 4242 5545 +> 16 0 25 4094 topology 4243 5545 +> 15 0 25 4094 topology 4107 5546 +> 16 0 25 4094 topology 4109 5546 +> 15 0 25 4094 topology 4107 5547 +> 16 0 25 4094 topology 4108 5547 +> 15 0 25 4094 topology 4110 5548 +> 16 0 25 4094 topology 4112 5548 +> 15 0 25 4094 topology 4110 5549 +> 16 0 25 4094 topology 4111 5549 +> 15 0 25 4094 topology 4113 5550 +> 16 0 25 4094 topology 4115 5550 +> 15 0 25 4094 topology 4113 5551 +> 16 0 25 4094 topology 4114 5551 +> 15 0 25 4094 topology 4116 5552 +> 16 0 25 4094 topology 4118 5552 +> 15 0 25 4094 topology 4116 5553 +> 16 0 25 4094 topology 4117 5553 +> 15 0 25 4094 topology 4119 5554 +> 16 0 25 4094 topology 4121 5554 +> 15 0 25 4094 topology 4119 5555 +> 16 0 25 4094 topology 4120 5555 +> 15 0 23 4248 topology 4278 5556 > 16 0 23 4248 topology 4385 5556 -> 15 0 23 4248 topology 4295 5557 +> 15 0 23 4248 topology 4277 5557 > 16 0 23 4248 topology 4385 5557 -> 15 0 24 4248 topology 4297 5558 -> 16 0 24 4248 topology 4298 5558 -> 15 0 24 4248 topology 4351 5559 -> 16 0 24 4248 topology 4352 5559 -> 15 0 23 4248 topology 4325 5560 +> 15 0 23 4248 topology 4281 5558 +> 16 0 23 4248 topology 4385 5558 +> 15 0 23 4248 topology 4280 5559 +> 16 0 23 4248 topology 4385 5559 +> 15 0 23 4248 topology 4284 5560 > 16 0 23 4248 topology 4385 5560 -> 15 0 24 4248 topology 4300 5561 -> 16 0 24 4248 topology 4301 5561 -> 15 0 24 4248 topology 4354 5562 -> 16 0 24 4248 topology 4355 5562 -> 15 0 23 4248 topology 4355 5563 +> 15 0 23 4248 topology 4283 5561 +> 16 0 23 4248 topology 4385 5561 +> 15 0 23 4248 topology 4287 5562 +> 16 0 23 4248 topology 4385 5562 +> 15 0 23 4248 topology 4286 5563 > 16 0 23 4248 topology 4385 5563 -> 15 0 23 4248 topology 4272 5564 +> 15 0 23 4248 topology 4290 5564 > 16 0 23 4248 topology 4385 5564 -> 15 0 24 4248 topology 4303 5565 -> 16 0 24 4248 topology 4304 5565 -> 15 0 24 4248 topology 4357 5566 -> 16 0 24 4248 topology 4358 5566 -> 15 0 24 4248 topology 4276 5567 -> 16 0 24 4248 topology 4278 5567 -> 15 0 24 4248 topology 4360 5568 -> 16 0 24 4248 topology 4361 5568 -> 15 0 24 4248 topology 4252 5569 -> 16 0 24 4248 topology 4254 5569 -> 15 0 24 4248 topology 4306 5570 -> 16 0 24 4248 topology 4308 5570 -> 15 0 24 4248 topology 4363 5571 -> 16 0 24 4248 topology 4364 5571 -> 15 0 24 4248 topology 4282 5572 -> 16 0 24 4248 topology 4284 5572 -> 15 0 24 4248 topology 4336 5573 -> 16 0 24 4248 topology 4338 5573 -> 15 0 24 4248 topology 4312 5574 -> 16 0 24 4248 topology 4314 5574 -> 15 0 24 4248 topology 4366 5575 -> 16 0 24 4248 topology 4368 5575 -> 15 0 23 4248 topology 4256 5576 +> 15 0 23 4248 topology 4289 5565 +> 16 0 23 4248 topology 4385 5565 +> 15 0 23 4248 topology 4293 5566 +> 16 0 23 4248 topology 4385 5566 +> 15 0 23 4248 topology 4292 5567 +> 16 0 23 4248 topology 4385 5567 +> 15 0 23 4248 topology 4296 5568 +> 16 0 23 4248 topology 4385 5568 +> 15 0 23 4248 topology 4295 5569 +> 16 0 23 4248 topology 4385 5569 +> 15 0 23 4248 topology 4299 5570 +> 16 0 23 4248 topology 4385 5570 +> 15 0 23 4248 topology 4298 5571 +> 16 0 23 4248 topology 4385 5571 +> 15 0 23 4248 topology 4302 5572 +> 16 0 23 4248 topology 4385 5572 +> 15 0 23 4248 topology 4301 5573 +> 16 0 23 4248 topology 4385 5573 +> 15 0 23 4248 topology 4305 5574 +> 16 0 23 4248 topology 4385 5574 +> 15 0 23 4248 topology 4304 5575 +> 16 0 23 4248 topology 4385 5575 +> 15 0 23 4248 topology 4251 5576 > 16 0 23 4248 topology 4385 5576 -> 15 0 23 4248 topology 4278 5577 +> 15 0 23 4248 topology 4250 5577 > 16 0 23 4248 topology 4385 5577 -> 15 0 24 4248 topology 4288 5578 -> 16 0 24 4248 topology 4290 5578 -> 15 0 24 4248 topology 4342 5579 -> 16 0 24 4248 topology 4344 5579 -> 15 0 24 4248 topology 4264 5580 -> 16 0 24 4248 topology 4266 5580 -> 15 0 24 4248 topology 4318 5581 -> 16 0 24 4248 topology 4320 5581 -> 15 0 23 4248 topology 4338 5582 +> 15 0 23 4248 topology 4308 5578 +> 16 0 23 4248 topology 4385 5578 +> 15 0 23 4248 topology 4307 5579 +> 16 0 23 4248 topology 4385 5579 +> 15 0 23 4248 topology 4311 5580 +> 16 0 23 4248 topology 4385 5580 +> 15 0 23 4248 topology 4310 5581 +> 16 0 23 4248 topology 4385 5581 +> 15 0 23 4248 topology 4314 5582 > 16 0 23 4248 topology 4385 5582 -> 15 0 24 4248 topology 4372 5583 -> 16 0 24 4248 topology 4374 5583 -> 15 0 23 4248 topology 4268 5584 +> 15 0 23 4248 topology 4313 5583 +> 16 0 23 4248 topology 4385 5583 +> 15 0 23 4248 topology 4317 5584 > 16 0 23 4248 topology 4385 5584 -> 15 0 23 4248 topology 4314 5585 +> 15 0 23 4248 topology 4316 5585 > 16 0 23 4248 topology 4385 5585 -> 15 0 23 4248 topology 4290 5586 +> 15 0 23 4248 topology 4320 5586 > 16 0 23 4248 topology 4385 5586 -> 15 0 24 4248 topology 4294 5587 -> 16 0 24 4248 topology 4296 5587 -> 15 0 24 4248 topology 4348 5588 -> 16 0 24 4248 topology 4350 5588 -> 15 0 23 4248 topology 4374 5589 +> 15 0 23 4248 topology 4319 5587 +> 16 0 23 4248 topology 4385 5587 +> 15 0 23 4248 topology 4323 5588 +> 16 0 23 4248 topology 4385 5588 +> 15 0 23 4248 topology 4322 5589 > 16 0 23 4248 topology 4385 5589 -> 15 0 24 4248 topology 4324 5590 -> 16 0 24 4248 topology 4326 5590 -> 15 0 23 4248 topology 4350 5591 +> 15 0 23 4248 topology 4326 5590 +> 16 0 23 4248 topology 4385 5590 +> 15 0 23 4248 topology 4325 5591 > 16 0 23 4248 topology 4385 5591 -> 15 0 24 4248 topology 4378 5592 -> 16 0 24 4248 topology 4380 5592 -> 15 0 24 4248 topology 4252 5593 -> 16 0 24 4248 topology 4253 5593 -> 15 0 23 4248 topology 4326 5594 +> 15 0 23 4248 topology 4329 5592 +> 16 0 23 4248 topology 4385 5592 +> 15 0 23 4248 topology 4328 5593 +> 16 0 23 4248 topology 4385 5593 +> 15 0 23 4248 topology 4332 5594 > 16 0 23 4248 topology 4385 5594 -> 15 0 24 4248 topology 4300 5595 -> 16 0 24 4248 topology 4302 5595 -> 15 0 23 4248 topology 4302 5596 +> 15 0 23 4248 topology 4331 5595 +> 16 0 23 4248 topology 4385 5595 +> 15 0 23 4248 topology 4335 5596 > 16 0 23 4248 topology 4385 5596 -> 15 0 24 4248 topology 4354 5597 -> 16 0 24 4248 topology 4356 5597 -> 15 0 24 4248 topology 4330 5598 -> 16 0 24 4248 topology 4332 5598 -> 15 0 23 4248 topology 4362 5599 +> 15 0 23 4248 topology 4334 5597 +> 16 0 23 4248 topology 4385 5597 +> 15 0 23 4248 topology 4254 5598 +> 16 0 23 4248 topology 4385 5598 +> 15 0 23 4248 topology 4253 5599 > 16 0 23 4248 topology 4385 5599 -> 15 0 24 4248 topology 4360 5600 -> 16 0 24 4248 topology 4362 5600 -> 15 0 23 4248 topology 4280 5601 +> 15 0 23 4248 topology 4338 5600 +> 16 0 23 4248 topology 4385 5600 +> 15 0 23 4248 topology 4337 5601 > 16 0 23 4248 topology 4385 5601 -> 15 0 24 4248 topology 4264 5602 -> 16 0 24 4248 topology 4265 5602 -> 15 0 23 4248 topology 4310 5603 +> 15 0 23 4248 topology 4341 5602 +> 16 0 23 4248 topology 4385 5602 +> 15 0 23 4248 topology 4340 5603 > 16 0 23 4248 topology 4385 5603 -> 15 0 23 4248 topology 4251 5604 +> 15 0 23 4248 topology 4344 5604 > 16 0 23 4248 topology 4385 5604 -> 15 0 23 4248 topology 4340 5605 +> 15 0 23 4248 topology 4343 5605 > 16 0 23 4248 topology 4385 5605 -> 15 0 23 4248 topology 4370 5606 +> 15 0 23 4248 topology 4347 5606 > 16 0 23 4248 topology 4385 5606 -> 15 0 23 4248 topology 4292 5607 +> 15 0 23 4248 topology 4346 5607 > 16 0 23 4248 topology 4385 5607 -> 15 0 23 4248 topology 4322 5608 +> 15 0 23 4248 topology 4350 5608 > 16 0 23 4248 topology 4385 5608 -> 15 0 23 4248 topology 4263 5609 +> 15 0 23 4248 topology 4349 5609 > 16 0 23 4248 topology 4385 5609 -> 15 0 23 4248 topology 4352 5610 +> 15 0 23 4248 topology 4353 5610 > 16 0 23 4248 topology 4385 5610 -> 15 0 23 4248 topology 4382 5611 +> 15 0 23 4248 topology 4352 5611 > 16 0 23 4248 topology 4385 5611 -> 15 0 23 4248 topology 4304 5612 +> 15 0 23 4248 topology 4356 5612 > 16 0 23 4248 topology 4385 5612 -> 15 0 23 4248 topology 4334 5613 +> 15 0 23 4248 topology 4355 5613 > 16 0 23 4248 topology 4385 5613 -> 15 0 23 4248 topology 4275 5614 +> 15 0 23 4248 topology 4359 5614 > 16 0 23 4248 topology 4385 5614 -> 15 0 23 4248 topology 4364 5615 +> 15 0 23 4248 topology 4358 5615 > 16 0 23 4248 topology 4385 5615 -> 15 0 24 4248 topology 4255 5616 -> 16 0 24 4248 topology 4257 5616 -> 15 0 23 4248 topology 4253 5617 +> 15 0 23 4248 topology 4362 5616 +> 16 0 23 4248 topology 4385 5616 +> 15 0 23 4248 topology 4361 5617 > 16 0 23 4248 topology 4385 5617 -> 15 0 23 4248 topology 4281 5618 +> 15 0 23 4248 topology 4365 5618 > 16 0 23 4248 topology 4385 5618 -> 15 0 23 4248 topology 4265 5619 +> 15 0 23 4248 topology 4364 5619 > 16 0 23 4248 topology 4385 5619 -> 15 0 23 4248 topology 4341 5620 +> 15 0 23 4248 topology 4257 5620 > 16 0 23 4248 topology 4385 5620 -> 15 0 24 4248 topology 4267 5621 -> 16 0 24 4248 topology 4269 5621 -> 15 0 23 4248 topology 4317 5622 +> 15 0 23 4248 topology 4256 5621 +> 16 0 23 4248 topology 4385 5621 +> 15 0 23 4248 topology 4368 5622 > 16 0 23 4248 topology 4385 5622 -> 15 0 24 4248 topology 4249 5623 -> 16 0 24 4248 topology 4250 5623 -> 15 0 23 4248 topology 4293 5624 +> 15 0 23 4248 topology 4367 5623 +> 16 0 23 4248 topology 4385 5623 +> 15 0 23 4248 topology 4371 5624 > 16 0 23 4248 topology 4385 5624 -> 15 0 23 4248 topology 4377 5625 +> 15 0 23 4248 topology 4370 5625 > 16 0 23 4248 topology 4385 5625 -> 15 0 24 4248 topology 4306 5626 -> 16 0 24 4248 topology 4307 5626 -> 15 0 23 4248 topology 4353 5627 +> 15 0 23 4248 topology 4374 5626 +> 16 0 23 4248 topology 4385 5626 +> 15 0 23 4248 topology 4373 5627 > 16 0 23 4248 topology 4385 5627 -> 15 0 23 4248 topology 4329 5628 +> 15 0 23 4248 topology 4377 5628 > 16 0 23 4248 topology 4385 5628 -> 15 0 23 4248 topology 4305 5629 +> 15 0 23 4248 topology 4376 5629 > 16 0 23 4248 topology 4385 5629 -> 15 0 24 4248 topology 4309 5630 -> 16 0 24 4248 topology 4310 5630 -> 15 0 24 4248 topology 4312 5631 -> 16 0 24 4248 topology 4313 5631 -> 15 0 23 4248 topology 4365 5632 +> 15 0 23 4248 topology 4380 5630 +> 16 0 23 4248 topology 4385 5630 +> 15 0 23 4248 topology 4379 5631 +> 16 0 23 4248 topology 4385 5631 +> 15 0 23 4248 topology 4383 5632 > 16 0 23 4248 topology 4385 5632 -> 15 0 24 4248 topology 4366 5633 -> 16 0 24 4248 topology 4367 5633 -> 15 0 24 4248 topology 4261 5634 -> 16 0 24 4248 topology 4262 5634 -> 15 0 23 4248 topology 4277 5635 +> 15 0 23 4248 topology 4382 5633 +> 16 0 23 4248 topology 4385 5633 +> 15 0 23 4248 topology 4260 5634 +> 16 0 23 4248 topology 4385 5634 +> 15 0 23 4248 topology 4259 5635 > 16 0 23 4248 topology 4385 5635 -> 15 0 24 4248 topology 4315 5636 -> 16 0 24 4248 topology 4316 5636 -> 15 0 24 4248 topology 4369 5637 -> 16 0 24 4248 topology 4370 5637 -> 15 0 23 4248 topology 4307 5638 +> 15 0 23 4248 topology 4263 5636 +> 16 0 23 4248 topology 4385 5636 +> 15 0 23 4248 topology 4262 5637 +> 16 0 23 4248 topology 4385 5637 +> 15 0 23 4248 topology 4266 5638 > 16 0 23 4248 topology 4385 5638 -> 15 0 24 4248 topology 4318 5639 -> 16 0 24 4248 topology 4319 5639 -> 15 0 23 4248 topology 4337 5640 +> 15 0 23 4248 topology 4265 5639 +> 16 0 23 4248 topology 4385 5639 +> 15 0 23 4248 topology 4269 5640 > 16 0 23 4248 topology 4385 5640 -> 15 0 24 4248 topology 4372 5641 -> 16 0 24 4248 topology 4373 5641 -> 15 0 23 4248 topology 4367 5642 +> 15 0 23 4248 topology 4268 5641 +> 16 0 23 4248 topology 4385 5641 +> 15 0 23 4248 topology 4272 5642 > 16 0 23 4248 topology 4385 5642 -> 15 0 23 4248 topology 4254 5643 +> 15 0 23 4248 topology 4271 5643 > 16 0 23 4248 topology 4385 5643 -> 15 0 23 4248 topology 4289 5644 +> 15 0 23 4248 topology 4275 5644 > 16 0 23 4248 topology 4385 5644 -> 15 0 24 4248 topology 4321 5645 -> 16 0 24 4248 topology 4322 5645 -> 15 0 24 4248 topology 4375 5646 -> 16 0 24 4248 topology 4376 5646 -> 15 0 23 4248 topology 4319 5647 -> 16 0 23 4248 topology 4385 5647 -> 15 0 24 4248 topology 4324 5648 -> 16 0 24 4248 topology 4325 5648 -> 15 0 23 4248 topology 4349 5649 -> 16 0 23 4248 topology 4385 5649 -> 15 0 24 4248 topology 4378 5650 -> 16 0 24 4248 topology 4379 5650 -> 15 0 23 4248 topology 4379 5651 -> 16 0 23 4248 topology 4385 5651 -> 15 0 23 4248 topology 4266 5652 -> 16 0 23 4248 topology 4385 5652 -> 15 0 24 4248 topology 4273 5653 -> 16 0 24 4248 topology 4274 5653 -> 15 0 23 4248 topology 4301 5654 -> 16 0 23 4248 topology 4385 5654 -> 15 0 24 4248 topology 4327 5655 -> 16 0 24 4248 topology 4328 5655 -> 15 0 24 4248 topology 4381 5656 -> 16 0 24 4248 topology 4382 5656 -> 15 0 23 4248 topology 4331 5657 -> 16 0 23 4248 topology 4385 5657 -> 15 0 24 4248 topology 4330 5658 -> 16 0 24 4248 topology 4331 5658 -> 15 0 23 4248 topology 4361 5659 -> 16 0 23 4248 topology 4385 5659 -> 15 0 24 4248 topology 4333 5660 -> 16 0 24 4248 topology 4334 5660 -> 15 0 24 4248 topology 4279 5661 -> 16 0 24 4248 topology 4281 5661 -> 15 0 24 4248 topology 4309 5662 -> 16 0 24 4248 topology 4311 5662 -> 15 0 23 4248 topology 4250 5663 -> 16 0 23 4248 topology 4385 5663 -> 15 0 24 4248 topology 4258 5664 -> 16 0 24 4248 topology 4260 5664 -> 15 0 24 4248 topology 4285 5665 -> 16 0 24 4248 topology 4287 5665 -> 15 0 24 4248 topology 4339 5666 -> 16 0 24 4248 topology 4341 5666 -> 15 0 24 4248 topology 4315 5667 -> 16 0 24 4248 topology 4317 5667 -> 15 0 24 4248 topology 4369 5668 -> 16 0 24 4248 topology 4371 5668 -> 15 0 23 4248 topology 4262 5669 -> 16 0 23 4248 topology 4385 5669 -> 15 0 23 4248 topology 4308 5670 -> 16 0 23 4248 topology 4385 5670 -> 15 0 23 4248 topology 4284 5671 -> 16 0 23 4248 topology 4385 5671 -> 15 0 24 4248 topology 4291 5672 -> 16 0 24 4248 topology 4293 5672 -> 15 0 24 4248 topology 4345 5673 -> 16 0 24 4248 topology 4347 5673 -> 15 0 23 4248 topology 4368 5674 -> 16 0 23 4248 topology 4385 5674 -> 15 0 24 4248 topology 4321 5675 -> 16 0 24 4248 topology 4323 5675 -> 15 0 23 4248 topology 4344 5676 -> 16 0 23 4248 topology 4385 5676 -> 15 0 24 4248 topology 4375 5677 -> 16 0 24 4248 topology 4377 5677 -> 15 0 23 4248 topology 4274 5678 -> 16 0 23 4248 topology 4385 5678 -> 15 0 23 4248 topology 4320 5679 -> 16 0 23 4248 topology 4385 5679 -> 15 0 24 4248 topology 4270 5680 -> 16 0 24 4248 topology 4272 5680 -> 15 0 23 4248 topology 4296 5681 -> 16 0 23 4248 topology 4385 5681 -> 15 0 24 4248 topology 4297 5682 -> 16 0 24 4248 topology 4299 5682 -> 15 0 24 4248 topology 4351 5683 -> 16 0 24 4248 topology 4353 5683 -> 15 0 23 4248 topology 4380 5684 -> 16 0 23 4248 topology 4385 5684 -> 15 0 24 4248 topology 4327 5685 -> 16 0 24 4248 topology 4329 5685 -> 15 0 23 4248 topology 4356 5686 -> 16 0 23 4248 topology 4385 5686 -> 15 0 24 4248 topology 4381 5687 -> 16 0 24 4248 topology 4383 5687 -> 15 0 23 4248 topology 4332 5688 -> 16 0 23 4248 topology 4385 5688 -> 15 0 24 4248 topology 4303 5689 -> 16 0 24 4248 topology 4305 5689 -> 15 0 24 4248 topology 4357 5690 -> 16 0 24 4248 topology 4359 5690 -> 15 0 24 4248 topology 4258 5691 -> 16 0 24 4248 topology 4259 5691 -> 15 0 24 4248 topology 4333 5692 -> 16 0 24 4248 topology 4335 5692 -> 15 0 24 4248 topology 4363 5693 -> 16 0 24 4248 topology 4365 5693 -> 15 0 23 4248 topology 4286 5694 -> 16 0 23 4248 topology 4385 5694 -> 15 0 23 4248 topology 4316 5695 -> 16 0 23 4248 topology 4385 5695 -> 15 0 23 4248 topology 4257 5696 -> 16 0 23 4248 topology 4385 5696 -> 15 0 23 4248 topology 4346 5697 -> 16 0 23 4248 topology 4385 5697 -> 15 0 24 4248 topology 4270 5698 -> 16 0 24 4248 topology 4271 5698 -> 15 0 23 4248 topology 4376 5699 -> 16 0 23 4248 topology 4385 5699 -> 15 0 23 4248 topology 4298 5700 -> 16 0 23 4248 topology 4385 5700 -> 15 0 23 4248 topology 4328 5701 -> 16 0 23 4248 topology 4385 5701 -> 15 0 23 4248 topology 4269 5702 -> 16 0 23 4248 topology 4385 5702 -> 15 0 23 4248 topology 4358 5703 -> 16 0 23 4248 topology 4385 5703 -> 15 0 24 4248 topology 4249 5704 -> 16 0 24 4248 topology 4251 5704 -> 15 0 25 4248 topology 4384 5705 -> 16 0 25 4248 topology 4385 5705 -> 15 0 23 4248 topology 4259 5706 -> 16 0 23 4248 topology 4385 5706 -> 15 0 24 4248 topology 4261 5707 -> 16 0 24 4248 topology 4263 5707 -> 15 0 23 4248 topology 4311 5708 -> 16 0 23 4248 topology 4385 5708 -> 15 0 23 4248 topology 4287 5709 -> 16 0 23 4248 topology 4385 5709 -> 15 0 23 4248 topology 4271 5710 -> 16 0 23 4248 topology 4385 5710 -> 15 0 23 4248 topology 4371 5711 -> 16 0 23 4248 topology 4385 5711 -> 15 0 24 4248 topology 4276 5712 -> 16 0 24 4248 topology 4277 5712 -> 15 0 23 4248 topology 4347 5713 -> 16 0 23 4248 topology 4385 5713 -> 15 0 23 4248 topology 4323 5714 -> 16 0 23 4248 topology 4385 5714 -> 15 0 24 4248 topology 4279 5715 -> 16 0 24 4248 topology 4280 5715 -> 15 0 23 4248 topology 4299 5716 -> 16 0 23 4248 topology 4385 5716 -> 15 0 24 4248 topology 4273 5717 -> 16 0 24 4248 topology 4275 5717 -> 15 0 23 4248 topology 4383 5718 -> 16 0 23 4248 topology 4385 5718 -> 15 0 24 4248 topology 4255 5719 -> 16 0 24 4248 topology 4256 5719 -> 15 0 24 4248 topology 4282 5720 -> 16 0 24 4248 topology 4283 5720 -> 15 0 24 4248 topology 4336 5721 -> 16 0 24 4248 topology 4337 5721 -> 15 0 23 4248 topology 4359 5722 -> 16 0 23 4248 topology 4385 5722 -> 15 0 23 4248 topology 4335 5723 -> 16 0 23 4248 topology 4385 5723 -> 15 0 24 4248 topology 4285 5724 -> 16 0 24 4248 topology 4286 5724 -> 15 0 24 4248 topology 4339 5725 -> 16 0 24 4248 topology 4340 5725 -> 15 0 24 4248 topology 4288 5726 -> 16 0 24 4248 topology 4289 5726 -> 15 0 24 4248 topology 4342 5727 -> 16 0 24 4248 topology 4343 5727 -> 15 0 23 4248 topology 4283 5728 -> 16 0 23 4248 topology 4385 5728 -> 15 0 24 4248 topology 4291 5729 -> 16 0 24 4248 topology 4292 5729 -> 15 0 24 4248 topology 4345 5730 -> 16 0 24 4248 topology 4346 5730 -> 15 0 23 4248 topology 4313 5731 -> 16 0 23 4248 topology 4385 5731 -> 15 0 24 4248 topology 4267 5732 -> 16 0 24 4248 topology 4268 5732 -> 15 0 24 4248 topology 4294 5733 -> 16 0 24 4248 topology 4295 5733 -> 15 0 23 4248 topology 4343 5734 -> 16 0 23 4248 topology 4385 5734 -> 15 0 24 4248 topology 4348 5735 -> 16 0 24 4248 topology 4349 5735 -> 15 0 23 4248 topology 4373 5736 -> 16 0 23 4248 topology 4385 5736 -> 15 0 27 3921 topology 4091 5737 -> 16 0 27 3921 topology 4093 5737 -> 15 0 21 3921 topology 4093 5738 -> 16 0 21 3921 topology 4386 5738 -> 15 0 26 3921 topology 4093 5739 +> 15 0 23 4248 topology 4274 5645 +> 16 0 23 4248 topology 4385 5645 +> 15 0 24 4248 topology 4384 5646 +> 16 0 24 4248 topology 4385 5646 +> 15 0 25 4248 topology 4276 5647 +> 16 0 25 4248 topology 4278 5647 +> 15 0 25 4248 topology 4276 5648 +> 16 0 25 4248 topology 4277 5648 +> 15 0 25 4248 topology 4279 5649 +> 16 0 25 4248 topology 4281 5649 +> 15 0 25 4248 topology 4279 5650 +> 16 0 25 4248 topology 4280 5650 +> 15 0 25 4248 topology 4282 5651 +> 16 0 25 4248 topology 4284 5651 +> 15 0 25 4248 topology 4282 5652 +> 16 0 25 4248 topology 4283 5652 +> 15 0 25 4248 topology 4285 5653 +> 16 0 25 4248 topology 4287 5653 +> 15 0 25 4248 topology 4285 5654 +> 16 0 25 4248 topology 4286 5654 +> 15 0 25 4248 topology 4288 5655 +> 16 0 25 4248 topology 4290 5655 +> 15 0 25 4248 topology 4288 5656 +> 16 0 25 4248 topology 4289 5656 +> 15 0 25 4248 topology 4291 5657 +> 16 0 25 4248 topology 4293 5657 +> 15 0 25 4248 topology 4291 5658 +> 16 0 25 4248 topology 4292 5658 +> 15 0 25 4248 topology 4294 5659 +> 16 0 25 4248 topology 4296 5659 +> 15 0 25 4248 topology 4294 5660 +> 16 0 25 4248 topology 4295 5660 +> 15 0 25 4248 topology 4297 5661 +> 16 0 25 4248 topology 4299 5661 +> 15 0 25 4248 topology 4297 5662 +> 16 0 25 4248 topology 4298 5662 +> 15 0 25 4248 topology 4300 5663 +> 16 0 25 4248 topology 4302 5663 +> 15 0 25 4248 topology 4300 5664 +> 16 0 25 4248 topology 4301 5664 +> 15 0 25 4248 topology 4303 5665 +> 16 0 25 4248 topology 4305 5665 +> 15 0 25 4248 topology 4303 5666 +> 16 0 25 4248 topology 4304 5666 +> 15 0 25 4248 topology 4249 5667 +> 16 0 25 4248 topology 4251 5667 +> 15 0 25 4248 topology 4249 5668 +> 16 0 25 4248 topology 4250 5668 +> 15 0 25 4248 topology 4306 5669 +> 16 0 25 4248 topology 4308 5669 +> 15 0 25 4248 topology 4306 5670 +> 16 0 25 4248 topology 4307 5670 +> 15 0 25 4248 topology 4309 5671 +> 16 0 25 4248 topology 4311 5671 +> 15 0 25 4248 topology 4309 5672 +> 16 0 25 4248 topology 4310 5672 +> 15 0 25 4248 topology 4312 5673 +> 16 0 25 4248 topology 4314 5673 +> 15 0 25 4248 topology 4312 5674 +> 16 0 25 4248 topology 4313 5674 +> 15 0 25 4248 topology 4315 5675 +> 16 0 25 4248 topology 4317 5675 +> 15 0 25 4248 topology 4315 5676 +> 16 0 25 4248 topology 4316 5676 +> 15 0 25 4248 topology 4318 5677 +> 16 0 25 4248 topology 4320 5677 +> 15 0 25 4248 topology 4318 5678 +> 16 0 25 4248 topology 4319 5678 +> 15 0 25 4248 topology 4321 5679 +> 16 0 25 4248 topology 4323 5679 +> 15 0 25 4248 topology 4321 5680 +> 16 0 25 4248 topology 4322 5680 +> 15 0 25 4248 topology 4324 5681 +> 16 0 25 4248 topology 4326 5681 +> 15 0 25 4248 topology 4324 5682 +> 16 0 25 4248 topology 4325 5682 +> 15 0 25 4248 topology 4327 5683 +> 16 0 25 4248 topology 4329 5683 +> 15 0 25 4248 topology 4327 5684 +> 16 0 25 4248 topology 4328 5684 +> 15 0 25 4248 topology 4330 5685 +> 16 0 25 4248 topology 4332 5685 +> 15 0 25 4248 topology 4330 5686 +> 16 0 25 4248 topology 4331 5686 +> 15 0 25 4248 topology 4333 5687 +> 16 0 25 4248 topology 4335 5687 +> 15 0 25 4248 topology 4333 5688 +> 16 0 25 4248 topology 4334 5688 +> 15 0 25 4248 topology 4252 5689 +> 16 0 25 4248 topology 4254 5689 +> 15 0 25 4248 topology 4252 5690 +> 16 0 25 4248 topology 4253 5690 +> 15 0 25 4248 topology 4336 5691 +> 16 0 25 4248 topology 4338 5691 +> 15 0 25 4248 topology 4336 5692 +> 16 0 25 4248 topology 4337 5692 +> 15 0 25 4248 topology 4339 5693 +> 16 0 25 4248 topology 4341 5693 +> 15 0 25 4248 topology 4339 5694 +> 16 0 25 4248 topology 4340 5694 +> 15 0 25 4248 topology 4342 5695 +> 16 0 25 4248 topology 4344 5695 +> 15 0 25 4248 topology 4342 5696 +> 16 0 25 4248 topology 4343 5696 +> 15 0 25 4248 topology 4345 5697 +> 16 0 25 4248 topology 4347 5697 +> 15 0 25 4248 topology 4345 5698 +> 16 0 25 4248 topology 4346 5698 +> 15 0 25 4248 topology 4348 5699 +> 16 0 25 4248 topology 4350 5699 +> 15 0 25 4248 topology 4348 5700 +> 16 0 25 4248 topology 4349 5700 +> 15 0 25 4248 topology 4351 5701 +> 16 0 25 4248 topology 4353 5701 +> 15 0 25 4248 topology 4351 5702 +> 16 0 25 4248 topology 4352 5702 +> 15 0 25 4248 topology 4354 5703 +> 16 0 25 4248 topology 4356 5703 +> 15 0 25 4248 topology 4354 5704 +> 16 0 25 4248 topology 4355 5704 +> 15 0 25 4248 topology 4357 5705 +> 16 0 25 4248 topology 4359 5705 +> 15 0 25 4248 topology 4357 5706 +> 16 0 25 4248 topology 4358 5706 +> 15 0 25 4248 topology 4360 5707 +> 16 0 25 4248 topology 4362 5707 +> 15 0 25 4248 topology 4360 5708 +> 16 0 25 4248 topology 4361 5708 +> 15 0 25 4248 topology 4363 5709 +> 16 0 25 4248 topology 4365 5709 +> 15 0 25 4248 topology 4363 5710 +> 16 0 25 4248 topology 4364 5710 +> 15 0 25 4248 topology 4255 5711 +> 16 0 25 4248 topology 4257 5711 +> 15 0 25 4248 topology 4255 5712 +> 16 0 25 4248 topology 4256 5712 +> 15 0 25 4248 topology 4366 5713 +> 16 0 25 4248 topology 4368 5713 +> 15 0 25 4248 topology 4366 5714 +> 16 0 25 4248 topology 4367 5714 +> 15 0 25 4248 topology 4369 5715 +> 16 0 25 4248 topology 4371 5715 +> 15 0 25 4248 topology 4369 5716 +> 16 0 25 4248 topology 4370 5716 +> 15 0 25 4248 topology 4372 5717 +> 16 0 25 4248 topology 4374 5717 +> 15 0 25 4248 topology 4372 5718 +> 16 0 25 4248 topology 4373 5718 +> 15 0 25 4248 topology 4375 5719 +> 16 0 25 4248 topology 4377 5719 +> 15 0 25 4248 topology 4375 5720 +> 16 0 25 4248 topology 4376 5720 +> 15 0 25 4248 topology 4378 5721 +> 16 0 25 4248 topology 4380 5721 +> 15 0 25 4248 topology 4378 5722 +> 16 0 25 4248 topology 4379 5722 +> 15 0 25 4248 topology 4381 5723 +> 16 0 25 4248 topology 4383 5723 +> 15 0 25 4248 topology 4381 5724 +> 16 0 25 4248 topology 4382 5724 +> 15 0 25 4248 topology 4258 5725 +> 16 0 25 4248 topology 4260 5725 +> 15 0 25 4248 topology 4258 5726 +> 16 0 25 4248 topology 4259 5726 +> 15 0 25 4248 topology 4261 5727 +> 16 0 25 4248 topology 4263 5727 +> 15 0 25 4248 topology 4261 5728 +> 16 0 25 4248 topology 4262 5728 +> 15 0 25 4248 topology 4264 5729 +> 16 0 25 4248 topology 4266 5729 +> 15 0 25 4248 topology 4264 5730 +> 16 0 25 4248 topology 4265 5730 +> 15 0 25 4248 topology 4267 5731 +> 16 0 25 4248 topology 4269 5731 +> 15 0 25 4248 topology 4267 5732 +> 16 0 25 4248 topology 4268 5732 +> 15 0 25 4248 topology 4270 5733 +> 16 0 25 4248 topology 4272 5733 +> 15 0 25 4248 topology 4270 5734 +> 16 0 25 4248 topology 4271 5734 +> 15 0 25 4248 topology 4273 5735 +> 16 0 25 4248 topology 4275 5735 +> 15 0 25 4248 topology 4273 5736 +> 16 0 25 4248 topology 4274 5736 +> 15 0 26 3921 topology 4093 5737 +> 16 0 26 3921 topology 4388 5737 +> 15 0 26 3921 topology 4247 5738 +> 16 0 26 3921 topology 4388 5738 +> 15 0 26 3921 topology 4386 5739 > 16 0 26 3921 topology 4388 5739 -> 15 0 26 3921 topology 4386 5740 -> 16 0 26 3921 topology 4388 5740 -> 15 0 21 3921 topology 4093 5741 -> 16 0 21 3921 topology 4247 5741 -> 15 0 26 3921 topology 4247 5742 -> 16 0 26 3921 topology 4388 5742 -> 15 0 26 3921 topology 4247 5743 -> 16 0 26 3921 topology 4245 5743 -> 15 0 26 3921 topology 4386 5744 -> 16 0 26 3921 topology 4384 5744 -> 15 0 21 3921 topology 4247 5745 -> 16 0 21 3921 topology 4386 5745 -> 15 0 23 4391 topology 4508 5746 +> 15 0 27 3921 topology 4091 5740 +> 16 0 27 3921 topology 4093 5740 +> 15 0 20 3921 topology 4093 5741 +> 16 0 20 3921 topology 4247 5741 +> 15 0 20 3921 topology 4093 5742 +> 16 0 20 3921 topology 4386 5742 +> 15 0 20 3921 topology 4247 5743 +> 16 0 20 3921 topology 4386 5743 +> 15 0 26 3921 topology 4247 5744 +> 16 0 26 3921 topology 4245 5744 +> 15 0 26 3921 topology 4386 5745 +> 16 0 26 3921 topology 4384 5745 +> 15 0 23 4391 topology 4421 5746 > 16 0 23 4391 topology 4633 5746 -> 15 0 24 4391 topology 4536 5747 -> 16 0 24 4391 topology 4538 5747 -> 15 0 23 4391 topology 4592 5748 +> 15 0 23 4391 topology 4420 5747 +> 16 0 23 4391 topology 4633 5747 +> 15 0 23 4391 topology 4424 5748 > 16 0 23 4391 topology 4633 5748 -> 15 0 23 4391 topology 4450 5749 +> 15 0 23 4391 topology 4423 5749 > 16 0 23 4391 topology 4633 5749 -> 15 0 23 4391 topology 4628 5750 +> 15 0 23 4391 topology 4427 5750 > 16 0 23 4391 topology 4633 5750 -> 15 0 23 4391 topology 4510 5751 +> 15 0 23 4391 topology 4426 5751 > 16 0 23 4391 topology 4633 5751 -> 15 0 23 4391 topology 4432 5752 +> 15 0 23 4391 topology 4430 5752 > 16 0 23 4391 topology 4633 5752 -> 15 0 23 4391 topology 4570 5753 +> 15 0 23 4391 topology 4429 5753 > 16 0 23 4391 topology 4633 5753 -> 15 0 23 4391 topology 4492 5754 +> 15 0 23 4391 topology 4433 5754 > 16 0 23 4391 topology 4633 5754 -> 15 0 23 4391 topology 4630 5755 +> 15 0 23 4391 topology 4432 5755 > 16 0 23 4391 topology 4633 5755 -> 15 0 23 4391 topology 4409 5756 +> 15 0 23 4391 topology 4436 5756 > 16 0 23 4391 topology 4633 5756 -> 15 0 23 4391 topology 4552 5757 +> 15 0 23 4391 topology 4435 5757 > 16 0 23 4391 topology 4633 5757 -> 15 0 23 4391 topology 4474 5758 +> 15 0 23 4391 topology 4439 5758 > 16 0 23 4391 topology 4633 5758 -> 15 0 23 4391 topology 4612 5759 +> 15 0 23 4391 topology 4438 5759 > 16 0 23 4391 topology 4633 5759 -> 15 0 23 4391 topology 4534 5760 +> 15 0 23 4391 topology 4442 5760 > 16 0 23 4391 topology 4633 5760 -> 15 0 23 4391 topology 4594 5761 +> 15 0 23 4391 topology 4441 5761 > 16 0 23 4391 topology 4633 5761 -> 15 0 24 4391 topology 4404 5762 -> 16 0 24 4391 topology 4406 5762 -> 15 0 23 4391 topology 4405 5763 +> 15 0 23 4391 topology 4445 5762 +> 16 0 23 4391 topology 4633 5762 +> 15 0 23 4391 topology 4444 5763 > 16 0 23 4391 topology 4633 5763 -> 15 0 23 4391 topology 4427 5764 +> 15 0 23 4391 topology 4448 5764 > 16 0 23 4391 topology 4633 5764 -> 15 0 23 4391 topology 4511 5765 +> 15 0 23 4391 topology 4447 5765 > 16 0 23 4391 topology 4633 5765 -> 15 0 24 4391 topology 4425 5766 -> 16 0 24 4391 topology 4426 5766 -> 15 0 23 4391 topology 4463 5767 +> 15 0 23 4391 topology 4394 5766 +> 16 0 23 4391 topology 4633 5766 +> 15 0 23 4391 topology 4393 5767 > 16 0 23 4391 topology 4633 5767 -> 15 0 23 4391 topology 4547 5768 +> 15 0 23 4391 topology 4451 5768 > 16 0 23 4391 topology 4633 5768 -> 15 0 24 4391 topology 4455 5769 -> 16 0 24 4391 topology 4456 5769 -> 15 0 23 4391 topology 4631 5770 +> 15 0 23 4391 topology 4450 5769 +> 16 0 23 4391 topology 4633 5769 +> 15 0 23 4391 topology 4454 5770 > 16 0 23 4391 topology 4633 5770 -> 15 0 23 4391 topology 4499 5771 +> 15 0 23 4391 topology 4453 5771 > 16 0 23 4391 topology 4633 5771 -> 15 0 24 4391 topology 4485 5772 -> 16 0 24 4391 topology 4486 5772 -> 15 0 23 4391 topology 4583 5773 +> 15 0 23 4391 topology 4457 5772 +> 16 0 23 4391 topology 4633 5772 +> 15 0 23 4391 topology 4456 5773 > 16 0 23 4391 topology 4633 5773 -> 15 0 24 4391 topology 4515 5774 -> 16 0 24 4391 topology 4516 5774 -> 15 0 23 4391 topology 4535 5775 +> 15 0 23 4391 topology 4460 5774 +> 16 0 23 4391 topology 4633 5774 +> 15 0 23 4391 topology 4459 5775 > 16 0 23 4391 topology 4633 5775 -> 15 0 23 4391 topology 4619 5776 +> 15 0 23 4391 topology 4463 5776 > 16 0 23 4391 topology 4633 5776 -> 15 0 24 4391 topology 4410 5777 -> 16 0 24 4391 topology 4411 5777 -> 15 0 24 4391 topology 4437 5778 -> 16 0 24 4391 topology 4438 5778 -> 15 0 24 4391 topology 4545 5779 -> 16 0 24 4391 topology 4546 5779 -> 15 0 24 4391 topology 4467 5780 -> 16 0 24 4391 topology 4468 5780 -> 15 0 24 4391 topology 4575 5781 -> 16 0 24 4391 topology 4576 5781 -> 15 0 23 4391 topology 4459 5782 +> 15 0 23 4391 topology 4462 5777 +> 16 0 23 4391 topology 4633 5777 +> 15 0 23 4391 topology 4466 5778 +> 16 0 23 4391 topology 4633 5778 +> 15 0 23 4391 topology 4465 5779 +> 16 0 23 4391 topology 4633 5779 +> 15 0 23 4391 topology 4469 5780 +> 16 0 23 4391 topology 4633 5780 +> 15 0 23 4391 topology 4468 5781 +> 16 0 23 4391 topology 4633 5781 +> 15 0 23 4391 topology 4472 5782 > 16 0 23 4391 topology 4633 5782 -> 15 0 24 4391 topology 4497 5783 -> 16 0 24 4391 topology 4498 5783 -> 15 0 24 4391 topology 4605 5784 -> 16 0 24 4391 topology 4606 5784 -> 15 0 23 4391 topology 4400 5785 +> 15 0 23 4391 topology 4471 5783 +> 16 0 23 4391 topology 4633 5783 +> 15 0 23 4391 topology 4475 5784 +> 16 0 23 4391 topology 4633 5784 +> 15 0 23 4391 topology 4474 5785 > 16 0 23 4391 topology 4633 5785 -> 15 0 23 4391 topology 4519 5786 +> 15 0 23 4391 topology 4478 5786 > 16 0 23 4391 topology 4633 5786 -> 15 0 24 4391 topology 4527 5787 -> 16 0 24 4391 topology 4528 5787 -> 15 0 24 4391 topology 4419 5788 -> 16 0 24 4391 topology 4421 5788 -> 15 0 23 4391 topology 4441 5789 +> 15 0 23 4391 topology 4477 5787 +> 16 0 23 4391 topology 4633 5787 +> 15 0 23 4391 topology 4397 5788 +> 16 0 23 4391 topology 4633 5788 +> 15 0 23 4391 topology 4396 5789 > 16 0 23 4391 topology 4633 5789 -> 15 0 24 4391 topology 4557 5790 -> 16 0 24 4391 topology 4558 5790 -> 15 0 23 4391 topology 4579 5791 +> 15 0 23 4391 topology 4481 5790 +> 16 0 23 4391 topology 4633 5790 +> 15 0 23 4391 topology 4480 5791 > 16 0 23 4391 topology 4633 5791 -> 15 0 24 4391 topology 4422 5792 -> 16 0 24 4391 topology 4424 5792 -> 15 0 23 4391 topology 4501 5793 +> 15 0 23 4391 topology 4484 5792 +> 16 0 23 4391 topology 4633 5792 +> 15 0 23 4391 topology 4483 5793 > 16 0 23 4391 topology 4633 5793 -> 15 0 24 4391 topology 4587 5794 -> 16 0 24 4391 topology 4588 5794 -> 15 0 24 4391 topology 4425 5795 -> 16 0 24 4391 topology 4427 5795 -> 15 0 23 4391 topology 4561 5796 +> 15 0 23 4391 topology 4487 5794 +> 16 0 23 4391 topology 4633 5794 +> 15 0 23 4391 topology 4486 5795 +> 16 0 23 4391 topology 4633 5795 +> 15 0 23 4391 topology 4490 5796 > 16 0 23 4391 topology 4633 5796 -> 15 0 24 4391 topology 4617 5797 -> 16 0 24 4391 topology 4618 5797 -> 15 0 24 4391 topology 4401 5798 -> 16 0 24 4391 topology 4403 5798 -> 15 0 24 4391 topology 4428 5799 -> 16 0 24 4391 topology 4430 5799 -> 15 0 23 4391 topology 4621 5800 +> 15 0 23 4391 topology 4489 5797 +> 16 0 23 4391 topology 4633 5797 +> 15 0 23 4391 topology 4493 5798 +> 16 0 23 4391 topology 4633 5798 +> 15 0 23 4391 topology 4492 5799 +> 16 0 23 4391 topology 4633 5799 +> 15 0 23 4391 topology 4496 5800 > 16 0 23 4391 topology 4633 5800 -> 15 0 24 4391 topology 4431 5801 -> 16 0 24 4391 topology 4433 5801 -> 15 0 24 4391 topology 4539 5802 -> 16 0 24 4391 topology 4541 5802 -> 15 0 24 4391 topology 4434 5803 -> 16 0 24 4391 topology 4436 5803 -> 15 0 24 4391 topology 4542 5804 -> 16 0 24 4391 topology 4544 5804 -> 15 0 24 4391 topology 4437 5805 -> 16 0 24 4391 topology 4439 5805 -> 15 0 24 4391 topology 4545 5806 -> 16 0 24 4391 topology 4547 5806 -> 15 0 24 4391 topology 4440 5807 -> 16 0 24 4391 topology 4442 5807 -> 15 0 23 4391 topology 4454 5808 +> 15 0 23 4391 topology 4495 5801 +> 16 0 23 4391 topology 4633 5801 +> 15 0 23 4391 topology 4499 5802 +> 16 0 23 4391 topology 4633 5802 +> 15 0 23 4391 topology 4498 5803 +> 16 0 23 4391 topology 4633 5803 +> 15 0 23 4391 topology 4502 5804 +> 16 0 23 4391 topology 4633 5804 +> 15 0 23 4391 topology 4501 5805 +> 16 0 23 4391 topology 4633 5805 +> 15 0 23 4391 topology 4505 5806 +> 16 0 23 4391 topology 4633 5806 +> 15 0 23 4391 topology 4504 5807 +> 16 0 23 4391 topology 4633 5807 +> 15 0 23 4391 topology 4508 5808 > 16 0 23 4391 topology 4633 5808 -> 15 0 24 4391 topology 4548 5809 -> 16 0 24 4391 topology 4550 5809 -> 15 0 23 4391 topology 4414 5810 +> 15 0 23 4391 topology 4507 5809 +> 16 0 23 4391 topology 4633 5809 +> 15 0 23 4391 topology 4400 5810 > 16 0 23 4391 topology 4633 5810 -> 15 0 24 4391 topology 4443 5811 -> 16 0 24 4391 topology 4445 5811 -> 15 0 24 4391 topology 4551 5812 -> 16 0 24 4391 topology 4553 5812 -> 15 0 23 4391 topology 4490 5813 +> 15 0 23 4391 topology 4399 5811 +> 16 0 23 4391 topology 4633 5811 +> 15 0 23 4391 topology 4511 5812 +> 16 0 23 4391 topology 4633 5812 +> 15 0 23 4391 topology 4510 5813 > 16 0 23 4391 topology 4633 5813 -> 15 0 24 4391 topology 4446 5814 -> 16 0 24 4391 topology 4448 5814 -> 15 0 24 4391 topology 4554 5815 -> 16 0 24 4391 topology 4556 5815 -> 15 0 23 4391 topology 4574 5816 +> 15 0 23 4391 topology 4514 5814 +> 16 0 23 4391 topology 4633 5814 +> 15 0 23 4391 topology 4513 5815 +> 16 0 23 4391 topology 4633 5815 +> 15 0 23 4391 topology 4517 5816 > 16 0 23 4391 topology 4633 5816 -> 15 0 24 4391 topology 4401 5817 -> 16 0 24 4391 topology 4402 5817 -> 15 0 23 4391 topology 4442 5818 +> 15 0 23 4391 topology 4516 5817 +> 16 0 23 4391 topology 4633 5817 +> 15 0 23 4391 topology 4520 5818 > 16 0 23 4391 topology 4633 5818 -> 15 0 23 4391 topology 4526 5819 +> 15 0 23 4391 topology 4519 5819 > 16 0 23 4391 topology 4633 5819 -> 15 0 24 4391 topology 4557 5820 -> 16 0 24 4391 topology 4559 5820 -> 15 0 23 4391 topology 4610 5821 +> 15 0 23 4391 topology 4523 5820 +> 16 0 23 4391 topology 4633 5820 +> 15 0 23 4391 topology 4522 5821 > 16 0 23 4391 topology 4633 5821 -> 15 0 23 4391 topology 4478 5822 +> 15 0 23 4391 topology 4526 5822 > 16 0 23 4391 topology 4633 5822 -> 15 0 24 4391 topology 4560 5823 -> 16 0 24 4391 topology 4562 5823 -> 15 0 23 4391 topology 4562 5824 +> 15 0 23 4391 topology 4525 5823 +> 16 0 23 4391 topology 4633 5823 +> 15 0 23 4391 topology 4529 5824 > 16 0 23 4391 topology 4633 5824 -> 15 0 24 4391 topology 4563 5825 -> 16 0 24 4391 topology 4565 5825 -> 15 0 24 4391 topology 4566 5826 -> 16 0 24 4391 topology 4568 5826 -> 15 0 23 4391 topology 4598 5827 +> 15 0 23 4391 topology 4528 5825 +> 16 0 23 4391 topology 4633 5825 +> 15 0 23 4391 topology 4532 5826 +> 16 0 23 4391 topology 4633 5826 +> 15 0 23 4391 topology 4531 5827 > 16 0 23 4391 topology 4633 5827 -> 15 0 23 4391 topology 4426 5828 +> 15 0 23 4391 topology 4535 5828 > 16 0 23 4391 topology 4633 5828 -> 15 0 23 4391 topology 4486 5829 +> 15 0 23 4391 topology 4534 5829 > 16 0 23 4391 topology 4633 5829 -> 15 0 23 4391 topology 4546 5830 +> 15 0 23 4391 topology 4538 5830 > 16 0 23 4391 topology 4633 5830 -> 15 0 23 4391 topology 4468 5831 +> 15 0 23 4391 topology 4537 5831 > 16 0 23 4391 topology 4633 5831 -> 15 0 23 4391 topology 4606 5832 +> 15 0 23 4391 topology 4403 5832 > 16 0 23 4391 topology 4633 5832 -> 15 0 23 4391 topology 4528 5833 +> 15 0 23 4391 topology 4402 5833 > 16 0 23 4391 topology 4633 5833 -> 15 0 23 4391 topology 4415 5834 +> 15 0 23 4391 topology 4541 5834 > 16 0 23 4391 topology 4633 5834 -> 15 0 24 4391 topology 4398 5835 -> 16 0 24 4391 topology 4400 5835 -> 15 0 23 4391 topology 4588 5836 +> 15 0 23 4391 topology 4540 5835 +> 16 0 23 4391 topology 4633 5835 +> 15 0 23 4391 topology 4544 5836 > 16 0 23 4391 topology 4633 5836 -> 15 0 23 4391 topology 4399 5837 +> 15 0 23 4391 topology 4543 5837 > 16 0 23 4391 topology 4633 5837 -> 15 0 24 4391 topology 4392 5838 -> 16 0 24 4391 topology 4393 5838 -> 15 0 23 4391 topology 4481 5839 +> 15 0 23 4391 topology 4547 5838 +> 16 0 23 4391 topology 4633 5838 +> 15 0 23 4391 topology 4546 5839 > 16 0 23 4391 topology 4633 5839 -> 15 0 24 4391 topology 4422 5840 -> 16 0 24 4391 topology 4423 5840 -> 15 0 23 4391 topology 4433 5841 +> 15 0 23 4391 topology 4550 5840 +> 16 0 23 4391 topology 4633 5840 +> 15 0 23 4391 topology 4549 5841 > 16 0 23 4391 topology 4633 5841 -> 15 0 24 4391 topology 4452 5842 -> 16 0 24 4391 topology 4453 5842 -> 15 0 23 4391 topology 4517 5843 +> 15 0 23 4391 topology 4553 5842 +> 16 0 23 4391 topology 4633 5842 +> 15 0 23 4391 topology 4552 5843 > 16 0 23 4391 topology 4633 5843 -> 15 0 23 4391 topology 4601 5844 +> 15 0 23 4391 topology 4556 5844 > 16 0 23 4391 topology 4633 5844 -> 15 0 23 4391 topology 4469 5845 +> 15 0 23 4391 topology 4555 5845 > 16 0 23 4391 topology 4633 5845 -> 15 0 24 4391 topology 4482 5846 -> 16 0 24 4391 topology 4483 5846 -> 15 0 23 4391 topology 4553 5847 +> 15 0 23 4391 topology 4559 5846 +> 16 0 23 4391 topology 4633 5846 +> 15 0 23 4391 topology 4558 5847 > 16 0 23 4391 topology 4633 5847 -> 15 0 24 4391 topology 4512 5848 -> 16 0 24 4391 topology 4513 5848 -> 15 0 23 4391 topology 4505 5849 +> 15 0 23 4391 topology 4562 5848 +> 16 0 23 4391 topology 4633 5848 +> 15 0 23 4391 topology 4561 5849 > 16 0 23 4391 topology 4633 5849 -> 15 0 24 4391 topology 4434 5850 -> 16 0 24 4391 topology 4435 5850 -> 15 0 24 4391 topology 4542 5851 -> 16 0 24 4391 topology 4543 5851 -> 15 0 23 4391 topology 4589 5852 +> 15 0 23 4391 topology 4565 5850 +> 16 0 23 4391 topology 4633 5850 +> 15 0 23 4391 topology 4564 5851 +> 16 0 23 4391 topology 4633 5851 +> 15 0 23 4391 topology 4568 5852 > 16 0 23 4391 topology 4633 5852 -> 15 0 24 4391 topology 4464 5853 -> 16 0 24 4391 topology 4465 5853 -> 15 0 24 4391 topology 4572 5854 -> 16 0 24 4391 topology 4573 5854 -> 15 0 23 4391 topology 4625 5855 +> 15 0 23 4391 topology 4567 5853 +> 16 0 23 4391 topology 4633 5853 +> 15 0 23 4391 topology 4406 5854 +> 16 0 23 4391 topology 4633 5854 +> 15 0 23 4391 topology 4405 5855 > 16 0 23 4391 topology 4633 5855 -> 15 0 23 4391 topology 4453 5856 +> 15 0 23 4391 topology 4571 5856 > 16 0 23 4391 topology 4633 5856 -> 15 0 24 4391 topology 4494 5857 -> 16 0 24 4391 topology 4495 5857 -> 15 0 24 4391 topology 4602 5858 -> 16 0 24 4391 topology 4603 5858 -> 15 0 24 4391 topology 4416 5859 -> 16 0 24 4391 topology 4417 5859 -> 15 0 23 4391 topology 4513 5860 +> 15 0 23 4391 topology 4570 5857 +> 16 0 23 4391 topology 4633 5857 +> 15 0 23 4391 topology 4574 5858 +> 16 0 23 4391 topology 4633 5858 +> 15 0 23 4391 topology 4573 5859 +> 16 0 23 4391 topology 4633 5859 +> 15 0 23 4391 topology 4577 5860 > 16 0 23 4391 topology 4633 5860 -> 15 0 24 4391 topology 4524 5861 -> 16 0 24 4391 topology 4525 5861 -> 15 0 23 4391 topology 4435 5862 +> 15 0 23 4391 topology 4576 5861 +> 16 0 23 4391 topology 4633 5861 +> 15 0 23 4391 topology 4580 5862 > 16 0 23 4391 topology 4633 5862 -> 15 0 24 4391 topology 4446 5863 -> 16 0 24 4391 topology 4447 5863 -> 15 0 24 4391 topology 4554 5864 -> 16 0 24 4391 topology 4555 5864 -> 15 0 23 4391 topology 4573 5865 +> 15 0 23 4391 topology 4579 5863 +> 16 0 23 4391 topology 4633 5863 +> 15 0 23 4391 topology 4583 5864 +> 16 0 23 4391 topology 4633 5864 +> 15 0 23 4391 topology 4582 5865 > 16 0 23 4391 topology 4633 5865 -> 15 0 23 4391 topology 4406 5866 +> 15 0 23 4391 topology 4586 5866 > 16 0 23 4391 topology 4633 5866 -> 15 0 23 4391 topology 4495 5867 +> 15 0 23 4391 topology 4585 5867 > 16 0 23 4391 topology 4633 5867 -> 15 0 24 4391 topology 4476 5868 -> 16 0 24 4391 topology 4477 5868 -> 15 0 24 4391 topology 4584 5869 -> 16 0 24 4391 topology 4585 5869 -> 15 0 24 4391 topology 4395 5870 -> 16 0 24 4391 topology 4397 5870 -> 15 0 24 4391 topology 4449 5871 -> 16 0 24 4391 topology 4451 5871 -> 15 0 23 4391 topology 4555 5872 +> 15 0 23 4391 topology 4589 5868 +> 16 0 23 4391 topology 4633 5868 +> 15 0 23 4391 topology 4588 5869 +> 16 0 23 4391 topology 4633 5869 +> 15 0 23 4391 topology 4592 5870 +> 16 0 23 4391 topology 4633 5870 +> 15 0 23 4391 topology 4591 5871 +> 16 0 23 4391 topology 4633 5871 +> 15 0 23 4391 topology 4595 5872 > 16 0 23 4391 topology 4633 5872 -> 15 0 23 4391 topology 4477 5873 +> 15 0 23 4391 topology 4594 5873 > 16 0 23 4391 topology 4633 5873 -> 15 0 24 4391 topology 4506 5874 -> 16 0 24 4391 topology 4507 5874 -> 15 0 24 4391 topology 4614 5875 -> 16 0 24 4391 topology 4615 5875 -> 15 0 24 4391 topology 4452 5876 -> 16 0 24 4391 topology 4454 5876 -> 15 0 23 4391 topology 4615 5877 +> 15 0 23 4391 topology 4598 5874 +> 16 0 23 4391 topology 4633 5874 +> 15 0 23 4391 topology 4597 5875 +> 16 0 23 4391 topology 4633 5875 +> 15 0 23 4391 topology 4409 5876 +> 16 0 23 4391 topology 4633 5876 +> 15 0 23 4391 topology 4408 5877 > 16 0 23 4391 topology 4633 5877 -> 15 0 24 4391 topology 4536 5878 -> 16 0 24 4391 topology 4537 5878 -> 15 0 23 4391 topology 4537 5879 +> 15 0 23 4391 topology 4601 5878 +> 16 0 23 4391 topology 4633 5878 +> 15 0 23 4391 topology 4600 5879 > 16 0 23 4391 topology 4633 5879 -> 15 0 24 4391 topology 4455 5880 -> 16 0 24 4391 topology 4457 5880 -> 15 0 24 4391 topology 4566 5881 -> 16 0 24 4391 topology 4567 5881 -> 15 0 23 4391 topology 4597 5882 +> 15 0 23 4391 topology 4604 5880 +> 16 0 23 4391 topology 4633 5880 +> 15 0 23 4391 topology 4603 5881 +> 16 0 23 4391 topology 4633 5881 +> 15 0 23 4391 topology 4607 5882 > 16 0 23 4391 topology 4633 5882 -> 15 0 24 4391 topology 4458 5883 -> 16 0 24 4391 topology 4460 5883 -> 15 0 24 4391 topology 4596 5884 -> 16 0 24 4391 topology 4597 5884 -> 15 0 24 4391 topology 4461 5885 -> 16 0 24 4391 topology 4463 5885 -> 15 0 24 4391 topology 4569 5886 -> 16 0 24 4391 topology 4571 5886 -> 15 0 24 4391 topology 4626 5887 -> 16 0 24 4391 topology 4627 5887 -> 15 0 24 4391 topology 4464 5888 -> 16 0 24 4391 topology 4466 5888 -> 15 0 24 4391 topology 4572 5889 -> 16 0 24 4391 topology 4574 5889 -> 15 0 23 4391 topology 4424 5890 +> 15 0 23 4391 topology 4606 5883 +> 16 0 23 4391 topology 4633 5883 +> 15 0 23 4391 topology 4610 5884 +> 16 0 23 4391 topology 4633 5884 +> 15 0 23 4391 topology 4609 5885 +> 16 0 23 4391 topology 4633 5885 +> 15 0 23 4391 topology 4613 5886 +> 16 0 23 4391 topology 4633 5886 +> 15 0 23 4391 topology 4612 5887 +> 16 0 23 4391 topology 4633 5887 +> 15 0 23 4391 topology 4616 5888 +> 16 0 23 4391 topology 4633 5888 +> 15 0 23 4391 topology 4615 5889 +> 16 0 23 4391 topology 4633 5889 +> 15 0 23 4391 topology 4619 5890 > 16 0 23 4391 topology 4633 5890 -> 15 0 23 4391 topology 4408 5891 +> 15 0 23 4391 topology 4618 5891 > 16 0 23 4391 topology 4633 5891 -> 15 0 24 4391 topology 4467 5892 -> 16 0 24 4391 topology 4469 5892 -> 15 0 24 4391 topology 4575 5893 -> 16 0 24 4391 topology 4577 5893 -> 15 0 23 4391 topology 4460 5894 +> 15 0 23 4391 topology 4622 5892 +> 16 0 23 4391 topology 4633 5892 +> 15 0 23 4391 topology 4621 5893 +> 16 0 23 4391 topology 4633 5893 +> 15 0 23 4391 topology 4625 5894 > 16 0 23 4391 topology 4633 5894 -> 15 0 24 4391 topology 4470 5895 -> 16 0 24 4391 topology 4472 5895 -> 15 0 24 4391 topology 4578 5896 -> 16 0 24 4391 topology 4580 5896 -> 15 0 23 4391 topology 4544 5897 +> 15 0 23 4391 topology 4624 5895 +> 16 0 23 4391 topology 4633 5895 +> 15 0 23 4391 topology 4628 5896 +> 16 0 23 4391 topology 4633 5896 +> 15 0 23 4391 topology 4627 5897 > 16 0 23 4391 topology 4633 5897 -> 15 0 24 4391 topology 4473 5898 -> 16 0 24 4391 topology 4475 5898 -> 15 0 24 4391 topology 4581 5899 -> 16 0 24 4391 topology 4583 5899 -> 15 0 23 4391 topology 4496 5900 +> 15 0 23 4391 topology 4412 5898 +> 16 0 23 4391 topology 4633 5898 +> 15 0 23 4391 topology 4411 5899 +> 16 0 23 4391 topology 4633 5899 +> 15 0 23 4391 topology 4631 5900 > 16 0 23 4391 topology 4633 5900 -> 15 0 24 4391 topology 4476 5901 -> 16 0 24 4391 topology 4478 5901 -> 15 0 23 4391 topology 4580 5902 +> 15 0 23 4391 topology 4630 5901 +> 16 0 23 4391 topology 4633 5901 +> 15 0 23 4391 topology 4415 5902 > 16 0 23 4391 topology 4633 5902 -> 15 0 24 4391 topology 4584 5903 -> 16 0 24 4391 topology 4586 5903 -> 15 0 23 4391 topology 4448 5904 +> 15 0 23 4391 topology 4414 5903 +> 16 0 23 4391 topology 4633 5903 +> 15 0 23 4391 topology 4418 5904 > 16 0 23 4391 topology 4633 5904 -> 15 0 23 4391 topology 4532 5905 +> 15 0 23 4391 topology 4417 5905 > 16 0 23 4391 topology 4633 5905 -> 15 0 24 4391 topology 4587 5906 -> 16 0 24 4391 topology 4589 5906 -> 15 0 24 4391 topology 4407 5907 -> 16 0 24 4391 topology 4408 5907 -> 15 0 23 4391 topology 4616 5908 -> 16 0 23 4391 topology 4633 5908 -> 15 0 24 4391 topology 4590 5909 -> 16 0 24 4391 topology 4592 5909 -> 15 0 23 4391 topology 4420 5910 -> 16 0 23 4391 topology 4633 5910 -> 15 0 23 4391 topology 4568 5911 -> 16 0 23 4391 topology 4633 5911 -> 15 0 24 4391 topology 4593 5912 -> 16 0 24 4391 topology 4595 5912 -> 15 0 23 4391 topology 4480 5913 -> 16 0 23 4391 topology 4633 5913 -> 15 0 24 4391 topology 4596 5914 -> 16 0 24 4391 topology 4598 5914 -> 15 0 23 4391 topology 4540 5915 -> 16 0 23 4391 topology 4633 5915 -> 15 0 23 4391 topology 4397 5916 -> 16 0 23 4391 topology 4633 5916 -> 15 0 23 4391 topology 4462 5917 -> 16 0 23 4391 topology 4633 5917 -> 15 0 23 4391 topology 4600 5918 -> 16 0 23 4391 topology 4633 5918 -> 15 0 23 4391 topology 4522 5919 -> 16 0 23 4391 topology 4633 5919 -> 15 0 24 4391 topology 4392 5920 -> 16 0 24 4391 topology 4394 5920 -> 15 0 23 4391 topology 4444 5921 -> 16 0 23 4391 topology 4633 5921 -> 15 0 23 4391 topology 4582 5922 -> 16 0 23 4391 topology 4633 5922 -> 15 0 23 4391 topology 4504 5923 -> 16 0 23 4391 topology 4633 5923 -> 15 0 23 4391 topology 4564 5924 -> 16 0 23 4391 topology 4633 5924 -> 15 0 23 4391 topology 4624 5925 -> 16 0 23 4391 topology 4633 5925 -> 15 0 23 4391 topology 4393 5926 -> 16 0 23 4391 topology 4633 5926 -> 15 0 23 4391 topology 4451 5927 -> 16 0 23 4391 topology 4633 5927 -> 15 0 24 4391 topology 4419 5928 -> 16 0 24 4391 topology 4420 5928 -> 15 0 24 4391 topology 4449 5929 -> 16 0 24 4391 topology 4450 5929 -> 15 0 23 4391 topology 4487 5930 -> 16 0 23 4391 topology 4633 5930 -> 15 0 24 4391 topology 4416 5931 -> 16 0 24 4391 topology 4418 5931 -> 15 0 24 4391 topology 4479 5932 -> 16 0 24 4391 topology 4480 5932 -> 15 0 23 4391 topology 4417 5933 -> 16 0 23 4391 topology 4633 5933 -> 15 0 24 4391 topology 4398 5934 -> 16 0 24 4391 topology 4399 5934 -> 15 0 23 4391 topology 4571 5935 -> 16 0 23 4391 topology 4633 5935 -> 15 0 23 4391 topology 4439 5936 -> 16 0 23 4391 topology 4633 5936 -> 15 0 23 4391 topology 4523 5937 -> 16 0 23 4391 topology 4633 5937 -> 15 0 24 4391 topology 4509 5938 -> 16 0 24 4391 topology 4510 5938 -> 15 0 23 4391 topology 4607 5939 -> 16 0 23 4391 topology 4633 5939 -> 15 0 24 4391 topology 4539 5940 -> 16 0 24 4391 topology 4540 5940 -> 15 0 23 4391 topology 4475 5941 -> 16 0 23 4391 topology 4633 5941 -> 15 0 24 4391 topology 4431 5942 -> 16 0 24 4391 topology 4432 5942 -> 15 0 23 4391 topology 4559 5943 -> 16 0 23 4391 topology 4633 5943 -> 15 0 24 4391 topology 4461 5944 -> 16 0 24 4391 topology 4462 5944 -> 15 0 24 4391 topology 4569 5945 -> 16 0 24 4391 topology 4570 5945 -> 15 0 24 4391 topology 4491 5946 -> 16 0 24 4391 topology 4492 5946 -> 15 0 23 4391 topology 4595 5947 -> 16 0 23 4391 topology 4633 5947 -> 15 0 24 4391 topology 4599 5948 -> 16 0 24 4391 topology 4600 5948 -> 15 0 24 4391 topology 4521 5949 -> 16 0 24 4391 topology 4522 5949 -> 15 0 24 4391 topology 4629 5950 -> 16 0 24 4391 topology 4630 5950 -> 15 0 23 4391 topology 4429 5951 -> 16 0 23 4391 topology 4633 5951 -> 15 0 24 4391 topology 4551 5952 -> 16 0 24 4391 topology 4552 5952 -> 15 0 24 4391 topology 4443 5953 -> 16 0 24 4391 topology 4444 5953 -> 15 0 23 4391 topology 4489 5954 -> 16 0 23 4391 topology 4633 5954 -> 15 0 24 4391 topology 4473 5955 -> 16 0 24 4391 topology 4474 5955 -> 15 0 24 4391 topology 4581 5956 -> 16 0 24 4391 topology 4582 5956 -> 15 0 23 4391 topology 4549 5957 -> 16 0 23 4391 topology 4633 5957 -> 15 0 24 4391 topology 4503 5958 -> 16 0 24 4391 topology 4504 5958 -> 15 0 23 4391 topology 4471 5959 -> 16 0 23 4391 topology 4633 5959 -> 15 0 24 4391 topology 4611 5960 -> 16 0 24 4391 topology 4612 5960 -> 15 0 23 4391 topology 4412 5961 -> 16 0 23 4391 topology 4633 5961 -> 15 0 23 4391 topology 4609 5962 -> 16 0 23 4391 topology 4633 5962 -> 15 0 24 4391 topology 4533 5963 -> 16 0 24 4391 topology 4534 5963 -> 15 0 23 4391 topology 4531 5964 -> 16 0 23 4391 topology 4633 5964 -> 15 0 24 4391 topology 4479 5965 -> 16 0 24 4391 topology 4481 5965 -> 15 0 24 4391 topology 4563 5966 -> 16 0 24 4391 topology 4564 5966 -> 15 0 23 4391 topology 4591 5967 -> 16 0 23 4391 topology 4633 5967 -> 15 0 24 4391 topology 4482 5968 -> 16 0 24 4391 topology 4484 5968 -> 15 0 24 4391 topology 4593 5969 -> 16 0 24 4391 topology 4594 5969 -> 15 0 24 4391 topology 4485 5970 -> 16 0 24 4391 topology 4487 5970 -> 15 0 24 4391 topology 4623 5971 -> 16 0 24 4391 topology 4624 5971 -> 15 0 24 4391 topology 4488 5972 -> 16 0 24 4391 topology 4490 5972 -> 15 0 25 4391 topology 4632 5973 -> 16 0 25 4391 topology 4633 5973 -> 15 0 24 4391 topology 4491 5974 -> 16 0 24 4391 topology 4493 5974 -> 15 0 23 4391 topology 4402 5975 -> 16 0 23 4391 topology 4633 5975 -> 15 0 24 4391 topology 4599 5976 -> 16 0 24 4391 topology 4601 5976 -> 15 0 24 4391 topology 4494 5977 -> 16 0 24 4391 topology 4496 5977 -> 15 0 24 4391 topology 4413 5978 -> 16 0 24 4391 topology 4415 5978 -> 15 0 24 4391 topology 4602 5979 -> 16 0 24 4391 topology 4604 5979 -> 15 0 23 4391 topology 4430 5980 -> 16 0 23 4391 topology 4633 5980 -> 15 0 23 4391 topology 4514 5981 -> 16 0 23 4391 topology 4633 5981 -> 15 0 24 4391 topology 4497 5982 -> 16 0 24 4391 topology 4499 5982 -> 15 0 24 4391 topology 4605 5983 -> 16 0 24 4391 topology 4607 5983 -> 15 0 24 4391 topology 4500 5984 -> 16 0 24 4391 topology 4502 5984 -> 15 0 23 4391 topology 4466 5985 -> 16 0 23 4391 topology 4633 5985 -> 15 0 24 4391 topology 4608 5986 -> 16 0 24 4391 topology 4610 5986 -> 15 0 23 4391 topology 4550 5987 -> 16 0 23 4391 topology 4633 5987 -> 15 0 24 4391 topology 4503 5988 -> 16 0 24 4391 topology 4505 5988 -> 15 0 24 4391 topology 4611 5989 -> 16 0 24 4391 topology 4613 5989 -> 15 0 23 4391 topology 4502 5990 -> 16 0 23 4391 topology 4633 5990 -> 15 0 24 4391 topology 4506 5991 -> 16 0 24 4391 topology 4508 5991 -> 15 0 23 4391 topology 4586 5992 -> 16 0 23 4391 topology 4633 5992 -> 15 0 24 4391 topology 4614 5993 -> 16 0 24 4391 topology 4616 5993 -> 15 0 23 4391 topology 4538 5994 -> 16 0 23 4391 topology 4633 5994 -> 15 0 24 4391 topology 4617 5995 -> 16 0 24 4391 topology 4619 5995 -> 15 0 23 4391 topology 4622 5996 -> 16 0 23 4391 topology 4633 5996 -> 15 0 24 4391 topology 4620 5997 -> 16 0 24 4391 topology 4622 5997 -> 15 0 24 4391 topology 4413 5998 -> 16 0 24 4391 topology 4414 5998 -> 15 0 23 4391 topology 4456 5999 -> 16 0 23 4391 topology 4633 5999 -> 15 0 24 4391 topology 4623 6000 -> 16 0 24 4391 topology 4625 6000 -> 15 0 23 4391 topology 4516 6001 -> 16 0 23 4391 topology 4633 6001 -> 15 0 24 4391 topology 4626 6002 -> 16 0 24 4391 topology 4628 6002 -> 15 0 23 4391 topology 4438 6003 -> 16 0 23 4391 topology 4633 6003 -> 15 0 23 4391 topology 4403 6004 -> 16 0 23 4391 topology 4633 6004 -> 15 0 23 4391 topology 4576 6005 -> 16 0 23 4391 topology 4633 6005 -> 15 0 23 4391 topology 4498 6006 -> 16 0 23 4391 topology 4633 6006 -> 15 0 23 4391 topology 4558 6007 -> 16 0 23 4391 topology 4633 6007 -> 15 0 23 4391 topology 4618 6008 -> 16 0 23 4391 topology 4633 6008 -> 15 0 23 4391 topology 4421 6009 -> 16 0 23 4391 topology 4633 6009 -> 15 0 24 4391 topology 4410 6010 -> 16 0 24 4391 topology 4412 6010 -> 15 0 23 4391 topology 4457 6011 -> 16 0 23 4391 topology 4633 6011 -> 15 0 23 4391 topology 4411 6012 -> 16 0 23 4391 topology 4633 6012 -> 15 0 23 4391 topology 4541 6013 -> 16 0 23 4391 topology 4633 6013 -> 15 0 23 4391 topology 4493 6014 -> 16 0 23 4391 topology 4633 6014 -> 15 0 24 4391 topology 4428 6015 -> 16 0 24 4391 topology 4429 6015 -> 15 0 23 4391 topology 4577 6016 -> 16 0 23 4391 topology 4633 6016 -> 15 0 23 4391 topology 4445 6017 -> 16 0 23 4391 topology 4633 6017 -> 15 0 23 4391 topology 4529 6018 -> 16 0 23 4391 topology 4633 6018 -> 15 0 24 4391 topology 4458 6019 -> 16 0 24 4391 topology 4459 6019 -> 15 0 24 4391 topology 4404 6020 -> 16 0 24 4391 topology 4405 6020 -> 15 0 23 4391 topology 4613 6021 -> 16 0 23 4391 topology 4633 6021 -> 15 0 24 4391 topology 4488 6022 -> 16 0 24 4391 topology 4489 6022 -> 15 0 23 4391 topology 4565 6023 -> 16 0 23 4391 topology 4633 6023 -> 15 0 24 4391 topology 4518 6024 -> 16 0 24 4391 topology 4519 6024 -> 15 0 23 4391 topology 4423 6025 -> 16 0 23 4391 topology 4633 6025 -> 15 0 24 4391 topology 4548 6026 -> 16 0 24 4391 topology 4549 6026 -> 15 0 24 4391 topology 4440 6027 -> 16 0 24 4391 topology 4441 6027 -> 15 0 23 4391 topology 4483 6028 -> 16 0 23 4391 topology 4633 6028 -> 15 0 23 4391 topology 4394 6029 -> 16 0 23 4391 topology 4633 6029 -> 15 0 24 4391 topology 4470 6030 -> 16 0 24 4391 topology 4471 6030 -> 15 0 24 4391 topology 4578 6031 -> 16 0 24 4391 topology 4579 6031 -> 15 0 23 4391 topology 4543 6032 -> 16 0 23 4391 topology 4633 6032 -> 15 0 24 4391 topology 4500 6033 -> 16 0 24 4391 topology 4501 6033 -> 15 0 23 4391 topology 4465 6034 -> 16 0 23 4391 topology 4633 6034 -> 15 0 24 4391 topology 4608 6035 -> 16 0 24 4391 topology 4609 6035 -> 15 0 23 4391 topology 4603 6036 -> 16 0 23 4391 topology 4633 6036 -> 15 0 24 4391 topology 4530 6037 -> 16 0 24 4391 topology 4531 6037 -> 15 0 23 4391 topology 4525 6038 -> 16 0 23 4391 topology 4633 6038 -> 15 0 23 4391 topology 4447 6039 -> 16 0 23 4391 topology 4633 6039 -> 15 0 24 4391 topology 4560 6040 -> 16 0 24 4391 topology 4561 6040 -> 15 0 23 4391 topology 4585 6041 -> 16 0 23 4391 topology 4633 6041 -> 15 0 23 4391 topology 4507 6042 -> 16 0 23 4391 topology 4633 6042 -> 15 0 23 4391 topology 4418 6043 -> 16 0 23 4391 topology 4633 6043 -> 15 0 24 4391 topology 4590 6044 -> 16 0 24 4391 topology 4591 6044 -> 15 0 24 4391 topology 4509 6045 -> 16 0 24 4391 topology 4511 6045 -> 15 0 23 4391 topology 4567 6046 -> 16 0 23 4391 topology 4633 6046 -> 15 0 24 4391 topology 4620 6047 -> 16 0 24 4391 topology 4621 6047 -> 15 0 24 4391 topology 4512 6048 -> 16 0 24 4391 topology 4514 6048 -> 15 0 23 4391 topology 4627 6049 -> 16 0 23 4391 topology 4633 6049 -> 15 0 24 4391 topology 4515 6050 -> 16 0 24 4391 topology 4517 6050 -> 15 0 24 4391 topology 4407 6051 -> 16 0 24 4391 topology 4409 6051 -> 15 0 23 4391 topology 4396 6052 -> 16 0 23 4391 topology 4633 6052 -> 15 0 24 4391 topology 4518 6053 -> 16 0 24 4391 topology 4520 6053 -> 15 0 24 4391 topology 4521 6054 -> 16 0 24 4391 topology 4523 6054 -> 15 0 24 4391 topology 4629 6055 -> 16 0 24 4391 topology 4631 6055 -> 15 0 23 4391 topology 4484 6056 -> 16 0 23 4391 topology 4633 6056 -> 15 0 24 4391 topology 4395 6057 -> 16 0 24 4391 topology 4396 6057 -> 15 0 24 4391 topology 4524 6058 -> 16 0 24 4391 topology 4526 6058 -> 15 0 23 4391 topology 4436 6059 -> 16 0 23 4391 topology 4633 6059 -> 15 0 24 4391 topology 4527 6060 -> 16 0 24 4391 topology 4529 6060 -> 15 0 23 4391 topology 4520 6061 -> 16 0 23 4391 topology 4633 6061 -> 15 0 23 4391 topology 4604 6062 -> 16 0 23 4391 topology 4633 6062 -> 15 0 24 4391 topology 4530 6063 -> 16 0 24 4391 topology 4532 6063 -> 15 0 23 4391 topology 4472 6064 -> 16 0 23 4391 topology 4633 6064 -> 15 0 23 4391 topology 4556 6065 -> 16 0 23 4391 topology 4633 6065 -> 15 0 24 4391 topology 4533 6066 -> 16 0 24 4391 topology 4535 6066 -> 15 0 24 4635 topology 4669 6067 -> 16 0 24 4635 topology 4670 6067 -> 15 0 23 4635 topology 4680 6068 +> 15 0 24 4391 topology 4632 5906 +> 16 0 24 4391 topology 4633 5906 +> 15 0 25 4391 topology 4419 5907 +> 16 0 25 4391 topology 4421 5907 +> 15 0 25 4391 topology 4419 5908 +> 16 0 25 4391 topology 4420 5908 +> 15 0 25 4391 topology 4422 5909 +> 16 0 25 4391 topology 4424 5909 +> 15 0 25 4391 topology 4422 5910 +> 16 0 25 4391 topology 4423 5910 +> 15 0 25 4391 topology 4425 5911 +> 16 0 25 4391 topology 4427 5911 +> 15 0 25 4391 topology 4425 5912 +> 16 0 25 4391 topology 4426 5912 +> 15 0 25 4391 topology 4428 5913 +> 16 0 25 4391 topology 4430 5913 +> 15 0 25 4391 topology 4428 5914 +> 16 0 25 4391 topology 4429 5914 +> 15 0 25 4391 topology 4431 5915 +> 16 0 25 4391 topology 4433 5915 +> 15 0 25 4391 topology 4431 5916 +> 16 0 25 4391 topology 4432 5916 +> 15 0 25 4391 topology 4434 5917 +> 16 0 25 4391 topology 4436 5917 +> 15 0 25 4391 topology 4434 5918 +> 16 0 25 4391 topology 4435 5918 +> 15 0 25 4391 topology 4437 5919 +> 16 0 25 4391 topology 4439 5919 +> 15 0 25 4391 topology 4437 5920 +> 16 0 25 4391 topology 4438 5920 +> 15 0 25 4391 topology 4440 5921 +> 16 0 25 4391 topology 4442 5921 +> 15 0 25 4391 topology 4440 5922 +> 16 0 25 4391 topology 4441 5922 +> 15 0 25 4391 topology 4443 5923 +> 16 0 25 4391 topology 4445 5923 +> 15 0 25 4391 topology 4443 5924 +> 16 0 25 4391 topology 4444 5924 +> 15 0 25 4391 topology 4446 5925 +> 16 0 25 4391 topology 4448 5925 +> 15 0 25 4391 topology 4446 5926 +> 16 0 25 4391 topology 4447 5926 +> 15 0 25 4391 topology 4392 5927 +> 16 0 25 4391 topology 4394 5927 +> 15 0 25 4391 topology 4392 5928 +> 16 0 25 4391 topology 4393 5928 +> 15 0 25 4391 topology 4449 5929 +> 16 0 25 4391 topology 4451 5929 +> 15 0 25 4391 topology 4449 5930 +> 16 0 25 4391 topology 4450 5930 +> 15 0 25 4391 topology 4452 5931 +> 16 0 25 4391 topology 4454 5931 +> 15 0 25 4391 topology 4452 5932 +> 16 0 25 4391 topology 4453 5932 +> 15 0 25 4391 topology 4455 5933 +> 16 0 25 4391 topology 4457 5933 +> 15 0 25 4391 topology 4455 5934 +> 16 0 25 4391 topology 4456 5934 +> 15 0 25 4391 topology 4458 5935 +> 16 0 25 4391 topology 4460 5935 +> 15 0 25 4391 topology 4458 5936 +> 16 0 25 4391 topology 4459 5936 +> 15 0 25 4391 topology 4461 5937 +> 16 0 25 4391 topology 4463 5937 +> 15 0 25 4391 topology 4461 5938 +> 16 0 25 4391 topology 4462 5938 +> 15 0 25 4391 topology 4464 5939 +> 16 0 25 4391 topology 4466 5939 +> 15 0 25 4391 topology 4464 5940 +> 16 0 25 4391 topology 4465 5940 +> 15 0 25 4391 topology 4467 5941 +> 16 0 25 4391 topology 4469 5941 +> 15 0 25 4391 topology 4467 5942 +> 16 0 25 4391 topology 4468 5942 +> 15 0 25 4391 topology 4470 5943 +> 16 0 25 4391 topology 4472 5943 +> 15 0 25 4391 topology 4470 5944 +> 16 0 25 4391 topology 4471 5944 +> 15 0 25 4391 topology 4473 5945 +> 16 0 25 4391 topology 4475 5945 +> 15 0 25 4391 topology 4473 5946 +> 16 0 25 4391 topology 4474 5946 +> 15 0 25 4391 topology 4476 5947 +> 16 0 25 4391 topology 4478 5947 +> 15 0 25 4391 topology 4476 5948 +> 16 0 25 4391 topology 4477 5948 +> 15 0 25 4391 topology 4395 5949 +> 16 0 25 4391 topology 4397 5949 +> 15 0 25 4391 topology 4395 5950 +> 16 0 25 4391 topology 4396 5950 +> 15 0 25 4391 topology 4479 5951 +> 16 0 25 4391 topology 4481 5951 +> 15 0 25 4391 topology 4479 5952 +> 16 0 25 4391 topology 4480 5952 +> 15 0 25 4391 topology 4482 5953 +> 16 0 25 4391 topology 4484 5953 +> 15 0 25 4391 topology 4482 5954 +> 16 0 25 4391 topology 4483 5954 +> 15 0 25 4391 topology 4485 5955 +> 16 0 25 4391 topology 4487 5955 +> 15 0 25 4391 topology 4485 5956 +> 16 0 25 4391 topology 4486 5956 +> 15 0 25 4391 topology 4488 5957 +> 16 0 25 4391 topology 4490 5957 +> 15 0 25 4391 topology 4488 5958 +> 16 0 25 4391 topology 4489 5958 +> 15 0 25 4391 topology 4491 5959 +> 16 0 25 4391 topology 4493 5959 +> 15 0 25 4391 topology 4491 5960 +> 16 0 25 4391 topology 4492 5960 +> 15 0 25 4391 topology 4494 5961 +> 16 0 25 4391 topology 4496 5961 +> 15 0 25 4391 topology 4494 5962 +> 16 0 25 4391 topology 4495 5962 +> 15 0 25 4391 topology 4497 5963 +> 16 0 25 4391 topology 4499 5963 +> 15 0 25 4391 topology 4497 5964 +> 16 0 25 4391 topology 4498 5964 +> 15 0 25 4391 topology 4500 5965 +> 16 0 25 4391 topology 4502 5965 +> 15 0 25 4391 topology 4500 5966 +> 16 0 25 4391 topology 4501 5966 +> 15 0 25 4391 topology 4503 5967 +> 16 0 25 4391 topology 4505 5967 +> 15 0 25 4391 topology 4503 5968 +> 16 0 25 4391 topology 4504 5968 +> 15 0 25 4391 topology 4506 5969 +> 16 0 25 4391 topology 4508 5969 +> 15 0 25 4391 topology 4506 5970 +> 16 0 25 4391 topology 4507 5970 +> 15 0 25 4391 topology 4398 5971 +> 16 0 25 4391 topology 4400 5971 +> 15 0 25 4391 topology 4398 5972 +> 16 0 25 4391 topology 4399 5972 +> 15 0 25 4391 topology 4509 5973 +> 16 0 25 4391 topology 4511 5973 +> 15 0 25 4391 topology 4509 5974 +> 16 0 25 4391 topology 4510 5974 +> 15 0 25 4391 topology 4512 5975 +> 16 0 25 4391 topology 4514 5975 +> 15 0 25 4391 topology 4512 5976 +> 16 0 25 4391 topology 4513 5976 +> 15 0 25 4391 topology 4515 5977 +> 16 0 25 4391 topology 4517 5977 +> 15 0 25 4391 topology 4515 5978 +> 16 0 25 4391 topology 4516 5978 +> 15 0 25 4391 topology 4518 5979 +> 16 0 25 4391 topology 4520 5979 +> 15 0 25 4391 topology 4518 5980 +> 16 0 25 4391 topology 4519 5980 +> 15 0 25 4391 topology 4521 5981 +> 16 0 25 4391 topology 4523 5981 +> 15 0 25 4391 topology 4521 5982 +> 16 0 25 4391 topology 4522 5982 +> 15 0 25 4391 topology 4524 5983 +> 16 0 25 4391 topology 4526 5983 +> 15 0 25 4391 topology 4524 5984 +> 16 0 25 4391 topology 4525 5984 +> 15 0 25 4391 topology 4527 5985 +> 16 0 25 4391 topology 4529 5985 +> 15 0 25 4391 topology 4527 5986 +> 16 0 25 4391 topology 4528 5986 +> 15 0 25 4391 topology 4530 5987 +> 16 0 25 4391 topology 4532 5987 +> 15 0 25 4391 topology 4530 5988 +> 16 0 25 4391 topology 4531 5988 +> 15 0 25 4391 topology 4533 5989 +> 16 0 25 4391 topology 4535 5989 +> 15 0 25 4391 topology 4533 5990 +> 16 0 25 4391 topology 4534 5990 +> 15 0 25 4391 topology 4536 5991 +> 16 0 25 4391 topology 4538 5991 +> 15 0 25 4391 topology 4536 5992 +> 16 0 25 4391 topology 4537 5992 +> 15 0 25 4391 topology 4401 5993 +> 16 0 25 4391 topology 4403 5993 +> 15 0 25 4391 topology 4401 5994 +> 16 0 25 4391 topology 4402 5994 +> 15 0 25 4391 topology 4539 5995 +> 16 0 25 4391 topology 4541 5995 +> 15 0 25 4391 topology 4539 5996 +> 16 0 25 4391 topology 4540 5996 +> 15 0 25 4391 topology 4542 5997 +> 16 0 25 4391 topology 4544 5997 +> 15 0 25 4391 topology 4542 5998 +> 16 0 25 4391 topology 4543 5998 +> 15 0 25 4391 topology 4545 5999 +> 16 0 25 4391 topology 4547 5999 +> 15 0 25 4391 topology 4545 6000 +> 16 0 25 4391 topology 4546 6000 +> 15 0 25 4391 topology 4548 6001 +> 16 0 25 4391 topology 4550 6001 +> 15 0 25 4391 topology 4548 6002 +> 16 0 25 4391 topology 4549 6002 +> 15 0 25 4391 topology 4551 6003 +> 16 0 25 4391 topology 4553 6003 +> 15 0 25 4391 topology 4551 6004 +> 16 0 25 4391 topology 4552 6004 +> 15 0 25 4391 topology 4554 6005 +> 16 0 25 4391 topology 4556 6005 +> 15 0 25 4391 topology 4554 6006 +> 16 0 25 4391 topology 4555 6006 +> 15 0 25 4391 topology 4557 6007 +> 16 0 25 4391 topology 4559 6007 +> 15 0 25 4391 topology 4557 6008 +> 16 0 25 4391 topology 4558 6008 +> 15 0 25 4391 topology 4560 6009 +> 16 0 25 4391 topology 4562 6009 +> 15 0 25 4391 topology 4560 6010 +> 16 0 25 4391 topology 4561 6010 +> 15 0 25 4391 topology 4563 6011 +> 16 0 25 4391 topology 4565 6011 +> 15 0 25 4391 topology 4563 6012 +> 16 0 25 4391 topology 4564 6012 +> 15 0 25 4391 topology 4566 6013 +> 16 0 25 4391 topology 4568 6013 +> 15 0 25 4391 topology 4566 6014 +> 16 0 25 4391 topology 4567 6014 +> 15 0 25 4391 topology 4404 6015 +> 16 0 25 4391 topology 4406 6015 +> 15 0 25 4391 topology 4404 6016 +> 16 0 25 4391 topology 4405 6016 +> 15 0 25 4391 topology 4569 6017 +> 16 0 25 4391 topology 4571 6017 +> 15 0 25 4391 topology 4569 6018 +> 16 0 25 4391 topology 4570 6018 +> 15 0 25 4391 topology 4572 6019 +> 16 0 25 4391 topology 4574 6019 +> 15 0 25 4391 topology 4572 6020 +> 16 0 25 4391 topology 4573 6020 +> 15 0 25 4391 topology 4575 6021 +> 16 0 25 4391 topology 4577 6021 +> 15 0 25 4391 topology 4575 6022 +> 16 0 25 4391 topology 4576 6022 +> 15 0 25 4391 topology 4578 6023 +> 16 0 25 4391 topology 4580 6023 +> 15 0 25 4391 topology 4578 6024 +> 16 0 25 4391 topology 4579 6024 +> 15 0 25 4391 topology 4581 6025 +> 16 0 25 4391 topology 4583 6025 +> 15 0 25 4391 topology 4581 6026 +> 16 0 25 4391 topology 4582 6026 +> 15 0 25 4391 topology 4584 6027 +> 16 0 25 4391 topology 4586 6027 +> 15 0 25 4391 topology 4584 6028 +> 16 0 25 4391 topology 4585 6028 +> 15 0 25 4391 topology 4587 6029 +> 16 0 25 4391 topology 4589 6029 +> 15 0 25 4391 topology 4587 6030 +> 16 0 25 4391 topology 4588 6030 +> 15 0 25 4391 topology 4590 6031 +> 16 0 25 4391 topology 4592 6031 +> 15 0 25 4391 topology 4590 6032 +> 16 0 25 4391 topology 4591 6032 +> 15 0 25 4391 topology 4593 6033 +> 16 0 25 4391 topology 4595 6033 +> 15 0 25 4391 topology 4593 6034 +> 16 0 25 4391 topology 4594 6034 +> 15 0 25 4391 topology 4596 6035 +> 16 0 25 4391 topology 4598 6035 +> 15 0 25 4391 topology 4596 6036 +> 16 0 25 4391 topology 4597 6036 +> 15 0 25 4391 topology 4407 6037 +> 16 0 25 4391 topology 4409 6037 +> 15 0 25 4391 topology 4407 6038 +> 16 0 25 4391 topology 4408 6038 +> 15 0 25 4391 topology 4599 6039 +> 16 0 25 4391 topology 4601 6039 +> 15 0 25 4391 topology 4599 6040 +> 16 0 25 4391 topology 4600 6040 +> 15 0 25 4391 topology 4602 6041 +> 16 0 25 4391 topology 4604 6041 +> 15 0 25 4391 topology 4602 6042 +> 16 0 25 4391 topology 4603 6042 +> 15 0 25 4391 topology 4605 6043 +> 16 0 25 4391 topology 4607 6043 +> 15 0 25 4391 topology 4605 6044 +> 16 0 25 4391 topology 4606 6044 +> 15 0 25 4391 topology 4608 6045 +> 16 0 25 4391 topology 4610 6045 +> 15 0 25 4391 topology 4608 6046 +> 16 0 25 4391 topology 4609 6046 +> 15 0 25 4391 topology 4611 6047 +> 16 0 25 4391 topology 4613 6047 +> 15 0 25 4391 topology 4611 6048 +> 16 0 25 4391 topology 4612 6048 +> 15 0 25 4391 topology 4614 6049 +> 16 0 25 4391 topology 4616 6049 +> 15 0 25 4391 topology 4614 6050 +> 16 0 25 4391 topology 4615 6050 +> 15 0 25 4391 topology 4617 6051 +> 16 0 25 4391 topology 4619 6051 +> 15 0 25 4391 topology 4617 6052 +> 16 0 25 4391 topology 4618 6052 +> 15 0 25 4391 topology 4620 6053 +> 16 0 25 4391 topology 4622 6053 +> 15 0 25 4391 topology 4620 6054 +> 16 0 25 4391 topology 4621 6054 +> 15 0 25 4391 topology 4623 6055 +> 16 0 25 4391 topology 4625 6055 +> 15 0 25 4391 topology 4623 6056 +> 16 0 25 4391 topology 4624 6056 +> 15 0 25 4391 topology 4626 6057 +> 16 0 25 4391 topology 4628 6057 +> 15 0 25 4391 topology 4626 6058 +> 16 0 25 4391 topology 4627 6058 +> 15 0 25 4391 topology 4410 6059 +> 16 0 25 4391 topology 4412 6059 +> 15 0 25 4391 topology 4410 6060 +> 16 0 25 4391 topology 4411 6060 +> 15 0 25 4391 topology 4629 6061 +> 16 0 25 4391 topology 4631 6061 +> 15 0 25 4391 topology 4629 6062 +> 16 0 25 4391 topology 4630 6062 +> 15 0 25 4391 topology 4413 6063 +> 16 0 25 4391 topology 4415 6063 +> 15 0 25 4391 topology 4413 6064 +> 16 0 25 4391 topology 4414 6064 +> 15 0 25 4391 topology 4416 6065 +> 16 0 25 4391 topology 4418 6065 +> 15 0 25 4391 topology 4416 6066 +> 16 0 25 4391 topology 4417 6066 +> 15 0 23 4635 topology 4665 6067 +> 16 0 23 4635 topology 4793 6067 +> 15 0 23 4635 topology 4664 6068 > 16 0 23 4635 topology 4793 6068 -> 15 0 23 4635 topology 4764 6069 +> 15 0 23 4635 topology 4668 6069 > 16 0 23 4635 topology 4793 6069 -> 15 0 24 4635 topology 4672 6070 -> 16 0 24 4635 topology 4673 6070 -> 15 0 23 4635 topology 4716 6071 +> 15 0 23 4635 topology 4667 6070 +> 16 0 23 4635 topology 4793 6070 +> 15 0 23 4635 topology 4671 6071 > 16 0 23 4635 topology 4793 6071 -> 15 0 24 4635 topology 4675 6072 -> 16 0 24 4635 topology 4676 6072 -> 15 0 24 4635 topology 4783 6073 -> 16 0 24 4635 topology 4784 6073 -> 15 0 24 4635 topology 4651 6074 -> 16 0 24 4635 topology 4652 6074 -> 15 0 24 4635 topology 4678 6075 -> 16 0 24 4635 topology 4679 6075 -> 15 0 23 4635 topology 4752 6076 +> 15 0 23 4635 topology 4670 6072 +> 16 0 23 4635 topology 4793 6072 +> 15 0 23 4635 topology 4674 6073 +> 16 0 23 4635 topology 4793 6073 +> 15 0 23 4635 topology 4673 6074 +> 16 0 23 4635 topology 4793 6074 +> 15 0 23 4635 topology 4677 6075 +> 16 0 23 4635 topology 4793 6075 +> 15 0 23 4635 topology 4676 6076 > 16 0 23 4635 topology 4793 6076 -> 15 0 24 4635 topology 4786 6077 -> 16 0 24 4635 topology 4787 6077 -> 15 0 23 4635 topology 4664 6078 +> 15 0 23 4635 topology 4680 6077 +> 16 0 23 4635 topology 4793 6077 +> 15 0 23 4635 topology 4679 6078 > 16 0 23 4635 topology 4793 6078 -> 15 0 24 4635 topology 4681 6079 -> 16 0 24 4635 topology 4682 6079 -> 15 0 24 4635 topology 4789 6080 -> 16 0 24 4635 topology 4790 6080 -> 15 0 24 4635 topology 4684 6081 -> 16 0 24 4635 topology 4685 6081 -> 15 0 23 4635 topology 4724 6082 +> 15 0 23 4635 topology 4683 6079 +> 16 0 23 4635 topology 4793 6079 +> 15 0 23 4635 topology 4682 6080 +> 16 0 23 4635 topology 4793 6080 +> 15 0 23 4635 topology 4686 6081 +> 16 0 23 4635 topology 4793 6081 +> 15 0 23 4635 topology 4685 6082 > 16 0 23 4635 topology 4793 6082 -> 15 0 24 4635 topology 4687 6083 -> 16 0 24 4635 topology 4688 6083 -> 15 0 23 4635 topology 4784 6084 +> 15 0 23 4635 topology 4689 6083 +> 16 0 23 4635 topology 4793 6083 +> 15 0 23 4635 topology 4688 6084 > 16 0 23 4635 topology 4793 6084 -> 15 0 23 4635 topology 4706 6085 +> 15 0 23 4635 topology 4692 6085 > 16 0 23 4635 topology 4793 6085 -> 15 0 23 4635 topology 4647 6086 +> 15 0 23 4635 topology 4691 6086 > 16 0 23 4635 topology 4793 6086 -> 15 0 24 4635 topology 4690 6087 -> 16 0 24 4635 topology 4691 6087 -> 15 0 24 4635 topology 4663 6088 -> 16 0 24 4635 topology 4665 6088 -> 15 0 23 4635 topology 4766 6089 +> 15 0 23 4635 topology 4638 6087 +> 16 0 23 4635 topology 4793 6087 +> 15 0 23 4635 topology 4637 6088 +> 16 0 23 4635 topology 4793 6088 +> 15 0 23 4635 topology 4695 6089 > 16 0 23 4635 topology 4793 6089 -> 15 0 23 4635 topology 4688 6090 +> 15 0 23 4635 topology 4694 6090 > 16 0 23 4635 topology 4793 6090 -> 15 0 23 4635 topology 4748 6091 +> 15 0 23 4635 topology 4698 6091 > 16 0 23 4635 topology 4793 6091 -> 15 0 24 4635 topology 4723 6092 -> 16 0 24 4635 topology 4725 6092 -> 15 0 24 4635 topology 4699 6093 -> 16 0 24 4635 topology 4701 6093 -> 15 0 24 4635 topology 4675 6094 -> 16 0 24 4635 topology 4677 6094 -> 15 0 24 4635 topology 4783 6095 -> 16 0 24 4635 topology 4785 6095 -> 15 0 24 4635 topology 4759 6096 -> 16 0 24 4635 topology 4761 6096 -> 15 0 23 4635 topology 4643 6097 +> 15 0 23 4635 topology 4697 6092 +> 16 0 23 4635 topology 4793 6092 +> 15 0 23 4635 topology 4701 6093 +> 16 0 23 4635 topology 4793 6093 +> 15 0 23 4635 topology 4700 6094 +> 16 0 23 4635 topology 4793 6094 +> 15 0 23 4635 topology 4704 6095 +> 16 0 23 4635 topology 4793 6095 +> 15 0 23 4635 topology 4703 6096 +> 16 0 23 4635 topology 4793 6096 +> 15 0 23 4635 topology 4707 6097 > 16 0 23 4635 topology 4793 6097 -> 15 0 24 4635 topology 4654 6098 -> 16 0 24 4635 topology 4656 6098 -> 15 0 24 4635 topology 4735 6099 -> 16 0 24 4635 topology 4737 6099 -> 15 0 23 4635 topology 4671 6100 +> 15 0 23 4635 topology 4706 6098 +> 16 0 23 4635 topology 4793 6098 +> 15 0 23 4635 topology 4710 6099 +> 16 0 23 4635 topology 4793 6099 +> 15 0 23 4635 topology 4709 6100 > 16 0 23 4635 topology 4793 6100 -> 15 0 24 4635 topology 4711 6101 -> 16 0 24 4635 topology 4713 6101 -> 15 0 23 4635 topology 4755 6102 +> 15 0 23 4635 topology 4713 6101 +> 16 0 23 4635 topology 4793 6101 +> 15 0 23 4635 topology 4712 6102 > 16 0 23 4635 topology 4793 6102 -> 15 0 24 4635 topology 4687 6103 -> 16 0 24 4635 topology 4689 6103 -> 15 0 23 4635 topology 4707 6104 +> 15 0 23 4635 topology 4716 6103 +> 16 0 23 4635 topology 4793 6103 +> 15 0 23 4635 topology 4715 6104 > 16 0 23 4635 topology 4793 6104 -> 15 0 24 4635 topology 4771 6105 -> 16 0 24 4635 topology 4773 6105 -> 15 0 23 4635 topology 4791 6106 +> 15 0 23 4635 topology 4719 6105 +> 16 0 23 4635 topology 4793 6105 +> 15 0 23 4635 topology 4718 6106 > 16 0 23 4635 topology 4793 6106 -> 15 0 23 4635 topology 4743 6107 +> 15 0 23 4635 topology 4722 6107 > 16 0 23 4635 topology 4793 6107 -> 15 0 24 4635 topology 4747 6108 -> 16 0 24 4635 topology 4749 6108 -> 15 0 24 4635 topology 4648 6109 -> 16 0 24 4635 topology 4649 6109 -> 15 0 23 4635 topology 4779 6110 +> 15 0 23 4635 topology 4721 6108 +> 16 0 23 4635 topology 4793 6108 +> 15 0 23 4635 topology 4641 6109 +> 16 0 23 4635 topology 4793 6109 +> 15 0 23 4635 topology 4640 6110 > 16 0 23 4635 topology 4793 6110 -> 15 0 23 4635 topology 4638 6111 +> 15 0 23 4635 topology 4725 6111 > 16 0 23 4635 topology 4793 6111 -> 15 0 23 4635 topology 4673 6112 +> 15 0 23 4635 topology 4724 6112 > 16 0 23 4635 topology 4793 6112 -> 15 0 23 4635 topology 4733 6113 +> 15 0 23 4635 topology 4728 6113 > 16 0 23 4635 topology 4793 6113 -> 15 0 23 4635 topology 4715 6114 +> 15 0 23 4635 topology 4727 6114 > 16 0 23 4635 topology 4793 6114 -> 15 0 23 4635 topology 4775 6115 +> 15 0 23 4635 topology 4731 6115 > 16 0 23 4635 topology 4793 6115 -> 15 0 23 4635 topology 4662 6116 +> 15 0 23 4635 topology 4730 6116 > 16 0 23 4635 topology 4793 6116 -> 15 0 23 4635 topology 4652 6117 +> 15 0 23 4635 topology 4734 6117 > 16 0 23 4635 topology 4793 6117 -> 15 0 24 4635 topology 4657 6118 -> 16 0 24 4635 topology 4659 6118 -> 15 0 23 4635 topology 4698 6119 +> 15 0 23 4635 topology 4733 6118 +> 16 0 23 4635 topology 4793 6118 +> 15 0 23 4635 topology 4737 6119 > 16 0 23 4635 topology 4793 6119 -> 15 0 24 4635 topology 4693 6120 -> 16 0 24 4635 topology 4694 6120 -> 15 0 24 4635 topology 4696 6121 -> 16 0 24 4635 topology 4697 6121 -> 15 0 23 4635 topology 4734 6122 +> 15 0 23 4635 topology 4736 6120 +> 16 0 23 4635 topology 4793 6120 +> 15 0 23 4635 topology 4740 6121 +> 16 0 23 4635 topology 4793 6121 +> 15 0 23 4635 topology 4739 6122 > 16 0 23 4635 topology 4793 6122 -> 15 0 24 4635 topology 4645 6123 -> 16 0 24 4635 topology 4646 6123 -> 15 0 23 4635 topology 4686 6124 +> 15 0 23 4635 topology 4743 6123 +> 16 0 23 4635 topology 4793 6123 +> 15 0 23 4635 topology 4742 6124 > 16 0 23 4635 topology 4793 6124 -> 15 0 24 4635 topology 4699 6125 -> 16 0 24 4635 topology 4700 6125 -> 15 0 23 4635 topology 4770 6126 +> 15 0 23 4635 topology 4746 6125 +> 16 0 23 4635 topology 4793 6125 +> 15 0 23 4635 topology 4745 6126 > 16 0 23 4635 topology 4793 6126 -> 15 0 24 4635 topology 4702 6127 -> 16 0 24 4635 topology 4703 6127 -> 15 0 23 4635 topology 4722 6128 +> 15 0 23 4635 topology 4749 6127 +> 16 0 23 4635 topology 4793 6127 +> 15 0 23 4635 topology 4748 6128 > 16 0 23 4635 topology 4793 6128 -> 15 0 24 4635 topology 4705 6129 -> 16 0 24 4635 topology 4706 6129 -> 15 0 24 4635 topology 4708 6130 -> 16 0 24 4635 topology 4709 6130 -> 15 0 24 4635 topology 4711 6131 -> 16 0 24 4635 topology 4712 6131 -> 15 0 23 4635 topology 4700 6132 +> 15 0 23 4635 topology 4752 6129 +> 16 0 23 4635 topology 4793 6129 +> 15 0 23 4635 topology 4751 6130 +> 16 0 23 4635 topology 4793 6130 +> 15 0 23 4635 topology 4644 6131 +> 16 0 23 4635 topology 4793 6131 +> 15 0 23 4635 topology 4643 6132 > 16 0 23 4635 topology 4793 6132 -> 15 0 24 4635 topology 4714 6133 -> 16 0 24 4635 topology 4715 6133 -> 15 0 23 4635 topology 4760 6134 +> 15 0 23 4635 topology 4755 6133 +> 16 0 23 4635 topology 4793 6133 +> 15 0 23 4635 topology 4754 6134 > 16 0 23 4635 topology 4793 6134 -> 15 0 23 4635 topology 4682 6135 +> 15 0 23 4635 topology 4758 6135 > 16 0 23 4635 topology 4793 6135 -> 15 0 24 4635 topology 4717 6136 -> 16 0 24 4635 topology 4718 6136 -> 15 0 24 4635 topology 4636 6137 -> 16 0 24 4635 topology 4638 6137 -> 15 0 23 4635 topology 4653 6138 +> 15 0 23 4635 topology 4757 6136 +> 16 0 23 4635 topology 4793 6136 +> 15 0 23 4635 topology 4761 6137 +> 16 0 23 4635 topology 4793 6137 +> 15 0 23 4635 topology 4760 6138 > 16 0 23 4635 topology 4793 6138 -> 15 0 24 4635 topology 4720 6139 -> 16 0 24 4635 topology 4721 6139 -> 15 0 23 4635 topology 4742 6140 +> 15 0 23 4635 topology 4764 6139 +> 16 0 23 4635 topology 4793 6139 +> 15 0 23 4635 topology 4763 6140 > 16 0 23 4635 topology 4793 6140 -> 15 0 24 4635 topology 4666 6141 -> 16 0 24 4635 topology 4668 6141 -> 15 0 24 4635 topology 4726 6142 -> 16 0 24 4635 topology 4728 6142 -> 15 0 24 4635 topology 4702 6143 -> 16 0 24 4635 topology 4704 6143 -> 15 0 23 4635 topology 4637 6144 +> 15 0 23 4635 topology 4767 6141 +> 16 0 23 4635 topology 4793 6141 +> 15 0 23 4635 topology 4766 6142 +> 16 0 23 4635 topology 4793 6142 +> 15 0 23 4635 topology 4770 6143 +> 16 0 23 4635 topology 4793 6143 +> 15 0 23 4635 topology 4769 6144 > 16 0 23 4635 topology 4793 6144 -> 15 0 24 4635 topology 4678 6145 -> 16 0 24 4635 topology 4680 6145 -> 15 0 24 4635 topology 4786 6146 -> 16 0 24 4635 topology 4788 6146 -> 15 0 24 4635 topology 4762 6147 -> 16 0 24 4635 topology 4764 6147 -> 15 0 23 4635 topology 4725 6148 +> 15 0 23 4635 topology 4773 6145 +> 16 0 23 4635 topology 4793 6145 +> 15 0 23 4635 topology 4772 6146 +> 16 0 23 4635 topology 4793 6146 +> 15 0 23 4635 topology 4776 6147 +> 16 0 23 4635 topology 4793 6147 +> 15 0 23 4635 topology 4775 6148 > 16 0 23 4635 topology 4793 6148 -> 15 0 24 4635 topology 4738 6149 -> 16 0 24 4635 topology 4740 6149 -> 15 0 24 4635 topology 4660 6150 -> 16 0 24 4635 topology 4662 6150 -> 15 0 23 4635 topology 4677 6151 +> 15 0 23 4635 topology 4779 6149 +> 16 0 23 4635 topology 4793 6149 +> 15 0 23 4635 topology 4778 6150 +> 16 0 23 4635 topology 4793 6150 +> 15 0 23 4635 topology 4782 6151 > 16 0 23 4635 topology 4793 6151 -> 15 0 24 4635 topology 4714 6152 -> 16 0 24 4635 topology 4716 6152 -> 15 0 24 4635 topology 4642 6153 -> 16 0 24 4635 topology 4643 6153 -> 15 0 23 4635 topology 4661 6154 +> 15 0 23 4635 topology 4781 6152 +> 16 0 23 4635 topology 4793 6152 +> 15 0 23 4635 topology 4647 6153 +> 16 0 23 4635 topology 4793 6153 +> 15 0 23 4635 topology 4646 6154 > 16 0 23 4635 topology 4793 6154 -> 15 0 23 4635 topology 4761 6155 +> 15 0 23 4635 topology 4785 6155 > 16 0 23 4635 topology 4793 6155 -> 15 0 24 4635 topology 4690 6156 -> 16 0 24 4635 topology 4692 6156 -> 15 0 23 4635 topology 4713 6157 +> 15 0 23 4635 topology 4784 6156 +> 16 0 23 4635 topology 4793 6156 +> 15 0 23 4635 topology 4788 6157 > 16 0 23 4635 topology 4793 6157 -> 15 0 24 4635 topology 4774 6158 -> 16 0 24 4635 topology 4776 6158 -> 15 0 23 4635 topology 4749 6159 +> 15 0 23 4635 topology 4787 6158 +> 16 0 23 4635 topology 4793 6158 +> 15 0 23 4635 topology 4791 6159 > 16 0 23 4635 topology 4793 6159 -> 15 0 24 4635 topology 4750 6160 -> 16 0 24 4635 topology 4752 6160 -> 15 0 23 4635 topology 4667 6161 +> 15 0 23 4635 topology 4790 6160 +> 16 0 23 4635 topology 4793 6160 +> 15 0 23 4635 topology 4650 6161 > 16 0 23 4635 topology 4793 6161 -> 15 0 23 4635 topology 4727 6162 +> 15 0 23 4635 topology 4649 6162 > 16 0 23 4635 topology 4793 6162 -> 15 0 23 4635 topology 4644 6163 +> 15 0 23 4635 topology 4653 6163 > 16 0 23 4635 topology 4793 6163 -> 15 0 23 4635 topology 4787 6164 +> 15 0 23 4635 topology 4652 6164 > 16 0 23 4635 topology 4793 6164 -> 15 0 23 4635 topology 4709 6165 +> 15 0 23 4635 topology 4656 6165 > 16 0 23 4635 topology 4793 6165 -> 15 0 23 4635 topology 4769 6166 +> 15 0 23 4635 topology 4655 6166 > 16 0 23 4635 topology 4793 6166 -> 15 0 24 4635 topology 4639 6167 -> 16 0 24 4635 topology 4641 6167 -> 15 0 23 4635 topology 4691 6168 +> 15 0 23 4635 topology 4659 6167 +> 16 0 23 4635 topology 4793 6167 +> 15 0 23 4635 topology 4658 6168 > 16 0 23 4635 topology 4793 6168 -> 15 0 23 4635 topology 4751 6169 +> 15 0 23 4635 topology 4662 6169 > 16 0 23 4635 topology 4793 6169 -> 15 0 23 4635 topology 4646 6170 +> 15 0 23 4635 topology 4661 6170 > 16 0 23 4635 topology 4793 6170 -> 15 0 23 4635 topology 4668 6171 -> 16 0 23 4635 topology 4793 6171 -> 15 0 25 4635 topology 4792 6172 -> 16 0 25 4635 topology 4793 6172 -> 15 0 24 4635 topology 4639 6173 -> 16 0 24 4635 topology 4640 6173 -> 15 0 23 4635 topology 4704 6174 -> 16 0 23 4635 topology 4793 6174 -> 15 0 24 4635 topology 4723 6175 -> 16 0 24 4635 topology 4724 6175 -> 15 0 23 4635 topology 4788 6176 -> 16 0 23 4635 topology 4793 6176 -> 15 0 23 4635 topology 4740 6177 -> 16 0 23 4635 topology 4793 6177 -> 15 0 24 4635 topology 4726 6178 -> 16 0 24 4635 topology 4727 6178 -> 15 0 24 4635 topology 4729 6179 -> 16 0 24 4635 topology 4730 6179 -> 15 0 23 4635 topology 4692 6180 -> 16 0 23 4635 topology 4793 6180 -> 15 0 23 4635 topology 4776 6181 -> 16 0 23 4635 topology 4793 6181 -> 15 0 24 4635 topology 4732 6182 -> 16 0 24 4635 topology 4733 6182 -> 15 0 24 4635 topology 4735 6183 -> 16 0 24 4635 topology 4736 6183 -> 15 0 23 4635 topology 4694 6184 -> 16 0 23 4635 topology 4793 6184 -> 15 0 24 4635 topology 4738 6185 -> 16 0 24 4635 topology 4739 6185 -> 15 0 23 4635 topology 4754 6186 -> 16 0 23 4635 topology 4793 6186 -> 15 0 24 4635 topology 4741 6187 -> 16 0 24 4635 topology 4742 6187 -> 15 0 23 4635 topology 4676 6188 -> 16 0 23 4635 topology 4793 6188 -> 15 0 24 4635 topology 4744 6189 -> 16 0 24 4635 topology 4745 6189 -> 15 0 23 4635 topology 4736 6190 -> 16 0 23 4635 topology 4793 6190 -> 15 0 24 4635 topology 4747 6191 -> 16 0 24 4635 topology 4748 6191 -> 15 0 23 4635 topology 4718 6192 -> 16 0 23 4635 topology 4793 6192 -> 15 0 24 4635 topology 4693 6193 -> 16 0 24 4635 topology 4695 6193 -> 15 0 24 4635 topology 4750 6194 -> 16 0 24 4635 topology 4751 6194 -> 15 0 23 4635 topology 4659 6195 -> 16 0 23 4635 topology 4793 6195 -> 15 0 23 4635 topology 4778 6196 -> 16 0 23 4635 topology 4793 6196 -> 15 0 24 4635 topology 4669 6197 -> 16 0 24 4635 topology 4671 6197 -> 15 0 24 4635 topology 4642 6198 -> 16 0 24 4635 topology 4644 6198 -> 15 0 24 4635 topology 4753 6199 -> 16 0 24 4635 topology 4755 6199 -> 15 0 24 4635 topology 4729 6200 -> 16 0 24 4635 topology 4731 6200 -> 15 0 24 4635 topology 4705 6201 -> 16 0 24 4635 topology 4707 6201 -> 15 0 24 4635 topology 4681 6202 -> 16 0 24 4635 topology 4683 6202 -> 15 0 24 4635 topology 4789 6203 -> 16 0 24 4635 topology 4791 6203 -> 15 0 23 4635 topology 4695 6204 -> 16 0 23 4635 topology 4793 6204 -> 15 0 24 4635 topology 4636 6205 -> 16 0 24 4635 topology 4637 6205 -> 15 0 24 4635 topology 4765 6206 -> 16 0 24 4635 topology 4767 6206 -> 15 0 23 4635 topology 4655 6207 -> 16 0 23 4635 topology 4793 6207 -> 15 0 24 4635 topology 4741 6208 -> 16 0 24 4635 topology 4743 6208 -> 15 0 23 4635 topology 4731 6209 -> 16 0 23 4635 topology 4793 6209 -> 15 0 24 4635 topology 4717 6210 -> 16 0 24 4635 topology 4719 6210 -> 15 0 23 4635 topology 4683 6211 -> 16 0 23 4635 topology 4793 6211 -> 15 0 23 4635 topology 4767 6212 -> 16 0 23 4635 topology 4793 6212 -> 15 0 23 4635 topology 4719 6213 -> 16 0 23 4635 topology 4793 6213 -> 15 0 24 4635 topology 4777 6214 -> 16 0 24 4635 topology 4779 6214 -> 15 0 23 4635 topology 4703 6215 -> 16 0 23 4635 topology 4793 6215 -> 15 0 24 4635 topology 4660 6216 -> 16 0 24 4635 topology 4661 6216 -> 15 0 23 4635 topology 4763 6217 -> 16 0 23 4635 topology 4793 6217 -> 15 0 23 4635 topology 4685 6218 -> 16 0 23 4635 topology 4793 6218 -> 15 0 23 4635 topology 4650 6219 -> 16 0 23 4635 topology 4793 6219 -> 15 0 23 4635 topology 4745 6220 -> 16 0 23 4635 topology 4793 6220 -> 15 0 24 4635 topology 4645 6221 -> 16 0 24 4635 topology 4647 6221 -> 15 0 23 4635 topology 4640 6222 -> 16 0 23 4635 topology 4793 6222 -> 15 0 23 4635 topology 4674 6223 -> 16 0 23 4635 topology 4793 6223 -> 15 0 23 4635 topology 4758 6224 -> 16 0 23 4635 topology 4793 6224 -> 15 0 23 4635 topology 4710 6225 -> 16 0 23 4635 topology 4793 6225 -> 15 0 24 4635 topology 4753 6226 -> 16 0 24 4635 topology 4754 6226 -> 15 0 24 4635 topology 4756 6227 -> 16 0 24 4635 topology 4757 6227 -> 15 0 23 4635 topology 4746 6228 -> 16 0 23 4635 topology 4793 6228 -> 15 0 24 4635 topology 4759 6229 -> 16 0 24 4635 topology 4760 6229 -> 15 0 23 4635 topology 4782 6230 -> 16 0 23 4635 topology 4793 6230 -> 15 0 24 4635 topology 4762 6231 -> 16 0 24 4635 topology 4763 6231 -> 15 0 24 4635 topology 4765 6232 -> 16 0 24 4635 topology 4766 6232 -> 15 0 23 4635 topology 4670 6233 -> 16 0 23 4635 topology 4793 6233 -> 15 0 24 4635 topology 4657 6234 -> 16 0 24 4635 topology 4658 6234 -> 15 0 24 4635 topology 4768 6235 -> 16 0 24 4635 topology 4769 6235 -> 15 0 23 4635 topology 4730 6236 -> 16 0 23 4635 topology 4793 6236 -> 15 0 23 4635 topology 4641 6237 -> 16 0 23 4635 topology 4793 6237 -> 15 0 24 4635 topology 4771 6238 -> 16 0 24 4635 topology 4772 6238 -> 15 0 23 4635 topology 4790 6239 -> 16 0 23 4635 topology 4793 6239 -> 15 0 23 4635 topology 4712 6240 -> 16 0 23 4635 topology 4793 6240 -> 15 0 24 4635 topology 4774 6241 -> 16 0 24 4635 topology 4775 6241 -> 15 0 23 4635 topology 4772 6242 -> 16 0 23 4635 topology 4793 6242 -> 15 0 24 4635 topology 4777 6243 -> 16 0 24 4635 topology 4778 6243 -> 15 0 24 4635 topology 4696 6244 -> 16 0 24 4635 topology 4698 6244 -> 15 0 24 4635 topology 4780 6245 -> 16 0 24 4635 topology 4781 6245 -> 15 0 24 4635 topology 4672 6246 -> 16 0 24 4635 topology 4674 6246 -> 15 0 24 4635 topology 4756 6247 -> 16 0 24 4635 topology 4758 6247 -> 15 0 24 4635 topology 4648 6248 -> 16 0 24 4635 topology 4650 6248 -> 15 0 24 4635 topology 4732 6249 -> 16 0 24 4635 topology 4734 6249 -> 15 0 24 4635 topology 4708 6250 -> 16 0 24 4635 topology 4710 6250 -> 15 0 23 4635 topology 4665 6251 -> 16 0 23 4635 topology 4793 6251 -> 15 0 23 4635 topology 4649 6252 -> 16 0 23 4635 topology 4793 6252 -> 15 0 24 4635 topology 4684 6253 -> 16 0 24 4635 topology 4686 6253 -> 15 0 23 4635 topology 4701 6254 -> 16 0 23 4635 topology 4793 6254 -> 15 0 24 4635 topology 4768 6255 -> 16 0 24 4635 topology 4770 6255 -> 15 0 23 4635 topology 4785 6256 -> 16 0 23 4635 topology 4793 6256 -> 15 0 24 4635 topology 4744 6257 -> 16 0 24 4635 topology 4746 6257 -> 15 0 23 4635 topology 4737 6258 -> 16 0 23 4635 topology 4793 6258 -> 15 0 24 4635 topology 4720 6259 -> 16 0 24 4635 topology 4722 6259 -> 15 0 23 4635 topology 4689 6260 -> 16 0 23 4635 topology 4793 6260 -> 15 0 23 4635 topology 4773 6261 -> 16 0 23 4635 topology 4793 6261 -> 15 0 24 4635 topology 4780 6262 -> 16 0 24 4635 topology 4782 6262 -> 15 0 24 4635 topology 4654 6263 -> 16 0 24 4635 topology 4655 6263 -> 15 0 23 4635 topology 4697 6264 -> 16 0 23 4635 topology 4793 6264 -> 15 0 23 4635 topology 4757 6265 -> 16 0 23 4635 topology 4793 6265 -> 15 0 23 4635 topology 4679 6266 -> 16 0 23 4635 topology 4793 6266 -> 15 0 23 4635 topology 4739 6267 -> 16 0 23 4635 topology 4793 6267 -> 15 0 23 4635 topology 4656 6268 -> 16 0 23 4635 topology 4793 6268 -> 15 0 23 4635 topology 4721 6269 -> 16 0 23 4635 topology 4793 6269 -> 15 0 23 4635 topology 4781 6270 -> 16 0 23 4635 topology 4793 6270 -> 15 0 24 4635 topology 4651 6271 -> 16 0 24 4635 topology 4653 6271 -> 15 0 24 4635 topology 4663 6272 -> 16 0 24 4635 topology 4664 6272 -> 15 0 23 4635 topology 4728 6273 -> 16 0 23 4635 topology 4793 6273 -> 15 0 24 4635 topology 4666 6274 -> 16 0 24 4635 topology 4667 6274 -> 15 0 23 4635 topology 4658 6275 -> 16 0 23 4635 topology 4793 6275 -> 15 0 26 4390 topology 4794 6276 +> 15 0 24 4635 topology 4792 6171 +> 16 0 24 4635 topology 4793 6171 +> 15 0 25 4635 topology 4663 6172 +> 16 0 25 4635 topology 4665 6172 +> 15 0 25 4635 topology 4663 6173 +> 16 0 25 4635 topology 4664 6173 +> 15 0 25 4635 topology 4666 6174 +> 16 0 25 4635 topology 4668 6174 +> 15 0 25 4635 topology 4666 6175 +> 16 0 25 4635 topology 4667 6175 +> 15 0 25 4635 topology 4669 6176 +> 16 0 25 4635 topology 4671 6176 +> 15 0 25 4635 topology 4669 6177 +> 16 0 25 4635 topology 4670 6177 +> 15 0 25 4635 topology 4672 6178 +> 16 0 25 4635 topology 4674 6178 +> 15 0 25 4635 topology 4672 6179 +> 16 0 25 4635 topology 4673 6179 +> 15 0 25 4635 topology 4675 6180 +> 16 0 25 4635 topology 4677 6180 +> 15 0 25 4635 topology 4675 6181 +> 16 0 25 4635 topology 4676 6181 +> 15 0 25 4635 topology 4678 6182 +> 16 0 25 4635 topology 4680 6182 +> 15 0 25 4635 topology 4678 6183 +> 16 0 25 4635 topology 4679 6183 +> 15 0 25 4635 topology 4681 6184 +> 16 0 25 4635 topology 4683 6184 +> 15 0 25 4635 topology 4681 6185 +> 16 0 25 4635 topology 4682 6185 +> 15 0 25 4635 topology 4684 6186 +> 16 0 25 4635 topology 4686 6186 +> 15 0 25 4635 topology 4684 6187 +> 16 0 25 4635 topology 4685 6187 +> 15 0 25 4635 topology 4687 6188 +> 16 0 25 4635 topology 4689 6188 +> 15 0 25 4635 topology 4687 6189 +> 16 0 25 4635 topology 4688 6189 +> 15 0 25 4635 topology 4690 6190 +> 16 0 25 4635 topology 4692 6190 +> 15 0 25 4635 topology 4690 6191 +> 16 0 25 4635 topology 4691 6191 +> 15 0 25 4635 topology 4636 6192 +> 16 0 25 4635 topology 4638 6192 +> 15 0 25 4635 topology 4636 6193 +> 16 0 25 4635 topology 4637 6193 +> 15 0 25 4635 topology 4693 6194 +> 16 0 25 4635 topology 4695 6194 +> 15 0 25 4635 topology 4693 6195 +> 16 0 25 4635 topology 4694 6195 +> 15 0 25 4635 topology 4696 6196 +> 16 0 25 4635 topology 4698 6196 +> 15 0 25 4635 topology 4696 6197 +> 16 0 25 4635 topology 4697 6197 +> 15 0 25 4635 topology 4699 6198 +> 16 0 25 4635 topology 4701 6198 +> 15 0 25 4635 topology 4699 6199 +> 16 0 25 4635 topology 4700 6199 +> 15 0 25 4635 topology 4702 6200 +> 16 0 25 4635 topology 4704 6200 +> 15 0 25 4635 topology 4702 6201 +> 16 0 25 4635 topology 4703 6201 +> 15 0 25 4635 topology 4705 6202 +> 16 0 25 4635 topology 4707 6202 +> 15 0 25 4635 topology 4705 6203 +> 16 0 25 4635 topology 4706 6203 +> 15 0 25 4635 topology 4708 6204 +> 16 0 25 4635 topology 4710 6204 +> 15 0 25 4635 topology 4708 6205 +> 16 0 25 4635 topology 4709 6205 +> 15 0 25 4635 topology 4711 6206 +> 16 0 25 4635 topology 4713 6206 +> 15 0 25 4635 topology 4711 6207 +> 16 0 25 4635 topology 4712 6207 +> 15 0 25 4635 topology 4714 6208 +> 16 0 25 4635 topology 4716 6208 +> 15 0 25 4635 topology 4714 6209 +> 16 0 25 4635 topology 4715 6209 +> 15 0 25 4635 topology 4717 6210 +> 16 0 25 4635 topology 4719 6210 +> 15 0 25 4635 topology 4717 6211 +> 16 0 25 4635 topology 4718 6211 +> 15 0 25 4635 topology 4720 6212 +> 16 0 25 4635 topology 4722 6212 +> 15 0 25 4635 topology 4720 6213 +> 16 0 25 4635 topology 4721 6213 +> 15 0 25 4635 topology 4639 6214 +> 16 0 25 4635 topology 4641 6214 +> 15 0 25 4635 topology 4639 6215 +> 16 0 25 4635 topology 4640 6215 +> 15 0 25 4635 topology 4723 6216 +> 16 0 25 4635 topology 4725 6216 +> 15 0 25 4635 topology 4723 6217 +> 16 0 25 4635 topology 4724 6217 +> 15 0 25 4635 topology 4726 6218 +> 16 0 25 4635 topology 4728 6218 +> 15 0 25 4635 topology 4726 6219 +> 16 0 25 4635 topology 4727 6219 +> 15 0 25 4635 topology 4729 6220 +> 16 0 25 4635 topology 4731 6220 +> 15 0 25 4635 topology 4729 6221 +> 16 0 25 4635 topology 4730 6221 +> 15 0 25 4635 topology 4732 6222 +> 16 0 25 4635 topology 4734 6222 +> 15 0 25 4635 topology 4732 6223 +> 16 0 25 4635 topology 4733 6223 +> 15 0 25 4635 topology 4735 6224 +> 16 0 25 4635 topology 4737 6224 +> 15 0 25 4635 topology 4735 6225 +> 16 0 25 4635 topology 4736 6225 +> 15 0 25 4635 topology 4738 6226 +> 16 0 25 4635 topology 4740 6226 +> 15 0 25 4635 topology 4738 6227 +> 16 0 25 4635 topology 4739 6227 +> 15 0 25 4635 topology 4741 6228 +> 16 0 25 4635 topology 4743 6228 +> 15 0 25 4635 topology 4741 6229 +> 16 0 25 4635 topology 4742 6229 +> 15 0 25 4635 topology 4744 6230 +> 16 0 25 4635 topology 4746 6230 +> 15 0 25 4635 topology 4744 6231 +> 16 0 25 4635 topology 4745 6231 +> 15 0 25 4635 topology 4747 6232 +> 16 0 25 4635 topology 4749 6232 +> 15 0 25 4635 topology 4747 6233 +> 16 0 25 4635 topology 4748 6233 +> 15 0 25 4635 topology 4750 6234 +> 16 0 25 4635 topology 4752 6234 +> 15 0 25 4635 topology 4750 6235 +> 16 0 25 4635 topology 4751 6235 +> 15 0 25 4635 topology 4642 6236 +> 16 0 25 4635 topology 4644 6236 +> 15 0 25 4635 topology 4642 6237 +> 16 0 25 4635 topology 4643 6237 +> 15 0 25 4635 topology 4753 6238 +> 16 0 25 4635 topology 4755 6238 +> 15 0 25 4635 topology 4753 6239 +> 16 0 25 4635 topology 4754 6239 +> 15 0 25 4635 topology 4756 6240 +> 16 0 25 4635 topology 4758 6240 +> 15 0 25 4635 topology 4756 6241 +> 16 0 25 4635 topology 4757 6241 +> 15 0 25 4635 topology 4759 6242 +> 16 0 25 4635 topology 4761 6242 +> 15 0 25 4635 topology 4759 6243 +> 16 0 25 4635 topology 4760 6243 +> 15 0 25 4635 topology 4762 6244 +> 16 0 25 4635 topology 4764 6244 +> 15 0 25 4635 topology 4762 6245 +> 16 0 25 4635 topology 4763 6245 +> 15 0 25 4635 topology 4765 6246 +> 16 0 25 4635 topology 4767 6246 +> 15 0 25 4635 topology 4765 6247 +> 16 0 25 4635 topology 4766 6247 +> 15 0 25 4635 topology 4768 6248 +> 16 0 25 4635 topology 4770 6248 +> 15 0 25 4635 topology 4768 6249 +> 16 0 25 4635 topology 4769 6249 +> 15 0 25 4635 topology 4771 6250 +> 16 0 25 4635 topology 4773 6250 +> 15 0 25 4635 topology 4771 6251 +> 16 0 25 4635 topology 4772 6251 +> 15 0 25 4635 topology 4774 6252 +> 16 0 25 4635 topology 4776 6252 +> 15 0 25 4635 topology 4774 6253 +> 16 0 25 4635 topology 4775 6253 +> 15 0 25 4635 topology 4777 6254 +> 16 0 25 4635 topology 4779 6254 +> 15 0 25 4635 topology 4777 6255 +> 16 0 25 4635 topology 4778 6255 +> 15 0 25 4635 topology 4780 6256 +> 16 0 25 4635 topology 4782 6256 +> 15 0 25 4635 topology 4780 6257 +> 16 0 25 4635 topology 4781 6257 +> 15 0 25 4635 topology 4645 6258 +> 16 0 25 4635 topology 4647 6258 +> 15 0 25 4635 topology 4645 6259 +> 16 0 25 4635 topology 4646 6259 +> 15 0 25 4635 topology 4783 6260 +> 16 0 25 4635 topology 4785 6260 +> 15 0 25 4635 topology 4783 6261 +> 16 0 25 4635 topology 4784 6261 +> 15 0 25 4635 topology 4786 6262 +> 16 0 25 4635 topology 4788 6262 +> 15 0 25 4635 topology 4786 6263 +> 16 0 25 4635 topology 4787 6263 +> 15 0 25 4635 topology 4789 6264 +> 16 0 25 4635 topology 4791 6264 +> 15 0 25 4635 topology 4789 6265 +> 16 0 25 4635 topology 4790 6265 +> 15 0 25 4635 topology 4648 6266 +> 16 0 25 4635 topology 4650 6266 +> 15 0 25 4635 topology 4648 6267 +> 16 0 25 4635 topology 4649 6267 +> 15 0 25 4635 topology 4651 6268 +> 16 0 25 4635 topology 4653 6268 +> 15 0 25 4635 topology 4651 6269 +> 16 0 25 4635 topology 4652 6269 +> 15 0 25 4635 topology 4654 6270 +> 16 0 25 4635 topology 4656 6270 +> 15 0 25 4635 topology 4654 6271 +> 16 0 25 4635 topology 4655 6271 +> 15 0 25 4635 topology 4657 6272 +> 16 0 25 4635 topology 4659 6272 +> 15 0 25 4635 topology 4657 6273 +> 16 0 25 4635 topology 4658 6273 +> 15 0 25 4635 topology 4660 6274 +> 16 0 25 4635 topology 4662 6274 +> 15 0 25 4635 topology 4660 6275 +> 16 0 25 4635 topology 4661 6275 +> 15 0 26 4390 topology 4634 6276 > 16 0 26 4390 topology 4796 6276 -> 15 0 21 4390 topology 4634 6277 -> 16 0 21 4390 topology 4794 6277 +> 15 0 26 4390 topology 4794 6277 +> 16 0 26 4390 topology 4796 6277 > 15 0 27 4390 topology 4632 6278 > 16 0 27 4390 topology 4634 6278 -> 15 0 26 4390 topology 4794 6279 -> 16 0 26 4390 topology 4792 6279 -> 15 0 26 4390 topology 4634 6280 -> 16 0 26 4390 topology 4796 6280 -> 15 0 26 21 topology 498 6281 -> 16 0 26 21 topology 497 6281 -> 15 0 35 0 topology 17 6282 -> 16 0 35 0 topology 1605 6282 -> 15 0 26 4390 topology 4797 6283 -> 16 0 26 4390 topology 4796 6283 -> 15 0 26 1189 topology 1605 6284 -> 16 0 26 1189 topology 1604 6284 -> 15 0 36 0 topology 11 6285 -> 16 0 36 0 topology 4389 6285 -> 15 0 36 0 topology 4 6286 -> 16 0 36 0 topology 2348 6286 -> 15 0 35 0 topology 498 6287 -> 16 0 35 0 topology 16 6287 -> 15 0 36 0 topology 5 6288 -> 16 0 36 0 topology 3920 6288 -> 15 0 35 0 topology 3414 6289 -> 16 0 35 0 topology 14 6289 -> 15 0 26 499 topology 868 6290 -> 16 0 26 499 topology 867 6290 -> 15 0 35 0 topology 16 6291 -> 16 0 35 0 topology 1605 6291 -> 15 0 35 0 topology 12 6292 -> 16 0 35 0 topology 3414 6292 -> 15 0 26 869 topology 1188 6293 -> 16 0 26 869 topology 1187 6293 -> 15 0 35 0 topology 15 6294 -> 16 0 35 0 topology 1605 6294 -> 15 0 36 0 topology 7 6295 -> 16 0 36 0 topology 498 6295 -> 15 0 35 0 topology 14 6296 -> 16 0 35 0 topology 3920 6296 -> 15 0 35 0 topology 17 6297 -> 16 0 35 0 topology 868 6297 -> 15 0 35 0 topology 20 6298 -> 16 0 35 0 topology 4797 6298 -> 15 0 36 0 topology 10 6299 -> 16 0 36 0 topology 4797 6299 -> 15 0 35 0 topology 12 6300 -> 16 0 35 0 topology 1188 6300 +> 15 0 20 4390 topology 4634 6279 +> 16 0 20 4390 topology 4794 6279 +> 15 0 26 4390 topology 4794 6280 +> 16 0 26 4390 topology 4792 6280 +> 15 0 35 0 topology 498 6281 +> 16 0 35 0 topology 16 6281 +> 15 0 35 0 topology 1605 6282 +> 16 0 35 0 topology 18 6282 +> 15 0 35 0 topology 3414 6283 +> 16 0 35 0 topology 14 6283 +> 15 0 26 21 topology 498 6284 +> 16 0 26 21 topology 497 6284 +> 15 0 26 499 topology 868 6285 +> 16 0 26 499 topology 867 6285 +> 15 0 26 869 topology 1188 6286 +> 16 0 26 869 topology 1187 6286 +> 15 0 26 1189 topology 1605 6287 +> 16 0 26 1189 topology 1604 6287 +> 15 0 26 1606 topology 2348 6288 +> 16 0 26 1606 topology 2347 6288 +> 15 0 26 2349 topology 3414 6289 +> 16 0 26 2349 topology 3413 6289 +> 15 0 26 3415 topology 3920 6290 +> 16 0 26 3415 topology 3919 6290 +> 15 0 26 3921 topology 4389 6291 +> 16 0 26 3921 topology 4388 6291 +> 15 0 26 4390 topology 4797 6292 +> 16 0 26 4390 topology 4796 6292 +> 15 0 36 0 topology 7 6293 +> 16 0 36 0 topology 498 6293 +> 15 0 35 0 topology 17 6294 +> 16 0 35 0 topology 868 6294 +> 15 0 36 0 topology 8 6295 +> 16 0 36 0 topology 868 6295 +> 15 0 35 0 topology 12 6296 +> 16 0 35 0 topology 1188 6296 +> 15 0 36 0 topology 2 6297 +> 16 0 36 0 topology 1188 6297 +> 15 0 35 0 topology 16 6298 +> 16 0 35 0 topology 1605 6298 +> 15 0 35 0 topology 17 6299 +> 16 0 35 0 topology 1605 6299 +> 15 0 35 0 topology 15 6300 +> 16 0 35 0 topology 1605 6300 > 15 0 36 0 topology 6 6301 > 16 0 36 0 topology 1605 6301 -> 15 0 26 3921 topology 4389 6302 -> 16 0 26 3921 topology 4388 6302 -> 15 0 35 0 topology 19 6303 -> 16 0 35 0 topology 4389 6303 -> 15 0 35 0 topology 13 6304 +> 15 0 35 0 topology 13 6302 +> 16 0 35 0 topology 2348 6302 +> 15 0 36 0 topology 4 6303 +> 16 0 36 0 topology 2348 6303 +> 15 0 35 0 topology 12 6304 > 16 0 35 0 topology 3414 6304 -> 15 0 26 1606 topology 2348 6305 -> 16 0 26 1606 topology 2347 6305 -> 15 0 26 3415 topology 3920 6306 -> 16 0 26 3415 topology 3919 6306 -> 15 0 26 2349 topology 3414 6307 -> 16 0 26 2349 topology 3413 6307 -> 15 0 36 0 topology 8 6308 -> 16 0 36 0 topology 868 6308 -> 15 0 35 0 topology 1605 6309 -> 16 0 35 0 topology 18 6309 -> 15 0 36 0 topology 2 6310 -> 16 0 36 0 topology 1188 6310 -> 15 0 36 0 topology 3 6311 -> 16 0 36 0 topology 3414 6311 -> 15 0 35 0 topology 15 6312 -> 16 0 35 0 topology 3414 6312 -> 15 0 35 0 topology 13 6313 -> 16 0 35 0 topology 2348 6313 +> 15 0 35 0 topology 15 6305 +> 16 0 35 0 topology 3414 6305 +> 15 0 35 0 topology 13 6306 +> 16 0 35 0 topology 3414 6306 +> 15 0 36 0 topology 3 6307 +> 16 0 36 0 topology 3414 6307 +> 15 0 35 0 topology 14 6308 +> 16 0 35 0 topology 3920 6308 +> 15 0 36 0 topology 5 6309 +> 16 0 36 0 topology 3920 6309 +> 15 0 35 0 topology 19 6310 +> 16 0 35 0 topology 4389 6310 +> 15 0 36 0 topology 11 6311 +> 16 0 36 0 topology 4389 6311 +> 15 0 35 0 topology 20 6312 +> 16 0 35 0 topology 4797 6312 +> 15 0 36 0 topology 10 6313 +> 16 0 36 0 topology 4797 6313 > 7 0 9 177 > 7 0 9 52 > 7 0 9 51 diff --git a/examples/msg/trace-process-migration/trace-process-migration.tesh b/examples/msg/trace-process-migration/trace-process-migration.tesh index 11594a19b3..b80073f1f0 100644 --- a/examples/msg/trace-process-migration/trace-process-migration.tesh +++ b/examples/msg/trace-process-migration/trace-process-migration.tesh @@ -161,98 +161,98 @@ $ tail -n +3 procmig.trace > 4 12 0 11 11 0-LINK11-LINK11 > 4 13 0 1 11 0-HOST1-LINK11 > 4 14 0 11 1 0-LINK11-HOST1 -> 15 0 12 0 topology 19 0 -> 16 0 12 0 topology 20 0 -> 15 0 12 0 topology 15 1 -> 16 0 12 0 topology 9 1 -> 15 0 12 0 topology 27 2 -> 16 0 12 0 topology 18 2 -> 15 0 13 0 topology 5 3 -> 16 0 13 0 topology 24 3 +> 15 0 12 0 topology 12 0 +> 16 0 12 0 topology 16 0 +> 15 0 12 0 topology 9 1 +> 16 0 12 0 topology 16 1 +> 15 0 12 0 topology 16 2 +> 16 0 12 0 topology 14 2 +> 15 0 12 0 topology 21 3 +> 16 0 12 0 topology 19 3 > 15 0 12 0 topology 8 4 -> 16 0 12 0 topology 10 4 -> 15 0 12 0 topology 21 5 -> 16 0 12 0 topology 22 5 -> 15 0 13 0 topology 1 6 -> 16 0 13 0 topology 9 6 -> 15 0 12 0 topology 23 7 -> 16 0 12 0 topology 24 7 -> 15 0 13 0 topology 1 8 -> 16 0 13 0 topology 15 8 -> 15 0 13 0 topology 1 9 -> 16 0 13 0 topology 11 9 -> 15 0 12 0 topology 26 10 -> 16 0 12 0 topology 27 10 -> 15 0 13 0 topology 5 11 -> 16 0 13 0 topology 18 11 -> 15 0 14 0 topology 11 12 -> 16 0 14 0 topology 2 12 -> 15 0 12 0 topology 28 13 -> 16 0 12 0 topology 29 13 -> 15 0 12 0 topology 12 14 -> 16 0 12 0 topology 16 14 -> 15 0 12 0 topology 9 15 -> 16 0 12 0 topology 16 15 -> 15 0 12 0 topology 14 16 -> 16 0 12 0 topology 13 16 -> 15 0 12 0 topology 29 17 -> 16 0 12 0 topology 11 17 -> 15 0 13 0 topology 3 18 -> 16 0 13 0 topology 30 18 -> 15 0 12 0 topology 11 19 -> 16 0 12 0 topology 15 19 +> 16 0 12 0 topology 19 4 +> 15 0 12 0 topology 19 5 +> 16 0 12 0 topology 20 5 +> 15 0 12 0 topology 8 6 +> 16 0 12 0 topology 20 6 +> 15 0 12 0 topology 27 7 +> 16 0 12 0 topology 18 7 +> 15 0 13 0 topology 5 8 +> 16 0 13 0 topology 18 8 +> 15 0 13 0 topology 4 9 +> 16 0 13 0 topology 18 9 +> 15 0 13 0 topology 2 10 +> 16 0 13 0 topology 18 10 +> 15 0 12 0 topology 16 11 +> 16 0 12 0 topology 21 11 +> 15 0 12 0 topology 21 12 +> 16 0 12 0 topology 22 12 +> 15 0 12 0 topology 9 13 +> 16 0 12 0 topology 12 13 +> 15 0 12 0 topology 15 14 +> 16 0 12 0 topology 9 14 +> 15 0 13 0 topology 1 15 +> 16 0 13 0 topology 9 15 +> 15 0 12 0 topology 20 16 +> 16 0 12 0 topology 23 16 +> 15 0 12 0 topology 23 17 +> 16 0 12 0 topology 24 17 +> 15 0 13 0 topology 5 18 +> 16 0 13 0 topology 24 18 +> 15 0 13 0 topology 4 19 +> 16 0 13 0 topology 24 19 > 15 0 13 0 topology 2 20 > 16 0 13 0 topology 24 20 -> 15 0 14 0 topology 18 21 -> 16 0 14 0 topology 6 21 -> 15 0 14 0 topology 10 22 -> 16 0 14 0 topology 5 22 -> 15 0 12 0 topology 8 23 -> 16 0 12 0 topology 19 23 -> 15 0 12 0 topology 12 24 -> 16 0 12 0 topology 25 24 -> 15 0 13 0 topology 4 25 -> 16 0 13 0 topology 24 25 -> 15 0 12 0 topology 16 26 -> 16 0 12 0 topology 14 26 -> 15 0 14 0 topology 17 27 -> 16 0 14 0 topology 4 27 -> 15 0 12 0 topology 12 28 -> 16 0 12 0 topology 17 28 -> 15 0 12 0 topology 9 29 -> 16 0 12 0 topology 17 29 -> 15 0 12 0 topology 21 30 -> 16 0 12 0 topology 19 30 -> 15 0 12 0 topology 22 31 -> 16 0 12 0 topology 25 31 -> 15 0 14 0 topology 24 32 -> 16 0 14 0 topology 7 32 -> 15 0 13 0 topology 3 33 -> 16 0 13 0 topology 28 33 -> 15 0 12 0 topology 25 34 -> 16 0 12 0 topology 26 34 -> 15 0 12 0 topology 8 35 -> 16 0 12 0 topology 20 35 -> 15 0 14 0 topology 13 36 -> 16 0 14 0 topology 3 36 -> 15 0 13 0 topology 2 37 -> 16 0 13 0 topology 18 37 -> 15 0 12 0 topology 9 38 -> 16 0 12 0 topology 12 38 -> 15 0 12 0 topology 14 39 -> 16 0 12 0 topology 8 39 -> 15 0 12 0 topology 20 40 -> 16 0 12 0 topology 23 40 -> 15 0 13 0 topology 4 41 -> 16 0 13 0 topology 18 41 -> 15 0 12 0 topology 13 42 -> 16 0 12 0 topology 8 42 -> 15 0 12 0 topology 11 43 -> 16 0 12 0 topology 8 43 -> 15 0 12 0 topology 16 44 -> 16 0 12 0 topology 21 44 -> 15 0 12 0 topology 30 45 -> 16 0 12 0 topology 28 45 +> 15 0 12 0 topology 11 21 +> 16 0 12 0 topology 15 21 +> 15 0 13 0 topology 1 22 +> 16 0 13 0 topology 15 22 +> 15 0 12 0 topology 12 23 +> 16 0 12 0 topology 17 23 +> 15 0 12 0 topology 9 24 +> 16 0 12 0 topology 17 24 +> 15 0 12 0 topology 22 25 +> 16 0 12 0 topology 25 25 +> 15 0 12 0 topology 12 26 +> 16 0 12 0 topology 25 26 +> 15 0 12 0 topology 25 27 +> 16 0 12 0 topology 26 27 +> 15 0 12 0 topology 26 28 +> 16 0 12 0 topology 27 28 +> 15 0 12 0 topology 14 29 +> 16 0 12 0 topology 8 29 +> 15 0 12 0 topology 13 30 +> 16 0 12 0 topology 8 30 +> 15 0 12 0 topology 11 31 +> 16 0 12 0 topology 8 31 +> 15 0 12 0 topology 8 32 +> 16 0 12 0 topology 10 32 +> 15 0 12 0 topology 30 33 +> 16 0 12 0 topology 28 33 +> 15 0 13 0 topology 3 34 +> 16 0 13 0 topology 28 34 +> 15 0 12 0 topology 28 35 +> 16 0 12 0 topology 29 35 +> 15 0 13 0 topology 3 36 +> 16 0 13 0 topology 30 36 +> 15 0 12 0 topology 14 37 +> 16 0 12 0 topology 13 37 +> 15 0 12 0 topology 29 38 +> 16 0 12 0 topology 11 38 +> 15 0 13 0 topology 1 39 +> 16 0 13 0 topology 11 39 +> 15 0 14 0 topology 24 40 +> 16 0 14 0 topology 7 40 +> 15 0 14 0 topology 10 41 +> 16 0 14 0 topology 5 41 +> 15 0 14 0 topology 13 42 +> 16 0 14 0 topology 3 42 +> 15 0 14 0 topology 17 43 +> 16 0 14 0 topology 4 43 +> 15 0 14 0 topology 18 44 +> 16 0 14 0 topology 6 44 +> 15 0 14 0 topology 11 45 +> 16 0 14 0 topology 2 45 > 6 0 32 2 3 "emigrant-1" > 6 0 33 2 1 "policeman-2" > 12 0 3 32 5 @@ -615,100 +615,100 @@ $ tail -n +3 procmig.trace > 8 0 15 30 0.035083 > 8 0 14 31 498000000.000000 > 8 0 15 31 0.000015 -> 15 0 17 0 topology 19 0 -> 16 0 17 0 topology 20 0 -> 15 0 17 0 topology 15 1 -> 16 0 17 0 topology 9 1 -> 15 0 17 0 topology 27 2 -> 16 0 17 0 topology 18 2 -> 15 0 18 0 topology 5 3 -> 16 0 18 0 topology 24 3 +> 15 0 17 0 topology 12 0 +> 16 0 17 0 topology 16 0 +> 15 0 17 0 topology 9 1 +> 16 0 17 0 topology 16 1 +> 15 0 17 0 topology 16 2 +> 16 0 17 0 topology 14 2 +> 15 0 17 0 topology 21 3 +> 16 0 17 0 topology 19 3 > 15 0 17 0 topology 8 4 -> 16 0 17 0 topology 10 4 -> 15 0 17 0 topology 21 5 -> 16 0 17 0 topology 22 5 -> 15 0 18 0 topology 1 6 -> 16 0 18 0 topology 9 6 -> 15 0 17 0 topology 23 7 -> 16 0 17 0 topology 24 7 -> 15 0 18 0 topology 1 8 -> 16 0 18 0 topology 15 8 -> 15 0 18 0 topology 1 9 -> 16 0 18 0 topology 11 9 -> 15 0 17 0 topology 26 10 -> 16 0 17 0 topology 27 10 -> 15 0 18 0 topology 5 11 -> 16 0 18 0 topology 18 11 -> 15 0 19 0 topology 11 12 -> 16 0 19 0 topology 2 12 -> 15 0 17 0 topology 28 13 -> 16 0 17 0 topology 29 13 -> 15 0 17 0 topology 12 14 -> 16 0 17 0 topology 16 14 -> 15 0 17 0 topology 9 15 -> 16 0 17 0 topology 16 15 -> 15 0 17 0 topology 14 16 -> 16 0 17 0 topology 13 16 -> 15 0 17 0 topology 29 17 -> 16 0 17 0 topology 11 17 -> 15 0 18 0 topology 3 18 -> 16 0 18 0 topology 30 18 -> 15 0 17 0 topology 11 19 -> 16 0 17 0 topology 15 19 +> 16 0 17 0 topology 19 4 +> 15 0 17 0 topology 19 5 +> 16 0 17 0 topology 20 5 +> 15 0 17 0 topology 8 6 +> 16 0 17 0 topology 20 6 +> 15 0 17 0 topology 27 7 +> 16 0 17 0 topology 18 7 +> 15 0 18 0 topology 5 8 +> 16 0 18 0 topology 18 8 +> 15 0 18 0 topology 4 9 +> 16 0 18 0 topology 18 9 +> 15 0 18 0 topology 2 10 +> 16 0 18 0 topology 18 10 +> 15 0 17 0 topology 16 11 +> 16 0 17 0 topology 21 11 +> 15 0 17 0 topology 21 12 +> 16 0 17 0 topology 22 12 +> 15 0 17 0 topology 9 13 +> 16 0 17 0 topology 12 13 +> 15 0 17 0 topology 15 14 +> 16 0 17 0 topology 9 14 +> 15 0 18 0 topology 1 15 +> 16 0 18 0 topology 9 15 +> 15 0 17 0 topology 20 16 +> 16 0 17 0 topology 23 16 +> 15 0 17 0 topology 23 17 +> 16 0 17 0 topology 24 17 +> 15 0 18 0 topology 5 18 +> 16 0 18 0 topology 24 18 +> 15 0 18 0 topology 4 19 +> 16 0 18 0 topology 24 19 > 15 0 18 0 topology 2 20 > 16 0 18 0 topology 24 20 -> 15 0 19 0 topology 18 21 -> 16 0 19 0 topology 6 21 -> 15 0 19 0 topology 10 22 -> 16 0 19 0 topology 5 22 -> 15 0 17 0 topology 8 23 -> 16 0 17 0 topology 19 23 -> 15 0 17 0 topology 12 24 -> 16 0 17 0 topology 25 24 -> 15 0 18 0 topology 4 25 -> 16 0 18 0 topology 24 25 -> 15 0 17 0 topology 16 26 -> 16 0 17 0 topology 14 26 -> 15 0 19 0 topology 17 27 -> 16 0 19 0 topology 4 27 -> 15 0 17 0 topology 12 28 -> 16 0 17 0 topology 17 28 -> 15 0 17 0 topology 9 29 -> 16 0 17 0 topology 17 29 -> 15 0 17 0 topology 21 30 -> 16 0 17 0 topology 19 30 -> 15 0 17 0 topology 22 31 -> 16 0 17 0 topology 25 31 -> 15 0 19 0 topology 24 32 -> 16 0 19 0 topology 7 32 -> 15 0 18 0 topology 3 33 -> 16 0 18 0 topology 28 33 -> 15 0 17 0 topology 25 34 -> 16 0 17 0 topology 26 34 -> 15 0 17 0 topology 8 35 -> 16 0 17 0 topology 20 35 -> 15 0 19 0 topology 13 36 -> 16 0 19 0 topology 3 36 -> 15 0 18 0 topology 2 37 -> 16 0 18 0 topology 18 37 -> 15 0 17 0 topology 9 38 -> 16 0 17 0 topology 12 38 -> 15 0 17 0 topology 14 39 -> 16 0 17 0 topology 8 39 -> 15 0 17 0 topology 20 40 -> 16 0 17 0 topology 23 40 -> 15 0 18 0 topology 4 41 -> 16 0 18 0 topology 18 41 -> 15 0 17 0 topology 13 42 -> 16 0 17 0 topology 8 42 -> 15 0 17 0 topology 11 43 -> 16 0 17 0 topology 8 43 -> 15 0 17 0 topology 16 44 -> 16 0 17 0 topology 21 44 -> 15 0 17 0 topology 30 45 -> 16 0 17 0 topology 28 45 -> 1 20 13 bmigration_order "0.800026 0.545312 0.857926" -> 1 21 1 pmigration_order "0.800026 0.545312 0.857926" +> 15 0 17 0 topology 11 21 +> 16 0 17 0 topology 15 21 +> 15 0 18 0 topology 1 22 +> 16 0 18 0 topology 15 22 +> 15 0 17 0 topology 12 23 +> 16 0 17 0 topology 17 23 +> 15 0 17 0 topology 9 24 +> 16 0 17 0 topology 17 24 +> 15 0 17 0 topology 22 25 +> 16 0 17 0 topology 25 25 +> 15 0 17 0 topology 12 26 +> 16 0 17 0 topology 25 26 +> 15 0 17 0 topology 25 27 +> 16 0 17 0 topology 26 27 +> 15 0 17 0 topology 26 28 +> 16 0 17 0 topology 27 28 +> 15 0 17 0 topology 14 29 +> 16 0 17 0 topology 8 29 +> 15 0 17 0 topology 13 30 +> 16 0 17 0 topology 8 30 +> 15 0 17 0 topology 11 31 +> 16 0 17 0 topology 8 31 +> 15 0 17 0 topology 8 32 +> 16 0 17 0 topology 10 32 +> 15 0 17 0 topology 30 33 +> 16 0 17 0 topology 28 33 +> 15 0 18 0 topology 3 34 +> 16 0 18 0 topology 28 34 +> 15 0 17 0 topology 28 35 +> 16 0 17 0 topology 29 35 +> 15 0 18 0 topology 3 36 +> 16 0 18 0 topology 30 36 +> 15 0 17 0 topology 14 37 +> 16 0 17 0 topology 13 37 +> 15 0 17 0 topology 29 38 +> 16 0 17 0 topology 11 38 +> 15 0 18 0 topology 1 39 +> 16 0 18 0 topology 11 39 +> 15 0 19 0 topology 24 40 +> 16 0 19 0 topology 7 40 +> 15 0 19 0 topology 10 41 +> 16 0 19 0 topology 5 41 +> 15 0 19 0 topology 13 42 +> 16 0 19 0 topology 3 42 +> 15 0 19 0 topology 17 43 +> 16 0 19 0 topology 4 43 +> 15 0 19 0 topology 18 44 +> 16 0 19 0 topology 6 44 +> 15 0 19 0 topology 11 45 +> 16 0 19 0 topology 2 45 +> 1 20 1 pmigration_order "0.800026 0.545312 0.857926" +> 1 21 13 bmigration_order "0.800026 0.545312 0.857926" > 6 0 32 4 3 "emigrant-1" > 6 0 33 4 1 "policeman-2" > 12 0 5 32 7 @@ -1217,100 +1217,100 @@ $ tail -n +3 procmig.trace > 8 0 15 30 0.035083 > 8 0 14 31 498000000.000000 > 8 0 15 31 0.000015 -> 15 0 17 0 topology 19 0 -> 16 0 17 0 topology 20 0 -> 15 0 17 0 topology 15 1 -> 16 0 17 0 topology 9 1 -> 15 0 17 0 topology 27 2 -> 16 0 17 0 topology 18 2 -> 15 0 18 0 topology 5 3 -> 16 0 18 0 topology 24 3 +> 15 0 17 0 topology 12 0 +> 16 0 17 0 topology 16 0 +> 15 0 17 0 topology 9 1 +> 16 0 17 0 topology 16 1 +> 15 0 17 0 topology 16 2 +> 16 0 17 0 topology 14 2 +> 15 0 17 0 topology 21 3 +> 16 0 17 0 topology 19 3 > 15 0 17 0 topology 8 4 -> 16 0 17 0 topology 10 4 -> 15 0 17 0 topology 21 5 -> 16 0 17 0 topology 22 5 -> 15 0 18 0 topology 1 6 -> 16 0 18 0 topology 9 6 -> 15 0 17 0 topology 23 7 -> 16 0 17 0 topology 24 7 -> 15 0 18 0 topology 1 8 -> 16 0 18 0 topology 15 8 -> 15 0 18 0 topology 1 9 -> 16 0 18 0 topology 11 9 -> 15 0 17 0 topology 26 10 -> 16 0 17 0 topology 27 10 -> 15 0 18 0 topology 5 11 -> 16 0 18 0 topology 18 11 -> 15 0 19 0 topology 11 12 -> 16 0 19 0 topology 2 12 -> 15 0 17 0 topology 28 13 -> 16 0 17 0 topology 29 13 -> 15 0 17 0 topology 12 14 -> 16 0 17 0 topology 16 14 -> 15 0 17 0 topology 9 15 -> 16 0 17 0 topology 16 15 -> 15 0 17 0 topology 14 16 -> 16 0 17 0 topology 13 16 -> 15 0 17 0 topology 29 17 -> 16 0 17 0 topology 11 17 -> 15 0 18 0 topology 3 18 -> 16 0 18 0 topology 30 18 -> 15 0 17 0 topology 11 19 -> 16 0 17 0 topology 15 19 +> 16 0 17 0 topology 19 4 +> 15 0 17 0 topology 19 5 +> 16 0 17 0 topology 20 5 +> 15 0 17 0 topology 8 6 +> 16 0 17 0 topology 20 6 +> 15 0 17 0 topology 27 7 +> 16 0 17 0 topology 18 7 +> 15 0 18 0 topology 5 8 +> 16 0 18 0 topology 18 8 +> 15 0 18 0 topology 4 9 +> 16 0 18 0 topology 18 9 +> 15 0 18 0 topology 2 10 +> 16 0 18 0 topology 18 10 +> 15 0 17 0 topology 16 11 +> 16 0 17 0 topology 21 11 +> 15 0 17 0 topology 21 12 +> 16 0 17 0 topology 22 12 +> 15 0 17 0 topology 9 13 +> 16 0 17 0 topology 12 13 +> 15 0 17 0 topology 15 14 +> 16 0 17 0 topology 9 14 +> 15 0 18 0 topology 1 15 +> 16 0 18 0 topology 9 15 +> 15 0 17 0 topology 20 16 +> 16 0 17 0 topology 23 16 +> 15 0 17 0 topology 23 17 +> 16 0 17 0 topology 24 17 +> 15 0 18 0 topology 5 18 +> 16 0 18 0 topology 24 18 +> 15 0 18 0 topology 4 19 +> 16 0 18 0 topology 24 19 > 15 0 18 0 topology 2 20 > 16 0 18 0 topology 24 20 -> 15 0 19 0 topology 18 21 -> 16 0 19 0 topology 6 21 -> 15 0 19 0 topology 10 22 -> 16 0 19 0 topology 5 22 -> 15 0 17 0 topology 8 23 -> 16 0 17 0 topology 19 23 -> 15 0 17 0 topology 12 24 -> 16 0 17 0 topology 25 24 -> 15 0 18 0 topology 4 25 -> 16 0 18 0 topology 24 25 -> 15 0 17 0 topology 16 26 -> 16 0 17 0 topology 14 26 -> 15 0 19 0 topology 17 27 -> 16 0 19 0 topology 4 27 -> 15 0 17 0 topology 12 28 -> 16 0 17 0 topology 17 28 -> 15 0 17 0 topology 9 29 -> 16 0 17 0 topology 17 29 -> 15 0 17 0 topology 21 30 -> 16 0 17 0 topology 19 30 -> 15 0 17 0 topology 22 31 -> 16 0 17 0 topology 25 31 -> 15 0 19 0 topology 24 32 -> 16 0 19 0 topology 7 32 -> 15 0 18 0 topology 3 33 -> 16 0 18 0 topology 28 33 -> 15 0 17 0 topology 25 34 -> 16 0 17 0 topology 26 34 -> 15 0 17 0 topology 8 35 -> 16 0 17 0 topology 20 35 -> 15 0 19 0 topology 13 36 -> 16 0 19 0 topology 3 36 -> 15 0 18 0 topology 2 37 -> 16 0 18 0 topology 18 37 -> 15 0 17 0 topology 9 38 -> 16 0 17 0 topology 12 38 -> 15 0 17 0 topology 14 39 -> 16 0 17 0 topology 8 39 -> 15 0 17 0 topology 20 40 -> 16 0 17 0 topology 23 40 -> 15 0 18 0 topology 4 41 -> 16 0 18 0 topology 18 41 -> 15 0 17 0 topology 13 42 -> 16 0 17 0 topology 8 42 -> 15 0 17 0 topology 11 43 -> 16 0 17 0 topology 8 43 -> 15 0 17 0 topology 16 44 -> 16 0 17 0 topology 21 44 -> 15 0 17 0 topology 30 45 -> 16 0 17 0 topology 28 45 -> 1 20 13 bmigration_order "0.800026 0.545312 0.857926" -> 1 21 1 pmigration_order "0.800026 0.545312 0.857926" +> 15 0 17 0 topology 11 21 +> 16 0 17 0 topology 15 21 +> 15 0 18 0 topology 1 22 +> 16 0 18 0 topology 15 22 +> 15 0 17 0 topology 12 23 +> 16 0 17 0 topology 17 23 +> 15 0 17 0 topology 9 24 +> 16 0 17 0 topology 17 24 +> 15 0 17 0 topology 22 25 +> 16 0 17 0 topology 25 25 +> 15 0 17 0 topology 12 26 +> 16 0 17 0 topology 25 26 +> 15 0 17 0 topology 25 27 +> 16 0 17 0 topology 26 27 +> 15 0 17 0 topology 26 28 +> 16 0 17 0 topology 27 28 +> 15 0 17 0 topology 14 29 +> 16 0 17 0 topology 8 29 +> 15 0 17 0 topology 13 30 +> 16 0 17 0 topology 8 30 +> 15 0 17 0 topology 11 31 +> 16 0 17 0 topology 8 31 +> 15 0 17 0 topology 8 32 +> 16 0 17 0 topology 10 32 +> 15 0 17 0 topology 30 33 +> 16 0 17 0 topology 28 33 +> 15 0 18 0 topology 3 34 +> 16 0 18 0 topology 28 34 +> 15 0 17 0 topology 28 35 +> 16 0 17 0 topology 29 35 +> 15 0 18 0 topology 3 36 +> 16 0 18 0 topology 30 36 +> 15 0 17 0 topology 14 37 +> 16 0 17 0 topology 13 37 +> 15 0 17 0 topology 29 38 +> 16 0 17 0 topology 11 38 +> 15 0 18 0 topology 1 39 +> 16 0 18 0 topology 11 39 +> 15 0 19 0 topology 24 40 +> 16 0 19 0 topology 7 40 +> 15 0 19 0 topology 10 41 +> 16 0 19 0 topology 5 41 +> 15 0 19 0 topology 13 42 +> 16 0 19 0 topology 3 42 +> 15 0 19 0 topology 17 43 +> 16 0 19 0 topology 4 43 +> 15 0 19 0 topology 18 44 +> 16 0 19 0 topology 6 44 +> 15 0 19 0 topology 11 45 +> 16 0 19 0 topology 2 45 +> 1 20 1 pmigration_order "0.800026 0.545312 0.857926" +> 1 21 13 bmigration_order "0.800026 0.545312 0.857926" > 6 0 32 4 3 "emigrant-1" > 6 0 33 4 1 "policeman-2" > 12 0 5 32 7 @@ -1808,100 +1808,100 @@ $ tail -n +3 simgrid.trace > 8 0 5 30 0.035083 > 8 0 4 31 498000000.000000 > 8 0 5 31 0.000015 -> 15 0 6 0 topology 19 0 -> 16 0 6 0 topology 20 0 -> 15 0 6 0 topology 15 1 -> 16 0 6 0 topology 9 1 -> 15 0 6 0 topology 27 2 -> 16 0 6 0 topology 18 2 -> 15 0 7 0 topology 5 3 -> 16 0 7 0 topology 24 3 +> 15 0 6 0 topology 12 0 +> 16 0 6 0 topology 16 0 +> 15 0 6 0 topology 9 1 +> 16 0 6 0 topology 16 1 +> 15 0 6 0 topology 16 2 +> 16 0 6 0 topology 14 2 +> 15 0 6 0 topology 21 3 +> 16 0 6 0 topology 19 3 > 15 0 6 0 topology 8 4 -> 16 0 6 0 topology 10 4 -> 15 0 6 0 topology 21 5 -> 16 0 6 0 topology 22 5 -> 15 0 7 0 topology 1 6 -> 16 0 7 0 topology 9 6 -> 15 0 6 0 topology 23 7 -> 16 0 6 0 topology 24 7 -> 15 0 7 0 topology 1 8 -> 16 0 7 0 topology 15 8 -> 15 0 7 0 topology 1 9 -> 16 0 7 0 topology 11 9 -> 15 0 6 0 topology 26 10 -> 16 0 6 0 topology 27 10 -> 15 0 7 0 topology 5 11 -> 16 0 7 0 topology 18 11 -> 15 0 8 0 topology 11 12 -> 16 0 8 0 topology 2 12 -> 15 0 6 0 topology 28 13 -> 16 0 6 0 topology 29 13 -> 15 0 6 0 topology 12 14 -> 16 0 6 0 topology 16 14 -> 15 0 6 0 topology 9 15 -> 16 0 6 0 topology 16 15 -> 15 0 6 0 topology 14 16 -> 16 0 6 0 topology 13 16 -> 15 0 6 0 topology 29 17 -> 16 0 6 0 topology 11 17 -> 15 0 7 0 topology 3 18 -> 16 0 7 0 topology 30 18 -> 15 0 6 0 topology 11 19 -> 16 0 6 0 topology 15 19 +> 16 0 6 0 topology 19 4 +> 15 0 6 0 topology 19 5 +> 16 0 6 0 topology 20 5 +> 15 0 6 0 topology 8 6 +> 16 0 6 0 topology 20 6 +> 15 0 6 0 topology 27 7 +> 16 0 6 0 topology 18 7 +> 15 0 7 0 topology 5 8 +> 16 0 7 0 topology 18 8 +> 15 0 7 0 topology 4 9 +> 16 0 7 0 topology 18 9 +> 15 0 7 0 topology 2 10 +> 16 0 7 0 topology 18 10 +> 15 0 6 0 topology 16 11 +> 16 0 6 0 topology 21 11 +> 15 0 6 0 topology 21 12 +> 16 0 6 0 topology 22 12 +> 15 0 6 0 topology 9 13 +> 16 0 6 0 topology 12 13 +> 15 0 6 0 topology 15 14 +> 16 0 6 0 topology 9 14 +> 15 0 7 0 topology 1 15 +> 16 0 7 0 topology 9 15 +> 15 0 6 0 topology 20 16 +> 16 0 6 0 topology 23 16 +> 15 0 6 0 topology 23 17 +> 16 0 6 0 topology 24 17 +> 15 0 7 0 topology 5 18 +> 16 0 7 0 topology 24 18 +> 15 0 7 0 topology 4 19 +> 16 0 7 0 topology 24 19 > 15 0 7 0 topology 2 20 > 16 0 7 0 topology 24 20 -> 15 0 8 0 topology 18 21 -> 16 0 8 0 topology 6 21 -> 15 0 8 0 topology 10 22 -> 16 0 8 0 topology 5 22 -> 15 0 6 0 topology 8 23 -> 16 0 6 0 topology 19 23 -> 15 0 6 0 topology 12 24 -> 16 0 6 0 topology 25 24 -> 15 0 7 0 topology 4 25 -> 16 0 7 0 topology 24 25 -> 15 0 6 0 topology 16 26 -> 16 0 6 0 topology 14 26 -> 15 0 8 0 topology 17 27 -> 16 0 8 0 topology 4 27 -> 15 0 6 0 topology 12 28 -> 16 0 6 0 topology 17 28 -> 15 0 6 0 topology 9 29 -> 16 0 6 0 topology 17 29 -> 15 0 6 0 topology 21 30 -> 16 0 6 0 topology 19 30 -> 15 0 6 0 topology 22 31 -> 16 0 6 0 topology 25 31 -> 15 0 8 0 topology 24 32 -> 16 0 8 0 topology 7 32 -> 15 0 7 0 topology 3 33 -> 16 0 7 0 topology 28 33 -> 15 0 6 0 topology 25 34 -> 16 0 6 0 topology 26 34 -> 15 0 6 0 topology 8 35 -> 16 0 6 0 topology 20 35 -> 15 0 8 0 topology 13 36 -> 16 0 8 0 topology 3 36 -> 15 0 7 0 topology 2 37 -> 16 0 7 0 topology 18 37 -> 15 0 6 0 topology 9 38 -> 16 0 6 0 topology 12 38 -> 15 0 6 0 topology 14 39 -> 16 0 6 0 topology 8 39 -> 15 0 6 0 topology 20 40 -> 16 0 6 0 topology 23 40 -> 15 0 7 0 topology 4 41 -> 16 0 7 0 topology 18 41 -> 15 0 6 0 topology 13 42 -> 16 0 6 0 topology 8 42 -> 15 0 6 0 topology 11 43 -> 16 0 6 0 topology 8 43 -> 15 0 6 0 topology 16 44 -> 16 0 6 0 topology 21 44 -> 15 0 6 0 topology 30 45 -> 16 0 6 0 topology 28 45 -> 1 9 3 bmigration_order "0.800026 0.545312 0.857926" -> 1 10 1 pmigration_order "0.800026 0.545312 0.857926" +> 15 0 6 0 topology 11 21 +> 16 0 6 0 topology 15 21 +> 15 0 7 0 topology 1 22 +> 16 0 7 0 topology 15 22 +> 15 0 6 0 topology 12 23 +> 16 0 6 0 topology 17 23 +> 15 0 6 0 topology 9 24 +> 16 0 6 0 topology 17 24 +> 15 0 6 0 topology 22 25 +> 16 0 6 0 topology 25 25 +> 15 0 6 0 topology 12 26 +> 16 0 6 0 topology 25 26 +> 15 0 6 0 topology 25 27 +> 16 0 6 0 topology 26 27 +> 15 0 6 0 topology 26 28 +> 16 0 6 0 topology 27 28 +> 15 0 6 0 topology 14 29 +> 16 0 6 0 topology 8 29 +> 15 0 6 0 topology 13 30 +> 16 0 6 0 topology 8 30 +> 15 0 6 0 topology 11 31 +> 16 0 6 0 topology 8 31 +> 15 0 6 0 topology 8 32 +> 16 0 6 0 topology 10 32 +> 15 0 6 0 topology 30 33 +> 16 0 6 0 topology 28 33 +> 15 0 7 0 topology 3 34 +> 16 0 7 0 topology 28 34 +> 15 0 6 0 topology 28 35 +> 16 0 6 0 topology 29 35 +> 15 0 7 0 topology 3 36 +> 16 0 7 0 topology 30 36 +> 15 0 6 0 topology 14 37 +> 16 0 6 0 topology 13 37 +> 15 0 6 0 topology 29 38 +> 16 0 6 0 topology 11 38 +> 15 0 7 0 topology 1 39 +> 16 0 7 0 topology 11 39 +> 15 0 8 0 topology 24 40 +> 16 0 8 0 topology 7 40 +> 15 0 8 0 topology 10 41 +> 16 0 8 0 topology 5 41 +> 15 0 8 0 topology 13 42 +> 16 0 8 0 topology 3 42 +> 15 0 8 0 topology 17 43 +> 16 0 8 0 topology 4 43 +> 15 0 8 0 topology 18 44 +> 16 0 8 0 topology 6 44 +> 15 0 8 0 topology 11 45 +> 16 0 8 0 topology 2 45 +> 1 9 1 pmigration_order "0.800026 0.545312 0.857926" +> 1 10 3 bmigration_order "0.800026 0.545312 0.857926" > 7 18.155073 3 16 > 7 18.155073 3 14 > 7 18.155073 3 19 @@ -2143,98 +2143,98 @@ $ tail -n +3 simgrid.trace > 8 0 6 30 0.035083 > 8 0 5 31 498000000.000000 > 8 0 6 31 0.000015 -> 15 0 8 0 topology 19 0 -> 16 0 8 0 topology 20 0 -> 15 0 8 0 topology 15 1 -> 16 0 8 0 topology 9 1 -> 15 0 8 0 topology 27 2 -> 16 0 8 0 topology 18 2 -> 15 0 9 0 topology 5 3 -> 16 0 9 0 topology 24 3 +> 15 0 8 0 topology 12 0 +> 16 0 8 0 topology 16 0 +> 15 0 8 0 topology 9 1 +> 16 0 8 0 topology 16 1 +> 15 0 8 0 topology 16 2 +> 16 0 8 0 topology 14 2 +> 15 0 8 0 topology 21 3 +> 16 0 8 0 topology 19 3 > 15 0 8 0 topology 8 4 -> 16 0 8 0 topology 10 4 -> 15 0 8 0 topology 21 5 -> 16 0 8 0 topology 22 5 -> 15 0 9 0 topology 1 6 -> 16 0 9 0 topology 9 6 -> 15 0 8 0 topology 23 7 -> 16 0 8 0 topology 24 7 -> 15 0 9 0 topology 1 8 -> 16 0 9 0 topology 15 8 -> 15 0 9 0 topology 1 9 -> 16 0 9 0 topology 11 9 -> 15 0 8 0 topology 26 10 -> 16 0 8 0 topology 27 10 -> 15 0 9 0 topology 5 11 -> 16 0 9 0 topology 18 11 -> 15 0 10 0 topology 11 12 -> 16 0 10 0 topology 2 12 -> 15 0 8 0 topology 28 13 -> 16 0 8 0 topology 29 13 -> 15 0 8 0 topology 12 14 -> 16 0 8 0 topology 16 14 -> 15 0 8 0 topology 9 15 -> 16 0 8 0 topology 16 15 -> 15 0 8 0 topology 14 16 -> 16 0 8 0 topology 13 16 -> 15 0 8 0 topology 29 17 -> 16 0 8 0 topology 11 17 -> 15 0 9 0 topology 3 18 -> 16 0 9 0 topology 30 18 -> 15 0 8 0 topology 11 19 -> 16 0 8 0 topology 15 19 +> 16 0 8 0 topology 19 4 +> 15 0 8 0 topology 19 5 +> 16 0 8 0 topology 20 5 +> 15 0 8 0 topology 8 6 +> 16 0 8 0 topology 20 6 +> 15 0 8 0 topology 27 7 +> 16 0 8 0 topology 18 7 +> 15 0 9 0 topology 5 8 +> 16 0 9 0 topology 18 8 +> 15 0 9 0 topology 4 9 +> 16 0 9 0 topology 18 9 +> 15 0 9 0 topology 2 10 +> 16 0 9 0 topology 18 10 +> 15 0 8 0 topology 16 11 +> 16 0 8 0 topology 21 11 +> 15 0 8 0 topology 21 12 +> 16 0 8 0 topology 22 12 +> 15 0 8 0 topology 9 13 +> 16 0 8 0 topology 12 13 +> 15 0 8 0 topology 15 14 +> 16 0 8 0 topology 9 14 +> 15 0 9 0 topology 1 15 +> 16 0 9 0 topology 9 15 +> 15 0 8 0 topology 20 16 +> 16 0 8 0 topology 23 16 +> 15 0 8 0 topology 23 17 +> 16 0 8 0 topology 24 17 +> 15 0 9 0 topology 5 18 +> 16 0 9 0 topology 24 18 +> 15 0 9 0 topology 4 19 +> 16 0 9 0 topology 24 19 > 15 0 9 0 topology 2 20 > 16 0 9 0 topology 24 20 -> 15 0 10 0 topology 18 21 -> 16 0 10 0 topology 6 21 -> 15 0 10 0 topology 10 22 -> 16 0 10 0 topology 5 22 -> 15 0 8 0 topology 8 23 -> 16 0 8 0 topology 19 23 -> 15 0 8 0 topology 12 24 -> 16 0 8 0 topology 25 24 -> 15 0 9 0 topology 4 25 -> 16 0 9 0 topology 24 25 -> 15 0 8 0 topology 16 26 -> 16 0 8 0 topology 14 26 -> 15 0 10 0 topology 17 27 -> 16 0 10 0 topology 4 27 -> 15 0 8 0 topology 12 28 -> 16 0 8 0 topology 17 28 -> 15 0 8 0 topology 9 29 -> 16 0 8 0 topology 17 29 -> 15 0 8 0 topology 21 30 -> 16 0 8 0 topology 19 30 -> 15 0 8 0 topology 22 31 -> 16 0 8 0 topology 25 31 -> 15 0 10 0 topology 24 32 -> 16 0 10 0 topology 7 32 -> 15 0 9 0 topology 3 33 -> 16 0 9 0 topology 28 33 -> 15 0 8 0 topology 25 34 -> 16 0 8 0 topology 26 34 -> 15 0 8 0 topology 8 35 -> 16 0 8 0 topology 20 35 -> 15 0 10 0 topology 13 36 -> 16 0 10 0 topology 3 36 -> 15 0 9 0 topology 2 37 -> 16 0 9 0 topology 18 37 -> 15 0 8 0 topology 9 38 -> 16 0 8 0 topology 12 38 -> 15 0 8 0 topology 14 39 -> 16 0 8 0 topology 8 39 -> 15 0 8 0 topology 20 40 -> 16 0 8 0 topology 23 40 -> 15 0 9 0 topology 4 41 -> 16 0 9 0 topology 18 41 -> 15 0 8 0 topology 13 42 -> 16 0 8 0 topology 8 42 -> 15 0 8 0 topology 11 43 -> 16 0 8 0 topology 8 43 -> 15 0 8 0 topology 16 44 -> 16 0 8 0 topology 21 44 -> 15 0 8 0 topology 30 45 -> 16 0 8 0 topology 28 45 +> 15 0 8 0 topology 11 21 +> 16 0 8 0 topology 15 21 +> 15 0 9 0 topology 1 22 +> 16 0 9 0 topology 15 22 +> 15 0 8 0 topology 12 23 +> 16 0 8 0 topology 17 23 +> 15 0 8 0 topology 9 24 +> 16 0 8 0 topology 17 24 +> 15 0 8 0 topology 22 25 +> 16 0 8 0 topology 25 25 +> 15 0 8 0 topology 12 26 +> 16 0 8 0 topology 25 26 +> 15 0 8 0 topology 25 27 +> 16 0 8 0 topology 26 27 +> 15 0 8 0 topology 26 28 +> 16 0 8 0 topology 27 28 +> 15 0 8 0 topology 14 29 +> 16 0 8 0 topology 8 29 +> 15 0 8 0 topology 13 30 +> 16 0 8 0 topology 8 30 +> 15 0 8 0 topology 11 31 +> 16 0 8 0 topology 8 31 +> 15 0 8 0 topology 8 32 +> 16 0 8 0 topology 10 32 +> 15 0 8 0 topology 30 33 +> 16 0 8 0 topology 28 33 +> 15 0 9 0 topology 3 34 +> 16 0 9 0 topology 28 34 +> 15 0 8 0 topology 28 35 +> 16 0 8 0 topology 29 35 +> 15 0 9 0 topology 3 36 +> 16 0 9 0 topology 30 36 +> 15 0 8 0 topology 14 37 +> 16 0 8 0 topology 13 37 +> 15 0 8 0 topology 29 38 +> 16 0 8 0 topology 11 38 +> 15 0 9 0 topology 1 39 +> 16 0 9 0 topology 11 39 +> 15 0 10 0 topology 24 40 +> 16 0 10 0 topology 7 40 +> 15 0 10 0 topology 10 41 +> 16 0 10 0 topology 5 41 +> 15 0 10 0 topology 13 42 +> 16 0 10 0 topology 3 42 +> 15 0 10 0 topology 17 43 +> 16 0 10 0 topology 4 43 +> 15 0 10 0 topology 18 44 +> 16 0 10 0 topology 6 44 +> 15 0 10 0 topology 11 45 +> 16 0 10 0 topology 2 45 > 8 2.025708 7 15 0.000000 > 9 2.025708 7 15 7536438.095238 > 10 2.025708 7 15 7536438.095238 @@ -2572,98 +2572,98 @@ $ tail -n +3 simgrid.trace > 4 12 0 11 11 0-LINK11-LINK11 > 4 13 0 1 11 0-HOST1-LINK11 > 4 14 0 11 1 0-LINK11-HOST1 -> 15 0 12 0 topology 19 0 -> 16 0 12 0 topology 20 0 -> 15 0 12 0 topology 15 1 -> 16 0 12 0 topology 9 1 -> 15 0 12 0 topology 27 2 -> 16 0 12 0 topology 18 2 -> 15 0 13 0 topology 5 3 -> 16 0 13 0 topology 24 3 +> 15 0 12 0 topology 12 0 +> 16 0 12 0 topology 16 0 +> 15 0 12 0 topology 9 1 +> 16 0 12 0 topology 16 1 +> 15 0 12 0 topology 16 2 +> 16 0 12 0 topology 14 2 +> 15 0 12 0 topology 21 3 +> 16 0 12 0 topology 19 3 > 15 0 12 0 topology 8 4 -> 16 0 12 0 topology 10 4 -> 15 0 12 0 topology 21 5 -> 16 0 12 0 topology 22 5 -> 15 0 13 0 topology 1 6 -> 16 0 13 0 topology 9 6 -> 15 0 12 0 topology 23 7 -> 16 0 12 0 topology 24 7 -> 15 0 13 0 topology 1 8 -> 16 0 13 0 topology 15 8 -> 15 0 13 0 topology 1 9 -> 16 0 13 0 topology 11 9 -> 15 0 12 0 topology 26 10 -> 16 0 12 0 topology 27 10 -> 15 0 13 0 topology 5 11 -> 16 0 13 0 topology 18 11 -> 15 0 14 0 topology 11 12 -> 16 0 14 0 topology 2 12 -> 15 0 12 0 topology 28 13 -> 16 0 12 0 topology 29 13 -> 15 0 12 0 topology 12 14 -> 16 0 12 0 topology 16 14 -> 15 0 12 0 topology 9 15 -> 16 0 12 0 topology 16 15 -> 15 0 12 0 topology 14 16 -> 16 0 12 0 topology 13 16 -> 15 0 12 0 topology 29 17 -> 16 0 12 0 topology 11 17 -> 15 0 13 0 topology 3 18 -> 16 0 13 0 topology 30 18 -> 15 0 12 0 topology 11 19 -> 16 0 12 0 topology 15 19 +> 16 0 12 0 topology 19 4 +> 15 0 12 0 topology 19 5 +> 16 0 12 0 topology 20 5 +> 15 0 12 0 topology 8 6 +> 16 0 12 0 topology 20 6 +> 15 0 12 0 topology 27 7 +> 16 0 12 0 topology 18 7 +> 15 0 13 0 topology 5 8 +> 16 0 13 0 topology 18 8 +> 15 0 13 0 topology 4 9 +> 16 0 13 0 topology 18 9 +> 15 0 13 0 topology 2 10 +> 16 0 13 0 topology 18 10 +> 15 0 12 0 topology 16 11 +> 16 0 12 0 topology 21 11 +> 15 0 12 0 topology 21 12 +> 16 0 12 0 topology 22 12 +> 15 0 12 0 topology 9 13 +> 16 0 12 0 topology 12 13 +> 15 0 12 0 topology 15 14 +> 16 0 12 0 topology 9 14 +> 15 0 13 0 topology 1 15 +> 16 0 13 0 topology 9 15 +> 15 0 12 0 topology 20 16 +> 16 0 12 0 topology 23 16 +> 15 0 12 0 topology 23 17 +> 16 0 12 0 topology 24 17 +> 15 0 13 0 topology 5 18 +> 16 0 13 0 topology 24 18 +> 15 0 13 0 topology 4 19 +> 16 0 13 0 topology 24 19 > 15 0 13 0 topology 2 20 > 16 0 13 0 topology 24 20 -> 15 0 14 0 topology 18 21 -> 16 0 14 0 topology 6 21 -> 15 0 14 0 topology 10 22 -> 16 0 14 0 topology 5 22 -> 15 0 12 0 topology 8 23 -> 16 0 12 0 topology 19 23 -> 15 0 12 0 topology 12 24 -> 16 0 12 0 topology 25 24 -> 15 0 13 0 topology 4 25 -> 16 0 13 0 topology 24 25 -> 15 0 12 0 topology 16 26 -> 16 0 12 0 topology 14 26 -> 15 0 14 0 topology 17 27 -> 16 0 14 0 topology 4 27 -> 15 0 12 0 topology 12 28 -> 16 0 12 0 topology 17 28 -> 15 0 12 0 topology 9 29 -> 16 0 12 0 topology 17 29 -> 15 0 12 0 topology 21 30 -> 16 0 12 0 topology 19 30 -> 15 0 12 0 topology 22 31 -> 16 0 12 0 topology 25 31 -> 15 0 14 0 topology 24 32 -> 16 0 14 0 topology 7 32 -> 15 0 13 0 topology 3 33 -> 16 0 13 0 topology 28 33 -> 15 0 12 0 topology 25 34 -> 16 0 12 0 topology 26 34 -> 15 0 12 0 topology 8 35 -> 16 0 12 0 topology 20 35 -> 15 0 14 0 topology 13 36 -> 16 0 14 0 topology 3 36 -> 15 0 13 0 topology 2 37 -> 16 0 13 0 topology 18 37 -> 15 0 12 0 topology 9 38 -> 16 0 12 0 topology 12 38 -> 15 0 12 0 topology 14 39 -> 16 0 12 0 topology 8 39 -> 15 0 12 0 topology 20 40 -> 16 0 12 0 topology 23 40 -> 15 0 13 0 topology 4 41 -> 16 0 13 0 topology 18 41 -> 15 0 12 0 topology 13 42 -> 16 0 12 0 topology 8 42 -> 15 0 12 0 topology 11 43 -> 16 0 12 0 topology 8 43 -> 15 0 12 0 topology 16 44 -> 16 0 12 0 topology 21 44 -> 15 0 12 0 topology 30 45 -> 16 0 12 0 topology 28 45 +> 15 0 12 0 topology 11 21 +> 16 0 12 0 topology 15 21 +> 15 0 13 0 topology 1 22 +> 16 0 13 0 topology 15 22 +> 15 0 12 0 topology 12 23 +> 16 0 12 0 topology 17 23 +> 15 0 12 0 topology 9 24 +> 16 0 12 0 topology 17 24 +> 15 0 12 0 topology 22 25 +> 16 0 12 0 topology 25 25 +> 15 0 12 0 topology 12 26 +> 16 0 12 0 topology 25 26 +> 15 0 12 0 topology 25 27 +> 16 0 12 0 topology 26 27 +> 15 0 12 0 topology 26 28 +> 16 0 12 0 topology 27 28 +> 15 0 12 0 topology 14 29 +> 16 0 12 0 topology 8 29 +> 15 0 12 0 topology 13 30 +> 16 0 12 0 topology 8 30 +> 15 0 12 0 topology 11 31 +> 16 0 12 0 topology 8 31 +> 15 0 12 0 topology 8 32 +> 16 0 12 0 topology 10 32 +> 15 0 12 0 topology 30 33 +> 16 0 12 0 topology 28 33 +> 15 0 13 0 topology 3 34 +> 16 0 13 0 topology 28 34 +> 15 0 12 0 topology 28 35 +> 16 0 12 0 topology 29 35 +> 15 0 13 0 topology 3 36 +> 16 0 13 0 topology 30 36 +> 15 0 12 0 topology 14 37 +> 16 0 12 0 topology 13 37 +> 15 0 12 0 topology 29 38 +> 16 0 12 0 topology 11 38 +> 15 0 13 0 topology 1 39 +> 16 0 13 0 topology 11 39 +> 15 0 14 0 topology 24 40 +> 16 0 14 0 topology 7 40 +> 15 0 14 0 topology 10 41 +> 16 0 14 0 topology 5 41 +> 15 0 14 0 topology 13 42 +> 16 0 14 0 topology 3 42 +> 15 0 14 0 topology 17 43 +> 16 0 14 0 topology 4 43 +> 15 0 14 0 topology 18 44 +> 16 0 14 0 topology 6 44 +> 15 0 14 0 topology 11 45 +> 16 0 14 0 topology 2 45 > 6 0 32 2 3 "emigrant-1" > 6 0 33 2 1 "policeman-2" > 12 0 3 32 5 diff --git a/examples/msg/trace-route-user-variables/trace-route-user-variables.tesh b/examples/msg/trace-route-user-variables/trace-route-user-variables.tesh index 22a67560ad..33ba72b48a 100644 --- a/examples/msg/trace-route-user-variables/trace-route-user-variables.tesh +++ b/examples/msg/trace-route-user-variables/trace-route-user-variables.tesh @@ -208,98 +208,98 @@ $ tail -n +3 simgrid.trace > 8 0 5 30 0.035083 > 8 0 4 31 498000000.000000 > 8 0 5 31 0.000015 -> 15 0 6 0 topology 19 0 -> 16 0 6 0 topology 20 0 -> 15 0 6 0 topology 15 1 -> 16 0 6 0 topology 9 1 -> 15 0 6 0 topology 27 2 -> 16 0 6 0 topology 18 2 -> 15 0 7 0 topology 5 3 -> 16 0 7 0 topology 24 3 +> 15 0 6 0 topology 12 0 +> 16 0 6 0 topology 16 0 +> 15 0 6 0 topology 9 1 +> 16 0 6 0 topology 16 1 +> 15 0 6 0 topology 16 2 +> 16 0 6 0 topology 14 2 +> 15 0 6 0 topology 21 3 +> 16 0 6 0 topology 19 3 > 15 0 6 0 topology 8 4 -> 16 0 6 0 topology 10 4 -> 15 0 6 0 topology 21 5 -> 16 0 6 0 topology 22 5 -> 15 0 7 0 topology 1 6 -> 16 0 7 0 topology 9 6 -> 15 0 6 0 topology 23 7 -> 16 0 6 0 topology 24 7 -> 15 0 7 0 topology 1 8 -> 16 0 7 0 topology 15 8 -> 15 0 7 0 topology 1 9 -> 16 0 7 0 topology 11 9 -> 15 0 6 0 topology 26 10 -> 16 0 6 0 topology 27 10 -> 15 0 7 0 topology 5 11 -> 16 0 7 0 topology 18 11 -> 15 0 8 0 topology 11 12 -> 16 0 8 0 topology 2 12 -> 15 0 6 0 topology 28 13 -> 16 0 6 0 topology 29 13 -> 15 0 6 0 topology 12 14 -> 16 0 6 0 topology 16 14 -> 15 0 6 0 topology 9 15 -> 16 0 6 0 topology 16 15 -> 15 0 6 0 topology 14 16 -> 16 0 6 0 topology 13 16 -> 15 0 6 0 topology 29 17 -> 16 0 6 0 topology 11 17 -> 15 0 7 0 topology 3 18 -> 16 0 7 0 topology 30 18 -> 15 0 6 0 topology 11 19 -> 16 0 6 0 topology 15 19 +> 16 0 6 0 topology 19 4 +> 15 0 6 0 topology 19 5 +> 16 0 6 0 topology 20 5 +> 15 0 6 0 topology 8 6 +> 16 0 6 0 topology 20 6 +> 15 0 6 0 topology 27 7 +> 16 0 6 0 topology 18 7 +> 15 0 7 0 topology 5 8 +> 16 0 7 0 topology 18 8 +> 15 0 7 0 topology 4 9 +> 16 0 7 0 topology 18 9 +> 15 0 7 0 topology 2 10 +> 16 0 7 0 topology 18 10 +> 15 0 6 0 topology 16 11 +> 16 0 6 0 topology 21 11 +> 15 0 6 0 topology 21 12 +> 16 0 6 0 topology 22 12 +> 15 0 6 0 topology 9 13 +> 16 0 6 0 topology 12 13 +> 15 0 6 0 topology 15 14 +> 16 0 6 0 topology 9 14 +> 15 0 7 0 topology 1 15 +> 16 0 7 0 topology 9 15 +> 15 0 6 0 topology 20 16 +> 16 0 6 0 topology 23 16 +> 15 0 6 0 topology 23 17 +> 16 0 6 0 topology 24 17 +> 15 0 7 0 topology 5 18 +> 16 0 7 0 topology 24 18 +> 15 0 7 0 topology 4 19 +> 16 0 7 0 topology 24 19 > 15 0 7 0 topology 2 20 > 16 0 7 0 topology 24 20 -> 15 0 8 0 topology 18 21 -> 16 0 8 0 topology 6 21 -> 15 0 8 0 topology 10 22 -> 16 0 8 0 topology 5 22 -> 15 0 6 0 topology 8 23 -> 16 0 6 0 topology 19 23 -> 15 0 6 0 topology 12 24 -> 16 0 6 0 topology 25 24 -> 15 0 7 0 topology 4 25 -> 16 0 7 0 topology 24 25 -> 15 0 6 0 topology 16 26 -> 16 0 6 0 topology 14 26 -> 15 0 8 0 topology 17 27 -> 16 0 8 0 topology 4 27 -> 15 0 6 0 topology 12 28 -> 16 0 6 0 topology 17 28 -> 15 0 6 0 topology 9 29 -> 16 0 6 0 topology 17 29 -> 15 0 6 0 topology 21 30 -> 16 0 6 0 topology 19 30 -> 15 0 6 0 topology 22 31 -> 16 0 6 0 topology 25 31 -> 15 0 8 0 topology 24 32 -> 16 0 8 0 topology 7 32 -> 15 0 7 0 topology 3 33 -> 16 0 7 0 topology 28 33 -> 15 0 6 0 topology 25 34 -> 16 0 6 0 topology 26 34 -> 15 0 6 0 topology 8 35 -> 16 0 6 0 topology 20 35 -> 15 0 8 0 topology 13 36 -> 16 0 8 0 topology 3 36 -> 15 0 7 0 topology 2 37 -> 16 0 7 0 topology 18 37 -> 15 0 6 0 topology 9 38 -> 16 0 6 0 topology 12 38 -> 15 0 6 0 topology 14 39 -> 16 0 6 0 topology 8 39 -> 15 0 6 0 topology 20 40 -> 16 0 6 0 topology 23 40 -> 15 0 7 0 topology 4 41 -> 16 0 7 0 topology 18 41 -> 15 0 6 0 topology 13 42 -> 16 0 6 0 topology 8 42 -> 15 0 6 0 topology 11 43 -> 16 0 6 0 topology 8 43 -> 15 0 6 0 topology 16 44 -> 16 0 6 0 topology 21 44 -> 15 0 6 0 topology 30 45 -> 16 0 6 0 topology 28 45 +> 15 0 6 0 topology 11 21 +> 16 0 6 0 topology 15 21 +> 15 0 7 0 topology 1 22 +> 16 0 7 0 topology 15 22 +> 15 0 6 0 topology 12 23 +> 16 0 6 0 topology 17 23 +> 15 0 6 0 topology 9 24 +> 16 0 6 0 topology 17 24 +> 15 0 6 0 topology 22 25 +> 16 0 6 0 topology 25 25 +> 15 0 6 0 topology 12 26 +> 16 0 6 0 topology 25 26 +> 15 0 6 0 topology 25 27 +> 16 0 6 0 topology 26 27 +> 15 0 6 0 topology 26 28 +> 16 0 6 0 topology 27 28 +> 15 0 6 0 topology 14 29 +> 16 0 6 0 topology 8 29 +> 15 0 6 0 topology 13 30 +> 16 0 6 0 topology 8 30 +> 15 0 6 0 topology 11 31 +> 16 0 6 0 topology 8 31 +> 15 0 6 0 topology 8 32 +> 16 0 6 0 topology 10 32 +> 15 0 6 0 topology 30 33 +> 16 0 6 0 topology 28 33 +> 15 0 7 0 topology 3 34 +> 16 0 7 0 topology 28 34 +> 15 0 6 0 topology 28 35 +> 16 0 6 0 topology 29 35 +> 15 0 7 0 topology 3 36 +> 16 0 7 0 topology 30 36 +> 15 0 6 0 topology 14 37 +> 16 0 6 0 topology 13 37 +> 15 0 6 0 topology 29 38 +> 16 0 6 0 topology 11 38 +> 15 0 7 0 topology 1 39 +> 16 0 7 0 topology 11 39 +> 15 0 8 0 topology 24 40 +> 16 0 8 0 topology 7 40 +> 15 0 8 0 topology 10 41 +> 16 0 8 0 topology 5 41 +> 15 0 8 0 topology 13 42 +> 16 0 8 0 topology 3 42 +> 15 0 8 0 topology 17 43 +> 16 0 8 0 topology 4 43 +> 15 0 8 0 topology 18 44 +> 16 0 8 0 topology 6 44 +> 15 0 8 0 topology 11 45 +> 16 0 8 0 topology 2 45 > 1 9 3 Link_Capacity "1 1 1" > 1 10 3 Link_Utilization "0.9 0.1 0.1" > 8 0 9 15 12.340000 diff --git a/examples/s4u/CMakeLists.txt b/examples/s4u/CMakeLists.txt index 88c3619e6e..5a9d1cc390 100644 --- a/examples/s4u/CMakeLists.txt +++ b/examples/s4u/CMakeLists.txt @@ -1,5 +1,6 @@ foreach (example actions-comm actions-storage - actor-create actor-daemon actor-kill actor-migration actor-suspend actor-priority + actor-create actor-daemon actor-kill actor-migration actor-suspend + actor-create actor-daemon actor-execute actor-kill actor-lifetime actor-migration actor-suspend actor-priority app-masterworker app-pingpong app-token-ring async-wait async-waitany async-waitall plugin-hostload io mutex) @@ -33,9 +34,12 @@ set(examples_src ${examples_src} set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/app-bittorrent/s4u-app-bittorrent.tesh ${CMAKE_CURRENT_SOURCE_DIR}/dht-chord/s4u-dht-chord.tesh ${CMAKE_CURRENT_SOURCE_DIR}/actor-priority/s4u-actor-priority.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/actor-lifetime/s4u-actor-lifetime.tesh ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/s4u-async-wait.tesh ${CMAKE_CURRENT_SOURCE_DIR}/async-waitany/s4u-async-waitany.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/async-waitall/s4u-async-waitall.tesh PARENT_SCOPE) + ${CMAKE_CURRENT_SOURCE_DIR}/async-waitall/s4u-async-waitall.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/actor-execute/s4u-actor-execute.tesh + PARENT_SCOPE) set(xml_files ${xml_files} ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm-split_d.xml ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm_d.xml ${CMAKE_CURRENT_SOURCE_DIR}/actions-storage/s4u-actions-storage_d.xml @@ -46,7 +50,9 @@ set(xml_files ${xml_files} ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-a ${CMAKE_CURRENT_SOURCE_DIR}/async-waitany/s4u-async-waitany_d.xml ${CMAKE_CURRENT_SOURCE_DIR}/async-waitall/s4u-async-waitall_d.xml ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/s4u-async-wait_d.xml - ${CMAKE_CURRENT_SOURCE_DIR}/dht-chord/s4u-dht-chord_d.xml PARENT_SCOPE) + ${CMAKE_CURRENT_SOURCE_DIR}/dht-chord/s4u-dht-chord_d.xml + ${CMAKE_CURRENT_SOURCE_DIR}/actor-lifetime/s4u-actor-lifetime_d.xml + PARENT_SCOPE) set(txt_files ${txt_files} ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm-split-p0.txt ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm-split-p1.txt ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-actions-comm.txt @@ -54,7 +60,7 @@ set(txt_files ${txt_files} ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u-a ${CMAKE_CURRENT_SOURCE_DIR}/README.doc PARENT_SCOPE) foreach(example actions-comm actions-storage - actor-create actor-daemon actor-kill actor-migration actor-suspend + actor-create actor-daemon actor-execute actor-kill actor-lifetime actor-migration actor-suspend app-bittorrent app-masterworker app-pingpong app-token-ring async-wait async-waitall async-waitany actor-priority dht-chord plugin-hostload io mutex) diff --git a/examples/s4u/README.doc b/examples/s4u/README.doc index 6fa1f80f83..96691c5b7f 100644 --- a/examples/s4u/README.doc +++ b/examples/s4u/README.doc @@ -26,9 +26,9 @@ documentation, but it should remain readable directly. Shows how to start your actors to populate your simulation. - Ping Pong: @ref examples/s4u/app-pingpong/s4u-app-pingpong.c\n - It's hard to think of a simpler example: it is just sending one message back and forth. - The tesh file laying in the directory show how to start the simulator binary, highlighting how to pass options to - the simulators (as detailed in Section \ref options). + This simple example just sends one message back and forth. + The tesh file laying in the directory show how to start the simulator binary, highlighting how to pass options to + the simulators (as detailed in Section \ref options). - Token ring: @ref examples/s4u/app-token-ring/s4u-app-token-ring.cpp \n Shows how to implement a classical communication pattern, where a token is exchanged along a ring to reach every @@ -38,7 +38,7 @@ documentation, but it should remain readable directly. Another good old example, where one Master process has a bunch of task to dispatch to a set of several Worker processes. -@section msg_ex_async Asynchronous communications +@section s4u_ex_async Asynchronous communications - Basic asynchronous communications. @ref examples/s4u/async-wait/s4u-async-wait.cpp \n @@ -57,7 +57,7 @@ documentation, but it should remain readable directly. @ref examples/s4u/async-waitany/s4u-async-waitany.cpp\n The @ref simgrid::s4u::Comm::wait_any() function is useful when you want to block until one activity of the set completes, no matter which terminates - first. + first. @section s4u_ex_actors Acting on Actors @@ -65,6 +65,13 @@ documentation, but it should remain readable directly. @ref examples/s4u/actor-create/s4u-actor-create.cpp \n Most actors are started from the deployment XML file, but they exist other methods. + - Actors using CPU time. + @ref examples/s4u/actor-execute/s4u-actor-execute.cpp \n + The computations done in your program are not reported to the + simulated world, unless you explicitely request the simulator to pause + the actor until a given amount of flops gets computed on its simulated + host. + - Daemonize actors @ref examples/s4u/actor-daemon/s4u-actor-daemon.cpp \n Some actors may be intended to simulate daemons that run in background. This example show how to transform a regular @@ -84,6 +91,12 @@ documentation, but it should remain readable directly. @ref examples/s4u/actor-kill/s4u-actor-kill.cpp \n Actors can forcefully stop other actors with the @ref kill method. + - Controling the actor life cycle from the XML. + @ref examples/s4u/actor-lifetime/s4u-actor-lifetime.cpp + @ref examples/s4u/actor-lifetime/s4u-actor-lifetime_d.xml + \n + You can specify a start time and a kill time in the deployment file. + - Migrating Actors. @ref examples/s4u/actor-migration/s4u-actor-migration.cpp \n Actors can move or be moved from a host to another with the @ref migrate method. @@ -129,7 +142,10 @@ also the tesh files in the example directories for details. @example examples/s4u/actor-create/s4u-actor-create.cpp @example examples/s4u/actor-create/s4u-actor-create_d.xml @example examples/s4u/actor-daemon/s4u-actor-daemon.cpp +@example examples/s4u/actor-execute/s4u-actor-execute.cpp @example examples/s4u/actor-kill/s4u-actor-kill.cpp +@example examples/s4u/actor-lifetime/s4u-actor-lifetime.cpp +@example examples/s4u/actor-lifetime/s4u-actor-lifetime_d.xml @example examples/s4u/actor-migration/s4u-actor-migration.cpp @example examples/s4u/actor-suspend/s4u-actor-suspend.cpp @example examples/s4u/app-token-ring/s4u-app-token-ring.cpp diff --git a/examples/s4u/actions-comm/s4u-actions-comm.cpp b/examples/s4u/actions-comm/s4u-actions-comm.cpp index f620071304..5a1faacf53 100644 --- a/examples/s4u/actions-comm/s4u-actions-comm.cpp +++ b/examples/s4u/actions-comm/s4u-actions-comm.cpp @@ -6,6 +6,7 @@ #include "simgrid/s4u.hpp" #include "xbt/replay.hpp" #include "xbt/str.h" +#include XBT_LOG_NEW_DEFAULT_CATEGORY(actions, "Messages specific for this msg example"); @@ -59,13 +60,13 @@ public: static void send(const char* const* action) { double size = std::stod(action[3]); - char* payload = xbt_strdup(action[3]); + std::string* payload = new std::string(action[3]); double clock = simgrid::s4u::Engine::getClock(); simgrid::s4u::MailboxPtr to = simgrid::s4u::Mailbox::byName(simgrid::s4u::this_actor::getName() + "_" + action[2]); ACT_DEBUG("Entering Send: %s (size: %g) -- Actor %s on mailbox %s", NAME, size, - simgrid::s4u::this_actor::getName().c_str(), to->getName()); + simgrid::s4u::this_actor::getCname(), to->getCname()); to->put(payload, size); - xbt_free(payload); + delete payload; log_action(action, simgrid::s4u::Engine::getClock() - clock); } @@ -76,8 +77,7 @@ public: simgrid::s4u::MailboxPtr from = simgrid::s4u::Mailbox::byName(std::string(action[2]) + "_" + simgrid::s4u::this_actor::getName()); - ACT_DEBUG("Receiving: %s -- Actor %s on mailbox %s", NAME, simgrid::s4u::this_actor::getName().c_str(), - from->getName()); + ACT_DEBUG("Receiving: %s -- Actor %s on mailbox %s", NAME, simgrid::s4u::this_actor::getCname(), from->getCname()); from->get(); log_action(action, simgrid::s4u::Engine::getClock() - clock); } diff --git a/examples/s4u/actor-create/s4u-actor-create.cpp b/examples/s4u/actor-create/s4u-actor-create.cpp index 33ed245dac..87530584fe 100644 --- a/examples/s4u/actor-create/s4u-actor-create.cpp +++ b/examples/s4u/actor-create/s4u-actor-create.cpp @@ -18,6 +18,7 @@ */ #include +#include // This declares a logging channel so that XBT_INFO can be used later XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_actor_create, "The logging channel used in this example"); @@ -42,7 +43,7 @@ public: XBT_INFO("Hello s4u, I have something to send"); simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName("mb42"); - mailbox->put(xbt_strdup(msg.c_str()), msg.size()); + mailbox->put(new std::string(msg), msg.size()); XBT_INFO("I'm done. See you."); } }; @@ -72,13 +73,13 @@ public: } void operator()() { - XBT_INFO("Hello s4u, I'm ready to get any message you'd want on %s", mailbox->getName()); + XBT_INFO("Hello s4u, I'm ready to get any message you'd want on %s", mailbox->getCname()); - char* msg1 = static_cast(mailbox->get()); - char* msg2 = static_cast(mailbox->get()); - XBT_INFO("I received '%s' and '%s'", msg1, msg2); - xbt_free(msg1); - xbt_free(msg2); + std::string* msg1 = static_cast(mailbox->get()); + std::string* msg2 = static_cast(mailbox->get()); + XBT_INFO("I received '%s' and '%s'", msg1->c_str(), msg2->c_str()); + delete msg1; + delete msg2; XBT_INFO("I'm done. See you."); } }; diff --git a/examples/s4u/actor-execute/s4u-actor-execute.cpp b/examples/s4u/actor-execute/s4u-actor-execute.cpp new file mode 100644 index 0000000000..9fc417d823 --- /dev/null +++ b/examples/s4u/actor-execute/s4u-actor-execute.cpp @@ -0,0 +1,31 @@ +/* Copyright (c) 2010-2017. The SimGrid Team. All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#include "simgrid/s4u.hpp" + +static int executor(std::vector /*args*/) +{ + /* this_actor::execute() tells SimGrid to pause the calling actor + * until its host has computed the amount of flops passed as a parameter */ + simgrid::s4u::this_actor::execute(100); + + /* This simple example does not do anything beyond that */ + return 0; +} + +int main(int argc, char *argv[]) +{ + simgrid::s4u::Engine e(&argc, argv); + std::vector args; + xbt_assert(argc > 1, "Usage: %s platform_file\n\tExample: %s msg_platform.xml\n", argv[0], argv[0]); + + e.loadPlatform(argv[1]); + + simgrid::s4u::Actor::createActor("executor", simgrid::s4u::Host::by_name("Tremblay"), executor, args); + + e.run(); + + return 0; +} diff --git a/examples/s4u/actor-execute/s4u-actor-execute.tesh b/examples/s4u/actor-execute/s4u-actor-execute.tesh new file mode 100644 index 0000000000..e4575eb320 --- /dev/null +++ b/examples/s4u/actor-execute/s4u-actor-execute.tesh @@ -0,0 +1,4 @@ +#! ./tesh + +p Start remote processes +$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-execute$EXEEXT ${srcdir:=.}/small_platform.xml diff --git a/examples/s4u/actor-lifetime/s4u-actor-lifetime.cpp b/examples/s4u/actor-lifetime/s4u-actor-lifetime.cpp new file mode 100644 index 0000000000..8f2b4eca25 --- /dev/null +++ b/examples/s4u/actor-lifetime/s4u-actor-lifetime.cpp @@ -0,0 +1,46 @@ +/* Copyright (c) 2007-2017. The SimGrid Team. All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#include "simgrid/s4u.hpp" + +XBT_LOG_NEW_DEFAULT_CATEGORY(test, "Messages specific for this s4u example"); + +/* Executed on process termination, to display a message helping to understand the output */ +static int my_onexit(void*, void*) +{ + XBT_INFO("Exiting now (done sleeping or got killed)."); + return 0; +} + +/* Just sleep until termination */ +class sleeper { + +public: + explicit sleeper(std::vector /*args*/) + { + XBT_INFO("Hello! I go to sleep."); + simgrid::s4u::this_actor::onExit(my_onexit, NULL); + + simgrid::s4u::this_actor::sleep_for(10); + } + void operator()() { XBT_INFO("Done sleeping."); } +}; + +int main(int argc, char* argv[]) +{ + simgrid::s4u::Engine e(&argc, argv); + + xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n" + "\tExample: %s msg_platform.xml msg_deployment.xml\n", + argv[0], argv[0]); + + e.loadPlatform(argv[1]); /* - Load the platform description */ + e.registerFunction("sleeper"); + e.loadDeployment(argv[2]); /* - Deploy the sleeper processes with explicit start/kill times */ + + e.run(); /* - Run the simulation */ + + return 0; +} diff --git a/examples/s4u/actor-lifetime/s4u-actor-lifetime.tesh b/examples/s4u/actor-lifetime/s4u-actor-lifetime.tesh new file mode 100644 index 0000000000..9b525ce2b3 --- /dev/null +++ b/examples/s4u/actor-lifetime/s4u-actor-lifetime.tesh @@ -0,0 +1,14 @@ +#! ./tesh + +$ $SG_TEST_EXENV ${bindir:=.}/s4u-actor-lifetime ${srcdir:=.}/cluster.xml ${srcdir:=.}/../s4u/actor-lifetime/s4u-actor-lifetime_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +> [ 0.000000] (1:sleeper@node-0.acme.org) Hello! I go to sleep. +> [ 0.000000] (2:sleeper@node-1.acme.org) Hello! I go to sleep. +> [ 2.000000] (3:sleeper@node-0.acme.org) Hello! I go to sleep. +> [ 3.000000] (2:sleeper@node-1.acme.org) Exiting now (done sleeping or got killed). +> [ 4.000000] (4:sleeper@node-2.acme.org) Hello! I go to sleep. +> [ 7.000000] (4:sleeper@node-2.acme.org) Exiting now (done sleeping or got killed). +> [ 10.000000] (1:sleeper@node-0.acme.org) Done sleeping. +> [ 10.000000] (1:sleeper@node-0.acme.org) Exiting now (done sleeping or got killed). +> [ 12.000000] (3:sleeper@node-0.acme.org) Done sleeping. +> [ 12.000000] (3:sleeper@node-0.acme.org) Exiting now (done sleeping or got killed). + diff --git a/examples/s4u/actor-lifetime/s4u-actor-lifetime_d.xml b/examples/s4u/actor-lifetime/s4u-actor-lifetime_d.xml new file mode 100644 index 0000000000..c69e987886 --- /dev/null +++ b/examples/s4u/actor-lifetime/s4u-actor-lifetime_d.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/s4u/app-bittorrent/s4u-bittorrent.hpp b/examples/s4u/app-bittorrent/s4u-bittorrent.hpp index a3b296a2af..61e64bda80 100644 --- a/examples/s4u/app-bittorrent/s4u-bittorrent.hpp +++ b/examples/s4u/app-bittorrent/s4u-bittorrent.hpp @@ -44,7 +44,7 @@ #define MESSAGE_CANCEL_SIZE 17 /** Types of messages exchanged between two peers. */ -typedef enum { +enum e_message_type { MESSAGE_HANDSHAKE, MESSAGE_CHOKE, MESSAGE_UNCHOKE, @@ -55,7 +55,7 @@ typedef enum { MESSAGE_REQUEST, MESSAGE_PIECE, MESSAGE_CANCEL -} e_message_type; +}; class Message { public: diff --git a/examples/s4u/app-bittorrent/s4u-peer.cpp b/examples/s4u/app-bittorrent/s4u-peer.cpp index 8f57ee9942..3225496027 100644 --- a/examples/s4u/app-bittorrent/s4u-peer.cpp +++ b/examples/s4u/app-bittorrent/s4u-peer.cpp @@ -128,13 +128,13 @@ void Peer::sendHandshakeToAllPeers() void Peer::sendMessage(simgrid::s4u::MailboxPtr mailbox, e_message_type type, uint64_t size) { const char* type_names[6] = {"HANDSHAKE", "CHOKE", "UNCHOKE", "INTERESTED", "NOTINTERESTED", "CANCEL"}; - XBT_DEBUG("Sending %s to %s", type_names[type], mailbox->getName()); + XBT_DEBUG("Sending %s to %s", type_names[type], mailbox->getCname()); mailbox->put_init(new Message(type, id, bitfield_, mailbox_), size)->detach(); } void Peer::sendBitfield(simgrid::s4u::MailboxPtr mailbox) { - XBT_DEBUG("Sending a BITFIELD to %s", mailbox->getName()); + XBT_DEBUG("Sending a BITFIELD to %s", mailbox->getCname()); mailbox ->put_init(new Message(MESSAGE_BITFIELD, id, bitfield_, mailbox_), MESSAGE_BITFIELD_SIZE + BITS_TO_BYTES(FILE_PIECES)) @@ -144,7 +144,7 @@ void Peer::sendBitfield(simgrid::s4u::MailboxPtr mailbox) void Peer::sendPiece(simgrid::s4u::MailboxPtr mailbox, unsigned int piece, int block_index, int block_length) { xbt_assert(not hasNotPiece(piece), "Tried to send a unavailable piece."); - XBT_DEBUG("Sending the PIECE %u (%d,%d) to %s", piece, block_index, block_length, mailbox->getName()); + XBT_DEBUG("Sending the PIECE %u (%d,%d) to %s", piece, block_index, block_length, mailbox->getCname()); mailbox->put_init(new Message(MESSAGE_PIECE, id, mailbox_, piece, block_index, block_length), BLOCK_SIZE)->detach(); } @@ -164,7 +164,7 @@ void Peer::sendRequestTo(Connection* remote_peer, unsigned int piece) int block_index = getFirstMissingBlockFrom(piece); if (block_index != -1) { int block_length = MIN(BLOCKS_REQUESTED, PIECES_BLOCKS - block_index); - XBT_DEBUG("Sending a REQUEST to %s for piece %u (%d,%d)", remote_peer->mailbox_->getName(), piece, block_index, + XBT_DEBUG("Sending a REQUEST to %s for piece %u (%d,%d)", remote_peer->mailbox_->getCname(), piece, block_index, block_length); remote_peer->mailbox_ ->put_init(new Message(MESSAGE_REQUEST, id, mailbox_, piece, block_index, block_length), MESSAGE_REQUEST_SIZE) @@ -233,7 +233,7 @@ void Peer::leech() /* Send a "handshake" message to all the peers it got (since it couldn't have gotten more than 50 peers) */ sendHandshakeToAllPeers(); - XBT_DEBUG("Starting main leech loop listening on mailbox: %s", mailbox_->getName()); + XBT_DEBUG("Starting main leech loop listening on mailbox: %s", mailbox_->getCname()); void* data = nullptr; while (simgrid::s4u::Engine::getClock() < deadline && countPieces(bitfield_) < FILE_PIECES) { @@ -299,7 +299,7 @@ void Peer::handleMessage() const char* type_names[10] = {"HANDSHAKE", "CHOKE", "UNCHOKE", "INTERESTED", "NOTINTERESTED", "HAVE", "BITFIELD", "REQUEST", "PIECE", "CANCEL"}; - XBT_DEBUG("Received a %s message from %s", type_names[message->type], message->return_mailbox->getName()); + XBT_DEBUG("Received a %s message from %s", type_names[message->type], message->return_mailbox->getCname()); auto known_peer = connected_peers.find(message->peer_id); Connection* remote_peer = (known_peer == connected_peers.end()) ? nullptr : known_peer->second; diff --git a/examples/s4u/app-masterworker/s4u-app-masterworker.cpp b/examples/s4u/app-masterworker/s4u-app-masterworker.cpp index e21badf55c..199299ae05 100644 --- a/examples/s4u/app-masterworker/s4u-app-masterworker.cpp +++ b/examples/s4u/app-masterworker/s4u-app-masterworker.cpp @@ -37,7 +37,7 @@ public: if (number_of_tasks < 10000 || i % 10000 == 0) XBT_INFO("Sending \"%s\" (of %ld) to mailbox \"%s\"", (std::string("Task_") + std::to_string(i)).c_str(), - number_of_tasks, mailbox->getName()); + number_of_tasks, mailbox->getCname()); /* - Send the computation amount to the @ref worker */ mailbox->put(new double(comp_size), comm_size); diff --git a/examples/s4u/app-token-ring/s4u-app-token-ring.cpp b/examples/s4u/app-token-ring/s4u-app-token-ring.cpp index 7f242e4eab..388e19f6fe 100644 --- a/examples/s4u/app-token-ring/s4u-app-token-ring.cpp +++ b/examples/s4u/app-token-ring/s4u-app-token-ring.cpp @@ -38,15 +38,15 @@ public: if (rank == 0) { /* The root process (rank 0) first sends the token then waits to receive it back */ - XBT_INFO("Host \"%u\" send 'Token' to Host \"%s\"", rank, neighbor_mailbox->getName()); - neighbor_mailbox->put(xbt_strdup("Token"), task_comm_size); - char* res = static_cast(my_mailbox->get()); - XBT_INFO("Host \"%u\" received \"%s\"", rank, res); - xbt_free(res); + XBT_INFO("Host \"%u\" send 'Token' to Host \"%s\"", rank, neighbor_mailbox->getCname()); + std::string msg = "Token"; + neighbor_mailbox->put(&msg, task_comm_size); + std::string* res = static_cast(my_mailbox->get()); + XBT_INFO("Host \"%u\" received \"%s\"", rank, res->c_str()); } else { - char* res = static_cast(my_mailbox->get()); - XBT_INFO("Host \"%u\" received \"%s\"", rank, res); - XBT_INFO("Host \"%u\" send 'Token' to Host \"%s\"", rank, neighbor_mailbox->getName()); + std::string* res = static_cast(my_mailbox->get()); + XBT_INFO("Host \"%u\" received \"%s\"", rank, res->c_str()); + XBT_INFO("Host \"%u\" send 'Token' to Host \"%s\"", rank, neighbor_mailbox->getCname()); neighbor_mailbox->put(res, task_comm_size); } } diff --git a/examples/s4u/async-wait/s4u-async-wait.cpp b/examples/s4u/async-wait/s4u-async-wait.cpp index 7742ccaabc..f7b1968af6 100644 --- a/examples/s4u/async-wait/s4u-async-wait.cpp +++ b/examples/s4u/async-wait/s4u-async-wait.cpp @@ -14,6 +14,7 @@ #include "simgrid/s4u.hpp" #include #include +#include XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_wait, "Messages specific for this s4u example"); @@ -40,11 +41,11 @@ public: std::string mboxName = std::string("receiver-") + std::to_string(i % receivers_count); simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName); std::string msgName = std::string("Message ") + std::to_string(i); - char* payload = xbt_strdup(msgName.c_str()); // copy the data we send: 'msgName' is not a stable storage location - + std::string* payload = new std::string(msgName); // copy the data we send: + // 'msgName' is not a stable storage location XBT_INFO("Send '%s' to '%s'", msgName.c_str(), mboxName.c_str()); /* Create a communication representing the ongoing communication */ - simgrid::s4u::CommPtr comm = mbox->put_async((void*)payload, msg_size); + simgrid::s4u::CommPtr comm = mbox->put_async(payload, msg_size); /* Add this comm to the vector of all known comms */ pending_comms.push_back(comm); } @@ -53,9 +54,9 @@ public: for (int i = 0; i < receivers_count; i++) { std::string mboxName = std::string("receiver-") + std::to_string(i % receivers_count); simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName); - char* payload = xbt_strdup("finalize"); // Make a copy of the data we will send + std::string* payload = new std::string("finalize"); // Make a copy of the data we will send - simgrid::s4u::CommPtr comm = mbox->put_async((void*)payload, 0); + simgrid::s4u::CommPtr comm = mbox->put_async(payload, 0); pending_comms.push_back(comm); XBT_INFO("Send 'finalize' to 'receiver-%ld'", i % receivers_count); } @@ -87,15 +88,12 @@ public: void operator()() { XBT_INFO("Wait for my first message"); - while (1) { - char* received = static_cast(mbox->get()); - XBT_INFO("I got a '%s'.", received); - if (std::strcmp(received, "finalize") == 0) { /* If it's a finalize message, we're done */ - xbt_free(received); - break; - } - /* Otherwise receiving the message was all we were supposed to do */ - xbt_free(received); + for (bool cont = true; cont;) { + std::string* received = static_cast(mbox->get()); + XBT_INFO("I got a '%s'.", received->c_str()); + cont = (*received != "finalize"); // If it's a finalize message, we're done + // Receiving the message was all we were supposed to do + delete received; } } }; diff --git a/examples/s4u/async-waitall/s4u-async-waitall.cpp b/examples/s4u/async-waitall/s4u-async-waitall.cpp index 270894fe6e..7e611d79ee 100644 --- a/examples/s4u/async-waitall/s4u-async-waitall.cpp +++ b/examples/s4u/async-waitall/s4u-async-waitall.cpp @@ -15,6 +15,7 @@ #include "simgrid/s4u.hpp" #include #include +#include XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_waitall, "Messages specific for this s4u example"); @@ -41,11 +42,11 @@ public: std::string mboxName = std::string("receiver-") + std::to_string(i % receivers_count); simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName); std::string msgName = std::string("Message ") + std::to_string(i); - char* payload = xbt_strdup(msgName.c_str()); // copy the data we send: 'msgName' is not a stable storage location - + std::string* payload = new std::string(msgName); // copy the data we send: + // 'msgName' is not a stable storage location XBT_INFO("Send '%s' to '%s'", msgName.c_str(), mboxName.c_str()); /* Create a communication representing the ongoing communication */ - simgrid::s4u::CommPtr comm = mbox->put_async((void*)payload, msg_size); + simgrid::s4u::CommPtr comm = mbox->put_async(payload, msg_size); /* Add this comm to the vector of all known comms */ pending_comms.push_back(comm); } @@ -54,9 +55,9 @@ public: for (int i = 0; i < receivers_count; i++) { std::string mboxName = std::string("receiver-") + std::to_string(i % receivers_count); simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName); - char* payload = xbt_strdup("finalize"); // Make a copy of the data we will send + std::string* payload = new std::string("finalize"); // Make a copy of the data we will send - simgrid::s4u::CommPtr comm = mbox->put_async((void*)payload, 0); + simgrid::s4u::CommPtr comm = mbox->put_async(payload, 0); pending_comms.push_back(comm); XBT_INFO("Send 'finalize' to 'receiver-%ld'", i % receivers_count); } @@ -83,15 +84,12 @@ public: void operator()() { XBT_INFO("Wait for my first message"); - while (1) { - char* received = static_cast(mbox->get()); - XBT_INFO("I got a '%s'.", received); - if (std::strcmp(received, "finalize") == 0) { /* If it's a finalize message, we're done */ - xbt_free(received); - break; - } - /* Otherwise receiving the message was all we were supposed to do */ - xbt_free(received); + for (bool cont = true; cont;) { + std::string* received = static_cast(mbox->get()); + XBT_INFO("I got a '%s'.", received->c_str()); + cont = (*received != "finalize"); // If it's a finalize message, we're done + // Receiving the message was all we were supposed to do + delete received; } } }; diff --git a/examples/s4u/async-waitany/s4u-async-waitany.cpp b/examples/s4u/async-waitany/s4u-async-waitany.cpp index d94b036523..eff5ae28eb 100644 --- a/examples/s4u/async-waitany/s4u-async-waitany.cpp +++ b/examples/s4u/async-waitany/s4u-async-waitany.cpp @@ -20,6 +20,7 @@ #include "simgrid/s4u.hpp" #include #include +#include XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_waitall, "Messages specific for this msg example"); @@ -46,11 +47,11 @@ public: std::string mboxName = std::string("receiver-") + std::to_string(i % receivers_count); simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName); std::string msgName = std::string("Message ") + std::to_string(i); - char* payload = xbt_strdup(msgName.c_str()); // copy the data we send: 'msgName' is not a stable storage location - + std::string* payload = new std::string(msgName); // copy the data we send: + // 'msgName' is not a stable storage location XBT_INFO("Send '%s' to '%s'", msgName.c_str(), mboxName.c_str()); /* Create a communication representing the ongoing communication */ - simgrid::s4u::CommPtr comm = mbox->put_async((void*)payload, msg_size); + simgrid::s4u::CommPtr comm = mbox->put_async(payload, msg_size); /* Add this comm to the vector of all known comms */ pending_comms.push_back(comm); } @@ -59,9 +60,9 @@ public: for (int i = 0; i < receivers_count; i++) { std::string mboxName = std::string("receiver-") + std::to_string(i % receivers_count); simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(mboxName); - char* payload = xbt_strdup("finalize"); // Make a copy of the data we will send + std::string* payload = new std::string("finalize"); // Make a copy of the data we will send - simgrid::s4u::CommPtr comm = mbox->put_async((void*)payload, 0); + simgrid::s4u::CommPtr comm = mbox->put_async(payload, 0); pending_comms.push_back(comm); XBT_INFO("Send 'finalize' to 'receiver-%ld'", i % receivers_count); } @@ -99,15 +100,12 @@ public: void operator()() { XBT_INFO("Wait for my first message"); - while (1) { - char* received = static_cast(mbox->get()); - XBT_INFO("I got a '%s'.", received); - if (std::strcmp(received, "finalize") == 0) { /* If it's a finalize message, we're done */ - xbt_free(received); - break; - } - /* Otherwise receiving the message was all we were supposed to do */ - xbt_free(received); + for (bool cont = true; cont;) { + std::string* received = static_cast(mbox->get()); + XBT_INFO("I got a '%s'.", received->c_str()); + cont = (*received != "finalize"); // If it's a finalize message, we're done + // Receiving the message was all we were supposed to do + delete received; } } }; diff --git a/examples/s4u/dht-chord/node.cpp b/examples/s4u/dht-chord/node.cpp index a31877fa62..4a73c0f4e1 100644 --- a/examples/s4u/dht-chord/node.cpp +++ b/examples/s4u/dht-chord/node.cpp @@ -235,7 +235,7 @@ void Node::checkPredecessor() } // receive the answer XBT_DEBUG("Sent 'Predecessor Alive' request to %d, waiting for the answer on my mailbox '%s'", pred_id_, - message->answer_to->getName()); + message->answer_to->getCname()); simgrid::s4u::CommPtr comm = return_mailbox->get_async(&data); try { @@ -280,7 +280,7 @@ int Node::remoteGetPredecessor(int ask_to) // receive the answer XBT_DEBUG("Sent 'Get Predecessor' request to %d, waiting for the answer on my mailbox '%s'", ask_to, - message->answer_to->getName()); + message->answer_to->getCname()); simgrid::s4u::CommPtr comm = return_mailbox->get_async(&data); try { @@ -432,7 +432,7 @@ void Node::handleMessage(ChordMessage* message) message->type = FIND_SUCCESSOR_ANSWER; message->answer_id = fingers_[0]; XBT_DEBUG("Sending back a 'Find Successor Answer' to %s (mailbox %s): the successor of %d is %d", - message->issuer_host_name.c_str(), message->answer_to->getName(), message->request_id, + message->issuer_host_name.c_str(), message->answer_to->getCname(), message->request_id, message->answer_id); message->answer_to->put_init(message, 10)->detach(ChordMessage::destroy); } else { @@ -450,7 +450,7 @@ void Node::handleMessage(ChordMessage* message) message->type = GET_PREDECESSOR_ANSWER; message->answer_id = pred_id_; XBT_DEBUG("Sending back a 'Get Predecessor Answer' to %s via mailbox '%s': my predecessor is %d", - message->issuer_host_name.c_str(), message->answer_to->getName(), message->answer_id); + message->issuer_host_name.c_str(), message->answer_to->getCname(), message->answer_id); message->answer_to->put_init(message, 10)->detach(ChordMessage::destroy); break; @@ -488,7 +488,7 @@ void Node::handleMessage(ChordMessage* message) XBT_DEBUG("Receiving a 'Predecessor Alive' request from %s", message->issuer_host_name.c_str()); message->type = PREDECESSOR_ALIVE_ANSWER; XBT_DEBUG("Sending back a 'Predecessor Alive Answer' to %s (mailbox %s)", message->issuer_host_name.c_str(), - message->answer_to->getName()); + message->answer_to->getCname()); message->answer_to->put_init(message, 10)->detach(ChordMessage::destroy); break; diff --git a/examples/s4u/dht-chord/s4u-dht-chord.hpp b/examples/s4u/dht-chord/s4u-dht-chord.hpp index 4c44d8fc98..ff05252d82 100644 --- a/examples/s4u/dht-chord/s4u-dht-chord.hpp +++ b/examples/s4u/dht-chord/s4u-dht-chord.hpp @@ -42,7 +42,7 @@ public: }; /* Types of tasks exchanged between nodes. */ -typedef enum { +enum e_message_type_t { FIND_SUCCESSOR, FIND_SUCCESSOR_ANSWER, GET_PREDECESSOR, @@ -52,7 +52,7 @@ typedef enum { PREDECESSOR_LEAVING, PREDECESSOR_ALIVE, PREDECESSOR_ALIVE_ANSWER -} e_message_type_t; +}; class ChordMessage { public: diff --git a/examples/s4u/io/s4u-io.cpp b/examples/s4u/io/s4u-io.cpp index fb4bc28113..46a50133c6 100644 --- a/examples/s4u/io/s4u-io.cpp +++ b/examples/s4u/io/s4u-io.cpp @@ -3,6 +3,7 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include #include #include "simgrid/s4u.hpp" @@ -24,7 +25,7 @@ public: sg_size_t used_size = storage->getSizeUsed(); sg_size_t size = storage->getSize(); - XBT_INFO(" %s (%s) Used: %llu; Free: %llu; Total: %llu.", storage->getName(), mountpoint.c_str(), used_size, + XBT_INFO(" %s (%s) Used: %llu; Free: %llu; Total: %llu.", storage->getCname(), mountpoint.c_str(), used_size, free_size, size); } } @@ -63,21 +64,22 @@ public: file->move(newpath); // Test attaching some user data to the file - file->setUserdata(xbt_strdup("777")); - XBT_INFO("User data attached to the file: %s", static_cast(file->getUserdata())); - xbt_free(file->getUserdata()); + file->setUserdata(new std::string("777")); + std::string* file_data = static_cast(file->getUserdata()); + XBT_INFO("User data attached to the file: %s", file_data->c_str()); + delete file_data; // Close the file delete file; // Now attach some user data to disk1 - XBT_INFO("Get/set data for storage element: %s", storage->getName()); + XBT_INFO("Get/set data for storage element: %s", storage->getCname()); XBT_INFO(" Uninitialized storage data: '%s'", static_cast(storage->getUserdata())); - storage->setUserdata(xbt_strdup("Some user data")); - XBT_INFO(" Set and get data: '%s'", static_cast(storage->getUserdata())); - - xbt_free(storage->getUserdata()); + storage->setUserdata(new std::string("Some user data")); + std::string* storage_data = static_cast(storage->getUserdata()); + XBT_INFO(" Set and get data: '%s'", storage_data->c_str()); + delete storage_data; } }; diff --git a/examples/smpi/mc/bugged1_liveness.c b/examples/smpi/mc/bugged1_liveness.c index 2bf4f879a3..0a527ab28e 100644 --- a/examples/smpi/mc/bugged1_liveness.c +++ b/examples/smpi/mc/bugged1_liveness.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2015. The SimGrid Team. +/* Copyright (c) 2013-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -26,7 +26,8 @@ #define REQUEST_TAG 1 #define RELEASE_TAG 2 -int r, cs; +int r; +int cs; int main(int argc, char **argv){ int size; diff --git a/include/simgrid/jedule/jedule.hpp b/include/simgrid/jedule/jedule.hpp index 0ea9ab82fe..eb25b52fbe 100644 --- a/include/simgrid/jedule/jedule.hpp +++ b/include/simgrid/jedule/jedule.hpp @@ -14,9 +14,6 @@ #if SIMGRID_HAVE_JEDULE -XBT_ATTRIB_UNUSED static std::unordered_map host2_simgrid_parent_container; -XBT_ATTRIB_UNUSED static std::unordered_map container_name2container; - namespace simgrid { namespace jedule{ diff --git a/include/simgrid/msg.h b/include/simgrid/msg.h index c6217599bb..8ee47ab40d 100644 --- a/include/simgrid/msg.h +++ b/include/simgrid/msg.h @@ -51,7 +51,7 @@ typedef sg_host_t msg_host_t; XBT_PUBLIC_DATA(int) sg_storage_max_file_descriptors; /* ******************************** Task ************************************ */ -typedef struct simdata_task *simdata_task_t; +typedef struct s_simdata_task_t* simdata_task_t; typedef struct msg_task { char *name; /**< @brief task name if any */ @@ -449,7 +449,8 @@ XBT_PUBLIC(void) MSG_action_exit(); * @ingroup msg_synchro * @hideinitializer */ -typedef struct s_smx_sem *msg_sem_t; // Yeah that's a rename of the smx_sem_t which doesnt require smx_sem_t to be declared here +typedef struct s_smx_sem_t* msg_sem_t; // Yeah that's a rename of the smx_sem_t which doesnt require smx_sem_t to be + // declared here XBT_PUBLIC(msg_sem_t) MSG_sem_init(int initial_value); XBT_PUBLIC(void) MSG_sem_acquire(msg_sem_t sem); XBT_PUBLIC(msg_error_t) MSG_sem_acquire_timeout(msg_sem_t sem, double timeout); @@ -464,7 +465,7 @@ XBT_PUBLIC(int) MSG_sem_would_block(msg_sem_t sem); */ #define MSG_BARRIER_SERIAL_PROCESS -1 -typedef struct s_msg_bar* msg_bar_t; +typedef struct s_msg_bar_t* msg_bar_t; XBT_PUBLIC(msg_bar_t) MSG_barrier_init( unsigned int count); XBT_PUBLIC(void) MSG_barrier_destroy(msg_bar_t bar); XBT_PUBLIC(int) MSG_barrier_wait(msg_bar_t bar); diff --git a/include/simgrid/s4u/Activity.hpp b/include/simgrid/s4u/Activity.hpp index d0c8b548fc..4568e529ad 100644 --- a/include/simgrid/s4u/Activity.hpp +++ b/include/simgrid/s4u/Activity.hpp @@ -9,7 +9,7 @@ #include #include -typedef enum { inited = 0, started, canceled, errored, finished } e_s4u_activity_state_t; +enum e_s4u_activity_state_t { inited = 0, started, canceled, errored, finished }; namespace simgrid { namespace s4u { diff --git a/include/simgrid/s4u/Actor.hpp b/include/simgrid/s4u/Actor.hpp index b63447f642..facaf0a59e 100644 --- a/include/simgrid/s4u/Actor.hpp +++ b/include/simgrid/s4u/Actor.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2006-2016. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2017. 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. */ @@ -197,10 +197,10 @@ public: /** This actor will be automatically terminated when the last non-daemon process finishes **/ void daemonize(); - /** Retrieves the name of that actor as a C string */ - const char* getCname(); /** Retrieves the name of that actor as a C++ string */ - simgrid::xbt::string getName(); + const simgrid::xbt::string& getName() const; + /** Retrieves the name of that actor as a C string */ + const char* getCname() const; /** Retrieves the host on which that actor is running */ s4u::Host* getHost(); /** Retrieves the PID of that actor @@ -286,22 +286,22 @@ template inline void sleep_for(std::chrono::duration(duration); this_actor::sleep_for(seconds.count()); - } - template - inline void sleep_until(const SimulationTimePoint& timeout_time) - { - auto timeout_native = std::chrono::time_point_cast(timeout_time); - this_actor::sleep_until(timeout_native.time_since_epoch().count()); - } +} - XBT_ATTRIB_DEPRECATED_v320("Use sleep_for(): v3.20 will turn this warning into an error.") inline void sleep( - double duration) - { - return sleep_for(duration); - } +template inline void sleep_until(const SimulationTimePoint& timeout_time) +{ + auto timeout_native = std::chrono::time_point_cast(timeout_time); + this_actor::sleep_until(timeout_native.time_since_epoch().count()); +} + +XBT_ATTRIB_DEPRECATED_v320("Use sleep_for(): v3.20 will turn this warning into an error.") inline void sleep( + double duration) +{ + return sleep_for(duration); +} - /** Block the actor, computing the given amount of flops */ - XBT_PUBLIC(void) execute(double flop); +/** Block the actor, computing the given amount of flops */ +XBT_PUBLIC(void) execute(double flop); /** Block the actor, computing the given amount of flops and priority */ XBT_PUBLIC(void) execute(double flop, double priority); @@ -330,39 +330,42 @@ template inline void sleep_for(std::chrono::duration * whereto); diff --git a/include/simgrid/s4u/Link.hpp b/include/simgrid/s4u/Link.hpp index de05738704..86379248ee 100644 --- a/include/simgrid/s4u/Link.hpp +++ b/include/simgrid/s4u/Link.hpp @@ -10,6 +10,7 @@ #include #include +#include #include /*********** @@ -36,8 +37,10 @@ public: /** @brief Retrieve a link from its name */ static Link* byName(const char* name); - /** @brief Get da name */ - const char* name(); + /** @brief Retrieves the name of that link as a C++ string */ + const std::string& getName() const; + /** @brief Retrieves the name of that link as a C string */ + const char* getCname() const; /** @brief Get the bandwidth in bytes per second of current Link */ double bandwidth(); @@ -80,6 +83,8 @@ public: /** @brief Callback signal fired when a communication changes it state (ready/done/cancel) */ static simgrid::xbt::signal onCommunicationStateChange; + + const char* XBT_ATTRIB_DEPRECATED_v321("Use getCname(): v3.21 will turn this warning into an error.") name(); }; } } diff --git a/include/simgrid/s4u/Mailbox.hpp b/include/simgrid/s4u/Mailbox.hpp index f7d280db98..3ca34595a0 100644 --- a/include/simgrid/s4u/Mailbox.hpp +++ b/include/simgrid/s4u/Mailbox.hpp @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -120,8 +121,10 @@ public: /** private function, do not use. FIXME: make me protected */ kernel::activity::MailboxImpl* getImpl() { return pimpl_; } - /** Gets the name of that mailbox */ - const char* getName(); + /** @brief Retrieves the name of that mailbox as a C++ string */ + const simgrid::xbt::string& getName() const; + /** @brief Retrieves the name of that mailbox as a C string */ + const char* getCname() const; /** Retrieve the mailbox associated to the given C string */ static MailboxPtr byName(const char *name); diff --git a/include/simgrid/s4u/NetZone.hpp b/include/simgrid/s4u/NetZone.hpp index 0f50b37606..fc8c8fa4be 100644 --- a/include/simgrid/s4u/NetZone.hpp +++ b/include/simgrid/s4u/NetZone.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2016. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2016-2017. 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. */ @@ -44,7 +44,10 @@ protected: public: /** @brief Seal your netzone once you're done adding content, and before routing stuff through it */ virtual void seal(); - const char* getCname(); + /** @brief Retrieves the name of that netzone as a C++ string */ + const std::string& getName() const { return name_; } + /** @brief Retrieves the name of that netzone as a C string */ + const char* getCname() const; NetZone* getFather(); std::vector* getChildren(); // Sub netzones diff --git a/include/simgrid/s4u/Storage.hpp b/include/simgrid/s4u/Storage.hpp index efad7b826d..f28f936188 100644 --- a/include/simgrid/s4u/Storage.hpp +++ b/include/simgrid/s4u/Storage.hpp @@ -29,7 +29,10 @@ public: virtual ~Storage() = default; /** Retrieve a Storage by its name. It must exist in the platform file */ static Storage* byName(std::string name); - const char* getName(); + /** @brief Retrieves the name of that storage as a C++ string */ + std::string const& getName() const; + /** @brief Retrieves the name of that storage as a C string */ + const char* getCname() const; const char* getType(); Host* getHost(); sg_size_t getSize(); /** Retrieve the total amount of space of this storage element */ diff --git a/include/simgrid/s4u/VirtualMachine.hpp b/include/simgrid/s4u/VirtualMachine.hpp index 4453039929..0d6023d321 100644 --- a/include/simgrid/s4u/VirtualMachine.hpp +++ b/include/simgrid/s4u/VirtualMachine.hpp @@ -10,12 +10,12 @@ #include "simgrid/s4u/Host.hpp" #include "simgrid/s4u/forward.hpp" -typedef enum { +enum e_surf_vm_state_t { SURF_VM_STATE_CREATED, /**< created, but not yet started */ SURF_VM_STATE_RUNNING, SURF_VM_STATE_SUSPENDED, /**< Suspend/resume does not involve disk I/O, so we assume there is no transition states. */ SURF_VM_STATE_DESTROYED -} e_surf_vm_state_t; +}; namespace simgrid { namespace vm { diff --git a/include/simgrid/simdag.h b/include/simgrid/simdag.h index 55f8ba04e4..8f64ea326a 100644 --- a/include/simgrid/simdag.h +++ b/include/simgrid/simdag.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2006-2010, 2012-2016. The SimGrid Team. +/* Copyright (c) 2006-2010, 2012-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -32,7 +32,7 @@ typedef sg_link_t SD_link_t; Each task has a \ref e_SD_task_state_t "state" indicating whether the task is scheduled, running, done, ... */ -typedef struct SD_task *SD_task_t; +typedef struct s_SD_task_t* SD_task_t; /** @brief Task states @ingroup SD_task_api */ diff --git a/include/simgrid/simix.h b/include/simgrid/simix.h index 976487a897..8d2729174a 100644 --- a/include/simgrid/simix.h +++ b/include/simgrid/simix.h @@ -49,11 +49,11 @@ typedef enum { /** * \ingroup simix_synchro_management */ -typedef struct s_smx_cond *smx_cond_t; +typedef struct s_smx_cond_t* smx_cond_t; /** * \ingroup simix_synchro_management */ -typedef struct s_smx_sem *smx_sem_t; +typedef struct s_smx_sem_t* smx_sem_t; /* ****************************** Process *********************************** */ @@ -106,7 +106,7 @@ XBT_PUBLIC(void) SIMIX_run(); XBT_PUBLIC(double) SIMIX_get_clock(); /* Timer functions FIXME: should these be public? */ -typedef struct s_smx_timer* smx_timer_t; +typedef struct s_smx_timer_t* smx_timer_t; XBT_PUBLIC(smx_timer_t) SIMIX_timer_set(double date, void (*function)(void*), void *arg); XBT_PUBLIC(void) SIMIX_timer_remove(smx_timer_t timer); diff --git a/include/simgrid/simix/blocking_simcall.hpp b/include/simgrid/simix/blocking_simcall.hpp index 88e522c69c..682b2eeb73 100644 --- a/include/simgrid/simix/blocking_simcall.hpp +++ b/include/simgrid/simix/blocking_simcall.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2016. The SimGrid Team. +/* Copyright (c) 2016-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -81,7 +81,7 @@ auto kernelSync(F code) -> decltype(code().get()) template class Future { public: - Future() {} + Future() { /* Nothing to do*/} Future(simgrid::kernel::Future future) : future_(std::move(future)) {} bool valid() const { return future_.valid(); } diff --git a/include/xbt/Extendable.hpp b/include/xbt/Extendable.hpp index 5cf36a9525..d90314d4c8 100644 --- a/include/xbt/Extendable.hpp +++ b/include/xbt/Extendable.hpp @@ -77,7 +77,7 @@ public: * an extension of B might need to have the extension of A around when executing * its cleanup function/destructor. */ for (std::size_t i = extensions_.size(); i > 0; --i) - if (extensions_[i - 1] != nullptr) + if (extensions_[i - 1] != nullptr && deleters_[i - 1] != nullptr) deleters_[i - 1](extensions_[i - 1]); } diff --git a/include/xbt/base.h b/include/xbt/base.h index e2d740c924..f49a50d935 100644 --- a/include/xbt/base.h +++ b/include/xbt/base.h @@ -49,6 +49,7 @@ #define XBT_ATTRIB_UNUSED __attribute__((unused)) #define XBT_ATTRIB_DEPRECATED_v319(msg) __attribute__((deprecated(msg))) /* Will be dropped in v3.19 */ #define XBT_ATTRIB_DEPRECATED_v320(msg) __attribute__((deprecated(msg))) /* Will be dropped in v3.20 */ +#define XBT_ATTRIB_DEPRECATED_v321(msg) __attribute__((deprecated(msg))) /* Will be dropped in v3.21 */ /* Constructor priorities exist since gcc 4.3. Apparently, they are however not * supported on Macs. */ diff --git a/include/xbt/dict.h b/include/xbt/dict.h index fd6edf573e..8cf9fb5290 100644 --- a/include/xbt/dict.h +++ b/include/xbt/dict.h @@ -74,20 +74,25 @@ XBT_PUBLIC(unsigned int) xbt_dict_size(xbt_dict_t dict); XBT_PUBLIC(void) xbt_dict_set(xbt_dict_t dict, const char *key, void *data, void_f_pvoid_t free_ctn); XBT_PUBLIC(void *) xbt_dict_get(xbt_dict_t dict, const char *key); XBT_PUBLIC(void *) xbt_dict_get_or_null(xbt_dict_t dict, const char *key); -XBT_PUBLIC(char *) xbt_dict_get_key(xbt_dict_t dict, const void *data); -XBT_PUBLIC(char *) xbt_dict_get_elm_key(xbt_dictelm_t elem); +XBT_PUBLIC(char*) xbt_dict_get_key(xbt_dict_t dict, const void* data); +XBT_PUBLIC(char*) +XBT_ATTRIB_DEPRECATED_v321("xbt_dict is dying. v3.21 will turn this warning into an error.") + xbt_dict_get_elm_key(xbt_dictelm_t elem); XBT_PUBLIC(xbt_dictelm_t) xbt_dict_get_elm(xbt_dict_t dict, const char *key); XBT_PUBLIC(xbt_dictelm_t) xbt_dict_get_elm_or_null(xbt_dict_t dict, const char *key); XBT_PUBLIC(void) xbt_dict_remove(xbt_dict_t dict, const char *key); XBT_PUBLIC(void) xbt_dict_reset(xbt_dict_t dict); XBT_PUBLIC(int) xbt_dict_length(xbt_dict_t dict); -XBT_PUBLIC(void) xbt_dict_dump_output_string(void *s); +XBT_PUBLIC(void) +XBT_ATTRIB_DEPRECATED_v321("xbt_dict is dying. v3.21 will turn this warning into an error.") + xbt_dict_dump_output_string(void* s); XBT_PUBLIC(void) xbt_dict_dump(xbt_dict_t dict, void (*output) (void *)); -XBT_PUBLIC(void) xbt_dict_dump_sizes(xbt_dict_t dict); +XBT_PUBLIC(void) +XBT_ATTRIB_DEPRECATED_v321("xbt_dict is dying. v3.21 will turn this warning into an error.") + xbt_dict_dump_sizes(xbt_dict_t dict); XBT_PUBLIC(int) xbt_dict_is_empty(xbt_dict_t dict); - /** @} */ /** @defgroup XBT_dict_nnul Dictionaries with non-nul terminated keys * @ingroup XBT_dict @@ -97,8 +102,8 @@ XBT_PUBLIC(int) xbt_dict_is_empty(xbt_dict_t dict); * @{ */ XBT_PUBLIC(void) xbt_dict_set_ext(xbt_dict_t dict, const char *key, int key_len, void *data, void_f_pvoid_t free_ctn); -XBT_PUBLIC(void *) xbt_dict_get_ext(xbt_dict_t dict, const char *key, int key_len); -XBT_PUBLIC(void *) xbt_dict_get_or_null_ext(xbt_dict_t dict, const char *key, int key_len); +XBT_PUBLIC(void*) xbt_dict_get_ext(xbt_dict_t dict, const char* key, int key_len); +XBT_PUBLIC(void*) xbt_dict_get_or_null_ext(xbt_dict_t dict, const char* key, int key_len); XBT_PUBLIC(void) xbt_dict_remove_ext(xbt_dict_t dict, const char *key, int key_len); struct s_xbt_dict_cursor { @@ -141,10 +146,11 @@ XBT_PUBLIC(void) xbt_dict_cursor_free(xbt_dict_cursor_t * cursor); XBT_PUBLIC(void) xbt_dict_cursor_rewind(xbt_dict_cursor_t cursor); -xbt_dictelm_t xbt_dict_cursor_get_elm(xbt_dict_cursor_t cursor); XBT_PUBLIC(char *) xbt_dict_cursor_get_key(xbt_dict_cursor_t cursor); XBT_PUBLIC(void *) xbt_dict_cursor_get_data(xbt_dict_cursor_t cursor); -XBT_PUBLIC(void) xbt_dict_cursor_set_data(xbt_dict_cursor_t cursor, void *data, void_f_pvoid_t free_ctn); +XBT_PUBLIC(void) +XBT_ATTRIB_DEPRECATED_v321("xbt_dict is dying. v3.21 will turn this warning into an error.") + xbt_dict_cursor_set_data(xbt_dict_cursor_t cursor, void* data, void_f_pvoid_t free_ctn); XBT_PUBLIC(void) xbt_dict_cursor_first(const xbt_dict_t dict, xbt_dict_cursor_t * cursor); XBT_PUBLIC(void) xbt_dict_cursor_step(xbt_dict_cursor_t cursor); diff --git a/include/xbt/ex.h b/include/xbt/ex.h index 6307177900..b475442203 100644 --- a/include/xbt/ex.h +++ b/include/xbt/ex.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2005-2015. The SimGrid Team. +/* Copyright (c) 2005-2017. The SimGrid Team. * All rights reserved. */ /* Copyright (c) 2002-2004 Ralf S. Engelschall */ @@ -50,30 +50,6 @@ #include "xbt/misc.h" #include "xbt/virtu.h" -/*-*-* Emergency debuging: define this when the exceptions get crazy *-*-*/ -#undef __EX_MAYDAY -#ifdef __EX_MAYDAY -# include -#include -# define MAYDAY_SAVE(m) printf("%d %s:%d save %p\n", \ - xbt_getpid(), __FILE__, __LINE__, \ - (m)->jb \ - ), -# define MAYDAY_RESTORE(m) printf("%d %s:%d restore %p\n", \ - xbt_getpid(), __FILE__, __LINE__, \ - (m)->jb \ - ), -# define MAYDAY_CATCH(e) printf("%d %s:%d Catched '%s'\n", \ - xbt_getpid(), __FILE__, __LINE__, \ - (e).msg \ - ), -#else -# define MAYDAY_SAVE(m) -# define MAYDAY_RESTORE(m) -# define MAYDAY_CATCH(e) -#endif -/*-*-* end of debugging stuff *-*-*/ - /** @addtogroup XBT_ex_c * @brief Exceptions support (C) * diff --git a/include/xbt/functional.hpp b/include/xbt/functional.hpp index a05a25499e..6f093af633 100644 --- a/include/xbt/functional.hpp +++ b/include/xbt/functional.hpp @@ -130,8 +130,8 @@ private: std::pair memberptr; char any1[sizeof(std::pair)]; char any2[sizeof(std::pair)]; - TaskUnion() {} - ~TaskUnion() {} + TaskUnion() { /* Nothing to do */} + ~TaskUnion() { /* Nothing to do */} }; #endif @@ -170,9 +170,8 @@ private: } public: - - Task() {} - Task(std::nullptr_t) {} + Task() { /* Nothing to do */} + Task(std::nullptr_t) { /* Nothing to do */} ~Task() { this->clear(); diff --git a/include/xbt/future.hpp b/include/xbt/future.hpp index a374bec117..68040f532a 100644 --- a/include/xbt/future.hpp +++ b/include/xbt/future.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2015-2016. The SimGrid Team. +/* Copyright (c) 2015-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -33,7 +33,7 @@ class Result { exception, }; public: - Result() {} + Result() { /* Nothing to do */} ~Result() { this->reset(); } // Copy (if T is copyable) and move: @@ -123,9 +123,6 @@ public: T get() { switch (status_) { - case ResultStatus::invalid: - default: - throw std::logic_error("Invalid result"); case ResultStatus::value: { T value = std::move(value_); value_.~T(); @@ -139,6 +136,8 @@ public: std::rethrow_exception(std::move(exception)); break; } + default: + throw std::logic_error("Invalid result"); } } private: diff --git a/include/xbt/replay.hpp b/include/xbt/replay.hpp index b20852b150..a969fbc8ad 100644 --- a/include/xbt/replay.hpp +++ b/include/xbt/replay.hpp @@ -9,7 +9,7 @@ #ifndef XBT_REPLAY_HPP #define XBT_REPLAY_HPP -#include "xbt/dict.h" +#include "xbt/misc.h" /* SG_BEGIN_DECL */ #ifdef __cplusplus #include #include diff --git a/include/xbt/str.h b/include/xbt/str.h index 89d067062f..f9d96e97c8 100644 --- a/include/xbt/str.h +++ b/include/xbt/str.h @@ -9,9 +9,9 @@ #ifndef XBT_STR_H #define XBT_STR_H -#include "xbt/misc.h" -#include "xbt/dynar.h" #include "xbt/dict.h" +#include "xbt/dynar.h" +#include "xbt/misc.h" #include /* va_* */ #include /* FILE */ diff --git a/include/xbt/string.hpp b/include/xbt/string.hpp index 912fe8dd6a..7d665ff96e 100644 --- a/include/xbt/string.hpp +++ b/include/xbt/string.hpp @@ -14,10 +14,11 @@ #if SIMGRID_HAVE_MC -#include +#include #include #include #include +#include #include @@ -56,7 +57,6 @@ struct string_data { XBT_PUBLIC_CLASS string : private string_data { static const char NUL; public: - // Types typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; @@ -71,7 +71,7 @@ public: ~string() { if (string_data::data != &NUL) - std::free(string_data::data); + delete[] string_data::data; } // Ctors @@ -82,8 +82,8 @@ public: string_data::data = const_cast(&NUL); } else { string_data::len = size; - string_data::data = static_cast(std::malloc(string_data::len + 1)); - memcpy(string_data::data, s, string_data::len); + string_data::data = new char[string_data::len + 1]; + std::copy_n(s, string_data::len, string_data::data); string_data::data[string_data::len] = '\0'; } } @@ -103,14 +103,14 @@ public: void assign(const char* s, size_t size) { if (string_data::data != &NUL) { - std::free(string_data::data); + delete[] string_data::data; string_data::data = nullptr; string_data::len = 0; } if (size != 0) { string_data::len = size; - string_data::data = (char*) std::malloc(string_data::len + 1); - std::memcpy(string_data::data, s, string_data::len); + string_data::data = new char[string_data::len + 1]; + std::copy_n(s, string_data::len, string_data::data); string_data::data[string_data::len] = '\0'; } } @@ -136,7 +136,7 @@ public: size_t size() const { return len; } size_t length() const { return len; } bool empty() const { return len != 0; } - void shrink_to_fit() {} + void shrink_to_fit() { /* Being there, but doing nothing */} // Alement access char* data() { return string_data::data; } @@ -164,6 +164,7 @@ public: return data()[i]; } // Conversion + static string_data& to_string_data(string& s) { return s; } operator std::string() const { return std::string(this->c_str(), this->size()); } // Iterators diff --git a/src/bindings/java/JavaContext.cpp b/src/bindings/java/JavaContext.cpp index 6ddcd9209b..695023d198 100644 --- a/src/bindings/java/JavaContext.cpp +++ b/src/bindings/java/JavaContext.cpp @@ -130,7 +130,7 @@ void JavaContext::stop() // (as the ones created for the VM migration). The Java exception will not be catched anywhere. // Bad things happen currently if these actors get killed, unfortunately. jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", - std::string("Process ") + this->process()->cname() + " killed from file JavaContext.cpp"); + std::string("Process ") + this->process()->getCname() + " killed from file JavaContext.cpp"); // (remember that throwing a java exception from C does not break the C execution path. // Instead, it marks the exception to be raised when returning to the Java world and diff --git a/src/bindings/java/jmsg.cpp b/src/bindings/java/jmsg.cpp index 6119a6402f..21b56a96f4 100644 --- a/src/bindings/java/jmsg.cpp +++ b/src/bindings/java/jmsg.cpp @@ -86,10 +86,6 @@ JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Msg_getClock(JNIEnv * env, jclass return (jdouble) MSG_get_clock(); } -static void __JAVA_host_priv_free(void *host) -{ -} - JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_init(JNIEnv * env, jclass cls, jobjectArray jargs) { int argc = 0; @@ -124,7 +120,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_init(JNIEnv * env, jclass cls, j MSG_init(&argc, argv); - JAVA_HOST_LEVEL = simgrid::s4u::Host::extension_create(__JAVA_host_priv_free); + JAVA_HOST_LEVEL = simgrid::s4u::Host::extension_create(nullptr); for (int index = 0; index < argc - 1; index++) { env->SetObjectArrayElement(jargs, index, (jstring)env->NewStringUTF(argv[index + 1])); diff --git a/src/bindings/java/jmsg_comm.cpp b/src/bindings/java/jmsg_comm.cpp index d3e412790a..da8c34d658 100644 --- a/src/bindings/java/jmsg_comm.cpp +++ b/src/bindings/java/jmsg_comm.cpp @@ -65,7 +65,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Comm_nativeFinalize(JNIEnv *env, job msg_task_t *task_received; task_received = (msg_task_t*) (uintptr_t) env->GetLongField(jcomm, jcomm_field_Comm_taskBind); - xbt_free(task_received); + delete task_received; comm = (msg_comm_t) (uintptr_t) env->GetLongField(jcomm, jcomm_field_Comm_bind); MSG_comm_destroy(comm); @@ -123,7 +123,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Comm_waitCompletion(JNIEnv *env, job static msg_comm_t* jarray_to_commArray(JNIEnv *env, jobjectArray jcomms, /* OUT */ int *count) { *count = env->GetArrayLength(jcomms); - msg_comm_t* comms = xbt_new(msg_comm_t, *count); + msg_comm_t* comms = new msg_comm_t[*count]; for (int i=0; i < *count; i++) { jobject jcomm = env->GetObjectArrayElement(jcomms, i); @@ -148,7 +148,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Comm_waitAll(JNIEnv *env, jclass cls return; MSG_comm_waitall(comms, count, static_cast(timeout)); - xbt_free(comms); + delete[] comms; } JNIEXPORT int JNICALL Java_org_simgrid_msg_Comm_waitAny(JNIEnv *env, jclass cls, jobjectArray jcomms) { @@ -162,7 +162,7 @@ JNIEXPORT int JNICALL Java_org_simgrid_msg_Comm_waitAny(JNIEnv *env, jclass cls, } int rank = MSG_comm_waitany(dyn); - xbt_free(comms); + delete[] comms; xbt_dynar_free(&dyn); return rank; } diff --git a/src/bindings/java/jmsg_host.cpp b/src/bindings/java/jmsg_host.cpp index f51c91da94..22c54da768 100644 --- a/src/bindings/java/jmsg_host.cpp +++ b/src/bindings/java/jmsg_host.cpp @@ -250,7 +250,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_getMountedStorage(JNIEn } for (auto const& elm : mounted_storages) { - jname = env->NewStringUTF(elm.second->getName()); + jname = env->NewStringUTF(elm.second->getCname()); jstorage = Java_org_simgrid_msg_Storage_getByName(env,cls,jname); env->SetObjectArrayElement(jtable, index, jstorage); index++; diff --git a/src/bindings/java/jmsg_task.cpp b/src/bindings/java/jmsg_task.cpp index 7a473f6290..f07d543af8 100644 --- a/src/bindings/java/jmsg_task.cpp +++ b/src/bindings/java/jmsg_task.cpp @@ -76,8 +76,8 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_parallelCreate(JNIEnv * env, jo int host_count = static_cast(env->GetArrayLength(jhosts)); jdouble* jcomputeDurations = env->GetDoubleArrayElements(jcomputeDurations_arg, 0); - msg_host_t* hosts = xbt_new0(msg_host_t, host_count); - double* computeDurations = xbt_new0(double, host_count); + msg_host_t* hosts = new msg_host_t[host_count]; + double* computeDurations = new double[host_count]; for (int index = 0; index < host_count; index++) { jobject jhost = env->GetObjectArrayElement(jhosts, index); hosts[index] = jhost_get_native(env, jhost); @@ -86,7 +86,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_parallelCreate(JNIEnv * env, jo env->ReleaseDoubleArrayElements(jcomputeDurations_arg, jcomputeDurations, 0); jdouble* jmessageSizes = env->GetDoubleArrayElements(jmessageSizes_arg, 0); - double* messageSizes = xbt_new0(double, host_count* host_count); + double* messageSizes = new double[host_count * host_count]; for (int index = 0; index < host_count * host_count; index++) { messageSizes[index] = jmessageSizes[index]; } @@ -99,6 +99,10 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_parallelCreate(JNIEnv * env, jo /* associate the java task object and the native task */ jtask_bind(jtask, task, env); + + delete[] hosts; + delete[] computeDurations; + delete[] messageSizes; } JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_cancel(JNIEnv * env, jobject jtask) @@ -303,8 +307,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_irecv(JNIEnv * env, jclass c return nullptr; //pointer to store the task object pointer. - msg_task_t *task = xbt_new(msg_task_t,1); - *task = nullptr; + msg_task_t* task = new msg_task_t(nullptr); /* There should be a cache here */ jobject jcomm = env->NewObject(comm_class, jtask_method_Comm_constructor); @@ -358,7 +361,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_irecvBounded(JNIEnv * env, j return nullptr; // pointer to store the task object pointer. - msg_task_t* task = xbt_new0(msg_task_t, 1); + msg_task_t* task = new msg_task_t(nullptr); jobject jcomm = env->NewObject(comm_class, jtask_method_Comm_constructor); if (not jcomm) { diff --git a/src/bindings/lua/lua_platf.cpp b/src/bindings/lua/lua_platf.cpp index 90c72c6490..6f45328304 100644 --- a/src/bindings/lua/lua_platf.cpp +++ b/src/bindings/lua/lua_platf.cpp @@ -90,8 +90,9 @@ int console_add_backbone(lua_State *L) { lua_pop(L, 1); lua_pushstring(L, "sharing_policy"); - type = lua_gettable(L, -2); + lua_gettable(L, -2); const char* policy = lua_tostring(L, -1); + lua_pop(L, 1); if (policy && not strcmp(policy, "FULLDUPLEX")) { link.policy = SURF_LINK_FULLDUPLEX; } else if (policy && not strcmp(policy, "FATPIPE")) { diff --git a/src/bindings/lua/lua_utils.hpp b/src/bindings/lua/lua_utils.hpp index cbf83e74ab..acc134b0ea 100644 --- a/src/bindings/lua/lua_utils.hpp +++ b/src/bindings/lua/lua_utils.hpp @@ -17,11 +17,12 @@ extern "C" { * * This structure is used as the userdata parameter of lua_Writer. */ -typedef struct s_sglua_buffer { +struct s_sglua_buffer_t { char* data; size_t size; size_t capacity; -} s_sglua_buffer_t, *sglua_buffer_t; +}; +typedef s_sglua_buffer_t* sglua_buffer_t; const char* sglua_tostring(lua_State* L, int index); const char* sglua_keyvalue_tostring(lua_State* L, int key_index, int value_index); diff --git a/src/include/mc/mc.h b/src/include/mc/mc.h index 23f056f48e..d3f6b29594 100644 --- a/src/include/mc/mc.h +++ b/src/include/mc/mc.h @@ -64,8 +64,6 @@ XBT_PRIVATE void MC_automaton_load(const char *file); /********************************* Memory *************************************/ XBT_PUBLIC(void) MC_memory_init(); /* Initialize the memory subsystem */ -XBT_PUBLIC(void) MC_memory_exit(); -XBT_PUBLIC(void) MC_memory_init_server(); SG_END_DECL() diff --git a/src/include/smpi/smpi_utils.hpp b/src/include/smpi/smpi_utils.hpp index 8af0b0adc7..9b991fd779 100644 --- a/src/include/smpi/smpi_utils.hpp +++ b/src/include/smpi/smpi_utils.hpp @@ -12,11 +12,11 @@ extern "C" { // Methods used to parse and store the values for timing injections in smpi -typedef struct s_smpi_factor *smpi_os_factor_t; -typedef struct s_smpi_factor{ +struct s_smpi_factor_t { size_t factor=0; std::vector values; -} s_smpi_factor_t; +}; +typedef s_smpi_factor_t* smpi_os_factor_t; } XBT_PUBLIC(std::vector) parse_factor(const char *smpi_coef_string); diff --git a/src/include/surf/datatypes.h b/src/include/surf/datatypes.h index 1ce9da6501..445ddc1c60 100644 --- a/src/include/surf/datatypes.h +++ b/src/include/surf/datatypes.h @@ -6,10 +6,10 @@ #ifndef MAXMIN_DATATYPES_H #define MAXMIN_DATATYPES_H -typedef struct lmm_element *lmm_element_t; -typedef struct lmm_variable *lmm_variable_t; -typedef struct lmm_constraint *lmm_constraint_t; -typedef struct lmm_constraint_light *lmm_constraint_light_t; -typedef struct lmm_system *lmm_system_t; +typedef struct s_lmm_element_t* lmm_element_t; +typedef struct s_lmm_variable_t* lmm_variable_t; +typedef struct s_lmm_constraint_t* lmm_constraint_t; +typedef struct s_lmm_constraint_light_t* lmm_constraint_light_t; +typedef struct s_lmm_system_t* lmm_system_t; #endif diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index 7d7a121737..d83c9a0410 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -433,10 +433,6 @@ void TRACE_surf_action(surf_action_t surf_action, const char *category); /* instr_routing.c */ void instr_routing_define_callbacks (); -void instr_new_variable_type (const char *new_typename, const char *color); -void instr_new_user_variable_type (const char *father_type, const char *new_typename, const char *color); -void instr_new_user_state_type (const char *father_type, const char *new_typename); -void instr_new_value_for_user_state_type (const char *_typename, const char *value, const char *color); int instr_platform_traced (); xbt_graph_t instr_routing_platform_graph (); void instr_routing_platform_graph_export_graphviz (xbt_graph_t g, const char *filename); diff --git a/src/instr/instr_config.cpp b/src/instr/instr_config.cpp index e6f06de5cb..eb86e1d068 100644 --- a/src/instr/instr_config.cpp +++ b/src/instr/instr_config.cpp @@ -117,10 +117,10 @@ int TRACE_start() } /* activate trace */ - if (trace_active == 1) { + if (trace_active) { THROWF(tracing_error, 0, "Tracing is already active"); } - trace_active = 1; + trace_active = true; XBT_DEBUG("Tracing is on"); } return 0; @@ -139,11 +139,11 @@ int TRACE_end() /* dump trace buffer */ TRACE_last_timestamp_to_dump = surf_get_clock(); - TRACE_paje_dump_buffer(1); + TRACE_paje_dump_buffer(true); /* destroy all data structures of tracing (and free) */ delete PJ_container_get_root(); - delete PJ_type_get_root(); + delete simgrid::instr::Type::getRootType(); rootType = nullptr; /* close the trace files */ @@ -158,7 +158,7 @@ int TRACE_end() } /* de-activate trace */ - trace_active = 0; + trace_active = false; XBT_DEBUG("Tracing is off"); XBT_DEBUG("Tracing system is shutdown"); } @@ -303,11 +303,11 @@ char *TRACE_get_viva_cat_conf () void TRACE_global_init() { - static int is_initialised = 0; + static bool is_initialised = false; if (is_initialised) return; - is_initialised = 1; + is_initialised = true; /* name of the tracefile */ xbt_cfg_register_string (OPT_TRACING_FILENAME, "simgrid.trace", nullptr, "Trace file created by the instrumented SimGrid."); xbt_cfg_register_boolean(OPT_TRACING, "no", nullptr, "Enable Tracing."); @@ -351,7 +351,7 @@ void TRACE_global_init() xbt_cfg_register_alias(OPT_TRACING_ONELINK_ONLY, "tracing/onelink_only"); /* instrumentation can be considered configured now */ - trace_configured = 1; + trace_configured = true; } static void print_line (const char *option, const char *desc, const char *longdesc, int detailed) @@ -597,7 +597,7 @@ void instr_pause_tracing () }else{ XBT_DEBUG ("Tracing is being paused."); } - trace_enabled = 0; + trace_enabled = false; XBT_DEBUG ("Tracing is paused."); } @@ -612,7 +612,7 @@ void instr_resume_tracing () if (previous_trace_state != -1){ trace_enabled = previous_trace_state; }else{ - trace_enabled = 1; + trace_enabled = true; } XBT_DEBUG ("Tracing is resumed."); previous_trace_state = -1; diff --git a/src/instr/instr_interface.cpp b/src/instr/instr_interface.cpp index 71762f419b..6263fcde8d 100644 --- a/src/instr/instr_interface.cpp +++ b/src/instr/instr_interface.cpp @@ -12,12 +12,7 @@ #include "surf/surf.h" #include -typedef enum { - INSTR_US_DECLARE, - INSTR_US_SET, - INSTR_US_ADD, - INSTR_US_SUB -} InstrUserVariable; +enum InstrUserVariable { INSTR_US_DECLARE, INSTR_US_SET, INSTR_US_ADD, INSTR_US_SUB }; XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_api, instr, "API"); @@ -153,7 +148,7 @@ void TRACE_declare_mark(const char *mark_type) } XBT_DEBUG("MARK,declare %s", mark_type); - simgrid::instr::Type::eventNew(mark_type, PJ_type_get_root()); + simgrid::instr::Type::getRootType()->getOrCreateEventType(mark_type); declared_marks.insert(mark_type); } @@ -183,17 +178,16 @@ void TRACE_declare_mark_value_with_color (const char *mark_type, const char *mar if (not mark_value) THROWF (tracing_error, 1, "mark_value is nullptr"); - simgrid::instr::Type* type = PJ_type_get_root()->getChild(mark_type); + simgrid::instr::Type* type = simgrid::instr::Type::getRootType()->byName(mark_type); if (not type) { THROWF (tracing_error, 1, "mark_type with name (%s) is not declared", mark_type); } - char white[INSTR_DEFAULT_STR_SIZE] = "1.0 1.0 1.0"; if (not mark_color) - mark_color = white; + mark_color = "1.0 1.0 1.0" /*white*/; XBT_DEBUG("MARK,declare_value %s %s %s", mark_type, mark_value, mark_color); - new simgrid::instr::Value(mark_value, mark_color, type); + simgrid::instr::Value::byNameOrCreate(mark_value, mark_color, type); } /** \ingroup TRACE_mark @@ -239,14 +233,14 @@ void TRACE_mark(const char *mark_type, const char *mark_value) THROWF (tracing_error, 1, "mark_value is nullptr"); //check if mark_type is already declared - simgrid::instr::Type* type = PJ_type_get_root()->getChild(mark_type); + simgrid::instr::Type* type = simgrid::instr::Type::getRootType()->byName(mark_type); if (not type) { THROWF (tracing_error, 1, "mark_type with name (%s) is not declared", mark_type); } XBT_DEBUG("MARK %s %s", mark_type, mark_value); new simgrid::instr::NewEvent(MSG_get_clock(), PJ_container_get_root(), type, - simgrid::instr::Value::get(mark_value, type)); + simgrid::instr::Value::byName(mark_value, type)); } /** \ingroup TRACE_mark @@ -282,8 +276,8 @@ static void instr_user_variable(double time, const char* resource, const char* v if (created != filter->end()) { // declared, let's work char valuestr[100]; snprintf(valuestr, 100, "%g", value); - container_t container = PJ_container_get(resource); - simgrid::instr::Type* type = container->type_->getChild(variable); + container_t container = simgrid::instr::Container::byName(resource); + simgrid::instr::Type* type = container->type_->byName(variable); switch (what){ case INSTR_US_SET: new simgrid::instr::SetVariableEvent(time, container, type, value); @@ -316,7 +310,7 @@ static void instr_user_srcdst_variable(double time, const char *src, const char std::vector route; simgrid::kernel::routing::NetZoneImpl::getGlobalRoute(src_elm, dst_elm, &route, nullptr); for (auto const& link : route) - instr_user_variable(time, link->cname(), variable, father_type, value, what, nullptr, &user_link_variables); + instr_user_variable(time, link->getCname(), variable, father_type, value, what, nullptr, &user_link_variables); } /** \ingroup TRACE_API @@ -945,10 +939,9 @@ void TRACE_host_state_declare_value (const char *state, const char *value, const */ void TRACE_host_set_state(const char* host, const char* state, const char* value_str) { - container_t container = PJ_container_get(host); - simgrid::instr::Type* type = container->type_->getChild(state); - simgrid::instr::Value* val = simgrid::instr::Value::get_or_new( - value_str, nullptr, type); /* if user didn't declare a value with a color, use nullptr color */ + container_t container = simgrid::instr::Container::byName(host); + simgrid::instr::Type* type = container->type_->byName(state); + simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate(value_str, "", type); new simgrid::instr::SetStateEvent(MSG_get_clock(), container, type, val); } @@ -965,10 +958,9 @@ void TRACE_host_set_state(const char* host, const char* state, const char* value */ void TRACE_host_push_state(const char* host, const char* state, const char* value_str) { - container_t container = PJ_container_get(host); - simgrid::instr::Type* type = container->type_->getChild(state); - simgrid::instr::Value* val = simgrid::instr::Value::get_or_new( - value_str, nullptr, type); /* if user didn't declare a value with a color, use nullptr color */ + container_t container = simgrid::instr::Container::byName(host); + simgrid::instr::Type* type = container->type_->byName(state); + simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate(value_str, "", type); new simgrid::instr::PushStateEvent(MSG_get_clock(), container, type, val); } @@ -984,8 +976,8 @@ void TRACE_host_push_state(const char* host, const char* state, const char* valu */ void TRACE_host_pop_state (const char *host, const char *state) { - container_t container = PJ_container_get(host); - simgrid::instr::Type* type = container->type_->getChild(state); + container_t container = simgrid::instr::Container::byName(host); + simgrid::instr::Type* type = container->type_->byName(state); new simgrid::instr::PopStateEvent(MSG_get_clock(), container, type); } diff --git a/src/instr/instr_paje_containers.cpp b/src/instr/instr_paje_containers.cpp index 9922c8ab06..3316dbd057 100644 --- a/src/instr/instr_paje_containers.cpp +++ b/src/instr/instr_paje_containers.cpp @@ -5,18 +5,18 @@ #include "simgrid/s4u/Engine.hpp" #include "simgrid/s4u/Host.hpp" - -#include "surf/surf.h" - #include "src/instr/instr_private.hpp" - +#include "surf/surf.h" #include XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_paje_containers, instr, "Paje tracing event system (containers)"); +extern FILE* tracing_file; +extern std::map tracing_files; // TI specific +double prefix = 0.0; // TI specific + static container_t rootContainer = nullptr; /* the root container */ -static std::unordered_map - allContainers; /* all created containers indexed by name */ +static std::unordered_map allContainers; /* all created containers indexed by name */ std::set trivaNodeTypes; /* all host types defined */ std::set trivaEdgeTypes; /* all link types defined */ @@ -26,110 +26,91 @@ long long int instr_new_paje_id () return type_id++; } +container_t PJ_container_get_root() +{ + return rootContainer; +} + void PJ_container_set_root (container_t root) { rootContainer = root; } -simgrid::instr::Container::Container(std::string name, simgrid::instr::e_container_types kind, Container* father) - : name_(name), kind_(kind), father_(father) +namespace simgrid { +namespace instr { + +Container::Container(std::string name, e_container_types kind, Container* father) + : kind_(kind), name_(name), father_(father) { static long long int container_id = 0; id_ = std::to_string(container_id); // id (or alias) of the container container_id++; - //Search for network_element_t - switch (kind){ - case simgrid::instr::INSTR_HOST: - this->netpoint_ = sg_host_by_name(name.c_str())->pimpl_netpoint; - xbt_assert(this->netpoint_, "Element '%s' not found", name.c_str()); + if (father_) { + level_ = father_->level_ + 1; + XBT_DEBUG("new container %s, child of %s", name.c_str(), father->name_.c_str()); + } + + // Search for network_element_t for AS, ROUTER and HOST + // Name the kind of container. For AS otherwise, the name depends on its level + std::string typeNameBuff; + switch (kind_) { + case INSTR_AS: + netpoint_ = simgrid::s4u::Engine::getInstance()->getNetpointByNameOrNull(name); + xbt_assert(netpoint_, "Element '%s' not found", name.c_str()); + typeNameBuff = std::string("L") + std::to_string(level_); + break; + case INSTR_ROUTER: + netpoint_ = simgrid::s4u::Engine::getInstance()->getNetpointByNameOrNull(name); + xbt_assert(netpoint_, "Element '%s' not found", name.c_str()); + typeNameBuff = std::string("ROUTER"); + break; + case INSTR_HOST: + netpoint_ = sg_host_by_name(name.c_str())->pimpl_netpoint; + xbt_assert(netpoint_, "Element '%s' not found", name.c_str()); + typeNameBuff = std::string("HOST"); + break; + case INSTR_LINK: + typeNameBuff = std::string("LINK"); + break; + case INSTR_SMPI: + typeNameBuff = std::string("MPI"); + break; + case INSTR_MSG_PROCESS: + typeNameBuff = std::string("MSG_PROCESS"); break; - case simgrid::instr::INSTR_ROUTER: - this->netpoint_ = simgrid::s4u::Engine::getInstance()->getNetpointByNameOrNull(name); - xbt_assert(this->netpoint_, "Element '%s' not found", name.c_str()); + case INSTR_MSG_VM: + typeNameBuff = std::string("MSG_VM"); break; - case simgrid::instr::INSTR_AS: - this->netpoint_ = simgrid::s4u::Engine::getInstance()->getNetpointByNameOrNull(name); - xbt_assert(this->netpoint_, "Element '%s' not found", name.c_str()); + case INSTR_MSG_TASK: + typeNameBuff = std::string("MSG_TASK"); break; default: - this->netpoint_ = nullptr; + THROWF(tracing_error, 0, "new container kind is unknown."); break; } if (father_) { - this->level_ = father_->level_ + 1; - XBT_DEBUG("new container %s, child of %s", name.c_str(), father->name_.c_str()); - } - - // type definition (method depends on kind of this new container) - if (this->kind_ == simgrid::instr::INSTR_AS) { - //if this container is of an AS, its type name depends on its level - char as_typename[INSTR_DEFAULT_STR_SIZE]; - snprintf(as_typename, INSTR_DEFAULT_STR_SIZE, "L%d", this->level_); - if (this->father_) { - this->type_ = this->father_->type_->getChildOrNull(as_typename); - if (this->type_ == nullptr) { - this->type_ = simgrid::instr::Type::containerNew(as_typename, this->father_->type_); - } - }else{ - this->type_ = simgrid::instr::Type::containerNew("0", nullptr); - } - } else { - //otherwise, the name is its kind - char typeNameBuff[INSTR_DEFAULT_STR_SIZE]; - switch (this->kind_) { - case simgrid::instr::INSTR_HOST: - snprintf (typeNameBuff, INSTR_DEFAULT_STR_SIZE, "HOST"); - break; - case simgrid::instr::INSTR_LINK: - snprintf (typeNameBuff, INSTR_DEFAULT_STR_SIZE, "LINK"); - break; - case simgrid::instr::INSTR_ROUTER: - snprintf (typeNameBuff, INSTR_DEFAULT_STR_SIZE, "ROUTER"); - break; - case simgrid::instr::INSTR_SMPI: - snprintf (typeNameBuff, INSTR_DEFAULT_STR_SIZE, "MPI"); - break; - case simgrid::instr::INSTR_MSG_PROCESS: - snprintf (typeNameBuff, INSTR_DEFAULT_STR_SIZE, "MSG_PROCESS"); - break; - case simgrid::instr::INSTR_MSG_VM: - snprintf (typeNameBuff, INSTR_DEFAULT_STR_SIZE, "MSG_VM"); - break; - case simgrid::instr::INSTR_MSG_TASK: - snprintf (typeNameBuff, INSTR_DEFAULT_STR_SIZE, "MSG_TASK"); - break; - default: - THROWF (tracing_error, 0, "new container kind is unknown."); - break; - } - simgrid::instr::Type* type = this->father_->type_->getChildOrNull(typeNameBuff); - if (type == nullptr){ - this->type_ = simgrid::instr::Type::containerNew(typeNameBuff, this->father_->type_); - }else{ - this->type_ = type; - } - } - if (this->father_) { - this->father_->children_.insert({this->name_, this}); - LogContainerCreation(this); + type_ = father_->type_->getOrCreateContainerType(typeNameBuff); + father_->children_.insert({name_, this}); + logCreation(); + } else if (kind_ == INSTR_AS) { + type_ = Type::createRootType(); } //register all kinds by name - if (not allContainers.emplace(this->name_, this).second) { - THROWF(tracing_error, 1, "container %s already present in allContainers data structure", this->name_.c_str()); + if (not allContainers.emplace(name_, this).second) { + THROWF(tracing_error, 1, "container %s already present in allContainers data structure", name_.c_str()); } - XBT_DEBUG("Add container name '%s'", this->name_.c_str()); + XBT_DEBUG("Add container name '%s'", name_.c_str()); //register NODE types for triva configuration - if (this->kind_ == simgrid::instr::INSTR_HOST || this->kind_ == simgrid::instr::INSTR_LINK || - this->kind_ == simgrid::instr::INSTR_ROUTER) { - trivaNodeTypes.insert(this->type_->name_); - } + if (kind_ == INSTR_HOST || kind_ == INSTR_LINK || kind_ == INSTR_ROUTER) + trivaNodeTypes.insert(type_->getName()); } -simgrid::instr::Container::~Container() + +Container::~Container() { XBT_DEBUG("destroy container %s", name_.c_str()); // Begin with destroying my own children @@ -139,47 +120,123 @@ simgrid::instr::Container::~Container() // obligation to dump previous events because they might reference the container that is about to be destroyed TRACE_last_timestamp_to_dump = surf_get_clock(); - TRACE_paje_dump_buffer(1); + TRACE_paje_dump_buffer(true); // trace my destruction if (not TRACE_disable_destroy() && this != PJ_container_get_root()) { // do not trace the container destruction if user requests or if the container is root - LogContainerDestruction(this); + logDestruction(); } // remove me from the allContainers data structure allContainers.erase(name_); } -simgrid::instr::Container* PJ_container_get(const char* name) +Container* Container::byNameOrNull(std::string name) { - container_t ret = PJ_container_get_or_null (name); - if (ret == nullptr){ - THROWF(tracing_error, 1, "container with name %s not found", name); - } - return ret; + auto cont = allContainers.find(name); + return cont == allContainers.end() ? nullptr : cont->second; } -simgrid::instr::Container* PJ_container_get_or_null(const char* name) +Container* Container::byName(std::string name) { - auto cont = allContainers.find(name); - return cont == allContainers.end() ? nullptr : cont->second; + Container* ret = Container::byNameOrNull(name); + if (ret == nullptr) + THROWF(tracing_error, 1, "container with name %s not found", name.c_str()); + + return ret; } -simgrid::instr::Container* PJ_container_get_root() +void Container::removeFromParent() { - return rootContainer; + if (father_) { + XBT_DEBUG("removeChildContainer (%s) FromContainer (%s) ", name_.c_str(), father_->name_.c_str()); + father_->children_.erase(name_); + } } -void PJ_container_remove_from_parent (container_t child) +void Container::logCreation() { - if (child == nullptr){ - THROWF (tracing_error, 0, "can't remove from parent with a nullptr child"); + double timestamp = SIMIX_get_clock(); + std::stringstream stream; + + XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, simgrid::instr::PAJE_CreateContainer, timestamp); + + if (instr_fmt_type == instr_fmt_paje) { + stream << std::fixed << std::setprecision(TRACE_precision()); + stream << simgrid::instr::PAJE_CreateContainer; + stream << " "; + /* prevent 0.0000 in the trace - this was the behavior before the transition to c++ */ + if (timestamp < 1e-12) + stream << 0; + else + stream << timestamp; + stream << " " << id_ << " " << type_->getId() << " " << father_->id_ << " \"" << name_ << "\"" << std::endl; + fprintf(tracing_file, "%s", stream.str().c_str()); + XBT_DEBUG("Dump %s", stream.str().c_str()); + stream.str(""); + stream.clear(); + } else if (instr_fmt_type == instr_fmt_TI) { + // if we are in the mode with only one file + static FILE* ti_unique_file = nullptr; + + if (tracing_files.empty()) { + // generate unique run id with time + prefix = xbt_os_time(); + } + + if (not xbt_cfg_get_boolean("tracing/smpi/format/ti-one-file") || ti_unique_file == nullptr) { + char* folder_name = bprintf("%s_files", TRACE_get_filename()); + char* filename = bprintf("%s/%f_%s.txt", folder_name, prefix, name_.c_str()); +#ifdef WIN32 + _mkdir(folder_name); +#else + mkdir(folder_name, S_IRWXU | S_IRWXG | S_IRWXO); +#endif + ti_unique_file = fopen(filename, "w"); + xbt_assert(ti_unique_file, "Tracefile %s could not be opened for writing: %s", filename, strerror(errno)); + fprintf(tracing_file, "%s\n", filename); + + xbt_free(folder_name); + xbt_free(filename); + } + + tracing_files.insert({this, ti_unique_file}); + } else { + THROW_IMPOSSIBLE; } +} - container_t parent = child->father_; - if (parent){ - XBT_DEBUG("removeChildContainer (%s) FromContainer (%s) ", child->name_.c_str(), parent->name_.c_str()); - parent->children_.erase(child->name_); +void Container::logDestruction() +{ + std::stringstream stream; + double timestamp = SIMIX_get_clock(); + + XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, simgrid::instr::PAJE_DestroyContainer, timestamp); + + if (instr_fmt_type == instr_fmt_paje) { + stream << std::fixed << std::setprecision(TRACE_precision()); + stream << simgrid::instr::PAJE_DestroyContainer; + stream << " "; + /* prevent 0.0000 in the trace - this was the behavior before the transition to c++ */ + if (timestamp < 1e-12) + stream << 0; + else + stream << timestamp; + stream << " " << type_->getId() << " " << id_ << std::endl; + fprintf(tracing_file, "%s", stream.str().c_str()); + XBT_DEBUG("Dump %s", stream.str().c_str()); + stream.str(""); + stream.clear(); + } else if (instr_fmt_type == instr_fmt_TI) { + if (not xbt_cfg_get_boolean("tracing/smpi/format/ti-one-file") || tracing_files.size() == 1) { + FILE* f = tracing_files.at(this); + fclose(f); + } + tracing_files.erase(this); + } else { + THROW_IMPOSSIBLE; } } +} +} diff --git a/src/instr/instr_paje_header.cpp b/src/instr/instr_paje_header.cpp index f7e04f5d3b..76d7967580 100644 --- a/src/instr/instr_paje_header.cpp +++ b/src/instr/instr_paje_header.cpp @@ -11,7 +11,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_header, instr, "Paje tracing event sy extern FILE *tracing_file; -static void TRACE_header_PajeDefineContainerType (int basic, int size) +static void TRACE_header_PajeDefineContainerType(bool basic) { fprintf(tracing_file, "%%EventDef PajeDefineContainerType %d\n", simgrid::instr::PAJE_DefineContainerType); fprintf(tracing_file, "%% Alias string\n"); @@ -24,7 +24,7 @@ static void TRACE_header_PajeDefineContainerType (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeDefineVariableType (int basic, int size) +static void TRACE_header_PajeDefineVariableType(bool basic) { fprintf(tracing_file, "%%EventDef PajeDefineVariableType %d\n", simgrid::instr::PAJE_DefineVariableType); fprintf(tracing_file, "%% Alias string\n"); @@ -38,7 +38,7 @@ static void TRACE_header_PajeDefineVariableType (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeDefineStateType (int basic, int size) +static void TRACE_header_PajeDefineStateType(bool basic) { fprintf(tracing_file, "%%EventDef PajeDefineStateType %d\n", simgrid::instr::PAJE_DefineStateType); fprintf(tracing_file, "%% Alias string\n"); @@ -51,7 +51,7 @@ static void TRACE_header_PajeDefineStateType (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeDefineEventType (int basic, int size) +static void TRACE_header_PajeDefineEventType(bool basic) { fprintf(tracing_file, "%%EventDef PajeDefineEventType %d\n", simgrid::instr::PAJE_DefineEventType); fprintf(tracing_file, "%% Alias string\n"); @@ -64,7 +64,7 @@ static void TRACE_header_PajeDefineEventType (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeDefineLinkType (int basic, int size) +static void TRACE_header_PajeDefineLinkType(bool basic) { fprintf(tracing_file, "%%EventDef PajeDefineLinkType %d\n", simgrid::instr::PAJE_DefineLinkType); fprintf(tracing_file, "%% Alias string\n"); @@ -81,7 +81,7 @@ static void TRACE_header_PajeDefineLinkType (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeDefineEntityValue (int basic, int size) +static void TRACE_header_PajeDefineEntityValue(bool basic) { fprintf(tracing_file, "%%EventDef PajeDefineEntityValue %d\n", simgrid::instr::PAJE_DefineEntityValue); fprintf(tracing_file, "%% Alias string\n"); @@ -95,7 +95,7 @@ static void TRACE_header_PajeDefineEntityValue (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeCreateContainer (int basic, int size) +static void TRACE_header_PajeCreateContainer() { fprintf(tracing_file, "%%EventDef PajeCreateContainer %d\n", simgrid::instr::PAJE_CreateContainer); fprintf(tracing_file, "%% Time date\n"); @@ -106,7 +106,7 @@ static void TRACE_header_PajeCreateContainer (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeDestroyContainer (int basic, int size) +static void TRACE_header_PajeDestroyContainer() { fprintf(tracing_file, "%%EventDef PajeDestroyContainer %d\n", simgrid::instr::PAJE_DestroyContainer); fprintf(tracing_file, "%% Time date\n"); @@ -115,7 +115,7 @@ static void TRACE_header_PajeDestroyContainer (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeSetVariable (int basic, int size) +static void TRACE_header_PajeSetVariable() { fprintf(tracing_file, "%%EventDef PajeSetVariable %d\n", simgrid::instr::PAJE_SetVariable); fprintf(tracing_file, "%% Time date\n"); @@ -125,7 +125,7 @@ static void TRACE_header_PajeSetVariable (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeAddVariable (int basic, int size) +static void TRACE_header_PajeAddVariable() { fprintf(tracing_file, "%%EventDef PajeAddVariable %d\n", simgrid::instr::PAJE_AddVariable); fprintf(tracing_file, "%% Time date\n"); @@ -135,7 +135,7 @@ static void TRACE_header_PajeAddVariable (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeSubVariable (int basic, int size) +static void TRACE_header_PajeSubVariable() { fprintf(tracing_file, "%%EventDef PajeSubVariable %d\n", simgrid::instr::PAJE_SubVariable); fprintf(tracing_file, "%% Time date\n"); @@ -145,8 +145,7 @@ static void TRACE_header_PajeSubVariable (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } - -static void TRACE_header_PajeSetState (int basic, int size) +static void TRACE_header_PajeSetState() { fprintf(tracing_file, "%%EventDef PajeSetState %d\n", simgrid::instr::PAJE_SetState); fprintf(tracing_file, "%% Time date\n"); @@ -156,7 +155,7 @@ static void TRACE_header_PajeSetState (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajePushState (int basic, int size) +static void TRACE_header_PajePushState(int size) { fprintf(tracing_file, "%%EventDef PajePushState %d\n", simgrid::instr::PAJE_PushState); fprintf(tracing_file, "%% Time date\n"); @@ -177,7 +176,7 @@ static void TRACE_header_PajePushState (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajePopState (int basic, int size) +static void TRACE_header_PajePopState() { fprintf(tracing_file, "%%EventDef PajePopState %d\n", simgrid::instr::PAJE_PopState); fprintf(tracing_file, "%% Time date\n"); @@ -186,9 +185,10 @@ static void TRACE_header_PajePopState (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeResetState (int basic, int size) +static void TRACE_header_PajeResetState(bool basic) { - if (basic) return; + if (basic) + return; fprintf(tracing_file, "%%EventDef PajeResetState %d\n", simgrid::instr::PAJE_ResetState); fprintf(tracing_file, "%% Time date\n"); @@ -197,7 +197,7 @@ static void TRACE_header_PajeResetState (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeStartLink (int basic, int size) +static void TRACE_header_PajeStartLink(bool basic, int size) { fprintf(tracing_file, "%%EventDef PajeStartLink %d\n", simgrid::instr::PAJE_StartLink); fprintf(tracing_file, "%% Time date\n"); @@ -214,7 +214,7 @@ static void TRACE_header_PajeStartLink (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeEndLink (int basic, int size) +static void TRACE_header_PajeEndLink(bool basic) { fprintf(tracing_file, "%%EventDef PajeEndLink %d\n", simgrid::instr::PAJE_EndLink); fprintf(tracing_file, "%% Time date\n"); @@ -230,7 +230,7 @@ static void TRACE_header_PajeEndLink (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -static void TRACE_header_PajeNewEvent (int basic, int size) +static void TRACE_header_PajeNewEvent() { fprintf(tracing_file, "%%EventDef PajeNewEvent %d\n", simgrid::instr::PAJE_NewEvent); fprintf(tracing_file, "%% Time date\n"); @@ -240,25 +240,25 @@ static void TRACE_header_PajeNewEvent (int basic, int size) fprintf(tracing_file, "%%EndEventDef\n"); } -void TRACE_header(int basic, int size) +void TRACE_header(bool basic, int size) { XBT_DEBUG ("Define paje header"); - TRACE_header_PajeDefineContainerType (basic, size); - TRACE_header_PajeDefineVariableType (basic, size); - TRACE_header_PajeDefineStateType (basic, size); - TRACE_header_PajeDefineEventType (basic, size); - TRACE_header_PajeDefineLinkType (basic, size); - TRACE_header_PajeDefineEntityValue (basic, size); - TRACE_header_PajeCreateContainer (basic, size); - TRACE_header_PajeDestroyContainer (basic, size); - TRACE_header_PajeSetVariable (basic, size); - TRACE_header_PajeAddVariable (basic, size); - TRACE_header_PajeSubVariable (basic, size); - TRACE_header_PajeSetState (basic, size); - TRACE_header_PajePushState (basic, size); - TRACE_header_PajePopState (basic, size); - TRACE_header_PajeResetState (basic, size); + TRACE_header_PajeDefineContainerType(basic); + TRACE_header_PajeDefineVariableType(basic); + TRACE_header_PajeDefineStateType(basic); + TRACE_header_PajeDefineEventType(basic); + TRACE_header_PajeDefineLinkType(basic); + TRACE_header_PajeDefineEntityValue(basic); + TRACE_header_PajeCreateContainer(); + TRACE_header_PajeDestroyContainer(); + TRACE_header_PajeSetVariable(); + TRACE_header_PajeAddVariable(); + TRACE_header_PajeSubVariable(); + TRACE_header_PajeSetState(); + TRACE_header_PajePushState(size); + TRACE_header_PajePopState(); + TRACE_header_PajeResetState(basic); TRACE_header_PajeStartLink (basic, size); - TRACE_header_PajeEndLink (basic, size); - TRACE_header_PajeNewEvent (basic, size); + TRACE_header_PajeEndLink(basic); + TRACE_header_PajeNewEvent(); } diff --git a/src/instr/instr_paje_trace.cpp b/src/instr/instr_paje_trace.cpp index 23ed224460..1a5371cb85 100644 --- a/src/instr/instr_paje_trace.cpp +++ b/src/instr/instr_paje_trace.cpp @@ -10,59 +10,47 @@ #include "src/smpi/include/private.hpp" #include "typeinfo" #include "xbt/virtu.h" /* sg_cmdline */ - -#include -#include -#include /** std::setprecision **/ -#include -#ifdef WIN32 -#include // _mkdir -#endif +#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_trace, instr, "tracing event system"); static std::stringstream stream; FILE *tracing_file = nullptr; -static std::map tracing_files; // TI specific -static double prefix=0.0; // TI specific +std::map tracing_files; // TI specific std::vector buffer; void buffer_debug(std::vector* buf); -void dump_comment (const char *comment) +void dump_comment(std::string comment) { - if (not strlen(comment)) + if (comment.empty()) return; - fprintf (tracing_file, "# %s\n", comment); + fprintf(tracing_file, "# %s\n", comment.c_str()); } -void dump_comment_file (const char *filename) +void dump_comment_file(std::string filename) { - if (not strlen(filename)) + if (filename.empty()) return; - FILE *file = fopen (filename, "r"); - if (not file) { - THROWF (system_error, 1, "Comment file %s could not be opened for reading.", filename); + std::ifstream* fs = new std::ifstream(); + fs->open(filename.c_str(), std::ifstream::in); + + if (fs->fail()) { + THROWF(system_error, 1, "Comment file %s could not be opened for reading.", filename.c_str()); } - while (not feof(file)) { - char c; - c = fgetc(file); - if (feof(file)) break; + while (not fs->eof()) { + std::string line; fprintf (tracing_file, "# "); - while (c != '\n'){ - fprintf (tracing_file, "%c", c); - c = fgetc(file); - if (feof(file)) break; - } - fprintf (tracing_file, "\n"); + std::getline(*fs, line); + fprintf(tracing_file, "%s", line.c_str()); } - fclose(file); + fs->close(); } double TRACE_last_timestamp_to_dump = 0; //dumps the trace file until the timestamp TRACE_last_timestamp_to_dump -void TRACE_paje_dump_buffer (int force) +void TRACE_paje_dump_buffer(bool force) { if (not TRACE_is_enabled()) return; @@ -88,7 +76,6 @@ void TRACE_paje_dump_buffer (int force) XBT_DEBUG("%s: ends", __FUNCTION__); } -void buffer_debug(std::vector* buf); void buffer_debug(std::vector* buf) { return; @@ -121,22 +108,22 @@ static void print_timestamp(simgrid::instr::PajeEvent* event) } /* internal do the instrumentation module */ -static void insert_into_buffer(simgrid::instr::PajeEvent* tbi) +void simgrid::instr::PajeEvent::insertIntoBuffer() { - if (TRACE_buffer() == 0){ - tbi->print (); - delete tbi; + if (not TRACE_buffer()) { + print(); + delete this; return; } buffer_debug(&buffer); - XBT_DEBUG("%s: insert event_type=%d, timestamp=%f, buffersize=%zu)", __FUNCTION__, (int)tbi->eventType_, - tbi->timestamp_, buffer.size()); + XBT_DEBUG("%s: insert event_type=%d, timestamp=%f, buffersize=%zu)", __FUNCTION__, static_cast(eventType_), + timestamp_, buffer.size()); std::vector::reverse_iterator i; for (i = buffer.rbegin(); i != buffer.rend(); ++i) { simgrid::instr::PajeEvent* e1 = *i; - XBT_DEBUG("compare to %p is of type %d; timestamp:%f", e1, (int)e1->eventType_, e1->timestamp_); - if (e1->timestamp_ <= tbi->timestamp_) + XBT_DEBUG("compare to %p is of type %d; timestamp:%f", e1, static_cast(e1->eventType_), e1->timestamp_); + if (e1->timestamp_ <= timestamp_) break; } if (i == buffer.rend()) @@ -144,9 +131,8 @@ static void insert_into_buffer(simgrid::instr::PajeEvent* tbi) else if (i == buffer.rbegin()) XBT_DEBUG("%s: inserted at end", __FUNCTION__); else - XBT_DEBUG("%s: inserted at pos= %zd from its end", __FUNCTION__, - std::distance(buffer.rbegin(),i)); - buffer.insert(i.base(), tbi); + XBT_DEBUG("%s: inserted at pos= %zd from its end", __FUNCTION__, std::distance(buffer.rbegin(), i)); + buffer.insert(i.base(), this); buffer_debug(&buffer); } @@ -192,7 +178,7 @@ void TRACE_paje_end() { XBT_DEBUG("Filename %s is closed", filename); } -void LogContainerTypeDefinition(simgrid::instr::Type* type) +void simgrid::instr::Type::logContainerTypeDefinition() { XBT_DEBUG("%s: event_type=%d", __FUNCTION__, simgrid::instr::PAJE_DefineContainerType); //print it @@ -201,17 +187,16 @@ void LogContainerTypeDefinition(simgrid::instr::Type* type) TRACE_precision(), 0.); stream << std::fixed << std::setprecision(TRACE_precision()); stream << simgrid::instr::PAJE_DefineContainerType; - stream << " " << type->id_ << " " << type->father_->id_ << " " << type->name_; + stream << " " << id_ << " " << father_->getId() << " " << name_; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ } else { THROW_IMPOSSIBLE; } - //-- } -void LogVariableTypeDefinition(simgrid::instr::Type* type) +void simgrid::instr::Type::logVariableTypeDefinition() { XBT_DEBUG("%s: event_type=%d", __FUNCTION__, simgrid::instr::PAJE_DefineVariableType); @@ -221,9 +206,9 @@ void LogVariableTypeDefinition(simgrid::instr::Type* type) TRACE_precision(), 0.); stream << std::fixed << std::setprecision(TRACE_precision()); stream << simgrid::instr::PAJE_DefineVariableType; - stream << " " << type->id_ << " " << type->father_->id_ << " " << type->name_; - if (type->color_) - stream << " \"" << type->color_ << "\""; + stream << " " << id_ << " " << father_->getId() << " " << name_; + if (isColored()) + stream << " \"" << color_ << "\""; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -232,16 +217,16 @@ void LogVariableTypeDefinition(simgrid::instr::Type* type) } } -void LogStateTypeDefinition(simgrid::instr::Type* type) +void simgrid::instr::Type::logStateTypeDefinition() { //print it -if (instr_fmt_type == instr_fmt_paje) { - XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, simgrid::instr::PAJE_DefineStateType, TRACE_precision(), - 0.); - stream << std::fixed << std::setprecision(TRACE_precision()); - stream << simgrid::instr::PAJE_DefineStateType; - stream << " " << type->id_ << " " << type->father_->id_ << " " << type->name_; - print_row(); + if (instr_fmt_type == instr_fmt_paje) { + XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, simgrid::instr::PAJE_DefineStateType, + TRACE_precision(), 0.); + stream << std::fixed << std::setprecision(TRACE_precision()); + stream << simgrid::instr::PAJE_DefineStateType; + stream << " " << id_ << " " << father_->getId() << " " << name_; + print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ } else { @@ -249,7 +234,7 @@ if (instr_fmt_type == instr_fmt_paje) { } } -void LogDefineEventType(simgrid::instr::Type* type) +void simgrid::instr::Type::logDefineEventType() { //print it if (instr_fmt_type == instr_fmt_paje) { @@ -257,7 +242,7 @@ void LogDefineEventType(simgrid::instr::Type* type) TRACE_precision(), 0.); stream << std::fixed << std::setprecision(TRACE_precision()); stream << simgrid::instr::PAJE_DefineEventType; - stream << " " << type->id_ << " " << type->father_->id_ << " " << type->name_; + stream << " " << id_ << " " << father_->getId() << " " << name_; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -266,18 +251,17 @@ void LogDefineEventType(simgrid::instr::Type* type) } } -void LogLinkTypeDefinition(simgrid::instr::Type* type, simgrid::instr::Type* source, simgrid::instr::Type* dest) +void simgrid::instr::Type::logLinkTypeDefinition(simgrid::instr::Type* source, simgrid::instr::Type* dest) { XBT_DEBUG("%s: event_type=%d", __FUNCTION__, simgrid::instr::PAJE_DefineLinkType); //print it -if (instr_fmt_type == instr_fmt_paje) { - XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, simgrid::instr::PAJE_DefineLinkType, TRACE_precision(), - 0.); - stream << std::fixed << std::setprecision(TRACE_precision()); - stream << simgrid::instr::PAJE_DefineLinkType; - stream << " " << type->id_ << " " << type->father_->id_ << " " << source->id_ << " " << dest->id_ << " " - << type->name_; - print_row(); + if (instr_fmt_type == instr_fmt_paje) { + XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, simgrid::instr::PAJE_DefineLinkType, TRACE_precision(), + 0.); + stream << std::fixed << std::setprecision(TRACE_precision()); + stream << simgrid::instr::PAJE_DefineLinkType; + stream << " " << id_ << " " << father_->getId() << " " << source->getId() << " " << dest->getId() << " " << name_; + print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ } else { @@ -285,16 +269,16 @@ if (instr_fmt_type == instr_fmt_paje) { } } -void LogEntityValue(simgrid::instr::Value* val) +void simgrid::instr::Value::print() { XBT_DEBUG("%s: event_type=%d", __FUNCTION__, simgrid::instr::PAJE_DefineEntityValue); //print it -if (instr_fmt_type == instr_fmt_paje) { + if (instr_fmt_type == instr_fmt_paje) { stream << std::fixed << std::setprecision(TRACE_precision()); stream << simgrid::instr::PAJE_DefineEntityValue; - stream << " " << val->id_ << " " << val->father_->id_ << " " << val->name_; - if (val->color_) - stream << " \"" << val->color_ << "\""; + stream << " " << id_ << " " << father_->getId() << " " << name_; + if (isColored()) + stream << " \"" << color_ << "\""; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -303,93 +287,11 @@ if (instr_fmt_type == instr_fmt_paje) { } } -void LogContainerCreation (container_t container) -{ - double timestamp = SIMIX_get_clock(); - - XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, simgrid::instr::PAJE_CreateContainer, timestamp); - - if (instr_fmt_type == instr_fmt_paje) { - stream << std::fixed << std::setprecision(TRACE_precision()); - stream << simgrid::instr::PAJE_CreateContainer; - stream << " "; - /* prevent 0.0000 in the trace - this was the behavior before the transition to c++ */ - if (timestamp < 1e-12) - stream << 0; - else - stream << timestamp; - stream << " " << container->id_ << " " << container->type_->id_ << " " << container->father_->id_ << " \"" - << container->name_ << "\""; - - print_row(); - } else if (instr_fmt_type == instr_fmt_TI) { - // if we are in the mode with only one file - static FILE* ti_unique_file = nullptr; - - if (tracing_files.empty()) { - // generate unique run id with time - prefix = xbt_os_time(); - } - - if (not xbt_cfg_get_boolean("tracing/smpi/format/ti-one-file") || ti_unique_file == nullptr) { - char* folder_name = bprintf("%s_files", TRACE_get_filename()); - char* filename = bprintf("%s/%f_%s.txt", folder_name, prefix, container->name_.c_str()); -#ifdef WIN32 - _mkdir(folder_name); -#else - mkdir(folder_name, S_IRWXU | S_IRWXG | S_IRWXO); -#endif - ti_unique_file = fopen(filename, "w"); - xbt_assert(ti_unique_file, "Tracefile %s could not be opened for writing: %s", filename, strerror(errno)); - fprintf(tracing_file, "%s\n", filename); - - xbt_free(folder_name); - xbt_free(filename); - } - - tracing_files.insert({container, ti_unique_file}); - } else { - THROW_IMPOSSIBLE; - } -} - -void LogContainerDestruction(container_t container) -{ - double timestamp = SIMIX_get_clock(); - - XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, simgrid::instr::PAJE_DestroyContainer, timestamp); - - if (instr_fmt_type == instr_fmt_paje) { - stream << std::fixed << std::setprecision(TRACE_precision()); - stream << simgrid::instr::PAJE_DestroyContainer; - stream << " "; - /* prevent 0.0000 in the trace - this was the behavior before the transition to c++ */ - if (timestamp < 1e-12) - stream << 0; - else - stream << timestamp; - stream << " " << container->type_->id_ << " " << container->id_; - print_row(); - } else if (instr_fmt_type == instr_fmt_TI) { - if (not xbt_cfg_get_boolean("tracing/smpi/format/ti-one-file") || tracing_files.size() == 1) { - FILE* f = tracing_files.at(container); - fclose(f); - } - tracing_files.erase(container); - } else { - THROW_IMPOSSIBLE; - } -} - simgrid::instr::SetVariableEvent::SetVariableEvent(double timestamp, container_t container, Type* type, double value) - : container(container), type(type), value(value) + : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_SetVariable), value(value) { - this->eventType_ = PAJE_SetVariable; - this->timestamp_ = timestamp; - XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)eventType_, this->timestamp_); - - insert_into_buffer (this); + insertIntoBuffer(); } void simgrid::instr::SetVariableEvent::print() @@ -399,7 +301,7 @@ void simgrid::instr::SetVariableEvent::print() stream << std::fixed << std::setprecision(TRACE_precision()); stream << (int)this->eventType_; print_timestamp(this); - stream << " " << type->id_ << " " << container->id_ << " " << value; + stream << " " << type->getId() << " " << container->id_ << " " << value; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -410,14 +312,10 @@ void simgrid::instr::SetVariableEvent::print() simgrid::instr::AddVariableEvent::AddVariableEvent(double timestamp, container_t container, simgrid::instr::Type* type, double value) - : container(container), type(type), value(value) + : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_AddVariable), value(value) { - this->eventType_ = PAJE_AddVariable; - this->timestamp_ = timestamp; - XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)eventType_, this->timestamp_); - - insert_into_buffer (this); + insertIntoBuffer(); } void simgrid::instr::AddVariableEvent::print() @@ -427,7 +325,7 @@ void simgrid::instr::AddVariableEvent::print() stream << std::fixed << std::setprecision(TRACE_precision()); stream << (int)this->eventType_; print_timestamp(this); - stream << " " << type->id_ << " " << container->id_ << " " << value; + stream << " " << type->getId() << " " << container->id_ << " " << value; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -437,14 +335,10 @@ void simgrid::instr::AddVariableEvent::print() } simgrid::instr::SubVariableEvent::SubVariableEvent(double timestamp, container_t container, Type* type, double value) - : container(container), type(type), value(value) + : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_SubVariable), value(value) { - this->eventType_ = PAJE_SubVariable; - this->timestamp_ = timestamp; - XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)eventType_, this->timestamp_); - - insert_into_buffer (this); + insertIntoBuffer(); } void simgrid::instr::SubVariableEvent::print() @@ -454,7 +348,7 @@ void simgrid::instr::SubVariableEvent::print() stream << std::fixed << std::setprecision(TRACE_precision()); stream << (int)this->eventType_; print_timestamp(this); - stream << " " << type->id_ << " " << container->id_ << " " << value; + stream << " " << type->getId() << " " << container->id_ << " " << value; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -464,11 +358,8 @@ void simgrid::instr::SubVariableEvent::print() } simgrid::instr::SetStateEvent::SetStateEvent(double timestamp, container_t container, Type* type, Value* value) - : container(container), type(type), value(value) + : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_SetState), value(value) { - this->eventType_ = PAJE_SetState; - this->timestamp_ = timestamp; - #if HAVE_SMPI if (xbt_cfg_get_boolean("smpi/trace-call-location")) { smpi_trace_call_location_t* loc = smpi_trace_get_call_location(); @@ -478,8 +369,7 @@ simgrid::instr::SetStateEvent::SetStateEvent(double timestamp, container_t conta #endif XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)eventType_, this->timestamp_); - - insert_into_buffer (this); + insertIntoBuffer(); } void simgrid::instr::SetStateEvent::print() @@ -489,8 +379,8 @@ void simgrid::instr::SetStateEvent::print() stream << std::fixed << std::setprecision(TRACE_precision()); stream << (int)this->eventType_; print_timestamp(this); - stream << " " << type->id_ << " " << container->id_; - stream << " " << value->id_; + stream << " " << type->getId() << " " << container->id_; + stream << " " << value->getId(); #if HAVE_SMPI if (xbt_cfg_get_boolean("smpi/trace-call-location")) { stream << " \"" << filename << "\" " << linenumber; @@ -506,11 +396,8 @@ void simgrid::instr::SetStateEvent::print() simgrid::instr::PushStateEvent::PushStateEvent(double timestamp, container_t container, Type* type, Value* value, void* extra) - : container(container), type(type), value(value), extra_(extra) + : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_PushState), value(value), extra_(extra) { - this->eventType_ = PAJE_PushState; - this->timestamp_ = timestamp; - #if HAVE_SMPI if (xbt_cfg_get_boolean("smpi/trace-call-location")) { smpi_trace_call_location_t* loc = smpi_trace_get_call_location(); @@ -521,12 +408,13 @@ simgrid::instr::PushStateEvent::PushStateEvent(double timestamp, container_t con XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)eventType_, this->timestamp_); - insert_into_buffer (this); + insertIntoBuffer(); } simgrid::instr::PushStateEvent::PushStateEvent(double timestamp, container_t container, Type* type, Value* val) : PushStateEvent(timestamp, container, type, val, nullptr) {} + void simgrid::instr::PushStateEvent::print() { if (instr_fmt_type == instr_fmt_paje) { @@ -534,8 +422,8 @@ void simgrid::instr::PushStateEvent::print() stream << std::fixed << std::setprecision(TRACE_precision()); stream << (int)this->eventType_; print_timestamp(this); - stream << " " << type->id_ << " " << container->id_; - stream << " " << value->id_; + stream << " " << type->getId() << " " << container->id_; + stream << " " << value->getId(); if (TRACE_display_sizes()) { stream << " "; @@ -677,7 +565,7 @@ void simgrid::instr::PushStateEvent::print() case TRACING_SSEND: case TRACING_ISSEND: default: - XBT_WARN("Call from %s impossible to translate into replay command : Not implemented (yet)", value->name_); + XBT_WARN("Call from %s impossible to translate into replay command : Not implemented (yet)", value->getCname()); break; } @@ -694,14 +582,10 @@ void simgrid::instr::PushStateEvent::print() } simgrid::instr::PopStateEvent::PopStateEvent(double timestamp, container_t container, Type* type) - : container(container), type(type) + : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_PopState) { - this->eventType_ = PAJE_PopState; - this->timestamp_ = timestamp; - XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)eventType_, this->timestamp_); - - insert_into_buffer (this); + insertIntoBuffer(); } void simgrid::instr::PopStateEvent::print() @@ -711,7 +595,7 @@ void simgrid::instr::PopStateEvent::print() stream << std::fixed << std::setprecision(TRACE_precision()); stream << (int)this->eventType_; print_timestamp(this); - stream << " " << type->id_ << " " << container->id_; + stream << " " << type->getId() << " " << container->id_; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -721,14 +605,10 @@ void simgrid::instr::PopStateEvent::print() } simgrid::instr::ResetStateEvent::ResetStateEvent(double timestamp, container_t container, Type* type) - : container(container), type(type) + : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_ResetState) { - this->eventType_ = PAJE_ResetState; - this->timestamp_ = timestamp; - XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)eventType_, this->timestamp_); - - insert_into_buffer (this); + insertIntoBuffer(); delete[] this; } @@ -739,7 +619,7 @@ void simgrid::instr::ResetStateEvent::print() stream << std::fixed << std::setprecision(TRACE_precision()); stream << (int)this->eventType_; print_timestamp(this); - stream << " " << type->id_ << " " << container->id_; + stream << " " << type->getId() << " " << container->id_; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -749,26 +629,21 @@ void simgrid::instr::ResetStateEvent::print() } simgrid::instr::StartLinkEvent::StartLinkEvent(double timestamp, container_t container, Type* type, - container_t sourceContainer, const char* value, const char* key) + container_t sourceContainer, std::string value, std::string key) : StartLinkEvent(timestamp, container, type, sourceContainer, value, key, -1) {} simgrid::instr::StartLinkEvent::StartLinkEvent(double timestamp, container_t container, Type* type, - container_t sourceContainer, const char* value, const char* key, + container_t sourceContainer, std::string value, std::string key, int size) - : container_(container) - , type_(type) + : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_StartLink) , sourceContainer_(sourceContainer) , value_(value) , key_(key) , size_(size) { - eventType_ = PAJE_StartLink; - this->timestamp_ = timestamp; - XBT_DEBUG("%s: event_type=%d, timestamp=%f, value:%s", __FUNCTION__, (int)eventType_, this->timestamp_, this->value_.c_str()); - - insert_into_buffer (this); + insertIntoBuffer(); } void simgrid::instr::StartLinkEvent::print() @@ -778,7 +653,7 @@ void simgrid::instr::StartLinkEvent::print() stream << std::fixed << std::setprecision(TRACE_precision()); stream << (int)this->eventType_; print_timestamp(this); - stream << " " << type_->id_ << " " << container_->id_ << " " << value_; + stream << " " << type->getId() << " " << container->id_ << " " << value_; stream << " " << sourceContainer_->id_ << " " << key_; if (TRACE_display_sizes()) { @@ -794,14 +669,13 @@ void simgrid::instr::StartLinkEvent::print() simgrid::instr::EndLinkEvent::EndLinkEvent(double timestamp, container_t container, Type* type, container_t destContainer, std::string value, std::string key) - : container(container), type(type), destContainer(destContainer), value(value), key(key) + : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_EndLink) + , destContainer(destContainer) + , value(value) + , key(key) { - this->eventType_ = PAJE_EndLink; - this->timestamp_ = timestamp; - XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)eventType_, this->timestamp_); - - insert_into_buffer (this); + insertIntoBuffer(); } void simgrid::instr::EndLinkEvent::print() @@ -811,7 +685,7 @@ void simgrid::instr::EndLinkEvent::print() stream << std::fixed << std::setprecision(TRACE_precision()); stream << (int)this->eventType_; print_timestamp(this); - stream << " " << type->id_ << " " << container->id_ << " " << value; + stream << " " << type->getId() << " " << container->id_ << " " << value; stream << " " << destContainer->id_ << " " << key; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { @@ -822,16 +696,13 @@ void simgrid::instr::EndLinkEvent::print() } simgrid::instr::NewEvent::NewEvent(double timestamp, container_t container, Type* type, Value* val) + : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_NewEvent) { - this->eventType_ = PAJE_NewEvent; - this->timestamp_ = timestamp; - this->type = type; - this->container = container; this->val = val; XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)eventType_, this->timestamp_); - insert_into_buffer (this); + insertIntoBuffer(); } void simgrid::instr::NewEvent::print() @@ -841,7 +712,7 @@ void simgrid::instr::NewEvent::print() stream << std::fixed << std::setprecision(TRACE_precision()); stream << (int)this->eventType_; print_timestamp(this); - stream << " " << type->id_ << " " << container->id_ << " " << val->id_; + stream << " " << type->getId() << " " << container->id_ << " " << val->getId(); print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ diff --git a/src/instr/instr_paje_types.cpp b/src/instr/instr_paje_types.cpp index b1e5532c9c..87c7f2030a 100644 --- a/src/instr/instr_paje_types.cpp +++ b/src/instr/instr_paje_types.cpp @@ -10,152 +10,124 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_paje_types, instr, "Paje tracing event sy static simgrid::instr::Type* rootType = nullptr; /* the root type */ -simgrid::instr::Type* PJ_type_get_root() -{ - return rootType; -} +namespace simgrid { +namespace instr { -simgrid::instr::Type::Type(const char* typeNameBuff, const char* key, const char* color, e_entity_types kind, - Type* father) - : kind_(kind), father_(father) +Type::Type(std::string name, std::string alias, std::string color, e_entity_types kind, Type* father) + : name_(name), color_(color), kind_(kind), father_(father) { - if (typeNameBuff == nullptr || key == nullptr){ - THROWF(tracing_error, 0, "can't create a new type with name or key equal nullptr"); + if (name.empty() || alias.empty()) { + THROWF(tracing_error, 0, "can't create a new type with no name or alias"); } - this->name_ = xbt_strdup(typeNameBuff); - this->children_ = xbt_dict_new_homogeneous(nullptr); - this->values_ = xbt_dict_new_homogeneous(nullptr); - this->color_ = xbt_strdup(color); - - this->id_ = bprintf("%lld", instr_new_paje_id()); + id_ = std::to_string(instr_new_paje_id()); if (father != nullptr){ - xbt_dict_set(father->children_, key, this, nullptr); - XBT_DEBUG("new type %s, child of %s", typeNameBuff, father->name_); + father->children_.insert({alias, this}); + XBT_DEBUG("new type %s, child of %s", name_.c_str(), father->getCname()); } } -simgrid::instr::Type::~Type() +Type::~Type() { - simgrid::instr::Value* val; - char *value_name; - xbt_dict_cursor_t cursor = nullptr; - xbt_dict_foreach (values_, cursor, value_name, val) { - XBT_DEBUG("free value %s, child of %s", val->name_, val->father_->name_); - delete val; - } - xbt_dict_free(&values_); - simgrid::instr::Type* child; - char *child_name; - xbt_dict_foreach (children_, cursor, child_name, child) { - delete child; - } - xbt_dict_free(&children_); - xbt_free(name_); - xbt_free(id_); - xbt_free(color_); + for (auto elm : values_) + delete elm.second; + for (auto elm : children_) + delete elm.second; } -simgrid::instr::Type* simgrid::instr::Type::getChild(const char* name) +Type* Type::byName(std::string name) { - simgrid::instr::Type* ret = this->getChildOrNull(name); - if (ret == nullptr) - THROWF(tracing_error, 2, "type with name (%s) not found in father type (%s)", name, this->name_); - return ret; -} - -simgrid::instr::Type* simgrid::instr::Type::getChildOrNull(const char* name) -{ - xbt_assert(name != nullptr, "can't get type with a nullptr name"); - - simgrid::instr::Type* ret = nullptr; - simgrid::instr::Type* child; - char *child_name; - xbt_dict_cursor_t cursor = nullptr; - xbt_dict_foreach (children_, cursor, child_name, child) { - if (strcmp(child->name_, name) == 0) { + Type* ret = nullptr; + for (auto elm : children_) { + if (elm.second->name_ == name) { if (ret != nullptr) { THROWF (tracing_error, 0, "there are two children types with the same name?"); } else { - ret = child; + ret = elm.second; } } } + if (ret == nullptr) + THROWF(tracing_error, 2, "type with name (%s) not found in father type (%s)", name.c_str(), getCname()); return ret; } -simgrid::instr::Type* simgrid::instr::Type::containerNew(const char* name, simgrid::instr::Type* father) +Type* Type::createRootType() { - if (name == nullptr){ - THROWF (tracing_error, 0, "can't create a container type with a nullptr name"); - } - - simgrid::instr::Type* ret = new simgrid::instr::Type(name, name, nullptr, TYPE_CONTAINER, father); - if (father == nullptr) { - rootType = ret; - } else { - XBT_DEBUG("ContainerType %s(%s), child of %s(%s)", ret->name_, ret->id_, father->name_, father->id_); - LogContainerTypeDefinition(ret); - } + simgrid::instr::Type* ret = new simgrid::instr::Type("0", "0", "", TYPE_CONTAINER, nullptr); + rootType = ret; return ret; } -simgrid::instr::Type* simgrid::instr::Type::eventNew(const char* name, simgrid::instr::Type* father) +Type* Type::getRootType() { - if (name == nullptr){ - THROWF (tracing_error, 0, "can't create an event type with a nullptr name"); - } - - Type* ret = new Type (name, name, nullptr, TYPE_EVENT, father); - XBT_DEBUG("EventType %s(%s), child of %s(%s)", ret->name_, ret->id_, father->name_, father->id_); - LogDefineEventType(ret); - return ret; + return rootType; } -simgrid::instr::Type* simgrid::instr::Type::variableNew(const char* name, const char* color, - simgrid::instr::Type* father) +Type* Type::getOrCreateContainerType(std::string name) { - if (name == nullptr){ - THROWF (tracing_error, 0, "can't create a variable type with a nullptr name"); - } - - Type* ret = nullptr; + auto it = children_.find(name); + if (it == children_.end()) { + Type* ret = new simgrid::instr::Type(name, name, "", TYPE_CONTAINER, this); + XBT_DEBUG("ContainerType %s(%s), child of %s(%s)", ret->getCname(), ret->getId(), getCname(), getId()); + ret->logContainerTypeDefinition(); + return ret; + } else + return it->second; +} - if (not color) { - char white[INSTR_DEFAULT_STR_SIZE] = "1 1 1"; - ret = new Type (name, name, white, TYPE_VARIABLE, father); - }else{ - ret = new Type (name, name, color, TYPE_VARIABLE, father); +Type* Type::getOrCreateEventType(std::string name) +{ + auto it = children_.find(name); + if (it == children_.end()) { + Type* ret = new Type(name, name, "", TYPE_EVENT, this); + XBT_DEBUG("EventType %s(%s), child of %s(%s)", ret->getCname(), ret->getId(), getCname(), getId()); + ret->logDefineEventType(); + return ret; + } else { + return it->second; } - XBT_DEBUG("VariableType %s(%s), child of %s(%s)", ret->name_, ret->id_, father->name_, father->id_); - LogVariableTypeDefinition (ret); - return ret; } -simgrid::instr::Type* simgrid::instr::Type::linkNew(const char* name, Type* father, Type* source, Type* dest) +Type* Type::getOrCreateVariableType(std::string name, std::string color) { - if (name == nullptr){ - THROWF (tracing_error, 0, "can't create a link type with a nullptr name"); - } + auto it = children_.find(name); + if (it == children_.end()) { + Type* ret = new Type(name, name, color.empty() ? "1 1 1" : color, TYPE_VARIABLE, this); - char key[INSTR_DEFAULT_STR_SIZE]; - snprintf(key, INSTR_DEFAULT_STR_SIZE, "%s-%s-%s", name, source->id_, dest->id_); - Type* ret = new Type(name, key, nullptr, TYPE_LINK, father); - XBT_DEBUG("LinkType %s(%s), child of %s(%s) %s(%s)->%s(%s)", ret->name_, ret->id_, father->name_, father->id_, - source->name_, source->id_, dest->name_, dest->id_); - LogLinkTypeDefinition(ret, source, dest); - return ret; + XBT_DEBUG("VariableType %s(%s), child of %s(%s)", ret->getCname(), ret->getId(), getCname(), getId()); + ret->logVariableTypeDefinition(); + + return ret; + } else + return it->second; } -simgrid::instr::Type* simgrid::instr::Type::stateNew(const char* name, Type* father) +Type* Type::getOrCreateLinkType(std::string name, Type* source, Type* dest) { - if (name == nullptr){ - THROWF (tracing_error, 0, "can't create a state type with a nullptr name"); - } + std::string alias = name + "-" + source->id_ + "-" + dest->id_; + auto it = children_.find(alias); + if (it == children_.end()) { + Type* ret = new Type(name, alias, "", TYPE_LINK, this); + XBT_DEBUG("LinkType %s(%s), child of %s(%s) %s(%s)->%s(%s)", ret->getCname(), ret->getId(), getCname(), getId(), + source->getCname(), source->getId(), dest->getCname(), dest->getId()); + ret->logLinkTypeDefinition(source, dest); + return ret; + } else + return it->second; +} - Type* ret = new Type(name, name, nullptr, TYPE_STATE, father); - XBT_DEBUG("StateType %s(%s), child of %s(%s)", ret->name_, ret->id_, father->name_, father->id_); - LogStateTypeDefinition(ret); - return ret; +Type* Type::getOrCreateStateType(std::string name) +{ + auto it = children_.find(name); + if (it == children_.end()) { + Type* ret = new Type(name, name, "", TYPE_STATE, this); + XBT_DEBUG("StateType %s(%s), child of %s(%s)", ret->getCname(), ret->getId(), getCname(), getId()); + ret->logStateTypeDefinition(); + return ret; + } else + return it->second; +} +} } diff --git a/src/instr/instr_paje_values.cpp b/src/instr/instr_paje_values.cpp index 5a4d2699c1..380f1c6a76 100644 --- a/src/instr/instr_paje_values.cpp +++ b/src/instr/instr_paje_values.cpp @@ -5,57 +5,54 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include - #include "src/instr/instr_private.hpp" XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_paje_values, instr, "Paje tracing event system (values)"); -simgrid::instr::Value::Value(const char* name, const char* color, simgrid::instr::Type* father) : father_(father) +namespace simgrid { +namespace instr { + +Value::Value(std::string name, std::string color, Type* father) : name_(name), color_(color), father_(father) { - if (name == nullptr || father == nullptr){ - THROWF (tracing_error, 0, "can't create a value with a nullptr name (or a nullptr father)"); + if (name.empty() || father == nullptr) { + THROWF(tracing_error, 0, "can't create a value with no name (or a nullptr father)"); } - this->name_ = xbt_strdup(name); - this->color_ = xbt_strdup(color); + this->id_ = std::to_string(instr_new_paje_id()); - this->id_ = bprintf("%lld", instr_new_paje_id()); - - xbt_dict_set(father->values_, name, this, nullptr); - XBT_DEBUG("new value %s, child of %s", name_, father_->name_); - LogEntityValue(this); + father->values_.insert({name, this}); + XBT_DEBUG("new value %s, child of %s", name_.c_str(), father_->getCname()); + print(); }; -simgrid::instr::Value::~Value() +Value::~Value() { - xbt_free(name_); - xbt_free(color_); - xbt_free(id_); + XBT_DEBUG("free value %s, child of %s", getCname(), father_->getCname()); } -simgrid::instr::Value* simgrid::instr::Value::get_or_new(const char* name, const char* color, - simgrid::instr::Type* father) +Value* Value::byNameOrCreate(std::string name, std::string color, Type* father) { - Value* ret = 0; + Value* ret = nullptr; try { - ret = Value::get(name, father); - } - catch(xbt_ex& e) { + ret = Value::byName(name, father); + } catch (xbt_ex& e) { ret = new Value(name, color, father); } return ret; } -simgrid::instr::Value* simgrid::instr::Value::get(const char* name, Type* father) +Value* Value::byName(std::string name, Type* father) { - if (name == nullptr || father == nullptr){ - THROWF (tracing_error, 0, "can't get a value with a nullptr name (or a nullptr father)"); + if (name.empty() || father == nullptr) { + THROWF(tracing_error, 0, "can't get a value with no name (or a nullptr father)"); } - if (father->kind_ == TYPE_VARIABLE) - THROWF(tracing_error, 0, "variables can't have different values (%s)", father->name_); - Value* ret = (Value*)xbt_dict_get_or_null(father->values_, name); - if (ret == nullptr) { - THROWF(tracing_error, 2, "value with name (%s) not found in father type (%s)", name, father->name_); + if (father->getKind() == TYPE_VARIABLE) + THROWF(tracing_error, 0, "variables can't have different values (%s)", father->getCname()); + auto ret = father->values_.find(name); + if (ret == father->values_.end()) { + THROWF(tracing_error, 2, "value with name (%s) not found in father type (%s)", name.c_str(), father->getCname()); } - return ret; + return ret->second; +} +} } diff --git a/src/instr/instr_private.hpp b/src/instr/instr_private.hpp index 0e3d8ec186..bb29ad296e 100644 --- a/src/instr/instr_private.hpp +++ b/src/instr/instr_private.hpp @@ -12,24 +12,28 @@ #include "simgrid/instr.h" #include "simgrid_config.h" #include "src/internal_config.h" +#include "xbt/graph.h" +#include /** std::setprecision **/ #include #include +#include #include - +#include +#ifdef WIN32 +#include // _mkdir /* Need to define function drand48 for Windows */ /* FIXME: use _drand48() defined in src/surf/random_mgr.c instead */ -#ifdef _WIN32 #define drand48() (rand() / (RAND_MAX + 1.0)) #endif #define INSTR_DEFAULT_STR_SIZE 500 -#include "xbt/dict.h" -#include "xbt/graph.h" - namespace simgrid { namespace instr { -typedef enum { + +class Value; + +enum e_event_type { PAJE_DefineContainerType, PAJE_DefineVariableType, PAJE_DefineStateType, @@ -48,50 +52,70 @@ typedef enum { PAJE_StartLink, PAJE_EndLink, PAJE_NewEvent -} e_event_type; - -typedef enum { TYPE_VARIABLE, TYPE_LINK, TYPE_CONTAINER, TYPE_STATE, TYPE_EVENT } e_entity_types; +}; //-------------------------------------------------- +enum e_entity_types { TYPE_VARIABLE, TYPE_LINK, TYPE_CONTAINER, TYPE_STATE, TYPE_EVENT }; class Type { -public: - char* id_; - char* name_; - char* color_; - + std::string id_; + std::string name_; + std::string color_; e_entity_types kind_; Type* father_; - xbt_dict_t children_; - xbt_dict_t values_; // valid for all types except variable and container - Type(const char* typeNameBuff, const char* key, const char* color, e_entity_types kind, Type* father); + +public: + std::map children_; + std::map values_; // valid for all types except variable and container + + Type(std::string name, std::string alias, std::string color, e_entity_types kind, Type* father); ~Type(); - Type* getChild(const char* name); - Type* getChildOrNull(const char* name); - - static Type* containerNew(const char* name, Type* father); - static Type* eventNew(const char* name, Type* father); - static Type* variableNew(const char* name, const char* color, Type* father); - static Type* linkNew(const char* name, Type* father, Type* source, Type* dest); - static Type* stateNew(const char* name, Type* father); + + std::string getName() { return name_; } + const char* getCname() { return name_.c_str(); } + const char* getId() { return id_.c_str(); } + e_entity_types getKind() { return kind_; } + bool isColored() { return not color_.empty(); } + + Type* byName(std::string name); + + Type* getOrCreateContainerType(std::string name); + Type* getOrCreateEventType(std::string name); + Type* getOrCreateLinkType(std::string name, Type* source, Type* dest); + Type* getOrCreateStateType(std::string name); + Type* getOrCreateVariableType(std::string name, std::string color); + + void logContainerTypeDefinition(); + void logVariableTypeDefinition(); + void logStateTypeDefinition(); + void logLinkTypeDefinition(simgrid::instr::Type* source, simgrid::instr::Type* dest); + void logDefineEventType(); + + static Type* createRootType(); + static Type* getRootType(); }; //-------------------------------------------------- class Value { -public: - char* id_; - char* name_; - char* color_; - + std::string name_; + std::string id_; + std::string color_; Type* father_; - Value(const char* name, const char* color, Type* father); + + explicit Value(std::string name, std::string color, Type* father); + +public: ~Value(); - static Value* get_or_new(const char* name, const char* color, Type* father); - static Value* get(const char* name, Type* father); + static Value* byNameOrCreate(std::string name, std::string color, Type* father); + static Value* byName(std::string name, Type* father); + const char* getCname() { return name_.c_str(); } + const char* getId() { return id_.c_str(); } + bool isColored() { return not color_.empty(); } + void print(); }; //-------------------------------------------------- -typedef enum { +enum e_container_types { INSTR_HOST, INSTR_LINK, INSTR_ROUTER, @@ -100,39 +124,47 @@ typedef enum { INSTR_MSG_VM, INSTR_MSG_PROCESS, INSTR_MSG_TASK -} e_container_types; - -//-------------------------------------------------- +}; class Container { + e_container_types kind_; /* This container is of what kind */ + int level_ = 0; /* Level in the hierarchy, root level is 0 */ + sg_netpoint_t netpoint_ = nullptr; + public: Container(std::string name, simgrid::instr::e_container_types kind, Container* father); virtual ~Container(); - sg_netpoint_t netpoint_; std::string name_; /* Unique name of this container */ std::string id_; /* Unique id of this container */ Type* type_; /* Type of this container */ - int level_ = 0; /* Level in the hierarchy, root level is 0 */ - e_container_types kind_; /* This container is of what kind */ Container* father_; std::map children_; + static Container* byNameOrNull(std::string name); + static Container* byName(std::string name); + void removeFromParent(); + void logCreation(); + void logDestruction(); }; //-------------------------------------------------- class PajeEvent { +protected: + Container* container; + Type* type; + public: double timestamp_; e_event_type eventType_; + PajeEvent(Container* container, Type* type, double timestamp, e_event_type eventType) + : container(container), type(type), timestamp_(timestamp), eventType_(eventType){}; virtual void print() = 0; virtual ~PajeEvent(); + void insertIntoBuffer(); }; //-------------------------------------------------- class SetVariableEvent : public PajeEvent { -private: - Container* container; - Type* type; double value; public: @@ -141,9 +173,6 @@ public: }; class AddVariableEvent : public PajeEvent { -private: - Container* container; - Type* type; double value; public: @@ -153,9 +182,6 @@ public: //-------------------------------------------------- class SubVariableEvent : public PajeEvent { -private: - Container* container; - Type* type; double value; public: @@ -165,9 +191,6 @@ public: //-------------------------------------------------- class SetStateEvent : public PajeEvent { -private: - Container* container; - Type* type; Value* value; const char* filename; int linenumber; @@ -178,11 +201,7 @@ public: }; class PushStateEvent : public PajeEvent { -public: - Container* container; - Type* type; Value* value; - int size; const char* filename; int linenumber; void* extra_; @@ -194,42 +213,32 @@ public: }; class PopStateEvent : public PajeEvent { - Container* container; - Type* type; - public: PopStateEvent(double timestamp, Container* container, Type* type); void print() override; }; class ResetStateEvent : public PajeEvent { - Container* container; - Type* type; - public: ResetStateEvent(double timestamp, Container* container, Type* type); void print() override; }; class StartLinkEvent : public PajeEvent { - Container* container_; - Type* type_; Container* sourceContainer_; std::string value_; std::string key_; int size_; public: - StartLinkEvent(double timestamp, Container* container, Type* type, Container* sourceContainer, const char* value, - const char* key); - StartLinkEvent(double timestamp, Container* container, Type* type, Container* sourceContainer, const char* value, - const char* key, int size); + StartLinkEvent(double timestamp, Container* container, Type* type, Container* sourceContainer, std::string value, + std::string key); + StartLinkEvent(double timestamp, Container* container, Type* type, Container* sourceContainer, std::string value, + std::string key, int size); void print() override; }; class EndLinkEvent : public PajeEvent { - Container* container; - Type* type; Container* destContainer; std::string value; std::string key; @@ -242,9 +251,6 @@ public: }; class NewEvent : public PajeEvent { -public: - Container* container; - Type* type; Value* val; public: @@ -265,12 +271,11 @@ extern XBT_PRIVATE std::set user_link_variables; extern XBT_PRIVATE double TRACE_last_timestamp_to_dump; /* instr_paje_header.c */ -XBT_PRIVATE void TRACE_header(int basic, int size); +XBT_PRIVATE void TRACE_header(bool basic, int size); /* from paje.c */ XBT_PRIVATE void TRACE_paje_start(); XBT_PRIVATE void TRACE_paje_end(); -XBT_PRIVATE void TRACE_paje_dump_buffer(int force); /* from instr_config.c */ XBT_PRIVATE bool TRACE_needs_platform(); @@ -318,27 +323,22 @@ XBT_PUBLIC(void) TRACE_surf_resource_utilization_alloc(); extern XBT_PRIVATE std::set trivaNodeTypes; extern XBT_PRIVATE std::set trivaEdgeTypes; XBT_PRIVATE long long int instr_new_paje_id(); -XBT_PUBLIC(container_t) PJ_container_get(const char* name); -XBT_PUBLIC(simgrid::instr::Container*) PJ_container_get_or_null(const char* name); XBT_PUBLIC(container_t) PJ_container_get_root (); XBT_PUBLIC(void) PJ_container_set_root (container_t root); -XBT_PUBLIC(void) PJ_container_remove_from_parent (container_t container); - -/* instr_paje_types.c */ -XBT_PUBLIC(simgrid::instr::Type*) PJ_type_get_root(); +void instr_new_variable_type(std::string new_typename, const char* color); +void instr_new_user_variable_type(std::string father_type, std::string new_typename, const char* color); +void instr_new_user_state_type(std::string father_type, std::string new_typename); +void instr_new_value_for_user_state_type(std::string new_typename, const char* value, const char* color); /* instr_config.c */ XBT_PRIVATE void TRACE_TI_start(); XBT_PRIVATE void TRACE_TI_end(); -XBT_PRIVATE void TRACE_paje_dump_buffer(int force); -XBT_PRIVATE void dump_comment_file(const char* filename); -XBT_PRIVATE void dump_comment(const char* comment); - -struct s_instr_extra_data; -typedef struct s_instr_extra_data* instr_extra_data; +XBT_PRIVATE void TRACE_paje_dump_buffer(bool force); +XBT_PRIVATE void dump_comment_file(std::string filename); +XBT_PRIVATE void dump_comment(std::string comment); -typedef enum { +enum e_caller_type { TRACING_INIT, TRACING_FINALIZE, TRACING_COMM_SIZE, @@ -372,9 +372,9 @@ typedef enum { TRACING_SLEEPING, TRACING_SCAN, TRACING_EXSCAN -} e_caller_type; +}; -typedef struct s_instr_extra_data { +struct s_instr_extra_data_t { e_caller_type type; int send_size; int recv_size; @@ -388,7 +388,8 @@ typedef struct s_instr_extra_data { int* sendcounts; int* recvcounts; int num_processes; -} s_instr_extra_data_t; +}; +typedef s_instr_extra_data_t* instr_extra_data; /* Format of TRACING output. * - paje is the regular format, that we all know @@ -396,17 +397,8 @@ typedef struct s_instr_extra_data { * trace can easily be replayed with smpi_replay afterward. This trick should be removed and replaced by some code * using the signal that we will create to cleanup the TRACING */ -typedef enum { instr_fmt_paje, instr_fmt_TI } instr_fmt_type_t; +enum instr_fmt_type_t { instr_fmt_paje, instr_fmt_TI }; extern instr_fmt_type_t instr_fmt_type; } -void LogContainerTypeDefinition(simgrid::instr::Type* type); -void LogVariableTypeDefinition(simgrid::instr::Type* type); -void LogStateTypeDefinition(simgrid::instr::Type* type); -void LogLinkTypeDefinition(simgrid::instr::Type* type, simgrid::instr::Type* source, simgrid::instr::Type* dest); -void LogEntityValue(simgrid::instr::Value* val); -void LogContainerCreation(container_t container); -void LogContainerDestruction(container_t container); -void LogDefineEventType(simgrid::instr::Type* type); - #endif diff --git a/src/instr/instr_resource_utilization.cpp b/src/instr/instr_resource_utilization.cpp index ead0ea4060..86d76d885e 100644 --- a/src/instr/instr_resource_utilization.cpp +++ b/src/instr/instr_resource_utilization.cpp @@ -27,8 +27,8 @@ static void __TRACE_surf_check_variable_set_to_zero(double now, const char* vari // check if key exists: if it doesn't, set the variable to zero and mark this in the dict if (platform_variables.find(key) == platform_variables.end()) { - container_t container = PJ_container_get(resource.c_str()); - simgrid::instr::Type* type = container->type_->getChild(variable); + container_t container = simgrid::instr::Container::byName(resource); + simgrid::instr::Type* type = container->type_->byName(variable); new simgrid::instr::SetVariableEvent(now, container, type, 0); platform_variables[key] = std::string(""); } @@ -36,7 +36,7 @@ static void __TRACE_surf_check_variable_set_to_zero(double now, const char* vari static void instr_event(double now, double delta, simgrid::instr::Type* variable, container_t resource, double value) { - __TRACE_surf_check_variable_set_to_zero(now, variable->name_, resource->name_); + __TRACE_surf_check_variable_set_to_zero(now, variable->getCname(), resource->name_); new simgrid::instr::AddVariableEvent(now, resource, variable, value); new simgrid::instr::SubVariableEvent(now + delta, resource, variable, value); } @@ -45,7 +45,7 @@ static void instr_event(double now, double delta, simgrid::instr::Type* variable void TRACE_surf_link_set_utilization(const char *resource, const char *category, double value, double now, double delta) { //only trace link utilization if link is known by tracing mechanism - if (not PJ_container_get_or_null(resource)) + if (not simgrid::instr::Container::byNameOrNull(resource)) return; if (not value) return; @@ -53,8 +53,8 @@ void TRACE_surf_link_set_utilization(const char *resource, const char *category, //trace uncategorized link utilization if (TRACE_uncategorized()){ XBT_DEBUG("UNCAT LINK [%f - %f] %s bandwidth_used %f", now, now+delta, resource, value); - container_t container = PJ_container_get (resource); - simgrid::instr::Type* type = container->type_->getChild("bandwidth_used"); + container_t container = simgrid::instr::Container::byName(resource); + simgrid::instr::Type* type = container->type_->byName("bandwidth_used"); instr_event (now, delta, type, container, value); } @@ -66,8 +66,8 @@ void TRACE_surf_link_set_utilization(const char *resource, const char *category, char category_type[INSTR_DEFAULT_STR_SIZE]; snprintf (category_type, INSTR_DEFAULT_STR_SIZE, "b%s", category); XBT_DEBUG("CAT LINK [%f - %f] %s %s %f", now, now+delta, resource, category_type, value); - container_t container = PJ_container_get (resource); - simgrid::instr::Type* type = container->type_->getChild(category_type); + container_t container = simgrid::instr::Container::byName(resource); + simgrid::instr::Type* type = container->type_->byName(category_type); instr_event (now, delta, type, container, value); } } @@ -76,14 +76,14 @@ void TRACE_surf_link_set_utilization(const char *resource, const char *category, void TRACE_surf_host_set_utilization(const char *resource, const char *category, double value, double now, double delta) { //only trace host utilization if host is known by tracing mechanism - container_t container = PJ_container_get_or_null(resource); + container_t container = simgrid::instr::Container::byNameOrNull(resource); if (not container || not value) return; //trace uncategorized host utilization if (TRACE_uncategorized()){ XBT_DEBUG("UNCAT HOST [%f - %f] %s power_used %f", now, now+delta, resource, value); - simgrid::instr::Type* type = container->type_->getChild("power_used"); + simgrid::instr::Type* type = container->type_->byName("power_used"); instr_event (now, delta, type, container, value); } @@ -95,7 +95,7 @@ void TRACE_surf_host_set_utilization(const char *resource, const char *category, char category_type[INSTR_DEFAULT_STR_SIZE]; snprintf (category_type, INSTR_DEFAULT_STR_SIZE, "p%s", category); XBT_DEBUG("CAT HOST [%f - %f] %s %s %f", now, now+delta, resource, category_type, value); - simgrid::instr::Type* type = container->type_->getChild(category_type); + simgrid::instr::Type* type = container->type_->byName(category_type); instr_event (now, delta, type, container, value); } } diff --git a/src/instr/instr_smpi.hpp b/src/instr/instr_smpi.hpp index 9b01f6f3ae..8b08e923cd 100644 --- a/src/instr/instr_smpi.hpp +++ b/src/instr/instr_smpi.hpp @@ -36,7 +36,8 @@ XBT_PRIVATE char* smpi_container(int rank, char* container, int n); XBT_PRIVATE const char* encode_datatype(MPI_Datatype datatype, int* known); -typedef struct smpi_trace_call_location { +class smpi_trace_call_location_t { +public: const char* filename; int linenumber; @@ -48,8 +49,7 @@ typedef struct smpi_trace_call_location { return std::string(previous_filename) + ':' + std::to_string(previous_linenumber) + ':' + filename + ':' + std::to_string(linenumber); } - -} smpi_trace_call_location_t; +}; } #endif diff --git a/src/instr/jedule/jedule_platform.cpp b/src/instr/jedule/jedule_platform.cpp index 877905d18b..133b1f6684 100644 --- a/src/instr/jedule/jedule_platform.cpp +++ b/src/instr/jedule/jedule_platform.cpp @@ -10,6 +10,11 @@ #if SIMGRID_HAVE_JEDULE +namespace { +std::unordered_map host2_simgrid_parent_container; +std::unordered_map container_name2container; +} + namespace simgrid { namespace jedule { Subset::Subset(int start_idx, int end_idx, Container* parent) diff --git a/src/kernel/activity/CommImpl.hpp b/src/kernel/activity/CommImpl.hpp index fb60e05189..2eecc69263 100644 --- a/src/kernel/activity/CommImpl.hpp +++ b/src/kernel/activity/CommImpl.hpp @@ -9,7 +9,7 @@ #include "src/kernel/activity/ActivityImpl.hpp" #include "surf/surf.h" -typedef enum { SIMIX_COMM_SEND, SIMIX_COMM_RECEIVE, SIMIX_COMM_READY, SIMIX_COMM_DONE } e_smx_comm_type_t; +enum e_smx_comm_type_t { SIMIX_COMM_SEND, SIMIX_COMM_RECEIVE, SIMIX_COMM_READY, SIMIX_COMM_DONE }; namespace simgrid { namespace kernel { diff --git a/src/kernel/activity/MailboxImpl.cpp b/src/kernel/activity/MailboxImpl.cpp index 13e9870ee1..bed10c21be 100644 --- a/src/kernel/activity/MailboxImpl.cpp +++ b/src/kernel/activity/MailboxImpl.cpp @@ -73,14 +73,14 @@ void MailboxImpl::remove(smx_activity_t activity) boost::static_pointer_cast(activity); xbt_assert(comm->mbox == this, "Comm %p is in mailbox %s, not mailbox %s", comm.get(), - (comm->mbox ? comm->mbox->name_ : "(null)"), this->name_); + (comm->mbox ? comm->mbox->getCname() : "(null)"), this->getCname()); comm->mbox = nullptr; for (auto it = this->comm_queue.begin(); it != this->comm_queue.end(); it++) if (*it == comm) { this->comm_queue.erase(it); return; } - xbt_die("Comm %p not found in mailbox %s", comm.get(), this->name_); + xbt_die("Comm %p not found in mailbox %s", comm.get(), this->getCname()); } } } diff --git a/src/kernel/activity/MailboxImpl.hpp b/src/kernel/activity/MailboxImpl.hpp index 8c4541d611..3ebc417cdf 100644 --- a/src/kernel/activity/MailboxImpl.hpp +++ b/src/kernel/activity/MailboxImpl.hpp @@ -7,6 +7,7 @@ #define SIMIX_MAILBOXIMPL_H #include +#include #include "simgrid/s4u/Mailbox.hpp" #include "src/kernel/activity/CommImpl.hpp" @@ -21,20 +22,20 @@ namespace activity { class MailboxImpl { explicit MailboxImpl(const char* name) - : piface_(this), name_(xbt_strdup(name)), comm_queue(MAX_MAILBOX_SIZE), done_comm_queue(MAX_MAILBOX_SIZE) + : piface_(this), name_(name), comm_queue(MAX_MAILBOX_SIZE), done_comm_queue(MAX_MAILBOX_SIZE) { } public: - ~MailboxImpl() { xbt_free(name_); } - + const simgrid::xbt::string& getName() const { return name_; } + const char* getCname() const { return name_.c_str(); } static MailboxImpl* byNameOrNull(const char* name); static MailboxImpl* byNameOrCreate(const char* name); void setReceiver(s4u::ActorPtr actor); void push(activity::CommImplPtr comm); void remove(smx_activity_t activity); simgrid::s4u::Mailbox piface_; // Our interface - char* name_; + simgrid::xbt::string name_; simgrid::simix::ActorImplPtr permanent_receiver; // process which the mailbox is attached to boost::circular_buffer_space_optimized comm_queue; diff --git a/src/kernel/context/ContextRaw.cpp b/src/kernel/context/ContextRaw.cpp index 1df1de7fdb..1cd6340932 100644 --- a/src/kernel/context/ContextRaw.cpp +++ b/src/kernel/context/ContextRaw.cpp @@ -267,7 +267,7 @@ RawContextFactory::RawContextFactory() xbt_os_thread_key_create(&raw_worker_id_key); // TODO, lazily init raw_parmap = nullptr; - raw_workers_context = xbt_new(RawContext*, nthreads); + raw_workers_context = new RawContext*[nthreads]; raw_maestro_context = nullptr; #endif // TODO: choose dynamically when SIMIX_context_get_parallel_threshold() > 1 @@ -278,7 +278,7 @@ RawContextFactory::~RawContextFactory() { #if HAVE_THREAD_CONTEXTS delete raw_parmap; - xbt_free(raw_workers_context); + delete[] raw_workers_context; #endif } @@ -408,7 +408,7 @@ void RawContext::suspend_parallel() XBT_DEBUG("No more processes to run"); uintptr_t worker_id = (uintptr_t) xbt_os_thread_get_specific(raw_worker_id_key); - next_context = static_cast(raw_workers_context[worker_id]); + next_context = raw_workers_context[worker_id]; XBT_DEBUG("Restoring worker stack %zu (working threads = %zu)", worker_id, raw_threads_working); } diff --git a/src/kernel/context/ContextUnix.cpp b/src/kernel/context/ContextUnix.cpp index ae143b8a7e..26d629d654 100644 --- a/src/kernel/context/ContextUnix.cpp +++ b/src/kernel/context/ContextUnix.cpp @@ -130,7 +130,7 @@ UContextFactory::UContextFactory() : ContextFactory("UContextFactory") #if HAVE_THREAD_CONTEXTS /* To use parallel ucontexts a thread pool is needed */ int nthreads = SIMIX_context_get_nthreads(); sysv_parmap = nullptr; - sysv_workers_context = xbt_new(ParallelUContext*, nthreads); + sysv_workers_context = new ParallelUContext*[nthreads]; sysv_maestro_context = nullptr; xbt_os_thread_key_create(&sysv_worker_id_key); #else @@ -145,7 +145,7 @@ UContextFactory::~UContextFactory() { #if HAVE_THREAD_CONTEXTS delete sysv_parmap; - xbt_free(sysv_workers_context); + delete[] sysv_workers_context; #endif } diff --git a/src/kernel/routing/ClusterZone.cpp b/src/kernel/routing/ClusterZone.cpp index 2bd66e5359..08da44baaf 100644 --- a/src/kernel/routing/ClusterZone.cpp +++ b/src/kernel/routing/ClusterZone.cpp @@ -22,7 +22,7 @@ ClusterZone::ClusterZone(NetZone* father, std::string name) : NetZoneImpl(father void ClusterZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg_t route, double* lat) { - XBT_VERB("cluster getLocalRoute from '%s'[%u] to '%s'[%u]", src->cname(), src->id(), dst->cname(), dst->id()); + XBT_VERB("cluster getLocalRoute from '%s'[%u] to '%s'[%u]", src->getCname(), src->id(), dst->getCname(), dst->id()); xbt_assert(not privateLinks_.empty(), "Cluster routing: no links attached to the source node - did you use host_link tag?"); @@ -71,28 +71,29 @@ void ClusterZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cba } } -void ClusterZone::getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) +void ClusterZone::getGraph(xbt_graph_t graph, std::map* nodes, + std::map* edges) { xbt_assert(router_, "Malformed cluster. This may be because your platform file is a hypergraph while it must be a graph."); /* create the router */ - xbt_node_t routerNode = new_xbt_graph_node(graph, router_->cname(), nodes); + xbt_node_t routerNode = new_xbt_graph_node(graph, router_->getCname(), nodes); xbt_node_t backboneNode = nullptr; if (backbone_) { - backboneNode = new_xbt_graph_node(graph, backbone_->cname(), nodes); + backboneNode = new_xbt_graph_node(graph, backbone_->getCname(), nodes); new_xbt_graph_edge(graph, routerNode, backboneNode, edges); } for (auto const& src : getVertices()) { if (not src->isRouter()) { - xbt_node_t previous = new_xbt_graph_node(graph, src->cname(), nodes); + xbt_node_t previous = new_xbt_graph_node(graph, src->getCname(), nodes); std::pair info = privateLinks_.at(src->id()); if (info.first) { // link up - xbt_node_t current = new_xbt_graph_node(graph, info.first->cname(), nodes); + xbt_node_t current = new_xbt_graph_node(graph, info.first->getCname(), nodes); new_xbt_graph_edge(graph, previous, current, edges); if (backbone_) { @@ -103,7 +104,7 @@ void ClusterZone::getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges } if (info.second) { // link down - xbt_node_t current = new_xbt_graph_node(graph, info.second->cname(), nodes); + xbt_node_t current = new_xbt_graph_node(graph, info.second->getCname(), nodes); new_xbt_graph_edge(graph, previous, current, edges); if (backbone_) { diff --git a/src/kernel/routing/ClusterZone.hpp b/src/kernel/routing/ClusterZone.hpp index d5523ba1ba..9fe5cba702 100644 --- a/src/kernel/routing/ClusterZone.hpp +++ b/src/kernel/routing/ClusterZone.hpp @@ -70,7 +70,8 @@ public: explicit ClusterZone(NetZone* father, std::string name); void getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg_t into, double* latency) override; - void getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) override; + void getGraph(xbt_graph_t graph, std::map* nodes, + std::map* edges) override; virtual void create_links_for_node(ClusterCreationArgs* cluster, int id, int rank, int position); virtual void parse_specific_arguments(ClusterCreationArgs* cluster) diff --git a/src/kernel/routing/DijkstraZone.cpp b/src/kernel/routing/DijkstraZone.cpp index 2d978c90bf..0c5123d599 100644 --- a/src/kernel/routing/DijkstraZone.cpp +++ b/src/kernel/routing/DijkstraZone.cpp @@ -13,27 +13,18 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_dijkstra, surf, "Routing part of surf /* Free functions */ -static void route_cache_elem_free(void* e) +static void graph_node_data_free(void* n) { - route_cache_element_t elm = (route_cache_element_t)e; - if (elm) { - xbt_free(elm->pred_arr); - xbt_free(elm); - } -} - -static void graph_node_map_elem_free(void* e) -{ - graph_node_map_element_t elm = (graph_node_map_element_t)e; - xbt_free(elm); + graph_node_data_t data = static_cast(n); + delete data; } static void graph_edge_data_free(void* e) // FIXME: useless code duplication { - sg_platf_route_cbarg_t e_route = (sg_platf_route_cbarg_t)e; + sg_platf_route_cbarg_t e_route = static_cast(e); if (e_route) { delete e_route->link_list; - xbt_free(e_route); + delete e_route; } } @@ -50,8 +41,6 @@ void DijkstraZone::seal() /* Create the topology graph */ if (not routeGraph_) routeGraph_ = xbt_graph_new_graph(1, nullptr); - if (not graphNodeMap_) - graphNodeMap_ = xbt_dict_new_homogeneous(&graph_node_map_elem_free); /* Add the loopback if needed */ if (surf_network_model->loopback_ && hierarchy_ == RoutingMode::base) { @@ -68,7 +57,7 @@ void DijkstraZone::seal() } if (not found) { - sg_platf_route_cbarg_t e_route = xbt_new0(s_sg_platf_route_cbarg_t, 1); + sg_platf_route_cbarg_t e_route = new s_sg_platf_route_cbarg_t; e_route->link_list = new std::vector(); e_route->link_list->push_back(surf_network_model->loopback_); xbt_graph_new_edge(routeGraph_, node, node, e_route); @@ -80,28 +69,27 @@ void DijkstraZone::seal() xbt_dynar_t nodes = xbt_graph_get_nodes(routeGraph_); xbt_dynar_foreach (nodes, cursor, node) { - graph_node_data_t data = (graph_node_data_t)xbt_graph_node_get_data(node); + graph_node_data_t data = static_cast(xbt_graph_node_get_data(node)); data->graph_id = cursor; } } xbt_node_t DijkstraZone::routeGraphNewNode(int id, int graph_id) { - graph_node_data_t data = xbt_new0(struct graph_node_data, 1); + graph_node_data_t data = new s_graph_node_data_t; data->id = id; data->graph_id = graph_id; xbt_node_t node = xbt_graph_new_node(routeGraph_, data); - graph_node_map_element_t elm = xbt_new0(struct graph_node_map_element, 1); - elm->node = node; - xbt_dict_set_ext(graphNodeMap_, (char*)(&id), sizeof(int), (xbt_dictelm_t)elm, nullptr); + graphNodeMap_.emplace(id, node); return node; } -graph_node_map_element_t DijkstraZone::nodeMapSearch(int id) +xbt_node_t DijkstraZone::nodeMapSearch(int id) { - return (graph_node_map_element_t)xbt_dict_get_or_null_ext(graphNodeMap_, (char*)(&id), sizeof(int)); + auto ret = graphNodeMap_.find(id); + return ret == graphNodeMap_.end() ? nullptr : ret->second; } /* Parsing */ @@ -112,14 +100,14 @@ void DijkstraZone::newRoute(int src_id, int dst_id, sg_platf_route_cbarg_t e_rou xbt_node_t src = nullptr; xbt_node_t dst = nullptr; - graph_node_map_element_t src_elm = nodeMapSearch(src_id); - graph_node_map_element_t dst_elm = nodeMapSearch(dst_id); + xbt_node_t src_elm = nodeMapSearch(src_id); + xbt_node_t dst_elm = nodeMapSearch(dst_id); if (src_elm) - src = src_elm->node; + src = src_elm; if (dst_elm) - dst = dst_elm->node; + dst = dst_elm; /* add nodes if they don't exist in the graph */ if (src_id == dst_id && src == nullptr && dst == nullptr) { @@ -144,16 +132,14 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb int src_id = src->id(); int dst_id = dst->id(); - int* pred_arr = nullptr; - int size = 0; xbt_dynar_t nodes = xbt_graph_get_nodes(routeGraph_); /* Use the graph_node id mapping set to quickly find the nodes */ - graph_node_map_element_t src_elm = nodeMapSearch(src_id); - graph_node_map_element_t dst_elm = nodeMapSearch(dst_id); + xbt_node_t src_elm = nodeMapSearch(src_id); + xbt_node_t dst_elm = nodeMapSearch(dst_id); - int src_node_id = ((graph_node_data_t)xbt_graph_node_get_data(src_elm->node))->graph_id; - int dst_node_id = ((graph_node_data_t)xbt_graph_node_get_data(dst_elm->node))->graph_id; + int src_node_id = static_cast(xbt_graph_node_get_data(src_elm))->graph_id; + int dst_node_id = static_cast(xbt_graph_node_get_data(dst_elm))->graph_id; /* if the src and dst are the same */ if (src_node_id == dst_node_id) { @@ -163,9 +149,9 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb xbt_edge_t edge = xbt_graph_get_edge(routeGraph_, node_s_v, node_e_v); if (edge == nullptr) - THROWF(arg_error, 0, "No route from '%s' to '%s'", src->name().c_str(), dst->name().c_str()); + THROWF(arg_error, 0, "No route from '%s' to '%s'", src->getCname(), dst->getCname()); - sg_platf_route_cbarg_t e_route = (sg_platf_route_cbarg_t)xbt_graph_edge_get_data(edge); + sg_platf_route_cbarg_t e_route = static_cast(xbt_graph_edge_get_data(edge)); for (auto const& link : *e_route->link_list) { route->link_list->insert(route->link_list->begin(), link); @@ -174,19 +160,14 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb } } - route_cache_element_t elm = nullptr; - if (routeCache_) { /* cache mode */ - elm = (route_cache_element_t)xbt_dict_get_or_null_ext(routeCache_, (char*)(&src_id), sizeof(int)); - } - - if (elm) { /* cached mode and cache hit */ - pred_arr = elm->pred_arr; - } else { /* not cached mode, or cache miss */ + auto elm = routeCache_.emplace(src_id, std::vector()); + std::vector& pred_arr = elm.first->second; + if (elm.second) { /* new element was inserted (not cached mode, or cache miss) */ int nr_nodes = xbt_dynar_length(nodes); - double* cost_arr = xbt_new0(double, nr_nodes); /* link cost from src to other hosts */ - pred_arr = xbt_new0(int, nr_nodes); /* predecessors in path from src */ - xbt_heap_t pqueue = xbt_heap_new(nr_nodes, xbt_free_f); + std::vector cost_arr(nr_nodes); /* link cost from src to other hosts */ + pred_arr.resize(nr_nodes); /* predecessors in path from src */ + xbt_heap_t pqueue = xbt_heap_new(nr_nodes, nullptr); /* initialize */ cost_arr[src_node_id] = 0.0; @@ -199,8 +180,7 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb pred_arr[i] = 0; /* initialize priority queue */ - int* nodeid = xbt_new0(int, 1); - *nodeid = i; + int* nodeid = new int(i); xbt_heap_push(pqueue, nodeid, cost_arr[i]); } @@ -213,25 +193,22 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb xbt_dynar_foreach (xbt_graph_node_get_outedges(v_node), cursor, edge) { xbt_node_t u_node = xbt_graph_edge_get_target(edge); - graph_node_data_t data = (graph_node_data_t)xbt_graph_node_get_data(u_node); + graph_node_data_t data = static_cast(xbt_graph_node_get_data(u_node)); int u_id = data->graph_id; - sg_platf_route_cbarg_t tmp_e_route = (sg_platf_route_cbarg_t)xbt_graph_edge_get_data(edge); + sg_platf_route_cbarg_t tmp_e_route = static_cast(xbt_graph_edge_get_data(edge)); int cost_v_u = tmp_e_route->link_list->size(); /* count of links, old model assume 1 */ if (cost_v_u + cost_arr[*v_id] < cost_arr[u_id]) { pred_arr[u_id] = *v_id; cost_arr[u_id] = cost_v_u + cost_arr[*v_id]; - int* nodeid = xbt_new0(int, 1); - *nodeid = u_id; + int* nodeid = new int(u_id); xbt_heap_push(pqueue, nodeid, cost_arr[u_id]); } } /* free item popped from pqueue */ - xbt_free(v_id); + delete v_id; } - - xbt_free(cost_arr); xbt_heap_free(pqueue); } @@ -246,9 +223,9 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb xbt_edge_t edge = xbt_graph_get_edge(routeGraph_, node_pred_v, node_v); if (edge == nullptr) - THROWF(arg_error, 0, "No route from '%s' to '%s'", src->name().c_str(), dst->name().c_str()); + THROWF(arg_error, 0, "No route from '%s' to '%s'", src->getCname(), dst->getCname()); - sg_platf_route_cbarg_t e_route = (sg_platf_route_cbarg_t)xbt_graph_edge_get_data(edge); + sg_platf_route_cbarg_t e_route = static_cast(xbt_graph_edge_get_data(edge)); NetPoint* prev_gw_src = gw_src; gw_src = e_route->gw_src; @@ -257,8 +234,7 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb if (v == dst_node_id) first_gw = gw_dst; - if (hierarchy_ == RoutingMode::recursive && v != dst_node_id && - strcmp(gw_dst->name().c_str(), prev_gw_src->name().c_str())) { + if (hierarchy_ == RoutingMode::recursive && v != dst_node_id && gw_dst->getName() != prev_gw_src->getName()) { std::vector e_route_as_to_as; NetPoint* gw_dst_net_elm = nullptr; @@ -278,7 +254,6 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb if (lat) *lat += static_cast(link)->latency(); } - size++; } if (hierarchy_ == RoutingMode::recursive) { @@ -286,47 +261,33 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb route->gw_dst = first_gw; } - if (routeCache_ && elm == nullptr) { - /* add to predecessor list of the current src-host to cache */ - elm = xbt_new0(struct route_cache_element, 1); - elm->pred_arr = pred_arr; - elm->size = size; - xbt_dict_set_ext(routeCache_, (char*)(&src_id), sizeof(int), (xbt_dictelm_t)elm, nullptr); - } - - if (not routeCache_) - xbt_free(pred_arr); + if (not cached_) + routeCache_.clear(); } DijkstraZone::~DijkstraZone() { - xbt_graph_free_graph(routeGraph_, &xbt_free_f, &graph_edge_data_free, &xbt_free_f); - xbt_dict_free(&graphNodeMap_); - xbt_dict_free(&routeCache_); + xbt_graph_free_graph(routeGraph_, &graph_node_data_free, &graph_edge_data_free, nullptr); } /* Creation routing model functions */ -DijkstraZone::DijkstraZone(NetZone* father, std::string name, bool cached) : RoutedZone(father, name) +DijkstraZone::DijkstraZone(NetZone* father, std::string name, bool cached) : RoutedZone(father, name), cached_(cached) { - if (cached) - routeCache_ = xbt_dict_new_homogeneous(&route_cache_elem_free); } void DijkstraZone::addRoute(sg_platf_route_cbarg_t route) { NetPoint* src = route->src; NetPoint* dst = route->dst; - const char* srcName = src->name().c_str(); - const char* dstName = dst->name().c_str(); + const char* srcName = src->getCname(); + const char* dstName = dst->getCname(); addRouteCheckParams(route); /* Create the topology graph */ if (not routeGraph_) routeGraph_ = xbt_graph_new_graph(1, nullptr); - if (not graphNodeMap_) - graphNodeMap_ = xbt_dict_new_homogeneous(&graph_node_map_elem_free); /* we don't check whether the route already exist, because the algorithm may find another path through some other * nodes */ @@ -348,11 +309,11 @@ void DijkstraZone::addRoute(sg_platf_route_cbarg_t route) if (edge) THROWF(arg_error, 0, "Route from %s to %s already exists", dstName, srcName); } else { - XBT_DEBUG("Load NetzoneRoute from %s@%s to %s@%s", dstName, route->gw_dst->name().c_str(), srcName, - route->gw_src->name().c_str()); + XBT_DEBUG("Load NetzoneRoute from %s@%s to %s@%s", dstName, route->gw_dst->getCname(), srcName, + route->gw_src->getCname()); if (edge) - THROWF(arg_error, 0, "Route from %s@%s to %s@%s already exists", dstName, route->gw_dst->name().c_str(), srcName, - route->gw_src->name().c_str()); + THROWF(arg_error, 0, "Route from %s@%s to %s@%s already exists", dstName, route->gw_dst->getCname(), srcName, + route->gw_src->getCname()); } if (route->gw_dst && route->gw_src) { diff --git a/src/kernel/routing/DijkstraZone.hpp b/src/kernel/routing/DijkstraZone.hpp index 29e8b90c79..f7fc503c5e 100644 --- a/src/kernel/routing/DijkstraZone.hpp +++ b/src/kernel/routing/DijkstraZone.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2016. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2013-2017. 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. */ @@ -8,23 +8,12 @@ #include "src/kernel/routing/RoutedZone.hpp" -typedef struct graph_node_data { +struct s_graph_node_data_t { int id; int graph_id; /* used for caching internal graph id's */ -} s_graph_node_data_t; +}; typedef s_graph_node_data_t* graph_node_data_t; -typedef struct graph_node_map_element { - xbt_node_t node; -} s_graph_node_map_element_t; -typedef s_graph_node_map_element_t* graph_node_map_element_t; - -typedef struct route_cache_element { - int* pred_arr; - int size; -} s_route_cache_element_t; -typedef s_route_cache_element_t* route_cache_element_t; - namespace simgrid { namespace kernel { namespace routing { @@ -48,7 +37,7 @@ public: ~DijkstraZone() override; xbt_node_t routeGraphNewNode(int id, int graph_id); - graph_node_map_element_t nodeMapSearch(int id); + xbt_node_t nodeMapSearch(int id); void newRoute(int src_id, int dst_id, sg_platf_route_cbarg_t e_route); /* For each vertex (node) already in the graph, * make sure it also has a loopback link; this loopback @@ -65,8 +54,9 @@ public: void addRoute(sg_platf_route_cbarg_t route) override; xbt_graph_t routeGraph_ = nullptr; /* xbt_graph */ - xbt_dict_t graphNodeMap_ = nullptr; /* map */ - xbt_dict_t routeCache_ = nullptr; /* use in cache mode */ + std::map graphNodeMap_; /* map */ + bool cached_; /* cache mode */ + std::map> routeCache_; /* use in cache mode */ }; } } diff --git a/src/kernel/routing/DragonflyZone.cpp b/src/kernel/routing/DragonflyZone.cpp index 38e788f480..fd60b9daf4 100644 --- a/src/kernel/routing/DragonflyZone.cpp +++ b/src/kernel/routing/DragonflyZone.cpp @@ -25,8 +25,8 @@ DragonflyZone::~DragonflyZone() { if (this->routers_ != nullptr) { for (unsigned int i = 0; i < this->numGroups_ * this->numChassisPerGroup_ * this->numBladesPerChassis_; i++) - delete (routers_[i]); - xbt_free(routers_); + delete routers_[i]; + delete[] routers_; } } @@ -134,20 +134,15 @@ DragonflyRouter::DragonflyRouter(int group, int chassis, int blade) : group_(gro DragonflyRouter::~DragonflyRouter() { - if (this->myNodes_ != nullptr) - xbt_free(myNodes_); - if (this->greenLinks_ != nullptr) - xbt_free(greenLinks_); - if (this->blackLinks_ != nullptr) - xbt_free(blackLinks_); - if (this->blueLinks_ != nullptr) - xbt_free(blueLinks_); + delete[] myNodes_; + delete[] greenLinks_; + delete[] blackLinks_; + delete blueLinks_; } void DragonflyZone::generateRouters() { - this->routers_ = static_cast(xbt_malloc0(this->numGroups_ * this->numChassisPerGroup_ * - this->numBladesPerChassis_ * sizeof(DragonflyRouter*))); + this->routers_ = new DragonflyRouter*[this->numGroups_ * this->numChassisPerGroup_ * this->numBladesPerChassis_]; for (unsigned int i = 0; i < this->numGroups_; i++) { for (unsigned int j = 0; j < this->numChassisPerGroup_; j++) { @@ -201,12 +196,9 @@ void DragonflyZone::generateLinks() // Links from routers to their local nodes. for (unsigned int i = 0; i < numRouters; i++) { // allocate structures - this->routers_[i]->myNodes_ = static_cast( - xbt_malloc0(numLinksperLink_ * this->numNodesPerBlade_ * sizeof(surf::LinkImpl*))); - this->routers_[i]->greenLinks_ = - static_cast(xbt_malloc0(this->numBladesPerChassis_ * sizeof(surf::LinkImpl*))); - this->routers_[i]->blackLinks_ = - static_cast(xbt_malloc0(this->numChassisPerGroup_ * sizeof(surf::LinkImpl*))); + this->routers_[i]->myNodes_ = new surf::LinkImpl*[numLinksperLink_ * this->numNodesPerBlade_]; + this->routers_[i]->greenLinks_ = new surf::LinkImpl*[this->numBladesPerChassis_]; + this->routers_[i]->blackLinks_ = new surf::LinkImpl*[this->numChassisPerGroup_]; for (unsigned int j = 0; j < numLinksperLink_ * this->numNodesPerBlade_; j += numLinksperLink_) { std::string id = "local_link_from_router_"+ std::to_string(i) + "_to_node_" + @@ -264,8 +256,8 @@ void DragonflyZone::generateLinks() for (unsigned int j = i + 1; j < this->numGroups_; j++) { unsigned int routernumi = i * numBladesPerChassis_ * numChassisPerGroup_ + j; unsigned int routernumj = j * numBladesPerChassis_ * numChassisPerGroup_ + i; - this->routers_[routernumi]->blueLinks_ = static_cast(xbt_malloc0(sizeof(surf::LinkImpl*))); - this->routers_[routernumj]->blueLinks_ = static_cast(xbt_malloc0(sizeof(surf::LinkImpl*))); + this->routers_[routernumi]->blueLinks_ = new surf::LinkImpl*; + this->routers_[routernumj]->blueLinks_ = new surf::LinkImpl*; std::string id = "blue_link_between_group_"+ std::to_string(i) +"_and_" + std::to_string(j) +"_routers_" + std::to_string(routernumi) + "_and_" + std::to_string(routernumj) + "_" + std::to_string(uniqueId); this->createLink(id, this->numLinksBlue_, &linkup, &linkdown); @@ -285,8 +277,7 @@ void DragonflyZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_c if (dst->isRouter() || src->isRouter()) return; - XBT_VERB("dragonfly getLocalRout from '%s'[%u] to '%s'[%u]", src->name().c_str(), src->id(), dst->name().c_str(), - dst->id()); + XBT_VERB("dragonfly getLocalRoute from '%s'[%u] to '%s'[%u]", src->getCname(), src->id(), dst->getCname(), dst->id()); if ((src->id() == dst->id()) && hasLoopback_) { std::pair info = privateLinks_.at(nodePosition(src->id())); diff --git a/src/kernel/routing/EmptyZone.cpp b/src/kernel/routing/EmptyZone.cpp index 3ef273611c..f4b386a073 100644 --- a/src/kernel/routing/EmptyZone.cpp +++ b/src/kernel/routing/EmptyZone.cpp @@ -21,7 +21,8 @@ EmptyZone::EmptyZone(NetZone* father, std::string name) : NetZoneImpl(father, na EmptyZone::~EmptyZone() = default; -void EmptyZone::getGraph(xbt_graph_t /*graph*/, xbt_dict_t /*nodes*/, xbt_dict_t /*edges*/) +void EmptyZone::getGraph(xbt_graph_t /*graph*/, std::map* /*nodes*/, + std::map* /*edges*/) { XBT_ERROR("No routing no graph"); } diff --git a/src/kernel/routing/EmptyZone.hpp b/src/kernel/routing/EmptyZone.hpp index 888d744e15..6d479b8b65 100644 --- a/src/kernel/routing/EmptyZone.hpp +++ b/src/kernel/routing/EmptyZone.hpp @@ -29,7 +29,8 @@ public: /* There can't be route in an Empty zone */ } - void getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) override; + void getGraph(xbt_graph_t graph, std::map* /*nodes*/, + std::map* /*edges*/) override; }; } } diff --git a/src/kernel/routing/FatTreeZone.cpp b/src/kernel/routing/FatTreeZone.cpp index c6485c8540..4eb5f29a43 100644 --- a/src/kernel/routing/FatTreeZone.cpp +++ b/src/kernel/routing/FatTreeZone.cpp @@ -65,16 +65,16 @@ void FatTreeZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cba /* Let's find the source and the destination in our internal structure */ auto searchedNode = this->computeNodes_.find(src->id()); xbt_assert(searchedNode != this->computeNodes_.end(), "Could not find the source %s [%u] in the fat tree", - src->name().c_str(), src->id()); + src->getCname(), src->id()); FatTreeNode* source = searchedNode->second; searchedNode = this->computeNodes_.find(dst->id()); xbt_assert(searchedNode != this->computeNodes_.end(), "Could not find the destination %s [%u] in the fat tree", - dst->name().c_str(), dst->id()); + dst->getCname(), dst->id()); FatTreeNode* destination = searchedNode->second; - XBT_VERB("Get route and latency from '%s' [%u] to '%s' [%u] in a fat tree", src->name().c_str(), src->id(), - dst->name().c_str(), dst->id()); + XBT_VERB("Get route and latency from '%s' [%u] to '%s' [%u] in a fat tree", src->getCname(), src->id(), + dst->getCname(), dst->id()); /* In case destination is the source, and there is a loopback, let's use it instead of going up to a switch */ if (source->id == destination->id && this->hasLoopback_) { diff --git a/src/kernel/routing/FloydZone.cpp b/src/kernel/routing/FloydZone.cpp index e680281214..b434384bcd 100644 --- a/src/kernel/routing/FloydZone.cpp +++ b/src/kernel/routing/FloydZone.cpp @@ -37,10 +37,10 @@ FloydZone::~FloydZone() for (unsigned int i = 0; i < table_size; i++) for (unsigned int j = 0; j < table_size; j++) routing_route_free(TO_FLOYD_LINK(i, j)); - xbt_free(linkTable_); + delete[] linkTable_; - xbt_free(predecessorTable_); - xbt_free(costTable_); + delete[] predecessorTable_; + delete[] costTable_; } void FloydZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg_t route, double* lat) @@ -55,7 +55,7 @@ void FloydZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg do { int pred = TO_FLOYD_PRED(src->id(), cur); if (pred == -1) - THROWF(arg_error, 0, "No route from '%s' to '%s'", src->name().c_str(), dst->name().c_str()); + THROWF(arg_error, 0, "No route from '%s' to '%s'", src->getCname(), dst->getCname()); route_stack.push_back(TO_FLOYD_LINK(pred, cur)); cur = pred; } while (cur != src->id()); @@ -70,7 +70,7 @@ void FloydZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg sg_platf_route_cbarg_t e_route = route_stack.back(); route_stack.pop_back(); if (hierarchy_ == RoutingMode::recursive && prev_dst_gw != nullptr && - strcmp(prev_dst_gw->name().c_str(), e_route->gw_src->name().c_str())) { + prev_dst_gw->getCname() != e_route->gw_src->getCname()) { getGlobalRoute(prev_dst_gw, e_route->gw_src, route->link_list, lat); } @@ -93,9 +93,9 @@ void FloydZone::addRoute(sg_platf_route_cbarg_t route) if (not linkTable_) { /* Create Cost, Predecessor and Link tables */ - costTable_ = xbt_new0(double, table_size* table_size); /* link cost from host to host */ - predecessorTable_ = xbt_new0(int, table_size* table_size); /* predecessor host numbers */ - linkTable_ = xbt_new0(sg_platf_route_cbarg_t, table_size * table_size); /* actual link between src and dst */ + costTable_ = new double[table_size * table_size]; /* link cost from host to host */ + predecessorTable_ = new int[table_size * table_size]; /* predecessor host numbers */ + linkTable_ = new sg_platf_route_cbarg_t[table_size * table_size]; /* actual link between src and dst */ /* Initialize costs and predecessors */ for (unsigned int i = 0; i < table_size; i++) @@ -110,12 +110,11 @@ void FloydZone::addRoute(sg_platf_route_cbarg_t route) if (route->gw_dst) // netzone route (to adapt the error message, if any) xbt_assert(nullptr == TO_FLOYD_LINK(route->src->id(), route->dst->id()), "The route between %s@%s and %s@%s already exists (Rq: routes are symmetrical by default).", - route->src->name().c_str(), route->gw_src->name().c_str(), route->dst->name().c_str(), - route->gw_dst->name().c_str()); + route->src->getCname(), route->gw_src->getCname(), route->dst->getCname(), route->gw_dst->getCname()); else xbt_assert(nullptr == TO_FLOYD_LINK(route->src->id(), route->dst->id()), "The route between %s and %s already exists (Rq: routes are symmetrical by default).", - route->src->name().c_str(), route->dst->name().c_str()); + route->src->getCname(), route->dst->getCname()); TO_FLOYD_LINK(route->src->id(), route->dst->id()) = newExtendedRoute(hierarchy_, route, 1); TO_FLOYD_PRED(route->src->id(), route->dst->id()) = route->src->id(); @@ -127,12 +126,11 @@ void FloydZone::addRoute(sg_platf_route_cbarg_t route) xbt_assert( nullptr == TO_FLOYD_LINK(route->dst->id(), route->src->id()), "The route between %s@%s and %s@%s already exists. You should not declare the reverse path as symmetrical.", - route->dst->name().c_str(), route->gw_dst->name().c_str(), route->src->name().c_str(), - route->gw_src->name().c_str()); + route->dst->getCname(), route->gw_dst->getCname(), route->src->getCname(), route->gw_src->getCname()); else xbt_assert(nullptr == TO_FLOYD_LINK(route->dst->id(), route->src->id()), "The route between %s and %s already exists. You should not declare the reverse path as symmetrical.", - route->dst->name().c_str(), route->src->name().c_str()); + route->dst->getCname(), route->src->getCname()); if (route->gw_dst && route->gw_src) { NetPoint* gw_tmp = route->gw_src; @@ -141,10 +139,10 @@ void FloydZone::addRoute(sg_platf_route_cbarg_t route) } if (not route->gw_src || not route->gw_dst) - XBT_DEBUG("Load Route from \"%s\" to \"%s\"", route->dst->name().c_str(), route->src->name().c_str()); + XBT_DEBUG("Load Route from \"%s\" to \"%s\"", route->dst->getCname(), route->src->getCname()); else - XBT_DEBUG("Load NetzoneRoute from \"%s(%s)\" to \"%s(%s)\"", route->dst->name().c_str(), route->gw_src->name().c_str(), - route->src->name().c_str(), route->gw_dst->name().c_str()); + XBT_DEBUG("Load NetzoneRoute from \"%s(%s)\" to \"%s(%s)\"", route->dst->getCname(), route->gw_src->getCname(), + route->src->getCname(), route->gw_dst->getCname()); TO_FLOYD_LINK(route->dst->id(), route->src->id()) = newExtendedRoute(hierarchy_, route, 0); TO_FLOYD_PRED(route->dst->id(), route->src->id()) = route->dst->id(); @@ -160,9 +158,9 @@ void FloydZone::seal() if (not linkTable_) { /* Create Cost, Predecessor and Link tables */ - costTable_ = xbt_new0(double, table_size* table_size); /* link cost from host to host */ - predecessorTable_ = xbt_new0(int, table_size* table_size); /* predecessor host numbers */ - linkTable_ = xbt_new0(sg_platf_route_cbarg_t, table_size * table_size); /* actual link between src and dst */ + costTable_ = new double[table_size * table_size]; /* link cost from host to host */ + predecessorTable_ = new int[table_size * table_size]; /* predecessor host numbers */ + linkTable_ = new sg_platf_route_cbarg_t[table_size * table_size]; /* actual link between src and dst */ /* Initialize costs and predecessors */ for (unsigned int i = 0; i < table_size; i++) @@ -178,7 +176,7 @@ void FloydZone::seal() for (unsigned int i = 0; i < table_size; i++) { sg_platf_route_cbarg_t e_route = TO_FLOYD_LINK(i, i); if (not e_route) { - e_route = xbt_new0(s_sg_platf_route_cbarg_t, 1); + e_route = new s_sg_platf_route_cbarg_t; e_route->gw_src = nullptr; e_route->gw_dst = nullptr; e_route->link_list = new std::vector(); diff --git a/src/kernel/routing/FullZone.cpp b/src/kernel/routing/FullZone.cpp index 429f07908b..d6e4660ec5 100644 --- a/src/kernel/routing/FullZone.cpp +++ b/src/kernel/routing/FullZone.cpp @@ -24,14 +24,14 @@ void FullZone::seal() /* Create table if needed */ if (not routingTable_) - routingTable_ = xbt_new0(sg_platf_route_cbarg_t, table_size * table_size); + routingTable_ = new sg_platf_route_cbarg_t[table_size * table_size](); /* Add the loopback if needed */ if (surf_network_model->loopback_ && hierarchy_ == RoutingMode::base) { for (unsigned int i = 0; i < table_size; i++) { sg_platf_route_cbarg_t e_route = TO_ROUTE_FULL(i, i); if (not e_route) { - e_route = xbt_new0(s_sg_platf_route_cbarg_t, 1); + e_route = new s_sg_platf_route_cbarg_t; e_route->gw_src = nullptr; e_route->gw_dst = nullptr; e_route->link_list = new std::vector(); @@ -51,16 +51,16 @@ FullZone::~FullZone() for (unsigned int j = 0; j < table_size; j++) { if (TO_ROUTE_FULL(i, j)) { delete TO_ROUTE_FULL(i, j)->link_list; - xbt_free(TO_ROUTE_FULL(i, j)); + delete TO_ROUTE_FULL(i, j); } } - xbt_free(routingTable_); + delete[] routingTable_; } } void FullZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg_t res, double* lat) { - XBT_DEBUG("full getLocalRoute from %s[%u] to %s[%u]", src->cname(), src->id(), dst->cname(), dst->id()); + XBT_DEBUG("full getLocalRoute from %s[%u] to %s[%u]", src->getCname(), src->id(), dst->getCname(), dst->id()); unsigned int table_size = getTableSize(); sg_platf_route_cbarg_t e_route = TO_ROUTE_FULL(src->id(), dst->id()); @@ -85,17 +85,17 @@ void FullZone::addRoute(sg_platf_route_cbarg_t route) unsigned int table_size = getTableSize(); if (not routingTable_) - routingTable_ = xbt_new0(sg_platf_route_cbarg_t, table_size * table_size); + routingTable_ = new sg_platf_route_cbarg_t[table_size * table_size](); /* Check that the route does not already exist */ if (route->gw_dst) // inter-zone route (to adapt the error message, if any) xbt_assert(nullptr == TO_ROUTE_FULL(src->id(), dst->id()), "The route between %s@%s and %s@%s already exists (Rq: routes are symmetrical by default).", - src->cname(), route->gw_src->cname(), dst->cname(), route->gw_dst->cname()); + src->getCname(), route->gw_src->getCname(), dst->getCname(), route->gw_dst->getCname()); else xbt_assert(nullptr == TO_ROUTE_FULL(src->id(), dst->id()), - "The route between %s and %s already exists (Rq: routes are symmetrical by default).", src->cname(), - dst->cname()); + "The route between %s and %s already exists (Rq: routes are symmetrical by default).", src->getCname(), + dst->getCname()); /* Add the route to the base */ TO_ROUTE_FULL(src->id(), dst->id()) = newExtendedRoute(hierarchy_, route, true); @@ -110,11 +110,11 @@ void FullZone::addRoute(sg_platf_route_cbarg_t route) xbt_assert( nullptr == TO_ROUTE_FULL(dst->id(), src->id()), "The route between %s@%s and %s@%s already exists. You should not declare the reverse path as symmetrical.", - dst->cname(), route->gw_dst->cname(), src->cname(), route->gw_src->cname()); + dst->getCname(), route->gw_dst->getCname(), src->getCname(), route->gw_src->getCname()); else xbt_assert(nullptr == TO_ROUTE_FULL(dst->id(), src->id()), "The route between %s and %s already exists. You should not declare the reverse path as symmetrical.", - dst->cname(), src->cname()); + dst->getCname(), src->getCname()); TO_ROUTE_FULL(dst->id(), src->id()) = newExtendedRoute(hierarchy_, route, false); } diff --git a/src/kernel/routing/NetPoint.hpp b/src/kernel/routing/NetPoint.hpp index fd54a2f75e..0a4827427d 100644 --- a/src/kernel/routing/NetPoint.hpp +++ b/src/kernel/routing/NetPoint.hpp @@ -31,8 +31,8 @@ public: // Our rank in the vertices_ array of the netzone that contains us. unsigned int id() { return id_; } - std::string name() { return name_; } - const char* cname() { return name_.c_str(); } + const std::string& getName() const { return name_; } + const char* getCname() const { return name_.c_str(); } /** @brief the NetZone in which this NetPoint is included */ NetZoneImpl* netzone() { return netzone_; } diff --git a/src/kernel/routing/NetZoneImpl.cpp b/src/kernel/routing/NetZoneImpl.cpp index 994c6e1b76..a9e952e08e 100644 --- a/src/kernel/routing/NetZoneImpl.cpp +++ b/src/kernel/routing/NetZoneImpl.cpp @@ -68,19 +68,21 @@ void NetZoneImpl::addBypassRoute(sg_platf_route_cbarg_t e_route) { /* Argument validity checks */ if (e_route->gw_dst) { - XBT_DEBUG("Load bypassNetzoneRoute from %s@%s to %s@%s", e_route->src->cname(), e_route->gw_src->cname(), - e_route->dst->cname(), e_route->gw_dst->cname()); + XBT_DEBUG("Load bypassNetzoneRoute from %s@%s to %s@%s", e_route->src->getCname(), e_route->gw_src->getCname(), + e_route->dst->getCname(), e_route->gw_dst->getCname()); xbt_assert(not e_route->link_list->empty(), "Bypass route between %s@%s and %s@%s cannot be empty.", - e_route->src->cname(), e_route->gw_src->cname(), e_route->dst->cname(), e_route->gw_dst->cname()); + e_route->src->getCname(), e_route->gw_src->getCname(), e_route->dst->getCname(), + e_route->gw_dst->getCname()); xbt_assert(bypassRoutes_.find({e_route->src, e_route->dst}) == bypassRoutes_.end(), - "The bypass route between %s@%s and %s@%s already exists.", e_route->src->cname(), - e_route->gw_src->cname(), e_route->dst->cname(), e_route->gw_dst->cname()); + "The bypass route between %s@%s and %s@%s already exists.", e_route->src->getCname(), + e_route->gw_src->getCname(), e_route->dst->getCname(), e_route->gw_dst->getCname()); } else { - XBT_DEBUG("Load bypassRoute from %s to %s", e_route->src->cname(), e_route->dst->cname()); + XBT_DEBUG("Load bypassRoute from %s to %s", e_route->src->getCname(), e_route->dst->getCname()); xbt_assert(not e_route->link_list->empty(), "Bypass route between %s and %s cannot be empty.", - e_route->src->cname(), e_route->dst->cname()); + e_route->src->getCname(), e_route->dst->getCname()); xbt_assert(bypassRoutes_.find({e_route->src, e_route->dst}) == bypassRoutes_.end(), - "The bypass route between %s and %s already exists.", e_route->src->cname(), e_route->dst->cname()); + "The bypass route between %s and %s already exists.", e_route->src->getCname(), + e_route->dst->getCname()); } /* Build a copy that will be stored in the dict */ @@ -160,8 +162,8 @@ static void find_common_ancestors(NetPoint* src, NetPoint* dst, NetZoneImpl* src_as = src->netzone(); NetZoneImpl* dst_as = dst->netzone(); - xbt_assert(src_as, "Host %s must be in a netzone", src->cname()); - xbt_assert(dst_as, "Host %s must be in a netzone", dst->cname()); + xbt_assert(src_as, "Host %s must be in a netzone", src->getCname()); + xbt_assert(dst_as, "Host %s must be in a netzone", dst->getCname()); /* (2) find the path to the root routing component */ std::vector path_src; @@ -218,7 +220,7 @@ bool NetZoneImpl::getBypassRoute(routing::NetPoint* src, routing::NetPoint* dst, if (latency) *latency += link->latency(); } - XBT_DEBUG("Found a bypass route from '%s' to '%s' with %zu links", src->cname(), dst->cname(), + XBT_DEBUG("Found a bypass route from '%s' to '%s' with %zu links", src->getCname(), dst->getCname(), bypassedRoute->links.size()); return true; } @@ -294,7 +296,7 @@ bool NetZoneImpl::getBypassRoute(routing::NetPoint* src, routing::NetPoint* dst, if (bypassedRoute) { XBT_DEBUG("Found a bypass route from '%s' to '%s' with %zu links. We may have to complete it with recursive " "calls to getRoute", - src->cname(), dst->cname(), bypassedRoute->links.size()); + src->getCname(), dst->getCname(), bypassedRoute->links.size()); if (src != key.first) getGlobalRoute(src, bypassedRoute->gw_src, links, latency); for (surf::LinkImpl* const& link : bypassedRoute->links) { @@ -306,7 +308,7 @@ bool NetZoneImpl::getBypassRoute(routing::NetPoint* src, routing::NetPoint* dst, getGlobalRoute(bypassedRoute->gw_dst, dst, links, latency); return true; } - XBT_DEBUG("No bypass route from '%s' to '%s'.", src->cname(), dst->cname()); + XBT_DEBUG("No bypass route from '%s' to '%s'.", src->getCname(), dst->getCname()); return false; } @@ -316,7 +318,7 @@ void NetZoneImpl::getGlobalRoute(routing::NetPoint* src, routing::NetPoint* dst, s_sg_platf_route_cbarg_t route; memset(&route, 0, sizeof(route)); - XBT_DEBUG("Resolve route from '%s' to '%s'", src->cname(), dst->cname()); + XBT_DEBUG("Resolve route from '%s' to '%s'", src->getCname(), dst->getCname()); /* Find how src and dst are interconnected */ NetZoneImpl *common_ancestor; @@ -343,7 +345,7 @@ void NetZoneImpl::getGlobalRoute(routing::NetPoint* src, routing::NetPoint* dst, common_ancestor->getLocalRoute(src_ancestor->netpoint_, dst_ancestor->netpoint_, &route, latency); xbt_assert((route.gw_src != nullptr) && (route.gw_dst != nullptr), "bad gateways for route from \"%s\" to \"%s\"", - src->cname(), dst->cname()); + src->getCname(), dst->getCname()); /* If source gateway is not our source, we have to recursively find our way up to this point */ if (src != route.gw_src) diff --git a/src/kernel/routing/NetZoneImpl.hpp b/src/kernel/routing/NetZoneImpl.hpp index 98296b511b..95f5ae38c7 100644 --- a/src/kernel/routing/NetZoneImpl.hpp +++ b/src/kernel/routing/NetZoneImpl.hpp @@ -89,7 +89,8 @@ public: static void getGlobalRoute(routing::NetPoint * src, routing::NetPoint * dst, /* OUT */ std::vector * links, double* latency); - virtual void getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) = 0; + virtual void getGraph(xbt_graph_t graph, std::map * nodes, + std::map * edges) = 0; enum class RoutingMode { unset = 0, /**< Undefined type */ base, /**< Base case: use simple link lists for routing */ diff --git a/src/kernel/routing/RoutedZone.cpp b/src/kernel/routing/RoutedZone.cpp index 5c237168ca..0263235c4e 100644 --- a/src/kernel/routing/RoutedZone.cpp +++ b/src/kernel/routing/RoutedZone.cpp @@ -18,7 +18,7 @@ void routing_route_free(sg_platf_route_cbarg_t route) { if (route) { delete route->link_list; - xbt_free(route); + delete route; } } @@ -31,34 +31,36 @@ static const char* instr_node_name(xbt_node_t node) return static_cast(data); } -xbt_node_t new_xbt_graph_node(xbt_graph_t graph, const char* name, xbt_dict_t nodes) +xbt_node_t new_xbt_graph_node(xbt_graph_t graph, const char* name, std::map* nodes) { - xbt_node_t ret = static_cast(xbt_dict_get_or_null(nodes, name)); - if (ret) - return ret; - ret = xbt_graph_new_node(graph, xbt_strdup(name)); - xbt_dict_set(nodes, name, ret, nullptr); - return ret; + auto elm = nodes->find(name); + if (elm == nodes->end()) { + xbt_node_t ret = xbt_graph_new_node(graph, xbt_strdup(name)); + nodes->insert({name, ret}); + return ret; + } else + return elm->second; } -xbt_edge_t new_xbt_graph_edge(xbt_graph_t graph, xbt_node_t s, xbt_node_t d, xbt_dict_t edges) +xbt_edge_t new_xbt_graph_edge(xbt_graph_t graph, xbt_node_t s, xbt_node_t d, std::map* edges) { const char* sn = instr_node_name(s); const char* dn = instr_node_name(d); std::string name = std::string(sn) + dn; - xbt_edge_t ret = static_cast(xbt_dict_get_or_null(edges, name.c_str())); - if (ret == nullptr) { + auto elm = edges->find(name); + if (elm == edges->end()) { name = std::string(dn) + sn; - ret = static_cast(xbt_dict_get_or_null(edges, name.c_str())); + elm = edges->find(name); } - if (ret == nullptr) { - ret = xbt_graph_new_edge(graph, s, d, nullptr); - xbt_dict_set(edges, name.c_str(), ret, nullptr); - } - return ret; + if (elm == edges->end()) { + xbt_edge_t ret = xbt_graph_new_edge(graph, s, d, nullptr); + edges->insert({name, ret}); + return ret; + } else + return elm->second; } namespace simgrid { @@ -69,7 +71,8 @@ RoutedZone::RoutedZone(NetZone* father, std::string name) : NetZoneImpl(father, { } -void RoutedZone::getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) +void RoutedZone::getGraph(xbt_graph_t graph, std::map* nodes, + std::map* edges) { std::vector vertices = getVertices(); @@ -78,12 +81,12 @@ void RoutedZone::getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) if (my_src == my_dst) continue; - sg_platf_route_cbarg_t route = xbt_new0(s_sg_platf_route_cbarg_t, 1); + sg_platf_route_cbarg_t route = new s_sg_platf_route_cbarg_t; route->link_list = new std::vector(); getLocalRoute(my_src, my_dst, route, nullptr); - XBT_DEBUG("get_route_and_latency %s -> %s", my_src->cname(), my_dst->cname()); + XBT_DEBUG("get_route_and_latency %s -> %s", my_src->getCname(), my_dst->getCname()); xbt_node_t current; xbt_node_t previous; @@ -91,15 +94,15 @@ void RoutedZone::getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) const char *current_name; if (route->gw_src) { - previous = new_xbt_graph_node(graph, route->gw_src->cname(), nodes); - previous_name = route->gw_src->cname(); + previous = new_xbt_graph_node(graph, route->gw_src->getCname(), nodes); + previous_name = route->gw_src->getCname(); } else { - previous = new_xbt_graph_node(graph, my_src->cname(), nodes); - previous_name = my_src->cname(); + previous = new_xbt_graph_node(graph, my_src->getCname(), nodes); + previous_name = my_src->getCname(); } for (auto const& link : *route->link_list) { - const char* link_name = link->cname(); + const char* link_name = link->getCname(); current = new_xbt_graph_node(graph, link_name, nodes); current_name = link_name; new_xbt_graph_edge(graph, previous, current, edges); @@ -109,17 +112,17 @@ void RoutedZone::getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) } if (route->gw_dst) { - current = new_xbt_graph_node(graph, route->gw_dst->cname(), nodes); - current_name = route->gw_dst->cname(); + current = new_xbt_graph_node(graph, route->gw_dst->getCname(), nodes); + current_name = route->gw_dst->getCname(); } else { - current = new_xbt_graph_node(graph, my_dst->cname(), nodes); - current_name = my_dst->cname(); + current = new_xbt_graph_node(graph, my_dst->getCname(), nodes); + current_name = my_dst->getCname(); } new_xbt_graph_edge(graph, previous, current, edges); XBT_DEBUG(" %s -> %s", previous_name, current_name); delete route->link_list; - xbt_free(route); + delete route; } } } @@ -132,7 +135,7 @@ sg_platf_route_cbarg_t RoutedZone::newExtendedRoute(RoutingMode hierarchy, sg_pl { sg_platf_route_cbarg_t result; - result = xbt_new0(s_sg_platf_route_cbarg_t, 1); + result = new s_sg_platf_route_cbarg_t; result->link_list = new std::vector(); xbt_assert(hierarchy == RoutingMode::base || hierarchy == RoutingMode::recursive, @@ -158,26 +161,26 @@ sg_platf_route_cbarg_t RoutedZone::newExtendedRoute(RoutingMode hierarchy, sg_pl void RoutedZone::getRouteCheckParams(NetPoint* src, NetPoint* dst) { - xbt_assert(src, "Cannot find a route from nullptr to %s", dst->cname()); - xbt_assert(dst, "Cannot find a route from %s to nullptr", src->cname()); + xbt_assert(src, "Cannot find a route from nullptr to %s", dst->getCname()); + xbt_assert(dst, "Cannot find a route from %s to nullptr", src->getCname()); NetZone* src_as = src->netzone(); NetZone* dst_as = dst->netzone(); xbt_assert(src_as == dst_as, "Internal error: %s@%s and %s@%s are not in the same netzone as expected. Please report that bug.", - src->cname(), src_as->getCname(), dst->cname(), dst_as->getCname()); + src->getCname(), src_as->getCname(), dst->getCname(), dst_as->getCname()); xbt_assert(this == dst_as, "Internal error: route destination %s@%s is not in netzone %s as expected (route source: " "%s@%s). Please report that bug.", - src->cname(), dst->cname(), src_as->getCname(), dst_as->getCname(), getCname()); + src->getCname(), dst->getCname(), src_as->getCname(), dst_as->getCname(), getCname()); } void RoutedZone::addRouteCheckParams(sg_platf_route_cbarg_t route) { NetPoint* src = route->src; NetPoint* dst = route->dst; - const char* srcName = src->cname(); - const char* dstName = dst->cname(); + const char* srcName = src->getCname(); + const char* dstName = dst->getCname(); if (not route->gw_dst || not route->gw_src) { XBT_DEBUG("Load Route from \"%s\" to \"%s\"", srcName, dstName); @@ -191,7 +194,8 @@ void RoutedZone::addRouteCheckParams(sg_platf_route_cbarg_t route) "When defining a route, dst cannot be a netzone such as '%s'. Did you meant to have an NetzoneRoute?", dstName); } else { - XBT_DEBUG("Load NetzoneRoute from %s@%s to %s@%s", srcName, route->gw_src->cname(), dstName, route->gw_dst->cname()); + XBT_DEBUG("Load NetzoneRoute from %s@%s to %s@%s", srcName, route->gw_src->getCname(), dstName, + route->gw_dst->getCname()); xbt_assert(src->isNetZone(), "When defining a NetzoneRoute, src must be a netzone but '%s' is not", srcName); xbt_assert(dst->isNetZone(), "When defining a NetzoneRoute, dst must be a netzone but '%s' is not", dstName); @@ -200,14 +204,15 @@ void RoutedZone::addRouteCheckParams(sg_platf_route_cbarg_t route) xbt_assert(route->gw_dst->isHost() || route->gw_dst->isRouter(), "When defining a NetzoneRoute, gw_dst must be an host or a router but '%s' is not.", dstName); - xbt_assert(route->gw_src != route->gw_dst, "Cannot define an NetzoneRoute from '%s' to itself", route->gw_src->cname()); + xbt_assert(route->gw_src != route->gw_dst, "Cannot define an NetzoneRoute from '%s' to itself", + route->gw_src->getCname()); - xbt_assert(src, "Cannot add a route from %s@%s to %s@%s: %s does not exist.", srcName, route->gw_src->cname(), - dstName, route->gw_dst->cname(), srcName); - xbt_assert(dst, "Cannot add a route from %s@%s to %s@%s: %s does not exist.", srcName, route->gw_src->cname(), - dstName, route->gw_dst->cname(), dstName); + xbt_assert(src, "Cannot add a route from %s@%s to %s@%s: %s does not exist.", srcName, route->gw_src->getCname(), + dstName, route->gw_dst->getCname(), srcName); + xbt_assert(dst, "Cannot add a route from %s@%s to %s@%s: %s does not exist.", srcName, route->gw_src->getCname(), + dstName, route->gw_dst->getCname(), dstName); xbt_assert(not route->link_list->empty(), "Empty route (between %s@%s and %s@%s) forbidden.", srcName, - route->gw_src->cname(), dstName, route->gw_dst->cname()); + route->gw_src->getCname(), dstName, route->gw_dst->getCname()); } onRouteCreation(route->symmetrical, route->src, route->dst, route->gw_src, route->gw_dst, route->link_list); diff --git a/src/kernel/routing/RoutedZone.hpp b/src/kernel/routing/RoutedZone.hpp index 74e655bc30..62ebe810f6 100644 --- a/src/kernel/routing/RoutedZone.hpp +++ b/src/kernel/routing/RoutedZone.hpp @@ -52,7 +52,8 @@ class XBT_PRIVATE RoutedZone : public NetZoneImpl { public: explicit RoutedZone(NetZone* father, std::string name); - void getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) override; + void getGraph(xbt_graph_t graph, std::map* nodes, + std::map* edges) override; virtual sg_platf_route_cbarg_t newExtendedRoute(RoutingMode hierarchy, sg_platf_route_cbarg_t routearg, bool change_order); @@ -65,8 +66,10 @@ protected: } // namespace extern "C" { -XBT_PRIVATE xbt_node_t new_xbt_graph_node(xbt_graph_t graph, const char* name, xbt_dict_t nodes); -XBT_PRIVATE xbt_edge_t new_xbt_graph_edge(xbt_graph_t graph, xbt_node_t s, xbt_node_t d, xbt_dict_t edges); +XBT_PRIVATE xbt_node_t new_xbt_graph_node(xbt_graph_t graph, const char* name, + std::map* nodes); +XBT_PRIVATE xbt_edge_t new_xbt_graph_edge(xbt_graph_t graph, xbt_node_t s, xbt_node_t d, + std::map* edges); } #endif /* SIMGRID_ROUTING_GENERIC_HPP_ */ diff --git a/src/kernel/routing/TorusZone.cpp b/src/kernel/routing/TorusZone.cpp index 074d473922..4992637081 100644 --- a/src/kernel/routing/TorusZone.cpp +++ b/src/kernel/routing/TorusZone.cpp @@ -94,8 +94,7 @@ void TorusZone::parse_specific_arguments(ClusterCreationArgs* cluster) void TorusZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg_t route, double* lat) { - XBT_VERB("torus getLocalRoute from '%s'[%u] to '%s'[%u]", src->name().c_str(), src->id(), dst->name().c_str(), - dst->id()); + XBT_VERB("torus getLocalRoute from '%s'[%u] to '%s'[%u]", src->getCname(), src->id(), dst->getCname(), dst->id()); if (dst->isRouter() || src->isRouter()) return; diff --git a/src/kernel/routing/VivaldiZone.cpp b/src/kernel/routing/VivaldiZone.cpp index d1ea847b99..a6b4fc3708 100644 --- a/src/kernel/routing/VivaldiZone.cpp +++ b/src/kernel/routing/VivaldiZone.cpp @@ -27,7 +27,7 @@ Coords::Coords(NetPoint* netpoint, std::string coordStr) std::vector string_values; boost::split(string_values, coordStr, boost::is_any_of(" ")); - xbt_assert(string_values.size() == 3, "Coordinates of %s must have 3 dimensions", netpoint->cname()); + xbt_assert(string_values.size() == 3, "Coordinates of %s must have 3 dimensions", netpoint->getCname()); for (auto const& str : string_values) try { @@ -38,7 +38,7 @@ Coords::Coords(NetPoint* netpoint, std::string coordStr) coords.shrink_to_fit(); netpoint->extension_set(this); - XBT_DEBUG("Coords of %s %p: %s", netpoint->cname(), netpoint, coordStr.c_str()); + XBT_DEBUG("Coords of %s %p: %s", netpoint->getCname(), netpoint, coordStr.c_str()); } }; // namespace vivaldi @@ -54,7 +54,7 @@ static std::vector* getCoordsFromNetpoint(NetPoint* np) { simgrid::kernel::routing::vivaldi::Coords* coords = np->extension(); xbt_assert(coords, "Please specify the Vivaldi coordinates of %s %s (%p)", - (np->isNetZone() ? "Netzone" : (np->isHost() ? "Host" : "Router")), np->cname(), np); + (np->isNetZone() ? "Netzone" : (np->isHost() ? "Host" : "Router")), np->getCname(), np); return &coords->coords; } @@ -68,8 +68,8 @@ void VivaldiZone::setPeerLink(NetPoint* netpoint, double bw_in, double bw_out, s new simgrid::kernel::routing::vivaldi::Coords(netpoint, coord); - std::string link_up = "link_" + netpoint->name() + "_UP"; - std::string link_down = "link_" + netpoint->name() + "_DOWN"; + std::string link_up = "link_" + netpoint->getName() + "_UP"; + std::string link_down = "link_" + netpoint->getName() + "_DOWN"; surf::LinkImpl* linkUp = surf_network_model->createLink(link_up, bw_out, 0, SURF_LINK_SHARED); surf::LinkImpl* linkDown = surf_network_model->createLink(link_down, bw_in, 0, SURF_LINK_SHARED); privateLinks_.insert({netpoint->id(), {linkUp, linkDown}}); @@ -77,11 +77,11 @@ void VivaldiZone::setPeerLink(NetPoint* netpoint, double bw_in, double bw_out, s void VivaldiZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg_t route, double* lat) { - XBT_DEBUG("vivaldi getLocalRoute from '%s'[%u] '%s'[%u]", src->cname(), src->id(), dst->cname(), dst->id()); + XBT_DEBUG("vivaldi getLocalRoute from '%s'[%u] '%s'[%u]", src->getCname(), src->id(), dst->getCname(), dst->id()); if (src->isNetZone()) { - std::string srcName = "router_" + src->name(); - std::string dstName = "router_" + dst->name(); + std::string srcName = "router_" + src->getName(); + std::string dstName = "router_" + dst->getName(); route->gw_src = simgrid::s4u::Engine::getInstance()->getNetpointByNameOrNull(srcName.c_str()); route->gw_dst = simgrid::s4u::Engine::getInstance()->getNetpointByNameOrNull(dstName.c_str()); } diff --git a/src/mc/DwarfExpression.cpp b/src/mc/DwarfExpression.cpp index bfa4f16611..b20366d122 100644 --- a/src/mc/DwarfExpression.cpp +++ b/src/mc/DwarfExpression.cpp @@ -24,8 +24,6 @@ using simgrid::mc::remote; namespace simgrid { namespace dwarf { -evaluation_error::~evaluation_error() noexcept(true) {} - void execute( const Dwarf_Op* ops, std::size_t n, const ExpressionContext& context, ExpressionStack& stack) diff --git a/src/mc/DwarfExpression.hpp b/src/mc/DwarfExpression.hpp index 09160c8d4c..defb89ceb6 100644 --- a/src/mc/DwarfExpression.hpp +++ b/src/mc/DwarfExpression.hpp @@ -59,7 +59,6 @@ public: class evaluation_error : std::runtime_error { public: evaluation_error(const char* what): std::runtime_error(what) {} - ~evaluation_error() noexcept(true); }; /** A stack for evaluating a DWARF expression diff --git a/src/mc/LocationList.hpp b/src/mc/LocationList.hpp index 5fa74b3071..8e4aee3a4f 100644 --- a/src/mc/LocationList.hpp +++ b/src/mc/LocationList.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2004-2015. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2004-2017. 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. */ @@ -33,7 +33,7 @@ private: // By default, the expression is always valid: range_type range_ = {0, UINT64_MAX}; public: - LocationListEntry() {} + LocationListEntry() = default; LocationListEntry(DwarfExpression expression, range_type range) : expression_(std::move(expression)), range_(range) {} diff --git a/src/mc/ModelChecker.hpp b/src/mc/ModelChecker.hpp index bb733e3e61..e7b7e9022c 100644 --- a/src/mc/ModelChecker.hpp +++ b/src/mc/ModelChecker.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2015. The SimGrid Team. +/* Copyright (c) 2007-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -43,7 +43,6 @@ class ModelChecker { public: std::shared_ptr parent_snapshot_; -public: ModelChecker(ModelChecker const&) = delete; ModelChecker& operator=(ModelChecker const&) = delete; explicit ModelChecker(std::unique_ptr process); diff --git a/src/mc/PageStore.hpp b/src/mc/PageStore.hpp index 4ae359f90b..3d1d15e929 100644 --- a/src/mc/PageStore.hpp +++ b/src/mc/PageStore.hpp @@ -75,14 +75,16 @@ namespace mc { class PageStore { public: // Types typedef std::uint64_t hash_type; -private: // Types + +private: + // Types // We are using a cheap hash to index a page. // We should expect collision and we need to associate multiple page indices // to the same hash. typedef std::unordered_set page_set_type; typedef std::unordered_map pages_map_type; -private: // Fields: + // Fields: /** First page */ void* memory_; /** Number of available pages in virtual memory */ @@ -96,18 +98,19 @@ private: // Fields: /** Index from page hash to page index */ pages_map_type hash_index_; -private: // Methods + // Methods void resize(std::size_t size); std::size_t alloc_page(); void remove_page(std::size_t pageno); -public: // Constructors +public: + // Constructors PageStore(PageStore const&) = delete; PageStore& operator=(PageStore const&) = delete; explicit PageStore(std::size_t size); ~PageStore(); -public: // Methods + // Methods /** @brief Decrement the reference count for a given page * @@ -141,7 +144,7 @@ public: // Methods */ const void* get_page(std::size_t pageno) const; -public: // Debug/test methods + // Debug/test methods /** @brief Get the number of references for a page */ std::size_t get_ref(std::size_t pageno); diff --git a/src/mc/RegionSnapshot.hpp b/src/mc/RegionSnapshot.hpp index 52deff2007..07baf1d836 100644 --- a/src/mc/RegionSnapshot.hpp +++ b/src/mc/RegionSnapshot.hpp @@ -44,7 +44,7 @@ private: void* data_ = nullptr; std::size_t size_; Type type_ = Type::Malloc; -private: + Buffer(std::size_t size, Type type = Type::Malloc); Buffer(void* data, std::size_t size, Type type = Type::Malloc) : data_(data), size_(size), type_(type) {} @@ -276,6 +276,6 @@ simgrid::mc::RegionSnapshot region( } } -typedef class simgrid::mc::RegionSnapshot s_mc_mem_region_t; +typedef simgrid::mc::RegionSnapshot s_mc_mem_region_t; typedef s_mc_mem_region_t* mc_mem_region_t; #endif diff --git a/src/mc/Session.hpp b/src/mc/Session.hpp index 8bc9f04a7f..9eab46b8f7 100644 --- a/src/mc/Session.hpp +++ b/src/mc/Session.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2016. The SimGrid Team. +/* Copyright (c) 2016-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -39,7 +39,6 @@ private: std::unique_ptr modelChecker_; std::shared_ptr initialSnapshot_; -private: Session(pid_t pid, int socket); // No copy: @@ -50,14 +49,13 @@ public: ~Session(); void close(); -public: void initialize(); void execute(Transition const& transition); void logState(); void restoreInitialState(); -public: // static constructors + // static constructors /** Create a new session by forking * diff --git a/src/mc/checker/Checker.cpp b/src/mc/checker/Checker.cpp index a685913d6e..6f44f0c5e8 100644 --- a/src/mc/checker/Checker.cpp +++ b/src/mc/checker/Checker.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2016. The SimGrid Team. +/* Copyright (c) 2016-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -21,26 +21,5 @@ Checker::Checker(Session& session) : session_(&session) mc_model_checker->setChecker(this); } -Checker::~Checker() -{ -} - -// virtual -RecordTrace Checker::getRecordTrace() -{ - return {}; -} - -// virtual -std::vector Checker::getTextualTrace() -{ - return {}; -} - -// virtual -void Checker::logState() -{ -} - } } diff --git a/src/mc/checker/Checker.hpp b/src/mc/checker/Checker.hpp index 4de42ae0b5..d69ba2455f 100644 --- a/src/mc/checker/Checker.hpp +++ b/src/mc/checker/Checker.hpp @@ -40,7 +40,7 @@ public: Checker(Checker const&) = delete; Checker& operator=(Checker const&) = delete; - virtual ~Checker(); + virtual ~Checker() = default; /** Main function of this algorithm */ virtual void run() = 0; @@ -52,13 +52,13 @@ public: /** Show the current trace/stack * * Could this be handled in the Session/ModelChecker instead? */ - virtual RecordTrace getRecordTrace(); + virtual RecordTrace getRecordTrace() = 0; /** Generate a textual execution trace of the simulated application */ - virtual std::vector getTextualTrace(); + virtual std::vector getTextualTrace() = 0; /** Log additional information about the state of the model-checker */ - virtual void logState(); + virtual void logState() = 0; protected: Session& getSession() { return *session_; } diff --git a/src/mc/checker/CommunicationDeterminismChecker.cpp b/src/mc/checker/CommunicationDeterminismChecker.cpp index 6c50eb7eea..955a2f2cf1 100644 --- a/src/mc/checker/CommunicationDeterminismChecker.cpp +++ b/src/mc/checker/CommunicationDeterminismChecker.cpp @@ -236,7 +236,9 @@ void CommunicationDeterminismChecker::get_comm_pattern(xbt_dynar_t list, smx_sim simgrid::kernel::activity::CommImpl* comm = temp_comm.getBuffer(); char* remote_name; - mc_model_checker->process().read(&remote_name, remote(comm->mbox ? &comm->mbox->name_ : &comm->mbox_cpy->name_)); + mc_model_checker->process().read( + &remote_name, remote(comm->mbox ? &simgrid::xbt::string::to_string_data(comm->mbox->name_).data + : &simgrid::xbt::string::to_string_data(comm->mbox_cpy->name_).data)); pattern->rdv = mc_model_checker->process().read_string(remote_name); pattern->dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->dst_proc))->pid; pattern->dst_host = MC_smx_actor_get_host_name(issuer); @@ -314,7 +316,6 @@ std::vector CommunicationDeterminismChecker::getTextualTrace() // o void CommunicationDeterminismChecker::logState() // override { - Checker::logState(); if (_sg_mc_comms_determinism && not this->recv_deterministic && this->send_deterministic) { XBT_INFO("******************************************************"); XBT_INFO("**** Only-send-deterministic communication pattern ****"); diff --git a/src/mc/checker/LivenessChecker.cpp b/src/mc/checker/LivenessChecker.cpp index 6eef33082e..902246d338 100644 --- a/src/mc/checker/LivenessChecker.cpp +++ b/src/mc/checker/LivenessChecker.cpp @@ -76,6 +76,7 @@ static bool evaluate_label(xbt_automaton_exp_label_t l, std::vector const& return values[cursor] != 0; } xbt_die("Missing predicate"); + break; } case xbt_automaton_exp_label::AUT_ONE: return true; @@ -266,7 +267,6 @@ RecordTrace LivenessChecker::getRecordTrace() // override void LivenessChecker::logState() // override { - Checker::logState(); XBT_INFO("Expanded pairs = %lu", expandedPairsCount_); XBT_INFO("Visited pairs = %lu", visitedPairsCount_); XBT_INFO("Executed transitions = %lu", mc_model_checker->executed_transitions); diff --git a/src/mc/checker/LivenessChecker.hpp b/src/mc/checker/LivenessChecker.hpp index 160b77cb88..1f9be7f6d5 100644 --- a/src/mc/checker/LivenessChecker.hpp +++ b/src/mc/checker/LivenessChecker.hpp @@ -77,7 +77,7 @@ private: void purgeVisitedPairs(); void backtrack(); std::shared_ptr newPair(Pair* pair, xbt_automaton_state_t state, std::shared_ptr> propositions); -private: + // A stack of (application_state, automaton_state) pairs for DFS exploration: std::list> explorationStack_; std::list> acceptancePairs_; diff --git a/src/mc/checker/SafetyChecker.cpp b/src/mc/checker/SafetyChecker.cpp index 0003a8fb28..8bad4a5fa8 100644 --- a/src/mc/checker/SafetyChecker.cpp +++ b/src/mc/checker/SafetyChecker.cpp @@ -79,7 +79,6 @@ std::vector SafetyChecker::getTextualTrace() // override void SafetyChecker::logState() // override { - Checker::logState(); XBT_INFO("Expanded states = %lu", expandedStatesCount_); XBT_INFO("Visited states = %lu", mc_model_checker->visited_states); XBT_INFO("Executed transitions = %lu", mc_model_checker->executed_transitions); diff --git a/src/mc/checker/SafetyChecker.hpp b/src/mc/checker/SafetyChecker.hpp index f299d9b19c..0a45e48a13 100644 --- a/src/mc/checker/SafetyChecker.hpp +++ b/src/mc/checker/SafetyChecker.hpp @@ -33,7 +33,7 @@ private: void checkNonTermination(simgrid::mc::State* current_state); void backtrack(); void restoreState(); -private: + /** Stack representing the position in the exploration graph */ std::list> stack_; simgrid::mc::VisitedStates visitedStates_; diff --git a/src/mc/checker/simgrid_mc.cpp b/src/mc/checker/simgrid_mc.cpp index 45f1201839..c094a75e35 100644 --- a/src/mc/checker/simgrid_mc.cpp +++ b/src/mc/checker/simgrid_mc.cpp @@ -33,7 +33,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_main, mc, "Entry point for simgrid-mc"); static inline char** argvdup(int argc, char** argv) { - char** argv_copy = xbt_new(char*, argc+1); + char** argv_copy = new char*[argc + 1]; std::memcpy(argv_copy, argv, sizeof(char*) * argc); argv_copy[argc] = nullptr; return argv_copy; @@ -74,7 +74,7 @@ int main(int argc, char** argv) std::unique_ptr session = std::unique_ptr(Session::spawnvp(argv_copy[1], argv_copy+1)); - free(argv_copy); + delete[] argv_copy; simgrid::mc::session = session.get(); std::unique_ptr checker = createChecker(*session); diff --git a/src/mc/compare.cpp b/src/mc/compare.cpp index 6516f895a3..0e3887d570 100644 --- a/src/mc/compare.cpp +++ b/src/mc/compare.cpp @@ -128,8 +128,8 @@ template class hash> { public: std::size_t operator()(std::pairconst& x) const { - struct hash h1; - struct hash h2; + hash h1; + hash h2; return h1(x.first) ^ h2(x.second); } }; @@ -684,204 +684,179 @@ static int compare_heap_area_with_type( int area_size, int check_ignore, int pointer_level) { -top: - - // HACK: This should not happen but in pratice, there are some - // DW_TAG_typedef without an associated DW_AT_type: - //<1><538832>: Abbrev Number: 111 (DW_TAG_typedef) - // <538833> DW_AT_name : (indirect string, offset: 0x2292f3): gregset_t - // <538837> DW_AT_decl_file : 98 - // <538838> DW_AT_decl_line : 37 - if (type == nullptr) - return 0; - - if (is_stack(real_area1) && is_stack(real_area2)) - return 0; + do { + + // HACK: This should not happen but in pratice, there are some + // DW_TAG_typedef without an associated DW_AT_type: + //<1><538832>: Abbrev Number: 111 (DW_TAG_typedef) + // <538833> DW_AT_name : (indirect string, offset: 0x2292f3): gregset_t + // <538837> DW_AT_decl_file : 98 + // <538838> DW_AT_decl_line : 37 + if (type == nullptr) + return 0; - if (check_ignore > 0) { - ssize_t ignore1 = heap_comparison_ignore_size( - state.processStates[0].to_ignore, real_area1); - if (ignore1 > 0 - && heap_comparison_ignore_size( - state.processStates[1].to_ignore, real_area2) == ignore1) + if (is_stack(real_area1) && is_stack(real_area2)) return 0; - } - simgrid::mc::Type* subtype; - simgrid::mc::Type* subsubtype; - int res; - int elm_size; - const void* addr_pointed1; - const void* addr_pointed2; + if (check_ignore > 0) { + ssize_t ignore1 = heap_comparison_ignore_size(state.processStates[0].to_ignore, real_area1); + if (ignore1 > 0 && heap_comparison_ignore_size(state.processStates[1].to_ignore, real_area2) == ignore1) + return 0; + } - mc_mem_region_t heap_region1 = MC_get_heap_region(snapshot1); - mc_mem_region_t heap_region2 = MC_get_heap_region(snapshot2); + simgrid::mc::Type* subtype; + simgrid::mc::Type* subsubtype; + int res; + int elm_size; + const void* addr_pointed1; + const void* addr_pointed2; - switch (type->type) { - case DW_TAG_unspecified_type: - return 1; + mc_mem_region_t heap_region1 = MC_get_heap_region(snapshot1); + mc_mem_region_t heap_region2 = MC_get_heap_region(snapshot2); - case DW_TAG_base_type: - if (not type->name.empty() && type->name == "char") { /* String, hence random (arbitrary ?) size */ - if (real_area1 == real_area2) - return -1; - else - return MC_snapshot_region_memcmp(real_area1, heap_region1, real_area2, heap_region2, area_size) != 0; - } else { - if (area_size != -1 && type->byte_size != area_size) - return -1; - else + switch (type->type) { + case DW_TAG_unspecified_type: + return 1; + + case DW_TAG_base_type: + if (not type->name.empty() && type->name == "char") { /* String, hence random (arbitrary ?) size */ + if (real_area1 == real_area2) + return -1; + else + return MC_snapshot_region_memcmp(real_area1, heap_region1, real_area2, heap_region2, area_size) != 0; + } else { + if (area_size != -1 && type->byte_size != area_size) + return -1; + else + return MC_snapshot_region_memcmp(real_area1, heap_region1, real_area2, heap_region2, type->byte_size) != 0; + } + break; + + case DW_TAG_enumeration_type: + if (area_size != -1 && type->byte_size != area_size) + return -1; return MC_snapshot_region_memcmp(real_area1, heap_region1, real_area2, heap_region2, type->byte_size) != 0; - } - break; - - case DW_TAG_enumeration_type: - if (area_size != -1 && type->byte_size != area_size) - return -1; - return MC_snapshot_region_memcmp(real_area1, heap_region1, real_area2, heap_region2, type->byte_size) != 0; - - case DW_TAG_typedef: - case DW_TAG_const_type: - case DW_TAG_volatile_type: - // Poor man's TCO: - type = type->subtype; - goto top; - - case DW_TAG_array_type: - subtype = type->subtype; - switch (subtype->type) { - case DW_TAG_unspecified_type: - return 1; - case DW_TAG_base_type: - case DW_TAG_enumeration_type: - case DW_TAG_pointer_type: - case DW_TAG_reference_type: - case DW_TAG_rvalue_reference_type: - case DW_TAG_structure_type: - case DW_TAG_class_type: - case DW_TAG_union_type: - if (subtype->full_type) - subtype = subtype->full_type; - elm_size = subtype->byte_size; - break; - // TODO, just remove the type indirection? - case DW_TAG_const_type: - case DW_TAG_typedef: - case DW_TAG_volatile_type: - subsubtype = subtype->subtype; - if (subsubtype->full_type) - subsubtype = subsubtype->full_type; - elm_size = subsubtype->byte_size; - break; - default: - return 0; - break; - } - for (int i = 0; i < type->element_count; i++) { - // TODO, add support for variable stride (DW_AT_byte_stride) - res = - compare_heap_area_with_type(state, process_index, - (char *) real_area1 + (i * elm_size), - (char *) real_area2 + (i * elm_size), - snapshot1, snapshot2, previous, - type->subtype, subtype->byte_size, - check_ignore, pointer_level); - if (res == 1) - return res; - } - return 0; + case DW_TAG_typedef: + case DW_TAG_const_type: + case DW_TAG_volatile_type: + // Poor man's TCO: + type = type->subtype; + continue; // restart + + case DW_TAG_array_type: + subtype = type->subtype; + switch (subtype->type) { + case DW_TAG_unspecified_type: + return 1; + + case DW_TAG_base_type: + case DW_TAG_enumeration_type: + case DW_TAG_pointer_type: + case DW_TAG_reference_type: + case DW_TAG_rvalue_reference_type: + case DW_TAG_structure_type: + case DW_TAG_class_type: + case DW_TAG_union_type: + if (subtype->full_type) + subtype = subtype->full_type; + elm_size = subtype->byte_size; + break; + // TODO, just remove the type indirection? + case DW_TAG_const_type: + case DW_TAG_typedef: + case DW_TAG_volatile_type: + subsubtype = subtype->subtype; + if (subsubtype->full_type) + subsubtype = subsubtype->full_type; + elm_size = subsubtype->byte_size; + break; + default: + return 0; + break; + } + for (int i = 0; i < type->element_count; i++) { + // TODO, add support for variable stride (DW_AT_byte_stride) + res = compare_heap_area_with_type(state, process_index, (char*)real_area1 + (i * elm_size), + (char*)real_area2 + (i * elm_size), snapshot1, snapshot2, previous, + type->subtype, subtype->byte_size, check_ignore, pointer_level); + if (res == 1) + return res; + } + return 0; - case DW_TAG_reference_type: - case DW_TAG_rvalue_reference_type: - case DW_TAG_pointer_type: - if (type->subtype && type->subtype->type == DW_TAG_subroutine_type) { - addr_pointed1 = snapshot1->read(remote((void**)real_area1), process_index); - addr_pointed2 = snapshot2->read(remote((void**)real_area2), process_index); - return (addr_pointed1 != addr_pointed2); - } - pointer_level++; - if (pointer_level <= 1) { - addr_pointed1 = snapshot1->read(remote((void**)real_area1), process_index); - addr_pointed2 = snapshot2->read(remote((void**)real_area2), process_index); - if (addr_pointed1 > state.std_heap_copy.heapbase - && addr_pointed1 < mc_snapshot_get_heap_end(snapshot1) - && addr_pointed2 > state.std_heap_copy.heapbase - && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2)) - return compare_heap_area(state, process_index, - addr_pointed1, addr_pointed2, snapshot1, - snapshot2, previous, type->subtype, - pointer_level); - else - return (addr_pointed1 != addr_pointed2); - } - for (size_t i = 0; i < (area_size / sizeof(void *)); i++) { - addr_pointed1 = snapshot1->read( - remote((void**)((char*) real_area1 + i * sizeof(void *))), - process_index); - addr_pointed2 = snapshot2->read( - remote((void**)((char*) real_area2 + i * sizeof(void *))), - process_index); - if (addr_pointed1 > state.std_heap_copy.heapbase - && addr_pointed1 < mc_snapshot_get_heap_end(snapshot1) - && addr_pointed2 > state.std_heap_copy.heapbase - && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2)) - res = - compare_heap_area(state, process_index, - addr_pointed1, addr_pointed2, snapshot1, - snapshot2, previous, type->subtype, - pointer_level); - else - res = (addr_pointed1 != addr_pointed2); - if (res == 1) - return res; - } - return 0; + case DW_TAG_reference_type: + case DW_TAG_rvalue_reference_type: + case DW_TAG_pointer_type: + if (type->subtype && type->subtype->type == DW_TAG_subroutine_type) { + addr_pointed1 = snapshot1->read(remote((void**)real_area1), process_index); + addr_pointed2 = snapshot2->read(remote((void**)real_area2), process_index); + return (addr_pointed1 != addr_pointed2); + } + pointer_level++; + if (pointer_level <= 1) { + addr_pointed1 = snapshot1->read(remote((void**)real_area1), process_index); + addr_pointed2 = snapshot2->read(remote((void**)real_area2), process_index); + if (addr_pointed1 > state.std_heap_copy.heapbase && addr_pointed1 < mc_snapshot_get_heap_end(snapshot1) && + addr_pointed2 > state.std_heap_copy.heapbase && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2)) + return compare_heap_area(state, process_index, addr_pointed1, addr_pointed2, snapshot1, snapshot2, previous, + type->subtype, pointer_level); + else + return (addr_pointed1 != addr_pointed2); + } + for (size_t i = 0; i < (area_size / sizeof(void*)); i++) { + addr_pointed1 = snapshot1->read(remote((void**)((char*)real_area1 + i * sizeof(void*))), process_index); + addr_pointed2 = snapshot2->read(remote((void**)((char*)real_area2 + i * sizeof(void*))), process_index); + if (addr_pointed1 > state.std_heap_copy.heapbase && addr_pointed1 < mc_snapshot_get_heap_end(snapshot1) && + addr_pointed2 > state.std_heap_copy.heapbase && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2)) + res = compare_heap_area(state, process_index, addr_pointed1, addr_pointed2, snapshot1, snapshot2, previous, + type->subtype, pointer_level); + else + res = (addr_pointed1 != addr_pointed2); + if (res == 1) + return res; + } + return 0; - case DW_TAG_structure_type: - case DW_TAG_class_type: - if (type->full_type) - type = type->full_type; - if (area_size != -1 && type->byte_size != area_size) { - if (area_size <= type->byte_size || area_size % type->byte_size != 0) - return -1; - for (size_t i = 0; i < (size_t)(area_size / type->byte_size); i++) { - int res = compare_heap_area_with_type(state, process_index, - (char *) real_area1 + i * type->byte_size, - (char *) real_area2 + i * type->byte_size, - snapshot1, snapshot2, previous, type, -1, - check_ignore, 0); - if (res == 1) - return res; - } - } else { - for (simgrid::mc::Member& member : type->members) { - // TODO, optimize this? (for the offset case) - void *real_member1 = simgrid::dwarf::resolve_member( - real_area1, type, &member, (simgrid::mc::AddressSpace*) snapshot1, process_index); - void *real_member2 = simgrid::dwarf::resolve_member( - real_area2, type, &member, (simgrid::mc::AddressSpace*) snapshot2, process_index); - int res = compare_heap_area_with_type( - state, process_index, real_member1, real_member2, - snapshot1, snapshot2, - previous, member.type, -1, - check_ignore, 0); - if (res == 1) - return res; - } - } - return 0; + case DW_TAG_structure_type: + case DW_TAG_class_type: + if (type->full_type) + type = type->full_type; + if (area_size != -1 && type->byte_size != area_size) { + if (area_size <= type->byte_size || area_size % type->byte_size != 0) + return -1; + for (size_t i = 0; i < (size_t)(area_size / type->byte_size); i++) { + int res = compare_heap_area_with_type(state, process_index, (char*)real_area1 + i * type->byte_size, + (char*)real_area2 + i * type->byte_size, snapshot1, snapshot2, + previous, type, -1, check_ignore, 0); + if (res == 1) + return res; + } + } else { + for (simgrid::mc::Member& member : type->members) { + // TODO, optimize this? (for the offset case) + void* real_member1 = simgrid::dwarf::resolve_member(real_area1, type, &member, + (simgrid::mc::AddressSpace*)snapshot1, process_index); + void* real_member2 = simgrid::dwarf::resolve_member(real_area2, type, &member, + (simgrid::mc::AddressSpace*)snapshot2, process_index); + int res = compare_heap_area_with_type(state, process_index, real_member1, real_member2, snapshot1, + snapshot2, previous, member.type, -1, check_ignore, 0); + if (res == 1) + return res; + } + } + return 0; - case DW_TAG_union_type: - return compare_heap_area_without_type(state, process_index, real_area1, real_area2, - snapshot1, snapshot2, previous, - type->byte_size, check_ignore); + case DW_TAG_union_type: + return compare_heap_area_without_type(state, process_index, real_area1, real_area2, snapshot1, snapshot2, + previous, type->byte_size, check_ignore); - default: - return 0; - } + default: + return 0; + } - xbt_die("Unreachable"); + xbt_die("Unreachable"); + } while (true); } /** Infer the type of a part of the block from the type of the block @@ -979,7 +954,8 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index, const malloc_info* heapinfos1 = snapshot1->read(remote((const malloc_info**)heapinfo_address), process_index); const malloc_info* heapinfos2 = snapshot2->read(remote((const malloc_info**)heapinfo_address), process_index); - malloc_info heapinfo_temp1, heapinfo_temp2; + malloc_info heapinfo_temp1; + malloc_info heapinfo_temp2; simgrid::mc::HeapLocationPairs current; if (previous == nullptr) { @@ -1262,136 +1238,129 @@ static int compare_areas_with_type(simgrid::mc::StateComparator& state, int i; int res; - top: - switch (type->type) { - case DW_TAG_unspecified_type: - return 1; - - case DW_TAG_base_type: - case DW_TAG_enumeration_type: - case DW_TAG_union_type: - return MC_snapshot_region_memcmp(real_area1, region1, real_area2, region2, type->byte_size) != 0; - case DW_TAG_typedef: - case DW_TAG_volatile_type: - case DW_TAG_const_type: - // Poor man's TCO: - type = type->subtype; - goto top; - case DW_TAG_array_type: - subtype = type->subtype; - switch (subtype->type) { - case DW_TAG_unspecified_type: - return 1; - - case DW_TAG_base_type: - case DW_TAG_enumeration_type: - case DW_TAG_pointer_type: - case DW_TAG_reference_type: - case DW_TAG_rvalue_reference_type: - case DW_TAG_structure_type: - case DW_TAG_class_type: - case DW_TAG_union_type: - if (subtype->full_type) - subtype = subtype->full_type; - elm_size = subtype->byte_size; - break; - case DW_TAG_const_type: - case DW_TAG_typedef: - case DW_TAG_volatile_type: - subsubtype = subtype->subtype; - if (subsubtype->full_type) - subsubtype = subsubtype->full_type; - elm_size = subsubtype->byte_size; - break; - default: - return 0; - break; - } - for (i = 0; i < type->element_count; i++) { - size_t off = i * elm_size; - res = compare_areas_with_type(state, process_index, - (char*) real_area1 + off, snapshot1, region1, - (char*) real_area2 + off, snapshot2, region2, - type->subtype, pointer_level); - if (res == 1) - return res; - } - break; - case DW_TAG_pointer_type: - case DW_TAG_reference_type: - case DW_TAG_rvalue_reference_type: - { - void* addr_pointed1 = MC_region_read_pointer(region1, real_area1); - void* addr_pointed2 = MC_region_read_pointer(region2, real_area2); - - if (type->subtype && type->subtype->type == DW_TAG_subroutine_type) - return (addr_pointed1 != addr_pointed2); - if (addr_pointed1 == nullptr && addr_pointed2 == nullptr) - return 0; - if (addr_pointed1 == nullptr || addr_pointed2 == nullptr) - return 1; - if (not state.compared_pointers.insert(std::make_pair(addr_pointed1, addr_pointed2)).second) - return 0; - - pointer_level++; - - // Some cases are not handled here: - // * the pointers lead to different areas (one to the heap, the other to the RW segment ...) - // * a pointer leads to the read-only segment of the current object - // * a pointer lead to a different ELF object - - if (addr_pointed1 > process->heap_address && addr_pointed1 < mc_snapshot_get_heap_end(snapshot1)) { - if (not(addr_pointed2 > process->heap_address && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2))) - return 1; - // The pointers are both in the heap: - return simgrid::mc::compare_heap_area(state, process_index, addr_pointed1, addr_pointed2, snapshot1, snapshot2, - nullptr, type->subtype, pointer_level); - - } else if (region1->contain(simgrid::mc::remote(addr_pointed1))) { - // The pointers are both in the current object R/W segment: - if (not region2->contain(simgrid::mc::remote(addr_pointed2))) + do { + switch (type->type) { + case DW_TAG_unspecified_type: return 1; - if (not type->type_id) - return (addr_pointed1 != addr_pointed2); - else - return compare_areas_with_type(state, process_index, addr_pointed1, snapshot1, region1, addr_pointed2, - snapshot2, region2, type->subtype, pointer_level); - } else { - // TODO, We do not handle very well the case where - // it belongs to a different (non-heap) region from the current one. - - return (addr_pointed1 != addr_pointed2); - } - break; - } - case DW_TAG_structure_type: - case DW_TAG_class_type: - for (simgrid::mc::Member& member : type->members) { - void *member1 = simgrid::dwarf::resolve_member( - real_area1, type, &member, snapshot1, process_index); - void *member2 = simgrid::dwarf::resolve_member( - real_area2, type, &member, snapshot2, process_index); - mc_mem_region_t subregion1 = mc_get_region_hinted(member1, snapshot1, process_index, region1); - mc_mem_region_t subregion2 = mc_get_region_hinted(member2, snapshot2, process_index, region2); - res = - compare_areas_with_type(state, process_index, - member1, snapshot1, subregion1, - member2, snapshot2, subregion2, - member.type, pointer_level); - if (res == 1) - return res; + case DW_TAG_base_type: + case DW_TAG_enumeration_type: + case DW_TAG_union_type: + return MC_snapshot_region_memcmp(real_area1, region1, real_area2, region2, type->byte_size) != 0; + case DW_TAG_typedef: + case DW_TAG_volatile_type: + case DW_TAG_const_type: + // Poor man's TCO: + type = type->subtype; + continue; // restart + case DW_TAG_array_type: + subtype = type->subtype; + switch (subtype->type) { + case DW_TAG_unspecified_type: + return 1; + + case DW_TAG_base_type: + case DW_TAG_enumeration_type: + case DW_TAG_pointer_type: + case DW_TAG_reference_type: + case DW_TAG_rvalue_reference_type: + case DW_TAG_structure_type: + case DW_TAG_class_type: + case DW_TAG_union_type: + if (subtype->full_type) + subtype = subtype->full_type; + elm_size = subtype->byte_size; + break; + case DW_TAG_const_type: + case DW_TAG_typedef: + case DW_TAG_volatile_type: + subsubtype = subtype->subtype; + if (subsubtype->full_type) + subsubtype = subsubtype->full_type; + elm_size = subsubtype->byte_size; + break; + default: + return 0; + break; + } + for (i = 0; i < type->element_count; i++) { + size_t off = i * elm_size; + res = compare_areas_with_type(state, process_index, (char*)real_area1 + off, snapshot1, region1, + (char*)real_area2 + off, snapshot2, region2, type->subtype, pointer_level); + if (res == 1) + return res; + } + break; + case DW_TAG_pointer_type: + case DW_TAG_reference_type: + case DW_TAG_rvalue_reference_type: { + void* addr_pointed1 = MC_region_read_pointer(region1, real_area1); + void* addr_pointed2 = MC_region_read_pointer(region2, real_area2); + + if (type->subtype && type->subtype->type == DW_TAG_subroutine_type) + return (addr_pointed1 != addr_pointed2); + if (addr_pointed1 == nullptr && addr_pointed2 == nullptr) + return 0; + if (addr_pointed1 == nullptr || addr_pointed2 == nullptr) + return 1; + if (not state.compared_pointers.insert(std::make_pair(addr_pointed1, addr_pointed2)).second) + return 0; + + pointer_level++; + + // Some cases are not handled here: + // * the pointers lead to different areas (one to the heap, the other to the RW segment ...) + // * a pointer leads to the read-only segment of the current object + // * a pointer lead to a different ELF object + + if (addr_pointed1 > process->heap_address && addr_pointed1 < mc_snapshot_get_heap_end(snapshot1)) { + if (not(addr_pointed2 > process->heap_address && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2))) + return 1; + // The pointers are both in the heap: + return simgrid::mc::compare_heap_area(state, process_index, addr_pointed1, addr_pointed2, snapshot1, + snapshot2, nullptr, type->subtype, pointer_level); + + } else if (region1->contain(simgrid::mc::remote(addr_pointed1))) { + // The pointers are both in the current object R/W segment: + if (not region2->contain(simgrid::mc::remote(addr_pointed2))) + return 1; + if (not type->type_id) + return (addr_pointed1 != addr_pointed2); + else + return compare_areas_with_type(state, process_index, addr_pointed1, snapshot1, region1, addr_pointed2, + snapshot2, region2, type->subtype, pointer_level); + } else { + + // TODO, We do not handle very well the case where + // it belongs to a different (non-heap) region from the current one. + + return (addr_pointed1 != addr_pointed2); + } + break; + } + case DW_TAG_structure_type: + case DW_TAG_class_type: + for (simgrid::mc::Member& member : type->members) { + void* member1 = simgrid::dwarf::resolve_member(real_area1, type, &member, snapshot1, process_index); + void* member2 = simgrid::dwarf::resolve_member(real_area2, type, &member, snapshot2, process_index); + mc_mem_region_t subregion1 = mc_get_region_hinted(member1, snapshot1, process_index, region1); + mc_mem_region_t subregion2 = mc_get_region_hinted(member2, snapshot2, process_index, region2); + res = compare_areas_with_type(state, process_index, member1, snapshot1, subregion1, member2, snapshot2, + subregion2, member.type, pointer_level); + if (res == 1) + return res; + } + break; + case DW_TAG_subroutine_type: + return -1; + break; + default: + XBT_VERB("Unknown case: %d", type->type); + break; } - break; - case DW_TAG_subroutine_type: - return -1; - break; - default: - XBT_VERB("Unknown case: %d", type->type); - break; - } - return 0; + return 0; + } while (true); } static int compare_global_variables( @@ -1469,7 +1438,8 @@ static int compare_local_variables(simgrid::mc::StateComparator& state, } unsigned int cursor = 0; - local_variable_t current_var1, current_var2; + local_variable_t current_var1; + local_variable_t current_var2; while (cursor < stack1->local_variables.size()) { current_var1 = &stack1->local_variables[cursor]; current_var2 = &stack1->local_variables[cursor]; diff --git a/src/mc/mc_base.cpp b/src/mc/mc_base.cpp index dbafa01632..429a995061 100644 --- a/src/mc/mc_base.cpp +++ b/src/mc/mc_base.cpp @@ -111,8 +111,7 @@ bool actor_is_enabled(smx_actor_t actor) if (mutex->owner == nullptr) return true; - else - return mutex->owner->pid == req->issuer->pid; + return mutex->owner->pid == req->issuer->pid; } case SIMCALL_SEM_ACQUIRE: { diff --git a/src/mc/mc_checkpoint.cpp b/src/mc/mc_checkpoint.cpp index d5a334f480..1e24eff865 100644 --- a/src/mc/mc_checkpoint.cpp +++ b/src/mc/mc_checkpoint.cpp @@ -47,6 +47,10 @@ using simgrid::mc::remote; XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_checkpoint, mc, "Logging specific to mc_checkpoint"); +#define PROT_RWX (PROT_READ | PROT_WRITE | PROT_EXEC) +#define PROT_RW (PROT_READ | PROT_WRITE) +#define PROT_RX (PROT_READ | PROT_EXEC) + namespace simgrid { namespace mc { @@ -60,11 +64,6 @@ namespace mc { static void restore(mc_mem_region_t region) { switch(region->storage_type()) { - case simgrid::mc::StorageType::NoData: - default: - xbt_die("Storage type not supported"); - break; - case simgrid::mc::StorageType::Flat: mc_model_checker->process().write_bytes(region->flat_data().get(), region->size(), region->permanent_address()); @@ -78,6 +77,10 @@ static void restore(mc_mem_region_t region) for (auto& p : region->privatized_data()) restore(&p); break; + + default: // includes StorageType::NoData + xbt_die("Storage type not supported"); + break; } } @@ -175,10 +178,6 @@ static void get_memory_regions(simgrid::mc::RemoteClient* process, simgrid::mc:: snapshot->privatization_index = simgrid::mc::ProcessIndexMissing; } -#define PROT_RWX (PROT_READ | PROT_WRITE | PROT_EXEC) -#define PROT_RW (PROT_READ | PROT_WRITE) -#define PROT_RX (PROT_READ | PROT_EXEC) - /** \brief Fills the position of the segments (executable, read-only, read/write). * */ // TODO, use the ELF segment information for more robustness @@ -278,10 +277,8 @@ static bool valid_variable(simgrid::mc::Variable* var, return true; } -static void fill_local_variables_values(mc_stack_frame_t stack_frame, - simgrid::mc::Frame* scope, - int process_index, - std::vector& result) +static void fill_local_variables_values(mc_stack_frame_t stack_frame, simgrid::mc::Frame* scope, int process_index, + std::vector& result) { simgrid::mc::RemoteClient* process = &mc_model_checker->process(); @@ -335,10 +332,10 @@ static void fill_local_variables_values(mc_stack_frame_t stack_frame, stack_frame, &nested_scope, process_index, result); } -static std::vector get_local_variables_values( - std::vector& stack_frames, int process_index) +static std::vector get_local_variables_values(std::vector& stack_frames, + int process_index) { - std::vector variables; + std::vector variables; for (s_mc_stack_frame_t& stack_frame : stack_frames) fill_local_variables_values(&stack_frame, stack_frame.frame, process_index, variables); return variables; diff --git a/src/mc/mc_comm_pattern.hpp b/src/mc/mc_comm_pattern.hpp index feac5b4b47..cc189d7ae4 100644 --- a/src/mc/mc_comm_pattern.hpp +++ b/src/mc/mc_comm_pattern.hpp @@ -35,15 +35,15 @@ extern XBT_PRIVATE xbt_dynar_t initial_communications_pattern; */ extern XBT_PRIVATE xbt_dynar_t incomplete_communications_pattern; -typedef enum { +enum e_mc_call_type_t { MC_CALL_TYPE_NONE, MC_CALL_TYPE_SEND, MC_CALL_TYPE_RECV, MC_CALL_TYPE_WAIT, MC_CALL_TYPE_WAITANY, -} e_mc_call_type_t; +}; -typedef enum { +enum e_mc_comm_pattern_difference_t { NONE_DIFF, TYPE_DIFF, RDV_DIFF, @@ -52,7 +52,7 @@ typedef enum { DST_PROC_DIFF, DATA_SIZE_DIFF, DATA_DIFF, -} e_mc_comm_pattern_difference_t; +}; static inline e_mc_call_type_t MC_get_call_type(smx_simcall_t req) { diff --git a/src/mc/mc_dwarf.cpp b/src/mc/mc_dwarf.cpp index 3a21afc831..e6414db3f7 100644 --- a/src/mc/mc_dwarf.cpp +++ b/src/mc/mc_dwarf.cpp @@ -22,6 +22,7 @@ #include "src/simgrid/util.hpp" #include "xbt/log.h" +#include "xbt/string.hpp" #include "xbt/sysdep.h" #include @@ -532,13 +533,10 @@ static void MC_dwarf_fill_member_location( (uint64_t) type->id, type->name.c_str()); break; } - case simgrid::dwarf::FormClass::LocListPtr: - // Reference to a location list: - // TODO - case simgrid::dwarf::FormClass::Reference: - // It's supposed to be possible in DWARF2 but I couldn't find its semantic - // in the spec. + default: + // includes FormClass::LocListPtr (reference to a location list: TODO) and FormClass::Reference (it's supposed to be + // possible in DWARF2 but I couldn't find its semantic in the spec) xbt_die("Can't handle form class (%d) / form 0x%x as DW_AT_member_location", (int)form_class, (unsigned)form); } @@ -657,10 +655,10 @@ static simgrid::mc::Type MC_dwarf_die_to_type( const char *name = MC_dwarf_attr_integrate_string(die, DW_AT_name); if (name != nullptr) { - char* full_name = ns ? bprintf("%s%s::%s", prefix, ns, name) : - bprintf("%s%s", prefix, name); - type.name = std::string(full_name); - free(full_name); + if (ns) + type.name = simgrid::xbt::string_printf("%s%s::%s", prefix, ns, name); + else + type.name = simgrid::xbt::string_printf("%s%s", prefix, name); } type.type_id = MC_dwarf_at_type(die); @@ -697,10 +695,8 @@ static simgrid::mc::Type MC_dwarf_die_to_type( case DW_TAG_union_type: case DW_TAG_class_type: MC_dwarf_add_members(info, die, unit, &type); - char *new_ns = ns == nullptr ? xbt_strdup(type.name.c_str()) - : bprintf("%s::%s", ns, name); - MC_dwarf_handle_children(info, die, unit, frame, new_ns); - free(new_ns); + std::string new_ns = ns ? simgrid::xbt::string_printf("%s::%s", ns, name) : type.name; + MC_dwarf_handle_children(info, die, unit, frame, new_ns.c_str()); break; } @@ -800,18 +796,16 @@ static std::unique_ptr MC_die_to_variable( int form = dwarf_whatform(&attr); simgrid::dwarf::FormClass form_class = simgrid::dwarf::classify_form(form); switch (form_class) { - case simgrid::dwarf::FormClass::Constant: - { + case simgrid::dwarf::FormClass::Constant: { Dwarf_Word value; variable->start_scope = dwarf_formudata(&attr, &value) == 0 ? (size_t) value : 0; break; } - case simgrid::dwarf::FormClass::RangeListPtr: // TODO - default: - xbt_die("Unhandled form 0x%x, class 0x%X for DW_AT_start_scope of variable %s", (unsigned)form, - (unsigned)form_class, name == nullptr ? "?" : name); + default: // includes FormClass::RangeListPtr (TODO) + xbt_die("Unhandled form 0x%x, class 0x%X for DW_AT_start_scope of variable %s", (unsigned)form, + (unsigned)form_class, name == nullptr ? "?" : name); } } diff --git a/src/mc/mc_memory.cpp b/src/mc/mc_memory.cpp index 28ff84b860..2864b9d35d 100644 --- a/src/mc/mc_memory.cpp +++ b/src/mc/mc_memory.cpp @@ -26,9 +26,4 @@ void MC_memory_init() xbt_die("Model-checking support is not enabled: run with simgrid-mc."); } -/* Finalize the memory subsystem */ -void MC_memory_exit() -{ -} - } diff --git a/src/mc/mc_request.cpp b/src/mc/mc_request.cpp index e4fbdf6892..b2afcbcac1 100644 --- a/src/mc/mc_request.cpp +++ b/src/mc/mc_request.cpp @@ -160,16 +160,11 @@ bool request_depend(smx_simcall_t r1, smx_simcall_t r2) if (synchro1->src_buff == synchro2->src_buff && synchro1->dst_buff == synchro2->dst_buff) return false; - else if (synchro1->src_buff != nullptr - && synchro1->dst_buff != nullptr - && synchro2->src_buff != nullptr - && synchro2->dst_buff != nullptr - && synchro1->dst_buff != synchro2->src_buff - && synchro1->dst_buff != synchro2->dst_buff - && synchro2->dst_buff != synchro1->src_buff) + if (synchro1->src_buff != nullptr && synchro1->dst_buff != nullptr && synchro2->src_buff != nullptr && + synchro2->dst_buff != nullptr && synchro1->dst_buff != synchro2->src_buff && + synchro1->dst_buff != synchro2->dst_buff && synchro2->dst_buff != synchro1->src_buff) return false; - else - return true; + return true; default: return true; } diff --git a/src/mc/mc_smx.cpp b/src/mc/mc_smx.cpp index 4711074164..8be69df80c 100644 --- a/src/mc/mc_smx.cpp +++ b/src/mc/mc_smx.cpp @@ -66,7 +66,7 @@ static void MC_process_refresh_simix_actor_dynar(simgrid::mc::RemoteClient* proc s_xbt_dynar_t dynar; process->read_bytes(&dynar, sizeof(dynar), remote_dynar); - smx_actor_t* data = (smx_actor_t*)malloc(dynar.elmsize * dynar.used); + smx_actor_t* data = static_cast(::operator new(dynar.elmsize * dynar.used)); process->read_bytes(data, dynar.elmsize * dynar.used, dynar.data); // Load each element of the vector from the MCed process: @@ -78,7 +78,7 @@ static void MC_process_refresh_simix_actor_dynar(simgrid::mc::RemoteClient* proc process->read_bytes(&info.copy, sizeof(info.copy), remote(data[i])); target.push_back(std::move(info)); } - free(data); + ::operator delete(data); } namespace simgrid { namespace mc { @@ -160,8 +160,8 @@ const char* MC_smx_actor_get_host_name(smx_actor_t actor) */ union fake_host { simgrid::s4u::Host host; - fake_host() {} - ~fake_host() {} + fake_host() { /* Nothing to do*/} + ~fake_host() { /* Nothing to do*/} }; fake_host foo; const size_t offset = (char*)&foo.host.getName() - (char*)&foo.host; @@ -184,7 +184,7 @@ const char* MC_smx_actor_get_name(smx_actor_t actor) simgrid::mc::ActorInformation* info = actor_info_cast(actor); if (info->name.empty()) { - simgrid::xbt::string_data string_data = (simgrid::xbt::string_data&)actor->name; + simgrid::xbt::string_data string_data = simgrid::xbt::string::to_string_data(actor->name); info->name = process->read_string(remote(string_data.data), string_data.len); } return info->name.c_str(); diff --git a/src/mc/mc_snapshot.cpp b/src/mc/mc_snapshot.cpp index ce1c2a8263..13586a6b52 100644 --- a/src/mc/mc_snapshot.cpp +++ b/src/mc/mc_snapshot.cpp @@ -123,8 +123,8 @@ int MC_snapshot_region_memcmp( bool stack_alloc = size < 64; const bool region1_need_buffer = region1==nullptr || region1->storage_type()==simgrid::mc::StorageType::Flat; const bool region2_need_buffer = region2==nullptr || region2->storage_type()==simgrid::mc::StorageType::Flat; - void* buffer1a = region1_need_buffer ? nullptr : stack_alloc ? alloca(size) : malloc(size); - void* buffer2a = region2_need_buffer ? nullptr : stack_alloc ? alloca(size) : malloc(size); + void* buffer1a = region1_need_buffer ? nullptr : stack_alloc ? alloca(size) : ::operator new(size); + void* buffer2a = region2_need_buffer ? nullptr : stack_alloc ? alloca(size) : ::operator new(size); const void* buffer1 = MC_region_read(region1, buffer1a, addr1, size); const void* buffer2 = MC_region_read(region2, buffer2a, addr2, size); int res; @@ -133,8 +133,8 @@ int MC_snapshot_region_memcmp( else res = memcmp(buffer1, buffer2, size); if (not stack_alloc) { - free(buffer1a); - free(buffer2a); + ::operator delete(buffer1a); + ::operator delete(buffer2a); } return res; } diff --git a/src/mc/mc_snapshot.hpp b/src/mc/mc_snapshot.hpp index 8c97902ecf..12325d10d2 100644 --- a/src/mc/mc_snapshot.hpp +++ b/src/mc/mc_snapshot.hpp @@ -46,8 +46,7 @@ static XBT_ALWAYS_INLINE void* mc_translate_address_region(uintptr_t addr, mc_me simgrid::mc::RegionSnapshot& subregion = region->privatized_data()[process_index]; return mc_translate_address_region(addr, &subregion, process_index); } - case simgrid::mc::StorageType::NoData: - default: + default: // includes StorageType::NoData xbt_die("Storage type not supported"); } } @@ -63,20 +62,20 @@ XBT_PRIVATE mc_mem_region_t mc_get_snapshot_region(const void* addr, const simgr * Some parts of the snapshot are ignored by zeroing them out: the real * values is stored here. * */ -typedef struct s_mc_snapshot_ignored_data { +struct s_mc_snapshot_ignored_data_t { void* start; std::vector data; -} s_mc_snapshot_ignored_data_t; +}; -typedef struct s_fd_infos { +struct s_fd_infos_t { std::string filename; int number; off_t current_position; int flags; -} s_fd_infos_t; +}; /** Information about a given stack frame */ -typedef struct s_mc_stack_frame { +struct s_mc_stack_frame_t { /** Instruction pointer */ unw_word_t ip; /** Stack pointer */ @@ -85,25 +84,26 @@ typedef struct s_mc_stack_frame { simgrid::mc::Frame* frame; std::string frame_name; unw_cursor_t unw_cursor; -} s_mc_stack_frame_t; +}; typedef s_mc_stack_frame_t* mc_stack_frame_t; -typedef struct s_local_variable { +struct s_local_variable_t { simgrid::mc::Frame* subprogram; unsigned long ip; std::string name; simgrid::mc::Type* type; void* address; int region; -} s_local_variable_t; +}; typedef s_local_variable_t* local_variable_t; -typedef struct XBT_PRIVATE s_mc_snapshot_stack { - std::vector local_variables; +struct XBT_PRIVATE s_mc_snapshot_stack_t { + std::vector local_variables; simgrid::mc::UnwindContext context; std::vector stack_frames; int process_index; -} s_mc_snapshot_stack_t, *mc_snapshot_stack_t; +}; +typedef s_mc_snapshot_stack_t* mc_snapshot_stack_t; namespace simgrid { namespace mc { @@ -125,7 +125,7 @@ public: std::vector stacks; std::vector to_ignore; std::uint64_t hash; - std::vector ignored_data; + std::vector ignored_data; std::vector current_fds; }; } @@ -190,10 +190,6 @@ static XBT_ALWAYS_INLINE const void* MC_region_read(mc_mem_region_t region, void xbt_assert(region->contain(simgrid::mc::remote(addr)), "Trying to read out of the region boundary."); switch (region->storage_type()) { - case simgrid::mc::StorageType::NoData: - default: - xbt_die("Storage type not supported"); - case simgrid::mc::StorageType::Flat: return (char*)region->flat_data().get() + offset; @@ -203,15 +199,14 @@ static XBT_ALWAYS_INLINE const void* MC_region_read(mc_mem_region_t region, void if (simgrid::mc::mmu::sameChunk((std::uintptr_t)addr, (std::uintptr_t)end)) { // The memory is contained in a single page: return mc_translate_address_region_chunked((uintptr_t)addr, region); - } else { - // The memory spans several pages: - return MC_region_read_fragmented(region, target, addr, size); } + // Otherwise, the memory spans several pages: + return MC_region_read_fragmented(region, target, addr, size); } - // We currently do not pass the process_index to this function so we assume - // that the privatized region has been resolved in the callers: - case simgrid::mc::StorageType::Privatized: + default: + // includes StorageType::NoData and StorageType::Privatized (we currently do not pass the process_index to this + // function so we assume that the privatized region has been resolved in the callers) xbt_die("Storage type not supported"); } } diff --git a/src/mc/mc_unw_vmread.cpp b/src/mc/mc_unw_vmread.cpp index 2777a0c56f..3614cc3532 100644 --- a/src/mc/mc_unw_vmread.cpp +++ b/src/mc/mc_unw_vmread.cpp @@ -36,7 +36,7 @@ struct _UPT_info { static inline pid_t _UPT_getpid(void* arg) { - struct _UPT_info* info = static_cast<_UPT_info*>(arg); + _UPT_info* info = static_cast<_UPT_info*>(arg); return info->pid; } diff --git a/src/mc/remote/RemoteClient.cpp b/src/mc/remote/RemoteClient.cpp index b2ac880b8a..92a3955abb 100644 --- a/src/mc/remote/RemoteClient.cpp +++ b/src/mc/remote/RemoteClient.cpp @@ -46,12 +46,12 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_process, mc, "MC process information"); // ***** Helper stuff -namespace simgrid { -namespace mc { - #define SO_RE "\\.so[\\.0-9]*$" #define VERSION_RE "-[\\.0-9-]*$" +namespace simgrid { +namespace mc { + // List of library which memory segments are not considered: static const char* const filtered_libraries[] = { #ifdef __linux__ @@ -116,7 +116,7 @@ struct s_mc_memory_map_re { regex_t version_re; }; -static char* get_lib_name(const char* pathname, struct s_mc_memory_map_re* res) +static char* get_lib_name(const char* pathname, s_mc_memory_map_re* res) { char* map_basename = xbt_basename(pathname); @@ -227,7 +227,7 @@ void RemoteClient::init() xbt_die("No heap information in the target process"); if (not std_heap_var->address) xbt_die("No constant address for this variable"); - this->read_bytes(&this->heap_address, sizeof(struct mdesc*), remote(std_heap_var->address), + this->read_bytes(&this->heap_address, sizeof(mdesc*), remote(std_heap_var->address), simgrid::mc::ProcessIndexDisabled); this->smx_actors_infos.clear(); @@ -262,8 +262,7 @@ void RemoteClient::refresh_heap() // Read/dereference/refresh the std_heap pointer: if (not this->heap) this->heap = std::unique_ptr(new s_xbt_mheap_t()); - this->read_bytes(this->heap.get(), sizeof(struct mdesc), remote(this->heap_address), - simgrid::mc::ProcessIndexDisabled); + this->read_bytes(this->heap.get(), sizeof(mdesc), remote(this->heap_address), simgrid::mc::ProcessIndexDisabled); this->cache_flags_ |= RemoteClient::cache_heap; } @@ -295,7 +294,7 @@ void RemoteClient::init_memory_map_info() this->binary_info = nullptr; this->libsimgrid_info = nullptr; - struct s_mc_memory_map_re res; + s_mc_memory_map_re res; if (regcomp(&res.so_re, SO_RE, 0) || regcomp(&res.version_re, VERSION_RE, 0)) xbt_die(".so regexp did not compile"); diff --git a/src/mc/remote/RemoteClient.hpp b/src/mc/remote/RemoteClient.hpp index c0d6ec7dc9..3f99f0e10c 100644 --- a/src/mc/remote/RemoteClient.hpp +++ b/src/mc/remote/RemoteClient.hpp @@ -226,7 +226,6 @@ private: void refresh_malloc_info(); void refresh_simix(); -private: pid_t pid_ = -1; Channel channel_; bool running_ = false; @@ -239,17 +238,18 @@ private: std::vector stack_areas_; std::vector ignored_heap_; -public: // object info +public: + // object info // TODO, make private (first, objectify simgrid::mc::ObjectInformation*) std::vector> object_infos; std::shared_ptr libsimgrid_info; std::shared_ptr binary_info; -public: // Copies of MCed SMX data structures - /** Copy of `simix_global->process_list` - * - * See mc_smx.c. - */ + // Copies of MCed SMX data structures + /** Copy of `simix_global->process_list` + * + * See mc_smx.c. + */ std::vector smx_actors_infos; /** Copy of `simix_global->process_to_destroy` @@ -282,13 +282,13 @@ public: */ std::vector heap_info; -public: // Libunwind-data - /** Full-featured MC-aware libunwind address space for the process - * - * This address space is using a simgrid::mc::UnwindContext* - * (with simgrid::mc::Process* / simgrid::mc::AddressSpace* - * and unw_context_t). - */ + // Libunwind-data + /** Full-featured MC-aware libunwind address space for the process + * + * This address space is using a simgrid::mc::UnwindContext* + * (with simgrid::mc::Process* / simgrid::mc::AddressSpace* + * and unw_context_t). + */ unw_addr_space_t unw_addr_space; /** Underlying libunwind address-space diff --git a/src/mc/remote/RemotePtr.hpp b/src/mc/remote/RemotePtr.hpp index 951b60c7c1..62c317c60a 100644 --- a/src/mc/remote/RemotePtr.hpp +++ b/src/mc/remote/RemotePtr.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2008-2015. The SimGrid Team. +/* Copyright (c) 2008-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -38,8 +38,8 @@ private: T buffer; public: - Remote() {} - ~Remote() {} + Remote() { /* Nothing to do */} + ~Remote() { /* Nothing to do */} Remote(T& p) { std::memcpy(&buffer, &p, sizeof(buffer)); } Remote(Remote const& that) { std::memcpy(&buffer, &that.buffer, sizeof(buffer)); } Remote& operator=(Remote const& that) diff --git a/src/msg/instr_msg_process.cpp b/src/msg/instr_msg_process.cpp index 6c396a1fe0..d82c9ca9e4 100644 --- a/src/msg/instr_msg_process.cpp +++ b/src/msg/instr_msg_process.cpp @@ -36,8 +36,8 @@ void TRACE_msg_process_change_host(msg_process_t process, msg_host_t new_host) char str[INSTR_DEFAULT_STR_SIZE]; //start link - container_t msg = PJ_container_get (instr_process_id(process, str, len)); - simgrid::instr::Type* type = PJ_type_get_root()->getChild("MSG_PROCESS_LINK"); + container_t msg = simgrid::instr::Container::byName(instr_process_id(process, str, len)); + simgrid::instr::Type* type = simgrid::instr::Type::getRootType()->byName("MSG_PROCESS_LINK"); new simgrid::instr::StartLinkEvent(MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key); //destroy existing container of this process @@ -47,8 +47,8 @@ void TRACE_msg_process_change_host(msg_process_t process, msg_host_t new_host) TRACE_msg_process_create (MSG_process_get_name (process), MSG_process_get_PID (process), new_host); //end link - msg = PJ_container_get(instr_process_id(process, str, len)); - type = PJ_type_get_root()->getChild("MSG_PROCESS_LINK"); + msg = simgrid::instr::Container::byName(instr_process_id(process, str, len)); + type = simgrid::instr::Type::getRootType()->byName("MSG_PROCESS_LINK"); new simgrid::instr::EndLinkEvent(MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key); } } @@ -59,7 +59,7 @@ void TRACE_msg_process_create (const char *process_name, int process_pid, msg_ho int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t host_container = PJ_container_get(host->getCname()); + container_t host_container = simgrid::instr::Container::byName(host->getName()); new simgrid::instr::Container(instr_process_id_2(process_name, process_pid, str, len), simgrid::instr::INSTR_MSG_PROCESS, host_container); } @@ -71,9 +71,10 @@ void TRACE_msg_process_destroy (const char *process_name, int process_pid) int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t process = PJ_container_get_or_null(instr_process_id_2(process_name, process_pid, str, len)); + container_t process = + simgrid::instr::Container::byNameOrNull(instr_process_id_2(process_name, process_pid, str, len)); if (process) { - PJ_container_remove_from_parent (process); + process->removeFromParent(); delete process; } } @@ -93,9 +94,9 @@ void TRACE_msg_process_suspend(msg_process_t process) int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t process_container = PJ_container_get (instr_process_id(process, str, len)); - simgrid::instr::Type* type = process_container->type_->getChild("MSG_PROCESS_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::get("suspend", type); + container_t process_container = simgrid::instr::Container::byName(instr_process_id(process, str, len)); + simgrid::instr::Type* type = process_container->type_->byName("MSG_PROCESS_STATE"); + simgrid::instr::Value* val = simgrid::instr::Value::byName("suspend", type); new simgrid::instr::PushStateEvent(MSG_get_clock(), process_container, type, val); } } @@ -106,8 +107,8 @@ void TRACE_msg_process_resume(msg_process_t process) int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t process_container = PJ_container_get (instr_process_id(process, str, len)); - simgrid::instr::Type* type = process_container->type_->getChild("MSG_PROCESS_STATE"); + container_t process_container = simgrid::instr::Container::byName(instr_process_id(process, str, len)); + simgrid::instr::Type* type = process_container->type_->byName("MSG_PROCESS_STATE"); new simgrid::instr::PopStateEvent(MSG_get_clock(), process_container, type); } } @@ -118,9 +119,9 @@ void TRACE_msg_process_sleep_in(msg_process_t process) int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t process_container = PJ_container_get (instr_process_id(process, str, len)); - simgrid::instr::Type* type = process_container->type_->getChild("MSG_PROCESS_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::get("sleep", type); + container_t process_container = simgrid::instr::Container::byName(instr_process_id(process, str, len)); + simgrid::instr::Type* type = process_container->type_->byName("MSG_PROCESS_STATE"); + simgrid::instr::Value* val = simgrid::instr::Value::byName("sleep", type); new simgrid::instr::PushStateEvent(MSG_get_clock(), process_container, type, val); } } @@ -131,8 +132,8 @@ void TRACE_msg_process_sleep_out(msg_process_t process) int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t process_container = PJ_container_get (instr_process_id(process, str, len)); - simgrid::instr::Type* type = process_container->type_->getChild("MSG_PROCESS_STATE"); + container_t process_container = simgrid::instr::Container::byName(instr_process_id(process, str, len)); + simgrid::instr::Type* type = process_container->type_->byName("MSG_PROCESS_STATE"); new simgrid::instr::PopStateEvent(MSG_get_clock(), process_container, type); } } diff --git a/src/msg/instr_msg_task.cpp b/src/msg/instr_msg_task.cpp index 4c54cf2cf8..4eb14d30fa 100644 --- a/src/msg/instr_msg_task.cpp +++ b/src/msg/instr_msg_task.cpp @@ -52,9 +52,9 @@ void TRACE_msg_task_execute_start(msg_task_t task) int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t process_container = PJ_container_get (instr_process_id(MSG_process_self(), str, len)); - simgrid::instr::Type* type = process_container->type_->getChild("MSG_PROCESS_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::get("task_execute", type); + container_t process_container = simgrid::instr::Container::byName(instr_process_id(MSG_process_self(), str, len)); + simgrid::instr::Type* type = process_container->type_->byName("MSG_PROCESS_STATE"); + simgrid::instr::Value* val = simgrid::instr::Value::byName("task_execute", type); new simgrid::instr::PushStateEvent(MSG_get_clock(), process_container, type, val); } } @@ -67,8 +67,8 @@ void TRACE_msg_task_execute_end(msg_task_t task) int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t process_container = PJ_container_get (instr_process_id(MSG_process_self(), str, len)); - simgrid::instr::Type* type = process_container->type_->getChild("MSG_PROCESS_STATE"); + container_t process_container = simgrid::instr::Container::byName(instr_process_id(MSG_process_self(), str, len)); + simgrid::instr::Type* type = process_container->type_->byName("MSG_PROCESS_STATE"); new simgrid::instr::PopStateEvent(MSG_get_clock(), process_container, type); } } @@ -92,9 +92,9 @@ void TRACE_msg_task_get_start() int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t process_container = PJ_container_get (instr_process_id(MSG_process_self(), str, len)); - simgrid::instr::Type* type = process_container->type_->getChild("MSG_PROCESS_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::get("receive", type); + container_t process_container = simgrid::instr::Container::byName(instr_process_id(MSG_process_self(), str, len)); + simgrid::instr::Type* type = process_container->type_->byName("MSG_PROCESS_STATE"); + simgrid::instr::Value* val = simgrid::instr::Value::byName("receive", type); new simgrid::instr::PushStateEvent(MSG_get_clock(), process_container, type, val); } } @@ -107,13 +107,13 @@ void TRACE_msg_task_get_end(double start_time, msg_task_t task) int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t process_container = PJ_container_get (instr_process_id(MSG_process_self(), str, len)); - simgrid::instr::Type* type = process_container->type_->getChild("MSG_PROCESS_STATE"); + container_t process_container = simgrid::instr::Container::byName(instr_process_id(MSG_process_self(), str, len)); + simgrid::instr::Type* type = process_container->type_->byName("MSG_PROCESS_STATE"); new simgrid::instr::PopStateEvent(MSG_get_clock(), process_container, type); char key[INSTR_DEFAULT_STR_SIZE]; snprintf (key, INSTR_DEFAULT_STR_SIZE, "p%lld", task->counter); - type = PJ_type_get_root()->getChild("MSG_PROCESS_TASK_LINK"); + type = simgrid::instr::Type::getRootType()->byName("MSG_PROCESS_TASK_LINK"); new simgrid::instr::EndLinkEvent(MSG_get_clock(), PJ_container_get_root(), type, process_container, "SR", key); } } @@ -127,14 +127,14 @@ int TRACE_msg_task_put_start(msg_task_t task) int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t process_container = PJ_container_get (instr_process_id(MSG_process_self(), str, len)); - simgrid::instr::Type* type = process_container->type_->getChild("MSG_PROCESS_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::get("send", type); + container_t process_container = simgrid::instr::Container::byName(instr_process_id(MSG_process_self(), str, len)); + simgrid::instr::Type* type = process_container->type_->byName("MSG_PROCESS_STATE"); + simgrid::instr::Value* val = simgrid::instr::Value::byName("send", type); new simgrid::instr::PushStateEvent(MSG_get_clock(), process_container, type, val); char key[INSTR_DEFAULT_STR_SIZE]; snprintf (key, INSTR_DEFAULT_STR_SIZE, "p%lld", task->counter); - type = PJ_type_get_root()->getChild("MSG_PROCESS_TASK_LINK"); + type = simgrid::instr::Type::getRootType()->byName("MSG_PROCESS_TASK_LINK"); new simgrid::instr::StartLinkEvent(MSG_get_clock(), PJ_container_get_root(), type, process_container, "SR", key); } @@ -149,8 +149,8 @@ void TRACE_msg_task_put_end() int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t process_container = PJ_container_get (instr_process_id(MSG_process_self(), str, len)); - simgrid::instr::Type* type = process_container->type_->getChild("MSG_PROCESS_STATE"); + container_t process_container = simgrid::instr::Container::byName(instr_process_id(MSG_process_self(), str, len)); + simgrid::instr::Type* type = process_container->type_->byName("MSG_PROCESS_STATE"); new simgrid::instr::PopStateEvent(MSG_get_clock(), process_container, type); } } diff --git a/src/msg/msg_gos.cpp b/src/msg/msg_gos.cpp index 3846e9e4fd..d6ef1f3e4c 100644 --- a/src/msg/msg_gos.cpp +++ b/src/msg/msg_gos.cpp @@ -270,7 +270,7 @@ msg_error_t MSG_task_receive_ext_bounded(msg_task_t * task, const char *alias, d /* Try to receive it by calling SIMIX network layer */ try { simcall_comm_recv(MSG_process_self()->getImpl(), mailbox->getImpl(), task, nullptr, nullptr, nullptr, nullptr, timeout, rate); - XBT_DEBUG("Got task %s from %s", (*task)->name, mailbox->getName()); + XBT_DEBUG("Got task %s from %s", (*task)->name, mailbox->getCname()); (*task)->simdata->setNotUsed(); } catch (xbt_ex& e) { diff --git a/src/msg/msg_io.cpp b/src/msg/msg_io.cpp index 592312a0e1..11de4c7453 100644 --- a/src/msg/msg_io.cpp +++ b/src/msg/msg_io.cpp @@ -358,7 +358,7 @@ msg_error_t MSG_file_rmove (msg_file_t file, msg_host_t host, const char* fullpa const char* MSG_storage_get_name(msg_storage_t storage) { xbt_assert((storage != nullptr), "Invalid parameters"); - return storage->getName(); + return storage->getCname(); } /** \ingroup msg_storage_management @@ -478,10 +478,11 @@ void *MSG_storage_get_data(msg_storage_t storage) xbt_dict_t MSG_storage_get_content(msg_storage_t storage) { std::map* content = storage->getContent(); - xbt_dict_t content_as_dict = xbt_dict_new_homogeneous(xbt_free_f); + // Note: ::operator delete is ok here (no destructor called) since the dict elements are of POD type sg_size_t. + xbt_dict_t content_as_dict = xbt_dict_new_homogeneous(::operator delete); for (auto const& entry : *content) { - sg_size_t* psize = static_cast(malloc(sizeof(sg_size_t))); + sg_size_t* psize = new sg_size_t; *psize = entry.second; xbt_dict_set(content_as_dict, entry.first.c_str(), psize, nullptr); } diff --git a/src/msg/msg_private.hpp b/src/msg/msg_private.hpp index e7d1ef9953..094dd62f4e 100644 --- a/src/msg/msg_private.hpp +++ b/src/msg/msg_private.hpp @@ -27,11 +27,12 @@ public: } /********************************* Task **************************************/ -typedef struct simdata_task { - ~simdata_task() +struct s_simdata_task_t { + ~s_simdata_task_t() { /* parallel tasks only */ - xbt_free(this->host_list); + delete[] this->host_list; + /* flops_parallel_amount and bytes_parallel_amount are automatically deleted in ~L07Action */ } void setUsed(); void setNotUsed() { this->isused = false; } @@ -57,7 +58,7 @@ typedef struct simdata_task { private: void reportMultipleUse() const; -} s_simdata_task_t; +}; /******************************* Process *************************************/ @@ -85,12 +86,12 @@ public: } /************************** Global variables ********************************/ -typedef struct MSG_Global { +struct s_MSG_Global_t { int debug_multiple_use; /* whether we want an error message when reusing the same Task for 2 things */ std::atomic_int_fast32_t sent_msg; /* Total amount of messages sent during the simulation */ void (*task_copy_callback)(msg_task_t task, msg_process_t src, msg_process_t dst); void_f_pvoid_t process_data_cleanup; -} s_MSG_Global_t; +}; typedef s_MSG_Global_t* MSG_Global_t; extern "C" { @@ -132,7 +133,7 @@ XBT_PRIVATE void TRACE_msg_process_sleep_in(msg_process_t process); // called fr XBT_PRIVATE void TRACE_msg_process_sleep_out(msg_process_t process); } -inline void simdata_task::setUsed() +inline void s_simdata_task_t::setUsed() { if (this->isused) this->reportMultipleUse(); diff --git a/src/msg/msg_process.cpp b/src/msg/msg_process.cpp index 465e4cffef..7f673f78fa 100644 --- a/src/msg/msg_process.cpp +++ b/src/msg/msg_process.cpp @@ -52,7 +52,8 @@ void MSG_process_cleanup_from_SIMIX(smx_actor_t smx_actor) /* This function creates a MSG process. It has the prototype enforced by SIMIX_function_register_process_create */ smx_actor_t MSG_process_create_from_SIMIX(const char* name, std::function code, void* data, sg_host_t host, - std::map* properties, smx_actor_t parent_process) + std::map* properties, + smx_actor_t /*parent_process*/) { msg_process_t p = MSG_process_create_from_stdfunc(name, std::move(code), data, host, properties); return p == nullptr ? nullptr : p->getImpl(); diff --git a/src/msg/msg_synchro.cpp b/src/msg/msg_synchro.cpp index 703fbee4a3..15c3ef80db 100644 --- a/src/msg/msg_synchro.cpp +++ b/src/msg/msg_synchro.cpp @@ -63,16 +63,16 @@ int MSG_sem_would_block(msg_sem_t sem) { } /*-**** barrier related functions ****-*/ -typedef struct s_msg_bar { +struct s_msg_bar_t { xbt_mutex_t mutex; xbt_cond_t cond; unsigned int arrived_processes; unsigned int expected_processes; -} s_msg_bar_t; +}; /** @brief Initializes a barrier, with count elements */ msg_bar_t MSG_barrier_init(unsigned int count) { - msg_bar_t bar = xbt_new0(s_msg_bar, 1); + msg_bar_t bar = new s_msg_bar_t; bar->expected_processes = count; bar->arrived_processes = 0; bar->mutex = xbt_mutex_init(); @@ -84,7 +84,7 @@ msg_bar_t MSG_barrier_init(unsigned int count) { void MSG_barrier_destroy(msg_bar_t bar) { xbt_mutex_destroy(bar->mutex); xbt_cond_destroy(bar->cond); - xbt_free(bar); + delete bar; } /** @brief Performs a barrier already initialized */ diff --git a/src/msg/msg_task.cpp b/src/msg/msg_task.cpp index 814282ba9f..0ad5499c38 100644 --- a/src/msg/msg_task.cpp +++ b/src/msg/msg_task.cpp @@ -5,6 +5,7 @@ #include "msg_private.hpp" #include "src/simix/smx_private.hpp" +#include extern "C" { @@ -18,7 +19,7 @@ extern "C" { XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_task, msg, "Logging specific to MSG (task)"); -void simdata_task::reportMultipleUse() const +void s_simdata_task_t::reportMultipleUse() const { if (msg_global->debug_multiple_use){ XBT_ERROR("This task is already used in there:"); @@ -49,7 +50,7 @@ void simdata_task::reportMultipleUse() const */ msg_task_t MSG_task_create(const char *name, double flop_amount, double message_size, void *data) { - msg_task_t task = xbt_new(s_msg_task_t, 1); + msg_task_t task = new s_msg_task_t; simdata_task_t simdata = new s_simdata_task_t(); task->simdata = simdata; @@ -90,12 +91,16 @@ msg_task_t MSG_parallel_task_create(const char *name, int host_nb, const msg_hos /* Simulator Data specific to parallel tasks */ simdata->host_nb = host_nb; - simdata->host_list = xbt_new0(sg_host_t, host_nb); - simdata->flops_parallel_amount = flops_amount; - simdata->bytes_parallel_amount = bytes_amount; - - for (int i = 0; i < host_nb; i++) - simdata->host_list[i] = host_list[i]; + simdata->host_list = new sg_host_t[host_nb]; + std::copy_n(host_list, host_nb, simdata->host_list); + if (flops_amount != nullptr) { + simdata->flops_parallel_amount = new double[host_nb]; + std::copy_n(flops_amount, host_nb, simdata->flops_parallel_amount); + } + if (bytes_amount != nullptr) { + simdata->bytes_parallel_amount = new double[host_nb * host_nb]; + std::copy_n(bytes_amount, host_nb * host_nb, simdata->bytes_parallel_amount); + } return task; } @@ -198,7 +203,7 @@ msg_error_t MSG_task_destroy(msg_task_t task) /* free main structures */ delete task->simdata; - xbt_free(task); + delete task; return MSG_OK; } diff --git a/src/msg/msg_vm.cpp b/src/msg/msg_vm.cpp index 50f0f47ffe..126d3d83dd 100644 --- a/src/msg/msg_vm.cpp +++ b/src/msg/msg_vm.cpp @@ -21,13 +21,12 @@ extern "C" { -struct dirty_page { +struct s_dirty_page { double prev_clock; double prev_remaining; msg_task_t task; }; -typedef struct dirty_page s_dirty_page; -typedef struct dirty_page* dirty_page_t; +typedef s_dirty_page* dirty_page_t; XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_vm, msg, "Cloud-oriented parts of the MSG API"); @@ -171,8 +170,8 @@ void MSG_vm_destroy(msg_vm_t vm) simgrid::simix::kernelImmediate([vm]() { vm->destroy(); }); if (TRACE_msg_vm_is_enabled()) { - container_t container = PJ_container_get(vm->getCname()); - PJ_container_remove_from_parent(container); + container_t container = simgrid::instr::Container::byName(vm->getName()); + container->removeFromParent(); delete container; } } @@ -186,9 +185,9 @@ void MSG_vm_start(msg_vm_t vm) { vm->start(); if (TRACE_msg_vm_is_enabled()) { - container_t vm_container = PJ_container_get(vm->getCname()); - simgrid::instr::Type* type = vm_container->type_->getChild("MSG_VM_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::get_or_new("start", "0 0 1", type); // start is blue + container_t vm_container = simgrid::instr::Container::byName(vm->getName()); + simgrid::instr::Type* type = vm_container->type_->byName("MSG_VM_STATE"); + simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate("start", "0 0 1", type); // start is blue new simgrid::instr::PushStateEvent(MSG_get_clock(), vm_container, type, val); } } @@ -242,7 +241,7 @@ static int migration_rx_fun(int argc, char *argv[]) XBT_DEBUG("mig: rx_start"); // The structure has been created in the do_migration function and should only be freed in the same place ;) - struct migration_session* ms = static_cast(MSG_process_get_data(MSG_process_self())); + migration_session* ms = static_cast(MSG_process_get_data(MSG_process_self())); bool received_finalize = false; @@ -295,22 +294,22 @@ static int migration_rx_fun(int argc, char *argv[]) counter++; // start link - container_t msg = PJ_container_get(vm->getCname()); - simgrid::instr::Type* type = PJ_type_get_root()->getChild("MSG_VM_LINK"); + container_t msg = simgrid::instr::Container::byName(vm->getName()); + simgrid::instr::Type* type = simgrid::instr::Type::getRootType()->byName("MSG_VM_LINK"); new simgrid::instr::StartLinkEvent(MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key); // destroy existing container of this vm - container_t existing_container = PJ_container_get(vm->getCname()); - PJ_container_remove_from_parent(existing_container); + container_t existing_container = simgrid::instr::Container::byName(vm->getName()); + existing_container->removeFromParent(); delete existing_container; // create new container on the new_host location new simgrid::instr::Container(vm->getCname(), simgrid::instr::INSTR_MSG_VM, - PJ_container_get(ms->dst_pm->getCname())); + simgrid::instr::Container::byName(ms->dst_pm->getName())); // end link - msg = PJ_container_get(vm->getCname()); - type = PJ_type_get_root()->getChild("MSG_VM_LINK"); + msg = simgrid::instr::Container::byName(vm->getName()); + type = simgrid::instr::Type::getRootType()->byName("MSG_VM_LINK"); new simgrid::instr::EndLinkEvent(MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key); } @@ -507,7 +506,7 @@ static int migration_tx_fun(int argc, char *argv[]) XBT_DEBUG("mig: tx_start"); // Note that the ms structure has been allocated in do_migration and hence should be freed in the same function ;) - migration_session *ms = static_cast(MSG_process_get_data(MSG_process_self())); + migration_session* ms = static_cast(MSG_process_get_data(MSG_process_self())); double host_speed = ms->vm->pimpl_vm_->getPm()->getSpeed(); s_vm_params_t params; @@ -706,7 +705,7 @@ void MSG_vm_migrate(msg_vm_t vm, msg_host_t dst_pm) vm->pimpl_vm_->isMigrating = true; - struct migration_session *ms = xbt_new(struct migration_session, 1); + migration_session* ms = xbt_new(migration_session, 1); ms->vm = vm; ms->src_pm = src_pm; ms->dst_pm = dst_pm; @@ -769,9 +768,9 @@ void MSG_vm_suspend(msg_vm_t vm) XBT_DEBUG("vm_suspend done"); if (TRACE_msg_vm_is_enabled()) { - container_t vm_container = PJ_container_get(vm->getCname()); - simgrid::instr::Type* type = vm_container->type_->getChild("MSG_VM_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::get_or_new("suspend", "1 0 0", type); // suspend is red + container_t vm_container = simgrid::instr::Container::byName(vm->getName()); + simgrid::instr::Type* type = vm_container->type_->byName("MSG_VM_STATE"); + simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate("suspend", "1 0 0", type); // suspend is red new simgrid::instr::PushStateEvent(MSG_get_clock(), vm_container, type, val); } } @@ -786,8 +785,8 @@ void MSG_vm_resume(msg_vm_t vm) vm->pimpl_vm_->resume(); if (TRACE_msg_vm_is_enabled()) { - container_t vm_container = PJ_container_get(vm->getCname()); - simgrid::instr::Type* type = vm_container->type_->getChild("MSG_VM_STATE"); + container_t vm_container = simgrid::instr::Container::byName(vm->getName()); + simgrid::instr::Type* type = vm_container->type_->byName("MSG_VM_STATE"); new simgrid::instr::PopStateEvent(MSG_get_clock(), vm_container, type); } } diff --git a/src/plugins/vm/VirtualMachineImpl.cpp b/src/plugins/vm/VirtualMachineImpl.cpp index 7122b9310e..f815594473 100644 --- a/src/plugins/vm/VirtualMachineImpl.cpp +++ b/src/plugins/vm/VirtualMachineImpl.cpp @@ -174,7 +174,7 @@ void VirtualMachineImpl::suspend(smx_actor_t issuer) if (getState() != SURF_VM_STATE_RUNNING) THROWF(vm_error, 0, "Cannot suspend VM %s: it is not running.", piface_->getCname()); if (issuer->host == piface_) - THROWF(vm_error, 0, "Actor %s cannot suspend the VM %s in which it runs", issuer->cname(), piface_->getCname()); + THROWF(vm_error, 0, "Actor %s cannot suspend the VM %s in which it runs", issuer->getCname(), piface_->getCname()); xbt_swag_t process_list = piface_->extension()->process_list; XBT_DEBUG("suspend VM(%s), where %d processes exist", piface_->getCname(), xbt_swag_size(process_list)); @@ -206,7 +206,7 @@ void VirtualMachineImpl::resume() smx_actor_t smx_process; smx_actor_t smx_process_safe; xbt_swag_foreach_safe(smx_process, smx_process_safe, process_list) { - XBT_DEBUG("resume %s", smx_process->cname()); + XBT_DEBUG("resume %s", smx_process->getCname()); smx_process->resume(); } @@ -247,8 +247,8 @@ void VirtualMachineImpl::shutdown(smx_actor_t issuer) smx_actor_t smx_process; smx_actor_t smx_process_safe; xbt_swag_foreach_safe(smx_process, smx_process_safe, process_list) { - XBT_DEBUG("kill %s@%s on behalf of %s which shutdown that VM.", smx_process->cname(), smx_process->host->getCname(), - issuer->cname()); + XBT_DEBUG("kill %s@%s on behalf of %s which shutdown that VM.", smx_process->getCname(), + smx_process->host->getCname(), issuer->getCname()); SIMIX_process_kill(smx_process, issuer); } diff --git a/src/plugins/vm/VirtualMachineImpl.hpp b/src/plugins/vm/VirtualMachineImpl.hpp index 79c3affb1d..fbc0483632 100644 --- a/src/plugins/vm/VirtualMachineImpl.hpp +++ b/src/plugins/vm/VirtualMachineImpl.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2004-2016. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2004-2017. 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. */ @@ -16,7 +16,7 @@ #define GUESTOS_NOISE 100 // This value corresponds to the cost of the global action associated to the VM // It corresponds to the cost of a VM running no tasks. -typedef struct dirty_page* dirty_page_t; +typedef struct s_dirty_page* dirty_page_t; namespace simgrid { namespace vm { diff --git a/src/plugins/vm/s4u_VirtualMachine.cpp b/src/plugins/vm/s4u_VirtualMachine.cpp index d6369ee52c..8e74223a10 100644 --- a/src/plugins/vm/s4u_VirtualMachine.cpp +++ b/src/plugins/vm/s4u_VirtualMachine.cpp @@ -32,7 +32,7 @@ VirtualMachine::VirtualMachine(const char* name, s4u::Host* pm, int coreAmount) extension_set(new simgrid::simix::Host()); if (TRACE_msg_vm_is_enabled()) { - container_t host_container = PJ_container_get(pm->getCname()); + container_t host_container = simgrid::instr::Container::byName(pm->getName()); new simgrid::instr::Container(name, simgrid::instr::INSTR_MSG_VM, host_container); } } diff --git a/src/s4u/s4u_actor.cpp b/src/s4u/s4u_actor.cpp index 99b431dc53..1553bb9313 100644 --- a/src/s4u/s4u_actor.cpp +++ b/src/s4u/s4u_actor.cpp @@ -85,14 +85,14 @@ void Actor::daemonize() simgrid::simix::kernelImmediate([this]() { pimpl_->daemonize(); }); } -const char* Actor::getCname() +const simgrid::xbt::string& Actor::getName() const { - return this->pimpl_->name.c_str(); + return this->pimpl_->getName(); } -simgrid::xbt::string Actor::getName() +const char* Actor::getCname() const { - return this->pimpl_->name; + return this->pimpl_->getCname(); } aid_t Actor::getPid() @@ -275,7 +275,12 @@ aid_t getPpid() std::string getName() { - return SIMIX_process_self()->name; + return SIMIX_process_self()->getName(); +} + +const char* getCname() +{ + return SIMIX_process_self()->getCname(); } Host* getHost() diff --git a/src/s4u/s4u_engine.cpp b/src/s4u/s4u_engine.cpp index 783ed43c4a..39e5922c4e 100644 --- a/src/s4u/s4u_engine.cpp +++ b/src/s4u/s4u_engine.cpp @@ -48,8 +48,9 @@ Engine::~Engine() Engine* Engine::getInstance() { if (s4u::Engine::instance_ == nullptr) - new Engine(0,nullptr); - return s4u::Engine::instance_; + return new Engine(0, nullptr); + else + return s4u::Engine::instance_; } void Engine::shutdown() { @@ -142,15 +143,15 @@ void Engine::getNetpointList(std::vector* l /** @brief Register a new netpoint to the system */ void Engine::netpointRegister(simgrid::kernel::routing::NetPoint* point) { -// simgrid::simix::kernelImmediate([&]{ FIXME: this segfaults in set_thread - pimpl->netpoints_[point->name()] = point; -// }); + // simgrid::simix::kernelImmediate([&]{ FIXME: this segfaults in set_thread + pimpl->netpoints_[point->getName()] = point; + // }); } /** @brief Unregister a given netpoint */ void Engine::netpointUnregister(simgrid::kernel::routing::NetPoint* point) { simgrid::simix::kernelImmediate([this, point] { - pimpl->netpoints_.erase(point->name()); + pimpl->netpoints_.erase(point->getName()); delete point; }); } diff --git a/src/s4u/s4u_host.cpp b/src/s4u/s4u_host.cpp index 904b950f76..b4245edaa0 100644 --- a/src/s4u/s4u_host.cpp +++ b/src/s4u/s4u_host.cpp @@ -169,7 +169,7 @@ void Host::routeTo(Host* dest, std::vector* links, double* late XBT_CDEBUG(surf_route, "Route from '%s' to '%s' (latency: %f):", getCname(), dest->getCname(), (latency == nullptr ? -1 : *latency)); for (auto const& link : *links) - XBT_CDEBUG(surf_route, "Link %s", link->cname()); + XBT_CDEBUG(surf_route, "Link %s", link->getCname()); } } diff --git a/src/s4u/s4u_link.cpp b/src/s4u/s4u_link.cpp index 24561ffe1c..c640077613 100644 --- a/src/s4u/s4u_link.cpp +++ b/src/s4u/s4u_link.cpp @@ -21,7 +21,7 @@ extern "C" { const char* sg_link_name(sg_link_t link) { - return link->name(); + return link->getCname(); } sg_link_t sg_link_by_name(const char* name) { @@ -82,9 +82,17 @@ Link* Link::byName(const char* name) return nullptr; return &res->piface_; } +const std::string& Link::getName() const +{ + return this->pimpl_->getName(); +} +const char* Link::getCname() const +{ + return this->pimpl_->getCname(); +} const char* Link::name() { - return this->pimpl_->cname(); + return getCname(); } bool Link::isUsed() { diff --git a/src/s4u/s4u_mailbox.cpp b/src/s4u/s4u_mailbox.cpp index 5a594bcbb7..32ab0bb99c 100644 --- a/src/s4u/s4u_mailbox.cpp +++ b/src/s4u/s4u_mailbox.cpp @@ -16,9 +16,14 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_channel,s4u,"S4U Communication Mailboxes"); namespace simgrid { namespace s4u { -const char* Mailbox::getName() +const simgrid::xbt::string& Mailbox::getName() const { - return pimpl_->name_; + return pimpl_->getName(); +} + +const char* Mailbox::getCname() const +{ + return pimpl_->getCname(); } MailboxPtr Mailbox::byName(const char*name) diff --git a/src/s4u/s4u_netzone.cpp b/src/s4u/s4u_netzone.cpp index 0dc3a43ffb..2675596338 100644 --- a/src/s4u/s4u_netzone.cpp +++ b/src/s4u/s4u_netzone.cpp @@ -63,7 +63,7 @@ std::vector* NetZone::getChildren() { return children_; } -const char* NetZone::getCname() +const char* NetZone::getCname() const { return name_.c_str(); } @@ -75,7 +75,7 @@ NetZone* NetZone::getFather() void NetZone::getHosts(std::vector* whereto) { for (auto const& card : vertices_) { - s4u::Host* host = simgrid::s4u::Host::by_name_or_null(card->name()); + s4u::Host* host = simgrid::s4u::Host::by_name_or_null(card->getName()); if (host != nullptr) whereto->push_back(host); } diff --git a/src/s4u/s4u_storage.cpp b/src/s4u/s4u_storage.cpp index 092afea5ef..c3066bd3a6 100644 --- a/src/s4u/s4u_storage.cpp +++ b/src/s4u/s4u_storage.cpp @@ -30,9 +30,14 @@ Storage* Storage::byName(std::string name) return &res->piface_; } -const char* Storage::getName() +const std::string& Storage::getName() const { - return pimpl_->cname(); + return pimpl_->getName(); +} + +const char* Storage::getCname() const +{ + return pimpl_->getCname(); } const char* Storage::getType() diff --git a/src/simdag/sd_daxloader.cpp b/src/simdag/sd_daxloader.cpp index d061716cc8..409caeec7a 100644 --- a/src/simdag/sd_daxloader.cpp +++ b/src/simdag/sd_daxloader.cpp @@ -14,11 +14,8 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_daxparse, sd, "Parsing DAX files"); extern "C" { -# undef CLEANUP -# include "dax_dtd.h" -# define register /* g++ don't like register, so don't say it */ -# include "dax_dtd.c" -# undef register +#include "dax_dtd.h" +#include "dax_dtd.c" } /* Ensure that transfer tasks have unique names even though a file is used several times */ diff --git a/src/simdag/sd_task.cpp b/src/simdag/sd_task.cpp index 978bb6b1ba..84b9b74997 100644 --- a/src/simdag/sd_task.cpp +++ b/src/simdag/sd_task.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2006-2016. The SimGrid Team. +/* Copyright (c) 2006-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -7,6 +7,7 @@ #include "simdag_private.hpp" #include "src/surf/HostImpl.hpp" #include "src/surf/surf_interface.hpp" +#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_task, sd, "Logging specific to SimDag (task)"); @@ -798,20 +799,16 @@ void SD_task_run(SD_task_t task) /* Copy the elements of the task into the action */ int host_nb = task->allocation->size(); - sg_host_t *hosts = xbt_new(sg_host_t, host_nb); - int i =0; - for (auto const& host : *task->allocation) { - hosts[i] = host; - i++; - } + sg_host_t* hosts = new sg_host_t[host_nb]; + std::copy_n(task->allocation->begin(), host_nb, hosts); - double *flops_amount = xbt_new0(double, host_nb); - double *bytes_amount = xbt_new0(double, host_nb * host_nb); + double* flops_amount = new double[host_nb](); + double* bytes_amount = new double[host_nb * host_nb](); if(task->flops_amount) - memcpy(flops_amount, task->flops_amount, sizeof(double) * host_nb); + std::copy_n(task->flops_amount, host_nb, flops_amount); if(task->bytes_amount) - memcpy(bytes_amount, task->bytes_amount, sizeof(double) * host_nb * host_nb); + std::copy_n(task->bytes_amount, host_nb * host_nb, bytes_amount); task->surf_action = surf_host_model->executeParallelTask(host_nb, hosts, flops_amount, bytes_amount, task->rate); @@ -973,12 +970,12 @@ void SD_task_schedulev(SD_task_t task, int count, const sg_host_t * list) void SD_task_schedulel(SD_task_t task, int count, ...) { va_list ap; - sg_host_t *list = xbt_new(sg_host_t, count); + sg_host_t* list = new sg_host_t[count]; va_start(ap, count); for (int i=0; igetMountedStorages()) { const char* mount_name = elm.first.c_str(); sg_storage_t storage = elm.second; - xbt_dict_set(res, mount_name, (void*)storage->getName(), nullptr); + xbt_dict_set(res, mount_name, (void*)storage->getCname(), nullptr); } return res; diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index 61355a11a0..40e0f17a51 100644 --- a/src/simix/ActorImpl.cpp +++ b/src/simix/ActorImpl.cpp @@ -169,7 +169,7 @@ void ActorImpl::daemonize() simgrid::s4u::Actor* ActorImpl::restart() { - XBT_DEBUG("Restarting process %s on %s", cname(), host->getCname()); + XBT_DEBUG("Restarting process %s on %s", getCname(), host->getCname()); // retrieve the arguments of the old process // FIXME: Factorize this with SIMIX_host_add_auto_restart_process ? @@ -346,12 +346,12 @@ smx_actor_t SIMIX_process_create(const char* name, std::function code, v /* Now insert it in the global process list and in the process to run list */ simix_global->process_list[process->pid] = process; - XBT_DEBUG("Inserting %s(%s) in the to_run list", process->cname(), host->getCname()); + XBT_DEBUG("Inserting %s(%s) in the to_run list", process->getCname(), host->getCname()); simix_global->process_to_run.push_back(process); intrusive_ptr_add_ref(process); /* Tracing the process creation */ - TRACE_msg_process_create(process->cname(), process->pid, process->host); + TRACE_msg_process_create(process->getCname(), process->pid, process->host); return process; } @@ -410,11 +410,11 @@ smx_actor_t SIMIX_process_attach(const char* name, void* data, const char* hostn /* Now insert it in the global process list and in the process to run list */ simix_global->process_list[process->pid] = process; - XBT_DEBUG("Inserting %s(%s) in the to_run list", process->cname(), host->getCname()); + XBT_DEBUG("Inserting %s(%s) in the to_run list", process->getCname(), host->getCname()); simix_global->process_to_run.push_back(process); /* Tracing the process creation */ - TRACE_msg_process_create(process->cname(), process->pid, process->host); + TRACE_msg_process_create(process->getCname(), process->pid, process->host); auto context = dynamic_cast(process->context); if (not context) @@ -464,7 +464,7 @@ void SIMIX_process_runall() */ void SIMIX_process_kill(smx_actor_t process, smx_actor_t issuer) { - XBT_DEBUG("Killing process %s@%s", process->cname(), process->host->getCname()); + XBT_DEBUG("Killing process %s@%s", process->getCname(), process->host->getCname()); process->context->iwannadie = 1; process->blocked = 0; @@ -718,7 +718,7 @@ void SIMIX_process_sleep_destroy(smx_activity_t synchro) */ void SIMIX_process_yield(smx_actor_t self) { - XBT_DEBUG("Yield actor '%s'", self->cname()); + XBT_DEBUG("Yield actor '%s'", self->getCname()); /* Go into sleep and return control to maestro */ self->context->suspend(); @@ -738,11 +738,11 @@ void SIMIX_process_yield(smx_actor_t self) SIMIX_process_on_exit_runall(self); /* Add the process to the list of process to restart, only if the host is down */ if (self->auto_restart && self->host->isOff()) { - SIMIX_host_add_auto_restart_process(self->host, self->cname(), self->code, self->userdata, + SIMIX_host_add_auto_restart_process(self->host, self->getCname(), self->code, self->userdata, SIMIX_timer_get_date(self->kill_timer), self->getProperties(), self->auto_restart); } - XBT_DEBUG("Process %s@%s is dead", self->cname(), self->host->getCname()); + XBT_DEBUG("Process %s@%s is dead", self->getCname(), self->host->getCname()); self->context->stop(); } diff --git a/src/simix/ActorImpl.hpp b/src/simix/ActorImpl.hpp index 5e9b5c27c8..cbe2eb9130 100644 --- a/src/simix/ActorImpl.hpp +++ b/src/simix/ActorImpl.hpp @@ -13,10 +13,10 @@ #include #include -typedef struct s_smx_process_exit_fun { +struct s_smx_process_exit_fun_t { int_f_pvoid_pvoid_t fun; void *arg; -} s_smx_process_exit_fun_t; +}; typedef s_smx_process_exit_fun_t* smx_process_exit_fun_t; namespace simgrid { @@ -47,7 +47,8 @@ public: aid_t pid = 0; aid_t ppid = -1; simgrid::xbt::string name; - const char* cname() { return name.c_str(); } + const simgrid::xbt::string& getName() const { return name; } + const char* getCname() const { return name.c_str(); } s4u::Host* host = nullptr; /* the host on which the process is running */ smx_context_t context = nullptr; /* the context (uctx/raw/thread) that executes the user function */ diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index cb14efd423..6ba3e713b3 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -35,7 +35,7 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix); void simcall_call(smx_actor_t actor) { if (actor != simix_global->maestro_process) { - XBT_DEBUG("Yield actor '%s' on simcall %s (%d)", actor->cname(), SIMIX_simcall_name(actor->simcall.call), + XBT_DEBUG("Yield actor '%s' on simcall %s (%d)", actor->getCname(), SIMIX_simcall_name(actor->simcall.call), (int)actor->simcall.call); SIMIX_process_yield(actor); } else { @@ -242,7 +242,7 @@ void simcall_process_set_kill_time(smx_actor_t process, double kill_time) if (kill_time <= SIMIX_get_clock() || simix_global->kill_process_function == nullptr) return; - XBT_DEBUG("Set kill time %f for process %s@%s", kill_time, process->cname(), process->host->getCname()); + XBT_DEBUG("Set kill time %f for process %s@%s", kill_time, process->getCname(), process->host->getCname()); process->kill_timer = SIMIX_timer_set(kill_time, [process] { simix_global->kill_process_function(process); process->kill_timer=nullptr; diff --git a/src/simix/popping_private.hpp b/src/simix/popping_private.hpp index d6c0a5c354..e0c200a3d6 100644 --- a/src/simix/popping_private.hpp +++ b/src/simix/popping_private.hpp @@ -52,8 +52,8 @@ struct s_smx_simcall { smx_actor_t issuer; smx_timer_t timer; int mc_value; - union u_smx_scalar args[11]; - union u_smx_scalar result; + u_smx_scalar args[11]; + u_smx_scalar result; }; #define SIMCALL_SET_MC_VALUE(simcall, value) ((simcall)->mc_value = (value)) @@ -186,6 +186,7 @@ template inline typename std::remove_reference::type unmarshal_raw( template inline void marshalArgs(smx_simcall_t simcall) { + /* Nothing to do when no args */ } template inline void marshalArgs(smx_simcall_t simcall, A const& a) diff --git a/src/simix/smx_global.cpp b/src/simix/smx_global.cpp index d01e0f8cb3..d6124367cc 100644 --- a/src/simix/smx_global.cpp +++ b/src/simix/smx_global.cpp @@ -53,15 +53,15 @@ std::unique_ptr simix_global; static xbt_heap_t simix_timers = nullptr; /** @brief Timer datatype */ -typedef class s_smx_timer { +class s_smx_timer_t { double date = 0.0; - s_smx_timer() = default; + s_smx_timer_t() = default; public: simgrid::xbt::Task callback; double getDate() { return date; } - s_smx_timer(double date, simgrid::xbt::Task callback) : date(date), callback(std::move(callback)) {} -} s_smx_timer_t; + s_smx_timer_t(double date, simgrid::xbt::Task callback) : date(date), callback(std::move(callback)) {} +}; void (*SMPI_switch_data_segment)(int) = nullptr; @@ -235,8 +235,8 @@ void SIMIX_global_init(int *argc, char **argv) }); simgrid::surf::storageCreatedCallbacks.connect([](simgrid::surf::StorageImpl* storage) { - sg_storage_t s = simgrid::s4u::Storage::byName(storage->cname()); - xbt_assert(s != nullptr, "Storage not found for name %s", storage->cname()); + sg_storage_t s = simgrid::s4u::Storage::byName(storage->getCname()); + xbt_assert(s != nullptr, "Storage not found for name %s", storage->getCname()); }); } @@ -264,6 +264,15 @@ void SIMIX_clean() if (smx_cleaned) return; // to avoid double cleaning by java and C + smx_cleaned = 1; + XBT_DEBUG("SIMIX_clean called. Simulation's over."); + if (not simix_global->process_to_run.empty() && SIMIX_get_clock() <= 0.0) { + XBT_CRITICAL(" "); + XBT_CRITICAL("The time is still 0, and you still have processes ready to run."); + XBT_CRITICAL("It seems that you forgot to run the simulation that you setup."); + xbt_die("Bailing out to avoid that stop-before-start madness. Please fix your code."); + } + #if HAVE_SMPI if (SIMIX_process_count()>0){ if(smpi_process()->initialized()){ @@ -275,14 +284,6 @@ void SIMIX_clean() } #endif - smx_cleaned = 1; - XBT_DEBUG("SIMIX_clean called. Simulation's over."); - if (not simix_global->process_to_run.empty() && SIMIX_get_clock() <= 0.0) { - XBT_CRITICAL(" "); - XBT_CRITICAL("The time is still 0, and you still have processes ready to run."); - XBT_CRITICAL("It seems that you forgot to run the simulation that you setup."); - xbt_die("Bailing out to avoid that stop-before-start madness. Please fix your code."); - } /* Kill all processes (but maestro) */ SIMIX_process_killall(simix_global->maestro_process, 1); SIMIX_context_runall(); @@ -497,7 +498,7 @@ void SIMIX_run() /* If only daemon processes remain, cancel their actions, mark them to die and reschedule them */ if (simix_global->process_list.size() == simix_global->daemons.size()) for (auto const& dmon : simix_global->daemons) { - XBT_DEBUG("Kill %s", dmon->cname()); + XBT_DEBUG("Kill %s", dmon->getCname()); SIMIX_process_kill(dmon, simix_global->maestro_process); } } @@ -653,11 +654,11 @@ void SIMIX_display_process_status() synchro_description = "I/O"; XBT_INFO("Process %lu (%s@%s): waiting for %s synchro %p (%s) in state %d to finish", process->pid, - process->cname(), process->host->getCname(), synchro_description, process->waiting_synchro.get(), + process->getCname(), process->host->getCname(), synchro_description, process->waiting_synchro.get(), process->waiting_synchro->name.c_str(), (int)process->waiting_synchro->state); } else { - XBT_INFO("Process %lu (%s@%s)", process->pid, process->cname(), process->host->getCname()); + XBT_INFO("Process %lu (%s@%s)", process->pid, process->getCname(), process->host->getCname()); } } } diff --git a/src/simix/smx_host.cpp b/src/simix/smx_host.cpp index 855b4912d8..6565a4a751 100644 --- a/src/simix/smx_host.cpp +++ b/src/simix/smx_host.cpp @@ -10,6 +10,7 @@ #include "src/plugins/vm/VirtualMachineImpl.hpp" #include "src/surf/surf_interface.hpp" #include "xbt/ex.hpp" +#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_host, simix, "SIMIX hosts"); @@ -81,8 +82,8 @@ void SIMIX_host_off(sg_host_t h, smx_actor_t issuer) smx_actor_t process = nullptr; xbt_swag_foreach(process, host->process_list) { SIMIX_process_kill(process, issuer); - XBT_DEBUG("Killing %s@%s on behalf of %s which turned off that host.", process->cname(), - process->host->getCname(), issuer->cname()); + XBT_DEBUG("Killing %s@%s on behalf of %s which turned off that host.", process->getCname(), + process->host->getCname(), issuer->getCname()); } } } else { @@ -191,11 +192,6 @@ SIMIX_execution_parallel_start(const char* name, int host_nb, sg_host_t* host_li simgrid::kernel::activity::ExecImplPtr exec = simgrid::kernel::activity::ExecImplPtr(new simgrid::kernel::activity::ExecImpl(name, nullptr)); - /* set surf's synchro */ - sg_host_t *host_list_cpy = xbt_new0(sg_host_t, host_nb); - for (int i = 0; i < host_nb; i++) - host_list_cpy[i] = host_list[i]; - /* Check that we are not mixing VMs and PMs in the parallel task */ bool is_a_vm = (nullptr != dynamic_cast(host_list[0])); for (int i = 1; i < host_nb; i++) { @@ -205,6 +201,9 @@ SIMIX_execution_parallel_start(const char* name, int host_nb, sg_host_t* host_li /* set surf's synchro */ if (not MC_is_active() && not MC_record_replay_is_active()) { + /* set surf's synchro */ + sg_host_t* host_list_cpy = new sg_host_t[host_nb]; + std::copy_n(host_list, host_nb, host_list_cpy); exec->surf_exec = surf_host_model->executeParallelTask(host_nb, host_list_cpy, flops_amount, bytes_amount, rate); exec->surf_exec->setData(exec.get()); if (timeout > 0) { diff --git a/src/simix/smx_network.cpp b/src/simix/smx_network.cpp index e75e0b455f..ea85a581f3 100644 --- a/src/simix/smx_network.cpp +++ b/src/simix/smx_network.cpp @@ -84,7 +84,7 @@ XBT_PRIVATE void simcall_HANDLER_comm_send(smx_simcall_t simcall, smx_actor_t sr simcall_HANDLER_comm_wait(simcall, comm, timeout); } XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_isend( - smx_simcall_t simcall, smx_actor_t src_proc, smx_mailbox_t mbox, double task_size, double rate, void* src_buff, + smx_simcall_t /*simcall*/, smx_actor_t src_proc, smx_mailbox_t mbox, double task_size, double rate, void* src_buff, size_t src_buff_size, int (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), void (*clean_fun)(void*), // used to free the synchro in case of problem after a detached send void (*copy_data_fun)(smx_activity_t, void*, size_t), // used to copy data if not default one @@ -163,8 +163,8 @@ XBT_PRIVATE void simcall_HANDLER_comm_recv(smx_simcall_t simcall, smx_actor_t re simcall_HANDLER_comm_wait(simcall, comm, timeout); } -XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_irecv(smx_simcall_t simcall, smx_actor_t receiver, smx_mailbox_t mbox, - void* dst_buff, size_t* dst_buff_size, +XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_irecv(smx_simcall_t /*simcall*/, smx_actor_t receiver, + smx_mailbox_t mbox, void* dst_buff, size_t* dst_buff_size, simix_match_func_t match_fun, void (*copy_data_fun)(smx_activity_t, void*, size_t), void* data, double rate) @@ -476,11 +476,11 @@ static inline void SIMIX_comm_start(simgrid::kernel::activity::CommImplPtr comm) if (comm->src_proc->isSuspended()) XBT_DEBUG("The communication is suspended on startup because src (%s@%s) was suspended since it initiated the " "communication", - comm->src_proc->cname(), comm->src_proc->host->getCname()); + comm->src_proc->getCname(), comm->src_proc->host->getCname()); else XBT_DEBUG("The communication is suspended on startup because dst (%s@%s) was suspended since it initiated the " "communication", - comm->dst_proc->cname(), comm->dst_proc->host->getCname()); + comm->dst_proc->getCname(), comm->dst_proc->host->getCname()); comm->surf_comm->suspend(); } @@ -562,7 +562,7 @@ void SIMIX_comm_finish(smx_activity_t synchro) XBT_DEBUG("Link failure in synchro %p between '%s' and '%s': posting an exception to the issuer: %s (%p) " "detached:%d", synchro.get(), comm->src_proc ? comm->src_proc->host->getCname() : nullptr, - comm->dst_proc ? comm->dst_proc->host->getCname() : nullptr, simcall->issuer->cname(), + comm->dst_proc ? comm->dst_proc->host->getCname() : nullptr, simcall->issuer->getCname(), simcall->issuer, comm->detached); if (comm->src_proc == simcall->issuer) { XBT_DEBUG("I'm source"); diff --git a/src/simix/smx_synchro.cpp b/src/simix/smx_synchro.cpp index be7ca2fbbe..78c4935667 100644 --- a/src/simix/smx_synchro.cpp +++ b/src/simix/smx_synchro.cpp @@ -168,7 +168,7 @@ void MutexImpl::unlock(smx_actor_t issuer) /* If the mutex is not owned by the issuer, that's not good */ if (issuer != this->owner) THROWF(mismatch_error, 0, "Cannot release that mutex: it was locked by %s (pid:%lu), not by you.", - this->owner->cname(), this->owner->pid); + this->owner->getCname(), this->owner->pid); if (xbt_swag_size(this->sleeping) > 0) { /*process to wake up */ @@ -232,7 +232,7 @@ smx_cond_t SIMIX_cond_init() { XBT_IN("()"); simgrid::simix::ActorImpl p; - smx_cond_t cond = new s_smx_cond(); + smx_cond_t cond = new s_smx_cond_t(); cond->sleeping = xbt_swag_new(xbt_swag_offset(p, synchro_hookup)); cond->refcount_ = 1; XBT_OUT(); @@ -386,7 +386,7 @@ smx_sem_t SIMIX_sem_init(unsigned int value) XBT_IN("(%u)",value); simgrid::simix::ActorImpl p; - smx_sem_t sem = xbt_new0(s_smx_sem_t, 1); + smx_sem_t sem = new s_smx_sem_t; sem->sleeping = xbt_swag_new(xbt_swag_offset(p, synchro_hookup)); sem->value = value; XBT_OUT(); @@ -402,7 +402,7 @@ void SIMIX_sem_destroy(smx_sem_t sem) xbt_assert(xbt_swag_size(sem->sleeping) == 0, "Cannot destroy semaphore since someone is still using it"); xbt_swag_free(sem->sleeping); - xbt_free(sem); + delete sem; } XBT_OUT(); } diff --git a/src/simix/smx_synchro_private.hpp b/src/simix/smx_synchro_private.hpp index 8eb66a5bcb..734998207d 100644 --- a/src/simix/smx_synchro_private.hpp +++ b/src/simix/smx_synchro_private.hpp @@ -52,19 +52,19 @@ private: } } -typedef struct s_smx_cond { - s_smx_cond() : cond_(this) {} +struct s_smx_cond_t { + s_smx_cond_t() : cond_(this) {} std::atomic_int_fast32_t refcount_{1}; smx_mutex_t mutex = nullptr; xbt_swag_t sleeping = nullptr; /* list of sleeping process */ simgrid::s4u::ConditionVariable cond_; -} s_smx_cond_t; +}; -typedef struct s_smx_sem { +struct s_smx_sem_t { unsigned int value; xbt_swag_t sleeping; /* list of sleeping process */ -} s_smx_sem_t; +}; XBT_PRIVATE void SIMIX_post_synchro(smx_activity_t synchro); XBT_PRIVATE void SIMIX_synchro_stop_waiting(smx_actor_t process, smx_simcall_t simcall); diff --git a/src/smpi/bindings/smpi_pmpi_request.cpp b/src/smpi/bindings/smpi_pmpi_request.cpp index ac91c2d200..81dbe1baa5 100644 --- a/src/smpi/bindings/smpi_pmpi_request.cpp +++ b/src/smpi/bindings/smpi_pmpi_request.cpp @@ -650,13 +650,13 @@ int PMPI_Waitany(int count, MPI_Request requests[], int *index, MPI_Status * sta smpi_bench_end(); //save requests information for tracing - typedef struct { + struct savedvalstype { int src; int dst; int recv; int tag; MPI_Comm comm; - } savedvalstype; + }; savedvalstype* savedvals = xbt_new0(savedvalstype, count); for (int i = 0; i < count; i++) { @@ -696,14 +696,14 @@ int PMPI_Waitall(int count, MPI_Request requests[], MPI_Status status[]) { smpi_bench_end(); //save information from requests - typedef struct { + struct savedvalstype { int src; int dst; int recv; int tag; int valid; MPI_Comm comm; - } savedvalstype; + }; savedvalstype* savedvals=xbt_new0(savedvalstype, count); for (int i = 0; i < count; i++) { diff --git a/src/smpi/colls/allgatherv/allgatherv-ompi-bruck.cpp b/src/smpi/colls/allgatherv/allgatherv-ompi-bruck.cpp index 2c170ed603..d57fd3f633 100644 --- a/src/smpi/colls/allgatherv/allgatherv-ompi-bruck.cpp +++ b/src/smpi/colls/allgatherv/allgatherv-ompi-bruck.cpp @@ -89,8 +89,6 @@ int Coll_allgatherv_ompi_bruck::allgatherv(void *sbuf, int scount, { int sendto, recvfrom, blockcount, i; unsigned int distance; - int *new_rcounts = NULL, *new_rdispls = NULL; - int *new_scounts = NULL, *new_sdispls = NULL; ptrdiff_t slb, rlb, sext, rext; char *tmpsend = NULL, *tmprecv = NULL; MPI_Datatype new_rdtype = MPI_DATATYPE_NULL, new_sdtype = MPI_DATATYPE_NULL; @@ -126,10 +124,10 @@ int Coll_allgatherv_ompi_bruck::allgatherv(void *sbuf, int scount, - blockcount doubles until the last step when only the remaining data is exchanged. */ - new_rcounts = (int*) calloc(4*size, sizeof(int)); - new_rdispls = new_rcounts + size; - new_scounts = new_rdispls + size; - new_sdispls = new_scounts + size; + int* new_rcounts = new int[4 * size]; + int* new_rdispls = new_rcounts + size; + int* new_scounts = new_rdispls + size; + int* new_sdispls = new_scounts + size; for (distance = 1; distance < size; distance<<=1) { @@ -170,7 +168,7 @@ int Coll_allgatherv_ompi_bruck::allgatherv(void *sbuf, int scount, } - free(new_rcounts); + delete[] new_rcounts; return MPI_SUCCESS; diff --git a/src/smpi/colls/allreduce/allreduce-rab2.cpp b/src/smpi/colls/allreduce/allreduce-rab2.cpp index 487854c724..6978a46f7d 100644 --- a/src/smpi/colls/allreduce/allreduce-rab2.cpp +++ b/src/smpi/colls/allreduce/allreduce-rab2.cpp @@ -23,7 +23,7 @@ int Coll_allreduce_rab2::allreduce(void *sbuff, void *rbuff, MPI_User_function * uop = MPIR_Op_table[op % 16 - 1]; #else MPI_User_function *uop; - struct MPIR_OP *op_ptr; + MPIR_OP *op_ptr; op_ptr = MPIR_ToPointer(op); uop = op_ptr->op; #endif diff --git a/src/smpi/colls/allreduce/allreduce-rdb.cpp b/src/smpi/colls/allreduce/allreduce-rdb.cpp index e1f85a758b..a7ee1d169d 100644 --- a/src/smpi/colls/allreduce/allreduce-rdb.cpp +++ b/src/smpi/colls/allreduce/allreduce-rdb.cpp @@ -21,7 +21,7 @@ int Coll_allreduce_rdb::allreduce(void *sbuff, void *rbuff, int count, MPI_User_function * uop = MPIR_Op_table[op % 16 - 1]; #else MPI_User_function *uop; - struct MPIR_OP *op_ptr; + MPIR_OP *op_ptr; op_ptr = MPIR_ToPointer(op); uop = op_ptr->op; #endif diff --git a/src/smpi/colls/allreduce/allreduce-smp-rdb.cpp b/src/smpi/colls/allreduce/allreduce-smp-rdb.cpp index 5c96b6296a..e94211af5d 100644 --- a/src/smpi/colls/allreduce/allreduce-smp-rdb.cpp +++ b/src/smpi/colls/allreduce/allreduce-smp-rdb.cpp @@ -49,7 +49,7 @@ int Coll_allreduce_smp_rdb::allreduce(void *send_buf, void *recv_buf, int count, MPI_User_function * uop = MPIR_Op_table[op % 16 - 1]; #else MPI_User_function *uop; - struct MPIR_OP *op_ptr; + MPIR_OP *op_ptr; op_ptr = MPIR_ToPointer(op); uop = op_ptr->op; #endif diff --git a/src/smpi/colls/allreduce/allreduce-smp-rsag-lr.cpp b/src/smpi/colls/allreduce/allreduce-smp-rsag-lr.cpp index 72eba89448..4b9b0cff29 100644 --- a/src/smpi/colls/allreduce/allreduce-smp-rsag-lr.cpp +++ b/src/smpi/colls/allreduce/allreduce-smp-rsag-lr.cpp @@ -37,7 +37,7 @@ int Coll_allreduce_smp_rsag_lr::allreduce(void *send_buf, void *recv_buf, MPI_User_function * uop = MPIR_Op_table[op % 16 - 1]; #else MPI_User_function *uop; - struct MPIR_OP *op_ptr; + MPIR_OP *op_ptr; op_ptr = MPIR_ToPointer(op); uop = op_ptr->op; #endif diff --git a/src/smpi/colls/allreduce/allreduce-smp-rsag.cpp b/src/smpi/colls/allreduce/allreduce-smp-rsag.cpp index 7176495459..c86b16abc4 100644 --- a/src/smpi/colls/allreduce/allreduce-smp-rsag.cpp +++ b/src/smpi/colls/allreduce/allreduce-smp-rsag.cpp @@ -36,7 +36,7 @@ int Coll_allreduce_smp_rsag::allreduce(void *send_buf, void *recv_buf, MPI_User_function * uop = MPIR_Op_table[op % 16 - 1]; #else MPI_User_function *uop; - struct MPIR_OP *op_ptr; + MPIR_OP *op_ptr; op_ptr = MPIR_ToPointer(op); uop = op_ptr->op; #endif diff --git a/src/smpi/colls/barrier/barrier-ompi.cpp b/src/smpi/colls/barrier/barrier-ompi.cpp index 727febc25d..0f4eec52f9 100644 --- a/src/smpi/colls/barrier/barrier-ompi.cpp +++ b/src/smpi/colls/barrier/barrier-ompi.cpp @@ -265,7 +265,7 @@ int Coll_barrier_ompi_basic_linear::barrier(MPI_Comm comm) else { MPI_Request* requests; - requests = (MPI_Request*)malloc( size * sizeof(MPI_Request) ); + requests = new MPI_Request[size]; for (i = 1; i < size; ++i) { requests[i] = Request::irecv(NULL, 0, MPI_BYTE, MPI_ANY_SOURCE, COLL_TAG_BARRIER, comm @@ -280,7 +280,7 @@ int Coll_barrier_ompi_basic_linear::barrier(MPI_Comm comm) ); } Request::waitall( size-1, requests+1, MPI_STATUSES_IGNORE ); - free( requests ); + delete[] requests; } /* All done */ diff --git a/src/smpi/colls/bcast/bcast-ompi-pipeline.cpp b/src/smpi/colls/bcast/bcast-ompi-pipeline.cpp index d7e48fd710..0de5fffa22 100644 --- a/src/smpi/colls/bcast/bcast-ompi-pipeline.cpp +++ b/src/smpi/colls/bcast/bcast-ompi-pipeline.cpp @@ -85,7 +85,7 @@ int Coll_bcast_ompi_pipeline::bcast( void* buffer, tmpbuf = (char *) buffer; if( tree->tree_nextsize != 0 ) { - send_reqs = xbt_new(MPI_Request, tree->tree_nextsize ); + send_reqs = new MPI_Request[tree->tree_nextsize]; } /* Root code */ @@ -205,8 +205,8 @@ int Coll_bcast_ompi_pipeline::bcast( void* buffer, Request::wait( &recv_reqs[req_index], MPI_STATUS_IGNORE ); } - if( NULL != send_reqs ) free(send_reqs); - xbt_free(tree); + delete[] send_reqs; + ompi_coll_tuned_topo_destroy_tree(&tree); return (MPI_SUCCESS); } diff --git a/src/smpi/colls/bcast/bcast-ompi-split-bintree.cpp b/src/smpi/colls/bcast/bcast-ompi-split-bintree.cpp index a2eb2dc1ce..2ab6c7d5b0 100644 --- a/src/smpi/colls/bcast/bcast-ompi-split-bintree.cpp +++ b/src/smpi/colls/bcast/bcast-ompi-split-bintree.cpp @@ -296,7 +296,7 @@ Coll_bcast_ompi_split_bintree::bcast ( void* buffer, comm, MPI_STATUS_IGNORE); } } - xbt_free(tree); + ompi_coll_tuned_topo_destroy_tree(&tree); return (MPI_SUCCESS); diff --git a/src/smpi/colls/coll_tuned_topo.cpp b/src/smpi/colls/coll_tuned_topo.cpp index 06a23b4019..7138c7ed90 100644 --- a/src/smpi/colls/coll_tuned_topo.cpp +++ b/src/smpi/colls/coll_tuned_topo.cpp @@ -101,7 +101,7 @@ ompi_coll_tuned_topo_build_tree( int fanout, size = comm->size(); rank = comm->rank(); - tree = (ompi_coll_tree_t*)malloc(sizeof(ompi_coll_tree_t)); + tree = new ompi_coll_tree_t; if (not tree) { XBT_DEBUG("coll:tuned:topo_build_tree PANIC::out of memory"); return NULL; @@ -201,7 +201,7 @@ ompi_coll_tuned_topo_build_in_order_bintree( MPI_Comm comm ) size = comm->size(); rank = comm->rank(); - tree = (ompi_coll_tree_t*)malloc(sizeof(ompi_coll_tree_t)); + tree = new ompi_coll_tree_t; if (not tree) { XBT_DEBUG("coll:tuned:topo_build_tree PANIC::out of memory"); return NULL; @@ -304,7 +304,7 @@ int ompi_coll_tuned_topo_destroy_tree( ompi_coll_tree_t** tree ) ptr = *tree; - free (ptr); + delete ptr; *tree = NULL; /* mark tree as gone */ return MPI_SUCCESS; @@ -345,7 +345,7 @@ ompi_coll_tuned_topo_build_bmtree( MPI_Comm comm, index = rank -root; - bmtree = (ompi_coll_tree_t*)malloc(sizeof(ompi_coll_tree_t)); + bmtree = new ompi_coll_tree_t; if (not bmtree) { XBT_DEBUG("coll:tuned:topo:build_bmtree PANIC out of memory"); return NULL; @@ -424,7 +424,7 @@ ompi_coll_tree_t* ompi_coll_tuned_topo_build_in_order_bmtree(MPI_Comm comm, int vrank = (rank - root + size) % size; - bmtree = (ompi_coll_tree_t*)xbt_malloc(sizeof(ompi_coll_tree_t)); + bmtree = new ompi_coll_tree_t; if (not bmtree) { XBT_DEBUG("coll:tuned:topo:build_bmtree PANIC out of memory"); return NULL; @@ -494,7 +494,7 @@ ompi_coll_tuned_topo_build_chain( int fanout, /* * Allocate space for topology arrays if needed */ - chain = (ompi_coll_tree_t*)malloc( sizeof(ompi_coll_tree_t) ); + chain = new ompi_coll_tree_t; if (not chain) { XBT_DEBUG("coll:tuned:topo:build_chain PANIC out of memory"); fflush(stdout); diff --git a/src/smpi/colls/coll_tuned_topo.hpp b/src/smpi/colls/coll_tuned_topo.hpp index 82718230d8..e6ff4b409c 100644 --- a/src/smpi/colls/coll_tuned_topo.hpp +++ b/src/smpi/colls/coll_tuned_topo.hpp @@ -34,14 +34,14 @@ (SEGCOUNT)++; \ } -typedef struct ompi_coll_tree_t { +struct ompi_coll_tree_t { int32_t tree_root; int32_t tree_fanout; int32_t tree_bmtree; int32_t tree_prev; int32_t tree_next[MAXTREEFANOUT]; int32_t tree_nextsize; -} ompi_coll_tree_t; +}; ompi_coll_tree_t* ompi_coll_tuned_topo_build_tree(int fanout, MPI_Comm com, int root); ompi_coll_tree_t* ompi_coll_tuned_topo_build_in_order_bintree(MPI_Comm comm); diff --git a/src/smpi/colls/gather/gather-ompi.cpp b/src/smpi/colls/gather/gather-ompi.cpp index 4510e088cb..3e4e65c83e 100644 --- a/src/smpi/colls/gather/gather-ompi.cpp +++ b/src/smpi/colls/gather/gather-ompi.cpp @@ -181,7 +181,7 @@ int Coll_gather_ompi_binomial::gather(void* sbuf, int scount, MPI_Datatype sdtyp /* other non-leaf nodes */ smpi_free_tmp_buffer(tempbuf); } - xbt_free(bmtree); + ompi_coll_tuned_topo_destroy_tree(&bmtree); return MPI_SUCCESS; err_hndl: @@ -266,8 +266,8 @@ int Coll_gather_ompi_linear_sync::gather(void *sbuf, int scount, - Waitall for all the second segments to complete. */ char* ptmp; - MPI_Request *reqs = NULL, first_segment_req; - reqs = (MPI_Request*)calloc(size, sizeof(MPI_Request)); + MPI_Request first_segment_req; + MPI_Request* reqs = new (std::nothrow) MPI_Request[size]; if (NULL == reqs) { ret = -1; line = __LINE__; @@ -319,7 +319,7 @@ int Coll_gather_ompi_linear_sync::gather(void *sbuf, int scount, ret = Request::waitall(size, reqs, MPI_STATUSES_IGNORE); if (ret != MPI_SUCCESS) { line = __LINE__; goto error_hndl; } - free(reqs); + delete[] reqs; } /* All done */ diff --git a/src/smpi/colls/reduce/reduce-ompi.cpp b/src/smpi/colls/reduce/reduce-ompi.cpp index 25e62ec0c5..a4b540e809 100644 --- a/src/smpi/colls/reduce/reduce-ompi.cpp +++ b/src/smpi/colls/reduce/reduce-ompi.cpp @@ -261,10 +261,7 @@ int smpi_coll_tuned_ompi_reduce_generic( void* sendbuf, void* recvbuf, int origi else { int creq = 0; - MPI_Request* sreq = NULL; - - sreq = (MPI_Request*) calloc( max_outstanding_reqs, - sizeof(MPI_Request ) ); + MPI_Request* sreq = new (std::nothrow) MPI_Request[max_outstanding_reqs]; if (NULL == sreq) { line = __LINE__; ret = -1; goto error_hndl; } /* post first group of requests */ @@ -303,10 +300,10 @@ int smpi_coll_tuned_ompi_reduce_generic( void* sendbuf, void* recvbuf, int origi MPI_STATUSES_IGNORE ); /* free requests */ - free(sreq); + delete[] sreq; } } - free(tree); + ompi_coll_tuned_topo_destroy_tree(&tree); return MPI_SUCCESS; error_hndl: /* error handler */ diff --git a/src/smpi/colls/reduce/reduce-rab.cpp b/src/smpi/colls/reduce/reduce-rab.cpp index 394544c106..5b2f4b20fb 100644 --- a/src/smpi/colls/reduce/reduce-rab.cpp +++ b/src/smpi/colls/reduce/reduce-rab.cpp @@ -409,13 +409,31 @@ Benchmark results on CRAY T3E #endif #endif -typedef enum {MPIM_SHORT, MPIM_INT, MPIM_LONG, MPIM_UNSIGNED_SHORT, - MPIM_UNSIGNED, MPIM_UNSIGNED_LONG, MPIM_UNSIGNED_LONG_LONG, MPIM_FLOAT, - MPIM_DOUBLE, MPIM_BYTE} MPIM_Datatype; - -typedef enum {MPIM_MAX, MPIM_MIN, MPIM_SUM, MPIM_PROD, - MPIM_LAND, MPIM_BAND, MPIM_LOR, MPIM_BOR, - MPIM_LXOR, MPIM_BXOR} MPIM_Op; +enum MPIM_Datatype { + MPIM_SHORT, + MPIM_INT, + MPIM_LONG, + MPIM_UNSIGNED_SHORT, + MPIM_UNSIGNED, + MPIM_UNSIGNED_LONG, + MPIM_UNSIGNED_LONG_LONG, + MPIM_FLOAT, + MPIM_DOUBLE, + MPIM_BYTE +}; + +enum MPIM_Op { + MPIM_MAX, + MPIM_MIN, + MPIM_SUM, + MPIM_PROD, + MPIM_LAND, + MPIM_BAND, + MPIM_LOR, + MPIM_BOR, + MPIM_LXOR, + MPIM_BXOR +}; #define MPI_I_DO_OP_C_INTEGER(MPI_I_do_op_TYPE,TYPE) \ static void MPI_I_do_op_TYPE(TYPE* b1,TYPE* b2,TYPE* rslt, int cnt,MPIM_Op op)\ { int i; \ @@ -595,14 +613,14 @@ static int MPI_I_anyReduce(void* Sendbuf, void* Recvbuf, int count, MPI_Datatype MPI_Type_extent(mpi_datatype, &typelng); scrlng = typelng * count; #ifdef NO_CACHE_OPTIMIZATION - scr1buf = static_cast(xbt_malloc(scrlng)); - scr2buf = static_cast(xbt_malloc(scrlng)); - scr3buf = static_cast(xbt_malloc(scrlng)); + scr1buf = new char[scrlng]; + scr2buf = new char[scrlng]; + scr3buf = new char[scrlng]; #else # ifdef SCR_LNG_OPTIM scrlng = SCR_LNG_OPTIM(scrlng); # endif - scr2buf = static_cast(xbt_malloc(3*scrlng)); /* To test cache problems. */ + scr2buf = new char[3 * scrlng]; /* To test cache problems. */ scr1buf = scr2buf + 1*scrlng; /* scr1buf and scr3buf must not*/ scr3buf = scr2buf + 2*scrlng; /* be used for malloc because */ /* they are interchanged below.*/ @@ -914,9 +932,11 @@ static int MPI_I_anyReduce(void* Sendbuf, void* Recvbuf, int count, MPI_Datatype } # ifdef NO_CACHE_TESTING - xbt_free(scr1buf); xbt_free(scr2buf); xbt_free(scr3buf); + delete[] scr1buf; + delete[] scr2buf; + delete[] scr3buf; # else - xbt_free(scr2buf); /* scr1buf and scr3buf are part of scr2buf */ + delete[] scr2buf; /* scr1buf and scr3buf are part of scr2buf */ # endif return(MPI_SUCCESS); } /* new_prot */ diff --git a/src/smpi/colls/scatter/scatter-ompi.cpp b/src/smpi/colls/scatter/scatter-ompi.cpp index 89737b61c5..6c14004a71 100644 --- a/src/smpi/colls/scatter/scatter-ompi.cpp +++ b/src/smpi/colls/scatter/scatter-ompi.cpp @@ -159,7 +159,7 @@ int Coll_scatter_ompi_binomial::scatter(void* sbuf, int scount, MPI_Datatype sdt if (NULL != tempbuf) smpi_free_tmp_buffer(tempbuf); // not FIXME : store the tree, as done in ompi, instead of calculating it each time ? - xbt_free(bmtree); + ompi_coll_tuned_topo_destroy_tree(&bmtree); return MPI_SUCCESS; diff --git a/src/smpi/colls/smpi_automatic_selector.cpp b/src/smpi/colls/smpi_automatic_selector.cpp index 7b75b79256..12ef8f3c8b 100644 --- a/src/smpi/colls/smpi_automatic_selector.cpp +++ b/src/smpi/colls/smpi_automatic_selector.cpp @@ -16,15 +16,13 @@ #define TRACE_AUTO_COLL(cat) \ if (TRACE_is_enabled()) { \ - simgrid::instr::Type* type = PJ_type_get_root()->getChildOrNull(#cat); \ - if (not type) { \ - type = simgrid::instr::Type::eventNew(#cat, PJ_type_get_root()); \ - } \ + simgrid::instr::Type* type = simgrid::instr::Type::getRootType()->getOrCreateEventType(#cat); \ + \ char cont_name[25]; \ snprintf(cont_name, 25, "rank-%d", smpi_process()->index()); \ simgrid::instr::Value* val = \ - simgrid::instr::Value::get_or_new(Colls::mpi_coll_##cat##_description[i].name, "1.0 1.0 1.0", type); \ - new simgrid::instr::NewEvent(SIMIX_get_clock(), PJ_container_get(cont_name), type, val); \ + simgrid::instr::Value::byNameOrCreate(Colls::mpi_coll_##cat##_description[i].name, "1.0 1.0 1.0", type); \ + new simgrid::instr::NewEvent(SIMIX_get_clock(), simgrid::instr::Container::byName(cont_name), type, val); \ } #define AUTOMATIC_COLL_BENCH(cat, ret, args, args2) \ diff --git a/src/smpi/colls/smpi_intel_mpi_selector.cpp b/src/smpi/colls/smpi_intel_mpi_selector.cpp index 53bf9cdc3e..8c6630bf31 100644 --- a/src/smpi/colls/smpi_intel_mpi_selector.cpp +++ b/src/smpi/colls/smpi_intel_mpi_selector.cpp @@ -14,21 +14,21 @@ #define INTEL_MAX_NB_NUMPROCS 12 #define INTEL_MAX_NB_PPN 5 /* 1 2 4 8 16 ppn */ -typedef struct { +struct intel_tuning_table_size_element { unsigned int max_size; int algo; -} intel_tuning_table_size_element; +}; -typedef struct { +struct intel_tuning_table_numproc_element { int max_num_proc; int num_elems; intel_tuning_table_size_element elems[INTEL_MAX_NB_THRESHOLDS]; -} intel_tuning_table_numproc_element; +}; -typedef struct { +struct intel_tuning_table_element { int ppn; intel_tuning_table_numproc_element elems[INTEL_MAX_NB_NUMPROCS]; -} intel_tuning_table_element; +}; /* I_MPI_ADJUST_ALLREDUCE diff --git a/src/smpi/colls/smpi_mvapich2_selector.cpp b/src/smpi/colls/smpi_mvapich2_selector.cpp index 01fb26857e..2d60cf160f 100644 --- a/src/smpi/colls/smpi_mvapich2_selector.cpp +++ b/src/smpi/colls/smpi_mvapich2_selector.cpp @@ -795,7 +795,7 @@ int Coll_reduce_scatter_mvapich2::reduce_scatter(void *sendbuf, void *recvbuf, i int range = 0; int range_threshold = 0; int is_commutative = 0; - int *disps = static_cast(xbt_malloc(comm_size * sizeof (int))); + int* disps = new int[comm_size]; if(mv2_red_scat_thresholds_table==NULL) init_mv2_reduce_scatter_tables_stampede(); @@ -853,7 +853,7 @@ int Coll_reduce_scatter_mvapich2::reduce_scatter(void *sendbuf, void *recvbuf, i recvcnts, datatype, op, comm); } - xbt_free(disps); + delete[] disps; return mpi_errno; } @@ -998,28 +998,27 @@ int Coll_scatter_mvapich2::scatter(void *sendbuf, void smpi_coll_cleanup_mvapich2() { - int i = 0; if (mv2_alltoall_thresholds_table) - xbt_free(mv2_alltoall_thresholds_table[i]); - xbt_free(mv2_alltoall_thresholds_table); - xbt_free(mv2_size_alltoall_tuning_table); - xbt_free(mv2_alltoall_table_ppn_conf); + delete[] mv2_alltoall_thresholds_table[0]; + delete[] mv2_alltoall_thresholds_table; + delete[] mv2_size_alltoall_tuning_table; + delete[] mv2_alltoall_table_ppn_conf; - xbt_free(mv2_gather_thresholds_table); + delete[] mv2_gather_thresholds_table; if (mv2_allgather_thresholds_table) - xbt_free(mv2_allgather_thresholds_table[0]); - xbt_free(mv2_size_allgather_tuning_table); - xbt_free(mv2_allgather_table_ppn_conf); - xbt_free(mv2_allgather_thresholds_table); - - xbt_free(mv2_allgatherv_thresholds_table); - xbt_free(mv2_reduce_thresholds_table); - xbt_free(mv2_red_scat_thresholds_table); - xbt_free(mv2_allreduce_thresholds_table); - xbt_free(mv2_bcast_thresholds_table); + delete[] mv2_allgather_thresholds_table[0]; + delete[] mv2_size_allgather_tuning_table; + delete[] mv2_allgather_table_ppn_conf; + delete[] mv2_allgather_thresholds_table; + + delete[] mv2_allgatherv_thresholds_table; + delete[] mv2_reduce_thresholds_table; + delete[] mv2_red_scat_thresholds_table; + delete[] mv2_allreduce_thresholds_table; + delete[] mv2_bcast_thresholds_table; if (mv2_scatter_thresholds_table) - xbt_free(mv2_scatter_thresholds_table[0]); - xbt_free(mv2_scatter_thresholds_table); - xbt_free(mv2_size_scatter_tuning_table); - xbt_free(mv2_scatter_table_ppn_conf); + delete[] mv2_scatter_thresholds_table[0]; + delete[] mv2_scatter_thresholds_table; + delete[] mv2_size_scatter_tuning_table; + delete[] mv2_scatter_table_ppn_conf; } diff --git a/src/smpi/colls/smpi_mvapich2_selector_stampede.hpp b/src/smpi/colls/smpi_mvapich2_selector_stampede.hpp index 7f69d1c550..24cdf97b2a 100644 --- a/src/smpi/colls/smpi_mvapich2_selector_stampede.hpp +++ b/src/smpi/colls/smpi_mvapich2_selector_stampede.hpp @@ -9,23 +9,28 @@ /************ Alltoall variables and initializers */ +#ifndef SMPI_MVAPICH2_SELECTOR_STAMPEDE_HPP +#define SMPI_MVAPICH2_SELECTOR_STAMPEDE_HPP + +#include + #define MV2_MAX_NB_THRESHOLDS 32 XBT_PUBLIC(void) smpi_coll_cleanup_mvapich2(void); -typedef struct { +struct mv2_alltoall_tuning_element { int min; int max; int (*MV2_pt_Alltoall_function)(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm_ptr); -} mv2_alltoall_tuning_element; +}; -typedef struct { +struct mv2_alltoall_tuning_table { int numproc; int size_table; mv2_alltoall_tuning_element algo_table[MV2_MAX_NB_THRESHOLDS]; mv2_alltoall_tuning_element in_place_algo_table[MV2_MAX_NB_THRESHOLDS]; -} mv2_alltoall_tuning_table; +}; int (*MV2_Alltoall_function)(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm_ptr) = NULL; @@ -45,18 +50,15 @@ mv2_alltoall_tuning_table** mv2_alltoall_thresholds_table = NULL; static void init_mv2_alltoall_tables_stampede() { - int i; int agg_table_sum = 0; mv2_alltoall_tuning_table** table_ptrs = NULL; mv2_alltoall_num_ppn_conf = 3; if (simgrid::smpi::Colls::smpi_coll_cleanup_callback == NULL) simgrid::smpi::Colls::smpi_coll_cleanup_callback = &smpi_coll_cleanup_mvapich2; - mv2_alltoall_thresholds_table = static_cast( - xbt_malloc(sizeof(mv2_alltoall_tuning_table*) * mv2_alltoall_num_ppn_conf)); - table_ptrs = static_cast( - xbt_malloc(sizeof(mv2_alltoall_tuning_table*) * mv2_alltoall_num_ppn_conf)); - mv2_size_alltoall_tuning_table = static_cast(xbt_malloc(sizeof(int) * mv2_alltoall_num_ppn_conf)); - mv2_alltoall_table_ppn_conf = static_cast(xbt_malloc(mv2_alltoall_num_ppn_conf * sizeof(int))); + mv2_alltoall_thresholds_table = new mv2_alltoall_tuning_table*[mv2_alltoall_num_ppn_conf]; + table_ptrs = new mv2_alltoall_tuning_table*[mv2_alltoall_num_ppn_conf]; + mv2_size_alltoall_tuning_table = new int[mv2_alltoall_num_ppn_conf]; + mv2_alltoall_table_ppn_conf = new int[mv2_alltoall_num_ppn_conf]; mv2_alltoall_table_ppn_conf[0] = 1; mv2_size_alltoall_tuning_table[0] = 6; mv2_alltoall_tuning_table mv2_tmp_alltoall_thresholds_table_1ppn[] = { @@ -314,36 +316,33 @@ static void init_mv2_alltoall_tables_stampede() }; table_ptrs[2] = mv2_tmp_alltoall_thresholds_table_16ppn; agg_table_sum = 0; - for (i = 0; i < mv2_alltoall_num_ppn_conf; i++) { + for (int i = 0; i < mv2_alltoall_num_ppn_conf; i++) { agg_table_sum += mv2_size_alltoall_tuning_table[i]; } - mv2_alltoall_thresholds_table[0] = - static_cast(xbt_malloc(agg_table_sum * sizeof(mv2_alltoall_tuning_table))); - memcpy(mv2_alltoall_thresholds_table[0], table_ptrs[0], - (sizeof(mv2_alltoall_tuning_table) * mv2_size_alltoall_tuning_table[0])); - for (i = 1; i < mv2_alltoall_num_ppn_conf; i++) { + mv2_alltoall_thresholds_table[0] = new mv2_alltoall_tuning_table[agg_table_sum]; + std::copy_n(table_ptrs[0], mv2_size_alltoall_tuning_table[0], mv2_alltoall_thresholds_table[0]); + for (int i = 1; i < mv2_alltoall_num_ppn_conf; i++) { mv2_alltoall_thresholds_table[i] = mv2_alltoall_thresholds_table[i - 1] + mv2_size_alltoall_tuning_table[i - 1]; - memcpy(mv2_alltoall_thresholds_table[i], table_ptrs[i], - (sizeof(mv2_alltoall_tuning_table) * mv2_size_alltoall_tuning_table[i])); + std::copy_n(table_ptrs[i], mv2_size_alltoall_tuning_table[i], mv2_alltoall_thresholds_table[i]); } - xbt_free(table_ptrs); + delete[] table_ptrs; } /************ Allgather variables and initializers */ -typedef struct { +struct mv2_allgather_tuning_element { int min; int max; int (*MV2_pt_Allgatherction)(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm_ptr); -} mv2_allgather_tuning_element; +}; -typedef struct { +struct mv2_allgather_tuning_table { int numproc; int two_level[MV2_MAX_NB_THRESHOLDS]; int size_inter_table; mv2_allgather_tuning_element inter_leader[MV2_MAX_NB_THRESHOLDS]; -} mv2_allgather_tuning_table; +}; int (*MV2_Allgatherction)(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm); @@ -366,19 +365,16 @@ static int MPIR_Allgather_RD_Allgather_Comm_MV2(void* sendbuf, int sendcount, MP static void init_mv2_allgather_tables_stampede() { - int i; int agg_table_sum = 0; if (simgrid::smpi::Colls::smpi_coll_cleanup_callback == NULL) simgrid::smpi::Colls::smpi_coll_cleanup_callback = &smpi_coll_cleanup_mvapich2; mv2_allgather_tuning_table** table_ptrs = NULL; mv2_allgather_num_ppn_conf = 3; - mv2_allgather_thresholds_table = static_cast( - xbt_malloc(sizeof(mv2_allgather_tuning_table*) * mv2_allgather_num_ppn_conf)); - table_ptrs = static_cast( - xbt_malloc(sizeof(mv2_allgather_tuning_table*) * mv2_allgather_num_ppn_conf)); - mv2_size_allgather_tuning_table = static_cast(xbt_malloc(sizeof(int) * mv2_allgather_num_ppn_conf)); - mv2_allgather_table_ppn_conf = static_cast(xbt_malloc(mv2_allgather_num_ppn_conf * sizeof(int))); + mv2_allgather_thresholds_table = new mv2_allgather_tuning_table*[mv2_allgather_num_ppn_conf]; + table_ptrs = new mv2_allgather_tuning_table*[mv2_allgather_num_ppn_conf]; + mv2_size_allgather_tuning_table = new int[mv2_allgather_num_ppn_conf]; + mv2_allgather_table_ppn_conf = new int[mv2_allgather_num_ppn_conf]; mv2_allgather_table_ppn_conf[0] = 1; mv2_size_allgather_tuning_table[0] = 6; mv2_allgather_tuning_table mv2_tmp_allgather_thresholds_table_1ppn[] = { @@ -550,37 +546,34 @@ static void init_mv2_allgather_tables_stampede() }; table_ptrs[2] = mv2_tmp_allgather_thresholds_table_16ppn; agg_table_sum = 0; - for (i = 0; i < mv2_allgather_num_ppn_conf; i++) { + for (int i = 0; i < mv2_allgather_num_ppn_conf; i++) { agg_table_sum += mv2_size_allgather_tuning_table[i]; } - mv2_allgather_thresholds_table[0] = - static_cast(xbt_malloc(agg_table_sum * sizeof(mv2_allgather_tuning_table))); - memcpy(mv2_allgather_thresholds_table[0], table_ptrs[0], - (sizeof(mv2_allgather_tuning_table) * mv2_size_allgather_tuning_table[0])); - for (i = 1; i < mv2_allgather_num_ppn_conf; i++) { + mv2_allgather_thresholds_table[0] = new mv2_allgather_tuning_table[agg_table_sum]; + std::copy_n(table_ptrs[0], mv2_size_allgather_tuning_table[0], mv2_allgather_thresholds_table[0]); + for (int i = 1; i < mv2_allgather_num_ppn_conf; i++) { mv2_allgather_thresholds_table[i] = mv2_allgather_thresholds_table[i - 1] + mv2_size_allgather_tuning_table[i - 1]; - memcpy(mv2_allgather_thresholds_table[i], table_ptrs[i], - (sizeof(mv2_allgather_tuning_table) * mv2_size_allgather_tuning_table[i])); + std::copy_n(table_ptrs[i], mv2_size_allgather_tuning_table[i], mv2_allgather_thresholds_table[i]); } - xbt_free(table_ptrs); + delete[] table_ptrs; } /************ Gather variables and initializers */ -typedef struct { +struct mv2_gather_tuning_element { int min; int max; int (*MV2_pt_Gather_function)(void* sendbuf, int sendcnt, MPI_Datatype sendtype, void* recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm_ptr); -} mv2_gather_tuning_element; +}; -typedef struct { +struct mv2_gather_tuning_table { int numproc; int size_inter_table; mv2_gather_tuning_element inter_leader[MV2_MAX_NB_THRESHOLDS]; int size_intra_table; mv2_gather_tuning_element intra_node[MV2_MAX_NB_THRESHOLDS]; -} mv2_gather_tuning_table; +}; int mv2_size_gather_tuning_table = 7; mv2_gather_tuning_table* mv2_gather_thresholds_table = NULL; @@ -601,8 +594,7 @@ static void init_mv2_gather_tables_stampede() if (simgrid::smpi::Colls::smpi_coll_cleanup_callback == NULL) simgrid::smpi::Colls::smpi_coll_cleanup_callback = &smpi_coll_cleanup_mvapich2; mv2_size_gather_tuning_table = 7; - mv2_gather_thresholds_table = - static_cast(xbt_malloc(mv2_size_gather_tuning_table * sizeof(mv2_gather_tuning_table))); + mv2_gather_thresholds_table = new mv2_gather_tuning_table[mv2_size_gather_tuning_table]; mv2_gather_tuning_table mv2_tmp_gather_thresholds_table[] = { {16, 2, @@ -653,24 +645,23 @@ static void init_mv2_gather_tables_stampede() {{0, -1, &MPIR_Gather_intra}}}, }; - memcpy(mv2_gather_thresholds_table, mv2_tmp_gather_thresholds_table, - mv2_size_gather_tuning_table * sizeof(mv2_gather_tuning_table)); + std::copy_n(mv2_tmp_gather_thresholds_table, mv2_size_gather_tuning_table, mv2_gather_thresholds_table); } /************ Allgatherv variables and initializers */ -typedef struct { +struct mv2_allgatherv_tuning_element { int min; int max; int (*MV2_pt_Allgatherv_function)(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int* recvcounts, int* displs, MPI_Datatype recvtype, MPI_Comm commg); -} mv2_allgatherv_tuning_element; +}; -typedef struct { +struct mv2_allgatherv_tuning_table { int numproc; int size_inter_table; mv2_allgatherv_tuning_element inter_leader[MV2_MAX_NB_THRESHOLDS]; -} mv2_allgatherv_tuning_table; +}; int (*MV2_Allgatherv_function)(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int* recvcounts, int* displs, MPI_Datatype recvtype, MPI_Comm comm); @@ -687,8 +678,7 @@ static void init_mv2_allgatherv_tables_stampede() if (simgrid::smpi::Colls::smpi_coll_cleanup_callback == NULL) simgrid::smpi::Colls::smpi_coll_cleanup_callback = &smpi_coll_cleanup_mvapich2; mv2_size_allgatherv_tuning_table = 6; - mv2_allgatherv_thresholds_table = static_cast( - xbt_malloc(mv2_size_allgatherv_tuning_table * sizeof(mv2_allgatherv_tuning_table))); + mv2_allgatherv_thresholds_table = new mv2_allgatherv_tuning_table[mv2_size_allgatherv_tuning_table]; mv2_allgatherv_tuning_table mv2_tmp_allgatherv_thresholds_table[] = { { 16, @@ -734,20 +724,19 @@ static void init_mv2_allgatherv_tables_stampede() }, }; - memcpy(mv2_allgatherv_thresholds_table, mv2_tmp_allgatherv_thresholds_table, - mv2_size_allgatherv_tuning_table * sizeof(mv2_allgatherv_tuning_table)); + std::copy_n(mv2_tmp_allgatherv_thresholds_table, mv2_size_allgatherv_tuning_table, mv2_allgatherv_thresholds_table); } /************ Allreduce variables and initializers */ -typedef struct { +struct mv2_allreduce_tuning_element { int min; int max; int (*MV2_pt_Allreducection)(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm); -} mv2_allreduce_tuning_element; +}; -typedef struct { +struct mv2_allreduce_tuning_table { int numproc; int mcast_enabled; int is_two_level_allreduce[MV2_MAX_NB_THRESHOLDS]; @@ -755,7 +744,7 @@ typedef struct { mv2_allreduce_tuning_element inter_leader[MV2_MAX_NB_THRESHOLDS]; int size_intra_table; mv2_allreduce_tuning_element intra_node[MV2_MAX_NB_THRESHOLDS]; -} mv2_allreduce_tuning_table; +}; int (*MV2_Allreducection)(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) = NULL; @@ -801,8 +790,7 @@ static void init_mv2_allreduce_tables_stampede() if (simgrid::smpi::Colls::smpi_coll_cleanup_callback == NULL) simgrid::smpi::Colls::smpi_coll_cleanup_callback = &smpi_coll_cleanup_mvapich2; mv2_size_allreduce_tuning_table = 8; - mv2_allreduce_thresholds_table = static_cast( - xbt_malloc(mv2_size_allreduce_tuning_table * sizeof(mv2_allreduce_tuning_table))); + mv2_allreduce_thresholds_table = new mv2_allreduce_tuning_table[mv2_size_allreduce_tuning_table]; mv2_allreduce_tuning_table mv2_tmp_allreduce_thresholds_table[] = { { 16, @@ -927,18 +915,17 @@ static void init_mv2_allreduce_tables_stampede() }, }; - memcpy(mv2_allreduce_thresholds_table, mv2_tmp_allreduce_thresholds_table, - mv2_size_allreduce_tuning_table * sizeof(mv2_allreduce_tuning_table)); + std::copy_n(mv2_tmp_allreduce_thresholds_table, mv2_size_allreduce_tuning_table, mv2_allreduce_thresholds_table); } -typedef struct { +struct mv2_bcast_tuning_element { int min; int max; int (*MV2_pt_Bcast_function)(void* buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm_ptr); int zcpy_pipelined_knomial_factor; -} mv2_bcast_tuning_element; +}; -typedef struct { +struct mv2_bcast_tuning_table { int numproc; int bcast_segment_size; int intra_node_knomial_factor; @@ -948,7 +935,7 @@ typedef struct { mv2_bcast_tuning_element inter_leader[MV2_MAX_NB_THRESHOLDS]; int size_intra_table; mv2_bcast_tuning_element intra_node[MV2_MAX_NB_THRESHOLDS]; -} mv2_bcast_tuning_table; +}; int mv2_size_bcast_tuning_table = 0; mv2_bcast_tuning_table* mv2_bcast_thresholds_table = NULL; @@ -987,8 +974,7 @@ static void init_mv2_bcast_tables_stampede() if (simgrid::smpi::Colls::smpi_coll_cleanup_callback == NULL) simgrid::smpi::Colls::smpi_coll_cleanup_callback = &smpi_coll_cleanup_mvapich2; mv2_size_bcast_tuning_table = 8; - mv2_bcast_thresholds_table = - static_cast(xbt_malloc(mv2_size_bcast_tuning_table * sizeof(mv2_bcast_tuning_table))); + mv2_bcast_thresholds_table = new mv2_bcast_tuning_table[mv2_size_bcast_tuning_table]; mv2_bcast_tuning_table mv2_tmp_bcast_thresholds_table[] = { {16, @@ -1156,20 +1142,19 @@ static void init_mv2_bcast_tables_stampede() {32768, 524288, &MPIR_Shmem_Bcast_MV2, -1}, {524288, -1, &MPIR_Shmem_Bcast_MV2, -1}}}}; - memcpy(mv2_bcast_thresholds_table, mv2_tmp_bcast_thresholds_table, - mv2_size_bcast_tuning_table * sizeof(mv2_bcast_tuning_table)); + std::copy_n(mv2_tmp_bcast_thresholds_table, mv2_size_bcast_tuning_table, mv2_bcast_thresholds_table); } /************ Reduce variables and initializers */ -typedef struct { +struct mv2_reduce_tuning_element { int min; int max; int (*MV2_pt_Reduce_function)(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm_ptr); -} mv2_reduce_tuning_element; +}; -typedef struct { +struct mv2_reduce_tuning_table { int numproc; int inter_k_degree; int intra_k_degree; @@ -1178,7 +1163,7 @@ typedef struct { mv2_reduce_tuning_element inter_leader[MV2_MAX_NB_THRESHOLDS]; int size_intra_table; mv2_reduce_tuning_element intra_node[MV2_MAX_NB_THRESHOLDS]; -} mv2_reduce_tuning_table; +}; int mv2_size_reduce_tuning_table = 0; mv2_reduce_tuning_table* mv2_reduce_thresholds_table = NULL; @@ -1205,8 +1190,7 @@ static void init_mv2_reduce_tables_stampede() simgrid::smpi::Colls::smpi_coll_cleanup_callback = &smpi_coll_cleanup_mvapich2; /*Stampede*/ mv2_size_reduce_tuning_table = 8; - mv2_reduce_thresholds_table = - static_cast(xbt_malloc(mv2_size_reduce_tuning_table * sizeof(mv2_reduce_tuning_table))); + mv2_reduce_thresholds_table = new mv2_reduce_tuning_table[mv2_size_reduce_tuning_table]; mv2_reduce_tuning_table mv2_tmp_reduce_thresholds_table[] = { { 16, @@ -1390,24 +1374,23 @@ static void init_mv2_reduce_tables_stampede() }, }; - memcpy(mv2_reduce_thresholds_table, mv2_tmp_reduce_thresholds_table, - mv2_size_reduce_tuning_table * sizeof(mv2_reduce_tuning_table)); + std::copy_n(mv2_tmp_reduce_thresholds_table, mv2_size_reduce_tuning_table, mv2_reduce_thresholds_table); } /************ Reduce scatter variables and initializers */ -typedef struct { +struct mv2_red_scat_tuning_element { int min; int max; int (*MV2_pt_Red_scat_function)(void* sendbuf, void* recvbuf, int* recvcnts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm_ptr); -} mv2_red_scat_tuning_element; +}; -typedef struct { +struct mv2_red_scat_tuning_table { int numproc; int size_inter_table; mv2_red_scat_tuning_element inter_leader[MV2_MAX_NB_THRESHOLDS]; -} mv2_red_scat_tuning_table; +}; int mv2_size_red_scat_tuning_table = 0; mv2_red_scat_tuning_table* mv2_red_scat_thresholds_table = NULL; @@ -1431,8 +1414,7 @@ static void init_mv2_reduce_scatter_tables_stampede() if (simgrid::smpi::Colls::smpi_coll_cleanup_callback == NULL) simgrid::smpi::Colls::smpi_coll_cleanup_callback = &smpi_coll_cleanup_mvapich2; mv2_size_red_scat_tuning_table = 6; - mv2_red_scat_thresholds_table = static_cast( - xbt_malloc(mv2_size_red_scat_tuning_table * sizeof(mv2_red_scat_tuning_table))); + mv2_red_scat_thresholds_table = new mv2_red_scat_tuning_table[mv2_size_red_scat_tuning_table]; mv2_red_scat_tuning_table mv2_tmp_red_scat_thresholds_table[] = { { 16, @@ -1484,26 +1466,25 @@ static void init_mv2_reduce_scatter_tables_stampede() }, }; - memcpy(mv2_red_scat_thresholds_table, mv2_tmp_red_scat_thresholds_table, - mv2_size_red_scat_tuning_table * sizeof(mv2_red_scat_tuning_table)); + std::copy_n(mv2_tmp_red_scat_thresholds_table, mv2_size_red_scat_tuning_table, mv2_red_scat_thresholds_table); } /************ Scatter variables and initializers */ -typedef struct { +struct mv2_scatter_tuning_element { int min; int max; int (*MV2_pt_Scatter_function)(void* sendbuf, int sendcnt, MPI_Datatype sendtype, void* recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm); -} mv2_scatter_tuning_element; +}; -typedef struct { +struct mv2_scatter_tuning_table { int numproc; int size_inter_table; mv2_scatter_tuning_element inter_leader[MV2_MAX_NB_THRESHOLDS]; int size_intra_table; mv2_scatter_tuning_element intra_node[MV2_MAX_NB_THRESHOLDS]; -} mv2_scatter_tuning_table; +}; int* mv2_scatter_table_ppn_conf = NULL; int mv2_scatter_num_ppn_conf = 1; @@ -1535,15 +1516,12 @@ static void init_mv2_scatter_tables_stampede() simgrid::smpi::Colls::smpi_coll_cleanup_callback = &smpi_coll_cleanup_mvapich2; int agg_table_sum = 0; - int i; mv2_scatter_tuning_table** table_ptrs = NULL; mv2_scatter_num_ppn_conf = 3; - mv2_scatter_thresholds_table = - static_cast(xbt_malloc(sizeof(mv2_scatter_tuning_table*) * mv2_scatter_num_ppn_conf)); - table_ptrs = - static_cast(xbt_malloc(sizeof(mv2_scatter_tuning_table*) * mv2_scatter_num_ppn_conf)); - mv2_size_scatter_tuning_table = static_cast(xbt_malloc(sizeof(int) * mv2_scatter_num_ppn_conf)); - mv2_scatter_table_ppn_conf = static_cast(xbt_malloc(mv2_scatter_num_ppn_conf * sizeof(int))); + mv2_scatter_thresholds_table = new mv2_scatter_tuning_table*[mv2_scatter_num_ppn_conf]; + table_ptrs = new mv2_scatter_tuning_table*[mv2_scatter_num_ppn_conf]; + mv2_size_scatter_tuning_table = new int[mv2_scatter_num_ppn_conf]; + mv2_scatter_table_ppn_conf = new int[mv2_scatter_num_ppn_conf]; mv2_scatter_table_ppn_conf[0] = 1; mv2_size_scatter_tuning_table[0] = 6; mv2_scatter_tuning_table mv2_tmp_scatter_thresholds_table_1ppn[] = { @@ -1822,17 +1800,16 @@ static void init_mv2_scatter_tables_stampede() }; table_ptrs[2] = mv2_tmp_scatter_thresholds_table_16ppn; agg_table_sum = 0; - for (i = 0; i < mv2_scatter_num_ppn_conf; i++) { + for (int i = 0; i < mv2_scatter_num_ppn_conf; i++) { agg_table_sum += mv2_size_scatter_tuning_table[i]; } - mv2_scatter_thresholds_table[0] = - static_cast(xbt_malloc(agg_table_sum * sizeof(mv2_scatter_tuning_table))); - memcpy(mv2_scatter_thresholds_table[0], table_ptrs[0], - (sizeof(mv2_scatter_tuning_table) * mv2_size_scatter_tuning_table[0])); - for (i = 1; i < mv2_scatter_num_ppn_conf; i++) { + mv2_scatter_thresholds_table[0] = new mv2_scatter_tuning_table[agg_table_sum]; + std::copy_n(table_ptrs[0], mv2_size_scatter_tuning_table[0], mv2_scatter_thresholds_table[0]); + for (int i = 1; i < mv2_scatter_num_ppn_conf; i++) { mv2_scatter_thresholds_table[i] = mv2_scatter_thresholds_table[i - 1] + mv2_size_scatter_tuning_table[i - 1]; - memcpy(mv2_scatter_thresholds_table[i], table_ptrs[i], - (sizeof(mv2_scatter_tuning_table) * mv2_size_scatter_tuning_table[i])); + std::copy_n(table_ptrs[i], mv2_size_scatter_tuning_table[i], mv2_scatter_thresholds_table[i]); } - xbt_free(table_ptrs); + delete[] table_ptrs; } + +#endif diff --git a/src/smpi/include/SmpiHost.hpp b/src/smpi/include/SmpiHost.hpp index a3667fe8ea..d1bca75d94 100644 --- a/src/smpi/include/SmpiHost.hpp +++ b/src/smpi/include/SmpiHost.hpp @@ -17,10 +17,6 @@ namespace simgrid { namespace smpi { -void sg_smpi_host_init(); -static void onHostDestruction(simgrid::s4u::Host& host); -static void onCreation(simgrid::s4u::Host& host); - class SmpiHost { private: diff --git a/src/smpi/include/private.hpp b/src/smpi/include/private.hpp index 9504e94524..4f0ca5705b 100644 --- a/src/smpi/include/private.hpp +++ b/src/smpi/include/private.hpp @@ -85,7 +85,7 @@ extern XBT_PRIVATE double smpi_host_speed; extern XBT_PRIVATE char* smpi_data_exe_start; // start of the data+bss segment of the executable extern XBT_PRIVATE int smpi_data_exe_size; // size of the data+bss segment of the executable -typedef enum { shmalloc_none, shmalloc_local, shmalloc_global } shared_malloc_type; +enum shared_malloc_type { shmalloc_none, shmalloc_local, shmalloc_global }; extern XBT_PRIVATE shared_malloc_type smpi_cfg_shared_malloc; // Whether to activate shared malloc XBT_PRIVATE void smpi_switch_data_segment(int dest); @@ -404,10 +404,10 @@ void mpi_file_write_(int* fh, void* buf, int* count, int* datatype, MPI_Status* // TODO, make this static and expose it more cleanly -typedef struct s_smpi_privatization_region { +struct s_smpi_privatization_region_t { void* address; int file_descriptor; -} s_smpi_privatization_region_t; +}; typedef s_smpi_privatization_region_t* smpi_privatization_region_t; extern XBT_PRIVATE smpi_privatization_region_t smpi_privatization_regions; @@ -437,12 +437,12 @@ XBT_PUBLIC(smpi_trace_call_location_t*) smpi_process_get_call_location(); XBT_PUBLIC(smpi_trace_call_location_t*) smpi_trace_get_call_location(); } -typedef enum { +enum smpi_priv_strategies { SMPI_PRIVATIZE_NONE = 0, SMPI_PRIVATIZE_MMAP = 1, SMPI_PRIVATIZE_DLOPEN = 2, SMPI_PRIVATIZE_DEFAULT = SMPI_PRIVATIZE_MMAP -} smpi_priv_strategies; +}; extern XBT_PRIVATE int smpi_privatize_global_variables; diff --git a/src/smpi/include/smpi_coll.hpp b/src/smpi/include/smpi_coll.hpp index f9356eae7d..399377488e 100644 --- a/src/smpi/include/smpi_coll.hpp +++ b/src/smpi/include/smpi_coll.hpp @@ -82,12 +82,11 @@ static ret cat (COLL_UNPAREN args); \ namespace simgrid{ namespace smpi{ -struct mpi_coll_description { +struct s_mpi_coll_description_t { const char *name; const char *description; void *coll; }; -typedef struct mpi_coll_description s_mpi_coll_description_t; class Colls{ public: diff --git a/src/smpi/include/smpi_datatype.hpp b/src/smpi/include/smpi_datatype.hpp index 3b1fd7dab9..2fc90cf185 100644 --- a/src/smpi/include/smpi_datatype.hpp +++ b/src/smpi/include/smpi_datatype.hpp @@ -30,47 +30,46 @@ extern const MPI_Datatype MPI_PTR; //The following are datatypes for the MPI functions MPI_MAXLOC and MPI_MINLOC. -typedef struct { +struct float_int { float value; int index; -} float_int; -typedef struct { +}; +struct float_float { float value; float index; -} float_float; -typedef struct { +}; +struct long_long { long value; long index; -} long_long; -typedef struct { +}; +struct double_double { double value; double index; -} double_double; -typedef struct { +}; +struct long_int { long value; int index; -} long_int; -typedef struct { +}; +struct double_int { double value; int index; -} double_int; -typedef struct { +}; +struct short_int { short value; int index; -} short_int; -typedef struct { +}; +struct int_int { int value; int index; -} int_int; -typedef struct { +}; +struct long_double_int { long double value; int index; -} long_double_int; -typedef struct { +}; +struct integer128_t { int64_t value; int64_t index; -} integer128_t; - +}; namespace simgrid{ namespace smpi{ diff --git a/src/smpi/include/smpi_group.hpp b/src/smpi/include/smpi_group.hpp index 73803641d1..4637dea46f 100644 --- a/src/smpi/include/smpi_group.hpp +++ b/src/smpi/include/smpi_group.hpp @@ -8,6 +8,7 @@ #define SMPI_GROUP_HPP_INCLUDED #include "smpi_f2c.hpp" +#include namespace simgrid{ namespace smpi{ diff --git a/src/smpi/include/smpi_keyvals.hpp b/src/smpi/include/smpi_keyvals.hpp index c0ee39515a..48f60ac4a4 100644 --- a/src/smpi/include/smpi_keyvals.hpp +++ b/src/smpi/include/smpi_keyvals.hpp @@ -7,29 +7,28 @@ #define SMPI_KEYVALS_HPP_INCLUDED #include "smpi/smpi.h" -#include "xbt/ex.hpp" #include -typedef struct smpi_delete_fn{ +struct smpi_delete_fn { MPI_Comm_delete_attr_function *comm_delete_fn; MPI_Type_delete_attr_function *type_delete_fn; MPI_Win_delete_attr_function *win_delete_fn; -} smpi_delete_fn; +}; -typedef struct smpi_copy_fn{ +struct smpi_copy_fn { MPI_Comm_copy_attr_function *comm_copy_fn; MPI_Type_copy_attr_function *type_copy_fn; MPI_Win_copy_attr_function *win_copy_fn; -} smpi_copy_fn; +}; -typedef struct s_smpi_key_elem { +struct s_smpi_key_elem_t { smpi_copy_fn copy_fn; smpi_delete_fn delete_fn; int refcount; -} s_smpi_mpi_key_elem_t; +}; -typedef struct s_smpi_key_elem *smpi_key_elem; +typedef s_smpi_key_elem_t* smpi_key_elem; namespace simgrid{ namespace smpi{ @@ -54,7 +53,7 @@ class Keyval{ template int Keyval::keyval_create(smpi_copy_fn copy_fn, smpi_delete_fn delete_fn, int* keyval, void* extra_state){ - smpi_key_elem value = (smpi_key_elem) xbt_new0(s_smpi_mpi_key_elem_t,1); + smpi_key_elem value = new s_smpi_key_elem_t; value->copy_fn=copy_fn; value->delete_fn=delete_fn; @@ -75,7 +74,7 @@ template int Keyval::keyval_free(int* keyval){ } if(elem->refcount==1){ T::keyvals_.erase(*keyval); - xbt_free(elem); + delete elem; }else{ elem->refcount--; } diff --git a/src/smpi/internals/SmpiHost.cpp b/src/smpi/internals/SmpiHost.cpp index 2fe8025add..95e4217893 100644 --- a/src/smpi/internals/SmpiHost.cpp +++ b/src/smpi/internals/SmpiHost.cpp @@ -114,23 +114,5 @@ SmpiHost::SmpiHost(simgrid::s4u::Host *ptr) : host(ptr) } SmpiHost::~SmpiHost()=default; - -static void onCreation(simgrid::s4u::Host& host) -{ -} - -static void onHostDestruction(simgrid::s4u::Host& host) -{ - // Ignore virtual machines - if (dynamic_cast(&host)) - return; -} - -void sg_smpi_host_init() -{ - simgrid::s4u::Host::onCreation.connect(&onCreation); - simgrid::s4u::Host::onDestruction.connect(&onHostDestruction); -} - } } diff --git a/src/smpi/internals/instr_smpi.cpp b/src/smpi/internals/instr_smpi.cpp index 305b232d31..2d07348478 100644 --- a/src/smpi/internals/instr_smpi.cpp +++ b/src/smpi/internals/instr_smpi.cpp @@ -189,7 +189,7 @@ void TRACE_smpi_init(int rank) container_t father; if (TRACE_smpi_is_grouped()){ - father = PJ_container_get(sg_host_self_get_name()); + father = simgrid::instr::Container::byName(sg_host_self_get_name()); }else{ father = PJ_container_get_root (); } @@ -208,7 +208,7 @@ void TRACE_smpi_init(int rank) * multiple times but only the last one would be used... */ if (s_type::getOrNull(it.first.c_str(), container->type_) == nullptr) { - Type::variableNew(it.first.c_str(), nullptr, container->type_); + Type::variableNew(it.first.c_str(), "", container->type_); } } #endif @@ -220,8 +220,8 @@ void TRACE_smpi_finalize(int rank) return; char str[INSTR_DEFAULT_STR_SIZE]; - container_t container = PJ_container_get(smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE)); - PJ_container_remove_from_parent (container); + container_t container = simgrid::instr::Container::byName(smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE)); + container->removeFromParent(); delete container; } @@ -234,10 +234,10 @@ void TRACE_smpi_collective_in(int rank, const char *operation, instr_extra_data char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); const char *color = instr_find_color (operation); - simgrid::instr::Value* val = simgrid::instr::Value::get_or_new(operation, color, type); + simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate(operation, color, type); new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, val, static_cast(extra)); } @@ -248,8 +248,8 @@ void TRACE_smpi_collective_out(int rank, const char *operation) char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); new simgrid::instr::PopStateEvent(SIMIX_get_clock(), container, type); } @@ -262,11 +262,11 @@ void TRACE_smpi_computing_init(int rank) char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get(str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); const char* color = instr_find_color("computing"); new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, - simgrid::instr::Value::get_or_new("computing", color, type)); + simgrid::instr::Value::byNameOrCreate("computing", color, type)); } void TRACE_smpi_computing_in(int rank, instr_extra_data extra) @@ -279,9 +279,9 @@ void TRACE_smpi_computing_in(int rank, instr_extra_data extra) char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::get_or_new("computing", nullptr, type); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); + simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate("computing", "", type); new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, val, static_cast(extra)); } @@ -291,8 +291,8 @@ void TRACE_smpi_computing_out(int rank) return; char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); new simgrid::instr::PopStateEvent(SIMIX_get_clock(), container, type); } @@ -304,10 +304,10 @@ void TRACE_smpi_sleeping_init(int rank) char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); const char *color = instr_find_color ("sleeping"); - simgrid::instr::Value* val = simgrid::instr::Value::get_or_new("sleeping", color, type); + simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate("sleeping", color, type); new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, val); } @@ -321,9 +321,9 @@ void TRACE_smpi_sleeping_in(int rank, instr_extra_data extra) char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::get_or_new("sleeping", nullptr, type); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); + simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate("sleeping", "", type); new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, val, static_cast(extra)); } @@ -333,8 +333,8 @@ void TRACE_smpi_sleeping_out(int rank) return; char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); new simgrid::instr::PopStateEvent(SIMIX_get_clock(), container, type); } @@ -348,9 +348,9 @@ void TRACE_smpi_testing_in(int rank, instr_extra_data extra) char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); - simgrid::instr::Value* val = simgrid::instr::Value::get_or_new("test", nullptr, type); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); + simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate("test", "", type); new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, val, static_cast(extra)); } @@ -360,8 +360,8 @@ void TRACE_smpi_testing_out(int rank) return; char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); new simgrid::instr::PopStateEvent(SIMIX_get_clock(), container, type); } @@ -374,10 +374,10 @@ void TRACE_smpi_ptp_in(int rank, const char *operation, instr_extra_data extra) char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); const char *color = instr_find_color (operation); - simgrid::instr::Value* val = simgrid::instr::Value::get_or_new(operation, color, type); + simgrid::instr::Value* val = simgrid::instr::Value::byNameOrCreate(operation, color, type); new simgrid::instr::PushStateEvent(SIMIX_get_clock(), container, type, val, static_cast(extra)); } @@ -388,8 +388,8 @@ void TRACE_smpi_ptp_out(int rank, int dst, const char *operation) char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = container->type_->getChild("MPI_STATE"); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = container->type_->byName("MPI_STATE"); new simgrid::instr::PopStateEvent(SIMIX_get_clock(), container, type); } @@ -404,8 +404,8 @@ void TRACE_smpi_send(int rank, int src, int dst, int tag, int size) char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(src, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = PJ_type_get_root()->getChild("MPI_LINK"); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = simgrid::instr::Type::getRootType()->byName("MPI_LINK"); XBT_DEBUG("Send tracing from %d to %d, tag %d, with key %s", src, dst, tag, key); new simgrid::instr::StartLinkEvent(SIMIX_get_clock(), PJ_container_get_root(), type, container, "PTP", key, size); } @@ -420,8 +420,8 @@ void TRACE_smpi_recv(int src, int dst, int tag) char str[INSTR_DEFAULT_STR_SIZE]; smpi_container(dst, str, INSTR_DEFAULT_STR_SIZE); - container_t container = PJ_container_get (str); - simgrid::instr::Type* type = PJ_type_get_root()->getChild("MPI_LINK"); + container_t container = simgrid::instr::Container::byName(str); + simgrid::instr::Type* type = simgrid::instr::Type::getRootType()->byName("MPI_LINK"); XBT_DEBUG("Recv tracing from %d to %d, tag %d, with key %s", src, dst, tag, key); new simgrid::instr::EndLinkEvent(SIMIX_get_clock(), PJ_container_get_root(), type, container, "PTP", key); } diff --git a/src/smpi/internals/smpi_bench.cpp b/src/smpi/internals/smpi_bench.cpp index 6c72dc4cd7..4e1243a93b 100644 --- a/src/smpi/internals/smpi_bench.cpp +++ b/src/smpi/internals/smpi_bench.cpp @@ -203,13 +203,13 @@ int smpi_usleep(useconds_t usecs) } #if _POSIX_TIMERS > 0 -int smpi_nanosleep(const struct timespec *tp, struct timespec * t) +int smpi_nanosleep(const struct timespec* tp, struct timespec* /*t*/) { return static_cast(private_sleep(static_cast(tp->tv_sec + tp->tv_nsec / 1000000000.0))); } #endif -int smpi_gettimeofday(struct timeval *tv, void* tz) +int smpi_gettimeofday(struct timeval* tv, void* /*tz*/) { smpi_bench_end(); double now = SIMIX_get_clock(); @@ -226,7 +226,7 @@ int smpi_gettimeofday(struct timeval *tv, void* tz) } #if _POSIX_TIMERS > 0 -int smpi_clock_gettime(clockid_t clk_id, struct timespec *tp) +int smpi_clock_gettime(clockid_t /*clk_id*/, struct timespec* tp) { //there is only one time in SMPI, so clk_id is ignored. smpi_bench_end(); diff --git a/src/smpi/internals/smpi_dvfs.cpp b/src/smpi/internals/smpi_dvfs.cpp index f83165f541..69e8a08892 100644 --- a/src/smpi/internals/smpi_dvfs.cpp +++ b/src/smpi/internals/smpi_dvfs.cpp @@ -79,14 +79,14 @@ typedef char *address; typedef short int shortint; typedef float real; typedef double doublereal; -typedef struct { +struct complex { real r; real i; -} complex; -typedef struct { +}; +struct doublecomplex { doublereal r; doublereal i; -} doublecomplex; +}; extern "C" XBT_PUBLIC(doublereal) smpi_get_host_power_peak_at_(integer *pstate_index); doublereal smpi_get_host_power_peak_at_(integer *pstate_index) diff --git a/src/smpi/internals/smpi_memory.cpp b/src/smpi/internals/smpi_memory.cpp index dbdb570a69..7ac4abd024 100644 --- a/src/smpi/internals/smpi_memory.cpp +++ b/src/smpi/internals/smpi_memory.cpp @@ -146,8 +146,7 @@ void smpi_initialize_global_memory_segments() return; } - smpi_privatization_regions = static_cast( - xbt_malloc(smpi_process_count() * sizeof(struct s_smpi_privatization_region))); + smpi_privatization_regions = new s_smpi_privatization_region_t[smpi_process_count()]; for (int i=0; i< smpi_process_count(); i++){ // create SIMIX_process_count() mappings of this size with the same data inside @@ -215,7 +214,7 @@ void smpi_destroy_global_memory_segments(){ XBT_WARN("Unmapping of fd %d failed: %s", smpi_privatization_regions[i].file_descriptor, strerror(errno)); close(smpi_privatization_regions[i].file_descriptor); } - xbt_free(smpi_privatization_regions); + delete[] smpi_privatization_regions; #endif } diff --git a/src/smpi/internals/smpi_shared.cpp b/src/smpi/internals/smpi_shared.cpp index 5d41bd600f..9f30550067 100644 --- a/src/smpi/internals/smpi_shared.cpp +++ b/src/smpi/internals/smpi_shared.cpp @@ -67,6 +67,7 @@ namespace{ class smpi_source_location : public std::string { public: + smpi_source_location() = default; smpi_source_location(const char* filename, int line) : std::string(std::string(filename) + ":" + std::to_string(line)) { } @@ -238,16 +239,15 @@ void* smpi_shared_malloc_partial(size_t size, size_t* shared_block_offsets, int xbt_free(huge_page_filename); } if(smpi_shared_malloc_bogusfile == -1) { - char *name = xbt_strdup("/tmp/simgrid-shmalloc-XXXXXX"); + char name[] = "/tmp/simgrid-shmalloc-XXXXXX"; smpi_shared_malloc_bogusfile = mkstemp(name); XBT_DEBUG("bogusfile : %s\n", name); unlink(name); - xbt_free(name); - char* dumb = (char*)calloc(1, smpi_shared_malloc_blocksize); + char* dumb = new char[smpi_shared_malloc_blocksize](); // zero initialized ssize_t err = write(smpi_shared_malloc_bogusfile, dumb, smpi_shared_malloc_blocksize); if(err<0) xbt_die("Could not write bogus file for shared malloc"); - xbt_free(dumb); + delete[] dumb; } int mmap_base_flag = MAP_FIXED | MAP_SHARED | MAP_POPULATE; @@ -313,7 +313,7 @@ void* smpi_shared_malloc_partial(size_t size, size_t* shared_block_offsets, int shared_metadata_t newmeta; //register metadata for memcpy avoidance - shared_data_key_type* data = (shared_data_key_type*)xbt_malloc(sizeof(shared_data_key_type)); + shared_data_key_type* data = new shared_data_key_type; data->second.fd = -1; data->second.count = 1; newmeta.size = size; @@ -346,8 +346,8 @@ void *smpi_shared_malloc(size_t size, const char *file, int line) { size_t shared_block_offsets[2] = {0, size}; return smpi_shared_malloc_partial(size, shared_block_offsets, nb_shared_blocks); } - XBT_DEBUG("Classic malloc %zu", size); - return xbt_malloc(size); + XBT_DEBUG("Classic allocation of %zu bytes", size); + return ::operator new(size); } int smpi_is_shared(void* ptr, std::vector> &private_blocks, size_t *offset){ @@ -441,13 +441,13 @@ void smpi_shared_free(void *ptr) if (meta != allocs_metadata.end()){ meta->second.data->second.count--; if(meta->second.data->second.count==0) - xbt_free(meta->second.data); + delete meta->second.data; } munmap(ptr, meta->second.size); } else { - XBT_DEBUG("Classic free of %p", ptr); - xbt_free(ptr); + XBT_DEBUG("Classic deallocation of %p", ptr); + ::operator delete(ptr); } } #endif diff --git a/src/smpi/internals/smpi_static_variables.cpp b/src/smpi/internals/smpi_static_variables.cpp index af3ecbb7c2..0d504c455d 100644 --- a/src/smpi/internals/smpi_static_variables.cpp +++ b/src/smpi/internals/smpi_static_variables.cpp @@ -6,10 +6,10 @@ #include "private.hpp" #include -typedef struct s_smpi_static { +struct s_smpi_static_t { void *ptr; void_f_pvoid_t free_fn; -} s_smpi_static_t; +}; /** * \brief Holds a reference to all static variables that were registered diff --git a/src/smpi/mpi/smpi_datatype_derived.cpp b/src/smpi/mpi/smpi_datatype_derived.cpp index ba77e82eef..3be87a2df3 100644 --- a/src/smpi/mpi/smpi_datatype_derived.cpp +++ b/src/smpi/mpi/smpi_datatype_derived.cpp @@ -6,6 +6,7 @@ #include "smpi_datatype_derived.hpp" #include "smpi_op.hpp" +#include XBT_LOG_EXTERNAL_CATEGORY(smpi_datatype); diff --git a/src/smpi/mpi/smpi_group.cpp b/src/smpi/mpi/smpi_group.cpp index a3b3446dc4..6f837af73e 100644 --- a/src/smpi/mpi/smpi_group.cpp +++ b/src/smpi/mpi/smpi_group.cpp @@ -3,8 +3,10 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#include "smpi_comm.hpp" #include "smpi_group.hpp" +#include "smpi_comm.hpp" +#include +#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_group, smpi, "Logging specific to SMPI (group)"); @@ -224,7 +226,7 @@ int Group::excl(int n, int *ranks, MPI_Group * newgroup){ int oldsize = size_; int newsize = oldsize - n; *newgroup = new Group(newsize); - int* to_exclude=xbt_new0(int, size_); + int* to_exclude = new int[size_]; for (int i = 0; i < oldsize; i++) to_exclude[i]=0; for (int i = 0; i < n; i++) @@ -237,7 +239,7 @@ int Group::excl(int n, int *ranks, MPI_Group * newgroup){ j++; } } - xbt_free(to_exclude); + delete[] to_exclude; return MPI_SUCCESS; } diff --git a/src/surf/FileImpl.cpp b/src/surf/FileImpl.cpp index ff0a830369..d190065cb0 100644 --- a/src/surf/FileImpl.cpp +++ b/src/surf/FileImpl.cpp @@ -29,7 +29,7 @@ FileImpl::FileImpl(sg_storage_t st, std::string path, std::string mount) : path_ Action* FileImpl::read(sg_size_t size) { - XBT_DEBUG("READ %s on disk '%s'", cname(), location_->cname()); + XBT_DEBUG("READ %s on disk '%s'", getCname(), location_->getCname()); if (current_position_ + size > size_) { if (current_position_ > size_) { size = 0; @@ -45,7 +45,7 @@ Action* FileImpl::read(sg_size_t size) Action* FileImpl::write(sg_size_t size) { - XBT_DEBUG("WRITE %s on disk '%s'. size '%llu/%llu'", cname(), location_->cname(), size, size_); + XBT_DEBUG("WRITE %s on disk '%s'. size '%llu/%llu'", getCname(), location_->getCname(), size, size_); StorageAction* action = location_->write(size); action->file_ = this; @@ -79,10 +79,10 @@ int FileImpl::unlink() { /* Check if the file is on this storage */ if (location_->getContent()->find(path_) == location_->getContent()->end()) { - XBT_WARN("File %s is not on disk %s. Impossible to unlink", cname(), location_->cname()); + XBT_WARN("File %s is not on disk %s. Impossible to unlink", getCname(), location_->getCname()); return -1; } else { - XBT_DEBUG("UNLINK %s on disk '%s'", cname(), location_->cname()); + XBT_DEBUG("UNLINK %s on disk '%s'", getCname(), location_->getCname()); location_->usedSize_ -= size_; // Remove the file from storage diff --git a/src/surf/FileImpl.hpp b/src/surf/FileImpl.hpp index 6b2f9cce25..94337fed3a 100644 --- a/src/surf/FileImpl.hpp +++ b/src/surf/FileImpl.hpp @@ -18,8 +18,8 @@ public: FileImpl(sg_storage_t st, std::string path, std::string mount); ~FileImpl() = default; - std::string name() { return path_; } - const char* cname() { return path_.c_str(); } + const std::string& getName() const { return path_; } + const char* getCname() const { return path_.c_str(); } const char* mount() { return mount_point_.c_str(); } sg_size_t size() { return size_; } void setSize(sg_size_t size) { size_ = size; } diff --git a/src/surf/HostImpl.cpp b/src/surf/HostImpl.cpp index f3530f5a69..18bf4bcc7e 100644 --- a/src/surf/HostImpl.cpp +++ b/src/surf/HostImpl.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2016. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2013-2017. 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. */ @@ -80,13 +80,16 @@ Action* HostModel::executeParallelTask(int host_nb, simgrid::s4u::Host** host_li xbt_die("Cannot have a communication that is not a simple point-to-point in this model. You should consider " "using the ptask model"); } - } else + } else { xbt_die( "This model only accepts one of the following. You should consider using the ptask model for the other cases.\n" " - execution with one host only and no communication\n" " - Self-comms with one host only\n" " - Communications with two hosts and no computation"); - xbt_free(host_list); + } + delete[] host_list; + delete[] flops_amount; + delete[] bytes_amount; return action; } @@ -104,7 +107,7 @@ void HostImpl::getAttachedStorageList(std::vector* storages) { for (auto const& s : storage_) if (s.second->getHost() == piface_->getCname()) - storages->push_back(s.second->piface_.getName()); + storages->push_back(s.second->piface_.getCname()); } } diff --git a/src/surf/StorageImpl.hpp b/src/surf/StorageImpl.hpp index b74d624435..b5f52e1f93 100644 --- a/src/surf/StorageImpl.hpp +++ b/src/surf/StorageImpl.hpp @@ -165,10 +165,10 @@ private: /** @ingroup SURF_storage_interface * @brief The possible type of action for the storage component */ -typedef enum { +enum e_surf_action_storage_type_t { READ = 0, /**< Read a file */ WRITE /**< Write in a file */ -} e_surf_action_storage_type_t; +}; /** @ingroup SURF_storage_interface * @brief SURF storage action interface class diff --git a/src/surf/cpu_cas01.cpp b/src/surf/cpu_cas01.cpp index 22eac86469..ca7cae6f4e 100644 --- a/src/surf/cpu_cas01.cpp +++ b/src/surf/cpu_cas01.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009-2011, 2013-2016. The SimGrid Team. +/* Copyright (c) 2009-2011, 2013-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -179,7 +179,7 @@ CpuAction *CpuCas01::sleep(double duration) if (duration > 0) duration = MAX(duration, sg_surf_precision); - XBT_IN("(%s,%g)", cname(), duration); + XBT_IN("(%s,%g)", getCname(), duration); CpuCas01Action* action = new CpuCas01Action(model(), 1.0, isOff(), speed_.scale * speed_.peak, constraint()); // FIXME: sleep variables should not consume 1.0 in lmm_expand diff --git a/src/surf/cpu_interface.cpp b/src/surf/cpu_interface.cpp index 3ea7017749..faa4ab5ddc 100644 --- a/src/surf/cpu_interface.cpp +++ b/src/surf/cpu_interface.cpp @@ -30,8 +30,9 @@ void CpuModel::updateActionsStateLazy(double now, double /*delta*/) XBT_CDEBUG(surf_kernel, "Something happened to action %p", action); if (TRACE_is_enabled()) { Cpu *cpu = static_cast(lmm_constraint_id(lmm_get_cnst_from_var(getMaxminSystem(), action->getVariable(), 0))); - TRACE_surf_host_set_utilization(cpu->cname(), action->getCategory(), lmm_variable_getvalue(action->getVariable()), - action->getLastUpdate(), now - action->getLastUpdate()); + TRACE_surf_host_set_utilization(cpu->getCname(), action->getCategory(), + lmm_variable_getvalue(action->getVariable()), action->getLastUpdate(), + now - action->getLastUpdate()); } action->finish(Action::State::done); @@ -71,8 +72,8 @@ void CpuModel::updateActionsStateFull(double now, double delta) if (TRACE_is_enabled()) { Cpu *cpu = static_cast (lmm_constraint_id(lmm_get_cnst_from_var(getMaxminSystem(), action->getVariable(), 0)) ); - TRACE_surf_host_set_utilization(cpu->cname(), action->getCategory(), lmm_variable_getvalue(action->getVariable()), - now - delta, delta); + TRACE_surf_host_set_utilization(cpu->getCname(), action->getCategory(), + lmm_variable_getvalue(action->getVariable()), now - delta, delta); TRACE_last_timestamp_to_dump = now - delta; } @@ -123,7 +124,7 @@ int Cpu::getNbPStates() void Cpu::setPState(int pstate_index) { xbt_assert(pstate_index <= static_cast(speedPerPstate_.size()), - "Invalid parameters for CPU %s (pstate %d > length of pstates %d)", cname(), pstate_index, + "Invalid parameters for CPU %s (pstate %d > length of pstates %d)", getCname(), pstate_index, static_cast(speedPerPstate_.size())); double new_peak_speed = speedPerPstate_[pstate_index]; @@ -157,7 +158,7 @@ double Cpu::getAvailableSpeed() } void Cpu::onSpeedChange() { - TRACE_surf_host_set_speed(surf_get_clock(), cname(), coresAmount_ * speed_.scale * speed_.peak); + TRACE_surf_host_set_speed(surf_get_clock(), getCname(), coresAmount_ * speed_.scale * speed_.peak); s4u::Host::onSpeedChange(*host_); } @@ -197,7 +198,7 @@ void CpuAction::updateRemainingLazy(double now) if (TRACE_is_enabled()) { Cpu *cpu = static_cast(lmm_constraint_id(lmm_get_cnst_from_var(getModel()->getMaxminSystem(), getVariable(), 0))); - TRACE_surf_host_set_utilization(cpu->cname(), getCategory(), lastValue_, lastUpdate_, now - lastUpdate_); + TRACE_surf_host_set_utilization(cpu->getCname(), getCategory(), lastValue_, lastUpdate_, now - lastUpdate_); } XBT_CDEBUG(surf_kernel, "Updating action(%p): remains is now %f", this, remains_); } diff --git a/src/surf/cpu_ti.cpp b/src/surf/cpu_ti.cpp index 454efa886d..eea488f589 100644 --- a/src/surf/cpu_ti.cpp +++ b/src/surf/cpu_ti.cpp @@ -548,8 +548,8 @@ void CpuTi::updateActionsFinishTime(double now) if (min_finish > NO_MAX_DURATION) xbt_heap_push(static_cast(model())->tiActionHeap_, action, min_finish); - XBT_DEBUG("Update finish time: Cpu(%s) Action: %p, Start Time: %f Finish Time: %f Max duration %f", cname(), action, - action->getStartTime(), action->finishTime_, action->getMaxDuration()); + XBT_DEBUG("Update finish time: Cpu(%s) Action: %p, Start Time: %f Finish Time: %f Max duration %f", getCname(), + action, action->getStartTime(), action->finishTime_, action->getMaxDuration()); } /* remove from modified cpu */ modified(false); @@ -609,7 +609,7 @@ void CpuTi::updateRemainingAmount(double now) CpuAction *CpuTi::execution_start(double size) { - XBT_IN("(%s,%g)", cname(), size); + XBT_IN("(%s,%g)", getCname(), size); CpuTiAction* action = new CpuTiAction(static_cast(model()), size, isOff(), this); actionSet_->push_back(*action); @@ -624,7 +624,7 @@ CpuAction *CpuTi::sleep(double duration) if (duration > 0) duration = MAX(duration, sg_surf_precision); - XBT_IN("(%s,%g)", cname(), duration); + XBT_IN("(%s,%g)", getCname(), duration); CpuTiAction* action = new CpuTiAction(static_cast(model()), 1.0, isOff(), this); action->maxDuration_ = duration; diff --git a/src/surf/instr_routing.cpp b/src/surf/instr_routing.cpp index 50f60c20e0..d15d6557f4 100644 --- a/src/surf/instr_routing.cpp +++ b/src/surf/instr_routing.cpp @@ -96,15 +96,12 @@ static void linkContainers(container_t src, container_t dst, std::setinsert(aux2); //declare type - char link_typename[INSTR_DEFAULT_STR_SIZE]; - snprintf(link_typename, INSTR_DEFAULT_STR_SIZE, "%s-%s%s-%s%s", father->type_->name_, src->type_->name_, - src->type_->id_, dst->type_->name_, dst->type_->id_); - simgrid::instr::Type* link_type = father->type_->getChildOrNull(link_typename); - if (link_type == nullptr) - link_type = simgrid::instr::Type::linkNew(link_typename, father->type_, src->type_, dst->type_); + std::string link_typename = father->type_->getName() + "-" + src->type_->getName() + src->type_->getId() + "-" + + dst->type_->getName() + dst->type_->getId(); + simgrid::instr::Type* link_type = father->type_->getOrCreateLinkType(link_typename, src->type_, dst->type_); //register EDGE types for triva configuration - trivaEdgeTypes.insert(link_type->name_); + trivaEdgeTypes.insert(link_type->getName()); //create the link static long long counter = 0; @@ -136,21 +133,17 @@ static void recursiveGraphExtraction(simgrid::s4u::NetZone* netzone, container_t } xbt_graph_t graph = xbt_graph_new_graph (0, nullptr); - xbt_dict_t nodes = xbt_dict_new_homogeneous(nullptr); - xbt_dict_t edges = xbt_dict_new_homogeneous(nullptr); - xbt_edge_t edge = nullptr; - - xbt_dict_cursor_t cursor = nullptr; - char *edge_name; + std::map* nodes = new std::map; + std::map* edges = new std::map; static_cast(netzone)->getGraph(graph, nodes, edges); - xbt_dict_foreach(edges,cursor,edge_name,edge) { - linkContainers( - PJ_container_get(static_cast(edge->src->data)), - PJ_container_get(static_cast(edge->dst->data)), filter); + for (auto elm : *edges) { + xbt_edge_t edge = elm.second; + linkContainers(simgrid::instr::Container::byName(static_cast(edge->src->data)), + simgrid::instr::Container::byName(static_cast(edge->dst->data)), filter); } - xbt_dict_free (&nodes); - xbt_dict_free (&edges); + delete nodes; + delete edges; xbt_graph_free_graph(graph, xbt_free_f, xbt_free_f, nullptr); } @@ -159,20 +152,17 @@ static void recursiveGraphExtraction(simgrid::s4u::NetZone* netzone, container_t */ static void sg_instr_AS_begin(simgrid::s4u::NetZone& netzone) { - const char* id = netzone.getCname(); + std::string id = netzone.getName(); if (PJ_container_get_root() == nullptr){ container_t root = new simgrid::instr::Container(id, simgrid::instr::INSTR_AS, nullptr); PJ_container_set_root (root); if (TRACE_smpi_is_enabled()) { - simgrid::instr::Type* mpi = root->type_->getChildOrNull("MPI"); - if (mpi == nullptr){ - mpi = simgrid::instr::Type::containerNew("MPI", root->type_); - if (not TRACE_smpi_is_grouped()) - simgrid::instr::Type::stateNew("MPI_STATE", mpi); - simgrid::instr::Type::linkNew("MPI_LINK", PJ_type_get_root(), mpi, mpi); - } + simgrid::instr::Type* mpi = root->type_->getOrCreateContainerType("MPI"); + if (not TRACE_smpi_is_grouped()) + mpi->getOrCreateStateType("MPI_STATE"); + simgrid::instr::Type::getRootType()->getOrCreateLinkType("MPI_LINK", mpi, mpi); } if (TRACE_needs_platform()){ @@ -204,22 +194,16 @@ static void instr_routing_parse_start_link(simgrid::s4u::Link& link) double bandwidth_value = link.bandwidth(); double latency_value = link.latency(); - container_t container = new simgrid::instr::Container(link.name(), simgrid::instr::INSTR_LINK, father); + container_t container = new simgrid::instr::Container(link.getCname(), simgrid::instr::INSTR_LINK, father); if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (not TRACE_disable_link())) { - simgrid::instr::Type* bandwidth = container->type_->getChildOrNull("bandwidth"); - if (bandwidth == nullptr) - bandwidth = simgrid::instr::Type::variableNew("bandwidth", nullptr, container->type_); - simgrid::instr::Type* latency = container->type_->getChildOrNull("latency"); - if (latency == nullptr) - latency = simgrid::instr::Type::variableNew("latency", nullptr, container->type_); + simgrid::instr::Type* bandwidth = container->type_->getOrCreateVariableType("bandwidth", ""); + simgrid::instr::Type* latency = container->type_->getOrCreateVariableType("latency", ""); new simgrid::instr::SetVariableEvent(0, container, bandwidth, bandwidth_value); new simgrid::instr::SetVariableEvent(0, container, latency, latency_value); } if (TRACE_uncategorized()) { - simgrid::instr::Type* bandwidth_used = container->type_->getChildOrNull("bandwidth_used"); - if (bandwidth_used == nullptr) - simgrid::instr::Type::variableNew("bandwidth_used", "0.5 0.5 0.5", container->type_); + container->type_->getOrCreateVariableType("bandwidth_used", "0.5 0.5 0.5"); } } @@ -229,57 +213,39 @@ static void sg_instr_new_host(simgrid::s4u::Host& host) container_t container = new simgrid::instr::Container(host.getCname(), simgrid::instr::INSTR_HOST, father); if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (not TRACE_disable_speed())) { - simgrid::instr::Type* speed = container->type_->getChildOrNull("power"); - if (speed == nullptr){ - speed = simgrid::instr::Type::variableNew("power", nullptr, container->type_); - } + simgrid::instr::Type* speed = container->type_->getOrCreateVariableType("power", ""); double current_speed_state = host.getSpeed(); new simgrid::instr::SetVariableEvent(0, container, speed, current_speed_state); } - if (TRACE_uncategorized()){ - simgrid::instr::Type* speed_used = container->type_->getChildOrNull("power_used"); - if (speed_used == nullptr){ - simgrid::instr::Type::variableNew("power_used", "0.5 0.5 0.5", container->type_); - } - } + if (TRACE_uncategorized()) + container->type_->getOrCreateVariableType("power_used", "0.5 0.5 0.5"); - if (TRACE_smpi_is_enabled() && TRACE_smpi_is_grouped()){ - simgrid::instr::Type* mpi = container->type_->getChildOrNull("MPI"); - if (mpi == nullptr){ - mpi = simgrid::instr::Type::containerNew("MPI", container->type_); - simgrid::instr::Type::stateNew("MPI_STATE", mpi); - } - } + if (TRACE_smpi_is_enabled() && TRACE_smpi_is_grouped()) + container->type_->getOrCreateContainerType("MPI")->getOrCreateStateType("MPI_STATE"); if (TRACE_msg_process_is_enabled()) { - simgrid::instr::Type* msg_process = container->type_->getChildOrNull("MSG_PROCESS"); - if (msg_process == nullptr){ - msg_process = simgrid::instr::Type::containerNew("MSG_PROCESS", container->type_); - simgrid::instr::Type* state = simgrid::instr::Type::stateNew("MSG_PROCESS_STATE", msg_process); - new simgrid::instr::Value("suspend", "1 0 1", state); - simgrid::instr::Value::get_or_new("sleep", "1 1 0", state); - simgrid::instr::Value::get_or_new("receive", "1 0 0", state); - simgrid::instr::Value::get_or_new("send", "0 0 1", state); - simgrid::instr::Value::get_or_new("task_execute", "0 1 1", state); - simgrid::instr::Type::linkNew("MSG_PROCESS_LINK", PJ_type_get_root(), msg_process, msg_process); - simgrid::instr::Type::linkNew("MSG_PROCESS_TASK_LINK", PJ_type_get_root(), msg_process, msg_process); - } + simgrid::instr::Type* msg_process = container->type_->getOrCreateContainerType("MSG_PROCESS"); + simgrid::instr::Type* state = msg_process->getOrCreateStateType("MSG_PROCESS_STATE"); + simgrid::instr::Value::byNameOrCreate("suspend", "1 0 1", state); + simgrid::instr::Value::byNameOrCreate("sleep", "1 1 0", state); + simgrid::instr::Value::byNameOrCreate("receive", "1 0 0", state); + simgrid::instr::Value::byNameOrCreate("send", "0 0 1", state); + simgrid::instr::Value::byNameOrCreate("task_execute", "0 1 1", state); + simgrid::instr::Type::getRootType()->getOrCreateLinkType("MSG_PROCESS_LINK", msg_process, msg_process); + simgrid::instr::Type::getRootType()->getOrCreateLinkType("MSG_PROCESS_TASK_LINK", msg_process, msg_process); } if (TRACE_msg_vm_is_enabled()) { - simgrid::instr::Type* msg_vm = container->type_->getChildOrNull("MSG_VM"); - if (msg_vm == nullptr){ - msg_vm = simgrid::instr::Type::containerNew("MSG_VM", container->type_); - simgrid::instr::Type* state = simgrid::instr::Type::stateNew("MSG_VM_STATE", msg_vm); - new simgrid::instr::Value("suspend", "1 0 1", state); - simgrid::instr::Value::get_or_new("sleep", "1 1 0", state); - simgrid::instr::Value::get_or_new("receive", "1 0 0", state); - simgrid::instr::Value::get_or_new("send", "0 0 1", state); - simgrid::instr::Value::get_or_new("task_execute", "0 1 1", state); - simgrid::instr::Type::linkNew("MSG_VM_LINK", PJ_type_get_root(), msg_vm, msg_vm); - simgrid::instr::Type::linkNew("MSG_VM_PROCESS_LINK", PJ_type_get_root(), msg_vm, msg_vm); - } + simgrid::instr::Type* msg_vm = container->type_->getOrCreateContainerType("MSG_VM"); + simgrid::instr::Type* state = msg_vm->getOrCreateStateType("MSG_VM_STATE"); + simgrid::instr::Value::byNameOrCreate("suspend", "1 0 1", state); + simgrid::instr::Value::byNameOrCreate("sleep", "1 1 0", state); + simgrid::instr::Value::byNameOrCreate("receive", "1 0 0", state); + simgrid::instr::Value::byNameOrCreate("send", "0 0 1", state); + simgrid::instr::Value::byNameOrCreate("task_execute", "0 1 1", state); + simgrid::instr::Type::getRootType()->getOrCreateLinkType("MSG_VM_LINK", msg_vm, msg_vm); + simgrid::instr::Type::getRootType()->getOrCreateLinkType("MSG_VM_PROCESS_LINK", msg_vm, msg_vm); } } @@ -289,7 +255,7 @@ static void sg_instr_new_router(simgrid::kernel::routing::NetPoint * netpoint) return; if (TRACE_is_enabled() && TRACE_needs_platform()) { container_t father = currentContainer.back(); - new simgrid::instr::Container(netpoint->cname(), simgrid::instr::INSTR_ROUTER, father); + new simgrid::instr::Container(netpoint->getCname(), simgrid::instr::INSTR_ROUTER, father); } } @@ -302,13 +268,12 @@ static void instr_routing_parse_end_platform () XBT_DEBUG ("Graph extraction finished."); delete filter; platform_created = 1; - TRACE_paje_dump_buffer(1); + TRACE_paje_dump_buffer(true); } void instr_routing_define_callbacks () { - //always need the call backs to ASes (we need only the root AS), - //to create the rootContainer and the rootType properly + // always need the callbacks to ASes (we need only the root AS), to create the rootContainer and the rootType properly if (not TRACE_is_enabled()) return; if (TRACE_needs_platform()) { @@ -323,90 +288,66 @@ void instr_routing_define_callbacks () /* * user categories support */ -static void recursiveNewVariableType(const char* new_typename, const char* color, simgrid::instr::Type* root) +static void recursiveNewVariableType(std::string new_typename, const char* color, simgrid::instr::Type* root) { - if (not strcmp(root->name_, "HOST")) { - char tnstr[INSTR_DEFAULT_STR_SIZE]; - snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "p%s", new_typename); - simgrid::instr::Type::variableNew(tnstr, color, root); - } - if (not strcmp(root->name_, "MSG_VM")) { - char tnstr[INSTR_DEFAULT_STR_SIZE]; - snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "p%s", new_typename); - simgrid::instr::Type::variableNew(tnstr, color, root); - } - if (not strcmp(root->name_, "LINK")) { - char tnstr[INSTR_DEFAULT_STR_SIZE]; - snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "b%s", new_typename); - simgrid::instr::Type::variableNew(tnstr, color, root); - } - xbt_dict_cursor_t cursor = nullptr; - simgrid::instr::Type* child_type; - char *name; - xbt_dict_foreach (root->children_, cursor, name, child_type) { - recursiveNewVariableType (new_typename, color, child_type); + if (root->getName() == "HOST" || root->getName() == "MSG_VM") + root->getOrCreateVariableType(std::string("p") + new_typename, color == nullptr ? "" : color); + + if (root->getName() == "LINK") + root->getOrCreateVariableType(std::string("b") + new_typename, color == nullptr ? "" : color); + + for (auto elm : root->children_) { + recursiveNewVariableType(new_typename, color == nullptr ? "" : color, elm.second); } } -void instr_new_variable_type (const char *new_typename, const char *color) +void instr_new_variable_type(std::string new_typename, const char* color) { - recursiveNewVariableType (new_typename, color, PJ_type_get_root()); + recursiveNewVariableType(new_typename, color, simgrid::instr::Type::getRootType()); } -static void recursiveNewUserVariableType(const char* father_type, const char* new_typename, const char* color, +static void recursiveNewUserVariableType(std::string father_type, std::string new_typename, const char* color, simgrid::instr::Type* root) { - if (not strcmp(root->name_, father_type)) { - simgrid::instr::Type::variableNew(new_typename, color, root); - } - xbt_dict_cursor_t cursor = nullptr; - simgrid::instr::Type* child_type; - char *name; - xbt_dict_foreach (root->children_, cursor, name, child_type) { - recursiveNewUserVariableType (father_type, new_typename, color, child_type); + if (root->getName() == father_type) { + root->getOrCreateVariableType(new_typename, color == nullptr ? "" : color); } + for (auto elm : root->children_) + recursiveNewUserVariableType(father_type, new_typename, color, elm.second); } -void instr_new_user_variable_type (const char *father_type, const char *new_typename, const char *color) +void instr_new_user_variable_type(std::string father_type, std::string new_typename, const char* color) { - recursiveNewUserVariableType (father_type, new_typename, color, PJ_type_get_root()); + recursiveNewUserVariableType(father_type, new_typename, color, simgrid::instr::Type::getRootType()); } -static void recursiveNewUserStateType(const char* father_type, const char* new_typename, simgrid::instr::Type* root) +static void recursiveNewUserStateType(std::string father_type, std::string new_typename, simgrid::instr::Type* root) { - if (not strcmp(root->name_, father_type)) { - simgrid::instr::Type::stateNew(new_typename, root); - } - xbt_dict_cursor_t cursor = nullptr; - simgrid::instr::Type* child_type; - char *name; - xbt_dict_foreach (root->children_, cursor, name, child_type) { - recursiveNewUserStateType (father_type, new_typename, child_type); + if (root->getName() == father_type) { + root->getOrCreateStateType(new_typename); } + for (auto elm : root->children_) + recursiveNewUserStateType(father_type, new_typename, elm.second); } -void instr_new_user_state_type (const char *father_type, const char *new_typename) +void instr_new_user_state_type(std::string father_type, std::string new_typename) { - recursiveNewUserStateType (father_type, new_typename, PJ_type_get_root()); + recursiveNewUserStateType(father_type, new_typename, simgrid::instr::Type::getRootType()); } -static void recursiveNewValueForUserStateType(const char* type_name, const char* val, const char* color, +static void recursiveNewValueForUserStateType(std::string type_name, const char* val, const char* color, simgrid::instr::Type* root) { - if (not strcmp(root->name_, type_name)) { - new simgrid::instr::Value(val, color, root); - } - xbt_dict_cursor_t cursor = nullptr; - simgrid::instr::Type* child_type; - char *name; - xbt_dict_foreach (root->children_, cursor, name, child_type) { - recursiveNewValueForUserStateType(type_name, val, color, child_type); - } + if (root->getName() == type_name) + simgrid::instr::Value::byNameOrCreate(val, color, root); + + for (auto elm : root->children_) + recursiveNewValueForUserStateType(type_name, val, color, elm.second); } -void instr_new_value_for_user_state_type (const char *type_name, const char *value, const char *color) +void instr_new_value_for_user_state_type(std::string type_name, const char* value, const char* color) { - recursiveNewValueForUserStateType (type_name, value, color, PJ_type_get_root()); + recursiveNewValueForUserStateType(type_name, value, color, simgrid::instr::Type::getRootType()); } int instr_platform_traced () @@ -416,7 +357,8 @@ int instr_platform_traced () #define GRAPHICATOR_SUPPORT_FUNCTIONS -static void recursiveXBTGraphExtraction(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges, sg_netzone_t netzone, +static void recursiveXBTGraphExtraction(xbt_graph_t graph, std::map* nodes, + std::map* edges, sg_netzone_t netzone, container_t container) { if (not netzone->getChildren()->empty()) { @@ -433,12 +375,12 @@ static void recursiveXBTGraphExtraction(xbt_graph_t graph, xbt_dict_t nodes, xbt xbt_graph_t instr_routing_platform_graph () { xbt_graph_t ret = xbt_graph_new_graph (0, nullptr); - xbt_dict_t nodes = xbt_dict_new_homogeneous(nullptr); - xbt_dict_t edges = xbt_dict_new_homogeneous(nullptr); + std::map* nodes = new std::map; + std::map* edges = new std::map; recursiveXBTGraphExtraction(ret, nodes, edges, simgrid::s4u::Engine::getInstance()->getNetRoot(), PJ_container_get_root()); - xbt_dict_free (&nodes); - xbt_dict_free (&edges); + delete nodes; + delete edges; return ret; } diff --git a/src/surf/instr_surf.cpp b/src/surf/instr_surf.cpp index 43c84ed091..8c6e0b190b 100644 --- a/src/surf/instr_surf.cpp +++ b/src/surf/instr_surf.cpp @@ -12,8 +12,8 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_surf, instr, "Tracing Surf"); void TRACE_surf_host_set_speed(double date, const char *resource, double speed) { if (TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) { - container_t container = PJ_container_get(resource); - simgrid::instr::Type* type = container->type_->getChild("power"); + container_t container = simgrid::instr::Container::byName(resource); + simgrid::instr::Type* type = container->type_->byName("power"); new simgrid::instr::SetVariableEvent(date, container, type, speed); } } @@ -21,8 +21,8 @@ void TRACE_surf_host_set_speed(double date, const char *resource, double speed) void TRACE_surf_link_set_bandwidth(double date, const char *resource, double bandwidth) { if (TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) { - container_t container = PJ_container_get(resource); - simgrid::instr::Type* type = container->type_->getChild("bandwidth"); + container_t container = simgrid::instr::Container::byName(resource); + simgrid::instr::Type* type = container->type_->byName("bandwidth"); new simgrid::instr::SetVariableEvent(date, container, type, bandwidth); } } diff --git a/src/surf/lagrange.cpp b/src/surf/lagrange.cpp index 0f671f5d37..91073c0949 100644 --- a/src/surf/lagrange.cpp +++ b/src/surf/lagrange.cpp @@ -37,7 +37,9 @@ static double partial_diff_lambda(double lambda, void *param_cnst); static int __check_feasible(xbt_swag_t cnst_list, xbt_swag_t var_list, int warn) { - void *_cnst, *_elem, *_var; + void* _cnst; + void* _elem; + void* _var; xbt_swag_t elem_list = nullptr; lmm_element_t elem = nullptr; lmm_constraint_t cnst = nullptr; diff --git a/src/surf/maxmin.cpp b/src/surf/maxmin.cpp index 23ca2252d2..72d2005543 100644 --- a/src/surf/maxmin.cpp +++ b/src/surf/maxmin.cpp @@ -16,11 +16,11 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_maxmin, surf, "Logging specific to SURF (maxmin)"); -typedef struct s_dyn_light { +struct s_dyn_light_t { int *data; int pos; int size; -} s_dyn_light_t; +}; typedef s_dyn_light_t* dyn_light_t; double sg_maxmin_precision = 0.00001; /* Change this with --cfg=maxmin/precision:VALUE */ @@ -333,7 +333,7 @@ lmm_variable_t lmm_variable_new(lmm_system_t sys, simgrid::surf::Action* id, dou lmm_variable_t var = (lmm_variable_t)xbt_mallocator_get(sys->variable_mallocator); var->id = id; var->id_int = Global_debug_id++; - var->cnsts = (s_lmm_element_t *) xbt_realloc(var->cnsts, number_of_constraints * sizeof(s_lmm_element_t)); + var->cnsts = static_cast(xbt_realloc(var->cnsts, number_of_constraints * sizeof(s_lmm_element_t))); for (int i = 0; i < number_of_constraints; i++) { var->cnsts[i].enabled_element_set_hookup.next = nullptr; var->cnsts[i].enabled_element_set_hookup.prev = nullptr; @@ -774,8 +774,8 @@ void lmm_solve(lmm_system_t sys) } } - s_lmm_constraint_light_t *cnst_light_tab = - (s_lmm_constraint_light_t *)xbt_malloc0(xbt_swag_size(cnst_list)*sizeof(s_lmm_constraint_light_t)); + s_lmm_constraint_light_t* cnst_light_tab = + static_cast(xbt_malloc0(xbt_swag_size(cnst_list) * sizeof(s_lmm_constraint_light_t))); int cnst_light_num = 0; dyn_light_t saturated_constraint_set = xbt_new0(s_dyn_light_t,1); saturated_constraint_set->size = 5; diff --git a/src/surf/maxmin_private.hpp b/src/surf/maxmin_private.hpp index 15de20fffc..976caa0308 100644 --- a/src/surf/maxmin_private.hpp +++ b/src/surf/maxmin_private.hpp @@ -17,7 +17,7 @@ * Basically, each variable will have a set of elements, one for each constraint where it is involved. * Then, it is used to list all variables involved in constraint through constraint's xxx_element_set lists, or vice-versa list all constraints for a given variable. */ -typedef struct lmm_element { +struct s_lmm_element_t { /* hookup to constraint */ s_xbt_swag_hookup_t enabled_element_set_hookup; s_xbt_swag_hookup_t disabled_element_set_hookup; @@ -30,14 +30,14 @@ typedef struct lmm_element { // - if CPU, then probably 1. // - If network, then 1 in forward direction and 0.05 backward for the ACKs double consumption_weight; -} s_lmm_element_t; +}; #define make_elem_active(elem) xbt_swag_insert_at_head(elem,&(elem->constraint->active_element_set)) #define make_elem_inactive(elem) xbt_swag_remove(elem,&(elem->constraint->active_element_set)) -typedef struct lmm_constraint_light { +struct s_lmm_constraint_light_t { double remaining_over_usage; lmm_constraint_t cnst; -} s_lmm_constraint_light_t; +}; /** @ingroup SURF_lmm * @brief LMM constraint @@ -47,7 +47,7 @@ typedef struct lmm_constraint_light { * \li Active elements which variable's weight is non-zero (i.e. it is enabled) AND its element value is non-zero. LMM_solve iterates over active elements during resolution, dynamically making them active or unactive. * */ -typedef struct lmm_constraint { +struct s_lmm_constraint_t { /* hookup to system */ s_xbt_swag_hookup_t constraint_set_hookup; s_xbt_swag_hookup_t active_constraint_set_hookup; @@ -71,14 +71,14 @@ typedef struct lmm_constraint { double lambda; double new_lambda; lmm_constraint_light_t cnst_light; -} s_lmm_constraint_t; +}; /** @ingroup SURF_lmm * @brief LMM variable * * When something prevents us from enabling a variable, we "stage" the weight that we would have like to set, so that as soon as possible we enable the variable with desired weight */ -typedef struct lmm_variable { +struct s_lmm_variable_t { /* hookup to system */ s_xbt_swag_hookup_t variable_set_hookup; s_xbt_swag_hookup_t saturated_variable_set_hookup; @@ -103,16 +103,16 @@ typedef struct lmm_variable { /* \begin{For Lagrange only} */ double mu; double new_mu; - double (*func_f) (struct lmm_variable * var, double x); /* (f) */ - double (*func_fp) (struct lmm_variable * var, double x); /* (f') */ - double (*func_fpi) (struct lmm_variable * var, double x); /* (f')^{-1} */ + double (*func_f)(s_lmm_variable_t* var, double x); /* (f) */ + double (*func_fp)(s_lmm_variable_t* var, double x); /* (f') */ + double (*func_fpi)(s_lmm_variable_t* var, double x); /* (f')^{-1} */ /* \end{For Lagrange only} */ -} s_lmm_variable_t; +}; /** @ingroup SURF_lmm * @brief LMM system */ -typedef struct lmm_system { +struct s_lmm_system_t { int modified; bool selective_update_active; /* flag to update partially the system only selecting changed portions */ unsigned visited_counter; /* used by lmm_update_modified_set and lmm_remove_modified_set to cleverly (un-)flag the constraints (more details in these functions)*/ @@ -130,7 +130,7 @@ typedef struct lmm_system { xbt_mallocator_t variable_mallocator; void (*solve_fun)(lmm_system_t self); -} s_lmm_system_t; +}; #define extract_variable(sys) xbt_swag_extract(&(sys->variable_set)) #define extract_constraint(sys) xbt_swag_extract(&(sys->constraint_set)) diff --git a/src/surf/network_cm02.cpp b/src/surf/network_cm02.cpp index e7b27ac6ee..9bd196ab18 100644 --- a/src/surf/network_cm02.cpp +++ b/src/surf/network_cm02.cpp @@ -186,7 +186,7 @@ void NetworkCm02Model::updateActionsStateLazy(double now, double /*delta*/) NetworkCm02Link *link = static_cast(lmm_constraint_id(constraint)); double value = lmm_variable_getvalue(action->getVariable())* lmm_get_cnst_weight_from_var(maxminSystem_, action->getVariable(), i); - TRACE_surf_link_set_utilization(link->cname(), action->getCategory(), value, action->getLastUpdate(), + TRACE_surf_link_set_utilization(link->getCname(), action->getCategory(), value, action->getLastUpdate(), now - action->getLastUpdate()); } } @@ -239,7 +239,7 @@ void NetworkCm02Model::updateActionsStateFull(double now, double delta) lmm_constraint_t constraint = lmm_get_cnst_from_var(maxminSystem_, action->getVariable(), i); NetworkCm02Link* link = static_cast(lmm_constraint_id(constraint)); - TRACE_surf_link_set_utilization(link->cname(), action->getCategory(), + TRACE_surf_link_set_utilization(link->getCname(), action->getCategory(), (lmm_variable_getvalue(action->getVariable()) * lmm_get_cnst_weight_from_var(maxminSystem_, action->getVariable(), i)), action->getLastUpdate(), now - action->getLastUpdate()); @@ -417,7 +417,7 @@ void NetworkCm02Link::setBandwidth(double value) lmm_update_constraint_bound(model()->getMaxminSystem(), constraint(), sg_bandwidth_factor * (bandwidth_.peak * bandwidth_.scale)); - TRACE_surf_link_set_bandwidth(surf_get_clock(), cname(), sg_bandwidth_factor * bandwidth_.peak * bandwidth_.scale); + TRACE_surf_link_set_bandwidth(surf_get_clock(), getCname(), sg_bandwidth_factor * bandwidth_.peak * bandwidth_.scale); if (sg_weight_S_parameter > 0) { double delta = sg_weight_S_parameter / value - sg_weight_S_parameter / (bandwidth_.peak * bandwidth_.scale); diff --git a/src/surf/network_interface.cpp b/src/surf/network_interface.cpp index 6e2569a32d..0b5a2bbddd 100644 --- a/src/surf/network_interface.cpp +++ b/src/surf/network_interface.cpp @@ -166,17 +166,17 @@ namespace simgrid { } void LinkImpl::setStateTrace(tmgr_trace_t trace) { - xbt_assert(stateEvent_ == nullptr, "Cannot set a second state trace to Link %s", cname()); + xbt_assert(stateEvent_ == nullptr, "Cannot set a second state trace to Link %s", getCname()); stateEvent_ = future_evt_set->add_trace(trace, this); } void LinkImpl::setBandwidthTrace(tmgr_trace_t trace) { - xbt_assert(bandwidth_.event == nullptr, "Cannot set a second bandwidth trace to Link %s", cname()); + xbt_assert(bandwidth_.event == nullptr, "Cannot set a second bandwidth trace to Link %s", getCname()); bandwidth_.event = future_evt_set->add_trace(trace, this); } void LinkImpl::setLatencyTrace(tmgr_trace_t trace) { - xbt_assert(latency_.event == nullptr, "Cannot set a second latency trace to Link %s", cname()); + xbt_assert(latency_.event == nullptr, "Cannot set a second latency trace to Link %s", getCname()); latency_.event = future_evt_set->add_trace(trace, this); } diff --git a/src/surf/network_interface.hpp b/src/surf/network_interface.hpp index d8a3b0d10a..14a1518462 100644 --- a/src/surf/network_interface.hpp +++ b/src/surf/network_interface.hpp @@ -208,10 +208,10 @@ public: void setState(simgrid::surf::Action::State state) override; virtual std::list links(); - double latency_; - double latCurrent_; - double weight_; - double rate_; + double latency_ = {}; + double latCurrent_ = {}; + double weight_ = {}; + double rate_ = {}; }; } } diff --git a/src/surf/network_ns3.cpp b/src/surf/network_ns3.cpp index 0a1f72aadc..ec74310c58 100644 --- a/src/surf/network_ns3.cpp +++ b/src/surf/network_ns3.cpp @@ -3,9 +3,11 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include #include #include "xbt/config.hpp" +#include "xbt/string.hpp" #include "ns3/core-module.h" #include "ns3/node.h" @@ -21,13 +23,13 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(ns3, surf, "Logging specific to the SURF network NS3 module"); -std::vector IPV4addr; +std::vector IPV4addr; /***************** * Crude globals * *****************/ -extern xbt_dict_t flowFromSock; +extern std::map flowFromSock; static ns3::InternetStackHelper stack; static ns3::NodeContainer nodes; @@ -84,19 +86,18 @@ static void routeCreation_cb(bool symmetrical, simgrid::kernel::routing::NetPoin if (link_list->size() == 1) { simgrid::surf::LinkNS3* link = static_cast(link_list->at(0)); - XBT_DEBUG("Route from '%s' to '%s' with link '%s' %s", src->cname(), dst->cname(), link->cname(), + XBT_DEBUG("Route from '%s' to '%s' with link '%s' %s", src->getCname(), dst->getCname(), link->getCname(), (symmetrical ? "(symmetrical)" : "(not symmetrical)")); // XBT_DEBUG("src (%s), dst (%s), src_id = %d, dst_id = %d",src,dst, src_id, dst_id); - XBT_DEBUG("\tLink (%s) bw:%fbps lat:%fs", link->cname(), link->bandwidth(), - link->latency()); + XBT_DEBUG("\tLink (%s) bw:%fbps lat:%fs", link->getCname(), link->bandwidth(), link->latency()); // create link ns3 NetPointNs3* host_src = src->extension(); NetPointNs3* host_dst = dst->extension(); - xbt_assert(host_src != nullptr, "Network element %s does not seem to be NS3-ready", src->cname()); - xbt_assert(host_dst != nullptr, "Network element %s does not seem to be NS3-ready", dst->cname()); + xbt_assert(host_src != nullptr, "Network element %s does not seem to be NS3-ready", src->getCname()); + xbt_assert(host_dst != nullptr, "Network element %s does not seem to be NS3-ready", dst->getCname()); ns3_add_link(host_src, host_dst, link->bandwidth(), link->latency()); } else { @@ -108,7 +109,7 @@ static void routeCreation_cb(bool symmetrical, simgrid::kernel::routing::NetPoin "of length 1.\n" "WARNING: Remove long routes to avoid this harmless message; subsequent long routes will be silently " "ignored.", - src->cname(), dst->cname(), link_list->size()); + src->getCname(), dst->getCname(), link_list->size()); warned_about_long_routes = true; } } @@ -143,12 +144,11 @@ namespace surf { NetworkNS3Model::NetworkNS3Model() : NetworkModel() { NetPointNs3::EXTENSION_ID = simgrid::kernel::routing::NetPoint::extension_create(); - flowFromSock = xbt_dict_new_homogeneous([](void* p) { delete static_cast(p); }); ns3_initialize(ns3_tcp_model.get().c_str()); simgrid::kernel::routing::NetPoint::onCreation.connect([](simgrid::kernel::routing::NetPoint* pt) { pt->extension_set(new NetPointNs3()); - XBT_VERB("SimGrid's %s is known as node %d within NS3", pt->cname(), pt->extension()->node_num); + XBT_VERB("SimGrid's %s is known as node %d within NS3", pt->getCname(), pt->extension()->node_num); }); simgrid::surf::on_cluster.connect(&clusterCreation_cb); simgrid::s4u::onPlatformCreated.connect(&postparse_cb); @@ -160,10 +160,7 @@ NetworkNS3Model::NetworkNS3Model() : NetworkModel() { } NetworkNS3Model::~NetworkNS3Model() { - for (auto const& addr : IPV4addr) - free(addr); IPV4addr.clear(); - xbt_dict_free(&flowFromSock); } LinkImpl* NetworkNS3Model::createLink(const std::string& name, double bandwidth, double latency, @@ -201,7 +198,7 @@ double NetworkNS3Model::nextOccuringEvent(double now) void NetworkNS3Model::updateActionsState(double now, double delta) { - static xbt_dynar_t socket_to_destroy = xbt_dynar_new(sizeof(char*),nullptr); + static std::vector socket_to_destroy; /* If there are no running flows, advance the NS3 simulator and return */ if (getRunningActionSet()->empty()) { @@ -212,10 +209,10 @@ void NetworkNS3Model::updateActionsState(double now, double delta) return; } - xbt_dict_cursor_t cursor = nullptr; - char *ns3Socket; - SgFlow *sgFlow; - xbt_dict_foreach(flowFromSock,cursor,ns3Socket,sgFlow){ + std::string ns3Socket; + for (auto elm : flowFromSock) { + ns3Socket = elm.first; + SgFlow* sgFlow = elm.second; NetworkNS3Action * action = sgFlow->action_; XBT_DEBUG("Processing socket %p (action %p)",sgFlow,action); action->setRemains(action->getCost() - sgFlow->sentBytes_); @@ -228,27 +225,28 @@ void NetworkNS3Model::updateActionsState(double now, double delta) action->src_->routeTo(action->dst_, &route, nullptr); for (auto const& link : route) - TRACE_surf_link_set_utilization(link->cname(), action->getCategory(), (data_delta_sent) / delta, now - delta, + TRACE_surf_link_set_utilization(link->getCname(), action->getCategory(), (data_delta_sent) / delta, now - delta, delta); action->lastSent_ = sgFlow->sentBytes_; } if(sgFlow->finished_){ - xbt_dynar_push(socket_to_destroy,&ns3Socket); + socket_to_destroy.push_back(ns3Socket); XBT_DEBUG("Destroy socket %p of action %p", ns3Socket, action); action->finish(Action::State::done); } } - while (not xbt_dynar_is_empty(socket_to_destroy)) { - xbt_dynar_pop(socket_to_destroy,&ns3Socket); - + while (not socket_to_destroy.empty()) { + ns3Socket = socket_to_destroy.back(); + socket_to_destroy.pop_back(); + SgFlow* flow = flowFromSock.at(ns3Socket); if (XBT_LOG_ISENABLED(ns3, xbt_log_priority_debug)) { - SgFlow* flow = static_cast(xbt_dict_get(flowFromSock, ns3Socket)); XBT_DEBUG ("Removing socket %p of action %p", ns3Socket, flow->action_); } - xbt_dict_remove(flowFromSock, ns3Socket); + delete flow; + flowFromSock.erase(ns3Socket); } } @@ -347,22 +345,22 @@ void ns3_create_flow(simgrid::s4u::Host* src, simgrid::s4u::Host* dst, ns3::Ptr dst_node = nodes.Get(node2); xbt_assert(node2 < IPV4addr.size(), "Element %s is unknown to NS3. Is it connected to any one-hop link?", - dst->pimpl_netpoint->cname()); - char* addr = IPV4addr.at(node2); - xbt_assert(addr != nullptr, "Element %s is unknown to NS3. Is it connected to any one-hop link?", - dst->pimpl_netpoint->cname()); + dst->pimpl_netpoint->getCname()); + std::string& addr = IPV4addr[node2]; + xbt_assert(not addr.empty(), "Element %s is unknown to NS3. Is it connected to any one-hop link?", + dst->pimpl_netpoint->getCname()); - XBT_DEBUG("ns3_create_flow %u Bytes from %u to %u with Interface %s", TotalBytes, node1, node2, addr); + XBT_DEBUG("ns3_create_flow %u Bytes from %u to %u with Interface %s", TotalBytes, node1, node2, addr.c_str()); ns3::PacketSinkHelper sink("ns3::TcpSocketFactory", ns3::InetSocketAddress (ns3::Ipv4Address::GetAny(), port_number)); sink.Install (dst_node); ns3::Ptr sock = ns3::Socket::CreateSocket(src_node, ns3::TcpSocketFactory::GetTypeId()); - xbt_dict_set(flowFromSock, transformSocketPtr(sock), new SgFlow(TotalBytes, action), nullptr); + flowFromSock.insert({transformSocketPtr(sock), new SgFlow(TotalBytes, action)}); sock->Bind(ns3::InetSocketAddress(port_number)); - ns3::Simulator::ScheduleNow(&StartFlow, sock, addr, port_number); + ns3::Simulator::ScheduleNow(&StartFlow, sock, addr.c_str(), port_number); port_number++; xbt_assert(port_number <= 65000, "Too many connections! Port number is saturated."); @@ -420,11 +418,10 @@ void ns3_add_cluster(const char* id, double bw, double lat) { ns3::NetDeviceContainer devices = csma.Install(Nodes); XBT_DEBUG("Create CSMA"); - char * adr = bprintf("%d.%d.0.0",number_of_networks,number_of_links); - XBT_DEBUG("Assign IP Addresses %s to CSMA.",adr); + std::string addr = simgrid::xbt::string_printf("%d.%d.0.0", number_of_networks, number_of_links); + XBT_DEBUG("Assign IP Addresses %s to CSMA.", addr.c_str()); ns3::Ipv4AddressHelper ipv4; - ipv4.SetBase (adr, "255.255.0.0"); - free(adr); + ipv4.SetBase(addr.c_str(), "255.255.0.0"); interfaces.Add(ipv4.Assign (devices)); if(number_of_links == 255){ @@ -437,11 +434,11 @@ void ns3_add_cluster(const char* id, double bw, double lat) { XBT_DEBUG("Number of nodes in Cluster_nodes: %u", Cluster_nodes.GetN()); } -static char* transformIpv4Address (ns3::Ipv4Address from){ +static std::string transformIpv4Address(ns3::Ipv4Address from) +{ std::stringstream sstream; sstream << from ; - std::string s = sstream.str(); - return bprintf("%s",s.c_str()); + return sstream.str(); } void ns3_add_link(NetPointNs3* src, NetPointNs3* dst, double bw, double lat) { @@ -459,28 +456,26 @@ void ns3_add_link(NetPointNs3* src, NetPointNs3* dst, double bw, double lat) { pointToPoint.SetDeviceAttribute("DataRate", ns3::DataRateValue(ns3::DataRate(bw*8)));// NS3 takes bps, but we provide Bps pointToPoint.SetChannelAttribute("Delay", ns3::TimeValue(ns3::Seconds(lat))); - char *filename = bprintf("link-%d-%d.tr", srcNum, dstNum); + std::string filename = simgrid::xbt::string_printf("link-%d-%d.tr", srcNum, dstNum); ns3::AsciiTraceHelper ascii; - pointToPoint.EnableAsciiAll (ascii.CreateFileStream (filename)); + pointToPoint.EnableAsciiAll(ascii.CreateFileStream(filename)); pointToPoint.EnablePcapAll ("tcp-bulk-send", false); - xbt_free(filename); ns3::NetDeviceContainer netA; netA.Add(pointToPoint.Install (a, b)); - char * adr = bprintf("%d.%d.0.0",number_of_networks,number_of_links); - address.SetBase (adr, "255.255.0.0"); - XBT_DEBUG("\tInterface stack '%s'",adr); - free(adr); + std::string addr = simgrid::xbt::string_printf("%d.%d.0.0", number_of_networks, number_of_links); + address.SetBase(addr.c_str(), "255.255.0.0"); + XBT_DEBUG("\tInterface stack '%s'", addr.c_str()); interfaces.Add(address.Assign (netA)); if (IPV4addr.size() <= (unsigned)srcNum) - IPV4addr.resize(srcNum + 1, nullptr); - IPV4addr.at(srcNum) = transformIpv4Address(interfaces.GetAddress(interfaces.GetN() - 2)); + IPV4addr.resize(srcNum + 1); + IPV4addr[srcNum] = transformIpv4Address(interfaces.GetAddress(interfaces.GetN() - 2)); if (IPV4addr.size() <= (unsigned)dstNum) - IPV4addr.resize(dstNum + 1, nullptr); - IPV4addr.at(dstNum) = transformIpv4Address(interfaces.GetAddress(interfaces.GetN() - 1)); + IPV4addr.resize(dstNum + 1); + IPV4addr[dstNum] = transformIpv4Address(interfaces.GetAddress(interfaces.GetN() - 1)); if (number_of_links == 255){ xbt_assert(number_of_networks < 255, "Number of links and networks exceed 255*255"); diff --git a/src/surf/network_smpi.hpp b/src/surf/network_smpi.hpp index 1ab37a73c2..8a91cb852f 100644 --- a/src/surf/network_smpi.hpp +++ b/src/surf/network_smpi.hpp @@ -19,7 +19,6 @@ namespace simgrid { double latencyFactor(double size); double bandwidthFactor(double size); double bandwidthConstraint(double rate, double bound, double size); - void communicateCallBack() {}; }; } } diff --git a/src/surf/ns3/ns3_simulator.cpp b/src/surf/ns3/ns3_simulator.cpp index 329680848e..f41d1e8cf0 100644 --- a/src/surf/ns3/ns3_simulator.cpp +++ b/src/surf/ns3/ns3_simulator.cpp @@ -4,13 +4,12 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "src/surf/ns3/ns3_simulator.hpp" -#include "xbt/dict.h" #include "xbt/log.h" #include "xbt/sysdep.h" #include -xbt_dict_t flowFromSock = nullptr; // ns3::sock -> SgFlow +std::map flowFromSock; // ns3::sock -> SgFlow static void receive_callback(ns3::Ptr socket); static void datasent_callback(ns3::Ptr socket, uint32_t dataSent); @@ -26,7 +25,8 @@ SgFlow::SgFlow(uint32_t totalBytes, simgrid::surf::NetworkNS3Action* action) static SgFlow* getFlowFromSocket(ns3::Ptr socket) { - return (SgFlow*)xbt_dict_get_or_null(flowFromSock, transformSocketPtr(socket)); + auto it = flowFromSock.find(transformSocketPtr(socket)); + return (it == flowFromSock.end()) ? nullptr : it->second; } static void receive_callback(ns3::Ptr socket) diff --git a/src/surf/ns3/ns3_simulator.hpp b/src/surf/ns3/ns3_simulator.hpp index c007c2592d..f339e6468f 100644 --- a/src/surf/ns3/ns3_simulator.hpp +++ b/src/surf/ns3/ns3_simulator.hpp @@ -33,14 +33,11 @@ public: void StartFlow(ns3::Ptr sock, const char* to, uint16_t port_number); -static inline const char* transformSocketPtr(ns3::Ptr localSocket) +static inline std::string transformSocketPtr(ns3::Ptr localSocket) { - static char key[24]; std::stringstream sstream; sstream << localSocket; - snprintf(key, 24, "%s", sstream.str().c_str()); - - return key; + return sstream.str(); } #endif diff --git a/src/surf/plugins/host_energy.cpp b/src/surf/plugins/host_energy.cpp index 1ff949dc58..380a8713f1 100644 --- a/src/surf/plugins/host_energy.cpp +++ b/src/surf/plugins/host_energy.cpp @@ -200,7 +200,7 @@ void HostEnergy::update() double energy_this_step = instantaneous_consumption * (finish_time - start_time); - // TODO Trace: Trace energy_this_step from start_time to finish_time in host->name() + // TODO Trace: Trace energy_this_step from start_time to finish_time in host->getName() this->total_energy = previous_energy + energy_this_step; this->last_updated = finish_time; @@ -363,7 +363,7 @@ static void onCreation(simgrid::s4u::Host& host) if (dynamic_cast(&host)) // Ignore virtual machines return; - //TODO Trace: set to zero the energy variable associated to host->name() + // TODO Trace: set to zero the energy variable associated to host->getName() host.extension_set(new HostEnergy(&host)); } diff --git a/src/surf/ptask_L07.cpp b/src/surf/ptask_L07.cpp index b3d5beab5b..f11d8dff39 100644 --- a/src/surf/ptask_L07.cpp +++ b/src/surf/ptask_L07.cpp @@ -186,7 +186,7 @@ L07Action::L07Action(Model *model, int host_nb, sg_host_t *host_list, latency = MAX(latency, lat); for (auto const& link : route) - affected_links.insert(link->cname()); + affected_links.insert(link->getCname()); } } } @@ -226,14 +226,14 @@ L07Action::L07Action(Model *model, int host_nb, sg_host_t *host_list, this->setCost(1.0); this->setRemains(0.0); } - xbt_free(host_list); + delete[] host_list; } Action* NetworkL07Model::communicate(s4u::Host* src, s4u::Host* dst, double size, double rate) { - sg_host_t*host_list = xbt_new0(sg_host_t, 2); - double *flops_amount = xbt_new0(double, 2); - double *bytes_amount = xbt_new0(double, 4); + sg_host_t* host_list = new sg_host_t[2](); + double* flops_amount = new double[2](); + double* bytes_amount = new double[4](); host_list[0] = src; host_list[1] = dst; @@ -280,8 +280,8 @@ LinkL07::LinkL07(NetworkL07Model* model, const std::string& name, double bandwid Action *CpuL07::execution_start(double size) { - sg_host_t*host_list = xbt_new0(sg_host_t, 1); - double *flops_amount = xbt_new0(double, 1); + sg_host_t* host_list = new sg_host_t[1](); + double* flops_amount = new double[1](); host_list[0] = getHost(); flops_amount[0] = size; @@ -325,7 +325,7 @@ bool LinkL07::isUsed(){ void CpuL07::apply_event(tmgr_trace_event_t triggered, double value) { - XBT_DEBUG("Updating cpu %s (%p) with value %g", cname(), this, value); + XBT_DEBUG("Updating cpu %s (%p) with value %g", getCname(), this, value); if (triggered == speed_.event) { speed_.scale = value; onSpeedChange(); @@ -345,7 +345,7 @@ void CpuL07::apply_event(tmgr_trace_event_t triggered, double value) void LinkL07::apply_event(tmgr_trace_event_t triggered, double value) { - XBT_DEBUG("Updating link %s (%p) with value=%f", cname(), this, value); + XBT_DEBUG("Updating link %s (%p) with value=%f", getCname(), this, value); if (triggered == bandwidth_.event) { setBandwidth(value); tmgr_trace_event_unref(&bandwidth_.event); @@ -392,8 +392,8 @@ LinkL07::~LinkL07() = default; L07Action::~L07Action(){ delete hostList_; - free(communicationAmount_); - free(computationAmount_); + delete[] communicationAmount_; + delete[] computationAmount_; } void L07Action::updateBound() diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index 6d5651723f..d6f9e7de95 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -600,10 +600,10 @@ simgrid::s4u::NetZone* sg_platf_new_Zone_begin(ZoneCreationArgs* zone) new_zone = new simgrid::kernel::routing::FatTreeZone(current_routing, zone->id); break; case A_surfxml_AS_routing_Dijkstra: - new_zone = new simgrid::kernel::routing::DijkstraZone(current_routing, zone->id, 0); + new_zone = new simgrid::kernel::routing::DijkstraZone(current_routing, zone->id, false); break; case A_surfxml_AS_routing_DijkstraCache: - new_zone = new simgrid::kernel::routing::DijkstraZone(current_routing, zone->id, 1); + new_zone = new simgrid::kernel::routing::DijkstraZone(current_routing, zone->id, true); break; case A_surfxml_AS_routing_Floyd: new_zone = new simgrid::kernel::routing::FloydZone(current_routing, zone->id); @@ -676,7 +676,7 @@ void sg_platf_new_hostlink(HostLinkCreationArgs* hostlink) if (as_cluster->privateLinks_.find(netpoint->id()) != as_cluster->privateLinks_.end()) surf_parse_error(std::string("Host_link for '") + hostlink->id.c_str() + "' is already defined!"); - XBT_DEBUG("Push Host_link for host '%s' to position %u", netpoint->cname(), netpoint->id()); + XBT_DEBUG("Push Host_link for host '%s' to position %u", netpoint->getCname(), netpoint->id()); as_cluster->privateLinks_.insert({netpoint->id(), {linkUp, linkDown}}); } diff --git a/src/surf/storage_n11.cpp b/src/surf/storage_n11.cpp index d8bfca3039..e25812ce16 100644 --- a/src/surf/storage_n11.cpp +++ b/src/surf/storage_n11.cpp @@ -20,8 +20,8 @@ static void check_disk_attachment() for (auto const& s : *simgrid::surf::StorageImpl::storagesMap()) { simgrid::kernel::routing::NetPoint* host_elm = sg_netpoint_by_name_or_null(s.second->getHost().c_str()); if (not host_elm) - surf_parse_error(std::string("Unable to attach storage ") + s.second->cname() + ": host " + s.second->getHost() + - " does not exist."); + surf_parse_error(std::string("Unable to attach storage ") + s.second->getCname() + ": host " + + s.second->getHost() + " does not exist."); else s.second->piface_.attached_to_ = sg_host_by_name(s.second->getHost().c_str()); } @@ -89,8 +89,8 @@ void StorageN11Model::updateActionsState(double /*now*/, double delta) action->file_->incrPosition(current_progress); action->file_->setSize(action->file_->tell()); - action->storage_->getContent()->erase(action->file_->cname()); - action->storage_->getContent()->insert({action->file_->cname(), action->file_->size()}); + action->storage_->getContent()->erase(action->file_->getCname()); + action->storage_->getContent()->insert({action->file_->getCname(), action->file_->size()}); } if (action->getMaxDuration() > NO_MAX_DURATION) @@ -136,7 +136,7 @@ StorageN11Action::StorageN11Action(Model* model, double cost, bool failed, Stora e_surf_action_storage_type_t type) : StorageAction(model, cost, failed, lmm_variable_new(model->getMaxminSystem(), this, 1.0, -1.0, 3), storage, type) { - XBT_IN("(%s,%g", storage->cname(), cost); + XBT_IN("(%s,%g", storage->getCname(), cost); // Must be less than the max bandwidth for all actions lmm_expand(model->getMaxminSystem(), storage->constraint(), getVariable(), 1.0); diff --git a/src/surf/surf_c_bindings.cpp b/src/surf/surf_c_bindings.cpp index f2a1505049..e57f843575 100644 --- a/src/surf/surf_c_bindings.cpp +++ b/src/surf/surf_c_bindings.cpp @@ -100,7 +100,7 @@ double surf_solve(double max_date) XBT_DEBUG("Updating models (min = %g, NOW = %g, next_event_date = %g)", time_delta, NOW, next_event_date); while ((event = future_evt_set->pop_leq(next_event_date, &value, &resource))) { - if (resource->isUsed() || (watched_hosts.find(resource->cname()) != watched_hosts.end())) { + if (resource->isUsed() || (watched_hosts.find(resource->getCname()) != watched_hosts.end())) { time_delta = next_event_date - NOW; XBT_DEBUG("This event invalidates the next_occuring_event() computation of models. Next event set to %f", time_delta); } @@ -109,7 +109,7 @@ double surf_solve(double max_date) NOW = next_event_date; /* update state of the corresponding resource to the new value. Does not touch lmm. It will be modified if needed when updating actions */ - XBT_DEBUG("Calling update_resource_state for resource %s", resource->cname()); + XBT_DEBUG("Calling update_resource_state for resource %s", resource->getCname()); resource->apply_event(event, value); NOW = round_start; } @@ -134,7 +134,7 @@ double surf_solve(double max_date) } simgrid::s4u::onTimeAdvance(time_delta); - TRACE_paje_dump_buffer (0); + TRACE_paje_dump_buffer(false); return time_delta; } diff --git a/src/surf/surf_interface.cpp b/src/surf/surf_interface.cpp index 76293aaa15..c8fae21557 100644 --- a/src/surf/surf_interface.cpp +++ b/src/surf/surf_interface.cpp @@ -577,7 +577,12 @@ Model* Resource::model() const return model_; } -const char* Resource::cname() const +const std::string& Resource::getName() const +{ + return name_; +} + +const char* Resource::getCname() const { return name_.c_str(); } diff --git a/src/surf/surf_interface.hpp b/src/surf/surf_interface.hpp index a481159120..6b9712d130 100644 --- a/src/surf/surf_interface.hpp +++ b/src/surf/surf_interface.hpp @@ -345,11 +345,11 @@ private: /** @ingroup SURF_interface * @brief Resource which have a metric handled by a maxmin system */ -typedef struct { +struct s_surf_metric_t { double peak; /**< The peak of the metric, ie its max value */ double scale; /**< Current availability of the metric according to the traces, in [0,1] */ tmgr_trace_event_t event; /**< The associated trace event associated to the metric */ -} s_surf_metric_t; +}; namespace simgrid { namespace surf { @@ -375,7 +375,9 @@ public: Model* model() const; /** @brief Get the name of the current Resource */ - const char* cname() const; + const std::string& getName() const; + /** @brief Get the name of the current Resource */ + const char* getCname() const; bool operator==(const Resource &other) const; @@ -418,8 +420,8 @@ protected: namespace std { template <> class hash { public: - std::size_t operator()(const simgrid::surf::Resource& r) const { return (std::size_t)xbt_str_hash(r.cname()); } - }; + std::size_t operator()(const simgrid::surf::Resource& r) const { return (std::size_t)xbt_str_hash(r.getCname()); } +}; } #endif /* SURF_MODEL_H_ */ diff --git a/src/surf/surf_private.hpp b/src/surf/surf_private.hpp index 0e9fec31bd..33181250e1 100644 --- a/src/surf/surf_private.hpp +++ b/src/surf/surf_private.hpp @@ -19,14 +19,14 @@ extern XBT_PRIVATE const char* surf_action_state_names[6]; /** @ingroup SURF_interface * @brief Possible update mechanisms */ -typedef enum { +enum e_UM_t { UM_FULL, /**< Full update mechanism: the remaining time of every action is recomputed at each step */ UM_LAZY, /**< Lazy update mechanism: only the modified actions get recomputed. It may be slower than full if your system is tightly coupled to the point where every action gets recomputed anyway. In that case, you'd better not try to be cleaver with lazy and go for a simple full update. */ UM_UNDEFINED /**< Mechanism not defined */ -} e_UM_t; +}; /* Generic functions common to all models */ @@ -43,7 +43,6 @@ extern XBT_PRIVATE simgrid::trace_mgr::future_evt_set* future_evt_set; XBT_PUBLIC(void) storage_register_callbacks(); -XBT_PUBLIC(void) generic_get_graph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges, sg_netzone_t rc); XBT_PRIVATE void parse_after_config(); /********** Tracing **********/ diff --git a/src/surf/trace_mgr.hpp b/src/surf/trace_mgr.hpp index 625db0422b..b6877723b2 100644 --- a/src/surf/trace_mgr.hpp +++ b/src/surf/trace_mgr.hpp @@ -14,13 +14,13 @@ extern "C" { /* Iterator within a trace */ -typedef struct tmgr_trace_event { +struct s_tmgr_trace_event_t { tmgr_trace_t trace; unsigned int idx; sg_resource_t resource; int free_me; -} s_tmgr_trace_event_t; -typedef struct tmgr_trace_event* tmgr_trace_event_t; +}; +typedef s_tmgr_trace_event_t* tmgr_trace_event_t; /** * \brief Free a trace event structure diff --git a/src/surf/xml/platf_private.hpp b/src/surf/xml/platf_private.hpp index a4f9047321..db80cd7ca2 100644 --- a/src/surf/xml/platf_private.hpp +++ b/src/surf/xml/platf_private.hpp @@ -23,12 +23,12 @@ extern "C" { typedef size_t yy_size_t; #endif -typedef enum { - SURF_CLUSTER_DRAGONFLY=3, - SURF_CLUSTER_FAT_TREE=2, - SURF_CLUSTER_FLAT = 1, - SURF_CLUSTER_TORUS = 0 -} e_surf_cluster_topology_t; +enum e_surf_cluster_topology_t { + SURF_CLUSTER_DRAGONFLY = 3, + SURF_CLUSTER_FAT_TREE = 2, + SURF_CLUSTER_FLAT = 1, + SURF_CLUSTER_TORUS = 0 +}; /* ***************************************** */ /* @@ -41,7 +41,7 @@ typedef enum { * used, instead of malloced structures. */ -typedef struct { +struct s_sg_platf_host_cbarg_t { const char* id; std::vector speed_per_pstate; int pstate; @@ -50,7 +50,7 @@ typedef struct { tmgr_trace_t state_trace; const char* coord; std::map* properties; -} s_sg_platf_host_cbarg_t; +}; typedef s_sg_platf_host_cbarg_t* sg_platf_host_cbarg_t; class HostLinkCreationArgs { @@ -83,15 +83,15 @@ public: tmgr_trace_t state_trace; }; -typedef struct s_sg_platf_route_cbarg *sg_platf_route_cbarg_t; -typedef struct s_sg_platf_route_cbarg { - bool symmetrical; - sg_netpoint_t src; - sg_netpoint_t dst; - sg_netpoint_t gw_src; - sg_netpoint_t gw_dst; - std::vector* link_list; -} s_sg_platf_route_cbarg_t; +struct s_sg_platf_route_cbarg_t { + bool symmetrical = false; + sg_netpoint_t src = nullptr; + sg_netpoint_t dst = nullptr; + sg_netpoint_t gw_src = nullptr; + sg_netpoint_t gw_dst = nullptr; + std::vector* link_list = nullptr; +}; +typedef s_sg_platf_route_cbarg_t* sg_platf_route_cbarg_t; class ClusterCreationArgs { public: @@ -152,11 +152,11 @@ public: std::string name; }; -typedef struct s_sg_platf_prop_cbarg *sg_platf_prop_cbarg_t; -typedef struct s_sg_platf_prop_cbarg { +struct s_sg_platf_prop_cbarg_t { const char *id; const char *value; -} s_sg_platf_prop_cbarg_t; +}; +typedef s_sg_platf_prop_cbarg_t* sg_platf_prop_cbarg_t; class TraceCreationArgs { public: @@ -173,8 +173,7 @@ public: std::string element; }; -typedef struct s_sg_platf_process_cbarg *sg_platf_process_cbarg_t; -typedef struct s_sg_platf_process_cbarg { +struct s_sg_platf_process_cbarg_t { const char **argv; int argc; std::map* properties; @@ -183,7 +182,8 @@ typedef struct s_sg_platf_process_cbarg { double start_time; double kill_time; e_surf_process_on_failure_t on_failure; -} s_sg_platf_process_cbarg_t; +}; +typedef s_sg_platf_process_cbarg_t* sg_platf_process_cbarg_t; class ZoneCreationArgs { public: diff --git a/src/surf/xml/surfxml_sax_cb.cpp b/src/surf/xml/surfxml_sax_cb.cpp index 2b16c03ebc..dfb894da7e 100644 --- a/src/surf/xml/surfxml_sax_cb.cpp +++ b/src/surf/xml/surfxml_sax_cb.cpp @@ -59,9 +59,8 @@ void surf_parse_assert_netpoint(std::string hostname, std::string pre, std::stri std::vector list; simgrid::s4u::Engine::getInstance()->getNetpointList(&list); - std::sort(list.begin(), list.end(), - [](simgrid::kernel::routing::NetPoint* a, simgrid::kernel::routing::NetPoint* b) { - return a->name() < b->name(); + std::sort(list.begin(), list.end(), [](simgrid::kernel::routing::NetPoint* a, simgrid::kernel::routing::NetPoint* b) { + return a->getName() < b->getName(); }); bool first = true; for (auto const& np : list) { @@ -71,7 +70,7 @@ void surf_parse_assert_netpoint(std::string hostname, std::string pre, std::stri if (not first) msg += ","; first = false; - msg += "'" + np->name() + "'"; + msg += "'" + np->getName() + "'"; if (msg.length() > 4096) { msg.pop_back(); // remove trailing quote msg += "...(list truncated)......"; @@ -144,9 +143,8 @@ struct unit_scale { }; /* Note: field `unit' for the last element of parameter `units' should be nullptr. */ -static double surf_parse_get_value_with_unit(const char* string, const struct unit_scale* units, - const char* entity_kind, std::string name, const char* error_msg, - const char* default_unit) +static double surf_parse_get_value_with_unit(const char* string, const unit_scale* units, const char* entity_kind, + std::string name, const char* error_msg, const char* default_unit) { char* ptr; int i; @@ -174,113 +172,91 @@ static double surf_parse_get_value_with_unit(const char* string, const struct un double surf_parse_get_time(const char* string, const char* entity_kind, std::string name) { - const struct unit_scale units[] = { - { "w", 7 * 24 * 60 * 60 }, - { "d", 24 * 60 * 60 }, - { "h", 60 * 60 }, - { "m", 60 }, - { "s", 1.0 }, - { "ms", 1e-3 }, - { "us", 1e-6 }, - { "ns", 1e-9 }, - { "ps", 1e-12 }, - { nullptr, 0 } - }; + const unit_scale units[] = {{"w", 7 * 24 * 60 * 60}, + {"d", 24 * 60 * 60}, + {"h", 60 * 60}, + {"m", 60}, + {"s", 1.0}, + {"ms", 1e-3}, + {"us", 1e-6}, + {"ns", 1e-9}, + {"ps", 1e-12}, + {nullptr, 0}}; return surf_parse_get_value_with_unit(string, units, entity_kind, name, "Append 's' to your time to get seconds", "s"); } double surf_parse_get_size(const char* string, const char* entity_kind, std::string name) { - const struct unit_scale units[] = { - { "EiB", pow(1024, 6) }, - { "PiB", pow(1024, 5) }, - { "TiB", pow(1024, 4) }, - { "GiB", pow(1024, 3) }, - { "MiB", pow(1024, 2) }, - { "KiB", 1024 }, - { "EB", 1e18 }, - { "PB", 1e15 }, - { "TB", 1e12 }, - { "GB", 1e9 }, - { "MB", 1e6 }, - { "kB", 1e3 }, - { "B", 1.0 }, - { "Eib", 0.125 * pow(1024, 6) }, - { "Pib", 0.125 * pow(1024, 5) }, - { "Tib", 0.125 * pow(1024, 4) }, - { "Gib", 0.125 * pow(1024, 3) }, - { "Mib", 0.125 * pow(1024, 2) }, - { "Kib", 0.125 * 1024 }, - { "Eb", 0.125 * 1e18 }, - { "Pb", 0.125 * 1e15 }, - { "Tb", 0.125 * 1e12 }, - { "Gb", 0.125 * 1e9 }, - { "Mb", 0.125 * 1e6 }, - { "kb", 0.125 * 1e3 }, - { "b", 0.125 }, - { nullptr, 0 } - }; + const unit_scale units[] = {{"EiB", pow(1024, 6)}, + {"PiB", pow(1024, 5)}, + {"TiB", pow(1024, 4)}, + {"GiB", pow(1024, 3)}, + {"MiB", pow(1024, 2)}, + {"KiB", 1024}, + {"EB", 1e18}, + {"PB", 1e15}, + {"TB", 1e12}, + {"GB", 1e9}, + {"MB", 1e6}, + {"kB", 1e3}, + {"B", 1.0}, + {"Eib", 0.125 * pow(1024, 6)}, + {"Pib", 0.125 * pow(1024, 5)}, + {"Tib", 0.125 * pow(1024, 4)}, + {"Gib", 0.125 * pow(1024, 3)}, + {"Mib", 0.125 * pow(1024, 2)}, + {"Kib", 0.125 * 1024}, + {"Eb", 0.125 * 1e18}, + {"Pb", 0.125 * 1e15}, + {"Tb", 0.125 * 1e12}, + {"Gb", 0.125 * 1e9}, + {"Mb", 0.125 * 1e6}, + {"kb", 0.125 * 1e3}, + {"b", 0.125}, + {nullptr, 0}}; return surf_parse_get_value_with_unit(string, units, entity_kind, name, "Append 'B' to get bytes (or 'b' for bits but 1B = 8b).", "B"); } double surf_parse_get_bandwidth(const char* string, const char* entity_kind, std::string name) { - const struct unit_scale units[] = { - { "EiBps", pow(1024, 6) }, - { "PiBps", pow(1024, 5) }, - { "TiBps", pow(1024, 4) }, - { "GiBps", pow(1024, 3) }, - { "MiBps", pow(1024, 2) }, - { "KiBps", 1024 }, - { "EBps", 1e18 }, - { "PBps", 1e15 }, - { "TBps", 1e12 }, - { "GBps", 1e9 }, - { "MBps", 1e6 }, - { "kBps", 1e3 }, - { "Bps", 1.0 }, - { "Eibps", 0.125 * pow(1024, 6) }, - { "Pibps", 0.125 * pow(1024, 5) }, - { "Tibps", 0.125 * pow(1024, 4) }, - { "Gibps", 0.125 * pow(1024, 3) }, - { "Mibps", 0.125 * pow(1024, 2) }, - { "Kibps", 0.125 * 1024 }, - { "Tbps", 0.125 * 1e12 }, - { "Gbps", 0.125 * 1e9 }, - { "Mbps", 0.125 * 1e6 }, - { "kbps", 0.125 * 1e3 }, - { "bps", 0.125 }, - { nullptr, 0 } - }; + const unit_scale units[] = {{"EiBps", pow(1024, 6)}, + {"PiBps", pow(1024, 5)}, + {"TiBps", pow(1024, 4)}, + {"GiBps", pow(1024, 3)}, + {"MiBps", pow(1024, 2)}, + {"KiBps", 1024}, + {"EBps", 1e18}, + {"PBps", 1e15}, + {"TBps", 1e12}, + {"GBps", 1e9}, + {"MBps", 1e6}, + {"kBps", 1e3}, + {"Bps", 1.0}, + {"Eibps", 0.125 * pow(1024, 6)}, + {"Pibps", 0.125 * pow(1024, 5)}, + {"Tibps", 0.125 * pow(1024, 4)}, + {"Gibps", 0.125 * pow(1024, 3)}, + {"Mibps", 0.125 * pow(1024, 2)}, + {"Kibps", 0.125 * 1024}, + {"Tbps", 0.125 * 1e12}, + {"Gbps", 0.125 * 1e9}, + {"Mbps", 0.125 * 1e6}, + {"kbps", 0.125 * 1e3}, + {"bps", 0.125}, + {nullptr, 0}}; return surf_parse_get_value_with_unit(string, units, entity_kind, name, "Append 'Bps' to get bytes per second (or 'bps' for bits but 1Bps = 8bps)", "Bps"); } double surf_parse_get_speed(const char* string, const char* entity_kind, std::string name) { - const struct unit_scale units[] = { - { "yottaflops", 1e24 }, - { "Yf", 1e24 }, - { "zettaflops", 1e21 }, - { "Zf", 1e21 }, - { "exaflops", 1e18 }, - { "Ef", 1e18 }, - { "petaflops", 1e15 }, - { "Pf", 1e15 }, - { "teraflops", 1e12 }, - { "Tf", 1e12 }, - { "gigaflops", 1e9 }, - { "Gf", 1e9 }, - { "megaflops", 1e6 }, - { "Mf", 1e6 }, - { "kiloflops", 1e3 }, - { "kf", 1e3 }, - { "flops", 1.0 }, - { "f", 1.0 }, - { nullptr, 0 } - }; + const unit_scale units[] = {{"yottaflops", 1e24}, {"Yf", 1e24}, {"zettaflops", 1e21}, {"Zf", 1e21}, + {"exaflops", 1e18}, {"Ef", 1e18}, {"petaflops", 1e15}, {"Pf", 1e15}, + {"teraflops", 1e12}, {"Tf", 1e12}, {"gigaflops", 1e9}, {"Gf", 1e9}, + {"megaflops", 1e6}, {"Mf", 1e6}, {"kiloflops", 1e3}, {"kf", 1e3}, + {"flops", 1.0}, {"f", 1.0}, {nullptr, 0}}; return surf_parse_get_value_with_unit(string, units, entity_kind, name, "Append 'f' or 'flops' to your speed to get flop per second", "f"); } diff --git a/src/xbt/automaton/automaton.c b/src/xbt/automaton/automaton.c index eb1e879f74..ee8be8e002 100644 --- a/src/xbt/automaton/automaton.c +++ b/src/xbt/automaton/automaton.c @@ -95,7 +95,9 @@ xbt_dynar_t xbt_automaton_get_transitions(xbt_automaton_t a){ return a->transitions; } -xbt_automaton_transition_t xbt_automaton_get_transition(xbt_automaton_t a, xbt_automaton_state_t src, xbt_automaton_state_t dst){ +xbt_automaton_transition_t xbt_automaton_get_transition(xbt_automaton_t XBT_ATTRIB_UNUSED a, xbt_automaton_state_t src, + xbt_automaton_state_t dst) +{ xbt_automaton_transition_t transition; unsigned int cursor; xbt_dynar_foreach(src->out, cursor, transition){ diff --git a/src/xbt/backtrace_linux.cpp b/src/xbt/backtrace_linux.cpp index 097519cb5b..5b23cb1974 100644 --- a/src/xbt/backtrace_linux.cpp +++ b/src/xbt/backtrace_linux.cpp @@ -38,10 +38,9 @@ struct trace_arg { int size; }; -static _Unwind_Reason_Code -backtrace_helper (struct _Unwind_Context *ctx, void *a) +static _Unwind_Reason_Code backtrace_helper(_Unwind_Context* ctx, void* a) { - struct trace_arg *arg = (struct trace_arg *) a; + trace_arg* arg = static_cast(a); /* We are first called with address in the __backtrace function. Skip it. */ diff --git a/src/xbt/cunit.cpp b/src/xbt/cunit.cpp index 87c869c4f4..cde26d96a9 100644 --- a/src/xbt/cunit.cpp +++ b/src/xbt/cunit.cpp @@ -40,11 +40,12 @@ static int _xbt_test_suite_disabled = 0; xbt_test_unit_t _xbt_test_current_unit = nullptr; /* test suite test log */ -typedef struct s_xbt_test_log { +struct s_xbt_test_log { char *text; const char *file; int line; -} *xbt_test_log_t; +}; +typedef s_xbt_test_log* xbt_test_log_t; static void xbt_test_log_dump(xbt_test_log_t log) { @@ -55,7 +56,7 @@ static void xbt_test_log_dump(xbt_test_log_t log) } /* test suite test check */ -typedef struct s_xbt_test_test { +struct s_xbt_test_test { char *title; int failed; int expected_failure; @@ -63,7 +64,8 @@ typedef struct s_xbt_test_test { const char *file; int line; xbt_dynar_t logs; -} *xbt_test_test_t; +}; +typedef s_xbt_test_test* xbt_test_test_t; static void xbt_test_test_dump(xbt_test_test_t test) { @@ -165,7 +167,7 @@ static void xbt_test_log_free(void *log) /** @brief create test suite */ xbt_test_suite_t xbt_test_suite_new(const char *name, const char *fmt, ...) { - xbt_test_suite_t suite = xbt_new0(struct s_xbt_test_suite, 1); + xbt_test_suite_t suite = xbt_new0(s_xbt_test_suite, 1); va_list ap; if (_xbt_test_suites == nullptr) @@ -231,7 +233,7 @@ void xbt_test_suite_push(xbt_test_suite_t suite, const char *name, ts_test_cb_t xbt_assert(func); xbt_assert(fmt); - unit = xbt_new0(struct s_xbt_test_unit, 1); + unit = xbt_new0(s_xbt_test_unit, 1); va_start(ap, fmt); unit->title = bvprintf(fmt, ap); va_end(ap); @@ -646,7 +648,7 @@ void _xbt_test_add(const char *file, int line, const char *fmt, ...) xbt_assert(unit); va_list ap; - xbt_test_test_t test = xbt_new0(struct s_xbt_test_test, 1); + xbt_test_test_t test = xbt_new0(s_xbt_test_test, 1); va_start(ap, fmt); test->title = bvprintf(fmt, ap); va_end(ap); @@ -668,7 +670,7 @@ void _xbt_test_fail(const char *file, int line, const char *fmt, ...) "Test failed even before being declared (broken unit: %s)", unit->title); va_list ap; - xbt_test_log_t log = xbt_new(struct s_xbt_test_log, 1); + xbt_test_log_t log = xbt_new(s_xbt_test_log, 1); va_start(ap, fmt); log->text = bvprintf(fmt, ap); va_end(ap); @@ -711,7 +713,7 @@ void _xbt_test_log(const char *file, int line, const char *fmt, ...) "Test logged into even before being declared (broken test unit: %s)", unit->title); va_list ap; - xbt_test_log_t log = xbt_new(struct s_xbt_test_log, 1); + xbt_test_log_t log = xbt_new(s_xbt_test_log, 1); va_start(ap, fmt); log->text = bvprintf(fmt, ap); va_end(ap); diff --git a/src/xbt/dict_cursor.c b/src/xbt/dict_cursor.c index 38c7930270..574a4e6860 100644 --- a/src/xbt/dict_cursor.c +++ b/src/xbt/dict_cursor.c @@ -1,6 +1,6 @@ /* dict_cursor - iterators over dictionaries */ -/* Copyright (c) 2004-2014. The SimGrid Team. +/* Copyright (c) 2004-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -19,9 +19,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_dict_cursor, xbt_dict, "To traverse dictiona /* Don't add or remove entries to the dict while traversing !!! */ /*###########################################################################*/ -#undef xbt_dict_CURSOR_DEBUG -/*#define xbt_dict_CURSOR_DEBUG 1*/ - /** @brief Creator * @param dict the dict */ diff --git a/src/xbt/log.c b/src/xbt/log.c index ce083fbbf8..8c0a3b4216 100644 --- a/src/xbt/log.c +++ b/src/xbt/log.c @@ -336,7 +336,7 @@ void xbt_log_postexit(void) log_cat_exit(&_XBT_LOGV(XBT_LOG_ROOT_CAT)); } - /* Size of the static string in which we build the log string */ +/* Size of the static string in which we build the log string */ #define XBT_LOG_STATIC_BUFFER_SIZE 2048 /* Minimum size of the dynamic string in which we build the log string (should be greater than XBT_LOG_STATIC_BUFFER_SIZE) */ @@ -391,23 +391,26 @@ void _xbt_log_event_log(xbt_log_event_t ev, const char *fmt, ...) } } -#undef XBT_LOG_DYNAMIC_BUFFER_SIZE -#undef XBT_LOG_STATIC_BUFFER_SIZE - /* NOTE: * * The standard logging macros use _XBT_LOG_ISENABLED, which calls _xbt_log_cat_init(). Thus, if we want to avoid an * infinite recursion, we can not use the standard logging macros in _xbt_log_cat_init(), and in all functions called * from it. * - * To circumvent the problem, we define the macro_xbt_log_init() as (0) for the length of the affected functions, and - * we do not forget to undefine it at the end! + * To circumvent the problem, we define the macro DISABLE_XBT_LOG_CAT_INIT() to hide the real _xbt_log_cat_init(). The + * macro has to be called at the beginning of the affected functions. */ +static int fake_xbt_log_cat_init(xbt_log_category_t XBT_ATTRIB_UNUSED category, + e_xbt_log_priority_t XBT_ATTRIB_UNUSED priority) +{ + return 0; +} +#define DISABLE_XBT_LOG_CAT_INIT() \ + int (*_xbt_log_cat_init)(xbt_log_category_t, e_xbt_log_priority_t) XBT_ATTRIB_UNUSED = fake_xbt_log_cat_init; static void _xbt_log_cat_apply_set(xbt_log_category_t category, xbt_log_setting_t setting) { -#define _xbt_log_cat_init(a, b) (0) - + DISABLE_XBT_LOG_CAT_INIT(); if (setting->thresh != xbt_log_priority_uninitialized) { xbt_log_threshold_set(category, setting->thresh); @@ -434,7 +437,6 @@ static void _xbt_log_cat_apply_set(xbt_log_category_t category, xbt_log_setting_ category->additivity = 0; XBT_DEBUG("Set %p as appender of category '%s'", setting->appender, category->name); } -#undef _xbt_log_cat_init } /* @@ -443,8 +445,7 @@ static void _xbt_log_cat_apply_set(xbt_log_category_t category, xbt_log_setting_ */ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority) { -#define _xbt_log_cat_init(a, b) (0) - + DISABLE_XBT_LOG_CAT_INIT(); if (log_cat_init_mutex != NULL) xbt_os_mutex_acquire(log_cat_init_mutex); @@ -522,8 +523,6 @@ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority if (log_cat_init_mutex != NULL) xbt_os_mutex_release(log_cat_init_mutex); return priority >= category->threshold; - -#undef _xbt_log_cat_init } void xbt_log_parent_set(xbt_log_category_t cat, xbt_log_category_t parent) @@ -782,7 +781,7 @@ void xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t app) void xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay) { -#define _xbt_log_cat_init(a, b) (0) + DISABLE_XBT_LOG_CAT_INIT(); if (!cat->appender) { XBT_VERB ("No appender to category %s. Setting the file appender as default", cat->name); xbt_log_appender_set(cat, xbt_log_appender_file_new(NULL)); @@ -795,7 +794,6 @@ void xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay) } cat->layout = lay; xbt_log_additivity_set(cat, 0); -#undef _xbt_log_cat_init } void xbt_log_additivity_set(xbt_log_category_t cat, int additivity) diff --git a/src/xbt/mmalloc/mfree.c b/src/xbt/mmalloc/mfree.c index 7ee5e76c2d..47efab762f 100644 --- a/src/xbt/mmalloc/mfree.c +++ b/src/xbt/mmalloc/mfree.c @@ -24,7 +24,6 @@ void mfree(struct mdesc *mdp, void *ptr) size_t i; int it; - mmalloc_paranoia(mdp); // fprintf(stderr,"free(%p)\n",ptr); if (ptr == NULL) diff --git a/src/xbt/mmalloc/mm_legacy.c b/src/xbt/mmalloc/mm_legacy.c index a8962f7f4d..b02719cb00 100644 --- a/src/xbt/mmalloc/mm_legacy.c +++ b/src/xbt/mmalloc/mm_legacy.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2015. The SimGrid Team. +/* Copyright (c) 2010-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -92,13 +92,14 @@ static void* mm_fake_calloc(size_t nmemb, size_t size) return mm_fake_malloc(n); } -static void* mm_fake_realloc(void *p, size_t s) +static void* mm_fake_realloc(void* XBT_ATTRIB_UNUSED p, size_t s) { return mm_fake_malloc(s); } -static void mm_fake_free(void *p) +static void mm_fake_free(void* XBT_ATTRIB_UNUSED p) { + // Nothing to do } /* Function signatures for the main malloc functions: */ diff --git a/src/xbt/mmalloc/mmalloc.c b/src/xbt/mmalloc/mmalloc.c index ee9dee9219..47a86d607d 100644 --- a/src/xbt/mmalloc/mmalloc.c +++ b/src/xbt/mmalloc/mmalloc.c @@ -95,7 +95,11 @@ static void initialize(xbt_mheap_t mdp) } } -#define update_hook(a,offset) do { if (a) { a = ((char*)a +(offset));} }while(0) +static inline void update_hook(void **a, size_t offset) +{ + if (*a) + *a = (char*)*a + offset; +} /* Get neatly aligned memory from the low level layers, and register it * into the heap info table as necessary. */ @@ -124,13 +128,13 @@ static void *register_morecore(struct mdesc *mdp, size_t size) size_t offset=((char*)newinfo)-((char*)oldinfo); for (int i = 1 /*first element of heapinfo describes the mdesc area*/; i < mdp->heaplimit; i++) { - update_hook(newinfo[i].freehook.next,offset); - update_hook(newinfo[i].freehook.prev,offset); + update_hook(&newinfo[i].freehook.next, offset); + update_hook(&newinfo[i].freehook.prev, offset); } // also update the starting points of the swag for (int i = 0; i < BLOCKLOG; i++) { - update_hook(mdp->fraghead[i].head,offset); - update_hook(mdp->fraghead[i].tail,offset); + update_hook(&mdp->fraghead[i].head, offset); + update_hook(&mdp->fraghead[i].tail, offset); } mdp->heapinfo = newinfo; @@ -152,7 +156,6 @@ static void *register_morecore(struct mdesc *mdp, size_t size) mdp->heaplimit = BLOCK((char *) result + size); return (result); } -#undef update_hook /* Allocate memory from the heap. */ void *mmalloc(xbt_mheap_t mdp, size_t size) { @@ -184,8 +187,6 @@ void *mmalloc_no_memset(xbt_mheap_t mdp, size_t size) if (!(mdp->flags & MMALLOC_INITIALIZED)) initialize(mdp); - mmalloc_paranoia(mdp); - /* Determine the allocation policy based on the request size. */ if (size <= BLOCKSIZE / 2) { /* Small allocation to receive a fragment of a block. diff --git a/src/xbt/mmalloc/mmprivate.h b/src/xbt/mmalloc/mmprivate.h index 5e6609d9c1..2fdc94c9bd 100644 --- a/src/xbt/mmalloc/mmprivate.h +++ b/src/xbt/mmalloc/mmprivate.h @@ -294,12 +294,6 @@ XBT_PUBLIC( void *)mmorecore(struct mdesc *mdp, ssize_t size); #define LOCK(mdp) pthread_mutex_lock(&mdp->mutex) #define UNLOCK(mdp) pthread_mutex_unlock(&mdp->mutex) -static inline void mmalloc_paranoia(struct mdesc *mdp){ - - /* nothing to fear for no */ - -} - static inline int mmalloc_get_increment(malloc_info* heapinfo) { if (heapinfo->type < 0) { return heapinfo->free_block.size; diff --git a/src/xbt/xbt_log_layout_format.c b/src/xbt/xbt_log_layout_format.c index 7c41b5b706..ea33369b7a 100644 --- a/src/xbt/xbt_log_layout_format.c +++ b/src/xbt/xbt_log_layout_format.c @@ -78,92 +78,94 @@ static int xbt_log_layout_format_doit(xbt_log_layout_t l, xbt_log_event_t ev, co for (char* q = l->data ; *q != '\0' ; q++) { if (*q == '%') { q++; - handle_modifier: - switch (*q) { - case '\0': - fprintf(stderr, "Layout format (%s) ending with %%\n", (char *)l->data); - xbt_abort(); - break; - case '%': - *p = '%'; - check_overflow(1); - break; - case 'n': /* platform-dependant line separator; LOG4J compliant */ - *p = '\n'; - check_overflow(1); - break; - case 'e': /* plain space; SimGrid extension */ - *p = ' '; - check_overflow(1); - break; - case '.': /* precision specifier */ - precision = strtol(q + 1, &q, 10); - goto handle_modifier; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': /* length modifier */ - length = strtol(q, &q, 10); - goto handle_modifier; - case 'c': /* category name; LOG4J compliant - should accept a precision postfix to show the hierarchy */ - show_string(ev->cat->name); - break; - case 'p': /* priority name; LOG4J compliant */ - show_string(xbt_log_priority_names[ev->priority]); - break; - case 'h': /* host name; SimGrid extension */ - show_string(sg_host_self_get_name()); - break; - case 't': /* thread/process name; LOG4J compliant */ - case 'P': /* process name; SimGrid extension */ - show_string(xbt_procname()); - break; - case 'i': /* process PID name; SimGrid extension */ - show_int(xbt_getpid()); - break; - case 'F': /* file name; LOG4J compliant */ - show_string(ev->fileName); - break; - case 'l': { /* location; LOG4J compliant */ - int sz; - set_sz_from_precision(); - int len = snprintf(p, sz, "%s:%d", ev->fileName, ev->lineNum); - check_overflow(MIN(sz, len)); - break; - } - case 'L': /* line number; LOG4J compliant */ - show_int(ev->lineNum); - break; - case 'M': /* method (ie, function) name; LOG4J compliant */ - show_string(ev->functionName); - break; - case 'd': /* date; LOG4J compliant */ - show_double(surf_get_clock()); - break; - case 'r': /* application age; LOG4J compliant */ - show_double(surf_get_clock() - format_begin_of_time); - break; - case 'm': { /* user-provided message; LOG4J compliant */ - int sz; - set_sz_from_precision(); - va_list ap; - va_copy(ap, ev->ap); - int len = vsnprintf(p, sz, msg_fmt, ap); - va_end(ap); - check_overflow(MIN(sz, len)); - break; - } - default: - fprintf(stderr, ERRMSG, *q, (char *)l->data); - xbt_abort(); - } + do { + switch (*q) { + case '\0': + fprintf(stderr, "Layout format (%s) ending with %%\n", (char*)l->data); + xbt_abort(); + break; + case '%': + *p = '%'; + check_overflow(1); + break; + case 'n': /* platform-dependant line separator; LOG4J compliant */ + *p = '\n'; + check_overflow(1); + break; + case 'e': /* plain space; SimGrid extension */ + *p = ' '; + check_overflow(1); + break; + case '.': /* precision specifier */ + precision = strtol(q + 1, &q, 10); + continue; /* conversion specifier still not found, continue reading */ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': /* length modifier */ + length = strtol(q, &q, 10); + continue; /* conversion specifier still not found, continue reading */ + case 'c': /* category name; LOG4J compliant + should accept a precision postfix to show the hierarchy */ + show_string(ev->cat->name); + break; + case 'p': /* priority name; LOG4J compliant */ + show_string(xbt_log_priority_names[ev->priority]); + break; + case 'h': /* host name; SimGrid extension */ + show_string(sg_host_self_get_name()); + break; + case 't': /* thread/process name; LOG4J compliant */ + case 'P': /* process name; SimGrid extension */ + show_string(xbt_procname()); + break; + case 'i': /* process PID name; SimGrid extension */ + show_int(xbt_getpid()); + break; + case 'F': /* file name; LOG4J compliant */ + show_string(ev->fileName); + break; + case 'l': { /* location; LOG4J compliant */ + int sz; + set_sz_from_precision(); + int len = snprintf(p, sz, "%s:%d", ev->fileName, ev->lineNum); + check_overflow(MIN(sz, len)); + break; + } + case 'L': /* line number; LOG4J compliant */ + show_int(ev->lineNum); + break; + case 'M': /* method (ie, function) name; LOG4J compliant */ + show_string(ev->functionName); + break; + case 'd': /* date; LOG4J compliant */ + show_double(surf_get_clock()); + break; + case 'r': /* application age; LOG4J compliant */ + show_double(surf_get_clock() - format_begin_of_time); + break; + case 'm': { /* user-provided message; LOG4J compliant */ + int sz; + set_sz_from_precision(); + va_list ap; + va_copy(ap, ev->ap); + int len = vsnprintf(p, sz, msg_fmt, ap); + va_end(ap); + check_overflow(MIN(sz, len)); + break; + } + default: + fprintf(stderr, ERRMSG, *q, (char*)l->data); + xbt_abort(); + } + break; /* done, continue normally */ + } while (1); } else { *p = *q; check_overflow(1); diff --git a/src/xbt/xbt_log_layout_simple.c b/src/xbt/xbt_log_layout_simple.c index b890b1591d..57069fd8e5 100644 --- a/src/xbt/xbt_log_layout_simple.c +++ b/src/xbt/xbt_log_layout_simple.c @@ -23,7 +23,7 @@ static double simple_begin_of_time = -1; } else \ return 0 -static int xbt_log_layout_simple_doit(xbt_log_layout_t l, xbt_log_event_t ev, const char *fmt) +static int xbt_log_layout_simple_doit(xbt_log_layout_t XBT_ATTRIB_UNUSED l, xbt_log_event_t ev, const char* fmt) { char *p = ev->buffer; int rem_size = ev->buffer_size; @@ -70,7 +70,7 @@ static int xbt_log_layout_simple_doit(xbt_log_layout_t l, xbt_log_event_t ev, co return 1; } -xbt_log_layout_t xbt_log_layout_simple_new(char *arg) +xbt_log_layout_t xbt_log_layout_simple_new(char* XBT_ATTRIB_UNUSED arg) { xbt_log_layout_t res = xbt_new0(s_xbt_log_layout_t, 1); res->do_layout = &xbt_log_layout_simple_doit; diff --git a/src/xbt/xbt_os_thread.c b/src/xbt/xbt_os_thread.c index 2652bc952e..8690348936 100644 --- a/src/xbt/xbt_os_thread.c +++ b/src/xbt/xbt_os_thread.c @@ -162,7 +162,8 @@ xbt_os_thread_t xbt_os_thread_create(const char *name, pvoid_f_pvoid_t start_ro * * If pthread_setaffinity_np is not usable on that (non-gnu) platform, this function does nothing. */ -int xbt_os_thread_bind(xbt_os_thread_t thread, int cpu){ +int xbt_os_thread_bind(xbt_os_thread_t XBT_ATTRIB_UNUSED thread, int XBT_ATTRIB_UNUSED cpu) +{ int errcode = 0; #if HAVE_PTHREAD_SETAFFINITY pthread_t pthread = thread->t; diff --git a/teshsuite/mc/dwarf/dwarf.cpp b/teshsuite/mc/dwarf/dwarf.cpp index 16ad053fc8..0bc60e6893 100644 --- a/teshsuite/mc/dwarf/dwarf.cpp +++ b/teshsuite/mc/dwarf/dwarf.cpp @@ -105,11 +105,13 @@ static simgrid::mc::Member* find_member(simgrid::mc::Type& type, const char* nam int some_local_variable = 0; -typedef struct foo {int i;} s_foo; +struct s_foo { + int i; +}; static void test_type_by_name(simgrid::mc::RemoteClient& process, s_foo my_foo) { - assert(process.binary_info->full_types_by_name.find("struct foo") != process.binary_info->full_types_by_name.end()); + assert(process.binary_info->full_types_by_name.find("struct s_foo") != process.binary_info->full_types_by_name.end()); } int main(int argc, char** argv) diff --git a/teshsuite/s4u/actor/actor.cpp b/teshsuite/s4u/actor/actor.cpp index 948eca2e00..46b464fd88 100644 --- a/teshsuite/s4u/actor/actor.cpp +++ b/teshsuite/s4u/actor/actor.cpp @@ -26,7 +26,7 @@ static void master() simgrid::s4u::this_actor::getHost()->actorList(actor_list); for (auto const& actor : *actor_list) { - XBT_INFO("Actor (pid=%lu, ppid=%lu, name=%s)", actor->getPid(), actor->getPpid(), actor->getName().c_str()); + XBT_INFO("Actor (pid=%lu, ppid=%lu, name=%s)", actor->getPid(), actor->getPpid(), actor->getCname()); if (simgrid::s4u::this_actor::getPid() != actor->getPid()) actor->kill(); } diff --git a/teshsuite/s4u/pid/pid.cpp b/teshsuite/s4u/pid/pid.cpp index 86dcc627dc..de948f3c56 100644 --- a/teshsuite/s4u/pid/pid.cpp +++ b/teshsuite/s4u/pid/pid.cpp @@ -7,7 +7,7 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this msg example"); -static int my_onexit(smx_process_exit_status_t status, int* pid) +static int my_onexit(smx_process_exit_status_t /*status*/, int* pid) { XBT_INFO("Process \"%d\" killed.", *pid); return 0; diff --git a/teshsuite/s4u/storage_client_server/storage_client_server.cpp b/teshsuite/s4u/storage_client_server/storage_client_server.cpp index df64ea9a32..52d9ace4d2 100644 --- a/teshsuite/s4u/storage_client_server/storage_client_server.cpp +++ b/teshsuite/s4u/storage_client_server/storage_client_server.cpp @@ -12,7 +12,7 @@ static void display_storage_properties(simgrid::s4u::Storage* storage) { std::map* props = storage->getProperties(); if (not props->empty()) { - XBT_INFO("\tProperties of mounted storage: %s", storage->getName()); + XBT_INFO("\tProperties of mounted storage: %s", storage->getCname()); for (auto const& elm : *props) { XBT_INFO(" %s->%s", elm.first.c_str(), elm.second.c_str()); @@ -27,7 +27,7 @@ static sg_size_t write_local_file(const char* dest, sg_size_t file_size) simgrid::s4u::File* file = new simgrid::s4u::File(dest, nullptr); sg_size_t written = file->write(file_size); XBT_INFO("%llu bytes on %llu bytes have been written by %s on /sd1", written, file_size, - simgrid::s4u::Actor::self()->getName().c_str()); + simgrid::s4u::Actor::self()->getCname()); delete file; return written; } @@ -38,7 +38,7 @@ static sg_size_t read_local_file(const char* src) sg_size_t file_size = file->size(); sg_size_t read = file->read(file_size); - XBT_INFO("%s has read %llu on %s", simgrid::s4u::Actor::self()->getName().c_str(), read, src); + XBT_INFO("%s has read %llu on %s", simgrid::s4u::Actor::self()->getCname(), read, src); delete file; return read; @@ -51,7 +51,7 @@ static void hsm_put(const char* remote_host, const char* src, const char* dest) sg_size_t read_size = read_local_file(src); // Send file - XBT_INFO("%s sends %llu to %s", simgrid::s4u::this_actor::getName().c_str(), read_size, remote_host); + XBT_INFO("%s sends %llu to %s", simgrid::s4u::this_actor::getCname(), read_size, remote_host); char* payload = bprintf("%s %llu", dest, read_size); simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName(remote_host); mailbox->put(payload, static_cast(read_size)); @@ -60,7 +60,7 @@ static void hsm_put(const char* remote_host, const char* src, const char* dest) static void display_storage_content(simgrid::s4u::Storage* storage) { - XBT_INFO("Print the content of the storage element: %s", storage->getName()); + XBT_INFO("Print the content of the storage element: %s", storage->getCname()); std::map* content = storage->getContent(); if (not content->empty()) { for (auto const& entry : *content) @@ -108,7 +108,7 @@ static void storage_info(simgrid::s4u::Host* host) for (auto const& elm : host->getMountedStorages()) { const char* mount_name = elm.first.c_str(); simgrid::s4u::Storage* storage = elm.second; - XBT_INFO("\tStorage name: %s, mount name: %s", storage->getName(), mount_name); + XBT_INFO("\tStorage name: %s, mount name: %s", storage->getCname(), mount_name); sg_size_t free_size = storage->getSizeFree(); sg_size_t used_size = storage->getSizeUsed(); @@ -117,7 +117,7 @@ static void storage_info(simgrid::s4u::Host* host) XBT_INFO("\t\tUsed size: %llu bytes", used_size); display_storage_properties(storage); - dump_storage_by_name(storage->getName()); + dump_storage_by_name(storage->getCname()); } } diff --git a/teshsuite/simdag/flatifier/flatifier.cpp b/teshsuite/simdag/flatifier/flatifier.cpp index 6c3083218e..622d3bca57 100644 --- a/teshsuite/simdag/flatifier/flatifier.cpp +++ b/teshsuite/simdag/flatifier/flatifier.cpp @@ -85,12 +85,12 @@ static void dump_platform() simgrid::s4u::Engine::getInstance()->getNetpointList(&netcardList); std::sort(netcardList.begin(), netcardList.end(), [](simgrid::kernel::routing::NetPoint* a, simgrid::kernel::routing::NetPoint* b) { - return a->name() < b->name(); + return a->getName() < b->getName(); }); for (auto const& srcCard : netcardList) if (srcCard->isRouter()) - std::printf(" \n", srcCard->cname()); + std::printf(" \n", srcCard->getCname()); // Links unsigned int totalLinks = sg_link_count(); @@ -103,7 +103,7 @@ static void dump_platform() simgrid::s4u::Link* link = links[i]; std::printf(" name(), link->bandwidth(), link->latency()); + std::printf("%s\" bandwidth=\"%.0f\" latency=\"%.9f\"", link->getCname(), link->bandwidth(), link->latency()); if (sg_link_is_shared(link)) { std::printf("/>\n"); } else { @@ -122,17 +122,17 @@ static void dump_platform() if (not route.empty()) { std::printf(" \n ", host1->getCname(), host2->getCname()); for (auto const& link : route) - std::printf("", link->cname()); + std::printf("", link->getCname()); std::printf("\n \n"); } } for (auto const& netcardDst : netcardList) { // to router if (netcardDst->isRouter()) { - std::printf(" \n ", host1->getCname(), netcardDst->cname()); + std::printf(" \n ", host1->getCname(), netcardDst->getCname()); std::vector route; simgrid::kernel::routing::NetZoneImpl::getGlobalRoute(netcardSrc, netcardDst, &route, nullptr); for (auto const& link : route) - std::printf("", link->cname()); + std::printf("", link->getCname()); std::printf("\n \n"); } } @@ -142,22 +142,22 @@ static void dump_platform() if (value1->isRouter()) { for (auto const& value2 : netcardList) { // to router if (value2->isRouter()) { - std::printf(" \n ", value1->cname(), value2->cname()); + std::printf(" \n ", value1->getCname(), value2->getCname()); std::vector route; simgrid::kernel::routing::NetZoneImpl::getGlobalRoute(value1, value2, &route, nullptr); for (auto const& link : route) - std::printf("", link->cname()); + std::printf("", link->getCname()); std::printf("\n \n"); } } for (unsigned int it_dst = 0; it_dst < totalHosts; it_dst++) { // Routes to host simgrid::s4u::Host* host2 = hosts[it_dst]; - std::printf(" \n ", value1->cname(), host2->getCname()); + std::printf(" \n ", value1->getCname(), host2->getCname()); std::vector route; simgrid::kernel::routing::NetPoint* netcardDst = host2->pimpl_netpoint; simgrid::kernel::routing::NetZoneImpl::getGlobalRoute(value1, netcardDst, &route, nullptr); for (auto const& link : route) - std::printf("", link->cname()); + std::printf("", link->getCname()); std::printf("\n \n"); } } diff --git a/teshsuite/simdag/is-router/is-router.cpp b/teshsuite/simdag/is-router/is-router.cpp index 9858c0cac4..88b653035d 100644 --- a/teshsuite/simdag/is-router/is-router.cpp +++ b/teshsuite/simdag/is-router/is-router.cpp @@ -22,7 +22,7 @@ int main(int argc, char **argv) simgrid::s4u::Engine::getInstance()->getNetpointList(&netcardList); std::sort(netcardList.begin(), netcardList.end(), [](simgrid::kernel::routing::NetPoint* a, simgrid::kernel::routing::NetPoint* b) { - return a->name() < b->name(); + return a->getName() < b->getName(); }); int it; @@ -42,7 +42,7 @@ int main(int argc, char **argv) std::printf("NetCards count: %zu\n", netcardList.size()); for (auto const& nc : netcardList) - std::printf(" - Seen: \"%s\". Type: %s\n", nc->cname(), + std::printf(" - Seen: \"%s\". Type: %s\n", nc->getCname(), nc->isRouter() ? "router" : (nc->isNetZone() ? "netzone" : (nc->isHost() ? "host" : "buggy"))); return 0; diff --git a/teshsuite/surf/lmm_usage/lmm_usage.cpp b/teshsuite/surf/lmm_usage/lmm_usage.cpp index 3a57290ef4..73c34dae81 100644 --- a/teshsuite/surf/lmm_usage/lmm_usage.cpp +++ b/teshsuite/surf/lmm_usage/lmm_usage.cpp @@ -23,11 +23,7 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test, "Messages specific for surf example"); /* ==l1== L2 ==L3== */ /* ------ */ -typedef enum { - MAXMIN, - LAGRANGE_RENO, - LAGRANGE_VEGAS -} method_t; +enum method_t { MAXMIN, LAGRANGE_RENO, LAGRANGE_VEGAS }; static double dichotomy(double func(double), double min, double max, double min_error) {