diff --git a/.gitignore b/.gitignore index 53723d4..fcde0fd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,8 @@ nimbledeps/* *.exe +shadow/network_topology.gml +shadow/shadow.yaml +shadow/main +shadow/latencies* +shadow/shadowlog* +shadow/shadow.data/ diff --git a/README.md b/README.md index 71f76c9..8f28405 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,12 @@ * DST gossipsub test node * incl shadow simulation setup +* incl awk scripts for detailed analysis -## Shadow example +Three simulation cases are supportes + +## Scenario1 - Basic Simulation Scenario +### Shadow example ```sh nimble install -dy @@ -22,3 +26,44 @@ nim -d:release c plotter ``` The dependencies will be installed in the `nimbledeps` folder, which enables easy tweaking + + +## Scenario2 - (P2P-Research Branch) - +Homogeneous nodes/links (100 Mbps bandwidth and 100ms latency) +supports variable network/message size, variable number of publishers and message fragments +automatically updates shadow.yaml file to accomodate different network sizes +awk scripts for detailed analysis + +```sh +cd shadow +#the run.sh script is automated to meet different experiment needs, use ./run.sh +#The below example runs the simulation twice for a 1000 node network. each publisher publishes a 15000 bytes messages, and every message is partitioned into 4 fragments. Total 10 publishers use + +./run.sh 2 1000 15000 4 10 +# The number of nodes is maintained in the shadow.yaml file, and automatically updated by run.sh. +# The output files latencies(x), stats(x) and shadowlog(x) carries the outputs for each simulation run. +# The summary_dontwant.awk, summary_latency.awk, summary_latency_large.awk, and summary_shadowlog.awk parse the output files. +# The run.sh script automatically calls these files to display the output +# a temperary data.shadow folder is created for each simulation and removed by the run.sh after the simulation is over +``` + +## Scenario3 - (Realistic-Scenarios Branch) - +Heterogeneous nodes/links (bandwidth/latency/packet_loss_ratio controllable through run.sh) +run.sh uses topogen.py to create a realistic gml file to emulate a real-world network scenario +supports variable network/message size, variable number of publishers and message fragments +automatically generates network_topology.gml and shadow.yaml files to accomodate different network sizes +awk scripts called from run.sh for detailed analysis + +```sh +cd shadow +#The following sample command runs simulation 1 time, for a 1000 node network. Each published message size +#is 15KB (no-fragmentation), peer bandwidth varies between 50-130 Mbps, Latency between 60-160ms, and +#bandwidth,latency is roughly distributed in five different groups. + +./run.sh 1 1000 15000 1 10 50 130 60 160 5 0.0 +# The number of nodes is maintained in the shadow.yaml file, and automatically generated by run.sh. +# The output files latencies(x), stats(x) and shadowlog(x) carries the outputs for each simulation run. +# The summary_dontwant.awk, summary_latency.awk, summary_latency_large.awk, and summary_shadowlog.awk parse the output files. +# The run.sh script automatically calls these files to display the output +# a temperary data.shadow folder is created for each simulation and removed by the run.sh after the simulation is over +``` diff --git a/shadow/go.mod b/shadow/go.mod new file mode 100644 index 0000000..f97bb21 --- /dev/null +++ b/shadow/go.mod @@ -0,0 +1,115 @@ +module main + +go 1.23.6 + +require ( + github.com/btcsuite/btcd/btcec/v2 v2.3.4 + github.com/ethereum/go-ethereum v1.15.2 + github.com/libp2p/go-libp2p v0.40.0 + github.com/libp2p/go-libp2p-pubsub v0.13.0 + github.com/multiformats/go-multiaddr v0.14.0 +) + +require ( + github.com/benbjohnson/clock v1.3.5 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/containerd/cgroups v1.1.0 // indirect + github.com/coreos/go-systemd/v22 v22.5.0 // indirect + github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/elastic/gosigar v0.14.3 // indirect + github.com/flynn/noise v1.1.0 // indirect + github.com/francoispqt/gojay v1.2.13 // indirect + github.com/go-task/slim-sprig/v3 v3.0.0 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/google/gopacket v1.1.19 // indirect + github.com/google/pprof v0.0.0-20250208200701-d0013a598941 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/gorilla/websocket v1.5.3 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/holiman/uint256 v1.3.2 // indirect + github.com/huin/goupnp v1.3.0 // indirect + github.com/ipfs/go-cid v0.5.0 // indirect + github.com/ipfs/go-log/v2 v2.5.1 // indirect + github.com/jackpal/go-nat-pmp v1.0.2 // indirect + github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect + github.com/klauspost/compress v1.17.11 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect + github.com/koron/go-ssdp v0.0.5 // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/libp2p/go-flow-metrics v0.2.0 // indirect + github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect + github.com/libp2p/go-msgio v0.3.0 // indirect + github.com/libp2p/go-nat v0.2.0 // indirect + github.com/libp2p/go-netroute v0.2.2 // indirect + github.com/libp2p/go-reuseport v0.4.0 // indirect + github.com/libp2p/go-yamux/v5 v5.0.0 // indirect + github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/miekg/dns v1.1.63 // indirect + github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect + github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect + github.com/minio/sha256-simd v1.0.1 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect + github.com/multiformats/go-base32 v0.1.0 // indirect + github.com/multiformats/go-base36 v0.2.0 // indirect + github.com/multiformats/go-multiaddr-dns v0.4.1 // indirect + github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect + github.com/multiformats/go-multibase v0.2.0 // indirect + github.com/multiformats/go-multicodec v0.9.0 // indirect + github.com/multiformats/go-multihash v0.2.3 // indirect + github.com/multiformats/go-multistream v0.6.0 // indirect + github.com/multiformats/go-varint v0.0.7 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/onsi/ginkgo/v2 v2.22.2 // indirect + github.com/opencontainers/runtime-spec v1.2.0 // indirect + github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect + github.com/pion/datachannel v1.5.10 // indirect + github.com/pion/dtls/v2 v2.2.12 // indirect + github.com/pion/dtls/v3 v3.0.4 // indirect + github.com/pion/ice/v4 v4.0.6 // indirect + github.com/pion/interceptor v0.1.37 // indirect + github.com/pion/logging v0.2.3 // indirect + github.com/pion/mdns/v2 v2.0.7 // indirect + github.com/pion/randutil v0.1.0 // indirect + github.com/pion/rtcp v1.2.15 // indirect + github.com/pion/rtp v1.8.11 // indirect + github.com/pion/sctp v1.8.35 // indirect + github.com/pion/sdp/v3 v3.0.10 // indirect + github.com/pion/srtp/v3 v3.0.4 // indirect + github.com/pion/stun v0.6.1 // indirect + github.com/pion/stun/v3 v3.0.0 // indirect + github.com/pion/transport/v2 v2.2.10 // indirect + github.com/pion/transport/v3 v3.0.7 // indirect + github.com/pion/turn/v4 v4.0.0 // indirect + github.com/pion/webrtc/v4 v4.0.9 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/client_golang v1.20.5 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.62.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/quic-go/qpack v0.5.1 // indirect + github.com/quic-go/quic-go v0.49.0 // indirect + github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 // indirect + github.com/raulk/go-watchdog v1.3.0 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/wlynxg/anet v0.0.5 // indirect + go.uber.org/dig v1.18.0 // indirect + go.uber.org/fx v1.23.0 // indirect + go.uber.org/mock v0.5.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.0 // indirect + golang.org/x/crypto v0.33.0 // indirect + golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac // indirect + golang.org/x/mod v0.23.0 // indirect + golang.org/x/net v0.35.0 // indirect + golang.org/x/sync v0.11.0 // indirect + golang.org/x/sys v0.30.0 // indirect + golang.org/x/text v0.22.0 // indirect + golang.org/x/tools v0.30.0 // indirect + google.golang.org/protobuf v1.36.5 // indirect + lukechampine.com/blake3 v1.3.0 // indirect +) diff --git a/shadow/go.sum b/shadow/go.sum new file mode 100644 index 0000000..461d74d --- /dev/null +++ b/shadow/go.sum @@ -0,0 +1,540 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= +dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= +dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= +dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= +dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= +git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= +github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= +github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= +github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= +github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= +github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= +github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= +github.com/elastic/gosigar v0.14.3 h1:xwkKwPia+hSfg9GqrCUKYdId102m9qTJIIr7egmK/uo= +github.com/elastic/gosigar v0.14.3/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= +github.com/ethereum/go-ethereum v1.15.2 h1:CcU13w1IXOo6FvS60JGCTVcAJ5Ik6RkWoVIvziiHdTU= +github.com/ethereum/go-ethereum v1.15.2/go.mod h1:wGQINJKEVUunCeoaA9C9qKMQ9GEOsEIunzzqTUO2F6Y= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= +github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= +github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= +github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= +github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20250208200701-d0013a598941 h1:43XjGa6toxLpeksjcxs1jIoIyr+vUfOqY2c6HB4bpoc= +github.com/google/pprof v0.0.0-20250208200701-d0013a598941/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= +github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA= +github.com/holiman/uint256 v1.3.2/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= +github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg= +github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk= +github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= +github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= +github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= +github.com/koron/go-ssdp v0.0.5 h1:E1iSMxIs4WqxTbIBLtmNBeOOC+1sCIXQeqTWVnpmwhk= +github.com/koron/go-ssdp v0.0.5/go.mod h1:Qm59B7hpKpDqfyRNWRNr00jGwLdXjDyZh6y7rH6VS0w= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= +github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/libp2p/go-flow-metrics v0.2.0 h1:EIZzjmeOE6c8Dav0sNv35vhZxATIXWZg6j/C08XmmDw= +github.com/libp2p/go-flow-metrics v0.2.0/go.mod h1:st3qqfu8+pMfh+9Mzqb2GTiwrAGjIPszEjZmtksN8Jc= +github.com/libp2p/go-libp2p v0.40.0 h1:1LOMO3gigxeXFs50HGEc1U79OINewUQB7o4gTKGPC3U= +github.com/libp2p/go-libp2p v0.40.0/go.mod h1:hOzj2EAIYsXpVpBnyA1pRHzpUJGF9nbWiDLjgasnbF0= +github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= +github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= +github.com/libp2p/go-libp2p-pubsub v0.13.0 h1:RmFQ2XAy3zQtbt2iNPy7Tt0/3fwTnHpCQSSnmGnt1Ps= +github.com/libp2p/go-libp2p-pubsub v0.13.0/go.mod h1:m0gpUOyrXKXdE7c8FNQ9/HLfWbxaEw7xku45w+PaqZo= +github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= +github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= +github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= +github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM= +github.com/libp2p/go-nat v0.2.0 h1:Tyz+bUFAYqGyJ/ppPPymMGbIgNRH+WqC5QrT5fKrrGk= +github.com/libp2p/go-nat v0.2.0/go.mod h1:3MJr+GRpRkyT65EpVPBstXLvOlAPzUVlG6Pwg9ohLJk= +github.com/libp2p/go-netroute v0.2.2 h1:Dejd8cQ47Qx2kRABg6lPwknU7+nBnFRpko45/fFPuZ8= +github.com/libp2p/go-netroute v0.2.2/go.mod h1:Rntq6jUAH0l9Gg17w5bFGhcC9a+vk4KNXs6s7IljKYE= +github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s= +github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= +github.com/libp2p/go-yamux/v5 v5.0.0 h1:2djUh96d3Jiac/JpGkKs4TO49YhsfLopAoryfPmf+Po= +github.com/libp2p/go-yamux/v5 v5.0.0/go.mod h1:en+3cdX51U0ZslwRdRLrvQsdayFt3TSUKvBGErzpWbU= +github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= +github.com/miekg/dns v1.1.63 h1:8M5aAw6OMZfFXTT7K5V0Eu5YiiL8l7nUAkyN6C9YwaY= +github.com/miekg/dns v1.1.63/go.mod h1:6NGHfjhpmr5lt3XPLuyfDJi5AXbNIPM9PY6H6sF1Nfs= +github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= +github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= +github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= +github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= +github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= +github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= +github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= +github.com/multiformats/go-multiaddr v0.14.0 h1:bfrHrJhrRuh/NXH5mCnemjpbGjzRw/b+tJFOD41g2tU= +github.com/multiformats/go-multiaddr v0.14.0/go.mod h1:6EkVAxtznq2yC3QT5CM1UTAwG0GTP3EWAIcjHuzQ+r4= +github.com/multiformats/go-multiaddr-dns v0.4.1 h1:whi/uCLbDS3mSEUMb1MsoT4uzUeZB0N32yzufqS0i5M= +github.com/multiformats/go-multiaddr-dns v0.4.1/go.mod h1:7hfthtB4E4pQwirrz+J0CcDUfbWzTqEzVyYKKIKpgkc= +github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= +github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= +github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= +github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= +github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg= +github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k= +github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= +github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= +github.com/multiformats/go-multistream v0.6.0 h1:ZaHKbsL404720283o4c/IHQXiS6gb8qAN5EIJ4PN5EA= +github.com/multiformats/go-multistream v0.6.0/go.mod h1:MOyoG5otO24cHIg8kf9QW2/NozURlkP/rvi2FQJyCPg= +github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= +github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= +github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= +github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= +github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= +github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= +github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= +github.com/pion/datachannel v1.5.10 h1:ly0Q26K1i6ZkGf42W7D4hQYR90pZwzFOjTq5AuCKk4o= +github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oLo8Rs4Py/M= +github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= +github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= +github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= +github.com/pion/dtls/v3 v3.0.4 h1:44CZekewMzfrn9pmGrj5BNnTMDCFwr+6sLH+cCuLM7U= +github.com/pion/dtls/v3 v3.0.4/go.mod h1:R373CsjxWqNPf6MEkfdy3aSe9niZvL/JaKlGeFphtMg= +github.com/pion/ice/v4 v4.0.6 h1:jmM9HwI9lfetQV/39uD0nY4y++XZNPhvzIPCb8EwxUM= +github.com/pion/ice/v4 v4.0.6/go.mod h1:y3M18aPhIxLlcO/4dn9X8LzLLSma84cx6emMSu14FGw= +github.com/pion/interceptor v0.1.37 h1:aRA8Zpab/wE7/c0O3fh1PqY0AJI3fCSEM5lRWJVorwI= +github.com/pion/interceptor v0.1.37/go.mod h1:JzxbJ4umVTlZAf+/utHzNesY8tmRkM2lVmkS82TTj8Y= +github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= +github.com/pion/logging v0.2.3 h1:gHuf0zpoh1GW67Nr6Gj4cv5Z9ZscU7g/EaoC/Ke/igI= +github.com/pion/logging v0.2.3/go.mod h1:z8YfknkquMe1csOrxK5kc+5/ZPAzMxbKLX5aXpbpC90= +github.com/pion/mdns/v2 v2.0.7 h1:c9kM8ewCgjslaAmicYMFQIde2H9/lrZpjBkN8VwoVtM= +github.com/pion/mdns/v2 v2.0.7/go.mod h1:vAdSYNAT0Jy3Ru0zl2YiW3Rm/fJCwIeM0nToenfOJKA= +github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= +github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= +github.com/pion/rtcp v1.2.15 h1:LZQi2JbdipLOj4eBjK4wlVoQWfrZbh3Q6eHtWtJBZBo= +github.com/pion/rtcp v1.2.15/go.mod h1:jlGuAjHMEXwMUHK78RgX0UmEJFV4zUKOFHR7OP+D3D0= +github.com/pion/rtp v1.8.11 h1:17xjnY5WO5hgO6SD3/NTIUPvSFw/PbLsIJyz1r1yNIk= +github.com/pion/rtp v1.8.11/go.mod h1:8uMBJj32Pa1wwx8Fuv/AsFhn8jsgw+3rUC2PfoBZ8p4= +github.com/pion/sctp v1.8.35 h1:qwtKvNK1Wc5tHMIYgTDJhfZk7vATGVHhXbUDfHbYwzA= +github.com/pion/sctp v1.8.35/go.mod h1:EcXP8zCYVTRy3W9xtOF7wJm1L1aXfKRQzaM33SjQlzg= +github.com/pion/sdp/v3 v3.0.10 h1:6MChLE/1xYB+CjumMw+gZ9ufp2DPApuVSnDT8t5MIgA= +github.com/pion/sdp/v3 v3.0.10/go.mod h1:88GMahN5xnScv1hIMTqLdu/cOcUkj6a9ytbncwMCq2E= +github.com/pion/srtp/v3 v3.0.4 h1:2Z6vDVxzrX3UHEgrUyIGM4rRouoC7v+NiF1IHtp9B5M= +github.com/pion/srtp/v3 v3.0.4/go.mod h1:1Jx3FwDoxpRaTh1oRV8A/6G1BnFL+QI82eK4ms8EEJQ= +github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= +github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= +github.com/pion/stun/v3 v3.0.0 h1:4h1gwhWLWuZWOJIJR9s2ferRO+W3zA/b6ijOI6mKzUw= +github.com/pion/stun/v3 v3.0.0/go.mod h1:HvCN8txt8mwi4FBvS3EmDghW6aQJ24T+y+1TKjB5jyU= +github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= +github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= +github.com/pion/transport/v2 v2.2.10 h1:ucLBLE8nuxiHfvkFKnkDQRYWYfp8ejf4YBOPfaQpw6Q= +github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs8yYgQToO5E= +github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0= +github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo= +github.com/pion/turn/v4 v4.0.0 h1:qxplo3Rxa9Yg1xXDxxH8xaqcyGUtbHYw4QSCvmFWvhM= +github.com/pion/turn/v4 v4.0.0/go.mod h1:MuPDkm15nYSklKpN8vWJ9W2M0PlyQZqYt1McGuxG7mA= +github.com/pion/webrtc/v4 v4.0.9 h1:PyOYMRKJgfy0dzPcYtFD/4oW9zaw3Ze3oZzzbj2LV9E= +github.com/pion/webrtc/v4 v4.0.9/go.mod h1:ViHLVaNpiuvaH8pdiuQxuA9awuE6KVzAXx3vVWilOck= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= +github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= +github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= +github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= +github.com/quic-go/quic-go v0.49.0 h1:w5iJHXwHxs1QxyBv1EHKuC50GX5to8mJAxvtnttJp94= +github.com/quic-go/quic-go v0.49.0/go.mod h1:s2wDnmCdooUQBmQfpUSTCYBl1/D4FcqbULMMkASvR6s= +github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 h1:4WFk6u3sOT6pLa1kQ50ZVdm8BQFgJNA117cepZxtLIg= +github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66/go.mod h1:Vp72IJajgeOL6ddqrAhmp7IM9zbTcgkQxD/YdxrVwMw= +github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= +github.com/raulk/go-watchdog v1.3.0/go.mod h1:fIvOnLbF0b0ZwkB9YU4mOW9Did//4vPZtDqv66NfsMU= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= +github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= +github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= +github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= +github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= +github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= +github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= +github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= +github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= +github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= +github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= +github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= +github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= +github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= +github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= +github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= +github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= +github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= +github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= +github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= +github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= +github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/dig v1.18.0 h1:imUL1UiY0Mg4bqbFfsRQO5G4CGRBec/ZujWTvSVp3pw= +go.uber.org/dig v1.18.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= +go.uber.org/fx v1.23.0 h1:lIr/gYWQGfTwGcSXWXu4vP5Ws6iqnNEIY+F/aFzCKTg= +go.uber.org/fx v1.23.0/go.mod h1:o/D9n+2mLP6v1EG+qsdT1O8wKopYAsqZasju97SDFCU= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= +go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= +golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= +golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= +golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac h1:l5+whBCLH3iH2ZNHYLbAe58bo7yrN4mVcnkHDYz5vvs= +golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac/go.mod h1:hH+7mtFmImwwcMvScyxUhjuVHR3HGaDPMn9rMSUUbxo= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= +golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= +golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= +google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +lukechampine.com/blake3 v1.3.0 h1:sJ3XhFINmHSrYCgl958hscfIa3bw8x4DqMP3u1YvoYE= +lukechampine.com/blake3 v1.3.0/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= +sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/shadow/main.go b/shadow/main.go new file mode 100644 index 0000000..a374c01 --- /dev/null +++ b/shadow/main.go @@ -0,0 +1,264 @@ +package main + +import ( + "context" + "crypto/sha256" + "encoding/binary" + "fmt" + "math/rand" + "net" + "os" + "strconv" + "time" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/ethereum/go-ethereum/crypto" + "github.com/libp2p/go-libp2p" + + pubsub "github.com/libp2p/go-libp2p-pubsub" + lcrypto "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/host" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/p2p/security/noise" + "github.com/multiformats/go-multiaddr" + ma "github.com/multiformats/go-multiaddr" +) + +func getHostname() (string, int) { + hostname, err := os.Hostname() + if err != nil { + fmt.Println(err) + panic(err) + } + + myID_str := hostname[4:] + myID, err := strconv.Atoi(myID_str) + if err != nil { + panic(err) + } + + return hostname, myID +} + +func getEnvVariables() (int, int, int, int, int) { + + PEERS, err := strconv.Atoi(os.Getenv("PEERS")) + if err != nil { + fmt.Println("Error converting string to integer:", err) + panic(err) + } + + PUBLISHERS, err := strconv.Atoi(os.Getenv("PUBLISHERS")) + if err != nil { + fmt.Println("Error converting string to integer:", err) + panic(err) + } + + MSGSIZE, err := strconv.Atoi(os.Getenv("MSG_SIZE")) + if err != nil { + fmt.Println("Error converting string to integer:", err) + panic(err) + } + + CHUNKS, err := strconv.Atoi(os.Getenv("FRAGMENTS")) + if err != nil { + fmt.Println("Error converting string to integer:", err) + panic(err) + } + + CONNECTTO, err := strconv.Atoi(os.Getenv("CONNECTTO")) + if err != nil { + fmt.Println("Error converting string to integer:", err) + panic(err) + } + + return PEERS, PUBLISHERS, MSGSIZE, CHUNKS, CONNECTTO +} + +func generateKey(podName string) lcrypto.PrivKey { + hash := sha256.Sum256([]byte(podName)) + p, err := crypto.ToECDSA(hash[:]) + if err != nil { + panic(err) + } + privK, _ := btcec.PrivKeyFromBytes(p.D.Bytes()) + key := (*lcrypto.Secp256k1PrivateKey)(privK) + libp2pPrivkey := lcrypto.PrivKey(key) + + return libp2pPrivkey +} + +func makeHost(peerName string) (host.Host, error) { + sourceMultiAddr, _ := multiaddr.NewMultiaddr("/ip4/0.0.0.0/tcp/5000") + + pk := generateKey(peerName) + + return libp2p.New( + libp2p.ListenAddrs(sourceMultiAddr), + libp2p.Security(noise.ID, noise.New), + libp2p.Identity(pk), + ) +} + +func readLoop(sub *pubsub.Subscription, ctx context.Context) { + for { + msg, err := sub.Next(ctx) + if err != nil { + continue + } + + receivedTimestamp := binary.LittleEndian.Uint64(msg.Data[:8]) + receivedTime := time.Unix(0, int64(receivedTimestamp)) + currentTimestamp := time.Now().UnixNano() + currentTime := time.Unix(0, currentTimestamp) + timeDifference := currentTime.Sub(receivedTime).Milliseconds() + fmt.Printf("%d milliseconds: %d\n", receivedTimestamp, timeDifference) + } +} + +func createGSParams() pubsub.GossipSubParams { + gsParams := pubsub.DefaultGossipSubParams() + + gsParams.D = 8 + gsParams.Dlo = 6 + gsParams.Dhi = 12 + gsParams.Dlazy = 6 + gsParams.Dout = 3 + gsParams.HeartbeatInterval = time.Second + gsParams.PruneBackoff = time.Minute + gsParams.GossipFactor = 0.05 + gsParams.IDontWantMessageThreshold = 1000 + + return gsParams +} + +func main() { + numPeers, publisherCount, msgSize /*chunks*/, _, connectTo := getEnvVariables() + hostName, myID := getHostname() + warmupMessages := 0 + pubStart := 1 + pubEnd := pubStart + warmupMessages + publisherCount + //publishWait := 3000 //milliseconds - Inter-packet publish delay + isPublisher := myID >= pubStart && myID < pubEnd + + ctx := context.Background() + gsParams := createGSParams() + h, err := makeHost(hostName) + if err != nil { + panic(err) + } + fmt.Println("", myID, isPublisher, h.ID()) + + //We need peerIDs for AddrInfo + myIdInfo := fmt.Sprintf("%s", h.ID()) + fileErr := os.WriteFile("../"+hostName+".json", []byte(myIdInfo), 0644) + if fileErr != nil { + panic(fileErr) + } + + ps, err := pubsub.NewGossipSub(ctx, h, pubsub.WithGossipSubParams(gsParams), pubsub.WithFloodPublish(false)) + if err != nil { + println("Error starting pubsub protocol", err) + panic(err) + } + + topic, _ := ps.Join("test") + topicScoreParams := pubsub.TopicScoreParams{ + TopicWeight: 1, + FirstMessageDeliveriesWeight: 1, + FirstMessageDeliveriesCap: 30, + MeshMessageDeliveriesDecay: 0.9, + } + _ = topic.SetScoreParams(&topicScoreParams) + sub, _ := topic.Subscribe() + + //Wait for peers to accumulate their peerIDs + time.Sleep(time.Second * 3) + numbers := make([]int, numPeers) + for i := 0; i < numPeers; i++ { + numbers[i] = i + 1 + } + source := rand.NewSource(int64(myID)) + r := rand.New(source) + r.Shuffle(numPeers, func(i, j int) { + numbers[i], numbers[j] = numbers[j], numbers[i] + }) + + for connections, i := 0, 0; i < numPeers; i++ { + if connections >= connectTo { + break + } + if numbers[i] == myID { + continue + } + + tAddress := fmt.Sprintf("peer%d", numbers[i]) + ips, err := net.LookupIP(tAddress) + if err != nil { + fmt.Printf("Error resolving address for %s \n", tAddress) + time.Sleep(time.Second * 3) + continue + } + + ip := ips[0] + ipString := ip.String() + mAddrs := "/ip4/" + ipString + "/tcp/5000" + multiAddrs, _ := ma.NewMultiaddr(mAddrs) + multiaddrsArray := []ma.Multiaddr{multiAddrs} + + content, _ := os.ReadFile("../" + tAddress + ".json") + stringValue := string(content) + nodeID, _ := peer.Decode(stringValue) + + fmt.Printf("%s: %s: %s", tAddress, mAddrs, stringValue) + info := peer.AddrInfo{ + ID: nodeID, + Addrs: multiaddrsArray, + } + cerr := h.Connect(ctx, info) + if err != nil { + fmt.Printf("Failed to dial %s: %s, reason: %s\n", mAddrs, stringValue, cerr) + time.Sleep(time.Second * 2) + } else { + fmt.Println("Conected!", mAddrs, stringValue) + connections += 1 + } + } + + time.Sleep(time.Second * 20) + peers := ps.ListPeers("test") + fmt.Printf("Mesh size: %d\n", len(peers)) + //fmt.Printf("Publishing turn is: %d\n", id) + + go readLoop(sub, ctx) + + for i := pubStart; i < pubEnd; i++ { + time.Sleep(time.Second * 3) + if i == myID { + now := time.Now().UnixNano() + nowBytes := make([]byte, 8) + binary.LittleEndian.PutUint64(nowBytes, uint64(now)) + var nowBytesExtended = append(nowBytes, make([]byte, msgSize)...) + err := topic.Publish(ctx, nowBytesExtended) + if err != nil { + fmt.Printf("Error publishing: %s\n", err) + } else { + fmt.Printf("Done Publishing %d\n", now) + } + + } + } + + time.Sleep(time.Second * 30) + + /* + topicScoreParams := pubsub.TopicScoreParams{ + TopicWeight: 1, + FirstMessageDeliveriesWeight: 1, + FirstMessageDeliveriesCap: 30, + MeshMessageDeliveriesDecay: 0.9, + } + + _ = topic.SetScoreParams(&topicScoreParams) + */ +} diff --git a/shadow/main.nim b/shadow/main.nim index 1c3cf72..9c0b89a 100644 --- a/shadow/main.nim +++ b/shadow/main.nim @@ -1,12 +1,22 @@ import stew/endians2, stew/byteutils, tables, strutils, os import libp2p, libp2p/protocols/pubsub/rpc/messages import libp2p/muxers/mplex/lpchannel, libp2p/protocols/ping +#import libp2p/protocols/pubsub/pubsubpeer + import chronos import sequtils, hashes, math, metrics from times import getTime, toUnix, fromUnix, `-`, initTime, `$`, inMilliseconds from nativesockets import getHostname -const chunks = 1 +#These parameters are passed from yaml file, and each defined peer may receive different parameters (e.g. message size) +var + publisherCount = parseInt(getEnv("PUBLISHERS")) + msg_size = parseInt(getEnv("MSG_SIZE")) + chunks = parseInt(getEnv("FRAGMENTS")) + +#we experiment with upto 10 fragments. 1 means, the messages are not fragmented +if chunks < 1 or chunks > 10: + chunks = 1 proc msgIdProvider(m: Message): Result[MessageId, ValidationResult] = return ok(($m.data.hash).toBytes()) @@ -15,9 +25,7 @@ proc main {.async.} = let hostname = getHostname() myId = parseInt(hostname[4..^1]) - #publisherCount = client.param(int, "publisher_count") - publisherCount = 10 - isPublisher = myId <= publisherCount + isPublisher = myId <= publisherCount #need to adjust is publishers ldont start from peer1 #isAttacker = (not isPublisher) and myId - publisherCount <= client.param(int, "attacker_count") isAttacker = false rng = libp2p.newRng() @@ -45,7 +53,7 @@ proc main {.async.} = anonymize = true, ) pingProtocol = Ping.new(rng=rng) - gossipSub.parameters.floodPublish = false + gossipSub.parameters.floodPublish = false #gossipSub.parameters.lazyPushThreshold = 1_000_000_000 #gossipSub.parameters.lazyPushThreshold = 0 gossipSub.parameters.opportunisticGraftThreshold = -10000 @@ -79,6 +87,9 @@ proc main {.async.} = sentNanosecs = nanoseconds(sentMoment - seconds(sentMoment.seconds)) sentDate = initTime(sentMoment.seconds, sentNanosecs) diff = getTime() - sentDate + + # pubId = byte(data[11]) + echo sentUint, " milliseconds: ", diff.inMilliseconds() @@ -121,7 +132,7 @@ proc main {.async.} = let connectTo = parseInt(getEnv("CONNECTTO")) var connected = 0 for peerInfo in peersInfo: - if connected >= connectTo: break + if connected >= connectTo+2: break let tAddress = "peer" & $peerInfo & ":5000" echo tAddress let addrs = resolveTAddress(tAddress).mapIt(MultiAddress.init(it).tryGet()) @@ -137,24 +148,64 @@ proc main {.async.} = # warmupMessages = client.param(int, "warmup_messages") #startOfTest = Moment.now() + milliseconds(warmupMessages * maxMessageDelay div 2) - await sleepAsync(10.seconds) - echo "Mesh size: ", gossipSub.mesh.getOrDefault("test").len + await sleepAsync(12.seconds) + echo "Mesh size: ", gossipSub.mesh.getOrDefault("test").len, + ", Total Peers Known : ", gossipSub.gossipsub.getOrDefault("test").len, + ", Direct Peers : ", gossipSub.subscribedDirectPeers.getOrDefault("test").len, + ", Fanout", gossipSub.fanout.getOrDefault("test").len, + ", Heartbeat : ", gossipSub.parameters.heartbeatInterval.milliseconds + + await sleepAsync(5.seconds) - for msg in 0 ..< 10:#client.param(int, "message_count"): - await sleepAsync(12.seconds) - if msg mod publisherCount == myId - 1: - #if myId == 1: + # Actual message publishing, one message published every 3 seconds + # First 1-2 messages take longer than expected time due to low cwnd. + # warmup_messages can set cwnd to a desired level. or alternatively, warmup messages can be set to 0 + let + warmup_messages = 2 + #shadow.yaml defines peers with changing latency/bandwith. In the current arrangement all the publishers + #will get different latency/bandwidth + pubStart = 4 + pubEnd = pubStart + publisherCount + warmup_messages + + + #we send warmup_messages for adjusting TCP cwnd + for i in pubStart..<(pubStart + warmup_messages): + await sleepAsync(2.seconds) + if i == myId: + #two warmup messages for cwnd raising + let + now = getTime() + nowInt = seconds(now.toUnix()) + nanoseconds(times.nanosecond(now)) + var nowBytes = @(toBytesLE(uint64(nowInt.nanoseconds))) & newSeq[byte](msg_size) + doAssert((await gossipSub.publish("test", nowBytes)) > 0) + #done sending warmup_messages , wait for short time + await sleepAsync(5.seconds) + + + #We now send publisher_count messages + for msg in (pubStart + warmup_messages) .. pubEnd:#client.param(int, "message_count"): + await sleepAsync(3.seconds) + if msg mod (pubEnd+1) == myId: let now = getTime() nowInt = seconds(now.toUnix()) + nanoseconds(times.nanosecond(now)) - #var nowBytes = @(toBytesLE(uint64(nowInt.nanoseconds))) & newSeq[byte](500_000 div chunks) - var nowBytes = @(toBytesLE(uint64(nowInt.nanoseconds))) & newSeq[byte](50) - #echo "sending ", uint64(nowInt.nanoseconds) + #[ + if chunks == 1: + var nowBytes = @(toBytesLE(uint64(nowInt.nanoseconds))) & newSeq[byte](50000) + else: + var nowBytes = @(toBytesLE(uint64(nowInt.nanoseconds))) & newSeq[byte](500_000 div chunks) + ]# + var nowBytes = @(toBytesLE(uint64(nowInt.nanoseconds))) & newSeq[byte](msg_size div chunks) for chunk in 0.. 0) - - #echo "BW: ", libp2p_protocols_bytes.value(labelValues=["/meshsub/1.1.0", "in"]) + libp2p_protocols_bytes.value(labelValues=["/meshsub/1.1.0", "out"]) - #echo "DUPS: ", libp2p_gossipsub_duplicate.value(), " / ", libp2p_gossipsub_received.value() - + echo "Done Publishing ", nowInt.nanoseconds + + #we need to export these counters from gossipsub.nim + echo "statcounters: dup_during_validation ", libp2p_gossipsub_duplicate_during_validation.value(), + "\tidontwant_saves ", libp2p_gossipsub_idontwant_saved_messages.value(), + "\tdup_received ", libp2p_gossipsub_duplicate.value(), + "\tUnique_msg_received ", libp2p_gossipsub_received.value(), + "\tStaggered_Saves ", libp2p_gossipsub_staggerDontWantSave.value(), + "\tDontWant_IN_Stagger ", libp2p_gossipsub_staggerDontWantSave2.value() waitFor(main()) diff --git a/shadow/run.sh b/shadow/run.sh index 66cc355..5e036cb 100755 --- a/shadow/run.sh +++ b/shadow/run.sh @@ -1,8 +1,66 @@ #!/bin/sh - set -e -nim c -d:chronicles_colors=None --threads:on -d:metrics -d:libp2p_network_protocols_metrics -d:release main -rm -rf shadow.data/ -shadow shadow.yaml -grep -rne 'milliseconds\|BW' shadow.data/ > latencies +if [ $# -ne 11 ]; then + echo "Usage: $0 + >" + + echo "The following sample command runs simulation 1 time, for a 1000 node network. Each published message size \ + is 15KB (no-fragmentation), peer bandwidth varies between 50-130 Mbps, Latency between 60-160ms, and \ + bandwidth,latency is roughly distributed in five different groups. \ + see the generated network_topology.gml and shadow.yaml for peers/edges details" + + echo "$0 1 1000 15000 1 10 50 130 60 160 5 0.0" + exit 1 +fi + +runs="$1" #number of simulation runs +nodes="$2" #number of nodes to simulate +msg_size="$3" #message size to use (in bytes) +num_frag="$4" #number of fragments per message (1 for no fragmentation) +num_publishers="$5" #number of publishers +min_bandwidth="$6" +max_bandwidth="$7" +min_latency="$8" +max_latency="$9" +steps="${10}" +pkt_loss="${11}" + +connect_to=5 #number of peers we connect with to form full message mesh + + +#topogen.py uses networkx module from python to generate gml and yaml files +PYTHON=$(which python3 || which python) + +if [ -z "$PYTHON" ]; then + echo "Error: Python, Networkx is required for topology files generation." + exit 1 +fi + +"$PYTHON" topogen.py $nodes $min_bandwidth $max_bandwidth $min_latency $max_latency $steps $pkt_loss $msg_size $num_frag $num_publishers + + + +rm -f shadowlog* latencies* stats* main && rm -rf shadow.data/ +#nim c -d:chronicles_colors=None --threads:on -d:metrics -d:libp2p_network_protocols_metrics -d:release main +go build . + +for i in $(seq $runs); do + echo "Running for turn "$i + shadow shadow.yaml > shadowlog$i && + grep -rne 'milliseconds\|BW' shadow.data/ > latencies$i + #grep -rne 'statcounters:' shadow.data/ > stats$i + #uncomment to to receive every nodes log in shadow data (only if runs == 1, or change data directory in yaml file) + #rm -rf shadow.data/ +done + +for i in $(seq $runs); do + echo "Summary for turn "$i + if [ "$msg_size" -lt 1000 ]; then + awk -f summary_latency.awk latencies$i #precise per hop coverage for short messages only + else + awk -f summary_latency_large.awk latencies$i #estimated coverage for large messages (TxTime adds to latency) + fi + awk -f summary_shadowlog.awk shadowlog$i + #awk -f summary_dontwant.awk stats$i +done diff --git a/shadow/shadow.yaml b/shadow/shadow.yaml deleted file mode 100644 index 116ff4d..0000000 --- a/shadow/shadow.yaml +++ /dev/null @@ -1,5033 +0,0 @@ -general: - bootstrap_end_time: 10s - heartbeat_interval: 12s - stop_time: 15m - progress: true - -experimental: - use_memory_manager: false - -network: - graph: - type: gml - inline: | - graph [ - node [ - id 0 - host_bandwidth_up "100 Mbit" - host_bandwidth_down "100 Mbit" - ] - edge [ - source 0 - target 0 - latency "100 ms" - packet_loss 0.0 - ] - ] - -hosts: - peer1: &client_host - network_node_id: 0 - processes: - - path: ./main - start_time: 5s - environment: {"PEERS": "10", "CONNECTTO": "5"} - peer2: *client_host - peer3: *client_host - peer4: *client_host - peer5: *client_host - peer6: *client_host - peer7: *client_host - peer8: *client_host - peer9: *client_host - peer10: *client_host -# peer11: *client_host -# peer12: *client_host -# peer13: *client_host -# peer14: *client_host -# peer15: *client_host -# peer16: *client_host -# peer17: *client_host -# peer18: *client_host -# peer19: *client_host -# peer20: *client_host -# peer21: *client_host -# peer22: *client_host -# peer23: *client_host -# peer24: *client_host -# peer25: *client_host -# peer26: *client_host -# peer27: *client_host -# peer28: *client_host -# peer29: *client_host -# peer30: *client_host -# peer31: *client_host -# peer32: *client_host -# peer33: *client_host -# peer34: *client_host -# peer35: *client_host -# peer36: *client_host -# peer37: *client_host -# peer38: *client_host -# peer39: *client_host -# peer40: *client_host -# peer41: *client_host -# peer42: *client_host -# peer43: *client_host -# peer44: *client_host -# peer45: *client_host -# peer46: *client_host -# peer47: *client_host -# peer48: *client_host -# peer49: *client_host -# peer50: *client_host -# peer51: *client_host -# peer52: *client_host -# peer53: *client_host -# peer54: *client_host -# peer55: *client_host -# peer56: *client_host -# peer57: *client_host -# peer58: *client_host -# peer59: *client_host -# peer60: *client_host -# peer61: *client_host -# peer62: *client_host -# peer63: *client_host -# peer64: *client_host -# peer65: *client_host -# peer66: *client_host -# peer67: *client_host -# peer68: *client_host -# peer69: *client_host -# peer70: *client_host -# peer71: *client_host -# peer72: *client_host -# peer73: *client_host -# peer74: *client_host -# peer75: *client_host -# peer76: *client_host -# peer77: *client_host -# peer78: *client_host -# peer79: *client_host -# peer80: *client_host -# peer81: *client_host -# peer82: *client_host -# peer83: *client_host -# peer84: *client_host -# peer85: *client_host -# peer86: *client_host -# peer87: *client_host -# peer88: *client_host -# peer89: *client_host -# peer90: *client_host -# peer91: *client_host -# peer92: *client_host -# peer93: *client_host -# peer94: *client_host -# peer95: *client_host -# peer96: *client_host -# peer97: *client_host -# peer98: *client_host -# peer99: *client_host -# peer100: *client_host -# peer101: *client_host -# peer102: *client_host -# peer103: *client_host -# peer104: *client_host -# peer105: *client_host -# peer106: *client_host -# peer107: *client_host -# peer108: *client_host -# peer109: *client_host -# peer110: *client_host -# peer111: *client_host -# peer112: *client_host -# peer113: *client_host -# peer114: *client_host -# peer115: *client_host -# peer116: *client_host -# peer117: *client_host -# peer118: *client_host -# peer119: *client_host -# peer120: *client_host -# peer121: *client_host -# peer122: *client_host -# peer123: *client_host -# peer124: *client_host -# peer125: *client_host -# peer126: *client_host -# peer127: *client_host -# peer128: *client_host -# peer129: *client_host -# peer130: *client_host -# peer131: *client_host -# peer132: *client_host -# peer133: *client_host -# peer134: *client_host -# peer135: *client_host -# peer136: *client_host -# peer137: *client_host -# peer138: *client_host -# peer139: *client_host -# peer140: *client_host -# peer141: *client_host -# peer142: *client_host -# peer143: *client_host -# peer144: *client_host -# peer145: *client_host -# peer146: *client_host -# peer147: *client_host -# peer148: *client_host -# peer149: *client_host -# peer150: *client_host -# peer151: *client_host -# peer152: *client_host -# peer153: *client_host -# peer154: *client_host -# peer155: *client_host -# peer156: *client_host -# peer157: *client_host -# peer158: *client_host -# peer159: *client_host -# peer160: *client_host -# peer161: *client_host -# peer162: *client_host -# peer163: *client_host -# peer164: *client_host -# peer165: *client_host -# peer166: *client_host -# peer167: *client_host -# peer168: *client_host -# peer169: *client_host -# peer170: *client_host -# peer171: *client_host -# peer172: *client_host -# peer173: *client_host -# peer174: *client_host -# peer175: *client_host -# peer176: *client_host -# peer177: *client_host -# peer178: *client_host -# peer179: *client_host -# peer180: *client_host -# peer181: *client_host -# peer182: *client_host -# peer183: *client_host -# peer184: *client_host -# peer185: *client_host -# peer186: *client_host -# peer187: *client_host -# peer188: *client_host -# peer189: *client_host -# peer190: *client_host -# peer191: *client_host -# peer192: *client_host -# peer193: *client_host -# peer194: *client_host -# peer195: *client_host -# peer196: *client_host -# peer197: *client_host -# peer198: *client_host -# peer199: *client_host -# peer200: *client_host -# peer201: *client_host -# peer202: *client_host -# peer203: *client_host -# peer204: *client_host -# peer205: *client_host -# peer206: *client_host -# peer207: *client_host -# peer208: *client_host -# peer209: *client_host -# peer210: *client_host -# peer211: *client_host -# peer212: *client_host -# peer213: *client_host -# peer214: *client_host -# peer215: *client_host -# peer216: *client_host -# peer217: *client_host -# peer218: *client_host -# peer219: *client_host -# peer220: *client_host -# peer221: *client_host -# peer222: *client_host -# peer223: *client_host -# peer224: *client_host -# peer225: *client_host -# peer226: *client_host -# peer227: *client_host -# peer228: *client_host -# peer229: *client_host -# peer230: *client_host -# peer231: *client_host -# peer232: *client_host -# peer233: *client_host -# peer234: *client_host -# peer235: *client_host -# peer236: *client_host -# peer237: *client_host -# peer238: *client_host -# peer239: *client_host -# peer240: *client_host -# peer241: *client_host -# peer242: *client_host -# peer243: *client_host -# peer244: *client_host -# peer245: *client_host -# peer246: *client_host -# peer247: *client_host -# peer248: *client_host -# peer249: *client_host -# peer250: *client_host -# peer251: *client_host -# peer252: *client_host -# peer253: *client_host -# peer254: *client_host -# peer255: *client_host -# peer256: *client_host -# peer257: *client_host -# peer258: *client_host -# peer259: *client_host -# peer260: *client_host -# peer261: *client_host -# peer262: *client_host -# peer263: *client_host -# peer264: *client_host -# peer265: *client_host -# peer266: *client_host -# peer267: *client_host -# peer268: *client_host -# peer269: *client_host -# peer270: *client_host -# peer271: *client_host -# peer272: *client_host -# peer273: *client_host -# peer274: *client_host -# peer275: *client_host -# peer276: *client_host -# peer277: *client_host -# peer278: *client_host -# peer279: *client_host -# peer280: *client_host -# peer281: *client_host -# peer282: *client_host -# peer283: *client_host -# peer284: *client_host -# peer285: *client_host -# peer286: *client_host -# peer287: *client_host -# peer288: *client_host -# peer289: *client_host -# peer290: *client_host -# peer291: *client_host -# peer292: *client_host -# peer293: *client_host -# peer294: *client_host -# peer295: *client_host -# peer296: *client_host -# peer297: *client_host -# peer298: *client_host -# peer299: *client_host -# peer300: *client_host -# peer301: *client_host -# peer302: *client_host -# peer303: *client_host -# peer304: *client_host -# peer305: *client_host -# peer306: *client_host -# peer307: *client_host -# peer308: *client_host -# peer309: *client_host -# peer310: *client_host -# peer311: *client_host -# peer312: *client_host -# peer313: *client_host -# peer314: *client_host -# peer315: *client_host -# peer316: *client_host -# peer317: *client_host -# peer318: *client_host -# peer319: *client_host -# peer320: *client_host -# peer321: *client_host -# peer322: *client_host -# peer323: *client_host -# peer324: *client_host -# peer325: *client_host -# peer326: *client_host -# peer327: *client_host -# peer328: *client_host -# peer329: *client_host -# peer330: *client_host -# peer331: *client_host -# peer332: *client_host -# peer333: *client_host -# peer334: *client_host -# peer335: *client_host -# peer336: *client_host -# peer337: *client_host -# peer338: *client_host -# peer339: *client_host -# peer340: *client_host -# peer341: *client_host -# peer342: *client_host -# peer343: *client_host -# peer344: *client_host -# peer345: *client_host -# peer346: *client_host -# peer347: *client_host -# peer348: *client_host -# peer349: *client_host -# peer350: *client_host -# peer351: *client_host -# peer352: *client_host -# peer353: *client_host -# peer354: *client_host -# peer355: *client_host -# peer356: *client_host -# peer357: *client_host -# peer358: *client_host -# peer359: *client_host -# peer360: *client_host -# peer361: *client_host -# peer362: *client_host -# peer363: *client_host -# peer364: *client_host -# peer365: *client_host -# peer366: *client_host -# peer367: *client_host -# peer368: *client_host -# peer369: *client_host -# peer370: *client_host -# peer371: *client_host -# peer372: *client_host -# peer373: *client_host -# peer374: *client_host -# peer375: *client_host -# peer376: *client_host -# peer377: *client_host -# peer378: *client_host -# peer379: *client_host -# peer380: *client_host -# peer381: *client_host -# peer382: *client_host -# peer383: *client_host -# peer384: *client_host -# peer385: *client_host -# peer386: *client_host -# peer387: *client_host -# peer388: *client_host -# peer389: *client_host -# peer390: *client_host -# peer391: *client_host -# peer392: *client_host -# peer393: *client_host -# peer394: *client_host -# peer395: *client_host -# peer396: *client_host -# peer397: *client_host -# peer398: *client_host -# peer399: *client_host -# peer400: *client_host -# peer401: *client_host -# peer402: *client_host -# peer403: *client_host -# peer404: *client_host -# peer405: *client_host -# peer406: *client_host -# peer407: *client_host -# peer408: *client_host -# peer409: *client_host -# peer410: *client_host -# peer411: *client_host -# peer412: *client_host -# peer413: *client_host -# peer414: *client_host -# peer415: *client_host -# peer416: *client_host -# peer417: *client_host -# peer418: *client_host -# peer419: *client_host -# peer420: *client_host -# peer421: *client_host -# peer422: *client_host -# peer423: *client_host -# peer424: *client_host -# peer425: *client_host -# peer426: *client_host -# peer427: *client_host -# peer428: *client_host -# peer429: *client_host -# peer430: *client_host -# peer431: *client_host -# peer432: *client_host -# peer433: *client_host -# peer434: *client_host -# peer435: *client_host -# peer436: *client_host -# peer437: *client_host -# peer438: *client_host -# peer439: *client_host -# peer440: *client_host -# peer441: *client_host -# peer442: *client_host -# peer443: *client_host -# peer444: *client_host -# peer445: *client_host -# peer446: *client_host -# peer447: *client_host -# peer448: *client_host -# peer449: *client_host -# peer450: *client_host -# peer451: *client_host -# peer452: *client_host -# peer453: *client_host -# peer454: *client_host -# peer455: *client_host -# peer456: *client_host -# peer457: *client_host -# peer458: *client_host -# peer459: *client_host -# peer460: *client_host -# peer461: *client_host -# peer462: *client_host -# peer463: *client_host -# peer464: *client_host -# peer465: *client_host -# peer466: *client_host -# peer467: *client_host -# peer468: *client_host -# peer469: *client_host -# peer470: *client_host -# peer471: *client_host -# peer472: *client_host -# peer473: *client_host -# peer474: *client_host -# peer475: *client_host -# peer476: *client_host -# peer477: *client_host -# peer478: *client_host -# peer479: *client_host -# peer480: *client_host -# peer481: *client_host -# peer482: *client_host -# peer483: *client_host -# peer484: *client_host -# peer485: *client_host -# peer486: *client_host -# peer487: *client_host -# peer488: *client_host -# peer489: *client_host -# peer490: *client_host -# peer491: *client_host -# peer492: *client_host -# peer493: *client_host -# peer494: *client_host -# peer495: *client_host -# peer496: *client_host -# peer497: *client_host -# peer498: *client_host -# peer499: *client_host -# peer500: *client_host -# peer501: *client_host -# peer502: *client_host -# peer503: *client_host -# peer504: *client_host -# peer505: *client_host -# peer506: *client_host -# peer507: *client_host -# peer508: *client_host -# peer509: *client_host -# peer510: *client_host -# peer511: *client_host -# peer512: *client_host -# peer513: *client_host -# peer514: *client_host -# peer515: *client_host -# peer516: *client_host -# peer517: *client_host -# peer518: *client_host -# peer519: *client_host -# peer520: *client_host -# peer521: *client_host -# peer522: *client_host -# peer523: *client_host -# peer524: *client_host -# peer525: *client_host -# peer526: *client_host -# peer527: *client_host -# peer528: *client_host -# peer529: *client_host -# peer530: *client_host -# peer531: *client_host -# peer532: *client_host -# peer533: *client_host -# peer534: *client_host -# peer535: *client_host -# peer536: *client_host -# peer537: *client_host -# peer538: *client_host -# peer539: *client_host -# peer540: *client_host -# peer541: *client_host -# peer542: *client_host -# peer543: *client_host -# peer544: *client_host -# peer545: *client_host -# peer546: *client_host -# peer547: *client_host -# peer548: *client_host -# peer549: *client_host -# peer550: *client_host -# peer551: *client_host -# peer552: *client_host -# peer553: *client_host -# peer554: *client_host -# peer555: *client_host -# peer556: *client_host -# peer557: *client_host -# peer558: *client_host -# peer559: *client_host -# peer560: *client_host -# peer561: *client_host -# peer562: *client_host -# peer563: *client_host -# peer564: *client_host -# peer565: *client_host -# peer566: *client_host -# peer567: *client_host -# peer568: *client_host -# peer569: *client_host -# peer570: *client_host -# peer571: *client_host -# peer572: *client_host -# peer573: *client_host -# peer574: *client_host -# peer575: *client_host -# peer576: *client_host -# peer577: *client_host -# peer578: *client_host -# peer579: *client_host -# peer580: *client_host -# peer581: *client_host -# peer582: *client_host -# peer583: *client_host -# peer584: *client_host -# peer585: *client_host -# peer586: *client_host -# peer587: *client_host -# peer588: *client_host -# peer589: *client_host -# peer590: *client_host -# peer591: *client_host -# peer592: *client_host -# peer593: *client_host -# peer594: *client_host -# peer595: *client_host -# peer596: *client_host -# peer597: *client_host -# peer598: *client_host -# peer599: *client_host -# peer600: *client_host -# peer601: *client_host -# peer602: *client_host -# peer603: *client_host -# peer604: *client_host -# peer605: *client_host -# peer606: *client_host -# peer607: *client_host -# peer608: *client_host -# peer609: *client_host -# peer610: *client_host -# peer611: *client_host -# peer612: *client_host -# peer613: *client_host -# peer614: *client_host -# peer615: *client_host -# peer616: *client_host -# peer617: *client_host -# peer618: *client_host -# peer619: *client_host -# peer620: *client_host -# peer621: *client_host -# peer622: *client_host -# peer623: *client_host -# peer624: *client_host -# peer625: *client_host -# peer626: *client_host -# peer627: *client_host -# peer628: *client_host -# peer629: *client_host -# peer630: *client_host -# peer631: *client_host -# peer632: *client_host -# peer633: *client_host -# peer634: *client_host -# peer635: *client_host -# peer636: *client_host -# peer637: *client_host -# peer638: *client_host -# peer639: *client_host -# peer640: *client_host -# peer641: *client_host -# peer642: *client_host -# peer643: *client_host -# peer644: *client_host -# peer645: *client_host -# peer646: *client_host -# peer647: *client_host -# peer648: *client_host -# peer649: *client_host -# peer650: *client_host -# peer651: *client_host -# peer652: *client_host -# peer653: *client_host -# peer654: *client_host -# peer655: *client_host -# peer656: *client_host -# peer657: *client_host -# peer658: *client_host -# peer659: *client_host -# peer660: *client_host -# peer661: *client_host -# peer662: *client_host -# peer663: *client_host -# peer664: *client_host -# peer665: *client_host -# peer666: *client_host -# peer667: *client_host -# peer668: *client_host -# peer669: *client_host -# peer670: *client_host -# peer671: *client_host -# peer672: *client_host -# peer673: *client_host -# peer674: *client_host -# peer675: *client_host -# peer676: *client_host -# peer677: *client_host -# peer678: *client_host -# peer679: *client_host -# peer680: *client_host -# peer681: *client_host -# peer682: *client_host -# peer683: *client_host -# peer684: *client_host -# peer685: *client_host -# peer686: *client_host -# peer687: *client_host -# peer688: *client_host -# peer689: *client_host -# peer690: *client_host -# peer691: *client_host -# peer692: *client_host -# peer693: *client_host -# peer694: *client_host -# peer695: *client_host -# peer696: *client_host -# peer697: *client_host -# peer698: *client_host -# peer699: *client_host -# peer700: *client_host -# peer701: *client_host -# peer702: *client_host -# peer703: *client_host -# peer704: *client_host -# peer705: *client_host -# peer706: *client_host -# peer707: *client_host -# peer708: *client_host -# peer709: *client_host -# peer710: *client_host -# peer711: *client_host -# peer712: *client_host -# peer713: *client_host -# peer714: *client_host -# peer715: *client_host -# peer716: *client_host -# peer717: *client_host -# peer718: *client_host -# peer719: *client_host -# peer720: *client_host -# peer721: *client_host -# peer722: *client_host -# peer723: *client_host -# peer724: *client_host -# peer725: *client_host -# peer726: *client_host -# peer727: *client_host -# peer728: *client_host -# peer729: *client_host -# peer730: *client_host -# peer731: *client_host -# peer732: *client_host -# peer733: *client_host -# peer734: *client_host -# peer735: *client_host -# peer736: *client_host -# peer737: *client_host -# peer738: *client_host -# peer739: *client_host -# peer740: *client_host -# peer741: *client_host -# peer742: *client_host -# peer743: *client_host -# peer744: *client_host -# peer745: *client_host -# peer746: *client_host -# peer747: *client_host -# peer748: *client_host -# peer749: *client_host -# peer750: *client_host -# peer751: *client_host -# peer752: *client_host -# peer753: *client_host -# peer754: *client_host -# peer755: *client_host -# peer756: *client_host -# peer757: *client_host -# peer758: *client_host -# peer759: *client_host -# peer760: *client_host -# peer761: *client_host -# peer762: *client_host -# peer763: *client_host -# peer764: *client_host -# peer765: *client_host -# peer766: *client_host -# peer767: *client_host -# peer768: *client_host -# peer769: *client_host -# peer770: *client_host -# peer771: *client_host -# peer772: *client_host -# peer773: *client_host -# peer774: *client_host -# peer775: *client_host -# peer776: *client_host -# peer777: *client_host -# peer778: *client_host -# peer779: *client_host -# peer780: *client_host -# peer781: *client_host -# peer782: *client_host -# peer783: *client_host -# peer784: *client_host -# peer785: *client_host -# peer786: *client_host -# peer787: *client_host -# peer788: *client_host -# peer789: *client_host -# peer790: *client_host -# peer791: *client_host -# peer792: *client_host -# peer793: *client_host -# peer794: *client_host -# peer795: *client_host -# peer796: *client_host -# peer797: *client_host -# peer798: *client_host -# peer799: *client_host -# peer800: *client_host -# peer801: *client_host -# peer802: *client_host -# peer803: *client_host -# peer804: *client_host -# peer805: *client_host -# peer806: *client_host -# peer807: *client_host -# peer808: *client_host -# peer809: *client_host -# peer810: *client_host -# peer811: *client_host -# peer812: *client_host -# peer813: *client_host -# peer814: *client_host -# peer815: *client_host -# peer816: *client_host -# peer817: *client_host -# peer818: *client_host -# peer819: *client_host -# peer820: *client_host -# peer821: *client_host -# peer822: *client_host -# peer823: *client_host -# peer824: *client_host -# peer825: *client_host -# peer826: *client_host -# peer827: *client_host -# peer828: *client_host -# peer829: *client_host -# peer830: *client_host -# peer831: *client_host -# peer832: *client_host -# peer833: *client_host -# peer834: *client_host -# peer835: *client_host -# peer836: *client_host -# peer837: *client_host -# peer838: *client_host -# peer839: *client_host -# peer840: *client_host -# peer841: *client_host -# peer842: *client_host -# peer843: *client_host -# peer844: *client_host -# peer845: *client_host -# peer846: *client_host -# peer847: *client_host -# peer848: *client_host -# peer849: *client_host -# peer850: *client_host -# peer851: *client_host -# peer852: *client_host -# peer853: *client_host -# peer854: *client_host -# peer855: *client_host -# peer856: *client_host -# peer857: *client_host -# peer858: *client_host -# peer859: *client_host -# peer860: *client_host -# peer861: *client_host -# peer862: *client_host -# peer863: *client_host -# peer864: *client_host -# peer865: *client_host -# peer866: *client_host -# peer867: *client_host -# peer868: *client_host -# peer869: *client_host -# peer870: *client_host -# peer871: *client_host -# peer872: *client_host -# peer873: *client_host -# peer874: *client_host -# peer875: *client_host -# peer876: *client_host -# peer877: *client_host -# peer878: *client_host -# peer879: *client_host -# peer880: *client_host -# peer881: *client_host -# peer882: *client_host -# peer883: *client_host -# peer884: *client_host -# peer885: *client_host -# peer886: *client_host -# peer887: *client_host -# peer888: *client_host -# peer889: *client_host -# peer890: *client_host -# peer891: *client_host -# peer892: *client_host -# peer893: *client_host -# peer894: *client_host -# peer895: *client_host -# peer896: *client_host -# peer897: *client_host -# peer898: *client_host -# peer899: *client_host -# peer900: *client_host -# peer901: *client_host -# peer902: *client_host -# peer903: *client_host -# peer904: *client_host -# peer905: *client_host -# peer906: *client_host -# peer907: *client_host -# peer908: *client_host -# peer909: *client_host -# peer910: *client_host -# peer911: *client_host -# peer912: *client_host -# peer913: *client_host -# peer914: *client_host -# peer915: *client_host -# peer916: *client_host -# peer917: *client_host -# peer918: *client_host -# peer919: *client_host -# peer920: *client_host -# peer921: *client_host -# peer922: *client_host -# peer923: *client_host -# peer924: *client_host -# peer925: *client_host -# peer926: *client_host -# peer927: *client_host -# peer928: *client_host -# peer929: *client_host -# peer930: *client_host -# peer931: *client_host -# peer932: *client_host -# peer933: *client_host -# peer934: *client_host -# peer935: *client_host -# peer936: *client_host -# peer937: *client_host -# peer938: *client_host -# peer939: *client_host -# peer940: *client_host -# peer941: *client_host -# peer942: *client_host -# peer943: *client_host -# peer944: *client_host -# peer945: *client_host -# peer946: *client_host -# peer947: *client_host -# peer948: *client_host -# peer949: *client_host -# peer950: *client_host -# peer951: *client_host -# peer952: *client_host -# peer953: *client_host -# peer954: *client_host -# peer955: *client_host -# peer956: *client_host -# peer957: *client_host -# peer958: *client_host -# peer959: *client_host -# peer960: *client_host -# peer961: *client_host -# peer962: *client_host -# peer963: *client_host -# peer964: *client_host -# peer965: *client_host -# peer966: *client_host -# peer967: *client_host -# peer968: *client_host -# peer969: *client_host -# peer970: *client_host -# peer971: *client_host -# peer972: *client_host -# peer973: *client_host -# peer974: *client_host -# peer975: *client_host -# peer976: *client_host -# peer977: *client_host -# peer978: *client_host -# peer979: *client_host -# peer980: *client_host -# peer981: *client_host -# peer982: *client_host -# peer983: *client_host -# peer984: *client_host -# peer985: *client_host -# peer986: *client_host -# peer987: *client_host -# peer988: *client_host -# peer989: *client_host -# peer990: *client_host -# peer991: *client_host -# peer992: *client_host -# peer993: *client_host -# peer994: *client_host -# peer995: *client_host -# peer996: *client_host -# peer997: *client_host -# peer998: *client_host -# peer999: *client_host -# peer1000: *client_host -# peer1001: *client_host -# peer1002: *client_host -# peer1003: *client_host -# peer1004: *client_host -# peer1005: *client_host -# peer1006: *client_host -# peer1007: *client_host -# peer1008: *client_host -# peer1009: *client_host -# peer1010: *client_host -# peer1011: *client_host -# peer1012: *client_host -# peer1013: *client_host -# peer1014: *client_host -# peer1015: *client_host -# peer1016: *client_host -# peer1017: *client_host -# peer1018: *client_host -# peer1019: *client_host -# peer1020: *client_host -# peer1021: *client_host -# peer1022: *client_host -# peer1023: *client_host -# peer1024: *client_host -# peer1025: *client_host -# peer1026: *client_host -# peer1027: *client_host -# peer1028: *client_host -# peer1029: *client_host -# peer1030: *client_host -# peer1031: *client_host -# peer1032: *client_host -# peer1033: *client_host -# peer1034: *client_host -# peer1035: *client_host -# peer1036: *client_host -# peer1037: *client_host -# peer1038: *client_host -# peer1039: *client_host -# peer1040: *client_host -# peer1041: *client_host -# peer1042: *client_host -# peer1043: *client_host -# peer1044: *client_host -# peer1045: *client_host -# peer1046: *client_host -# peer1047: *client_host -# peer1048: *client_host -# peer1049: *client_host -# peer1050: *client_host -# peer1051: *client_host -# peer1052: *client_host -# peer1053: *client_host -# peer1054: *client_host -# peer1055: *client_host -# peer1056: *client_host -# peer1057: *client_host -# peer1058: *client_host -# peer1059: *client_host -# peer1060: *client_host -# peer1061: *client_host -# peer1062: *client_host -# peer1063: *client_host -# peer1064: *client_host -# peer1065: *client_host -# peer1066: *client_host -# peer1067: *client_host -# peer1068: *client_host -# peer1069: *client_host -# peer1070: *client_host -# peer1071: *client_host -# peer1072: *client_host -# peer1073: *client_host -# peer1074: *client_host -# peer1075: *client_host -# peer1076: *client_host -# peer1077: *client_host -# peer1078: *client_host -# peer1079: *client_host -# peer1080: *client_host -# peer1081: *client_host -# peer1082: *client_host -# peer1083: *client_host -# peer1084: *client_host -# peer1085: *client_host -# peer1086: *client_host -# peer1087: *client_host -# peer1088: *client_host -# peer1089: *client_host -# peer1090: *client_host -# peer1091: *client_host -# peer1092: *client_host -# peer1093: *client_host -# peer1094: *client_host -# peer1095: *client_host -# peer1096: *client_host -# peer1097: *client_host -# peer1098: *client_host -# peer1099: *client_host -# peer1100: *client_host -# peer1101: *client_host -# peer1102: *client_host -# peer1103: *client_host -# peer1104: *client_host -# peer1105: *client_host -# peer1106: *client_host -# peer1107: *client_host -# peer1108: *client_host -# peer1109: *client_host -# peer1110: *client_host -# peer1111: *client_host -# peer1112: *client_host -# peer1113: *client_host -# peer1114: *client_host -# peer1115: *client_host -# peer1116: *client_host -# peer1117: *client_host -# peer1118: *client_host -# peer1119: *client_host -# peer1120: *client_host -# peer1121: *client_host -# peer1122: *client_host -# peer1123: *client_host -# peer1124: *client_host -# peer1125: *client_host -# peer1126: *client_host -# peer1127: *client_host -# peer1128: *client_host -# peer1129: *client_host -# peer1130: *client_host -# peer1131: *client_host -# peer1132: *client_host -# peer1133: *client_host -# peer1134: *client_host -# peer1135: *client_host -# peer1136: *client_host -# peer1137: *client_host -# peer1138: *client_host -# peer1139: *client_host -# peer1140: *client_host -# peer1141: *client_host -# peer1142: *client_host -# peer1143: *client_host -# peer1144: *client_host -# peer1145: *client_host -# peer1146: *client_host -# peer1147: *client_host -# peer1148: *client_host -# peer1149: *client_host -# peer1150: *client_host -# peer1151: *client_host -# peer1152: *client_host -# peer1153: *client_host -# peer1154: *client_host -# peer1155: *client_host -# peer1156: *client_host -# peer1157: *client_host -# peer1158: *client_host -# peer1159: *client_host -# peer1160: *client_host -# peer1161: *client_host -# peer1162: *client_host -# peer1163: *client_host -# peer1164: *client_host -# peer1165: *client_host -# peer1166: *client_host -# peer1167: *client_host -# peer1168: *client_host -# peer1169: *client_host -# peer1170: *client_host -# peer1171: *client_host -# peer1172: *client_host -# peer1173: *client_host -# peer1174: *client_host -# peer1175: *client_host -# peer1176: *client_host -# peer1177: *client_host -# peer1178: *client_host -# peer1179: *client_host -# peer1180: *client_host -# peer1181: *client_host -# peer1182: *client_host -# peer1183: *client_host -# peer1184: *client_host -# peer1185: *client_host -# peer1186: *client_host -# peer1187: *client_host -# peer1188: *client_host -# peer1189: *client_host -# peer1190: *client_host -# peer1191: *client_host -# peer1192: *client_host -# peer1193: *client_host -# peer1194: *client_host -# peer1195: *client_host -# peer1196: *client_host -# peer1197: *client_host -# peer1198: *client_host -# peer1199: *client_host -# peer1200: *client_host -# peer1201: *client_host -# peer1202: *client_host -# peer1203: *client_host -# peer1204: *client_host -# peer1205: *client_host -# peer1206: *client_host -# peer1207: *client_host -# peer1208: *client_host -# peer1209: *client_host -# peer1210: *client_host -# peer1211: *client_host -# peer1212: *client_host -# peer1213: *client_host -# peer1214: *client_host -# peer1215: *client_host -# peer1216: *client_host -# peer1217: *client_host -# peer1218: *client_host -# peer1219: *client_host -# peer1220: *client_host -# peer1221: *client_host -# peer1222: *client_host -# peer1223: *client_host -# peer1224: *client_host -# peer1225: *client_host -# peer1226: *client_host -# peer1227: *client_host -# peer1228: *client_host -# peer1229: *client_host -# peer1230: *client_host -# peer1231: *client_host -# peer1232: *client_host -# peer1233: *client_host -# peer1234: *client_host -# peer1235: *client_host -# peer1236: *client_host -# peer1237: *client_host -# peer1238: *client_host -# peer1239: *client_host -# peer1240: *client_host -# peer1241: *client_host -# peer1242: *client_host -# peer1243: *client_host -# peer1244: *client_host -# peer1245: *client_host -# peer1246: *client_host -# peer1247: *client_host -# peer1248: *client_host -# peer1249: *client_host -# peer1250: *client_host -# peer1251: *client_host -# peer1252: *client_host -# peer1253: *client_host -# peer1254: *client_host -# peer1255: *client_host -# peer1256: *client_host -# peer1257: *client_host -# peer1258: *client_host -# peer1259: *client_host -# peer1260: *client_host -# peer1261: *client_host -# peer1262: *client_host -# peer1263: *client_host -# peer1264: *client_host -# peer1265: *client_host -# peer1266: *client_host -# peer1267: *client_host -# peer1268: *client_host -# peer1269: *client_host -# peer1270: *client_host -# peer1271: *client_host -# peer1272: *client_host -# peer1273: *client_host -# peer1274: *client_host -# peer1275: *client_host -# peer1276: *client_host -# peer1277: *client_host -# peer1278: *client_host -# peer1279: *client_host -# peer1280: *client_host -# peer1281: *client_host -# peer1282: *client_host -# peer1283: *client_host -# peer1284: *client_host -# peer1285: *client_host -# peer1286: *client_host -# peer1287: *client_host -# peer1288: *client_host -# peer1289: *client_host -# peer1290: *client_host -# peer1291: *client_host -# peer1292: *client_host -# peer1293: *client_host -# peer1294: *client_host -# peer1295: *client_host -# peer1296: *client_host -# peer1297: *client_host -# peer1298: *client_host -# peer1299: *client_host -# peer1300: *client_host -# peer1301: *client_host -# peer1302: *client_host -# peer1303: *client_host -# peer1304: *client_host -# peer1305: *client_host -# peer1306: *client_host -# peer1307: *client_host -# peer1308: *client_host -# peer1309: *client_host -# peer1310: *client_host -# peer1311: *client_host -# peer1312: *client_host -# peer1313: *client_host -# peer1314: *client_host -# peer1315: *client_host -# peer1316: *client_host -# peer1317: *client_host -# peer1318: *client_host -# peer1319: *client_host -# peer1320: *client_host -# peer1321: *client_host -# peer1322: *client_host -# peer1323: *client_host -# peer1324: *client_host -# peer1325: *client_host -# peer1326: *client_host -# peer1327: *client_host -# peer1328: *client_host -# peer1329: *client_host -# peer1330: *client_host -# peer1331: *client_host -# peer1332: *client_host -# peer1333: *client_host -# peer1334: *client_host -# peer1335: *client_host -# peer1336: *client_host -# peer1337: *client_host -# peer1338: *client_host -# peer1339: *client_host -# peer1340: *client_host -# peer1341: *client_host -# peer1342: *client_host -# peer1343: *client_host -# peer1344: *client_host -# peer1345: *client_host -# peer1346: *client_host -# peer1347: *client_host -# peer1348: *client_host -# peer1349: *client_host -# peer1350: *client_host -# peer1351: *client_host -# peer1352: *client_host -# peer1353: *client_host -# peer1354: *client_host -# peer1355: *client_host -# peer1356: *client_host -# peer1357: *client_host -# peer1358: *client_host -# peer1359: *client_host -# peer1360: *client_host -# peer1361: *client_host -# peer1362: *client_host -# peer1363: *client_host -# peer1364: *client_host -# peer1365: *client_host -# peer1366: *client_host -# peer1367: *client_host -# peer1368: *client_host -# peer1369: *client_host -# peer1370: *client_host -# peer1371: *client_host -# peer1372: *client_host -# peer1373: *client_host -# peer1374: *client_host -# peer1375: *client_host -# peer1376: *client_host -# peer1377: *client_host -# peer1378: *client_host -# peer1379: *client_host -# peer1380: *client_host -# peer1381: *client_host -# peer1382: *client_host -# peer1383: *client_host -# peer1384: *client_host -# peer1385: *client_host -# peer1386: *client_host -# peer1387: *client_host -# peer1388: *client_host -# peer1389: *client_host -# peer1390: *client_host -# peer1391: *client_host -# peer1392: *client_host -# peer1393: *client_host -# peer1394: *client_host -# peer1395: *client_host -# peer1396: *client_host -# peer1397: *client_host -# peer1398: *client_host -# peer1399: *client_host -# peer1400: *client_host -# peer1401: *client_host -# peer1402: *client_host -# peer1403: *client_host -# peer1404: *client_host -# peer1405: *client_host -# peer1406: *client_host -# peer1407: *client_host -# peer1408: *client_host -# peer1409: *client_host -# peer1410: *client_host -# peer1411: *client_host -# peer1412: *client_host -# peer1413: *client_host -# peer1414: *client_host -# peer1415: *client_host -# peer1416: *client_host -# peer1417: *client_host -# peer1418: *client_host -# peer1419: *client_host -# peer1420: *client_host -# peer1421: *client_host -# peer1422: *client_host -# peer1423: *client_host -# peer1424: *client_host -# peer1425: *client_host -# peer1426: *client_host -# peer1427: *client_host -# peer1428: *client_host -# peer1429: *client_host -# peer1430: *client_host -# peer1431: *client_host -# peer1432: *client_host -# peer1433: *client_host -# peer1434: *client_host -# peer1435: *client_host -# peer1436: *client_host -# peer1437: *client_host -# peer1438: *client_host -# peer1439: *client_host -# peer1440: *client_host -# peer1441: *client_host -# peer1442: *client_host -# peer1443: *client_host -# peer1444: *client_host -# peer1445: *client_host -# peer1446: *client_host -# peer1447: *client_host -# peer1448: *client_host -# peer1449: *client_host -# peer1450: *client_host -# peer1451: *client_host -# peer1452: *client_host -# peer1453: *client_host -# peer1454: *client_host -# peer1455: *client_host -# peer1456: *client_host -# peer1457: *client_host -# peer1458: *client_host -# peer1459: *client_host -# peer1460: *client_host -# peer1461: *client_host -# peer1462: *client_host -# peer1463: *client_host -# peer1464: *client_host -# peer1465: *client_host -# peer1466: *client_host -# peer1467: *client_host -# peer1468: *client_host -# peer1469: *client_host -# peer1470: *client_host -# peer1471: *client_host -# peer1472: *client_host -# peer1473: *client_host -# peer1474: *client_host -# peer1475: *client_host -# peer1476: *client_host -# peer1477: *client_host -# peer1478: *client_host -# peer1479: *client_host -# peer1480: *client_host -# peer1481: *client_host -# peer1482: *client_host -# peer1483: *client_host -# peer1484: *client_host -# peer1485: *client_host -# peer1486: *client_host -# peer1487: *client_host -# peer1488: *client_host -# peer1489: *client_host -# peer1490: *client_host -# peer1491: *client_host -# peer1492: *client_host -# peer1493: *client_host -# peer1494: *client_host -# peer1495: *client_host -# peer1496: *client_host -# peer1497: *client_host -# peer1498: *client_host -# peer1499: *client_host -# peer1500: *client_host -# peer1501: *client_host -# peer1502: *client_host -# peer1503: *client_host -# peer1504: *client_host -# peer1505: *client_host -# peer1506: *client_host -# peer1507: *client_host -# peer1508: *client_host -# peer1509: *client_host -# peer1510: *client_host -# peer1511: *client_host -# peer1512: *client_host -# peer1513: *client_host -# peer1514: *client_host -# peer1515: *client_host -# peer1516: *client_host -# peer1517: *client_host -# peer1518: *client_host -# peer1519: *client_host -# peer1520: *client_host -# peer1521: *client_host -# peer1522: *client_host -# peer1523: *client_host -# peer1524: *client_host -# peer1525: *client_host -# peer1526: *client_host -# peer1527: *client_host -# peer1528: *client_host -# peer1529: *client_host -# peer1530: *client_host -# peer1531: *client_host -# peer1532: *client_host -# peer1533: *client_host -# peer1534: *client_host -# peer1535: *client_host -# peer1536: *client_host -# peer1537: *client_host -# peer1538: *client_host -# peer1539: *client_host -# peer1540: *client_host -# peer1541: *client_host -# peer1542: *client_host -# peer1543: *client_host -# peer1544: *client_host -# peer1545: *client_host -# peer1546: *client_host -# peer1547: *client_host -# peer1548: *client_host -# peer1549: *client_host -# peer1550: *client_host -# peer1551: *client_host -# peer1552: *client_host -# peer1553: *client_host -# peer1554: *client_host -# peer1555: *client_host -# peer1556: *client_host -# peer1557: *client_host -# peer1558: *client_host -# peer1559: *client_host -# peer1560: *client_host -# peer1561: *client_host -# peer1562: *client_host -# peer1563: *client_host -# peer1564: *client_host -# peer1565: *client_host -# peer1566: *client_host -# peer1567: *client_host -# peer1568: *client_host -# peer1569: *client_host -# peer1570: *client_host -# peer1571: *client_host -# peer1572: *client_host -# peer1573: *client_host -# peer1574: *client_host -# peer1575: *client_host -# peer1576: *client_host -# peer1577: *client_host -# peer1578: *client_host -# peer1579: *client_host -# peer1580: *client_host -# peer1581: *client_host -# peer1582: *client_host -# peer1583: *client_host -# peer1584: *client_host -# peer1585: *client_host -# peer1586: *client_host -# peer1587: *client_host -# peer1588: *client_host -# peer1589: *client_host -# peer1590: *client_host -# peer1591: *client_host -# peer1592: *client_host -# peer1593: *client_host -# peer1594: *client_host -# peer1595: *client_host -# peer1596: *client_host -# peer1597: *client_host -# peer1598: *client_host -# peer1599: *client_host -# peer1600: *client_host -# peer1601: *client_host -# peer1602: *client_host -# peer1603: *client_host -# peer1604: *client_host -# peer1605: *client_host -# peer1606: *client_host -# peer1607: *client_host -# peer1608: *client_host -# peer1609: *client_host -# peer1610: *client_host -# peer1611: *client_host -# peer1612: *client_host -# peer1613: *client_host -# peer1614: *client_host -# peer1615: *client_host -# peer1616: *client_host -# peer1617: *client_host -# peer1618: *client_host -# peer1619: *client_host -# peer1620: *client_host -# peer1621: *client_host -# peer1622: *client_host -# peer1623: *client_host -# peer1624: *client_host -# peer1625: *client_host -# peer1626: *client_host -# peer1627: *client_host -# peer1628: *client_host -# peer1629: *client_host -# peer1630: *client_host -# peer1631: *client_host -# peer1632: *client_host -# peer1633: *client_host -# peer1634: *client_host -# peer1635: *client_host -# peer1636: *client_host -# peer1637: *client_host -# peer1638: *client_host -# peer1639: *client_host -# peer1640: *client_host -# peer1641: *client_host -# peer1642: *client_host -# peer1643: *client_host -# peer1644: *client_host -# peer1645: *client_host -# peer1646: *client_host -# peer1647: *client_host -# peer1648: *client_host -# peer1649: *client_host -# peer1650: *client_host -# peer1651: *client_host -# peer1652: *client_host -# peer1653: *client_host -# peer1654: *client_host -# peer1655: *client_host -# peer1656: *client_host -# peer1657: *client_host -# peer1658: *client_host -# peer1659: *client_host -# peer1660: *client_host -# peer1661: *client_host -# peer1662: *client_host -# peer1663: *client_host -# peer1664: *client_host -# peer1665: *client_host -# peer1666: *client_host -# peer1667: *client_host -# peer1668: *client_host -# peer1669: *client_host -# peer1670: *client_host -# peer1671: *client_host -# peer1672: *client_host -# peer1673: *client_host -# peer1674: *client_host -# peer1675: *client_host -# peer1676: *client_host -# peer1677: *client_host -# peer1678: *client_host -# peer1679: *client_host -# peer1680: *client_host -# peer1681: *client_host -# peer1682: *client_host -# peer1683: *client_host -# peer1684: *client_host -# peer1685: *client_host -# peer1686: *client_host -# peer1687: *client_host -# peer1688: *client_host -# peer1689: *client_host -# peer1690: *client_host -# peer1691: *client_host -# peer1692: *client_host -# peer1693: *client_host -# peer1694: *client_host -# peer1695: *client_host -# peer1696: *client_host -# peer1697: *client_host -# peer1698: *client_host -# peer1699: *client_host -# peer1700: *client_host -# peer1701: *client_host -# peer1702: *client_host -# peer1703: *client_host -# peer1704: *client_host -# peer1705: *client_host -# peer1706: *client_host -# peer1707: *client_host -# peer1708: *client_host -# peer1709: *client_host -# peer1710: *client_host -# peer1711: *client_host -# peer1712: *client_host -# peer1713: *client_host -# peer1714: *client_host -# peer1715: *client_host -# peer1716: *client_host -# peer1717: *client_host -# peer1718: *client_host -# peer1719: *client_host -# peer1720: *client_host -# peer1721: *client_host -# peer1722: *client_host -# peer1723: *client_host -# peer1724: *client_host -# peer1725: *client_host -# peer1726: *client_host -# peer1727: *client_host -# peer1728: *client_host -# peer1729: *client_host -# peer1730: *client_host -# peer1731: *client_host -# peer1732: *client_host -# peer1733: *client_host -# peer1734: *client_host -# peer1735: *client_host -# peer1736: *client_host -# peer1737: *client_host -# peer1738: *client_host -# peer1739: *client_host -# peer1740: *client_host -# peer1741: *client_host -# peer1742: *client_host -# peer1743: *client_host -# peer1744: *client_host -# peer1745: *client_host -# peer1746: *client_host -# peer1747: *client_host -# peer1748: *client_host -# peer1749: *client_host -# peer1750: *client_host -# peer1751: *client_host -# peer1752: *client_host -# peer1753: *client_host -# peer1754: *client_host -# peer1755: *client_host -# peer1756: *client_host -# peer1757: *client_host -# peer1758: *client_host -# peer1759: *client_host -# peer1760: *client_host -# peer1761: *client_host -# peer1762: *client_host -# peer1763: *client_host -# peer1764: *client_host -# peer1765: *client_host -# peer1766: *client_host -# peer1767: *client_host -# peer1768: *client_host -# peer1769: *client_host -# peer1770: *client_host -# peer1771: *client_host -# peer1772: *client_host -# peer1773: *client_host -# peer1774: *client_host -# peer1775: *client_host -# peer1776: *client_host -# peer1777: *client_host -# peer1778: *client_host -# peer1779: *client_host -# peer1780: *client_host -# peer1781: *client_host -# peer1782: *client_host -# peer1783: *client_host -# peer1784: *client_host -# peer1785: *client_host -# peer1786: *client_host -# peer1787: *client_host -# peer1788: *client_host -# peer1789: *client_host -# peer1790: *client_host -# peer1791: *client_host -# peer1792: *client_host -# peer1793: *client_host -# peer1794: *client_host -# peer1795: *client_host -# peer1796: *client_host -# peer1797: *client_host -# peer1798: *client_host -# peer1799: *client_host -# peer1800: *client_host -# peer1801: *client_host -# peer1802: *client_host -# peer1803: *client_host -# peer1804: *client_host -# peer1805: *client_host -# peer1806: *client_host -# peer1807: *client_host -# peer1808: *client_host -# peer1809: *client_host -# peer1810: *client_host -# peer1811: *client_host -# peer1812: *client_host -# peer1813: *client_host -# peer1814: *client_host -# peer1815: *client_host -# peer1816: *client_host -# peer1817: *client_host -# peer1818: *client_host -# peer1819: *client_host -# peer1820: *client_host -# peer1821: *client_host -# peer1822: *client_host -# peer1823: *client_host -# peer1824: *client_host -# peer1825: *client_host -# peer1826: *client_host -# peer1827: *client_host -# peer1828: *client_host -# peer1829: *client_host -# peer1830: *client_host -# peer1831: *client_host -# peer1832: *client_host -# peer1833: *client_host -# peer1834: *client_host -# peer1835: *client_host -# peer1836: *client_host -# peer1837: *client_host -# peer1838: *client_host -# peer1839: *client_host -# peer1840: *client_host -# peer1841: *client_host -# peer1842: *client_host -# peer1843: *client_host -# peer1844: *client_host -# peer1845: *client_host -# peer1846: *client_host -# peer1847: *client_host -# peer1848: *client_host -# peer1849: *client_host -# peer1850: *client_host -# peer1851: *client_host -# peer1852: *client_host -# peer1853: *client_host -# peer1854: *client_host -# peer1855: *client_host -# peer1856: *client_host -# peer1857: *client_host -# peer1858: *client_host -# peer1859: *client_host -# peer1860: *client_host -# peer1861: *client_host -# peer1862: *client_host -# peer1863: *client_host -# peer1864: *client_host -# peer1865: *client_host -# peer1866: *client_host -# peer1867: *client_host -# peer1868: *client_host -# peer1869: *client_host -# peer1870: *client_host -# peer1871: *client_host -# peer1872: *client_host -# peer1873: *client_host -# peer1874: *client_host -# peer1875: *client_host -# peer1876: *client_host -# peer1877: *client_host -# peer1878: *client_host -# peer1879: *client_host -# peer1880: *client_host -# peer1881: *client_host -# peer1882: *client_host -# peer1883: *client_host -# peer1884: *client_host -# peer1885: *client_host -# peer1886: *client_host -# peer1887: *client_host -# peer1888: *client_host -# peer1889: *client_host -# peer1890: *client_host -# peer1891: *client_host -# peer1892: *client_host -# peer1893: *client_host -# peer1894: *client_host -# peer1895: *client_host -# peer1896: *client_host -# peer1897: *client_host -# peer1898: *client_host -# peer1899: *client_host -# peer1900: *client_host -# peer1901: *client_host -# peer1902: *client_host -# peer1903: *client_host -# peer1904: *client_host -# peer1905: *client_host -# peer1906: *client_host -# peer1907: *client_host -# peer1908: *client_host -# peer1909: *client_host -# peer1910: *client_host -# peer1911: *client_host -# peer1912: *client_host -# peer1913: *client_host -# peer1914: *client_host -# peer1915: *client_host -# peer1916: *client_host -# peer1917: *client_host -# peer1918: *client_host -# peer1919: *client_host -# peer1920: *client_host -# peer1921: *client_host -# peer1922: *client_host -# peer1923: *client_host -# peer1924: *client_host -# peer1925: *client_host -# peer1926: *client_host -# peer1927: *client_host -# peer1928: *client_host -# peer1929: *client_host -# peer1930: *client_host -# peer1931: *client_host -# peer1932: *client_host -# peer1933: *client_host -# peer1934: *client_host -# peer1935: *client_host -# peer1936: *client_host -# peer1937: *client_host -# peer1938: *client_host -# peer1939: *client_host -# peer1940: *client_host -# peer1941: *client_host -# peer1942: *client_host -# peer1943: *client_host -# peer1944: *client_host -# peer1945: *client_host -# peer1946: *client_host -# peer1947: *client_host -# peer1948: *client_host -# peer1949: *client_host -# peer1950: *client_host -# peer1951: *client_host -# peer1952: *client_host -# peer1953: *client_host -# peer1954: *client_host -# peer1955: *client_host -# peer1956: *client_host -# peer1957: *client_host -# peer1958: *client_host -# peer1959: *client_host -# peer1960: *client_host -# peer1961: *client_host -# peer1962: *client_host -# peer1963: *client_host -# peer1964: *client_host -# peer1965: *client_host -# peer1966: *client_host -# peer1967: *client_host -# peer1968: *client_host -# peer1969: *client_host -# peer1970: *client_host -# peer1971: *client_host -# peer1972: *client_host -# peer1973: *client_host -# peer1974: *client_host -# peer1975: *client_host -# peer1976: *client_host -# peer1977: *client_host -# peer1978: *client_host -# peer1979: *client_host -# peer1980: *client_host -# peer1981: *client_host -# peer1982: *client_host -# peer1983: *client_host -# peer1984: *client_host -# peer1985: *client_host -# peer1986: *client_host -# peer1987: *client_host -# peer1988: *client_host -# peer1989: *client_host -# peer1990: *client_host -# peer1991: *client_host -# peer1992: *client_host -# peer1993: *client_host -# peer1994: *client_host -# peer1995: *client_host -# peer1996: *client_host -# peer1997: *client_host -# peer1998: *client_host -# peer1999: *client_host -# peer2000: *client_host -# peer2001: *client_host -# peer2002: *client_host -# peer2003: *client_host -# peer2004: *client_host -# peer2005: *client_host -# peer2006: *client_host -# peer2007: *client_host -# peer2008: *client_host -# peer2009: *client_host -# peer2010: *client_host -# peer2011: *client_host -# peer2012: *client_host -# peer2013: *client_host -# peer2014: *client_host -# peer2015: *client_host -# peer2016: *client_host -# peer2017: *client_host -# peer2018: *client_host -# peer2019: *client_host -# peer2020: *client_host -# peer2021: *client_host -# peer2022: *client_host -# peer2023: *client_host -# peer2024: *client_host -# peer2025: *client_host -# peer2026: *client_host -# peer2027: *client_host -# peer2028: *client_host -# peer2029: *client_host -# peer2030: *client_host -# peer2031: *client_host -# peer2032: *client_host -# peer2033: *client_host -# peer2034: *client_host -# peer2035: *client_host -# peer2036: *client_host -# peer2037: *client_host -# peer2038: *client_host -# peer2039: *client_host -# peer2040: *client_host -# peer2041: *client_host -# peer2042: *client_host -# peer2043: *client_host -# peer2044: *client_host -# peer2045: *client_host -# peer2046: *client_host -# peer2047: *client_host -# peer2048: *client_host -# peer2049: *client_host -# peer2050: *client_host -# peer2051: *client_host -# peer2052: *client_host -# peer2053: *client_host -# peer2054: *client_host -# peer2055: *client_host -# peer2056: *client_host -# peer2057: *client_host -# peer2058: *client_host -# peer2059: *client_host -# peer2060: *client_host -# peer2061: *client_host -# peer2062: *client_host -# peer2063: *client_host -# peer2064: *client_host -# peer2065: *client_host -# peer2066: *client_host -# peer2067: *client_host -# peer2068: *client_host -# peer2069: *client_host -# peer2070: *client_host -# peer2071: *client_host -# peer2072: *client_host -# peer2073: *client_host -# peer2074: *client_host -# peer2075: *client_host -# peer2076: *client_host -# peer2077: *client_host -# peer2078: *client_host -# peer2079: *client_host -# peer2080: *client_host -# peer2081: *client_host -# peer2082: *client_host -# peer2083: *client_host -# peer2084: *client_host -# peer2085: *client_host -# peer2086: *client_host -# peer2087: *client_host -# peer2088: *client_host -# peer2089: *client_host -# peer2090: *client_host -# peer2091: *client_host -# peer2092: *client_host -# peer2093: *client_host -# peer2094: *client_host -# peer2095: *client_host -# peer2096: *client_host -# peer2097: *client_host -# peer2098: *client_host -# peer2099: *client_host -# peer2100: *client_host -# peer2101: *client_host -# peer2102: *client_host -# peer2103: *client_host -# peer2104: *client_host -# peer2105: *client_host -# peer2106: *client_host -# peer2107: *client_host -# peer2108: *client_host -# peer2109: *client_host -# peer2110: *client_host -# peer2111: *client_host -# peer2112: *client_host -# peer2113: *client_host -# peer2114: *client_host -# peer2115: *client_host -# peer2116: *client_host -# peer2117: *client_host -# peer2118: *client_host -# peer2119: *client_host -# peer2120: *client_host -# peer2121: *client_host -# peer2122: *client_host -# peer2123: *client_host -# peer2124: *client_host -# peer2125: *client_host -# peer2126: *client_host -# peer2127: *client_host -# peer2128: *client_host -# peer2129: *client_host -# peer2130: *client_host -# peer2131: *client_host -# peer2132: *client_host -# peer2133: *client_host -# peer2134: *client_host -# peer2135: *client_host -# peer2136: *client_host -# peer2137: *client_host -# peer2138: *client_host -# peer2139: *client_host -# peer2140: *client_host -# peer2141: *client_host -# peer2142: *client_host -# peer2143: *client_host -# peer2144: *client_host -# peer2145: *client_host -# peer2146: *client_host -# peer2147: *client_host -# peer2148: *client_host -# peer2149: *client_host -# peer2150: *client_host -# peer2151: *client_host -# peer2152: *client_host -# peer2153: *client_host -# peer2154: *client_host -# peer2155: *client_host -# peer2156: *client_host -# peer2157: *client_host -# peer2158: *client_host -# peer2159: *client_host -# peer2160: *client_host -# peer2161: *client_host -# peer2162: *client_host -# peer2163: *client_host -# peer2164: *client_host -# peer2165: *client_host -# peer2166: *client_host -# peer2167: *client_host -# peer2168: *client_host -# peer2169: *client_host -# peer2170: *client_host -# peer2171: *client_host -# peer2172: *client_host -# peer2173: *client_host -# peer2174: *client_host -# peer2175: *client_host -# peer2176: *client_host -# peer2177: *client_host -# peer2178: *client_host -# peer2179: *client_host -# peer2180: *client_host -# peer2181: *client_host -# peer2182: *client_host -# peer2183: *client_host -# peer2184: *client_host -# peer2185: *client_host -# peer2186: *client_host -# peer2187: *client_host -# peer2188: *client_host -# peer2189: *client_host -# peer2190: *client_host -# peer2191: *client_host -# peer2192: *client_host -# peer2193: *client_host -# peer2194: *client_host -# peer2195: *client_host -# peer2196: *client_host -# peer2197: *client_host -# peer2198: *client_host -# peer2199: *client_host -# peer2200: *client_host -# peer2201: *client_host -# peer2202: *client_host -# peer2203: *client_host -# peer2204: *client_host -# peer2205: *client_host -# peer2206: *client_host -# peer2207: *client_host -# peer2208: *client_host -# peer2209: *client_host -# peer2210: *client_host -# peer2211: *client_host -# peer2212: *client_host -# peer2213: *client_host -# peer2214: *client_host -# peer2215: *client_host -# peer2216: *client_host -# peer2217: *client_host -# peer2218: *client_host -# peer2219: *client_host -# peer2220: *client_host -# peer2221: *client_host -# peer2222: *client_host -# peer2223: *client_host -# peer2224: *client_host -# peer2225: *client_host -# peer2226: *client_host -# peer2227: *client_host -# peer2228: *client_host -# peer2229: *client_host -# peer2230: *client_host -# peer2231: *client_host -# peer2232: *client_host -# peer2233: *client_host -# peer2234: *client_host -# peer2235: *client_host -# peer2236: *client_host -# peer2237: *client_host -# peer2238: *client_host -# peer2239: *client_host -# peer2240: *client_host -# peer2241: *client_host -# peer2242: *client_host -# peer2243: *client_host -# peer2244: *client_host -# peer2245: *client_host -# peer2246: *client_host -# peer2247: *client_host -# peer2248: *client_host -# peer2249: *client_host -# peer2250: *client_host -# peer2251: *client_host -# peer2252: *client_host -# peer2253: *client_host -# peer2254: *client_host -# peer2255: *client_host -# peer2256: *client_host -# peer2257: *client_host -# peer2258: *client_host -# peer2259: *client_host -# peer2260: *client_host -# peer2261: *client_host -# peer2262: *client_host -# peer2263: *client_host -# peer2264: *client_host -# peer2265: *client_host -# peer2266: *client_host -# peer2267: *client_host -# peer2268: *client_host -# peer2269: *client_host -# peer2270: *client_host -# peer2271: *client_host -# peer2272: *client_host -# peer2273: *client_host -# peer2274: *client_host -# peer2275: *client_host -# peer2276: *client_host -# peer2277: *client_host -# peer2278: *client_host -# peer2279: *client_host -# peer2280: *client_host -# peer2281: *client_host -# peer2282: *client_host -# peer2283: *client_host -# peer2284: *client_host -# peer2285: *client_host -# peer2286: *client_host -# peer2287: *client_host -# peer2288: *client_host -# peer2289: *client_host -# peer2290: *client_host -# peer2291: *client_host -# peer2292: *client_host -# peer2293: *client_host -# peer2294: *client_host -# peer2295: *client_host -# peer2296: *client_host -# peer2297: *client_host -# peer2298: *client_host -# peer2299: *client_host -# peer2300: *client_host -# peer2301: *client_host -# peer2302: *client_host -# peer2303: *client_host -# peer2304: *client_host -# peer2305: *client_host -# peer2306: *client_host -# peer2307: *client_host -# peer2308: *client_host -# peer2309: *client_host -# peer2310: *client_host -# peer2311: *client_host -# peer2312: *client_host -# peer2313: *client_host -# peer2314: *client_host -# peer2315: *client_host -# peer2316: *client_host -# peer2317: *client_host -# peer2318: *client_host -# peer2319: *client_host -# peer2320: *client_host -# peer2321: *client_host -# peer2322: *client_host -# peer2323: *client_host -# peer2324: *client_host -# peer2325: *client_host -# peer2326: *client_host -# peer2327: *client_host -# peer2328: *client_host -# peer2329: *client_host -# peer2330: *client_host -# peer2331: *client_host -# peer2332: *client_host -# peer2333: *client_host -# peer2334: *client_host -# peer2335: *client_host -# peer2336: *client_host -# peer2337: *client_host -# peer2338: *client_host -# peer2339: *client_host -# peer2340: *client_host -# peer2341: *client_host -# peer2342: *client_host -# peer2343: *client_host -# peer2344: *client_host -# peer2345: *client_host -# peer2346: *client_host -# peer2347: *client_host -# peer2348: *client_host -# peer2349: *client_host -# peer2350: *client_host -# peer2351: *client_host -# peer2352: *client_host -# peer2353: *client_host -# peer2354: *client_host -# peer2355: *client_host -# peer2356: *client_host -# peer2357: *client_host -# peer2358: *client_host -# peer2359: *client_host -# peer2360: *client_host -# peer2361: *client_host -# peer2362: *client_host -# peer2363: *client_host -# peer2364: *client_host -# peer2365: *client_host -# peer2366: *client_host -# peer2367: *client_host -# peer2368: *client_host -# peer2369: *client_host -# peer2370: *client_host -# peer2371: *client_host -# peer2372: *client_host -# peer2373: *client_host -# peer2374: *client_host -# peer2375: *client_host -# peer2376: *client_host -# peer2377: *client_host -# peer2378: *client_host -# peer2379: *client_host -# peer2380: *client_host -# peer2381: *client_host -# peer2382: *client_host -# peer2383: *client_host -# peer2384: *client_host -# peer2385: *client_host -# peer2386: *client_host -# peer2387: *client_host -# peer2388: *client_host -# peer2389: *client_host -# peer2390: *client_host -# peer2391: *client_host -# peer2392: *client_host -# peer2393: *client_host -# peer2394: *client_host -# peer2395: *client_host -# peer2396: *client_host -# peer2397: *client_host -# peer2398: *client_host -# peer2399: *client_host -# peer2400: *client_host -# peer2401: *client_host -# peer2402: *client_host -# peer2403: *client_host -# peer2404: *client_host -# peer2405: *client_host -# peer2406: *client_host -# peer2407: *client_host -# peer2408: *client_host -# peer2409: *client_host -# peer2410: *client_host -# peer2411: *client_host -# peer2412: *client_host -# peer2413: *client_host -# peer2414: *client_host -# peer2415: *client_host -# peer2416: *client_host -# peer2417: *client_host -# peer2418: *client_host -# peer2419: *client_host -# peer2420: *client_host -# peer2421: *client_host -# peer2422: *client_host -# peer2423: *client_host -# peer2424: *client_host -# peer2425: *client_host -# peer2426: *client_host -# peer2427: *client_host -# peer2428: *client_host -# peer2429: *client_host -# peer2430: *client_host -# peer2431: *client_host -# peer2432: *client_host -# peer2433: *client_host -# peer2434: *client_host -# peer2435: *client_host -# peer2436: *client_host -# peer2437: *client_host -# peer2438: *client_host -# peer2439: *client_host -# peer2440: *client_host -# peer2441: *client_host -# peer2442: *client_host -# peer2443: *client_host -# peer2444: *client_host -# peer2445: *client_host -# peer2446: *client_host -# peer2447: *client_host -# peer2448: *client_host -# peer2449: *client_host -# peer2450: *client_host -# peer2451: *client_host -# peer2452: *client_host -# peer2453: *client_host -# peer2454: *client_host -# peer2455: *client_host -# peer2456: *client_host -# peer2457: *client_host -# peer2458: *client_host -# peer2459: *client_host -# peer2460: *client_host -# peer2461: *client_host -# peer2462: *client_host -# peer2463: *client_host -# peer2464: *client_host -# peer2465: *client_host -# peer2466: *client_host -# peer2467: *client_host -# peer2468: *client_host -# peer2469: *client_host -# peer2470: *client_host -# peer2471: *client_host -# peer2472: *client_host -# peer2473: *client_host -# peer2474: *client_host -# peer2475: *client_host -# peer2476: *client_host -# peer2477: *client_host -# peer2478: *client_host -# peer2479: *client_host -# peer2480: *client_host -# peer2481: *client_host -# peer2482: *client_host -# peer2483: *client_host -# peer2484: *client_host -# peer2485: *client_host -# peer2486: *client_host -# peer2487: *client_host -# peer2488: *client_host -# peer2489: *client_host -# peer2490: *client_host -# peer2491: *client_host -# peer2492: *client_host -# peer2493: *client_host -# peer2494: *client_host -# peer2495: *client_host -# peer2496: *client_host -# peer2497: *client_host -# peer2498: *client_host -# peer2499: *client_host -# peer2500: *client_host -# peer2501: *client_host -# peer2502: *client_host -# peer2503: *client_host -# peer2504: *client_host -# peer2505: *client_host -# peer2506: *client_host -# peer2507: *client_host -# peer2508: *client_host -# peer2509: *client_host -# peer2510: *client_host -# peer2511: *client_host -# peer2512: *client_host -# peer2513: *client_host -# peer2514: *client_host -# peer2515: *client_host -# peer2516: *client_host -# peer2517: *client_host -# peer2518: *client_host -# peer2519: *client_host -# peer2520: *client_host -# peer2521: *client_host -# peer2522: *client_host -# peer2523: *client_host -# peer2524: *client_host -# peer2525: *client_host -# peer2526: *client_host -# peer2527: *client_host -# peer2528: *client_host -# peer2529: *client_host -# peer2530: *client_host -# peer2531: *client_host -# peer2532: *client_host -# peer2533: *client_host -# peer2534: *client_host -# peer2535: *client_host -# peer2536: *client_host -# peer2537: *client_host -# peer2538: *client_host -# peer2539: *client_host -# peer2540: *client_host -# peer2541: *client_host -# peer2542: *client_host -# peer2543: *client_host -# peer2544: *client_host -# peer2545: *client_host -# peer2546: *client_host -# peer2547: *client_host -# peer2548: *client_host -# peer2549: *client_host -# peer2550: *client_host -# peer2551: *client_host -# peer2552: *client_host -# peer2553: *client_host -# peer2554: *client_host -# peer2555: *client_host -# peer2556: *client_host -# peer2557: *client_host -# peer2558: *client_host -# peer2559: *client_host -# peer2560: *client_host -# peer2561: *client_host -# peer2562: *client_host -# peer2563: *client_host -# peer2564: *client_host -# peer2565: *client_host -# peer2566: *client_host -# peer2567: *client_host -# peer2568: *client_host -# peer2569: *client_host -# peer2570: *client_host -# peer2571: *client_host -# peer2572: *client_host -# peer2573: *client_host -# peer2574: *client_host -# peer2575: *client_host -# peer2576: *client_host -# peer2577: *client_host -# peer2578: *client_host -# peer2579: *client_host -# peer2580: *client_host -# peer2581: *client_host -# peer2582: *client_host -# peer2583: *client_host -# peer2584: *client_host -# peer2585: *client_host -# peer2586: *client_host -# peer2587: *client_host -# peer2588: *client_host -# peer2589: *client_host -# peer2590: *client_host -# peer2591: *client_host -# peer2592: *client_host -# peer2593: *client_host -# peer2594: *client_host -# peer2595: *client_host -# peer2596: *client_host -# peer2597: *client_host -# peer2598: *client_host -# peer2599: *client_host -# peer2600: *client_host -# peer2601: *client_host -# peer2602: *client_host -# peer2603: *client_host -# peer2604: *client_host -# peer2605: *client_host -# peer2606: *client_host -# peer2607: *client_host -# peer2608: *client_host -# peer2609: *client_host -# peer2610: *client_host -# peer2611: *client_host -# peer2612: *client_host -# peer2613: *client_host -# peer2614: *client_host -# peer2615: *client_host -# peer2616: *client_host -# peer2617: *client_host -# peer2618: *client_host -# peer2619: *client_host -# peer2620: *client_host -# peer2621: *client_host -# peer2622: *client_host -# peer2623: *client_host -# peer2624: *client_host -# peer2625: *client_host -# peer2626: *client_host -# peer2627: *client_host -# peer2628: *client_host -# peer2629: *client_host -# peer2630: *client_host -# peer2631: *client_host -# peer2632: *client_host -# peer2633: *client_host -# peer2634: *client_host -# peer2635: *client_host -# peer2636: *client_host -# peer2637: *client_host -# peer2638: *client_host -# peer2639: *client_host -# peer2640: *client_host -# peer2641: *client_host -# peer2642: *client_host -# peer2643: *client_host -# peer2644: *client_host -# peer2645: *client_host -# peer2646: *client_host -# peer2647: *client_host -# peer2648: *client_host -# peer2649: *client_host -# peer2650: *client_host -# peer2651: *client_host -# peer2652: *client_host -# peer2653: *client_host -# peer2654: *client_host -# peer2655: *client_host -# peer2656: *client_host -# peer2657: *client_host -# peer2658: *client_host -# peer2659: *client_host -# peer2660: *client_host -# peer2661: *client_host -# peer2662: *client_host -# peer2663: *client_host -# peer2664: *client_host -# peer2665: *client_host -# peer2666: *client_host -# peer2667: *client_host -# peer2668: *client_host -# peer2669: *client_host -# peer2670: *client_host -# peer2671: *client_host -# peer2672: *client_host -# peer2673: *client_host -# peer2674: *client_host -# peer2675: *client_host -# peer2676: *client_host -# peer2677: *client_host -# peer2678: *client_host -# peer2679: *client_host -# peer2680: *client_host -# peer2681: *client_host -# peer2682: *client_host -# peer2683: *client_host -# peer2684: *client_host -# peer2685: *client_host -# peer2686: *client_host -# peer2687: *client_host -# peer2688: *client_host -# peer2689: *client_host -# peer2690: *client_host -# peer2691: *client_host -# peer2692: *client_host -# peer2693: *client_host -# peer2694: *client_host -# peer2695: *client_host -# peer2696: *client_host -# peer2697: *client_host -# peer2698: *client_host -# peer2699: *client_host -# peer2700: *client_host -# peer2701: *client_host -# peer2702: *client_host -# peer2703: *client_host -# peer2704: *client_host -# peer2705: *client_host -# peer2706: *client_host -# peer2707: *client_host -# peer2708: *client_host -# peer2709: *client_host -# peer2710: *client_host -# peer2711: *client_host -# peer2712: *client_host -# peer2713: *client_host -# peer2714: *client_host -# peer2715: *client_host -# peer2716: *client_host -# peer2717: *client_host -# peer2718: *client_host -# peer2719: *client_host -# peer2720: *client_host -# peer2721: *client_host -# peer2722: *client_host -# peer2723: *client_host -# peer2724: *client_host -# peer2725: *client_host -# peer2726: *client_host -# peer2727: *client_host -# peer2728: *client_host -# peer2729: *client_host -# peer2730: *client_host -# peer2731: *client_host -# peer2732: *client_host -# peer2733: *client_host -# peer2734: *client_host -# peer2735: *client_host -# peer2736: *client_host -# peer2737: *client_host -# peer2738: *client_host -# peer2739: *client_host -# peer2740: *client_host -# peer2741: *client_host -# peer2742: *client_host -# peer2743: *client_host -# peer2744: *client_host -# peer2745: *client_host -# peer2746: *client_host -# peer2747: *client_host -# peer2748: *client_host -# peer2749: *client_host -# peer2750: *client_host -# peer2751: *client_host -# peer2752: *client_host -# peer2753: *client_host -# peer2754: *client_host -# peer2755: *client_host -# peer2756: *client_host -# peer2757: *client_host -# peer2758: *client_host -# peer2759: *client_host -# peer2760: *client_host -# peer2761: *client_host -# peer2762: *client_host -# peer2763: *client_host -# peer2764: *client_host -# peer2765: *client_host -# peer2766: *client_host -# peer2767: *client_host -# peer2768: *client_host -# peer2769: *client_host -# peer2770: *client_host -# peer2771: *client_host -# peer2772: *client_host -# peer2773: *client_host -# peer2774: *client_host -# peer2775: *client_host -# peer2776: *client_host -# peer2777: *client_host -# peer2778: *client_host -# peer2779: *client_host -# peer2780: *client_host -# peer2781: *client_host -# peer2782: *client_host -# peer2783: *client_host -# peer2784: *client_host -# peer2785: *client_host -# peer2786: *client_host -# peer2787: *client_host -# peer2788: *client_host -# peer2789: *client_host -# peer2790: *client_host -# peer2791: *client_host -# peer2792: *client_host -# peer2793: *client_host -# peer2794: *client_host -# peer2795: *client_host -# peer2796: *client_host -# peer2797: *client_host -# peer2798: *client_host -# peer2799: *client_host -# peer2800: *client_host -# peer2801: *client_host -# peer2802: *client_host -# peer2803: *client_host -# peer2804: *client_host -# peer2805: *client_host -# peer2806: *client_host -# peer2807: *client_host -# peer2808: *client_host -# peer2809: *client_host -# peer2810: *client_host -# peer2811: *client_host -# peer2812: *client_host -# peer2813: *client_host -# peer2814: *client_host -# peer2815: *client_host -# peer2816: *client_host -# peer2817: *client_host -# peer2818: *client_host -# peer2819: *client_host -# peer2820: *client_host -# peer2821: *client_host -# peer2822: *client_host -# peer2823: *client_host -# peer2824: *client_host -# peer2825: *client_host -# peer2826: *client_host -# peer2827: *client_host -# peer2828: *client_host -# peer2829: *client_host -# peer2830: *client_host -# peer2831: *client_host -# peer2832: *client_host -# peer2833: *client_host -# peer2834: *client_host -# peer2835: *client_host -# peer2836: *client_host -# peer2837: *client_host -# peer2838: *client_host -# peer2839: *client_host -# peer2840: *client_host -# peer2841: *client_host -# peer2842: *client_host -# peer2843: *client_host -# peer2844: *client_host -# peer2845: *client_host -# peer2846: *client_host -# peer2847: *client_host -# peer2848: *client_host -# peer2849: *client_host -# peer2850: *client_host -# peer2851: *client_host -# peer2852: *client_host -# peer2853: *client_host -# peer2854: *client_host -# peer2855: *client_host -# peer2856: *client_host -# peer2857: *client_host -# peer2858: *client_host -# peer2859: *client_host -# peer2860: *client_host -# peer2861: *client_host -# peer2862: *client_host -# peer2863: *client_host -# peer2864: *client_host -# peer2865: *client_host -# peer2866: *client_host -# peer2867: *client_host -# peer2868: *client_host -# peer2869: *client_host -# peer2870: *client_host -# peer2871: *client_host -# peer2872: *client_host -# peer2873: *client_host -# peer2874: *client_host -# peer2875: *client_host -# peer2876: *client_host -# peer2877: *client_host -# peer2878: *client_host -# peer2879: *client_host -# peer2880: *client_host -# peer2881: *client_host -# peer2882: *client_host -# peer2883: *client_host -# peer2884: *client_host -# peer2885: *client_host -# peer2886: *client_host -# peer2887: *client_host -# peer2888: *client_host -# peer2889: *client_host -# peer2890: *client_host -# peer2891: *client_host -# peer2892: *client_host -# peer2893: *client_host -# peer2894: *client_host -# peer2895: *client_host -# peer2896: *client_host -# peer2897: *client_host -# peer2898: *client_host -# peer2899: *client_host -# peer2900: *client_host -# peer2901: *client_host -# peer2902: *client_host -# peer2903: *client_host -# peer2904: *client_host -# peer2905: *client_host -# peer2906: *client_host -# peer2907: *client_host -# peer2908: *client_host -# peer2909: *client_host -# peer2910: *client_host -# peer2911: *client_host -# peer2912: *client_host -# peer2913: *client_host -# peer2914: *client_host -# peer2915: *client_host -# peer2916: *client_host -# peer2917: *client_host -# peer2918: *client_host -# peer2919: *client_host -# peer2920: *client_host -# peer2921: *client_host -# peer2922: *client_host -# peer2923: *client_host -# peer2924: *client_host -# peer2925: *client_host -# peer2926: *client_host -# peer2927: *client_host -# peer2928: *client_host -# peer2929: *client_host -# peer2930: *client_host -# peer2931: *client_host -# peer2932: *client_host -# peer2933: *client_host -# peer2934: *client_host -# peer2935: *client_host -# peer2936: *client_host -# peer2937: *client_host -# peer2938: *client_host -# peer2939: *client_host -# peer2940: *client_host -# peer2941: *client_host -# peer2942: *client_host -# peer2943: *client_host -# peer2944: *client_host -# peer2945: *client_host -# peer2946: *client_host -# peer2947: *client_host -# peer2948: *client_host -# peer2949: *client_host -# peer2950: *client_host -# peer2951: *client_host -# peer2952: *client_host -# peer2953: *client_host -# peer2954: *client_host -# peer2955: *client_host -# peer2956: *client_host -# peer2957: *client_host -# peer2958: *client_host -# peer2959: *client_host -# peer2960: *client_host -# peer2961: *client_host -# peer2962: *client_host -# peer2963: *client_host -# peer2964: *client_host -# peer2965: *client_host -# peer2966: *client_host -# peer2967: *client_host -# peer2968: *client_host -# peer2969: *client_host -# peer2970: *client_host -# peer2971: *client_host -# peer2972: *client_host -# peer2973: *client_host -# peer2974: *client_host -# peer2975: *client_host -# peer2976: *client_host -# peer2977: *client_host -# peer2978: *client_host -# peer2979: *client_host -# peer2980: *client_host -# peer2981: *client_host -# peer2982: *client_host -# peer2983: *client_host -# peer2984: *client_host -# peer2985: *client_host -# peer2986: *client_host -# peer2987: *client_host -# peer2988: *client_host -# peer2989: *client_host -# peer2990: *client_host -# peer2991: *client_host -# peer2992: *client_host -# peer2993: *client_host -# peer2994: *client_host -# peer2995: *client_host -# peer2996: *client_host -# peer2997: *client_host -# peer2998: *client_host -# peer2999: *client_host -# peer3000: *client_host -# peer3001: *client_host -# peer3002: *client_host -# peer3003: *client_host -# peer3004: *client_host -# peer3005: *client_host -# peer3006: *client_host -# peer3007: *client_host -# peer3008: *client_host -# peer3009: *client_host -# peer3010: *client_host -# peer3011: *client_host -# peer3012: *client_host -# peer3013: *client_host -# peer3014: *client_host -# peer3015: *client_host -# peer3016: *client_host -# peer3017: *client_host -# peer3018: *client_host -# peer3019: *client_host -# peer3020: *client_host -# peer3021: *client_host -# peer3022: *client_host -# peer3023: *client_host -# peer3024: *client_host -# peer3025: *client_host -# peer3026: *client_host -# peer3027: *client_host -# peer3028: *client_host -# peer3029: *client_host -# peer3030: *client_host -# peer3031: *client_host -# peer3032: *client_host -# peer3033: *client_host -# peer3034: *client_host -# peer3035: *client_host -# peer3036: *client_host -# peer3037: *client_host -# peer3038: *client_host -# peer3039: *client_host -# peer3040: *client_host -# peer3041: *client_host -# peer3042: *client_host -# peer3043: *client_host -# peer3044: *client_host -# peer3045: *client_host -# peer3046: *client_host -# peer3047: *client_host -# peer3048: *client_host -# peer3049: *client_host -# peer3050: *client_host -# peer3051: *client_host -# peer3052: *client_host -# peer3053: *client_host -# peer3054: *client_host -# peer3055: *client_host -# peer3056: *client_host -# peer3057: *client_host -# peer3058: *client_host -# peer3059: *client_host -# peer3060: *client_host -# peer3061: *client_host -# peer3062: *client_host -# peer3063: *client_host -# peer3064: *client_host -# peer3065: *client_host -# peer3066: *client_host -# peer3067: *client_host -# peer3068: *client_host -# peer3069: *client_host -# peer3070: *client_host -# peer3071: *client_host -# peer3072: *client_host -# peer3073: *client_host -# peer3074: *client_host -# peer3075: *client_host -# peer3076: *client_host -# peer3077: *client_host -# peer3078: *client_host -# peer3079: *client_host -# peer3080: *client_host -# peer3081: *client_host -# peer3082: *client_host -# peer3083: *client_host -# peer3084: *client_host -# peer3085: *client_host -# peer3086: *client_host -# peer3087: *client_host -# peer3088: *client_host -# peer3089: *client_host -# peer3090: *client_host -# peer3091: *client_host -# peer3092: *client_host -# peer3093: *client_host -# peer3094: *client_host -# peer3095: *client_host -# peer3096: *client_host -# peer3097: *client_host -# peer3098: *client_host -# peer3099: *client_host -# peer3100: *client_host -# peer3101: *client_host -# peer3102: *client_host -# peer3103: *client_host -# peer3104: *client_host -# peer3105: *client_host -# peer3106: *client_host -# peer3107: *client_host -# peer3108: *client_host -# peer3109: *client_host -# peer3110: *client_host -# peer3111: *client_host -# peer3112: *client_host -# peer3113: *client_host -# peer3114: *client_host -# peer3115: *client_host -# peer3116: *client_host -# peer3117: *client_host -# peer3118: *client_host -# peer3119: *client_host -# peer3120: *client_host -# peer3121: *client_host -# peer3122: *client_host -# peer3123: *client_host -# peer3124: *client_host -# peer3125: *client_host -# peer3126: *client_host -# peer3127: *client_host -# peer3128: *client_host -# peer3129: *client_host -# peer3130: *client_host -# peer3131: *client_host -# peer3132: *client_host -# peer3133: *client_host -# peer3134: *client_host -# peer3135: *client_host -# peer3136: *client_host -# peer3137: *client_host -# peer3138: *client_host -# peer3139: *client_host -# peer3140: *client_host -# peer3141: *client_host -# peer3142: *client_host -# peer3143: *client_host -# peer3144: *client_host -# peer3145: *client_host -# peer3146: *client_host -# peer3147: *client_host -# peer3148: *client_host -# peer3149: *client_host -# peer3150: *client_host -# peer3151: *client_host -# peer3152: *client_host -# peer3153: *client_host -# peer3154: *client_host -# peer3155: *client_host -# peer3156: *client_host -# peer3157: *client_host -# peer3158: *client_host -# peer3159: *client_host -# peer3160: *client_host -# peer3161: *client_host -# peer3162: *client_host -# peer3163: *client_host -# peer3164: *client_host -# peer3165: *client_host -# peer3166: *client_host -# peer3167: *client_host -# peer3168: *client_host -# peer3169: *client_host -# peer3170: *client_host -# peer3171: *client_host -# peer3172: *client_host -# peer3173: *client_host -# peer3174: *client_host -# peer3175: *client_host -# peer3176: *client_host -# peer3177: *client_host -# peer3178: *client_host -# peer3179: *client_host -# peer3180: *client_host -# peer3181: *client_host -# peer3182: *client_host -# peer3183: *client_host -# peer3184: *client_host -# peer3185: *client_host -# peer3186: *client_host -# peer3187: *client_host -# peer3188: *client_host -# peer3189: *client_host -# peer3190: *client_host -# peer3191: *client_host -# peer3192: *client_host -# peer3193: *client_host -# peer3194: *client_host -# peer3195: *client_host -# peer3196: *client_host -# peer3197: *client_host -# peer3198: *client_host -# peer3199: *client_host -# peer3200: *client_host -# peer3201: *client_host -# peer3202: *client_host -# peer3203: *client_host -# peer3204: *client_host -# peer3205: *client_host -# peer3206: *client_host -# peer3207: *client_host -# peer3208: *client_host -# peer3209: *client_host -# peer3210: *client_host -# peer3211: *client_host -# peer3212: *client_host -# peer3213: *client_host -# peer3214: *client_host -# peer3215: *client_host -# peer3216: *client_host -# peer3217: *client_host -# peer3218: *client_host -# peer3219: *client_host -# peer3220: *client_host -# peer3221: *client_host -# peer3222: *client_host -# peer3223: *client_host -# peer3224: *client_host -# peer3225: *client_host -# peer3226: *client_host -# peer3227: *client_host -# peer3228: *client_host -# peer3229: *client_host -# peer3230: *client_host -# peer3231: *client_host -# peer3232: *client_host -# peer3233: *client_host -# peer3234: *client_host -# peer3235: *client_host -# peer3236: *client_host -# peer3237: *client_host -# peer3238: *client_host -# peer3239: *client_host -# peer3240: *client_host -# peer3241: *client_host -# peer3242: *client_host -# peer3243: *client_host -# peer3244: *client_host -# peer3245: *client_host -# peer3246: *client_host -# peer3247: *client_host -# peer3248: *client_host -# peer3249: *client_host -# peer3250: *client_host -# peer3251: *client_host -# peer3252: *client_host -# peer3253: *client_host -# peer3254: *client_host -# peer3255: *client_host -# peer3256: *client_host -# peer3257: *client_host -# peer3258: *client_host -# peer3259: *client_host -# peer3260: *client_host -# peer3261: *client_host -# peer3262: *client_host -# peer3263: *client_host -# peer3264: *client_host -# peer3265: *client_host -# peer3266: *client_host -# peer3267: *client_host -# peer3268: *client_host -# peer3269: *client_host -# peer3270: *client_host -# peer3271: *client_host -# peer3272: *client_host -# peer3273: *client_host -# peer3274: *client_host -# peer3275: *client_host -# peer3276: *client_host -# peer3277: *client_host -# peer3278: *client_host -# peer3279: *client_host -# peer3280: *client_host -# peer3281: *client_host -# peer3282: *client_host -# peer3283: *client_host -# peer3284: *client_host -# peer3285: *client_host -# peer3286: *client_host -# peer3287: *client_host -# peer3288: *client_host -# peer3289: *client_host -# peer3290: *client_host -# peer3291: *client_host -# peer3292: *client_host -# peer3293: *client_host -# peer3294: *client_host -# peer3295: *client_host -# peer3296: *client_host -# peer3297: *client_host -# peer3298: *client_host -# peer3299: *client_host -# peer3300: *client_host -# peer3301: *client_host -# peer3302: *client_host -# peer3303: *client_host -# peer3304: *client_host -# peer3305: *client_host -# peer3306: *client_host -# peer3307: *client_host -# peer3308: *client_host -# peer3309: *client_host -# peer3310: *client_host -# peer3311: *client_host -# peer3312: *client_host -# peer3313: *client_host -# peer3314: *client_host -# peer3315: *client_host -# peer3316: *client_host -# peer3317: *client_host -# peer3318: *client_host -# peer3319: *client_host -# peer3320: *client_host -# peer3321: *client_host -# peer3322: *client_host -# peer3323: *client_host -# peer3324: *client_host -# peer3325: *client_host -# peer3326: *client_host -# peer3327: *client_host -# peer3328: *client_host -# peer3329: *client_host -# peer3330: *client_host -# peer3331: *client_host -# peer3332: *client_host -# peer3333: *client_host -# peer3334: *client_host -# peer3335: *client_host -# peer3336: *client_host -# peer3337: *client_host -# peer3338: *client_host -# peer3339: *client_host -# peer3340: *client_host -# peer3341: *client_host -# peer3342: *client_host -# peer3343: *client_host -# peer3344: *client_host -# peer3345: *client_host -# peer3346: *client_host -# peer3347: *client_host -# peer3348: *client_host -# peer3349: *client_host -# peer3350: *client_host -# peer3351: *client_host -# peer3352: *client_host -# peer3353: *client_host -# peer3354: *client_host -# peer3355: *client_host -# peer3356: *client_host -# peer3357: *client_host -# peer3358: *client_host -# peer3359: *client_host -# peer3360: *client_host -# peer3361: *client_host -# peer3362: *client_host -# peer3363: *client_host -# peer3364: *client_host -# peer3365: *client_host -# peer3366: *client_host -# peer3367: *client_host -# peer3368: *client_host -# peer3369: *client_host -# peer3370: *client_host -# peer3371: *client_host -# peer3372: *client_host -# peer3373: *client_host -# peer3374: *client_host -# peer3375: *client_host -# peer3376: *client_host -# peer3377: *client_host -# peer3378: *client_host -# peer3379: *client_host -# peer3380: *client_host -# peer3381: *client_host -# peer3382: *client_host -# peer3383: *client_host -# peer3384: *client_host -# peer3385: *client_host -# peer3386: *client_host -# peer3387: *client_host -# peer3388: *client_host -# peer3389: *client_host -# peer3390: *client_host -# peer3391: *client_host -# peer3392: *client_host -# peer3393: *client_host -# peer3394: *client_host -# peer3395: *client_host -# peer3396: *client_host -# peer3397: *client_host -# peer3398: *client_host -# peer3399: *client_host -# peer3400: *client_host -# peer3401: *client_host -# peer3402: *client_host -# peer3403: *client_host -# peer3404: *client_host -# peer3405: *client_host -# peer3406: *client_host -# peer3407: *client_host -# peer3408: *client_host -# peer3409: *client_host -# peer3410: *client_host -# peer3411: *client_host -# peer3412: *client_host -# peer3413: *client_host -# peer3414: *client_host -# peer3415: *client_host -# peer3416: *client_host -# peer3417: *client_host -# peer3418: *client_host -# peer3419: *client_host -# peer3420: *client_host -# peer3421: *client_host -# peer3422: *client_host -# peer3423: *client_host -# peer3424: *client_host -# peer3425: *client_host -# peer3426: *client_host -# peer3427: *client_host -# peer3428: *client_host -# peer3429: *client_host -# peer3430: *client_host -# peer3431: *client_host -# peer3432: *client_host -# peer3433: *client_host -# peer3434: *client_host -# peer3435: *client_host -# peer3436: *client_host -# peer3437: *client_host -# peer3438: *client_host -# peer3439: *client_host -# peer3440: *client_host -# peer3441: *client_host -# peer3442: *client_host -# peer3443: *client_host -# peer3444: *client_host -# peer3445: *client_host -# peer3446: *client_host -# peer3447: *client_host -# peer3448: *client_host -# peer3449: *client_host -# peer3450: *client_host -# peer3451: *client_host -# peer3452: *client_host -# peer3453: *client_host -# peer3454: *client_host -# peer3455: *client_host -# peer3456: *client_host -# peer3457: *client_host -# peer3458: *client_host -# peer3459: *client_host -# peer3460: *client_host -# peer3461: *client_host -# peer3462: *client_host -# peer3463: *client_host -# peer3464: *client_host -# peer3465: *client_host -# peer3466: *client_host -# peer3467: *client_host -# peer3468: *client_host -# peer3469: *client_host -# peer3470: *client_host -# peer3471: *client_host -# peer3472: *client_host -# peer3473: *client_host -# peer3474: *client_host -# peer3475: *client_host -# peer3476: *client_host -# peer3477: *client_host -# peer3478: *client_host -# peer3479: *client_host -# peer3480: *client_host -# peer3481: *client_host -# peer3482: *client_host -# peer3483: *client_host -# peer3484: *client_host -# peer3485: *client_host -# peer3486: *client_host -# peer3487: *client_host -# peer3488: *client_host -# peer3489: *client_host -# peer3490: *client_host -# peer3491: *client_host -# peer3492: *client_host -# peer3493: *client_host -# peer3494: *client_host -# peer3495: *client_host -# peer3496: *client_host -# peer3497: *client_host -# peer3498: *client_host -# peer3499: *client_host -# peer3500: *client_host -# peer3501: *client_host -# peer3502: *client_host -# peer3503: *client_host -# peer3504: *client_host -# peer3505: *client_host -# peer3506: *client_host -# peer3507: *client_host -# peer3508: *client_host -# peer3509: *client_host -# peer3510: *client_host -# peer3511: *client_host -# peer3512: *client_host -# peer3513: *client_host -# peer3514: *client_host -# peer3515: *client_host -# peer3516: *client_host -# peer3517: *client_host -# peer3518: *client_host -# peer3519: *client_host -# peer3520: *client_host -# peer3521: *client_host -# peer3522: *client_host -# peer3523: *client_host -# peer3524: *client_host -# peer3525: *client_host -# peer3526: *client_host -# peer3527: *client_host -# peer3528: *client_host -# peer3529: *client_host -# peer3530: *client_host -# peer3531: *client_host -# peer3532: *client_host -# peer3533: *client_host -# peer3534: *client_host -# peer3535: *client_host -# peer3536: *client_host -# peer3537: *client_host -# peer3538: *client_host -# peer3539: *client_host -# peer3540: *client_host -# peer3541: *client_host -# peer3542: *client_host -# peer3543: *client_host -# peer3544: *client_host -# peer3545: *client_host -# peer3546: *client_host -# peer3547: *client_host -# peer3548: *client_host -# peer3549: *client_host -# peer3550: *client_host -# peer3551: *client_host -# peer3552: *client_host -# peer3553: *client_host -# peer3554: *client_host -# peer3555: *client_host -# peer3556: *client_host -# peer3557: *client_host -# peer3558: *client_host -# peer3559: *client_host -# peer3560: *client_host -# peer3561: *client_host -# peer3562: *client_host -# peer3563: *client_host -# peer3564: *client_host -# peer3565: *client_host -# peer3566: *client_host -# peer3567: *client_host -# peer3568: *client_host -# peer3569: *client_host -# peer3570: *client_host -# peer3571: *client_host -# peer3572: *client_host -# peer3573: *client_host -# peer3574: *client_host -# peer3575: *client_host -# peer3576: *client_host -# peer3577: *client_host -# peer3578: *client_host -# peer3579: *client_host -# peer3580: *client_host -# peer3581: *client_host -# peer3582: *client_host -# peer3583: *client_host -# peer3584: *client_host -# peer3585: *client_host -# peer3586: *client_host -# peer3587: *client_host -# peer3588: *client_host -# peer3589: *client_host -# peer3590: *client_host -# peer3591: *client_host -# peer3592: *client_host -# peer3593: *client_host -# peer3594: *client_host -# peer3595: *client_host -# peer3596: *client_host -# peer3597: *client_host -# peer3598: *client_host -# peer3599: *client_host -# peer3600: *client_host -# peer3601: *client_host -# peer3602: *client_host -# peer3603: *client_host -# peer3604: *client_host -# peer3605: *client_host -# peer3606: *client_host -# peer3607: *client_host -# peer3608: *client_host -# peer3609: *client_host -# peer3610: *client_host -# peer3611: *client_host -# peer3612: *client_host -# peer3613: *client_host -# peer3614: *client_host -# peer3615: *client_host -# peer3616: *client_host -# peer3617: *client_host -# peer3618: *client_host -# peer3619: *client_host -# peer3620: *client_host -# peer3621: *client_host -# peer3622: *client_host -# peer3623: *client_host -# peer3624: *client_host -# peer3625: *client_host -# peer3626: *client_host -# peer3627: *client_host -# peer3628: *client_host -# peer3629: *client_host -# peer3630: *client_host -# peer3631: *client_host -# peer3632: *client_host -# peer3633: *client_host -# peer3634: *client_host -# peer3635: *client_host -# peer3636: *client_host -# peer3637: *client_host -# peer3638: *client_host -# peer3639: *client_host -# peer3640: *client_host -# peer3641: *client_host -# peer3642: *client_host -# peer3643: *client_host -# peer3644: *client_host -# peer3645: *client_host -# peer3646: *client_host -# peer3647: *client_host -# peer3648: *client_host -# peer3649: *client_host -# peer3650: *client_host -# peer3651: *client_host -# peer3652: *client_host -# peer3653: *client_host -# peer3654: *client_host -# peer3655: *client_host -# peer3656: *client_host -# peer3657: *client_host -# peer3658: *client_host -# peer3659: *client_host -# peer3660: *client_host -# peer3661: *client_host -# peer3662: *client_host -# peer3663: *client_host -# peer3664: *client_host -# peer3665: *client_host -# peer3666: *client_host -# peer3667: *client_host -# peer3668: *client_host -# peer3669: *client_host -# peer3670: *client_host -# peer3671: *client_host -# peer3672: *client_host -# peer3673: *client_host -# peer3674: *client_host -# peer3675: *client_host -# peer3676: *client_host -# peer3677: *client_host -# peer3678: *client_host -# peer3679: *client_host -# peer3680: *client_host -# peer3681: *client_host -# peer3682: *client_host -# peer3683: *client_host -# peer3684: *client_host -# peer3685: *client_host -# peer3686: *client_host -# peer3687: *client_host -# peer3688: *client_host -# peer3689: *client_host -# peer3690: *client_host -# peer3691: *client_host -# peer3692: *client_host -# peer3693: *client_host -# peer3694: *client_host -# peer3695: *client_host -# peer3696: *client_host -# peer3697: *client_host -# peer3698: *client_host -# peer3699: *client_host -# peer3700: *client_host -# peer3701: *client_host -# peer3702: *client_host -# peer3703: *client_host -# peer3704: *client_host -# peer3705: *client_host -# peer3706: *client_host -# peer3707: *client_host -# peer3708: *client_host -# peer3709: *client_host -# peer3710: *client_host -# peer3711: *client_host -# peer3712: *client_host -# peer3713: *client_host -# peer3714: *client_host -# peer3715: *client_host -# peer3716: *client_host -# peer3717: *client_host -# peer3718: *client_host -# peer3719: *client_host -# peer3720: *client_host -# peer3721: *client_host -# peer3722: *client_host -# peer3723: *client_host -# peer3724: *client_host -# peer3725: *client_host -# peer3726: *client_host -# peer3727: *client_host -# peer3728: *client_host -# peer3729: *client_host -# peer3730: *client_host -# peer3731: *client_host -# peer3732: *client_host -# peer3733: *client_host -# peer3734: *client_host -# peer3735: *client_host -# peer3736: *client_host -# peer3737: *client_host -# peer3738: *client_host -# peer3739: *client_host -# peer3740: *client_host -# peer3741: *client_host -# peer3742: *client_host -# peer3743: *client_host -# peer3744: *client_host -# peer3745: *client_host -# peer3746: *client_host -# peer3747: *client_host -# peer3748: *client_host -# peer3749: *client_host -# peer3750: *client_host -# peer3751: *client_host -# peer3752: *client_host -# peer3753: *client_host -# peer3754: *client_host -# peer3755: *client_host -# peer3756: *client_host -# peer3757: *client_host -# peer3758: *client_host -# peer3759: *client_host -# peer3760: *client_host -# peer3761: *client_host -# peer3762: *client_host -# peer3763: *client_host -# peer3764: *client_host -# peer3765: *client_host -# peer3766: *client_host -# peer3767: *client_host -# peer3768: *client_host -# peer3769: *client_host -# peer3770: *client_host -# peer3771: *client_host -# peer3772: *client_host -# peer3773: *client_host -# peer3774: *client_host -# peer3775: *client_host -# peer3776: *client_host -# peer3777: *client_host -# peer3778: *client_host -# peer3779: *client_host -# peer3780: *client_host -# peer3781: *client_host -# peer3782: *client_host -# peer3783: *client_host -# peer3784: *client_host -# peer3785: *client_host -# peer3786: *client_host -# peer3787: *client_host -# peer3788: *client_host -# peer3789: *client_host -# peer3790: *client_host -# peer3791: *client_host -# peer3792: *client_host -# peer3793: *client_host -# peer3794: *client_host -# peer3795: *client_host -# peer3796: *client_host -# peer3797: *client_host -# peer3798: *client_host -# peer3799: *client_host -# peer3800: *client_host -# peer3801: *client_host -# peer3802: *client_host -# peer3803: *client_host -# peer3804: *client_host -# peer3805: *client_host -# peer3806: *client_host -# peer3807: *client_host -# peer3808: *client_host -# peer3809: *client_host -# peer3810: *client_host -# peer3811: *client_host -# peer3812: *client_host -# peer3813: *client_host -# peer3814: *client_host -# peer3815: *client_host -# peer3816: *client_host -# peer3817: *client_host -# peer3818: *client_host -# peer3819: *client_host -# peer3820: *client_host -# peer3821: *client_host -# peer3822: *client_host -# peer3823: *client_host -# peer3824: *client_host -# peer3825: *client_host -# peer3826: *client_host -# peer3827: *client_host -# peer3828: *client_host -# peer3829: *client_host -# peer3830: *client_host -# peer3831: *client_host -# peer3832: *client_host -# peer3833: *client_host -# peer3834: *client_host -# peer3835: *client_host -# peer3836: *client_host -# peer3837: *client_host -# peer3838: *client_host -# peer3839: *client_host -# peer3840: *client_host -# peer3841: *client_host -# peer3842: *client_host -# peer3843: *client_host -# peer3844: *client_host -# peer3845: *client_host -# peer3846: *client_host -# peer3847: *client_host -# peer3848: *client_host -# peer3849: *client_host -# peer3850: *client_host -# peer3851: *client_host -# peer3852: *client_host -# peer3853: *client_host -# peer3854: *client_host -# peer3855: *client_host -# peer3856: *client_host -# peer3857: *client_host -# peer3858: *client_host -# peer3859: *client_host -# peer3860: *client_host -# peer3861: *client_host -# peer3862: *client_host -# peer3863: *client_host -# peer3864: *client_host -# peer3865: *client_host -# peer3866: *client_host -# peer3867: *client_host -# peer3868: *client_host -# peer3869: *client_host -# peer3870: *client_host -# peer3871: *client_host -# peer3872: *client_host -# peer3873: *client_host -# peer3874: *client_host -# peer3875: *client_host -# peer3876: *client_host -# peer3877: *client_host -# peer3878: *client_host -# peer3879: *client_host -# peer3880: *client_host -# peer3881: *client_host -# peer3882: *client_host -# peer3883: *client_host -# peer3884: *client_host -# peer3885: *client_host -# peer3886: *client_host -# peer3887: *client_host -# peer3888: *client_host -# peer3889: *client_host -# peer3890: *client_host -# peer3891: *client_host -# peer3892: *client_host -# peer3893: *client_host -# peer3894: *client_host -# peer3895: *client_host -# peer3896: *client_host -# peer3897: *client_host -# peer3898: *client_host -# peer3899: *client_host -# peer3900: *client_host -# peer3901: *client_host -# peer3902: *client_host -# peer3903: *client_host -# peer3904: *client_host -# peer3905: *client_host -# peer3906: *client_host -# peer3907: *client_host -# peer3908: *client_host -# peer3909: *client_host -# peer3910: *client_host -# peer3911: *client_host -# peer3912: *client_host -# peer3913: *client_host -# peer3914: *client_host -# peer3915: *client_host -# peer3916: *client_host -# peer3917: *client_host -# peer3918: *client_host -# peer3919: *client_host -# peer3920: *client_host -# peer3921: *client_host -# peer3922: *client_host -# peer3923: *client_host -# peer3924: *client_host -# peer3925: *client_host -# peer3926: *client_host -# peer3927: *client_host -# peer3928: *client_host -# peer3929: *client_host -# peer3930: *client_host -# peer3931: *client_host -# peer3932: *client_host -# peer3933: *client_host -# peer3934: *client_host -# peer3935: *client_host -# peer3936: *client_host -# peer3937: *client_host -# peer3938: *client_host -# peer3939: *client_host -# peer3940: *client_host -# peer3941: *client_host -# peer3942: *client_host -# peer3943: *client_host -# peer3944: *client_host -# peer3945: *client_host -# peer3946: *client_host -# peer3947: *client_host -# peer3948: *client_host -# peer3949: *client_host -# peer3950: *client_host -# peer3951: *client_host -# peer3952: *client_host -# peer3953: *client_host -# peer3954: *client_host -# peer3955: *client_host -# peer3956: *client_host -# peer3957: *client_host -# peer3958: *client_host -# peer3959: *client_host -# peer3960: *client_host -# peer3961: *client_host -# peer3962: *client_host -# peer3963: *client_host -# peer3964: *client_host -# peer3965: *client_host -# peer3966: *client_host -# peer3967: *client_host -# peer3968: *client_host -# peer3969: *client_host -# peer3970: *client_host -# peer3971: *client_host -# peer3972: *client_host -# peer3973: *client_host -# peer3974: *client_host -# peer3975: *client_host -# peer3976: *client_host -# peer3977: *client_host -# peer3978: *client_host -# peer3979: *client_host -# peer3980: *client_host -# peer3981: *client_host -# peer3982: *client_host -# peer3983: *client_host -# peer3984: *client_host -# peer3985: *client_host -# peer3986: *client_host -# peer3987: *client_host -# peer3988: *client_host -# peer3989: *client_host -# peer3990: *client_host -# peer3991: *client_host -# peer3992: *client_host -# peer3993: *client_host -# peer3994: *client_host -# peer3995: *client_host -# peer3996: *client_host -# peer3997: *client_host -# peer3998: *client_host -# peer3999: *client_host -# peer4000: *client_host -# peer4001: *client_host -# peer4002: *client_host -# peer4003: *client_host -# peer4004: *client_host -# peer4005: *client_host -# peer4006: *client_host -# peer4007: *client_host -# peer4008: *client_host -# peer4009: *client_host -# peer4010: *client_host -# peer4011: *client_host -# peer4012: *client_host -# peer4013: *client_host -# peer4014: *client_host -# peer4015: *client_host -# peer4016: *client_host -# peer4017: *client_host -# peer4018: *client_host -# peer4019: *client_host -# peer4020: *client_host -# peer4021: *client_host -# peer4022: *client_host -# peer4023: *client_host -# peer4024: *client_host -# peer4025: *client_host -# peer4026: *client_host -# peer4027: *client_host -# peer4028: *client_host -# peer4029: *client_host -# peer4030: *client_host -# peer4031: *client_host -# peer4032: *client_host -# peer4033: *client_host -# peer4034: *client_host -# peer4035: *client_host -# peer4036: *client_host -# peer4037: *client_host -# peer4038: *client_host -# peer4039: *client_host -# peer4040: *client_host -# peer4041: *client_host -# peer4042: *client_host -# peer4043: *client_host -# peer4044: *client_host -# peer4045: *client_host -# peer4046: *client_host -# peer4047: *client_host -# peer4048: *client_host -# peer4049: *client_host -# peer4050: *client_host -# peer4051: *client_host -# peer4052: *client_host -# peer4053: *client_host -# peer4054: *client_host -# peer4055: *client_host -# peer4056: *client_host -# peer4057: *client_host -# peer4058: *client_host -# peer4059: *client_host -# peer4060: *client_host -# peer4061: *client_host -# peer4062: *client_host -# peer4063: *client_host -# peer4064: *client_host -# peer4065: *client_host -# peer4066: *client_host -# peer4067: *client_host -# peer4068: *client_host -# peer4069: *client_host -# peer4070: *client_host -# peer4071: *client_host -# peer4072: *client_host -# peer4073: *client_host -# peer4074: *client_host -# peer4075: *client_host -# peer4076: *client_host -# peer4077: *client_host -# peer4078: *client_host -# peer4079: *client_host -# peer4080: *client_host -# peer4081: *client_host -# peer4082: *client_host -# peer4083: *client_host -# peer4084: *client_host -# peer4085: *client_host -# peer4086: *client_host -# peer4087: *client_host -# peer4088: *client_host -# peer4089: *client_host -# peer4090: *client_host -# peer4091: *client_host -# peer4092: *client_host -# peer4093: *client_host -# peer4094: *client_host -# peer4095: *client_host -# peer4096: *client_host -# peer4097: *client_host -# peer4098: *client_host -# peer4099: *client_host -# peer4100: *client_host -# peer4101: *client_host -# peer4102: *client_host -# peer4103: *client_host -# peer4104: *client_host -# peer4105: *client_host -# peer4106: *client_host -# peer4107: *client_host -# peer4108: *client_host -# peer4109: *client_host -# peer4110: *client_host -# peer4111: *client_host -# peer4112: *client_host -# peer4113: *client_host -# peer4114: *client_host -# peer4115: *client_host -# peer4116: *client_host -# peer4117: *client_host -# peer4118: *client_host -# peer4119: *client_host -# peer4120: *client_host -# peer4121: *client_host -# peer4122: *client_host -# peer4123: *client_host -# peer4124: *client_host -# peer4125: *client_host -# peer4126: *client_host -# peer4127: *client_host -# peer4128: *client_host -# peer4129: *client_host -# peer4130: *client_host -# peer4131: *client_host -# peer4132: *client_host -# peer4133: *client_host -# peer4134: *client_host -# peer4135: *client_host -# peer4136: *client_host -# peer4137: *client_host -# peer4138: *client_host -# peer4139: *client_host -# peer4140: *client_host -# peer4141: *client_host -# peer4142: *client_host -# peer4143: *client_host -# peer4144: *client_host -# peer4145: *client_host -# peer4146: *client_host -# peer4147: *client_host -# peer4148: *client_host -# peer4149: *client_host -# peer4150: *client_host -# peer4151: *client_host -# peer4152: *client_host -# peer4153: *client_host -# peer4154: *client_host -# peer4155: *client_host -# peer4156: *client_host -# peer4157: *client_host -# peer4158: *client_host -# peer4159: *client_host -# peer4160: *client_host -# peer4161: *client_host -# peer4162: *client_host -# peer4163: *client_host -# peer4164: *client_host -# peer4165: *client_host -# peer4166: *client_host -# peer4167: *client_host -# peer4168: *client_host -# peer4169: *client_host -# peer4170: *client_host -# peer4171: *client_host -# peer4172: *client_host -# peer4173: *client_host -# peer4174: *client_host -# peer4175: *client_host -# peer4176: *client_host -# peer4177: *client_host -# peer4178: *client_host -# peer4179: *client_host -# peer4180: *client_host -# peer4181: *client_host -# peer4182: *client_host -# peer4183: *client_host -# peer4184: *client_host -# peer4185: *client_host -# peer4186: *client_host -# peer4187: *client_host -# peer4188: *client_host -# peer4189: *client_host -# peer4190: *client_host -# peer4191: *client_host -# peer4192: *client_host -# peer4193: *client_host -# peer4194: *client_host -# peer4195: *client_host -# peer4196: *client_host -# peer4197: *client_host -# peer4198: *client_host -# peer4199: *client_host -# peer4200: *client_host -# peer4201: *client_host -# peer4202: *client_host -# peer4203: *client_host -# peer4204: *client_host -# peer4205: *client_host -# peer4206: *client_host -# peer4207: *client_host -# peer4208: *client_host -# peer4209: *client_host -# peer4210: *client_host -# peer4211: *client_host -# peer4212: *client_host -# peer4213: *client_host -# peer4214: *client_host -# peer4215: *client_host -# peer4216: *client_host -# peer4217: *client_host -# peer4218: *client_host -# peer4219: *client_host -# peer4220: *client_host -# peer4221: *client_host -# peer4222: *client_host -# peer4223: *client_host -# peer4224: *client_host -# peer4225: *client_host -# peer4226: *client_host -# peer4227: *client_host -# peer4228: *client_host -# peer4229: *client_host -# peer4230: *client_host -# peer4231: *client_host -# peer4232: *client_host -# peer4233: *client_host -# peer4234: *client_host -# peer4235: *client_host -# peer4236: *client_host -# peer4237: *client_host -# peer4238: *client_host -# peer4239: *client_host -# peer4240: *client_host -# peer4241: *client_host -# peer4242: *client_host -# peer4243: *client_host -# peer4244: *client_host -# peer4245: *client_host -# peer4246: *client_host -# peer4247: *client_host -# peer4248: *client_host -# peer4249: *client_host -# peer4250: *client_host -# peer4251: *client_host -# peer4252: *client_host -# peer4253: *client_host -# peer4254: *client_host -# peer4255: *client_host -# peer4256: *client_host -# peer4257: *client_host -# peer4258: *client_host -# peer4259: *client_host -# peer4260: *client_host -# peer4261: *client_host -# peer4262: *client_host -# peer4263: *client_host -# peer4264: *client_host -# peer4265: *client_host -# peer4266: *client_host -# peer4267: *client_host -# peer4268: *client_host -# peer4269: *client_host -# peer4270: *client_host -# peer4271: *client_host -# peer4272: *client_host -# peer4273: *client_host -# peer4274: *client_host -# peer4275: *client_host -# peer4276: *client_host -# peer4277: *client_host -# peer4278: *client_host -# peer4279: *client_host -# peer4280: *client_host -# peer4281: *client_host -# peer4282: *client_host -# peer4283: *client_host -# peer4284: *client_host -# peer4285: *client_host -# peer4286: *client_host -# peer4287: *client_host -# peer4288: *client_host -# peer4289: *client_host -# peer4290: *client_host -# peer4291: *client_host -# peer4292: *client_host -# peer4293: *client_host -# peer4294: *client_host -# peer4295: *client_host -# peer4296: *client_host -# peer4297: *client_host -# peer4298: *client_host -# peer4299: *client_host -# peer4300: *client_host -# peer4301: *client_host -# peer4302: *client_host -# peer4303: *client_host -# peer4304: *client_host -# peer4305: *client_host -# peer4306: *client_host -# peer4307: *client_host -# peer4308: *client_host -# peer4309: *client_host -# peer4310: *client_host -# peer4311: *client_host -# peer4312: *client_host -# peer4313: *client_host -# peer4314: *client_host -# peer4315: *client_host -# peer4316: *client_host -# peer4317: *client_host -# peer4318: *client_host -# peer4319: *client_host -# peer4320: *client_host -# peer4321: *client_host -# peer4322: *client_host -# peer4323: *client_host -# peer4324: *client_host -# peer4325: *client_host -# peer4326: *client_host -# peer4327: *client_host -# peer4328: *client_host -# peer4329: *client_host -# peer4330: *client_host -# peer4331: *client_host -# peer4332: *client_host -# peer4333: *client_host -# peer4334: *client_host -# peer4335: *client_host -# peer4336: *client_host -# peer4337: *client_host -# peer4338: *client_host -# peer4339: *client_host -# peer4340: *client_host -# peer4341: *client_host -# peer4342: *client_host -# peer4343: *client_host -# peer4344: *client_host -# peer4345: *client_host -# peer4346: *client_host -# peer4347: *client_host -# peer4348: *client_host -# peer4349: *client_host -# peer4350: *client_host -# peer4351: *client_host -# peer4352: *client_host -# peer4353: *client_host -# peer4354: *client_host -# peer4355: *client_host -# peer4356: *client_host -# peer4357: *client_host -# peer4358: *client_host -# peer4359: *client_host -# peer4360: *client_host -# peer4361: *client_host -# peer4362: *client_host -# peer4363: *client_host -# peer4364: *client_host -# peer4365: *client_host -# peer4366: *client_host -# peer4367: *client_host -# peer4368: *client_host -# peer4369: *client_host -# peer4370: *client_host -# peer4371: *client_host -# peer4372: *client_host -# peer4373: *client_host -# peer4374: *client_host -# peer4375: *client_host -# peer4376: *client_host -# peer4377: *client_host -# peer4378: *client_host -# peer4379: *client_host -# peer4380: *client_host -# peer4381: *client_host -# peer4382: *client_host -# peer4383: *client_host -# peer4384: *client_host -# peer4385: *client_host -# peer4386: *client_host -# peer4387: *client_host -# peer4388: *client_host -# peer4389: *client_host -# peer4390: *client_host -# peer4391: *client_host -# peer4392: *client_host -# peer4393: *client_host -# peer4394: *client_host -# peer4395: *client_host -# peer4396: *client_host -# peer4397: *client_host -# peer4398: *client_host -# peer4399: *client_host -# peer4400: *client_host -# peer4401: *client_host -# peer4402: *client_host -# peer4403: *client_host -# peer4404: *client_host -# peer4405: *client_host -# peer4406: *client_host -# peer4407: *client_host -# peer4408: *client_host -# peer4409: *client_host -# peer4410: *client_host -# peer4411: *client_host -# peer4412: *client_host -# peer4413: *client_host -# peer4414: *client_host -# peer4415: *client_host -# peer4416: *client_host -# peer4417: *client_host -# peer4418: *client_host -# peer4419: *client_host -# peer4420: *client_host -# peer4421: *client_host -# peer4422: *client_host -# peer4423: *client_host -# peer4424: *client_host -# peer4425: *client_host -# peer4426: *client_host -# peer4427: *client_host -# peer4428: *client_host -# peer4429: *client_host -# peer4430: *client_host -# peer4431: *client_host -# peer4432: *client_host -# peer4433: *client_host -# peer4434: *client_host -# peer4435: *client_host -# peer4436: *client_host -# peer4437: *client_host -# peer4438: *client_host -# peer4439: *client_host -# peer4440: *client_host -# peer4441: *client_host -# peer4442: *client_host -# peer4443: *client_host -# peer4444: *client_host -# peer4445: *client_host -# peer4446: *client_host -# peer4447: *client_host -# peer4448: *client_host -# peer4449: *client_host -# peer4450: *client_host -# peer4451: *client_host -# peer4452: *client_host -# peer4453: *client_host -# peer4454: *client_host -# peer4455: *client_host -# peer4456: *client_host -# peer4457: *client_host -# peer4458: *client_host -# peer4459: *client_host -# peer4460: *client_host -# peer4461: *client_host -# peer4462: *client_host -# peer4463: *client_host -# peer4464: *client_host -# peer4465: *client_host -# peer4466: *client_host -# peer4467: *client_host -# peer4468: *client_host -# peer4469: *client_host -# peer4470: *client_host -# peer4471: *client_host -# peer4472: *client_host -# peer4473: *client_host -# peer4474: *client_host -# peer4475: *client_host -# peer4476: *client_host -# peer4477: *client_host -# peer4478: *client_host -# peer4479: *client_host -# peer4480: *client_host -# peer4481: *client_host -# peer4482: *client_host -# peer4483: *client_host -# peer4484: *client_host -# peer4485: *client_host -# peer4486: *client_host -# peer4487: *client_host -# peer4488: *client_host -# peer4489: *client_host -# peer4490: *client_host -# peer4491: *client_host -# peer4492: *client_host -# peer4493: *client_host -# peer4494: *client_host -# peer4495: *client_host -# peer4496: *client_host -# peer4497: *client_host -# peer4498: *client_host -# peer4499: *client_host -# peer4500: *client_host -# peer4501: *client_host -# peer4502: *client_host -# peer4503: *client_host -# peer4504: *client_host -# peer4505: *client_host -# peer4506: *client_host -# peer4507: *client_host -# peer4508: *client_host -# peer4509: *client_host -# peer4510: *client_host -# peer4511: *client_host -# peer4512: *client_host -# peer4513: *client_host -# peer4514: *client_host -# peer4515: *client_host -# peer4516: *client_host -# peer4517: *client_host -# peer4518: *client_host -# peer4519: *client_host -# peer4520: *client_host -# peer4521: *client_host -# peer4522: *client_host -# peer4523: *client_host -# peer4524: *client_host -# peer4525: *client_host -# peer4526: *client_host -# peer4527: *client_host -# peer4528: *client_host -# peer4529: *client_host -# peer4530: *client_host -# peer4531: *client_host -# peer4532: *client_host -# peer4533: *client_host -# peer4534: *client_host -# peer4535: *client_host -# peer4536: *client_host -# peer4537: *client_host -# peer4538: *client_host -# peer4539: *client_host -# peer4540: *client_host -# peer4541: *client_host -# peer4542: *client_host -# peer4543: *client_host -# peer4544: *client_host -# peer4545: *client_host -# peer4546: *client_host -# peer4547: *client_host -# peer4548: *client_host -# peer4549: *client_host -# peer4550: *client_host -# peer4551: *client_host -# peer4552: *client_host -# peer4553: *client_host -# peer4554: *client_host -# peer4555: *client_host -# peer4556: *client_host -# peer4557: *client_host -# peer4558: *client_host -# peer4559: *client_host -# peer4560: *client_host -# peer4561: *client_host -# peer4562: *client_host -# peer4563: *client_host -# peer4564: *client_host -# peer4565: *client_host -# peer4566: *client_host -# peer4567: *client_host -# peer4568: *client_host -# peer4569: *client_host -# peer4570: *client_host -# peer4571: *client_host -# peer4572: *client_host -# peer4573: *client_host -# peer4574: *client_host -# peer4575: *client_host -# peer4576: *client_host -# peer4577: *client_host -# peer4578: *client_host -# peer4579: *client_host -# peer4580: *client_host -# peer4581: *client_host -# peer4582: *client_host -# peer4583: *client_host -# peer4584: *client_host -# peer4585: *client_host -# peer4586: *client_host -# peer4587: *client_host -# peer4588: *client_host -# peer4589: *client_host -# peer4590: *client_host -# peer4591: *client_host -# peer4592: *client_host -# peer4593: *client_host -# peer4594: *client_host -# peer4595: *client_host -# peer4596: *client_host -# peer4597: *client_host -# peer4598: *client_host -# peer4599: *client_host -# peer4600: *client_host -# peer4601: *client_host -# peer4602: *client_host -# peer4603: *client_host -# peer4604: *client_host -# peer4605: *client_host -# peer4606: *client_host -# peer4607: *client_host -# peer4608: *client_host -# peer4609: *client_host -# peer4610: *client_host -# peer4611: *client_host -# peer4612: *client_host -# peer4613: *client_host -# peer4614: *client_host -# peer4615: *client_host -# peer4616: *client_host -# peer4617: *client_host -# peer4618: *client_host -# peer4619: *client_host -# peer4620: *client_host -# peer4621: *client_host -# peer4622: *client_host -# peer4623: *client_host -# peer4624: *client_host -# peer4625: *client_host -# peer4626: *client_host -# peer4627: *client_host -# peer4628: *client_host -# peer4629: *client_host -# peer4630: *client_host -# peer4631: *client_host -# peer4632: *client_host -# peer4633: *client_host -# peer4634: *client_host -# peer4635: *client_host -# peer4636: *client_host -# peer4637: *client_host -# peer4638: *client_host -# peer4639: *client_host -# peer4640: *client_host -# peer4641: *client_host -# peer4642: *client_host -# peer4643: *client_host -# peer4644: *client_host -# peer4645: *client_host -# peer4646: *client_host -# peer4647: *client_host -# peer4648: *client_host -# peer4649: *client_host -# peer4650: *client_host -# peer4651: *client_host -# peer4652: *client_host -# peer4653: *client_host -# peer4654: *client_host -# peer4655: *client_host -# peer4656: *client_host -# peer4657: *client_host -# peer4658: *client_host -# peer4659: *client_host -# peer4660: *client_host -# peer4661: *client_host -# peer4662: *client_host -# peer4663: *client_host -# peer4664: *client_host -# peer4665: *client_host -# peer4666: *client_host -# peer4667: *client_host -# peer4668: *client_host -# peer4669: *client_host -# peer4670: *client_host -# peer4671: *client_host -# peer4672: *client_host -# peer4673: *client_host -# peer4674: *client_host -# peer4675: *client_host -# peer4676: *client_host -# peer4677: *client_host -# peer4678: *client_host -# peer4679: *client_host -# peer4680: *client_host -# peer4681: *client_host -# peer4682: *client_host -# peer4683: *client_host -# peer4684: *client_host -# peer4685: *client_host -# peer4686: *client_host -# peer4687: *client_host -# peer4688: *client_host -# peer4689: *client_host -# peer4690: *client_host -# peer4691: *client_host -# peer4692: *client_host -# peer4693: *client_host -# peer4694: *client_host -# peer4695: *client_host -# peer4696: *client_host -# peer4697: *client_host -# peer4698: *client_host -# peer4699: *client_host -# peer4700: *client_host -# peer4701: *client_host -# peer4702: *client_host -# peer4703: *client_host -# peer4704: *client_host -# peer4705: *client_host -# peer4706: *client_host -# peer4707: *client_host -# peer4708: *client_host -# peer4709: *client_host -# peer4710: *client_host -# peer4711: *client_host -# peer4712: *client_host -# peer4713: *client_host -# peer4714: *client_host -# peer4715: *client_host -# peer4716: *client_host -# peer4717: *client_host -# peer4718: *client_host -# peer4719: *client_host -# peer4720: *client_host -# peer4721: *client_host -# peer4722: *client_host -# peer4723: *client_host -# peer4724: *client_host -# peer4725: *client_host -# peer4726: *client_host -# peer4727: *client_host -# peer4728: *client_host -# peer4729: *client_host -# peer4730: *client_host -# peer4731: *client_host -# peer4732: *client_host -# peer4733: *client_host -# peer4734: *client_host -# peer4735: *client_host -# peer4736: *client_host -# peer4737: *client_host -# peer4738: *client_host -# peer4739: *client_host -# peer4740: *client_host -# peer4741: *client_host -# peer4742: *client_host -# peer4743: *client_host -# peer4744: *client_host -# peer4745: *client_host -# peer4746: *client_host -# peer4747: *client_host -# peer4748: *client_host -# peer4749: *client_host -# peer4750: *client_host -# peer4751: *client_host -# peer4752: *client_host -# peer4753: *client_host -# peer4754: *client_host -# peer4755: *client_host -# peer4756: *client_host -# peer4757: *client_host -# peer4758: *client_host -# peer4759: *client_host -# peer4760: *client_host -# peer4761: *client_host -# peer4762: *client_host -# peer4763: *client_host -# peer4764: *client_host -# peer4765: *client_host -# peer4766: *client_host -# peer4767: *client_host -# peer4768: *client_host -# peer4769: *client_host -# peer4770: *client_host -# peer4771: *client_host -# peer4772: *client_host -# peer4773: *client_host -# peer4774: *client_host -# peer4775: *client_host -# peer4776: *client_host -# peer4777: *client_host -# peer4778: *client_host -# peer4779: *client_host -# peer4780: *client_host -# peer4781: *client_host -# peer4782: *client_host -# peer4783: *client_host -# peer4784: *client_host -# peer4785: *client_host -# peer4786: *client_host -# peer4787: *client_host -# peer4788: *client_host -# peer4789: *client_host -# peer4790: *client_host -# peer4791: *client_host -# peer4792: *client_host -# peer4793: *client_host -# peer4794: *client_host -# peer4795: *client_host -# peer4796: *client_host -# peer4797: *client_host -# peer4798: *client_host -# peer4799: *client_host -# peer4800: *client_host -# peer4801: *client_host -# peer4802: *client_host -# peer4803: *client_host -# peer4804: *client_host -# peer4805: *client_host -# peer4806: *client_host -# peer4807: *client_host -# peer4808: *client_host -# peer4809: *client_host -# peer4810: *client_host -# peer4811: *client_host -# peer4812: *client_host -# peer4813: *client_host -# peer4814: *client_host -# peer4815: *client_host -# peer4816: *client_host -# peer4817: *client_host -# peer4818: *client_host -# peer4819: *client_host -# peer4820: *client_host -# peer4821: *client_host -# peer4822: *client_host -# peer4823: *client_host -# peer4824: *client_host -# peer4825: *client_host -# peer4826: *client_host -# peer4827: *client_host -# peer4828: *client_host -# peer4829: *client_host -# peer4830: *client_host -# peer4831: *client_host -# peer4832: *client_host -# peer4833: *client_host -# peer4834: *client_host -# peer4835: *client_host -# peer4836: *client_host -# peer4837: *client_host -# peer4838: *client_host -# peer4839: *client_host -# peer4840: *client_host -# peer4841: *client_host -# peer4842: *client_host -# peer4843: *client_host -# peer4844: *client_host -# peer4845: *client_host -# peer4846: *client_host -# peer4847: *client_host -# peer4848: *client_host -# peer4849: *client_host -# peer4850: *client_host -# peer4851: *client_host -# peer4852: *client_host -# peer4853: *client_host -# peer4854: *client_host -# peer4855: *client_host -# peer4856: *client_host -# peer4857: *client_host -# peer4858: *client_host -# peer4859: *client_host -# peer4860: *client_host -# peer4861: *client_host -# peer4862: *client_host -# peer4863: *client_host -# peer4864: *client_host -# peer4865: *client_host -# peer4866: *client_host -# peer4867: *client_host -# peer4868: *client_host -# peer4869: *client_host -# peer4870: *client_host -# peer4871: *client_host -# peer4872: *client_host -# peer4873: *client_host -# peer4874: *client_host -# peer4875: *client_host -# peer4876: *client_host -# peer4877: *client_host -# peer4878: *client_host -# peer4879: *client_host -# peer4880: *client_host -# peer4881: *client_host -# peer4882: *client_host -# peer4883: *client_host -# peer4884: *client_host -# peer4885: *client_host -# peer4886: *client_host -# peer4887: *client_host -# peer4888: *client_host -# peer4889: *client_host -# peer4890: *client_host -# peer4891: *client_host -# peer4892: *client_host -# peer4893: *client_host -# peer4894: *client_host -# peer4895: *client_host -# peer4896: *client_host -# peer4897: *client_host -# peer4898: *client_host -# peer4899: *client_host -# peer4900: *client_host -# peer4901: *client_host -# peer4902: *client_host -# peer4903: *client_host -# peer4904: *client_host -# peer4905: *client_host -# peer4906: *client_host -# peer4907: *client_host -# peer4908: *client_host -# peer4909: *client_host -# peer4910: *client_host -# peer4911: *client_host -# peer4912: *client_host -# peer4913: *client_host -# peer4914: *client_host -# peer4915: *client_host -# peer4916: *client_host -# peer4917: *client_host -# peer4918: *client_host -# peer4919: *client_host -# peer4920: *client_host -# peer4921: *client_host -# peer4922: *client_host -# peer4923: *client_host -# peer4924: *client_host -# peer4925: *client_host -# peer4926: *client_host -# peer4927: *client_host -# peer4928: *client_host -# peer4929: *client_host -# peer4930: *client_host -# peer4931: *client_host -# peer4932: *client_host -# peer4933: *client_host -# peer4934: *client_host -# peer4935: *client_host -# peer4936: *client_host -# peer4937: *client_host -# peer4938: *client_host -# peer4939: *client_host -# peer4940: *client_host -# peer4941: *client_host -# peer4942: *client_host -# peer4943: *client_host -# peer4944: *client_host -# peer4945: *client_host -# peer4946: *client_host -# peer4947: *client_host -# peer4948: *client_host -# peer4949: *client_host -# peer4950: *client_host -# peer4951: *client_host -# peer4952: *client_host -# peer4953: *client_host -# peer4954: *client_host -# peer4955: *client_host -# peer4956: *client_host -# peer4957: *client_host -# peer4958: *client_host -# peer4959: *client_host -# peer4960: *client_host -# peer4961: *client_host -# peer4962: *client_host -# peer4963: *client_host -# peer4964: *client_host -# peer4965: *client_host -# peer4966: *client_host -# peer4967: *client_host -# peer4968: *client_host -# peer4969: *client_host -# peer4970: *client_host -# peer4971: *client_host -# peer4972: *client_host -# peer4973: *client_host -# peer4974: *client_host -# peer4975: *client_host -# peer4976: *client_host -# peer4977: *client_host -# peer4978: *client_host -# peer4979: *client_host -# peer4980: *client_host -# peer4981: *client_host -# peer4982: *client_host -# peer4983: *client_host -# peer4984: *client_host -# peer4985: *client_host -# peer4986: *client_host -# peer4987: *client_host -# peer4988: *client_host -# peer4989: *client_host -# peer4990: *client_host -# peer4991: *client_host -# peer4992: *client_host -# peer4993: *client_host -# peer4994: *client_host -# peer4995: *client_host -# peer4996: *client_host -# peer4997: *client_host -# peer4998: *client_host -# peer4999: *client_host -# peer5000: *client_host diff --git a/shadow/summary_dontwant.awk b/shadow/summary_dontwant.awk new file mode 100644 index 0000000..3f4e214 --- /dev/null +++ b/shadow/summary_dontwant.awk @@ -0,0 +1,30 @@ +BEGIN { + FS = " "; #default column separator + idontwant_saves = min_idontwant = max_idontwant = 0; + dup_received = min_dup = max_dup = 0; + unique_msg_received = 0; + stagger_saves = 0; + stagger_DontWantSaves = 0; +} + +{ + #print $5, $7, $9 + idontwant_saves += $5 + if ($5 < min_idontwant || min_idontwant == 0) min_idontwant = $5 + if ($5 > max_idontwant) max_idontwant = $5 + + dup_received += $7 + if ($7 < min_dup || min_dup == 0) min_dup = $7 + if ($7 > max_dup) max_dup = $7 + + unique_msg_received += $9 + stagger_saves += $11 + stagger_DontWantSaves += $13 + +} + +END { + print "idontwant_saves min, max, avg, total : ", min_idontwant, "\t", max_idontwant, "\t", idontwant_saves/NR, "\t", idontwant_saves + print "dup_received min, max, avg, total : ", min_dup, "\t", max_dup, "\t", dup_received/NR, "\t", dup_received + print "Unique_msg_received: ", unique_msg_received, "\tStagger Saves : ", stagger_saves, "\tStaggerDontWantSaves", stagger_DontWantSaves +} diff --git a/shadow/summary_latency.awk b/shadow/summary_latency.awk new file mode 100644 index 0000000..f31d4e9 --- /dev/null +++ b/shadow/summary_latency.awk @@ -0,0 +1,49 @@ +# we parse the latencies(x) file produced by run.sh to receive results summary (Max/Avg Latency --> per packet, overall) +# runs $awk -f result_summary.awk latencies(x) + +BEGIN { + FS = " "; #default column separator + network_size = 0 + max_nw_lat = sum_nw_lat = 0 + hop_lat = 100 #should be consistent with shadow.yaml +} + +{ + clean_int = $3 + gsub(/[^0-9]/, "", clean_int); + if ($3 == clean_int){ #get rid of unwanted rows + sum_nw_lat += $NF + if (max_nw_lat < $NF) {max_nw_lat = $NF} + if (split($1, arr, "peer|/main|:.*:")) { + #$3 = rx_latency, arr[4] = publish_time, arr[2] = peerID + lat_arr[arr[4], $3]++; + msg_arr[arr[4]] = 1; #we maintain set of messages identified by their publish time + if (network_size < arr[2]) {network_size = arr[2]} + } + } +} + +END { + + print "Total Nodes : ", network_size, "Total Messages Published : ", length(msg_arr), + "Network Latency\t MAX : ", max_nw_lat, "\tAverage : ", sum_nw_lat/NR + print " Message ID \t Avg Latency \t Messages Received" + for (value in msg_arr) { + sum_rx_msgs = 0; + latency = 0; + for (key in lat_arr) { + split(key, parts, SUBSEP); + if (parts[1] == value) { + sum_rx_msgs = sum_rx_msgs + lat_arr[key]; #total receives / message + latency = latency + (lat_arr[key] * parts[2]) + spread[ int((parts[2]) / hop_lat) ] = lat_arr[key] #hop-by-hop spread count of messages + } + } + + print value, "\t", latency/sum_rx_msgs, "\t ", sum_rx_msgs, "spread is", + spread[1], spread[2], spread[3], spread[4], spread[5], spread[6], spread[7] + delete spread + } +} + + diff --git a/shadow/summary_latency_large.awk b/shadow/summary_latency_large.awk new file mode 100644 index 0000000..1e49a99 --- /dev/null +++ b/shadow/summary_latency_large.awk @@ -0,0 +1,73 @@ +# we parse the latencies(x) file produced by run.sh to receive results summary (Max/Avg Latency --> per packet, overall) +# runs $awk -f result_summary.awk latencies(x) + +BEGIN { + FS = " "; #default column separator + network_size = 0 + max_nw_lat = sum_nw_lat = sum_max_delays = 0 + hop_lat = 100 #should be consistent with shadow.yaml +} + +{ + clean_int = $3 + gsub(/[^0-9]/, "", clean_int); + if ($3 == clean_int){ #get rid of unwanted rows + sum_nw_lat += $NF + if (max_nw_lat < $NF) {max_nw_lat = $NF} + if (split($1, arr, "peer|/main|:.*:")) { + #$3 = rx_latency, arr[4] = publish_time, arr[2] = peerID + + #We compute network-wide dissemination latency for each message + if (max_msg_latency[arr[4]] < $NF) {max_msg_latency[arr[4]] = $NF} + + #we round to values to nearest hop_lat to estimate hop coverage + rounded_RxTime = (int($3/hop_lat + 0.5)) * hop_lat + lat_arr[arr[4], rounded_RxTime]++; + msg_arr[arr[4]] = 1; #we maintain set of messages identified by their publish time + if (network_size < arr[2]) {network_size = arr[2]} + } + } +} + +END { + + print "Total Nodes : ", network_size, "Total Messages Published : ", length(msg_arr), + "Network Latency\t MAX : ", max_nw_lat, "\tAverage : ", sum_nw_lat/NR + print " Message ID \t Avg Latency \t Messages Received" + for (value in msg_arr) { + sum_rx_msgs = 0; + latency = 0; + spread[1] = spread[2] = spread[3] = spread[4] = spread[5] = spread[6] = spread[7] = spread[8] = spread[9] = 0 + spread[10] = spread[11] = spread[12] = spread[13] = spread[14] = spread[15] = spread[16] = spread[17] = spread[18] = 0 + for (key in lat_arr) { + split(key, parts, SUBSEP); + if (parts[1] == value) { + #parts[2] recv time + #10% 20% 30%....90% under parts[2] + sum_rx_msgs = sum_rx_msgs + lat_arr[key]; #total receives / message + latency = latency + (lat_arr[key] * parts[2]) + spread[ int((parts[2]) / hop_lat) ] = lat_arr[key] #hop-by-hop spread count of messages + } + } + + print value, "\t", latency/sum_rx_msgs, "\t ", sum_rx_msgs, "spread is", + spread[1], spread[2], spread[3], spread[4], spread[5], spread[6], spread[7], spread[8], spread[9], + spread[10], spread[11], spread[12], spread[13], spread[14], spread[15], spread[16], spread[17], spread[18], + spread[19], spread[20], spread[21], spread[22], spread[23], spread[24], spread[25], spread[26], spread[27], + spread[28], spread[29], spread[30], spread[31], spread[32], spread[33], spread[34], spread[35], spread[36], + spread[37], spread[38], spread[39], spread[40], spread[41], spread[42], spread[43], spread[44], spread[45], + spread[46], spread[47], spread[48], spread[49], spread[50], spread[51], spread[52], spread[53], spread[54] + delete spread + } + + for (delay_val in max_msg_latency) { + print "MAX delay for ", delay_val, "is \t", max_msg_latency[delay_val] + sum_max_delays = sum_max_delays + max_msg_latency[delay_val] + } + + print "Total Messages Published : ", length(max_msg_latency), "Average Max Message Dissemination Latency : ", sum_max_delays/length(max_msg_latency) + + +} + + diff --git a/shadow/summary_shadowlog.awk b/shadow/summary_shadowlog.awk new file mode 100644 index 0000000..4fac407 --- /dev/null +++ b/shadow/summary_shadowlog.awk @@ -0,0 +1,145 @@ +BEGIN { + FS = " "; #column separator + fg_index = 7 #flags start index in $10 + flag_size = 12 #size of flags + local_in = 0 #inbound-localhost-counters + local_out = 1 #outbound-localhost-counters + remote_in = 2 #inbound-remote-counters + remote_out = 3 #outbound-remote-counters +} + +{ + if ($9 == "[node]") { + #$5: peer info, $10: traffic stats, we need to split + peerlist[$5] = 1 #list for all peers + + if (split($10, arr, ",|;")) { + #arr[2]: received bytes, arr[3]: transferred bytes + if (arr[2] > 0) {sum_rx[$5] += arr[2]} #bytes received + if (arr[3] > 0) {sum_tx[$5] += arr[3]} #bytes transferred + + #inbound-localhost-counters + idx = fg_index + (flag_size * local_in) + #if (arr[idx] > 0) { + local_in_pkt[$5] += arr[idx] + local_in_bytes[$5] += arr[idx+1] + local_in_ctrl_pkt[$5] += arr[idx+2] + local_in_ctrl_hdr_bytes[$5] += arr[idx+3] + local_in_data_pkt[$5] += arr[idx+6] + local_in_data_hdr_bytes[$5] += arr[idx+7] + local_in_data_bytes[$5] += arr[idx+8] + #} + #outbound-localhost-counters + idx = fg_index + (flag_size * local_out) + #if (arr[idx] > 0) { + local_out_pkt[$5] += arr[idx] + local_out_bytes[$5] += arr[idx+1] + local_out_ctrl_pkt[$5] += arr[idx+2] + local_out_ctrl_hdr_bytes[$5] += arr[idx+3] + local_out_data_pkt[$5] += arr[idx+6] + local_out_data_hdr_bytes[$5] += arr[idx+7] + local_out_data_bytes[$5] += arr[idx+8] + #} + #inbound-remote-counters + idx = fg_index + (flag_size * remote_in) + #if (arr[idx] > 0) { + remote_in_pkt[$5] += arr[idx] + remote_in_bytes[$5] += arr[idx+1] + remote_in_ctrl_pkt[$5] += arr[idx+2] + remote_in_ctrl_hdr_bytes[$5] += arr[idx+3] + remote_in_data_pkt[$5] += arr[idx+6] + remote_in_data_hdr_bytes[$5] += arr[idx+7] + remote_in_data_bytes[$5] += arr[idx+8] + #} + #outbound-remote-counters + idx = fg_index + (flag_size * remote_out) + #if (arr[idx] > 0) { + remote_out_pkt[$5] += arr[idx] + remote_out_bytes[$5] += arr[idx+1] + remote_out_ctrl_pkt[$5] += arr[idx+2] + remote_out_ctrl_hdr_bytes[$5] += arr[idx+3] + remote_out_data_pkt[$5] += arr[idx+6] + remote_out_data_hdr_bytes[$5] += arr[idx+7] + remote_out_data_bytes[$5] += arr[idx+8] + #} + + } + } +} + +END { + nw_size = length(peerlist) + min_in = max_in = min_out = max_out = sum_in = sum_out = avg_in = avg_out = 0 + for (value in peerlist) { #node specific tx/rx stats (bytes) + sum_in += sum_rx[value] + sum_out += sum_tx[value] + + if (sum_rx[value] < min_in || min_in == 0) min_in = sum_rx[value] + if (sum_tx[value] < min_out || min_out == 0) min_out = sum_tx[value] + if (sum_rx[value] > max_in) max_in = sum_rx[value] + if (sum_tx[value] > max_out) max_out = sum_tx[value] + } + avg_in = sum_in/nw_size + avg_out = sum_out/nw_size + + + + for (value in peerlist) { + + sum_sq_in += (sum_rx[value] - avg_in) ^ 2 #for stddev + sum_sq_out += (sum_tx[value] - avg_out) ^ 2 + + sum_local_in_pkt += local_in_pkt[value] + sum_local_in_bytes += local_in_bytes[value] + sum_local_in_ctrl_pkt += local_in_ctrl_pkt[value] + sum_local_in_ctrl_hdr_bytes += local_in_ctrl_hdr_bytes[value] + sum_local_in_data_pkt += local_in_data_pkt[value] + sum_local_in_data_hdr_bytes += local_in_data_hdr_bytes[value] + sum_local_in_data_bytes += local_in_data_bytes[value] + + sum_local_out_pkt += local_out_pkt[value] + sum_local_out_bytes += local_out_bytes[value] + sum_local_out_ctrl_pkt += local_out_ctrl_pkt[value] + sum_local_out_ctrl_hdr_bytes += local_out_ctrl_hdr_bytes[value] + sum_local_out_data_pkt += local_out_data_pkt[value] + sum_local_out_data_hdr_bytes += local_out_data_hdr_bytes[value] + sum_local_out_data_bytes += local_out_data_bytes[value] + + sum_remote_in_pkt += remote_in_pkt[value] + sum_romote_in_bytes += remote_in_bytes[value] + sum_remote_in_ctrl_pkt += remote_in_ctrl_pkt[value] + sum_remote_in_ctrl_hdr_bytes += remote_in_ctrl_hdr_bytes[value] + sum_remote_in_data_pkt += remote_in_data_pkt[value] + sum_remote_in_data_hdr_bytes += remote_in_data_hdr_bytes[value] + sum_remote_in_data_bytes +=remote_in_data_bytes[value] + + sum_remote_out_pkt +=remote_out_pkt[value] + sum_remote_out_bytes +=remote_out_bytes[value] + sum_remote_out_ctrl_pkt +=remote_out_ctrl_pkt[value] + sum_remote_out_ctrl_hdr_bytes +=remote_out_ctrl_hdr_bytes[value] + sum_remote_out_data_pkt +=remote_out_data_pkt[value] + sum_remote_out_data_hdr_bytes +=remote_out_data_hdr_bytes[value] + sum_remote_out_data_bytes +=remote_out_data_bytes[value] + + #} + } + + print "\nTotal Bytes Received : ", sum_in, "Total Bytes Transferred : ", sum_out + print "Per Node Pkt Receives : min, max, avg, stddev = ", min_in, max_in, avg_in, sqrt(sum_sq_in/nw_size) + print "Per Node Pkt Transfers: min, max, avg, stddev = ", min_out, max_out, avg_out, sqrt(sum_sq_out/nw_size) + + + print "Details..." + #print "Local IN pkt: ", sum_local_in_pkt, "Bytes : ", sum_local_in_bytes, "ctrlPkt: ", sum_local_in_ctrl_pkt, "ctrlHdrBytes: ", sum_local_in_ctrl_hdr_bytes, + # "DataPkt: ", sum_local_in_data_pkt, "DataHdrBytes: ", sum_local_in_data_hdr_bytes, "DataBytes", sum_local_in_data_bytes + #print "Local OUT pkt: ", sum_local_out_pkt, "Bytes : ", sum_local_out_bytes, "ctrlPkt: ", sum_local_out_ctrl_pkt, "ctrlHdrBytes: ", sum_local_out_ctrl_hdr_bytes, + # "DataPkt: ", sum_local_out_data_pkt, "DataHdrBytes: ", sum_local_out_data_hdr_bytes, "DataBytes", sum_local_out_data_bytes + print "Remote IN pkt: ", sum_remote_in_pkt, "Bytes : ", sum_romote_in_bytes, "ctrlPkt: ", sum_remote_in_ctrl_pkt, "ctrlHdrBytes: ", sum_remote_in_ctrl_hdr_bytes, + "DataPkt: ", sum_remote_in_data_pkt, "DataHdrBytes: ", sum_remote_in_data_hdr_bytes, "DataBytes", sum_remote_in_data_bytes + print "Remote OUT pkt: ", sum_remote_out_pkt, "Bytes : ", sum_romote_out_bytes, "ctrlPkt: ", sum_remote_out_ctrl_pkt, "ctrlHdrBytes: ", sum_remote_out_ctrl_hdr_bytes, + "DataPkt: ", sum_remote_out_data_pkt, "DataHdrBytes: ", sum_remote_out_data_hdr_bytes, "DataBytes", sum_remote_out_data_bytes + + +} + + diff --git a/shadow/topogen.py b/shadow/topogen.py new file mode 100644 index 0000000..2499128 --- /dev/null +++ b/shadow/topogen.py @@ -0,0 +1,106 @@ +import sys, math, networkx as nx + +args = sys.argv +if len(args) != 11: + print("Usage: python topogen.py \ + ") + print("Please note that bandwith and latency are integer values in Mbps and ms respectively") + print("Anchor stages represent the number of bandwidth and latency variations") + print("packet_loss [0-1], Message size [KB], num_frags [number of fragments/message 1-10], num_publishers [number of publishers]") + exit(-1) + +print (args[1:]) +try: + networkSize = int(args[1]) + minBandwidth = int(args[2]) + maxBandwidth = int(args[3]) + minLatency = int(args[4]) + maxLatency = int(args[5]) + steps = int(args[6]) + packetLoss = float(args[7]) + messageSize = int(args[8]) + numFrags = int(args[9]) + numPublishers = int(args[10]) + +except ValueError: + print("Usage: python topogen.py \ + ") + print("Please note that bandwith and latency are integer values in Mbps and ms respectively") + print("Anchor stages represent the number of bandwidth and latency variations") + print("packet_loss [0-1], Message size [KB], num_frags [number of fragments/message 1-10], num_publishers [number of publishers]") + exit(-1) + +gml_file = "network_topology.gml" #network topology layout in gml format, to be used by the yaml file +yaml_file = "shadow.yaml" #shadow simulator settings +connections = 5 #Initial connections to form full-message mesh +bandwidthJump = (maxBandwidth-minBandwidth)/(steps-1) +latencyJump = int((maxLatency-minLatency)/steps) + +""" +We create network work graph, with 'steps' number of independent nodes. And all the nodes must be connected. +Shadow uses accumulative edge latencies to route traffic through the shortest paths (accumulative link latencies) + +Multiple hosts can connect with a single node. The node must define 'host_bandwidth_up' and 'host_bandwidth_down' +bandwidths, and each connected host gets this bandwidth allocated (bandwidth is not shared between hosts) + +We MUST have an edge connecting a node to itself. All the Intra-node communications (among the hosts connected to +the same node) happen by using that edge. + +latency and packet loss are edge characteristics +""" + +G=nx.complete_graph(steps) + +for i in range(0, steps): + nodeBw = str(math.ceil(i * bandwidthJump + minBandwidth)) + " Mbit" + G.nodes[i]["hostbandwidthup"] = nodeBw + G.nodes[i]["hostbandwidthdown"] = nodeBw + G.add_edge(i,i) + G.edges[i,i]["latency"] = str( max((steps-i)*latencyJump, minLatency) ) + " ms" + G.edges[i,i]["packetloss"] = packetLoss + + for j in range(i+1, steps): + edgeLatency = min(math.ceil((steps-j)*latencyJump + minLatency), maxLatency) + G.edges[i,j]["latency"] = str(edgeLatency) + " ms" + G.edges[i,j]["packetloss"] = packetLoss + +nx.write_gml(G, gml_file) + + +#networkx package can not write underscores. so we created gml without underscores. Now we embed them underscores +with open(gml_file, 'r') as file: + gml_content = file.read() + +modified_content = gml_content.replace("hostbandwidth", "host_bandwidth_") +modified_content = modified_content.replace("packetloss", "packet_loss") + +with open(gml_file, "w") as file: + file.write(modified_content) + + +#we created the gml. now we create the yaml file required by shadow +m1 = "\n network_node_id: " +m2 = "\n processes:" +m3 = "\n - path: ./main" +m4 = "\n start_time: 5s" + +with open(yaml_file, "w") as file: + file.write("general:\n bootstrap_end_time: 10s\n heartbeat_interval: 12s\n stop_time: 15m\n") + file.write(" progress: true\n\nexperimental:\n use_memory_manager: false\n\n") + file.write("network:\n graph:\n type: gml\n file:\n path: " + gml_file) + file.write("\n\nhosts:\n") + + #we create 'steps' number of template peers, to be used by the remaining peers + for i in range(0,steps): + file.write(" peer" + str(i+1) + ": &client_host" + str(i)) + file.write(m1 + str(i) + m2 + m3 + m4) + file.write("\n environment: {\"PEERS\": \"" + str(networkSize) + + "\", \"CONNECTTO\": \"" + str(connections) + + "\", \"MSG_SIZE\": \"" + str(messageSize) + + "\", \"FRAGMENTS\": \"" + str(numFrags) + + "\", \"PUBLISHERS\": \"" + str(numPublishers) + "\"}\n") + + #we populate remaining peers on populated samples + for i in range(steps, networkSize): + file.write(" peer" + str(i+1) + ": *client_host" + str(i%steps) + "\n") +