Skip to content

Instantly share code, notes, and snippets.

@lucasmenendez
Last active December 22, 2023 09:25
Show Gist options
  • Select an option

  • Save lucasmenendez/36fc09785c9efbc60e92d51b2c84a3ce to your computer and use it in GitHub Desktop.

Select an option

Save lucasmenendez/36fc09785c9efbc60e92d51b2c84a3ce to your computer and use it in GitHub Desktop.

Revisions

  1. lucasmenendez revised this gist Dec 22, 2023. 4 changed files with 70 additions and 4 deletions.
    20 changes: 20 additions & 0 deletions csv_to_json.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,20 @@
    import argparse, json, csv, decimal

    parser = argparse.ArgumentParser(description="Convert Etherscan holders csv to json")
    parser.add_argument('-i', '--csv', help="Etherscan holders csv")
    parser.add_argument('-o', '--json', help="Output json file")
    args = parser.parse_args()


    with open(args.csv) as f:
    reader = csv.DictReader(f)
    rows = list(reader)

    holders = {}
    for row in rows:
    strBalance = row['Balance'].replace(',', '')
    balance = decimal.Decimal(strBalance) * 10**18
    holders[row['HolderAddress']] = str(balance).split('.')[0]

    with open(args.json, 'w') as f:
    json.dump(holders, f, indent=2)
    44 changes: 44 additions & 0 deletions diff_holders.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,44 @@
    import argparse, json

    parser = argparse.ArgumentParser(description="Calculate diff between holder lists")
    parser.add_argument('-a', '--a', help="First json file")
    parser.add_argument('-b', '--b', help="Second json file")
    parser.add_argument('-o', '--output', help="Output json file")
    args = parser.parse_args()

    with open(args.a) as f:
    a_data = json.load(f)
    a = {k.lower(): v for k, v in a_data.items()}

    with open(args.b) as f:
    b_data = json.load(f)
    b = {k.lower(): v for k, v in b_data.items()}


    different_values = {}
    only_in_a = {}
    for key in a:
    if key in b:
    if a[key] != b[key]:
    different_values[key] = {
    "a": a[key],
    "b": b[key]
    }
    else:
    only_in_a[key] = a[key]
    continue

    only_in_b = {}
    for key in b:
    if key not in b:
    only_in_b[key] = b[key]

    print('Only in A:', len(only_in_a))
    print('Only in B:', len(only_in_b))

    with open(args.output, 'w') as f:
    json.dump({
    "only_in_a": only_in_a,
    "only_in_b": only_in_b,
    "different_value": different_values
    }, f, indent=2)
    3 changes: 2 additions & 1 deletion go.mod
    Original file line number Diff line number Diff line change
    @@ -3,7 +3,7 @@ module census3-tester
    go 1.21.1

    require (
    go.vocdoni.io/dvote v1.10.2-0.20231213100622-f43228481b20
    go.vocdoni.io/dvote v1.10.2-0.20231221141528-e63662105a25
    go.vocdoni.io/proto v1.15.4-0.20231023165811-02adcc48142a
    )

    @@ -21,6 +21,7 @@ require (
    github.com/beorn7/perks v1.0.1 // indirect
    github.com/blang/semver/v4 v4.0.0 // indirect
    github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
    github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 // indirect
    github.com/cenkalti/backoff/v4 v4.2.1 // indirect
    github.com/ceramicnetwork/go-dag-jose v0.1.0 // indirect
    github.com/cespare/xxhash/v2 v2.2.0 // indirect
    7 changes: 4 additions & 3 deletions go.sum
    Original file line number Diff line number Diff line change
    @@ -88,10 +88,11 @@ github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM
    github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
    github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
    github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI=
    github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw=
    github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
    github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=
    github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
    github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 h1:KdUfX2zKommPRa+PD0sWZUyXe9w277ABlgELO7H04IM=
    github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
    github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
    github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
    github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
    @@ -1176,8 +1177,8 @@ go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
    go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
    go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
    go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
    go.vocdoni.io/dvote v1.10.2-0.20231213100622-f43228481b20 h1:6wYZWjlPfEcSuOdo5fyqavkDQ7Fm+eASsU5lRZxXyUU=
    go.vocdoni.io/dvote v1.10.2-0.20231213100622-f43228481b20/go.mod h1:7GQQHmBUlr5mEV82apw1hnx21Vrxy+ioyklZG+wyL7w=
    go.vocdoni.io/dvote v1.10.2-0.20231221141528-e63662105a25 h1:vn3/zJlQcqurGVRU6PFxdcyYJ75H8CFCpRmjLELpBjw=
    go.vocdoni.io/dvote v1.10.2-0.20231221141528-e63662105a25/go.mod h1:7GQQHmBUlr5mEV82apw1hnx21Vrxy+ioyklZG+wyL7w=
    go.vocdoni.io/proto v1.15.4-0.20231023165811-02adcc48142a h1:88Dg0JNhT9004TuZoHIX44zkaHkInKgBgBaA0S12cYY=
    go.vocdoni.io/proto v1.15.4-0.20231023165811-02adcc48142a/go.mod h1:oi/WtiBFJ6QwNDv2aUQYwOnUKzYuS/fBqXF8xDNwcGo=
    go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
  2. lucasmenendez revised this gist Dec 15, 2023. 1 changed file with 11 additions and 6 deletions.
    17 changes: 11 additions & 6 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -27,22 +27,21 @@ func main() {
    // parse flags
    ipfsKey := flag.String("ipfs-key", "", "IPFS key to use")
    uri := flag.String("uri", "", "IPFS URI of the census")
    dump := flag.String("dump", "", "the data dump of the census")
    dumpPath := flag.String("dump", "", "the path of the census dump")
    save := flag.Bool("save", false, "save the census to a file")
    flag.Parse()
    if (uri == nil || *uri == "") && (dump == nil || *dump == "") {
    log.Fatal("IPFS URI or data dump required. Use -uri or -dump flags")
    if (uri == nil || *uri == "") && (dumpPath == nil || *dumpPath == "") {
    log.Fatal("IPFS URI or dump path required. Use -uri or -dump flags")
    }
    // init temp folder and defer its removal
    testTempPath := "./temp"
    defer os.RemoveAll(testTempPath)

    ipfsData := []byte(*dump)
    ipfsData := []byte{}
    if uri != nil && *uri != "" {
    log.Println("Downloading census from IPFS...")
    // init ipfs service
    storage := new(ipfs.Handler)
    storage.SetMultiAddress("/ip4/0.0.0.0/tcp/5006")
    if err := storage.Init(&types.DataStore{Datadir: testTempPath}); err != nil {
    log.Fatal(err)
    }
    @@ -60,6 +59,12 @@ func main() {
    if err != nil {
    log.Fatal(err)
    }
    } else {
    log.Println("Reading census dump...")
    var err error
    if ipfsData, err = os.ReadFile(*dumpPath); err != nil {
    log.Fatal(err)
    }
    }
    log.Println("Importing census from dump...")

    @@ -99,7 +104,7 @@ func main() {

    holders := map[string]string{}
    dbTree.IterateLeaves(func(key, value []byte) bool {
    holders[hex.EncodeToString(key)] = dbTree.BytesToBigInt(value).String()
    holders["0x"+hex.EncodeToString(key)] = dbTree.BytesToBigInt(value).String()
    return true
    })
    // save the census to a file
  3. lucasmenendez revised this gist Dec 14, 2023. 3 changed files with 309 additions and 213 deletions.
    139 changes: 77 additions & 62 deletions go.mod
    Original file line number Diff line number Diff line change
    @@ -3,40 +3,38 @@ module census3-tester
    go 1.21.1

    require (
    go.vocdoni.io/dvote v1.9.1-0.20230926100930-ef28a9cf0ff7
    go.vocdoni.io/proto v1.14.6-0.20230802094125-e07a41fda290
    go.vocdoni.io/dvote v1.10.2-0.20231213100622-f43228481b20
    go.vocdoni.io/proto v1.15.4-0.20231023165811-02adcc48142a
    )

    require (
    bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512 // indirect
    contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
    github.com/766b/chi-prometheus v0.0.0-20211217152057-87afa9aa2ca8 // indirect
    git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9 // indirect
    github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect
    github.com/DataDog/zstd v1.5.2 // indirect
    github.com/Jorropo/jsync v1.0.1 // indirect
    github.com/VictoriaMetrics/metrics v1.24.0 // indirect
    github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
    github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 // indirect
    github.com/benbjohnson/clock v1.3.5 // indirect
    github.com/beorn7/perks v1.0.1 // indirect
    github.com/blang/semver/v4 v4.0.0 // indirect
    github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
    github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 // indirect
    github.com/cenkalti/backoff/v4 v4.2.1 // indirect
    github.com/ceramicnetwork/go-dag-jose v0.1.0 // indirect
    github.com/cespare/xxhash/v2 v2.2.0 // indirect
    github.com/cheggaaa/pb v1.0.29 // indirect
    github.com/cockroachdb/errors v1.9.1 // indirect
    github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
    github.com/cockroachdb/pebble v0.0.0-20230620232302-06034ff014e0 // indirect
    github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 // indirect
    github.com/cockroachdb/redact v1.1.3 // indirect
    github.com/cockroachdb/tokenbucket v0.0.0-20230613231145-182959a1fad6 // indirect
    github.com/cometbft/cometbft v0.38.0 // indirect
    github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
    github.com/containerd/cgroups v1.1.0 // indirect
    github.com/coreos/go-systemd/v22 v22.5.0 // indirect
    github.com/cosmos/gogoproto v1.4.11 // indirect
    github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect
    github.com/cskr/pubsub v1.0.2 // indirect
    github.com/davecgh/go-spew v1.1.1 // indirect
    github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
    github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect
    github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
    github.com/dgraph-io/badger v1.6.2 // indirect
    @@ -45,17 +43,16 @@ require (
    github.com/dustin/go-humanize v1.0.1 // indirect
    github.com/elastic/gosigar v0.14.2 // indirect
    github.com/elgris/jsondiff v0.0.0-20160530203242-765b5c24c302 // indirect
    github.com/ethereum/go-ethereum v1.13.4 // indirect
    github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 // indirect
    github.com/felixge/httpsnoop v1.0.3 // indirect
    github.com/flynn/noise v1.0.0 // indirect
    github.com/francoispqt/gojay v1.2.13 // indirect
    github.com/frankban/quicktest v1.14.6 // indirect
    github.com/fsnotify/fsnotify v1.6.0 // indirect
    github.com/gabriel-vasile/mimetype v1.4.1 // indirect
    github.com/getsentry/sentry-go v0.18.0 // indirect
    github.com/glendc/go-external-ip v0.1.0 // indirect
    github.com/go-chi/chi v4.1.2+incompatible // indirect
    github.com/go-chi/chi/v5 v5.0.10 // indirect
    github.com/go-chi/cors v1.2.1 // indirect
    github.com/go-kit/log v0.2.1 // indirect
    github.com/go-logfmt/logfmt v0.6.0 // indirect
    github.com/go-logr/logr v1.2.4 // indirect
    @@ -65,27 +62,29 @@ require (
    github.com/gogo/protobuf v1.3.2 // indirect
    github.com/golang/glog v1.1.0 // indirect
    github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
    github.com/golang/mock v1.6.0 // indirect
    github.com/golang/protobuf v1.5.3 // indirect
    github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
    github.com/google/go-cmp v0.5.9 // indirect
    github.com/google/go-cmp v0.6.0 // indirect
    github.com/google/gopacket v1.1.19 // indirect
    github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f // indirect
    github.com/google/uuid v1.3.1 // indirect
    github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b // indirect
    github.com/google/uuid v1.4.0 // indirect
    github.com/gorilla/mux v1.8.0 // indirect
    github.com/gorilla/websocket v1.5.0 // indirect
    github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.3 // indirect
    github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e // indirect
    github.com/hashicorp/errwrap v1.1.0 // indirect
    github.com/hashicorp/go-multierror v1.1.1 // indirect
    github.com/hashicorp/golang-lru v0.6.0 // indirect
    github.com/hashicorp/golang-lru/v2 v2.0.6 // indirect
    github.com/huin/goupnp v1.2.0 // indirect
    github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
    github.com/holiman/uint256 v1.2.3 // indirect
    github.com/huin/goupnp v1.3.0 // indirect
    github.com/iden3/go-iden3-crypto v0.0.13 // indirect
    github.com/ipfs-shipyard/nopfs v0.0.12-0.20231027223058-cde3b5ba964c // indirect
    github.com/ipfs-shipyard/nopfs/ipfs v0.13.2-0.20231027223058-cde3b5ba964c // indirect
    github.com/ipfs/bbloom v0.0.4 // indirect
    github.com/ipfs/boxo v0.13.1 // indirect
    github.com/ipfs/boxo v0.15.0 // indirect
    github.com/ipfs/go-bitfield v1.1.0 // indirect
    github.com/ipfs/go-block-format v0.1.2 // indirect
    github.com/ipfs/go-block-format v0.2.0 // indirect
    github.com/ipfs/go-blockservice v0.5.1 // indirect
    github.com/ipfs/go-cid v0.4.1 // indirect
    github.com/ipfs/go-cidutil v0.1.0 // indirect
    @@ -95,7 +94,7 @@ require (
    github.com/ipfs/go-ds-leveldb v0.5.0 // indirect
    github.com/ipfs/go-ds-measure v0.2.0 // indirect
    github.com/ipfs/go-fs-lock v0.0.7 // indirect
    github.com/ipfs/go-graphsync v0.14.4 // indirect
    github.com/ipfs/go-graphsync v0.16.0 // indirect
    github.com/ipfs/go-ipfs-blockstore v1.3.0 // indirect
    github.com/ipfs/go-ipfs-cmds v0.10.0 // indirect
    github.com/ipfs/go-ipfs-delay v0.0.1 // indirect
    @@ -107,25 +106,25 @@ require (
    github.com/ipfs/go-ipfs-redirects-file v0.1.1 // indirect
    github.com/ipfs/go-ipfs-util v0.0.3 // indirect
    github.com/ipfs/go-ipld-cbor v0.0.6 // indirect
    github.com/ipfs/go-ipld-format v0.5.0 // indirect
    github.com/ipfs/go-ipld-format v0.6.0 // indirect
    github.com/ipfs/go-ipld-git v0.1.1 // indirect
    github.com/ipfs/go-ipld-legacy v0.2.1 // indirect
    github.com/ipfs/go-log v1.0.5 // indirect
    github.com/ipfs/go-log/v2 v2.5.1 // indirect
    github.com/ipfs/go-merkledag v0.11.0 // indirect
    github.com/ipfs/go-metrics-interface v0.0.1 // indirect
    github.com/ipfs/go-peertaskqueue v0.8.1 // indirect
    github.com/ipfs/go-unixfsnode v1.7.1 // indirect
    github.com/ipfs/go-unixfsnode v1.8.1 // indirect
    github.com/ipfs/go-verifcid v0.0.2 // indirect
    github.com/ipfs/kubo v0.22.1-0.20230922134002-00e26e9396c3 // indirect
    github.com/ipfs/kubo v0.24.0 // indirect
    github.com/ipld/go-car v0.5.0 // indirect
    github.com/ipld/go-car/v2 v2.10.2-0.20230622090957-499d0c909d33 // indirect
    github.com/ipld/go-codec-dagpb v1.6.0 // indirect
    github.com/ipld/go-ipld-prime v0.21.0 // indirect
    github.com/jackpal/go-nat-pmp v1.0.2 // indirect
    github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
    github.com/jbenet/goprocess v0.1.4 // indirect
    github.com/klauspost/compress v1.16.7 // indirect
    github.com/klauspost/compress v1.17.2 // indirect
    github.com/klauspost/cpuid/v2 v2.2.5 // indirect
    github.com/koron/go-ssdp v0.0.4 // indirect
    github.com/kr/pretty v0.3.1 // indirect
    @@ -134,13 +133,13 @@ require (
    github.com/libp2p/go-cidranger v1.1.0 // indirect
    github.com/libp2p/go-doh-resolver v0.4.0 // indirect
    github.com/libp2p/go-flow-metrics v0.1.0 // indirect
    github.com/libp2p/go-libp2p v0.31.0 // indirect
    github.com/libp2p/go-libp2p v0.32.1 // indirect
    github.com/libp2p/go-libp2p-asn-util v0.3.0 // indirect
    github.com/libp2p/go-libp2p-gostream v0.6.0 // indirect
    github.com/libp2p/go-libp2p-http v0.5.0 // indirect
    github.com/libp2p/go-libp2p-kad-dht v0.24.4 // indirect
    github.com/libp2p/go-libp2p-kbucket v0.6.3 // indirect
    github.com/libp2p/go-libp2p-pubsub v0.9.3 // indirect
    github.com/libp2p/go-libp2p-pubsub v0.10.0 // indirect
    github.com/libp2p/go-libp2p-pubsub-router v0.6.0 // indirect
    github.com/libp2p/go-libp2p-record v0.2.0 // indirect
    github.com/libp2p/go-libp2p-routing-helpers v0.7.3 // indirect
    @@ -154,11 +153,11 @@ require (
    github.com/libp2p/zeroconf/v2 v2.2.0 // indirect
    github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
    github.com/mattn/go-colorable v0.1.13 // indirect
    github.com/mattn/go-isatty v0.0.19 // indirect
    github.com/mattn/go-isatty v0.0.20 // indirect
    github.com/mattn/go-runewidth v0.0.14 // indirect
    github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
    github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
    github.com/miekg/dns v1.1.55 // indirect
    github.com/miekg/dns v1.1.56 // 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
    @@ -167,45 +166,60 @@ require (
    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 v0.11.0 // indirect
    github.com/multiformats/go-multiaddr v0.12.0 // indirect
    github.com/multiformats/go-multiaddr-dns v0.3.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.4.1 // indirect
    github.com/multiformats/go-multistream v0.5.0 // indirect
    github.com/multiformats/go-varint v0.0.7 // indirect
    github.com/oasisprotocol/curve25519-voi v0.0.0-20220708102147-0a8a51822cae // indirect
    github.com/onsi/ginkgo/v2 v2.11.0 // indirect
    github.com/onsi/ginkgo/v2 v2.13.0 // indirect
    github.com/opencontainers/runtime-spec v1.1.0 // indirect
    github.com/opentracing/opentracing-go v1.2.0 // indirect
    github.com/openzipkin/zipkin-go v0.4.1 // indirect
    github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
    github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 // indirect
    github.com/petermattis/goid v0.0.0-20221018141743-354ef7f2fd21 // indirect
    github.com/pion/datachannel v1.5.5 // indirect
    github.com/pion/dtls/v2 v2.2.7 // indirect
    github.com/pion/ice/v2 v2.3.6 // indirect
    github.com/pion/interceptor v0.1.17 // indirect
    github.com/pion/logging v0.2.2 // indirect
    github.com/pion/mdns v0.0.7 // indirect
    github.com/pion/randutil v0.1.0 // indirect
    github.com/pion/rtcp v1.2.10 // indirect
    github.com/pion/rtp v1.7.13 // indirect
    github.com/pion/sctp v1.8.7 // indirect
    github.com/pion/sdp/v3 v3.0.6 // indirect
    github.com/pion/srtp/v2 v2.0.15 // indirect
    github.com/pion/stun v0.6.0 // indirect
    github.com/pion/transport/v2 v2.2.1 // indirect
    github.com/pion/turn/v2 v2.1.0 // indirect
    github.com/pion/webrtc/v3 v3.2.9 // indirect
    github.com/pkg/errors v0.9.1 // indirect
    github.com/pmezard/go-difflib v1.0.0 // indirect
    github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
    github.com/polydawn/refmt v0.89.0 // indirect
    github.com/prometheus/client_golang v1.16.0 // indirect
    github.com/prometheus/client_model v0.4.0 // indirect
    github.com/prometheus/client_golang v1.17.0 // indirect
    github.com/prometheus/client_model v0.5.0 // indirect
    github.com/prometheus/common v0.44.0 // indirect
    github.com/prometheus/procfs v0.11.1 // indirect
    github.com/prometheus/procfs v0.12.0 // indirect
    github.com/prometheus/statsd_exporter v0.22.8 // indirect
    github.com/quic-go/qpack v0.4.0 // indirect
    github.com/quic-go/qtls-go1-20 v0.3.3 // indirect
    github.com/quic-go/quic-go v0.38.1 // indirect
    github.com/quic-go/webtransport-go v0.5.3 // indirect
    github.com/quic-go/qtls-go1-20 v0.3.4 // indirect
    github.com/quic-go/quic-go v0.39.3 // indirect
    github.com/quic-go/webtransport-go v0.6.0 // indirect
    github.com/raulk/go-watchdog v1.3.0 // indirect
    github.com/rivo/uniseg v0.2.0 // indirect
    github.com/rogpeppe/go-internal v1.10.0 // indirect
    github.com/rs/cors v1.8.3 // indirect
    github.com/rs/zerolog v1.30.0 // indirect
    github.com/rs/zerolog v1.31.0 // indirect
    github.com/samber/lo v1.36.0 // indirect
    github.com/sasha-s/go-deadlock v0.3.1 // indirect
    github.com/spaolacci/murmur3 v1.1.0 // indirect
    github.com/stretchr/testify v1.8.4 // indirect
    github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect
    github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect
    github.com/valyala/fastrand v1.1.0 // indirect
    github.com/valyala/histogram v1.2.0 // indirect
    github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect
    github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect
    github.com/whyrusleeping/cbor-gen v0.0.0-20230418232409-daab9ece03a0 // indirect
    @@ -220,40 +234,41 @@ require (
    go.mongodb.org/mongo-driver v1.12.1 // indirect
    go.opencensus.io v0.24.0 // indirect
    go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0 // indirect
    go.opentelemetry.io/otel v1.16.0 // indirect
    go.opentelemetry.io/otel v1.17.0 // indirect
    go.opentelemetry.io/otel/exporters/jaeger v1.14.0 // indirect
    go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 // indirect
    go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 // indirect
    go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0 // indirect
    go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.16.0 // indirect
    go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 // indirect
    go.opentelemetry.io/otel/exporters/zipkin v1.14.0 // indirect
    go.opentelemetry.io/otel/metric v1.16.0 // indirect
    go.opentelemetry.io/otel/metric v1.17.0 // indirect
    go.opentelemetry.io/otel/sdk v1.16.0 // indirect
    go.opentelemetry.io/otel/trace v1.16.0 // indirect
    go.opentelemetry.io/otel/trace v1.17.0 // indirect
    go.opentelemetry.io/proto/otlp v0.19.0 // indirect
    go.uber.org/atomic v1.11.0 // indirect
    go.uber.org/dig v1.17.0 // indirect
    go.uber.org/fx v1.20.0 // indirect
    go.uber.org/dig v1.17.1 // indirect
    go.uber.org/fx v1.20.1 // indirect
    go.uber.org/mock v0.3.0 // indirect
    go.uber.org/multierr v1.11.0 // indirect
    go.uber.org/zap v1.25.0 // indirect
    go.uber.org/zap v1.26.0 // indirect
    go4.org v0.0.0-20230225012048-214862532bf5 // indirect
    golang.org/x/crypto v0.13.0 // indirect
    golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect
    golang.org/x/mod v0.12.0 // indirect
    golang.org/x/net v0.15.0 // indirect
    golang.org/x/oauth2 v0.8.0 // indirect
    golang.org/x/sync v0.3.0 // indirect
    golang.org/x/sys v0.12.0 // indirect
    golang.org/x/text v0.13.0 // indirect
    golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 // indirect
    golang.org/x/crypto v0.15.0 // indirect
    golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
    golang.org/x/mod v0.13.0 // indirect
    golang.org/x/net v0.18.0 // indirect
    golang.org/x/oauth2 v0.12.0 // indirect
    golang.org/x/sync v0.4.0 // indirect
    golang.org/x/sys v0.14.0 // indirect
    golang.org/x/text v0.14.0 // indirect
    golang.org/x/tools v0.14.0 // indirect
    golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
    gonum.org/v1/gonum v0.13.0 // indirect
    google.golang.org/appengine v1.6.7 // indirect
    google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 // indirect
    google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e // indirect
    google.golang.org/genproto/googleapis/rpc v0.0.0-20230815205213-6bfd019c3878 // indirect
    google.golang.org/grpc v1.57.0 // indirect
    google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb // indirect
    google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb // indirect
    google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 // indirect
    google.golang.org/grpc v1.58.2 // indirect
    google.golang.org/protobuf v1.31.0 // indirect
    gopkg.in/square/go-jose.v2 v2.5.1 // indirect
    gopkg.in/yaml.v2 v2.4.0 // indirect
    312 changes: 194 additions & 118 deletions go.sum
    Original file line number Diff line number Diff line change
    @@ -42,8 +42,9 @@ dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBr
    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/766b/chi-prometheus v0.0.0-20211217152057-87afa9aa2ca8 h1:hK1G69lDhhrGqJbRA5i1rmT2KI/W77MSdr7hEGHqWdQ=
    github.com/766b/chi-prometheus v0.0.0-20211217152057-87afa9aa2ca8/go.mod h1:X/LhbmoBoRu8TxoGIOIraVNhfz3hhikJoaelrOuhdPY=
    git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw=
    git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9 h1:Ahny8Ud1LjVMMAlt8utUFKhhxJtwBAualvsbc/Sk7cE=
    git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA=
    github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
    github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M=
    github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
    @@ -58,6 +59,8 @@ github.com/Jorropo/jsync v1.0.1 h1:6HgRolFZnsdfzRUj+ImB9og1JYOxQoReSywkHOGSaUU=
    github.com/Jorropo/jsync v1.0.1/go.mod h1:jCOZj3vrBCri3bSU3ErUYvevKlnbssrXeCivybS5ABQ=
    github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
    github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0=
    github.com/VictoriaMetrics/metrics v1.24.0 h1:ILavebReOjYctAGY5QU2F9X0MYvkcrG3aEn2RKa1Zkw=
    github.com/VictoriaMetrics/metrics v1.24.0/go.mod h1:eFT25kvsTidQFHb6U0oa0rTrDRdz4xTYjpL8+UPohys=
    github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
    github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
    github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
    @@ -89,10 +92,6 @@ github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQj
    github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
    github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=
    github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
    github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ=
    github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0=
    github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 h1:KdUfX2zKommPRa+PD0sWZUyXe9w277ABlgELO7H04IM=
    github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
    github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
    github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
    github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
    @@ -133,12 +132,12 @@ github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZO
    github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
    github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=
    github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
    github.com/cockroachdb/pebble v0.0.0-20230620232302-06034ff014e0 h1:/H4Q2dMfdDncEniWhn++1tQKuth0TF1j9VRWlGqttrU=
    github.com/cockroachdb/pebble v0.0.0-20230620232302-06034ff014e0/go.mod h1:FN5O47SBEz5+kO9fG8UTR64g2WS1u5ZFCgTvxGjoSks=
    github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A=
    github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593/go.mod h1:6hk1eMY/u5t+Cf18q5lFMUA1Rc+Sm5I6Ra1QuPyxXCo=
    github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ=
    github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
    github.com/cockroachdb/tokenbucket v0.0.0-20230613231145-182959a1fad6 h1:DJK8W/iB+s/qkTtmXSrHA49lp5O3OsR7E6z4byOLy34=
    github.com/cockroachdb/tokenbucket v0.0.0-20230613231145-182959a1fad6/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ=
    github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo=
    github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ=
    github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
    github.com/cometbft/cometbft v0.38.0 h1:ogKnpiPX7gxCvqTEF4ly25/wAxUqf181t30P3vqdpdc=
    github.com/cometbft/cometbft v0.38.0/go.mod h1:5Jz0Z8YsHSf0ZaAqGvi/ifioSdVFPtEGrm8Y9T/993k=
    @@ -165,8 +164,9 @@ github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0=
    github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis=
    github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
    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/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
    github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/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/dchest/blake512 v1.0.0/go.mod h1:FV1x7xPPLWukZlpDpWQ88rF/SFwZ5qbskrzhLMB92JI=
    @@ -204,12 +204,14 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m
    github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
    github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
    github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
    github.com/ethereum/go-ethereum v1.13.4 h1:25HJnaWVg3q1O7Z62LaaI6S9wVq8QCw3K88g8wEzrcM=
    github.com/ethereum/go-ethereum v1.13.4/go.mod h1:I0U5VewuuTzvBtVzKo7b3hJzDhXOUtn9mJW7SsIPB0Q=
    github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 h1:BBso6MBKW8ncyZLv37o+KNyy0HrrHgfnOaGQC2qvN+A=
    github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5/go.mod h1:JpoxHjuQauoxiFMl1ie8Xc/7TfLuMZ5eOCONd1sUBHg=
    github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8=
    github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
    github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
    github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
    github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
    github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
    github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
    github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk=
    github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
    @@ -240,12 +242,6 @@ github.com/glendc/go-external-ip v0.1.0 h1:iX3xQ2Q26atAmLTbd++nUce2P5ht5P4uD4V7c
    github.com/glendc/go-external-ip v0.1.0/go.mod h1:CNx312s2FLAJoWNdJWZ2Fpf5O4oLsMFwuYviHjS4uJE=
    github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
    github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98=
    github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyNz34tQRec=
    github.com/go-chi/chi v4.1.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
    github.com/go-chi/chi/v5 v5.0.10 h1:rLz5avzKpjqxrYwXNfmjkrYYXOyLJd37pz53UFHC6vk=
    github.com/go-chi/chi/v5 v5.0.10/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
    github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4=
    github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=
    github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
    github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
    github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
    @@ -310,8 +306,6 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt
    github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
    github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
    github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
    github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
    github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
    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/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
    @@ -351,8 +345,9 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
    github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
    github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
    github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
    github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
    github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
    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/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
    @@ -368,13 +363,14 @@ github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hf
    github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
    github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
    github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
    github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f h1:pDhu5sgp8yJlEF/g6osliIIpF9K4F5jvkULXa4daRDQ=
    github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
    github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b h1:RMpPgZTSApbPf7xaVel+QkoGPRLFLrwFO89uDUHEGf0=
    github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
    github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
    github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
    github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
    github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
    github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
    github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
    github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
    github.com/google/uuid v1.4.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/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
    @@ -407,31 +403,37 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
    github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
    github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4=
    github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
    github.com/hashicorp/golang-lru/v2 v2.0.6 h1:3xi/Cafd1NaoEnS/yDssIiuVeDVywU0QdFGl3aQaQHM=
    github.com/hashicorp/golang-lru/v2 v2.0.6/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
    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/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
    github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o=
    github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw=
    github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
    github.com/huin/goupnp v1.2.0 h1:uOKW26NG1hsSSbXIZ1IR7XP9Gjd1U8pnLaCMgntmkmY=
    github.com/huin/goupnp v1.2.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
    github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc=
    github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
    github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE=
    github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
    github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
    github.com/iden3/go-iden3-crypto v0.0.13 h1:ixWRiaqDULNyIDdOWz2QQJG5t4PpNHkQk2P6GV94cok=
    github.com/iden3/go-iden3-crypto v0.0.13/go.mod h1:swXIv0HFbJKobbQBtsB50G7IHr6PbTowutSew/iBEoo=
    github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA=
    github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
    github.com/ipfs-shipyard/nopfs v0.0.12-0.20231027223058-cde3b5ba964c h1:17FO7HnKiFhO7iadu3zCgII+EblpdRmJt5qg9FqQo8Y=
    github.com/ipfs-shipyard/nopfs v0.0.12-0.20231027223058-cde3b5ba964c/go.mod h1:1oj4+g/mN6JRuZiXHt5iFRG02e62wp5AKcB3gdgknbk=
    github.com/ipfs-shipyard/nopfs/ipfs v0.13.2-0.20231027223058-cde3b5ba964c h1:7UynTbtdlt+w08ggb1UGLGaGjp1mMaZhoTZSctpn5Ak=
    github.com/ipfs-shipyard/nopfs/ipfs v0.13.2-0.20231027223058-cde3b5ba964c/go.mod h1:6EekK/jo+TynwSE/ZOiOJd4eEvRXoavEC3vquKtv4yI=
    github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
    github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
    github.com/ipfs/boxo v0.13.1 h1:nQ5oQzcMZR3oL41REJDcTbrvDvuZh3J9ckc9+ILeRQI=
    github.com/ipfs/boxo v0.13.1/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk=
    github.com/ipfs/boxo v0.15.0 h1:BriLydj2nlK1nKeJQHxcKSuG5ZXcoutzhBklOtxC5pk=
    github.com/ipfs/boxo v0.15.0/go.mod h1:X5ulcbR5Nh7sm3Db8+08AApUo6FsGC5mb23QDKAoB/M=
    github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA=
    github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU=
    github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ=
    github.com/ipfs/go-bitswap v0.11.0/go.mod h1:05aE8H3XOU+LXpTedeAS0OZpcO1WFsj5niYQH9a1Tmk=
    github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY=
    github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk=
    github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo=
    github.com/ipfs/go-block-format v0.1.2/go.mod h1:mACVcrxarQKstUU3Yf/RdwbC4DzPV6++rO2a3d+a/KE=
    github.com/ipfs/go-block-format v0.2.0 h1:ZqrkxBA2ICbDRbK8KJs/u0O3dlp6gmAuuXUJNiW1Ycs=
    github.com/ipfs/go-block-format v0.2.0/go.mod h1:+jpL11nFx5A/SPpsoBn6Bzkra/zaArfSmsknbPMYgzM=
    github.com/ipfs/go-blockservice v0.5.1 h1:9pAtkyKAz/skdHTh0kH8VulzWp+qmSDD0aI17TYP/s0=
    github.com/ipfs/go-blockservice v0.5.1/go.mod h1:VpMblFEqG67A/H2sHKAemeH9vlURVavlysbdUI632yk=
    github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM=
    @@ -463,8 +465,8 @@ github.com/ipfs/go-ds-measure v0.2.0 h1:sG4goQe0KDTccHMyT45CY1XyUbxe5VwTKpg2LjAp
    github.com/ipfs/go-ds-measure v0.2.0/go.mod h1:SEUD/rE2PwRa4IQEC5FuNAmjJCyYObZr9UvVh8V3JxE=
    github.com/ipfs/go-fs-lock v0.0.7 h1:6BR3dajORFrFTkb5EpCUFIAypsoxpGpDSVUdFwzgL9U=
    github.com/ipfs/go-fs-lock v0.0.7/go.mod h1:Js8ka+FNYmgQRLrRXzU3CB/+Csr1BwrRilEcvYrHhhc=
    github.com/ipfs/go-graphsync v0.14.4 h1:ysazATpwsIjYtYEZH5CdD/HRaonCJd4pASUtnzESewk=
    github.com/ipfs/go-graphsync v0.14.4/go.mod h1:yT0AfjFgicOoWdAlUJ96tQ5AkuGI4r1taIQX/aHbBQo=
    github.com/ipfs/go-graphsync v0.16.0 h1:0BX7whXlV13Y9FZ/jRg+xaGHaGYbtGxGppKD6tncw6k=
    github.com/ipfs/go-graphsync v0.16.0/go.mod h1:WfbMW3hhmX5GQEQ+KJxsFzVJVBKgC5szfrYK7Zc7xIM=
    github.com/ipfs/go-ipfs-blockstore v1.3.0 h1:m2EXaWgwTzAfsmt5UdJ7Is6l4gJcaM/A12XwJyvYvMM=
    github.com/ipfs/go-ipfs-blockstore v1.3.0/go.mod h1:KgtZyc9fq+P2xJUiCAzbRdhhqJHvsw8u2Dlqy2MyRTE=
    github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ=
    @@ -501,8 +503,8 @@ github.com/ipfs/go-ipfs-util v0.0.3/go.mod h1:LHzG1a0Ig4G+iZ26UUOMjHd+lfM84LZCrn
    github.com/ipfs/go-ipld-cbor v0.0.6 h1:pYuWHyvSpIsOOLw4Jy7NbBkCyzLDcl64Bf/LZW7eBQ0=
    github.com/ipfs/go-ipld-cbor v0.0.6/go.mod h1:ssdxxaLJPXH7OjF5V4NSjBbcfh+evoR4ukuru0oPXMA=
    github.com/ipfs/go-ipld-format v0.0.1/go.mod h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms=
    github.com/ipfs/go-ipld-format v0.5.0 h1:WyEle9K96MSrvr47zZHKKcDxJ/vlpET6PSiQsAFO+Ds=
    github.com/ipfs/go-ipld-format v0.5.0/go.mod h1:ImdZqJQaEouMjCvqCe0ORUS+uoBmf7Hf+EO/jh+nk3M=
    github.com/ipfs/go-ipld-format v0.6.0 h1:VEJlA2kQ3LqFSIm5Vu6eIlSxD/Ze90xtc4Meten1F5U=
    github.com/ipfs/go-ipld-format v0.6.0/go.mod h1:g4QVMTn3marU3qXchwjpKPKgJv+zF+OlaKMyhJ4LHPg=
    github.com/ipfs/go-ipld-git v0.1.1 h1:TWGnZjS0htmEmlMFEkA3ogrNCqWjIxwr16x1OsdhG+Y=
    github.com/ipfs/go-ipld-git v0.1.1/go.mod h1:+VyMqF5lMcJh4rwEppV0e6g4nCCHXThLYYDpKUkJubI=
    github.com/ipfs/go-ipld-legacy v0.2.1 h1:mDFtrBpmU7b//LzLSypVrXsD8QxkEWxu5qVxN99/+tk=
    @@ -527,12 +529,12 @@ github.com/ipfs/go-peertaskqueue v0.8.1 h1:YhxAs1+wxb5jk7RvS0LHdyiILpNmRIRnZVzte
    github.com/ipfs/go-peertaskqueue v0.8.1/go.mod h1:Oxxd3eaK279FxeydSPPVGHzbwVeHjatZ2GA8XD+KbPU=
    github.com/ipfs/go-unixfs v0.4.5 h1:wj8JhxvV1G6CD7swACwSKYa+NgtdWC1RUit+gFnymDU=
    github.com/ipfs/go-unixfs v0.4.5/go.mod h1:BIznJNvt/gEx/ooRMI4Us9K8+qeGO7vx1ohnbk8gjFg=
    github.com/ipfs/go-unixfsnode v1.7.1 h1:RRxO2b6CSr5UQ/kxnGzaChTjp5LWTdf3Y4n8ANZgB/s=
    github.com/ipfs/go-unixfsnode v1.7.1/go.mod h1:PVfoyZkX1B34qzT3vJO4nsLUpRCyhnMuHBznRcXirlk=
    github.com/ipfs/go-unixfsnode v1.8.1 h1:nEWQl2XL+Zoyh6u0OMzNI8mUeCKLyRgg65WDbTm/oNU=
    github.com/ipfs/go-unixfsnode v1.8.1/go.mod h1:HxRu9HYHOjK6HUqFBAi++7DVoWAHn0o4v/nZ/VA+0g8=
    github.com/ipfs/go-verifcid v0.0.2 h1:XPnUv0XmdH+ZIhLGKg6U2vaPaRDXb9urMyNVCE7uvTs=
    github.com/ipfs/go-verifcid v0.0.2/go.mod h1:40cD9x1y4OWnFXbLNJYRe7MpNvWlMn3LZAG5Wb4xnPU=
    github.com/ipfs/kubo v0.22.1-0.20230922134002-00e26e9396c3 h1:57xs2+D+TexC50uvttG0o9CQqZPBatj0q4Q5uJX5zSw=
    github.com/ipfs/kubo v0.22.1-0.20230922134002-00e26e9396c3/go.mod h1:mvCFDAqqTErJ1rApyrviRIJwfHYPIBS2+EdZYXT3tSs=
    github.com/ipfs/kubo v0.24.0 h1:2BAnH9j6RojzmXwQNnI2Mhj6qzs5c5jzlAzv7N9sph4=
    github.com/ipfs/kubo v0.24.0/go.mod h1:ghX3bzQBHvd1JKBO2GF074dVAboGc/uS6NLOw8C/yEY=
    github.com/ipld/go-car v0.5.0 h1:kcCEa3CvYMs0iE5BzD5sV7O2EwMiCIp3uF8tA6APQT8=
    github.com/ipld/go-car v0.5.0/go.mod h1:ppiN5GWpjOZU9PgpAZ9HbZd9ZgSpwPMr48fGRJOWmvE=
    github.com/ipld/go-car/v2 v2.10.2-0.20230622090957-499d0c909d33 h1:0OZwzSYWIuiKEOXd/2vm5cMcEmmGLFn+1h6lHELCm3s=
    @@ -594,8 +596,8 @@ github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6
    github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
    github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
    github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
    github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
    github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
    github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
    github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
    github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
    github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
    github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
    @@ -633,8 +635,8 @@ github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZ
    github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs=
    github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM=
    github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro=
    github.com/libp2p/go-libp2p v0.31.0 h1:LFShhP8F6xthWiBBq3euxbKjZsoRajVEyBS9snfHxYg=
    github.com/libp2p/go-libp2p v0.31.0/go.mod h1:W/FEK1c/t04PbRH3fA9i5oucu5YcgrG0JVoBWT1B7Eg=
    github.com/libp2p/go-libp2p v0.32.1 h1:wy1J4kZIZxOaej6NveTWCZmHiJ/kY7GoAqXgqNCnPps=
    github.com/libp2p/go-libp2p v0.32.1/go.mod h1:hXXC3kXPlBZ1eu8Q2hptGrMB4mZ3048JUoS4EKaHW5c=
    github.com/libp2p/go-libp2p-asn-util v0.3.0 h1:gMDcMyYiZKkocGXDQ5nsUQyquC9+H+iLEQHwOCZ7s8s=
    github.com/libp2p/go-libp2p-asn-util v0.3.0/go.mod h1:B1mcOrKUE35Xq/ASTmQ4tN3LNzVVaMNmq2NACuqyB9w=
    github.com/libp2p/go-libp2p-core v0.2.4/go.mod h1:STh4fdfa5vDYr0/SzYYeqnt+E6KfEV5VxfIrm0bcI0g=
    @@ -649,8 +651,8 @@ github.com/libp2p/go-libp2p-kbucket v0.3.1/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLw
    github.com/libp2p/go-libp2p-kbucket v0.6.3 h1:p507271wWzpy2f1XxPzCQG9NiN6R6lHL9GiSErbQQo0=
    github.com/libp2p/go-libp2p-kbucket v0.6.3/go.mod h1:RCseT7AH6eJWxxk2ol03xtP9pEHetYSPXOaJnOiD8i0=
    github.com/libp2p/go-libp2p-peerstore v0.1.4/go.mod h1:+4BDbDiiKf4PzpANZDAT+knVdLxvqh7hXOujessqdzs=
    github.com/libp2p/go-libp2p-pubsub v0.9.3 h1:ihcz9oIBMaCK9kcx+yHWm3mLAFBMAUsM4ux42aikDxo=
    github.com/libp2p/go-libp2p-pubsub v0.9.3/go.mod h1:RYA7aM9jIic5VV47WXu4GkcRxRhrdElWf8xtyli+Dzc=
    github.com/libp2p/go-libp2p-pubsub v0.10.0 h1:wS0S5FlISavMaAbxyQn3dxMOe2eegMfswM471RuHJwA=
    github.com/libp2p/go-libp2p-pubsub v0.10.0/go.mod h1:1OxbaT/pFRO5h+Dpze8hdHQ63R0ke55XTs6b6NwLLkw=
    github.com/libp2p/go-libp2p-pubsub-router v0.6.0 h1:D30iKdlqDt5ZmLEYhHELCMRj8b4sFAqrUcshIUvVP/s=
    github.com/libp2p/go-libp2p-pubsub-router v0.6.0/go.mod h1:FY/q0/RBTKsLA7l4vqC2cbRbOvyDotg8PJQ7j8FDudE=
    github.com/libp2p/go-libp2p-record v0.2.0 h1:oiNUOCWno2BFuxt3my4i1frNrt7PerzB3queqa1NkQ0=
    @@ -690,7 +692,6 @@ github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc
    github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
    github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
    github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
    github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
    github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
    github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
    github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
    @@ -703,8 +704,9 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky
    github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
    github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
    github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
    github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
    github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
    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/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
    github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
    github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
    @@ -720,8 +722,8 @@ github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00v
    github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
    github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
    github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
    github.com/miekg/dns v1.1.55 h1:GoQ4hpsj0nFLYe+bWiCToyrBEJXkQfOOIvFGFy0lEgo=
    github.com/miekg/dns v1.1.55/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
    github.com/miekg/dns v1.1.56 h1:5imZaSeoRNvpM9SzWNhEcP9QliKiz20/dA2QabIGVnE=
    github.com/miekg/dns v1.1.56/go.mod h1:cRm6Oo2C8TY9ZS/TqsSrseAcncm74lfK5G+ikN2SWWY=
    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=
    @@ -760,8 +762,8 @@ github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a
    github.com/multiformats/go-multiaddr v0.1.0/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44=
    github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo=
    github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4=
    github.com/multiformats/go-multiaddr v0.11.0 h1:XqGyJ8ufbCE0HmTDwx2kPdsrQ36AGPZNZX6s6xfJH10=
    github.com/multiformats/go-multiaddr v0.11.0/go.mod h1:gWUm0QLR4thQ6+ZF6SXUw8YjtwQSPapICM+NmCkxHSM=
    github.com/multiformats/go-multiaddr v0.12.0 h1:1QlibTFkoXJuDjjYsMHhE73TnzJQl8FSWatk/0gxGzE=
    github.com/multiformats/go-multiaddr v0.12.0/go.mod h1:WmZXgObOQOYp9r3cslLlppkrz1FYSHmE834dfz/lWu8=
    github.com/multiformats/go-multiaddr-dns v0.3.0/go.mod h1:mNzQ4eTGDg0ll1N9jKPOUogZPoJ30W8a7zk66FQPpdQ=
    github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A=
    github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk=
    @@ -784,8 +786,8 @@ github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJ
    github.com/multiformats/go-multihash v0.1.0/go.mod h1:RJlXsxt6vHGaia+S8We0ErjhojtKzPP2AH4+kYM7k84=
    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.4.1 h1:rFy0Iiyn3YT0asivDUIR05leAdwZq3de4741sbiSdfo=
    github.com/multiformats/go-multistream v0.4.1/go.mod h1:Mz5eykRVAjJWckE2U78c6xqdtyNUEhKSM0Lwar2p77Q=
    github.com/multiformats/go-multistream v0.5.0 h1:5htLSLl7lvJk3xx3qT/8Zm9J4K8vEOf/QGkvOGQAyiE=
    github.com/multiformats/go-multistream v0.5.0/go.mod h1:n6tMZiwiP2wUsR8DgfDWw1dydlEqV3l6N3/GBsX6ILA=
    github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
    github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
    github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
    @@ -812,15 +814,15 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv
    github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
    github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
    github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
    github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU=
    github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM=
    github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
    github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
    github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
    github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
    github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
    github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
    github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
    github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc=
    github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ=
    github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
    github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M=
    github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
    github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bll4AjJ9odEGpg=
    github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
    @@ -836,18 +838,57 @@ github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhM
    github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
    github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+Tv1WTxkukpXeMlviSxvL7SRgk=
    github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw=
    github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
    github.com/petermattis/goid v0.0.0-20221018141743-354ef7f2fd21 h1:PfiCACRd+dzB+gLQAY3ZekMo/56XZ1haOzEguVZ1ZYE=
    github.com/petermattis/goid v0.0.0-20221018141743-354ef7f2fd21/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
    github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
    github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
    github.com/pion/datachannel v1.5.5 h1:10ef4kwdjije+M9d7Xm9im2Y3O6A6ccQb0zcqZcJew8=
    github.com/pion/datachannel v1.5.5/go.mod h1:iMz+lECmfdCMqFRhXhcA/219B0SQlbpoR2V118yimL0=
    github.com/pion/dtls/v2 v2.2.7 h1:cSUBsETxepsCSFSxC3mc/aDo14qQLMSL+O6IjG28yV8=
    github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s=
    github.com/pion/ice/v2 v2.3.6 h1:Jgqw36cAud47iD+N6rNX225uHvrgWtAlHfVyOQc3Heg=
    github.com/pion/ice/v2 v2.3.6/go.mod h1:9/TzKDRwBVAPsC+YOrKH/e3xDrubeTRACU9/sHQarsU=
    github.com/pion/interceptor v0.1.17 h1:prJtgwFh/gB8zMqGZoOgJPHivOwVAp61i2aG61Du/1w=
    github.com/pion/interceptor v0.1.17/go.mod h1:SY8kpmfVBvrbUzvj2bsXz7OJt5JvmVNZ+4Kjq7FcwrI=
    github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY=
    github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms=
    github.com/pion/mdns v0.0.7 h1:P0UB4Sr6xDWEox0kTVxF0LmQihtCbSAdW0H2nEgkA3U=
    github.com/pion/mdns v0.0.7/go.mod h1:4iP2UbeFhLI/vWju/bw6ZfwjJzk0z8DNValjGxR/dD8=
    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.10 h1:nkr3uj+8Sp97zyItdN60tE/S6vk4al5CPRR6Gejsdjc=
    github.com/pion/rtcp v1.2.10/go.mod h1:ztfEwXZNLGyF1oQDttz/ZKIBaeeg/oWbRYqzBM9TL1I=
    github.com/pion/rtp v1.7.13 h1:qcHwlmtiI50t1XivvoawdCGTP4Uiypzfrsap+bijcoA=
    github.com/pion/rtp v1.7.13/go.mod h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko=
    github.com/pion/sctp v1.8.5/go.mod h1:SUFFfDpViyKejTAdwD1d/HQsCu+V/40cCs2nZIvC3s0=
    github.com/pion/sctp v1.8.7 h1:JnABvFakZueGAn4KU/4PSKg+GWbF6QWbKTWZOSGJjXw=
    github.com/pion/sctp v1.8.7/go.mod h1:g1Ul+ARqZq5JEmoFy87Q/4CePtKnTJ1QCL9dBBdN6AU=
    github.com/pion/sdp/v3 v3.0.6 h1:WuDLhtuFUUVpTfus9ILC4HRyHsW6TdugjEX/QY9OiUw=
    github.com/pion/sdp/v3 v3.0.6/go.mod h1:iiFWFpQO8Fy3S5ldclBkpXqmWy02ns78NOKoLLL0YQw=
    github.com/pion/srtp/v2 v2.0.15 h1:+tqRtXGsGwHC0G0IUIAzRmdkHvriF79IHVfZGfHrQoA=
    github.com/pion/srtp/v2 v2.0.15/go.mod h1:b/pQOlDrbB0HEH5EUAQXzSYxikFbNcNuKmF8tM0hCtw=
    github.com/pion/stun v0.4.0/go.mod h1:QPsh1/SbXASntw3zkkrIk3ZJVKz4saBY2G7S10P3wCw=
    github.com/pion/stun v0.6.0 h1:JHT/2iyGDPrFWE8NNC15wnddBN8KifsEDw8swQmrEmU=
    github.com/pion/stun v0.6.0/go.mod h1:HPqcfoeqQn9cuaet7AOmB5e5xkObu9DwBdurwLKO9oA=
    github.com/pion/transport v0.14.1 h1:XSM6olwW+o8J4SCmOBb/BpwZypkHeyM0PGFCxNQBr40=
    github.com/pion/transport v0.14.1/go.mod h1:4tGmbk00NeYA3rUa9+n+dzCCoKkcy3YlYb99Jn2fNnI=
    github.com/pion/transport/v2 v2.0.0/go.mod h1:HS2MEBJTwD+1ZI2eSXSvHJx/HnzQqRy2/LXxt6eVMHc=
    github.com/pion/transport/v2 v2.1.0/go.mod h1:AdSw4YBZVDkZm8fpoz+fclXyQwANWmZAlDuQdctTThQ=
    github.com/pion/transport/v2 v2.2.0/go.mod h1:AdSw4YBZVDkZm8fpoz+fclXyQwANWmZAlDuQdctTThQ=
    github.com/pion/transport/v2 v2.2.1 h1:7qYnCBlpgSJNYMbLCKuSY9KbQdBFoETvPNETv0y4N7c=
    github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g=
    github.com/pion/turn/v2 v2.1.0 h1:5wGHSgGhJhP/RpabkUb/T9PdsAjkGLS6toYz5HNzoSI=
    github.com/pion/turn/v2 v2.1.0/go.mod h1:yrT5XbXSGX1VFSF31A3c1kCNB5bBZgk/uu5LET162qs=
    github.com/pion/webrtc/v3 v3.2.9 h1:U8NSjQDlZZ+Iy/hg42Q/u6mhEVSXYvKrOIZiZwYTfLc=
    github.com/pion/webrtc/v3 v3.2.9/go.mod h1:gjQLMZeyN3jXBGdxGmUYCyKjOuYX/c99BDjGqmadq0A=
    github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
    github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
    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/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
    github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
    github.com/polydawn/refmt v0.0.0-20190221155625-df39d6c2d992/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o=
    github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o=
    github.com/polydawn/refmt v0.89.0 h1:ADJTApkvkeBZsN0tBTx8QjpD9JkmxbKp0cxfr9qszm4=
    @@ -860,14 +901,14 @@ github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqr
    github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
    github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
    github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ=
    github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=
    github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc=
    github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
    github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
    github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
    github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
    github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
    github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
    github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY=
    github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
    github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
    github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
    github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
    github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
    github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
    @@ -884,19 +925,19 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O
    github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
    github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
    github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
    github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
    github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
    github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
    github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
    github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI=
    github.com/prometheus/statsd_exporter v0.22.8 h1:Qo2D9ZzaQG+id9i5NYNGmbf1aa/KxKbB9aKfMS+Yib0=
    github.com/prometheus/statsd_exporter v0.22.8/go.mod h1:/DzwbTEaFTE0Ojz5PqcSk6+PFHOPWGxdXVr6yC8eFOM=
    github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=
    github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A=
    github.com/quic-go/qtls-go1-20 v0.3.3 h1:17/glZSLI9P9fDAeyCHBFSWSqJcwx1byhLwP5eUIDCM=
    github.com/quic-go/qtls-go1-20 v0.3.3/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k=
    github.com/quic-go/quic-go v0.38.1 h1:M36YWA5dEhEeT+slOu/SwMEucbYd0YFidxG3KlGPZaE=
    github.com/quic-go/quic-go v0.38.1/go.mod h1:ijnZM7JsFIkp4cRyjxJNIzdSfCLmUMg9wdyhGmg+SN4=
    github.com/quic-go/webtransport-go v0.5.3 h1:5XMlzemqB4qmOlgIus5zB45AcZ2kCgCy2EptUrfOPWU=
    github.com/quic-go/webtransport-go v0.5.3/go.mod h1:OhmmgJIzTTqXK5xvtuX0oBpLV2GkLWNDA+UeTGJXErU=
    github.com/quic-go/qtls-go1-20 v0.3.4 h1:MfFAPULvst4yoMgY9QmtpYmfij/em7O8UUi+bNVm7Cg=
    github.com/quic-go/qtls-go1-20 v0.3.4/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k=
    github.com/quic-go/quic-go v0.39.3 h1:o3YB6t2SR+HU/pgwF29kJ6g4jJIJEwEZ8CKia1h1TKg=
    github.com/quic-go/quic-go v0.39.3/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q=
    github.com/quic-go/webtransport-go v0.6.0 h1:CvNsKqc4W2HljHJnoT+rMmbRJybShZ0YPFDD3NxaZLY=
    github.com/quic-go/webtransport-go v0.6.0/go.mod h1:9KjU4AEBqEQidGHNDkZrb8CAa1abRaosM2yGOyiikEc=
    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/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
    @@ -911,8 +952,8 @@ github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncj
    github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo=
    github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
    github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
    github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
    github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
    github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
    github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
    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/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk=
    @@ -922,6 +963,7 @@ github.com/samber/lo v1.36.0/go.mod h1:HLeWcJRRyLKp3+/XBJvOrerCQn9mhdKMHyd7IRlge
    github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0=
    github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM=
    github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g=
    github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw=
    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=
    @@ -986,6 +1028,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
    github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
    github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
    github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
    github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
    github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
    github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
    github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
    github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc=
    @@ -1010,8 +1054,12 @@ github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60Nt
    github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4=
    github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
    github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w=
    github.com/valyala/fastrand v1.1.0 h1:f+5HkLW4rsgzdNoleUOB69hyT9IlD2ZQh9GyDMfb5G8=
    github.com/valyala/fastrand v1.1.0/go.mod h1:HWqCzkrkg6QXT8V2EXWvXCoow7vLwOFN002oeRzjapQ=
    github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
    github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
    github.com/valyala/histogram v1.2.0 h1:wyYGAZZt3CpwUiIb9AU/Zbllg1llXyrtApRS815OLoQ=
    github.com/valyala/histogram v1.2.0/go.mod h1:Hb4kBwb4UxsaNbbbh+RRz8ZR6pdodR57tzWUS3BUzXY=
    github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
    github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU=
    github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM=
    @@ -1077,8 +1125,8 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
    go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
    go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0 h1:pginetY7+onl4qN1vl0xW/V/v6OBZ0vVdH+esuJgvmM=
    go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0/go.mod h1:XiYsayHc36K3EByOO6nbAXnAWbrUxdjUROCEeeROOH8=
    go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s=
    go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4=
    go.opentelemetry.io/otel v1.17.0 h1:MW+phZ6WZ5/uk2nd93ANk/6yJ+dVrvNWUjGhnnFU5jM=
    go.opentelemetry.io/otel v1.17.0/go.mod h1:I2vmBGtFaODIVMBSTPVDlJSzBDNf93k60E6Ft0nyjo0=
    go.opentelemetry.io/otel/exporters/jaeger v1.14.0 h1:CjbUNd4iN2hHmWekmOqZ+zSCU+dzZppG8XsV+A3oc8Q=
    go.opentelemetry.io/otel/exporters/jaeger v1.14.0/go.mod h1:4Ay9kk5vELRrbg5z4cpP9EtmQRFap2Wb0woPG4lujZA=
    go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 h1:t4ZwRPU+emrcvM2e9DHd0Fsf0JTPVcbfa/BhTDF03d0=
    @@ -1093,12 +1141,12 @@ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 h1:sEL90JjOO/4yhqu
    go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0/go.mod h1:oCslUcizYdpKYyS9e8srZEqM6BB8fq41VJBjLAE6z1w=
    go.opentelemetry.io/otel/exporters/zipkin v1.14.0 h1:reEVE1upBF9tcujgvSqLJS0SrI7JQPaTKP4s4rymnSs=
    go.opentelemetry.io/otel/exporters/zipkin v1.14.0/go.mod h1:RcjvOAcvhzcufQP8aHmzRw1gE9g/VEZufDdo2w+s4sk=
    go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo=
    go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4=
    go.opentelemetry.io/otel/metric v1.17.0 h1:iG6LGVz5Gh+IuO0jmgvpTB6YVrCGngi8QGm+pMd8Pdc=
    go.opentelemetry.io/otel/metric v1.17.0/go.mod h1:h4skoxdZI17AxwITdmdZjjYJQH5nzijUUjm+wtPph5o=
    go.opentelemetry.io/otel/sdk v1.16.0 h1:Z1Ok1YsijYL0CSJpHt4cS3wDDh7p572grzNrBMiMWgE=
    go.opentelemetry.io/otel/sdk v1.16.0/go.mod h1:tMsIuKXuuIWPBAOrH+eHtvhTL+SntFtXF9QD68aP6p4=
    go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs=
    go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0=
    go.opentelemetry.io/otel/trace v1.17.0 h1:/SWhSRHmDPOImIAetP1QAeMnZYiQXrTy4fMMYOdSKWQ=
    go.opentelemetry.io/otel/trace v1.17.0/go.mod h1:I/4vKTgFclIsXRVucpH25X0mpFSczM7aHeaz0ZBLWjY=
    go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
    go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw=
    go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
    @@ -1107,13 +1155,15 @@ go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
    go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
    go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
    go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
    go.uber.org/dig v1.17.0 h1:5Chju+tUvcC+N7N6EV08BJz41UZuO3BmHcN4A287ZLI=
    go.uber.org/dig v1.17.0/go.mod h1:rTxpf7l5I0eBTlE6/9RL+lDybC7WFwY2QH55ZSjy1mU=
    go.uber.org/fx v1.20.0 h1:ZMC/pnRvhsthOZh9MZjMq5U8Or3mA9zBSPaLnzs3ihQ=
    go.uber.org/fx v1.20.0/go.mod h1:qCUj0btiR3/JnanEr1TYEePfSw6o/4qYJscgvzQ5Ub0=
    go.uber.org/dig v1.17.1 h1:Tga8Lz8PcYNsWsyHMZ1Vm0OQOUaJNDyvPImgbAu9YSc=
    go.uber.org/dig v1.17.1/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE=
    go.uber.org/fx v1.20.1 h1:zVwVQGS8zYvhh9Xxcu4w1M6ESyeMzebzj2NbSayZ4Mk=
    go.uber.org/fx v1.20.1/go.mod h1:iSYNbHf2y55acNCwCXKx7LbWb5WG1Bnue5RDXz1OREg=
    go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
    go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
    go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
    go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo=
    go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
    go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
    go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
    go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
    @@ -1124,12 +1174,12 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
    go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
    go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
    go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
    go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c=
    go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk=
    go.vocdoni.io/dvote v1.9.1-0.20230926100930-ef28a9cf0ff7 h1:SXkqFZK9w3x7sRL87lS0HvxAGP4TldtWAZJzlr7WSrY=
    go.vocdoni.io/dvote v1.9.1-0.20230926100930-ef28a9cf0ff7/go.mod h1:zvKN81yOzvLm2u157S7eA2fHFxVY6toK8u21nfBydxs=
    go.vocdoni.io/proto v1.14.6-0.20230802094125-e07a41fda290 h1:o5MrI+nI5GJDUYMEdzP/JJbMwdiOU1mr1LnrmXaN2q4=
    go.vocdoni.io/proto v1.14.6-0.20230802094125-e07a41fda290/go.mod h1:oi/WtiBFJ6QwNDv2aUQYwOnUKzYuS/fBqXF8xDNwcGo=
    go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
    go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
    go.vocdoni.io/dvote v1.10.2-0.20231213100622-f43228481b20 h1:6wYZWjlPfEcSuOdo5fyqavkDQ7Fm+eASsU5lRZxXyUU=
    go.vocdoni.io/dvote v1.10.2-0.20231213100622-f43228481b20/go.mod h1:7GQQHmBUlr5mEV82apw1hnx21Vrxy+ioyklZG+wyL7w=
    go.vocdoni.io/proto v1.15.4-0.20231023165811-02adcc48142a h1:88Dg0JNhT9004TuZoHIX44zkaHkInKgBgBaA0S12cYY=
    go.vocdoni.io/proto v1.15.4-0.20231023165811-02adcc48142a/go.mod h1:oi/WtiBFJ6QwNDv2aUQYwOnUKzYuS/fBqXF8xDNwcGo=
    go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
    go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg=
    go4.org v0.0.0-20230225012048-214862532bf5 h1:nifaUDeh+rPaBCMPMQHZmvJf+QdpLFnuQPwx+LxVmtc=
    @@ -1155,8 +1205,10 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm
    golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
    golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
    golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
    golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck=
    golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
    golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
    golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
    golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
    golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
    golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
    golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
    golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
    @@ -1167,8 +1219,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
    golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
    golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
    golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
    golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ=
    golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8=
    golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
    golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
    golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
    golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
    golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
    @@ -1193,8 +1245,9 @@ 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.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
    golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
    golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
    golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
    golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
    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=
    @@ -1247,9 +1300,15 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su
    golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
    golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
    golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
    golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
    golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
    golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
    golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
    golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
    golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
    golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
    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.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
    golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
    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=
    @@ -1260,8 +1319,8 @@ golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4Iltr
    golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
    golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
    golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
    golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8=
    golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE=
    golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
    golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4=
    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=
    @@ -1276,8 +1335,9 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
    golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
    golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
    golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
    golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
    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-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    @@ -1350,15 +1410,27 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
    golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    golang.org/x/sys v0.4.0/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.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
    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.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
    golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
    golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
    golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
    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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
    golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
    golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
    golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
    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/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
    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=
    @@ -1368,9 +1440,13 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
    golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
    golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
    golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
    golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
    golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
    golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
    golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
    golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
    golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
    golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
    golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
    golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
    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.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
    @@ -1429,12 +1505,12 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc
    golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
    golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
    golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
    golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
    golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
    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.12.1-0.20230815132531-74c255bcf846 h1:Vve/L0v7CXXuxUmaMGIEK/dEeq7uiqb5qBgQrZzIE7E=
    golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM=
    golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
    golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
    golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
    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=
    @@ -1510,12 +1586,12 @@ google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6D
    google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
    google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
    google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
    google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g=
    google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8=
    google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e h1:z3vDksarJxsAKM5dmEGv0GHwE2hKJ096wZra71Vs4sw=
    google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ=
    google.golang.org/genproto/googleapis/rpc v0.0.0-20230815205213-6bfd019c3878 h1:lv6/DhyiFFGsmzxbsUUTOkN29II+zeWHxvT8Lpdxsv0=
    google.golang.org/genproto/googleapis/rpc v0.0.0-20230815205213-6bfd019c3878/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
    google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb h1:XFBgcDwm7irdHTbz4Zk2h7Mh+eis4nfJEFQFYzJzuIA=
    google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4=
    google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb h1:lK0oleSc7IQsUxO3U5TjL9DWlsxpEBemh+zpB7IqhWI=
    google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk=
    google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM=
    google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA=
    google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
    google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
    google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
    @@ -1538,8 +1614,8 @@ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG
    google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
    google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
    google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
    google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw=
    google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo=
    google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I=
    google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
    google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
    google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
    google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
    71 changes: 38 additions & 33 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -5,28 +5,30 @@ import (
    "encoding/hex"
    "encoding/json"
    "flag"
    "fmt"
    "log"
    "os"
    "path/filepath"
    "time"

    "go.vocdoni.io/dvote/api/censusdb"
    "go.vocdoni.io/dvote/censustree"
    "go.vocdoni.io/dvote/data"
    "go.vocdoni.io/dvote/data/compressor"
    "go.vocdoni.io/dvote/data/downloader"
    "go.vocdoni.io/dvote/data/ipfs"
    "go.vocdoni.io/dvote/data/ipfs/ipfsconnect"
    "go.vocdoni.io/dvote/db"
    "go.vocdoni.io/dvote/db/metadb"
    "go.vocdoni.io/dvote/types"
    "go.vocdoni.io/proto/build/go/models"
    )

    func main() {
    log.SetFlags(log.Lshortfile | log.LstdFlags)
    // parse flags
    ipfsKey := flag.String("ipfs-key", "", "IPFS key to use")
    uri := flag.String("uri", "", "IPFS URI of the census")
    dump := flag.String("dump", "", "the data dump of the census")
    save := flag.Bool("save", false, "save the census to a file")
    flag.Parse()
    if (uri == nil || *uri == "") && (dump == nil || *dump == "") {
    log.Fatal("IPFS URI or data dump required. Use -uri or -dump flags")
    @@ -35,43 +37,31 @@ func main() {
    testTempPath := "./temp"
    defer os.RemoveAll(testTempPath)

    ipfsData := []byte{}
    ipfsData := []byte(*dump)
    if uri != nil && *uri != "" {
    log.Println("Downloading census from IPFS...")
    // init ipfs service
    storageConf := data.IPFSNewConfig(filepath.Join(testTempPath, "ipfs"))
    storage := new(ipfs.Handler)
    _ = storage.SetMultiAddress("/ip4/0.0.0.0/tcp/5005")
    if err := storage.Init(storageConf); err != nil {
    storage.SetMultiAddress("/ip4/0.0.0.0/tcp/5006")
    if err := storage.Init(&types.DataStore{Datadir: testTempPath}); err != nil {
    log.Fatal(err)
    }
    downloader := downloader.NewDownloader(storage)
    downloader.Start()
    defer downloader.Stop()
    var ipfsConn *ipfsconnect.IPFSConnect
    if ipfsKey != nil && *ipfsKey != "" {
    ipfsConn = ipfsconnect.New(*ipfsKey, storage)
    ipfsConn.Start()
    }

    ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
    ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
    defer cancel()

    wait := make(chan struct{})
    downloader.AddToQueue(*uri, func(uri string, dump []byte) {
    defer close(wait)
    log.Printf("census downloaded uri=%s size=%d\n", uri, len(dump))
    ipfsData = dump
    }, true)

    for {
    select {
    case <-ctx.Done():
    log.Println("timeout reached")
    return
    case <-wait:
    log.Println("census imported")
    goto end
    }
    var err error
    ipfsData, err = storage.Retrieve(ctx, *uri, downloader.MaxFileSize)
    if err != nil {
    log.Fatal(err)
    }
    end:
    } else {
    ipfsData = []byte(*dump)
    }
    log.Println("Importing census from dump...")

    // unmarshal the census dump
    census := censusdb.CensusDump{}
    @@ -103,12 +93,27 @@ func main() {
    if err != nil {
    log.Fatal(err)
    }

    // print results
    fmt.Println("Received root:\n\t", hex.EncodeToString(census.RootHash))
    fmt.Println("Computed root:\n\t", hex.EncodeToString(newRoot))
    fmt.Println("Leaves (key-value):")
    log.Printf("Received root: %s, Computed root: %s\n", hex.EncodeToString(census.RootHash), hex.EncodeToString(newRoot))

    holders := map[string]string{}
    dbTree.IterateLeaves(func(key, value []byte) bool {
    fmt.Println("\t", hex.EncodeToString(key), dbTree.BytesToBigInt(value))
    holders[hex.EncodeToString(key)] = dbTree.BytesToBigInt(value).String()
    return true
    })
    // save the census to a file
    if save != nil && *save {
    log.Println("Saving census to file...")
    fd, err := os.Create("census.json")
    if err != nil {
    log.Fatal(err)
    }
    defer fd.Close()
    enc := json.NewEncoder(fd)
    enc.SetIndent("", " ")
    if err := enc.Encode(holders); err != nil {
    log.Fatal(err)
    }
    }
    }
  4. lucasmenendez revised this gist Nov 8, 2023. 1 changed file with 35 additions and 28 deletions.
    63 changes: 35 additions & 28 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -26,46 +26,53 @@ func main() {
    log.SetFlags(log.Lshortfile | log.LstdFlags)
    // parse flags
    uri := flag.String("uri", "", "IPFS URI of the census")
    dump := flag.String("dump", "", "the data dump of the census")
    flag.Parse()
    if uri == nil || *uri == "" {
    log.Fatal("IPFS URI is required. Use -uri flag")
    if (uri == nil || *uri == "") && (dump == nil || *dump == "") {
    log.Fatal("IPFS URI or data dump required. Use -uri or -dump flags")
    }
    // init temp folder and defer its removal
    testTempPath := "./temp"
    defer os.RemoveAll(testTempPath)
    // init ipfs service
    storageConf := data.IPFSNewConfig(filepath.Join(testTempPath, "ipfs"))
    storage := new(ipfs.Handler)
    _ = storage.SetMultiAddress("/ip4/0.0.0.0/tcp/5005")
    if err := storage.Init(storageConf); err != nil {
    log.Fatal(err)
    }
    downloader := downloader.NewDownloader(storage)
    downloader.Start()
    defer downloader.Stop()

    ipfsData := []byte{}
    if uri != nil && *uri != "" {
    // init ipfs service
    storageConf := data.IPFSNewConfig(filepath.Join(testTempPath, "ipfs"))
    storage := new(ipfs.Handler)
    _ = storage.SetMultiAddress("/ip4/0.0.0.0/tcp/5005")
    if err := storage.Init(storageConf); err != nil {
    log.Fatal(err)
    }
    downloader := downloader.NewDownloader(storage)
    downloader.Start()
    defer downloader.Stop()

    ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
    defer cancel()
    ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
    defer cancel()

    wait := make(chan struct{})
    downloader.AddToQueue(*uri, func(uri string, dump []byte) {
    defer close(wait)
    log.Printf("census downloaded uri=%s size=%d\n", uri, len(dump))
    ipfsData = dump
    }, true)
    wait := make(chan struct{})
    downloader.AddToQueue(*uri, func(uri string, dump []byte) {
    defer close(wait)
    log.Printf("census downloaded uri=%s size=%d\n", uri, len(dump))
    ipfsData = dump
    }, true)

    for {
    select {
    case <-ctx.Done():
    log.Fatal("timeout reached")
    case <-wait:
    log.Println("census imported")
    goto end
    for {
    select {
    case <-ctx.Done():
    log.Println("timeout reached")
    return
    case <-wait:
    log.Println("census imported")
    goto end
    }
    }
    end:
    } else {
    ipfsData = []byte(*dump)
    }
    end:

    // unmarshal the census dump
    census := censusdb.CensusDump{}
    if err := json.Unmarshal(ipfsData, &census); err != nil {
  5. lucasmenendez revised this gist Sep 28, 2023. 3 changed files with 31 additions and 36 deletions.
    14 changes: 3 additions & 11 deletions go.mod
    Original file line number Diff line number Diff line change
    @@ -1,16 +1,15 @@
    module census-tester
    module census3-tester

    go 1.20
    go 1.21.1

    require (
    go.vocdoni.io/dvote v1.9.1-0.20230926100930-ef28a9cf0ff7
    go.vocdoni.io/proto v1.15.3
    go.vocdoni.io/proto v1.14.6-0.20230802094125-e07a41fda290
    )

    require (
    bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512 // indirect
    contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
    git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9 // indirect
    github.com/766b/chi-prometheus v0.0.0-20211217152057-87afa9aa2ca8 // indirect
    github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect
    github.com/DataDog/zstd v1.5.2 // indirect
    @@ -46,7 +45,6 @@ require (
    github.com/dustin/go-humanize v1.0.1 // indirect
    github.com/elastic/gosigar v0.14.2 // indirect
    github.com/elgris/jsondiff v0.0.0-20160530203242-765b5c24c302 // indirect
    github.com/ethereum/go-ethereum v1.11.6 // indirect
    github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 // indirect
    github.com/felixge/httpsnoop v1.0.3 // indirect
    github.com/flynn/noise v1.0.0 // indirect
    @@ -82,13 +80,8 @@ require (
    github.com/hashicorp/go-multierror v1.1.1 // indirect
    github.com/hashicorp/golang-lru v0.6.0 // indirect
    github.com/hashicorp/golang-lru/v2 v2.0.6 // indirect
    github.com/holiman/uint256 v1.2.2 // indirect
    github.com/huin/goupnp v1.2.0 // indirect
    github.com/iden3/go-iden3-crypto v0.0.13 // indirect
    github.com/iden3/go-rapidsnark/prover v0.0.9 // indirect
    github.com/iden3/go-rapidsnark/types v0.0.2 // indirect
    github.com/iden3/go-rapidsnark/verifier v0.0.3 // indirect
    github.com/iden3/go-rapidsnark/witness v0.0.3 // indirect
    github.com/ipfs/bbloom v0.0.4 // indirect
    github.com/ipfs/boxo v0.13.1 // indirect
    github.com/ipfs/go-bitfield v1.1.0 // indirect
    @@ -213,7 +206,6 @@ require (
    github.com/stretchr/testify v1.8.4 // indirect
    github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect
    github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect
    github.com/wasmerio/wasmer-go v1.0.4 // indirect
    github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect
    github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect
    github.com/whyrusleeping/cbor-gen v0.0.0-20230418232409-daab9ece03a0 // indirect
    45 changes: 26 additions & 19 deletions go.sum
    Original file line number Diff line number Diff line change
    @@ -42,9 +42,6 @@ dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBr
    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=
    git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw=
    git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9 h1:Ahny8Ud1LjVMMAlt8utUFKhhxJtwBAualvsbc/Sk7cE=
    git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA=
    github.com/766b/chi-prometheus v0.0.0-20211217152057-87afa9aa2ca8 h1:hK1G69lDhhrGqJbRA5i1rmT2KI/W77MSdr7hEGHqWdQ=
    github.com/766b/chi-prometheus v0.0.0-20211217152057-87afa9aa2ca8/go.mod h1:X/LhbmoBoRu8TxoGIOIraVNhfz3hhikJoaelrOuhdPY=
    github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
    @@ -93,6 +90,7 @@ github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13P
    github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=
    github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
    github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ=
    github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0=
    github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 h1:KdUfX2zKommPRa+PD0sWZUyXe9w277ABlgELO7H04IM=
    github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
    github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
    @@ -129,6 +127,7 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH
    github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
    github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
    github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4=
    github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
    github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8=
    github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk=
    github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
    @@ -172,6 +171,7 @@ github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR
    github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U=
    github.com/dchest/blake512 v1.0.0/go.mod h1:FV1x7xPPLWukZlpDpWQ88rF/SFwZ5qbskrzhLMB92JI=
    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.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=
    github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
    github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4=
    @@ -182,6 +182,7 @@ github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWa
    github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=
    github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
    github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
    github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
    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=
    @@ -203,13 +204,12 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m
    github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
    github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
    github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
    github.com/ethereum/go-ethereum v1.11.6 h1:2VF8Mf7XiSUfmoNOy3D+ocfl9Qu8baQBrCNbo2CXQ8E=
    github.com/ethereum/go-ethereum v1.11.6/go.mod h1:+a8pUj1tOyJ2RinsNQD4326YS+leSoKGiG/uVVb0x6Y=
    github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 h1:BBso6MBKW8ncyZLv37o+KNyy0HrrHgfnOaGQC2qvN+A=
    github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5/go.mod h1:JpoxHjuQauoxiFMl1ie8Xc/7TfLuMZ5eOCONd1sUBHg=
    github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8=
    github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
    github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
    github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
    github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
    github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk=
    github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
    @@ -226,6 +226,7 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
    github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
    github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
    github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
    github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
    github.com/gabriel-vasile/mimetype v1.4.1 h1:TRWk7se+TOjCYgRth7+1/OYLNiRNIotknkFtf/dnN7Q=
    github.com/gabriel-vasile/mimetype v1.4.1/go.mod h1:05Vi0w3Y9c/lNvJOdmIwvrrAhX3rYhfQQCaf9VJcv7M=
    github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc=
    @@ -247,6 +248,7 @@ github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4=
    github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=
    github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
    github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
    github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
    github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
    github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
    github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
    @@ -379,6 +381,7 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
    github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
    github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
    github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f h1:KMlcu9X58lhTA/KrfX8Bi1LQSO4pzoVjTiL3h4Jk+Zk=
    github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
    github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
    github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
    github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
    @@ -407,8 +410,6 @@ github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uG
    github.com/hashicorp/golang-lru/v2 v2.0.6 h1:3xi/Cafd1NaoEnS/yDssIiuVeDVywU0QdFGl3aQaQHM=
    github.com/hashicorp/golang-lru/v2 v2.0.6/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
    github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
    github.com/holiman/uint256 v1.2.2 h1:TXKcSGc2WaxPD2+bmzAsVthL4+pEN0YwXcL5qED83vk=
    github.com/holiman/uint256 v1.2.2/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw=
    github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
    github.com/huin/goupnp v1.2.0 h1:uOKW26NG1hsSSbXIZ1IR7XP9Gjd1U8pnLaCMgntmkmY=
    github.com/huin/goupnp v1.2.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
    @@ -417,14 +418,6 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
    github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
    github.com/iden3/go-iden3-crypto v0.0.13 h1:ixWRiaqDULNyIDdOWz2QQJG5t4PpNHkQk2P6GV94cok=
    github.com/iden3/go-iden3-crypto v0.0.13/go.mod h1:swXIv0HFbJKobbQBtsB50G7IHr6PbTowutSew/iBEoo=
    github.com/iden3/go-rapidsnark/prover v0.0.9 h1:Bifg6VtrvrXiYsfv8ULBQweeT75sw3FjV4bbU3vmNQ0=
    github.com/iden3/go-rapidsnark/prover v0.0.9/go.mod h1:wgDsmKOGCuWGtgVtuW9ARWNguNr4NJAIyg2G7+uTax0=
    github.com/iden3/go-rapidsnark/types v0.0.2 h1:CjJSrlbWchHzuMRdxSYrEh7n/akP+Z2PLNbwT5yBmQY=
    github.com/iden3/go-rapidsnark/types v0.0.2/go.mod h1:ApgcaUxKIgSRA6fAeFxK7p+lgXXfG4oA2HN5DhFlfF4=
    github.com/iden3/go-rapidsnark/verifier v0.0.3 h1:DkEe9xiwMTocOr5dH0jUt/NBk49EPujArUFvAHqpc0M=
    github.com/iden3/go-rapidsnark/verifier v0.0.3/go.mod h1:A3R3qr+8QiQtFBghrx94VJrOIr+9mdgrrbmFzJyS9Sg=
    github.com/iden3/go-rapidsnark/witness v0.0.3 h1:N2jZKJvVcLBK+OUi23KX2lKeeUGJwkQsOxkeyhs/EA8=
    github.com/iden3/go-rapidsnark/witness v0.0.3/go.mod h1:ZRd4PX8vJX/2aJ/1XRvtwMon5F7phDRX6C7v/BYBrwE=
    github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA=
    github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
    github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
    @@ -434,6 +427,7 @@ github.com/ipfs/boxo v0.13.1/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yY
    github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA=
    github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU=
    github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ=
    github.com/ipfs/go-bitswap v0.11.0/go.mod h1:05aE8H3XOU+LXpTedeAS0OZpcO1WFsj5niYQH9a1Tmk=
    github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY=
    github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk=
    github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo=
    @@ -474,7 +468,9 @@ github.com/ipfs/go-graphsync v0.14.4/go.mod h1:yT0AfjFgicOoWdAlUJ96tQ5AkuGI4r1ta
    github.com/ipfs/go-ipfs-blockstore v1.3.0 h1:m2EXaWgwTzAfsmt5UdJ7Is6l4gJcaM/A12XwJyvYvMM=
    github.com/ipfs/go-ipfs-blockstore v1.3.0/go.mod h1:KgtZyc9fq+P2xJUiCAzbRdhhqJHvsw8u2Dlqy2MyRTE=
    github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ=
    github.com/ipfs/go-ipfs-blocksutil v0.0.1/go.mod h1:Yq4M86uIOmxmGPUHv/uI7uKqZNtLb449gwKqXjIsnRk=
    github.com/ipfs/go-ipfs-chunker v0.0.5 h1:ojCf7HV/m+uS2vhUGWcogIIxiO5ubl5O57Q7NapWLY8=
    github.com/ipfs/go-ipfs-chunker v0.0.5/go.mod h1:jhgdF8vxRHycr00k13FM8Y0E+6BoalYeobXmUyTreP8=
    github.com/ipfs/go-ipfs-cmds v0.10.0 h1:ZB4+RgYaH4UARfJY0uLKl5UXgApqnRjKbuCiJVcErYk=
    github.com/ipfs/go-ipfs-cmds v0.10.0/go.mod h1:sX5d7jkCft9XLPnkgEfXY0z2UBOB5g6fh/obBS0enJE=
    github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
    @@ -487,14 +483,17 @@ github.com/ipfs/go-ipfs-exchange-interface v0.2.0/go.mod h1:z6+RhJuDQbqKguVyslSO
    github.com/ipfs/go-ipfs-exchange-offline v0.3.0 h1:c/Dg8GDPzixGd0MC8Jh6mjOwU57uYokgWRFidfvEkuA=
    github.com/ipfs/go-ipfs-exchange-offline v0.3.0/go.mod h1:MOdJ9DChbb5u37M1IcbrRB02e++Z7521fMxqCNRrz9s=
    github.com/ipfs/go-ipfs-files v0.3.0 h1:fallckyc5PYjuMEitPNrjRfpwl7YFt69heCOUhsbGxQ=
    github.com/ipfs/go-ipfs-files v0.3.0/go.mod h1:xAUtYMwB+iu/dtf6+muHNSFQCJG2dSiStR2P6sn9tIM=
    github.com/ipfs/go-ipfs-keystore v0.1.0 h1:gfuQUO/cyGZgZIHE6OrJas4OnwuxXCqJG7tI0lrB5Qc=
    github.com/ipfs/go-ipfs-keystore v0.1.0/go.mod h1:LvLw7Qhnb0RlMOfCzK6OmyWxICip6lQ06CCmdbee75U=
    github.com/ipfs/go-ipfs-posinfo v0.0.1 h1:Esoxj+1JgSjX0+ylc0hUmJCOv6V2vFoZiETLR6OtpRs=
    github.com/ipfs/go-ipfs-posinfo v0.0.1/go.mod h1:SwyeVP+jCwiDu0C313l/8jg6ZxM0qqtlt2a0vILTc1A=
    github.com/ipfs/go-ipfs-pq v0.0.3 h1:YpoHVJB+jzK15mr/xsWC574tyDLkezVrDNeaalQBsTE=
    github.com/ipfs/go-ipfs-pq v0.0.3/go.mod h1:btNw5hsHBpRcSSgZtiNm/SLj5gYIZ18AKtv3kERkRb4=
    github.com/ipfs/go-ipfs-redirects-file v0.1.1 h1:Io++k0Vf/wK+tfnhEh63Yte1oQK5VGT2hIEYpD0Rzx8=
    github.com/ipfs/go-ipfs-redirects-file v0.1.1/go.mod h1:tAwRjCV0RjLTjH8DR/AU7VYvfQECg+lpUy2Mdzv7gyk=
    github.com/ipfs/go-ipfs-routing v0.3.0 h1:9W/W3N+g+y4ZDeffSgqhgo7BsBSJwPMcyssET9OWevc=
    github.com/ipfs/go-ipfs-routing v0.3.0/go.mod h1:dKqtTFIql7e1zYsEuWLyuOU+E0WJWW8JjbTPLParDWo=
    github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc=
    github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ=
    github.com/ipfs/go-ipfs-util v0.0.3 h1:2RFdGez6bu2ZlZdI+rWfIdbQb1KudQp3VGwPtdNCmE0=
    @@ -509,6 +508,7 @@ github.com/ipfs/go-ipld-git v0.1.1/go.mod h1:+VyMqF5lMcJh4rwEppV0e6g4nCCHXThLYYD
    github.com/ipfs/go-ipld-legacy v0.2.1 h1:mDFtrBpmU7b//LzLSypVrXsD8QxkEWxu5qVxN99/+tk=
    github.com/ipfs/go-ipld-legacy v0.2.1/go.mod h1:782MOUghNzMO2DER0FlBR94mllfdCJCkTtDtPM51otM=
    github.com/ipfs/go-libipfs v0.7.0 h1:Mi54WJTODaOL2/ZSm5loi3SwI3jI2OuFWUrQIkJ5cpM=
    github.com/ipfs/go-libipfs v0.7.0/go.mod h1:KsIf/03CqhICzyRGyGo68tooiBE2iFbI/rXW7FhAYr0=
    github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM=
    github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A=
    github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8=
    @@ -526,6 +526,7 @@ github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j
    github.com/ipfs/go-peertaskqueue v0.8.1 h1:YhxAs1+wxb5jk7RvS0LHdyiILpNmRIRnZVztekOF0pg=
    github.com/ipfs/go-peertaskqueue v0.8.1/go.mod h1:Oxxd3eaK279FxeydSPPVGHzbwVeHjatZ2GA8XD+KbPU=
    github.com/ipfs/go-unixfs v0.4.5 h1:wj8JhxvV1G6CD7swACwSKYa+NgtdWC1RUit+gFnymDU=
    github.com/ipfs/go-unixfs v0.4.5/go.mod h1:BIznJNvt/gEx/ooRMI4Us9K8+qeGO7vx1ohnbk8gjFg=
    github.com/ipfs/go-unixfsnode v1.7.1 h1:RRxO2b6CSr5UQ/kxnGzaChTjp5LWTdf3Y4n8ANZgB/s=
    github.com/ipfs/go-unixfsnode v1.7.1/go.mod h1:PVfoyZkX1B34qzT3vJO4nsLUpRCyhnMuHBznRcXirlk=
    github.com/ipfs/go-verifcid v0.0.2 h1:XPnUv0XmdH+ZIhLGKg6U2vaPaRDXb9urMyNVCE7uvTs=
    @@ -543,6 +544,7 @@ github.com/ipld/go-ipld-prime v0.14.1/go.mod h1:QcE4Y9n/ZZr8Ijg5bGPT0GqYWgZ1704n
    github.com/ipld/go-ipld-prime v0.21.0 h1:n4JmcpOlPDIxBcY037SVfpd1G+Sj1nKZah0m6QH9C2E=
    github.com/ipld/go-ipld-prime v0.21.0/go.mod h1:3RLqy//ERg/y5oShXXdx5YIp50cFGOanyMctpPjsvxQ=
    github.com/ipld/go-ipld-prime/storage/bsadapter v0.0.0-20230102063945-1a409dc236dd h1:gMlw/MhNr2Wtp5RwGdsW23cs+yCuj9k2ON7i9MiJlRo=
    github.com/ipld/go-ipld-prime/storage/bsadapter v0.0.0-20230102063945-1a409dc236dd/go.mod h1:wZ8hH8UxeryOs4kJEJaiui/s00hDSbE37OKsL47g+Sw=
    github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI=
    github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0=
    github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk=
    @@ -553,6 +555,7 @@ github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+
    github.com/jbenet/go-cienv v0.1.0 h1:Vc/s0QbQtoxX8MwwSLWWh+xNNZvM3Lw7NsTcHrvvhMc=
    github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
    github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c h1:uUx61FiAa1GI6ZmVd2wf2vULeQZIKG66eybjNXKYCz4=
    github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c/go.mod h1:sdx1xVM9UuLw1tXnhJWN3piypTUO3vCIHYmG15KE/dU=
    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/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY=
    @@ -655,6 +658,7 @@ github.com/libp2p/go-libp2p-record v0.2.0/go.mod h1:I+3zMkvvg5m2OcSdoL0KPljyJyvN
    github.com/libp2p/go-libp2p-routing-helpers v0.7.3 h1:u1LGzAMVRK9Nqq5aYDVOiq/HaB93U9WWczBzGyAC5ZY=
    github.com/libp2p/go-libp2p-routing-helpers v0.7.3/go.mod h1:cN4mJAD/7zfPKXBcs9ze31JGYAZgzdABEm+q/hkswb8=
    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-libp2p-xor v0.1.0 h1:hhQwT4uGrBcuAkUGXADuPltalOdpf9aag9kaYNT2tLA=
    github.com/libp2p/go-libp2p-xor v0.1.0/go.mod h1:LSTM5yRnjGZbWNTA/hRwq2gGFrvRIbQJscoIL/u6InY=
    github.com/libp2p/go-mplex v0.7.0 h1:BDhFZdlk5tbr0oyFq/xv/NPGfjbnrsDam1EvutpBDbY=
    @@ -816,6 +820,7 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y
    github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
    github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
    github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc=
    github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ=
    github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
    github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bll4AjJ9odEGpg=
    github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
    @@ -989,7 +994,9 @@ github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5f
    github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48=
    github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
    github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M=
    github.com/thoas/go-funk v0.9.1/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q=
    github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk=
    github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk=
    github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ=
    github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM=
    github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb h1:Ywfo8sUltxogBpFuMOFRrrSifO788kAFxmvVw31PtQQ=
    @@ -1012,12 +1019,11 @@ github.com/wangjia184/sortedset v0.0.0-20160527075905-f5d03557ba30/go.mod h1:Yko
    github.com/warpfork/go-testmark v0.3.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0=
    github.com/warpfork/go-testmark v0.9.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0=
    github.com/warpfork/go-testmark v0.12.1 h1:rMgCpJfwy1sJ50x0M0NgyphxYYPMOODIJHhsXyEHU0s=
    github.com/warpfork/go-testmark v0.12.1/go.mod h1:kHwy7wfvGSPh1rQJYKayD4AbtNaeyZdcGi9tNJTaa5Y=
    github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
    github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
    github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ=
    github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
    github.com/wasmerio/wasmer-go v1.0.4 h1:MnqHoOGfiQ8MMq2RF6wyCeebKOe84G88h5yv+vmxJgs=
    github.com/wasmerio/wasmer-go v1.0.4/go.mod h1:0gzVdSfg6pysA6QVp6iVRPTagC6Wq9pOE8J86WKb2Fk=
    github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc h1:BCPnHtcboadS0DvysUuJXZ4lWVv5Bh5i7+tbIyi+ck4=
    github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc/go.mod h1:r45hJU7yEoA81k6MWNhpMj/kms0n14dkzkxYHoB96UM=
    github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 h1:5HZfQkwe0mIfyDmc1Em5GqlNRzcdtlv4HTNmdpt7XH0=
    @@ -1107,6 +1113,7 @@ go.uber.org/fx v1.20.0 h1:ZMC/pnRvhsthOZh9MZjMq5U8Or3mA9zBSPaLnzs3ihQ=
    go.uber.org/fx v1.20.0/go.mod h1:qCUj0btiR3/JnanEr1TYEePfSw6o/4qYJscgvzQ5Ub0=
    go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
    go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
    go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
    go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
    go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
    go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
    @@ -1121,8 +1128,8 @@ go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c=
    go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk=
    go.vocdoni.io/dvote v1.9.1-0.20230926100930-ef28a9cf0ff7 h1:SXkqFZK9w3x7sRL87lS0HvxAGP4TldtWAZJzlr7WSrY=
    go.vocdoni.io/dvote v1.9.1-0.20230926100930-ef28a9cf0ff7/go.mod h1:zvKN81yOzvLm2u157S7eA2fHFxVY6toK8u21nfBydxs=
    go.vocdoni.io/proto v1.15.3 h1:rzpSNWAwQ9EA2CU3Ao+oly1Ozh8qeps1MWaVIiUBbVU=
    go.vocdoni.io/proto v1.15.3/go.mod h1:oi/WtiBFJ6QwNDv2aUQYwOnUKzYuS/fBqXF8xDNwcGo=
    go.vocdoni.io/proto v1.14.6-0.20230802094125-e07a41fda290 h1:o5MrI+nI5GJDUYMEdzP/JJbMwdiOU1mr1LnrmXaN2q4=
    go.vocdoni.io/proto v1.14.6-0.20230802094125-e07a41fda290/go.mod h1:oi/WtiBFJ6QwNDv2aUQYwOnUKzYuS/fBqXF8xDNwcGo=
    go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
    go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg=
    go4.org v0.0.0-20230225012048-214862532bf5 h1:nifaUDeh+rPaBCMPMQHZmvJf+QdpLFnuQPwx+LxVmtc=
    8 changes: 2 additions & 6 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -25,15 +25,11 @@ import (
    func main() {
    log.SetFlags(log.Lshortfile | log.LstdFlags)
    // parse flags
    groupKey := flag.String("group-key", "census3key", "IPFS group key")
    uri := flag.String("uri", "", "IPFS URI of the census")
    flag.Parse()
    if uri == nil || *uri == "" {
    log.Fatal("IPFS URI is required. Use -uri flag")
    }
    if groupKey == nil || *groupKey == "" {
    log.Fatal("Group key is required. Use -group-key flag")
    }
    // init temp folder and defer its removal
    testTempPath := "./temp"
    defer os.RemoveAll(testTempPath)
    @@ -50,7 +46,7 @@ func main() {

    ipfsData := []byte{}

    ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
    ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
    defer cancel()

    wait := make(chan struct{})
    @@ -63,7 +59,7 @@ func main() {
    for {
    select {
    case <-ctx.Done():
    log.Fatal("timeout")
    log.Fatal("timeout reached")
    case <-wait:
    log.Println("census imported")
    goto end
  6. lucasmenendez revised this gist Sep 27, 2023. 3 changed files with 1711 additions and 38 deletions.
    67 changes: 44 additions & 23 deletions go.mod
    Original file line number Diff line number Diff line change
    @@ -1,15 +1,16 @@
    module census3-census-explorer
    module census-tester

    go 1.20

    require (
    go.vocdoni.io/dvote v1.9.1-0.20230920203924-f76c7d9b7ede
    go.vocdoni.io/proto v1.14.6-0.20230802094125-e07a41fda290
    go.vocdoni.io/dvote v1.9.1-0.20230926100930-ef28a9cf0ff7
    go.vocdoni.io/proto v1.15.3
    )

    require (
    bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512 // indirect
    contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
    git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9 // indirect
    github.com/766b/chi-prometheus v0.0.0-20211217152057-87afa9aa2ca8 // indirect
    github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect
    github.com/DataDog/zstd v1.5.2 // indirect
    @@ -19,6 +20,8 @@ require (
    github.com/benbjohnson/clock v1.3.5 // indirect
    github.com/beorn7/perks v1.0.1 // indirect
    github.com/blang/semver/v4 v4.0.0 // indirect
    github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
    github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 // indirect
    github.com/cenkalti/backoff/v4 v4.2.1 // indirect
    github.com/ceramicnetwork/go-dag-jose v0.1.0 // indirect
    github.com/cespare/xxhash/v2 v2.2.0 // indirect
    @@ -28,10 +31,13 @@ require (
    github.com/cockroachdb/pebble v0.0.0-20230620232302-06034ff014e0 // indirect
    github.com/cockroachdb/redact v1.1.3 // indirect
    github.com/cockroachdb/tokenbucket v0.0.0-20230613231145-182959a1fad6 // indirect
    github.com/cometbft/cometbft v0.38.0 // indirect
    github.com/containerd/cgroups v1.1.0 // indirect
    github.com/coreos/go-systemd/v22 v22.5.0 // indirect
    github.com/cosmos/gogoproto v1.4.11 // indirect
    github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect
    github.com/cskr/pubsub v1.0.2 // indirect
    github.com/davecgh/go-spew v1.1.1 // indirect
    github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect
    github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
    github.com/dgraph-io/badger v1.6.2 // indirect
    @@ -40,13 +46,15 @@ require (
    github.com/dustin/go-humanize v1.0.1 // indirect
    github.com/elastic/gosigar v0.14.2 // indirect
    github.com/elgris/jsondiff v0.0.0-20160530203242-765b5c24c302 // indirect
    github.com/ethereum/go-ethereum v1.11.6 // indirect
    github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 // indirect
    github.com/felixge/httpsnoop v1.0.3 // indirect
    github.com/flynn/noise v1.0.0 // indirect
    github.com/francoispqt/gojay v1.2.13 // indirect
    github.com/frankban/quicktest v1.14.6 // indirect
    github.com/gabriel-vasile/mimetype v1.4.1 // indirect
    github.com/getsentry/sentry-go v0.18.0 // indirect
    github.com/glendc/go-external-ip v0.1.0 // indirect
    github.com/go-chi/chi v4.1.2+incompatible // indirect
    github.com/go-chi/chi/v5 v5.0.10 // indirect
    github.com/go-chi/cors v1.2.1 // indirect
    @@ -64,7 +72,7 @@ require (
    github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
    github.com/google/go-cmp v0.5.9 // indirect
    github.com/google/gopacket v1.1.19 // indirect
    github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8 // indirect
    github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f // indirect
    github.com/google/uuid v1.3.1 // indirect
    github.com/gorilla/mux v1.8.0 // indirect
    github.com/gorilla/websocket v1.5.0 // indirect
    @@ -74,10 +82,15 @@ require (
    github.com/hashicorp/go-multierror v1.1.1 // indirect
    github.com/hashicorp/golang-lru v0.6.0 // indirect
    github.com/hashicorp/golang-lru/v2 v2.0.6 // indirect
    github.com/holiman/uint256 v1.2.2 // indirect
    github.com/huin/goupnp v1.2.0 // indirect
    github.com/iden3/go-iden3-crypto v0.0.13 // indirect
    github.com/iden3/go-rapidsnark/prover v0.0.9 // indirect
    github.com/iden3/go-rapidsnark/types v0.0.2 // indirect
    github.com/iden3/go-rapidsnark/verifier v0.0.3 // indirect
    github.com/iden3/go-rapidsnark/witness v0.0.3 // indirect
    github.com/ipfs/bbloom v0.0.4 // indirect
    github.com/ipfs/boxo v0.11.0 // indirect
    github.com/ipfs/boxo v0.13.1 // indirect
    github.com/ipfs/go-bitfield v1.1.0 // indirect
    github.com/ipfs/go-block-format v0.1.2 // indirect
    github.com/ipfs/go-blockservice v0.5.1 // indirect
    @@ -91,7 +104,7 @@ require (
    github.com/ipfs/go-fs-lock v0.0.7 // indirect
    github.com/ipfs/go-graphsync v0.14.4 // indirect
    github.com/ipfs/go-ipfs-blockstore v1.3.0 // indirect
    github.com/ipfs/go-ipfs-cmds v0.9.0 // indirect
    github.com/ipfs/go-ipfs-cmds v0.10.0 // indirect
    github.com/ipfs/go-ipfs-delay v0.0.1 // indirect
    github.com/ipfs/go-ipfs-ds-help v1.1.0 // indirect
    github.com/ipfs/go-ipfs-exchange-interface v0.2.0 // indirect
    @@ -111,11 +124,11 @@ require (
    github.com/ipfs/go-peertaskqueue v0.8.1 // indirect
    github.com/ipfs/go-unixfsnode v1.7.1 // indirect
    github.com/ipfs/go-verifcid v0.0.2 // indirect
    github.com/ipfs/kubo v0.22.0 // indirect
    github.com/ipfs/kubo v0.22.1-0.20230922134002-00e26e9396c3 // indirect
    github.com/ipld/go-car v0.5.0 // indirect
    github.com/ipld/go-car/v2 v2.10.2-0.20230622090957-499d0c909d33 // indirect
    github.com/ipld/go-codec-dagpb v1.6.0 // indirect
    github.com/ipld/go-ipld-prime v0.20.0 // indirect
    github.com/ipld/go-ipld-prime v0.21.0 // indirect
    github.com/jackpal/go-nat-pmp v1.0.2 // indirect
    github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
    github.com/jbenet/goprocess v0.1.4 // indirect
    @@ -128,22 +141,22 @@ require (
    github.com/libp2p/go-cidranger v1.1.0 // indirect
    github.com/libp2p/go-doh-resolver v0.4.0 // indirect
    github.com/libp2p/go-flow-metrics v0.1.0 // indirect
    github.com/libp2p/go-libp2p v0.29.2 // indirect
    github.com/libp2p/go-libp2p v0.31.0 // indirect
    github.com/libp2p/go-libp2p-asn-util v0.3.0 // indirect
    github.com/libp2p/go-libp2p-gostream v0.6.0 // indirect
    github.com/libp2p/go-libp2p-http v0.5.0 // indirect
    github.com/libp2p/go-libp2p-kad-dht v0.24.2 // indirect
    github.com/libp2p/go-libp2p-kad-dht v0.24.4 // indirect
    github.com/libp2p/go-libp2p-kbucket v0.6.3 // indirect
    github.com/libp2p/go-libp2p-pubsub v0.9.3 // indirect
    github.com/libp2p/go-libp2p-pubsub-router v0.6.0 // indirect
    github.com/libp2p/go-libp2p-record v0.2.0 // indirect
    github.com/libp2p/go-libp2p-routing-helpers v0.7.1 // indirect
    github.com/libp2p/go-libp2p-routing-helpers v0.7.3 // indirect
    github.com/libp2p/go-libp2p-xor v0.1.0 // indirect
    github.com/libp2p/go-mplex v0.7.0 // 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.1 // indirect
    github.com/libp2p/go-reuseport v0.3.0 // indirect
    github.com/libp2p/go-reuseport v0.4.0 // indirect
    github.com/libp2p/go-yamux/v4 v4.0.1 // indirect
    github.com/libp2p/zeroconf/v2 v2.2.0 // indirect
    github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
    @@ -161,41 +174,46 @@ require (
    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 v0.10.1 // indirect
    github.com/multiformats/go-multiaddr v0.11.0 // indirect
    github.com/multiformats/go-multiaddr-dns v0.3.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.4.1 // indirect
    github.com/multiformats/go-varint v0.0.7 // indirect
    github.com/oasisprotocol/curve25519-voi v0.0.0-20220708102147-0a8a51822cae // indirect
    github.com/onsi/ginkgo/v2 v2.11.0 // indirect
    github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 // indirect
    github.com/opencontainers/runtime-spec v1.1.0 // indirect
    github.com/opentracing/opentracing-go v1.2.0 // indirect
    github.com/openzipkin/zipkin-go v0.4.1 // indirect
    github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
    github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 // indirect
    github.com/petermattis/goid v0.0.0-20221018141743-354ef7f2fd21 // indirect
    github.com/pkg/errors v0.9.1 // indirect
    github.com/pmezard/go-difflib v1.0.0 // indirect
    github.com/polydawn/refmt v0.89.0 // indirect
    github.com/prometheus/client_golang v1.16.0 // indirect
    github.com/prometheus/client_model v0.4.0 // indirect
    github.com/prometheus/common v0.44.0 // indirect
    github.com/prometheus/procfs v0.11.0 // indirect
    github.com/prometheus/procfs v0.11.1 // indirect
    github.com/prometheus/statsd_exporter v0.22.8 // indirect
    github.com/quic-go/qpack v0.4.0 // indirect
    github.com/quic-go/qtls-go1-19 v0.3.3 // indirect
    github.com/quic-go/qtls-go1-20 v0.2.3 // indirect
    github.com/quic-go/quic-go v0.36.4 // indirect
    github.com/quic-go/qtls-go1-20 v0.3.3 // indirect
    github.com/quic-go/quic-go v0.38.1 // indirect
    github.com/quic-go/webtransport-go v0.5.3 // indirect
    github.com/raulk/go-watchdog v1.3.0 // indirect
    github.com/rivo/uniseg v0.2.0 // indirect
    github.com/rogpeppe/go-internal v1.10.0 // indirect
    github.com/rs/cors v1.8.3 // indirect
    github.com/rs/zerolog v1.30.0 // indirect
    github.com/samber/lo v1.36.0 // indirect
    github.com/sasha-s/go-deadlock v0.3.1 // indirect
    github.com/spaolacci/murmur3 v1.1.0 // indirect
    github.com/stretchr/testify v1.8.4 // indirect
    github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect
    github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect
    github.com/wasmerio/wasmer-go v1.0.4 // indirect
    github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect
    github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect
    github.com/whyrusleeping/cbor-gen v0.0.0-20230418232409-daab9ece03a0 // indirect
    @@ -226,24 +244,27 @@ require (
    go.uber.org/dig v1.17.0 // indirect
    go.uber.org/fx v1.20.0 // indirect
    go.uber.org/multierr v1.11.0 // indirect
    go.uber.org/zap v1.24.0 // indirect
    go.uber.org/zap v1.25.0 // indirect
    go4.org v0.0.0-20230225012048-214862532bf5 // indirect
    golang.org/x/crypto v0.13.0 // indirect
    golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 // indirect
    golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect
    golang.org/x/mod v0.12.0 // indirect
    golang.org/x/net v0.15.0 // indirect
    golang.org/x/oauth2 v0.8.0 // indirect
    golang.org/x/sync v0.3.0 // indirect
    golang.org/x/sys v0.12.0 // indirect
    golang.org/x/text v0.13.0 // indirect
    golang.org/x/tools v0.11.0 // indirect
    golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 // indirect
    golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
    gonum.org/v1/gonum v0.13.0 // indirect
    google.golang.org/appengine v1.6.7 // indirect
    google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
    google.golang.org/grpc v1.55.0 // indirect
    google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 // indirect
    google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e // indirect
    google.golang.org/genproto/googleapis/rpc v0.0.0-20230815205213-6bfd019c3878 // indirect
    google.golang.org/grpc v1.57.0 // indirect
    google.golang.org/protobuf v1.31.0 // indirect
    gopkg.in/square/go-jose.v2 v2.5.1 // indirect
    gopkg.in/yaml.v2 v2.4.0 // indirect
    gopkg.in/yaml.v3 v3.0.1 // indirect
    lukechampine.com/blake3 v1.2.1 // indirect
    )
    1,604 changes: 1,604 additions & 0 deletions go.sum
    1,604 additions, 0 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
    78 changes: 63 additions & 15 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -1,51 +1,97 @@
    package main

    import (
    "encoding/base64"
    "context"
    "encoding/hex"
    "encoding/json"
    "flag"
    "fmt"
    "log"
    "os"
    "path/filepath"
    "time"

    "go.vocdoni.io/dvote/api/censusdb"
    "go.vocdoni.io/dvote/censustree"
    "go.vocdoni.io/dvote/data"
    "go.vocdoni.io/dvote/data/compressor"
    "go.vocdoni.io/dvote/data/downloader"
    "go.vocdoni.io/dvote/data/ipfs"
    "go.vocdoni.io/dvote/db"
    "go.vocdoni.io/dvote/db/metadb"
    "go.vocdoni.io/proto/build/go/models"
    )

    func main() {
    data := flag.String("data", "", "'data' base64 attribute of ipfs published census")
    census_type := flag.Int("census_type", 1, "'censusType' base64 attribute of ipfs published census (by default 1)")
    log.SetFlags(log.Lshortfile | log.LstdFlags)
    // parse flags
    groupKey := flag.String("group-key", "census3key", "IPFS group key")
    uri := flag.String("uri", "", "IPFS URI of the census")
    flag.Parse()

    // init test key-value database
    if uri == nil || *uri == "" {
    log.Fatal("IPFS URI is required. Use -uri flag")
    }
    if groupKey == nil || *groupKey == "" {
    log.Fatal("Group key is required. Use -group-key flag")
    }
    // init temp folder and defer its removal
    testTempPath := "./temp"
    defer os.RemoveAll(testTempPath)
    // init ipfs service
    storageConf := data.IPFSNewConfig(filepath.Join(testTempPath, "ipfs"))
    storage := new(ipfs.Handler)
    _ = storage.SetMultiAddress("/ip4/0.0.0.0/tcp/5005")
    if err := storage.Init(storageConf); err != nil {
    log.Fatal(err)
    }
    downloader := downloader.NewDownloader(storage)
    downloader.Start()
    defer downloader.Stop()

    ipfsData := []byte{}

    ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
    defer cancel()

    wait := make(chan struct{})
    downloader.AddToQueue(*uri, func(uri string, dump []byte) {
    defer close(wait)
    log.Printf("census downloaded uri=%s size=%d\n", uri, len(dump))
    ipfsData = dump
    }, true)

    for {
    select {
    case <-ctx.Done():
    log.Fatal("timeout")
    case <-wait:
    log.Println("census imported")
    goto end
    }
    }
    end:
    // unmarshal the census dump
    census := censusdb.CensusDump{}
    if err := json.Unmarshal(ipfsData, &census); err != nil {
    log.Fatal(err)
    }
    // init test key-value database
    database, err := metadb.New(db.TypePebble, filepath.Join(testTempPath, "censusdb"))
    if err != nil {
    log.Fatal(err)
    }
    // set census type
    censusType := models.Census_Type(*census_type)
    // init the target tree
    dbTree, err := censustree.New(censustree.Options{
    ParentDB: database,
    CensusType: censusType,
    MaxLevels: censustree.DefaultMaxLevels,
    CensusType: models.Census_Type(census.Type),
    MaxLevels: census.MaxLevels,
    Name: "test",
    })
    if err != nil {
    log.Fatal(err)
    }
    bData, err := base64.StdEncoding.DecodeString(*data)
    if err != nil {
    log.Fatal(err)
    }
    // decompress the retrieved dump and import it into the target tree
    decompressDump := compressor.NewCompressor().DecompressBytes(bData)
    decompressDump := compressor.NewCompressor().DecompressBytes(census.Data)
    if err := dbTree.ImportDump(decompressDump); err != nil {
    log.Fatal(err)
    }
    @@ -54,7 +100,9 @@ func main() {
    if err != nil {
    log.Fatal(err)
    }
    fmt.Println("Root:\n\t", hex.EncodeToString(newRoot))
    // print results
    fmt.Println("Received root:\n\t", hex.EncodeToString(census.RootHash))
    fmt.Println("Computed root:\n\t", hex.EncodeToString(newRoot))
    fmt.Println("Leaves (key-value):")
    dbTree.IterateLeaves(func(key, value []byte) bool {
    fmt.Println("\t", hex.EncodeToString(key), dbTree.BytesToBigInt(value))
  7. lucasmenendez revised this gist Sep 22, 2023. 1 changed file with 13 additions and 30 deletions.
    43 changes: 13 additions & 30 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -3,26 +3,23 @@ package main
    import (
    "encoding/base64"
    "encoding/hex"
    "flag"
    "fmt"
    "log"
    "os"
    "path/filepath"

    "go.vocdoni.io/dvote/api/censusdb"
    "go.vocdoni.io/dvote/censustree"
    "go.vocdoni.io/dvote/data/compressor"
    "go.vocdoni.io/dvote/db"
    "go.vocdoni.io/dvote/db/metadb"
    "go.vocdoni.io/proto/build/go/models"
    )

    var (
    data string = "KLUv/UQAJgF1CQAEERQgABiT7XhIAmfRhUNzqZzujeLgjUMPAADITmdtwRsAFCAAONK8kbiZKPeMurPksZSeKHh+x6MAABSAH0dptAAAFCAA3rhpllm+XUGg5X4XnWy0LgC5IAwAAITiUGzmfAAUIADhMIqNApGEm/+yAL5YLLY0f76Q2TE8f3EmSG/+/Kqf6pLZaMv4kbgMAAAs9hokoimx8FsRuj2JLt0A8udol3niuIQYJwAAWOw1SERTRdOgPoMC3mWefqdADEz+nK7YxyPlTXAvmOMSq6Qxjjxr26mKteEQEgAAQHY6awve88RW+qpw/qMHoHPD2pVyQTx39Yv3UrUn4qujldG6TA3pwUe3Y92h9AAAsNhrkIimCgAA6EAZkgFCByAZIHSA0EErciSrmoyVkkHtyFSonqA="
    root string = "+naYXn4lUkmNa6xrTCFK7KNNv0aItA95HhuqpGUoFS4="
    anonymous bool = true
    )

    func main() {
    log.SetFlags(log.LstdFlags | log.Lshortfile)
    data := flag.String("data", "", "'data' base64 attribute of ipfs published census")
    census_type := flag.Int("census_type", 1, "'censusType' base64 attribute of ipfs published census (by default 1)")
    flag.Parse()

    // init test key-value database
    testTempPath := "./temp"
    @@ -32,10 +29,7 @@ func main() {
    log.Fatal(err)
    }
    // set census type
    censusType := models.Census_ARBO_BLAKE2B
    if anonymous {
    censusType = models.Census_ARBO_POSEIDON
    }
    censusType := models.Census_Type(*census_type)
    // init the target tree
    dbTree, err := censustree.New(censustree.Options{
    ParentDB: database,
    @@ -46,35 +40,24 @@ func main() {
    if err != nil {
    log.Fatal(err)
    }
    bData, err := base64.StdEncoding.DecodeString(data)
    if err != nil {
    log.Fatal()
    }
    bRoot, err := base64.StdEncoding.DecodeString(root)
    bData, err := base64.StdEncoding.DecodeString(*data)
    if err != nil {
    log.Fatal()
    }

    dump := censusdb.CensusDump{
    Data: bData,
    Type: censusType,
    RootHash: bRoot,
    MaxLevels: 160,
    log.Fatal(err)
    }
    // decompress the retrieved dump and import it into the target tree
    decompressDump := compressor.NewCompressor().DecompressBytes(dump.Data)
    decompressDump := compressor.NewCompressor().DecompressBytes(bData)
    if err := dbTree.ImportDump(decompressDump); err != nil {
    log.Fatal(err)
    }

    // get root
    newRoot, err := dbTree.Root()
    if err != nil {
    log.Fatal(err)
    }
    log.Println(hex.EncodeToString(newRoot))

    fmt.Println("Root:\n\t", hex.EncodeToString(newRoot))
    fmt.Println("Leaves (key-value):")
    dbTree.IterateLeaves(func(key, value []byte) bool {
    log.Println(hex.EncodeToString(key), dbTree.BytesToBigInt(value))
    fmt.Println("\t", hex.EncodeToString(key), dbTree.BytesToBigInt(value))
    return true
    })
    }
  8. lucasmenendez created this gist Sep 22, 2023.
    249 changes: 249 additions & 0 deletions go.mod
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,249 @@
    module census3-census-explorer

    go 1.20

    require (
    go.vocdoni.io/dvote v1.9.1-0.20230920203924-f76c7d9b7ede
    go.vocdoni.io/proto v1.14.6-0.20230802094125-e07a41fda290
    )

    require (
    bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512 // indirect
    contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
    github.com/766b/chi-prometheus v0.0.0-20211217152057-87afa9aa2ca8 // indirect
    github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect
    github.com/DataDog/zstd v1.5.2 // indirect
    github.com/Jorropo/jsync v1.0.1 // indirect
    github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
    github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 // indirect
    github.com/benbjohnson/clock v1.3.5 // indirect
    github.com/beorn7/perks v1.0.1 // indirect
    github.com/blang/semver/v4 v4.0.0 // indirect
    github.com/cenkalti/backoff/v4 v4.2.1 // indirect
    github.com/ceramicnetwork/go-dag-jose v0.1.0 // indirect
    github.com/cespare/xxhash/v2 v2.2.0 // indirect
    github.com/cheggaaa/pb v1.0.29 // indirect
    github.com/cockroachdb/errors v1.9.1 // indirect
    github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
    github.com/cockroachdb/pebble v0.0.0-20230620232302-06034ff014e0 // indirect
    github.com/cockroachdb/redact v1.1.3 // indirect
    github.com/cockroachdb/tokenbucket v0.0.0-20230613231145-182959a1fad6 // indirect
    github.com/containerd/cgroups v1.1.0 // indirect
    github.com/coreos/go-systemd/v22 v22.5.0 // indirect
    github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect
    github.com/cskr/pubsub v1.0.2 // indirect
    github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect
    github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
    github.com/dgraph-io/badger v1.6.2 // indirect
    github.com/dgraph-io/ristretto v0.1.1 // indirect
    github.com/docker/go-units v0.5.0 // indirect
    github.com/dustin/go-humanize v1.0.1 // indirect
    github.com/elastic/gosigar v0.14.2 // indirect
    github.com/elgris/jsondiff v0.0.0-20160530203242-765b5c24c302 // indirect
    github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 // indirect
    github.com/felixge/httpsnoop v1.0.3 // indirect
    github.com/flynn/noise v1.0.0 // indirect
    github.com/francoispqt/gojay v1.2.13 // indirect
    github.com/frankban/quicktest v1.14.6 // indirect
    github.com/gabriel-vasile/mimetype v1.4.1 // indirect
    github.com/getsentry/sentry-go v0.18.0 // indirect
    github.com/go-chi/chi v4.1.2+incompatible // indirect
    github.com/go-chi/chi/v5 v5.0.10 // indirect
    github.com/go-chi/cors v1.2.1 // indirect
    github.com/go-kit/log v0.2.1 // indirect
    github.com/go-logfmt/logfmt v0.6.0 // indirect
    github.com/go-logr/logr v1.2.4 // indirect
    github.com/go-logr/stdr v1.2.2 // indirect
    github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
    github.com/godbus/dbus/v5 v5.1.0 // indirect
    github.com/gogo/protobuf v1.3.2 // indirect
    github.com/golang/glog v1.1.0 // indirect
    github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
    github.com/golang/mock v1.6.0 // indirect
    github.com/golang/protobuf v1.5.3 // indirect
    github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
    github.com/google/go-cmp v0.5.9 // indirect
    github.com/google/gopacket v1.1.19 // indirect
    github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8 // indirect
    github.com/google/uuid v1.3.1 // indirect
    github.com/gorilla/mux v1.8.0 // indirect
    github.com/gorilla/websocket v1.5.0 // indirect
    github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.3 // indirect
    github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e // indirect
    github.com/hashicorp/errwrap v1.1.0 // indirect
    github.com/hashicorp/go-multierror v1.1.1 // indirect
    github.com/hashicorp/golang-lru v0.6.0 // indirect
    github.com/hashicorp/golang-lru/v2 v2.0.6 // indirect
    github.com/huin/goupnp v1.2.0 // indirect
    github.com/iden3/go-iden3-crypto v0.0.13 // indirect
    github.com/ipfs/bbloom v0.0.4 // indirect
    github.com/ipfs/boxo v0.11.0 // indirect
    github.com/ipfs/go-bitfield v1.1.0 // indirect
    github.com/ipfs/go-block-format v0.1.2 // indirect
    github.com/ipfs/go-blockservice v0.5.1 // indirect
    github.com/ipfs/go-cid v0.4.1 // indirect
    github.com/ipfs/go-cidutil v0.1.0 // indirect
    github.com/ipfs/go-datastore v0.6.0 // indirect
    github.com/ipfs/go-ds-badger v0.3.0 // indirect
    github.com/ipfs/go-ds-flatfs v0.5.1 // indirect
    github.com/ipfs/go-ds-leveldb v0.5.0 // indirect
    github.com/ipfs/go-ds-measure v0.2.0 // indirect
    github.com/ipfs/go-fs-lock v0.0.7 // indirect
    github.com/ipfs/go-graphsync v0.14.4 // indirect
    github.com/ipfs/go-ipfs-blockstore v1.3.0 // indirect
    github.com/ipfs/go-ipfs-cmds v0.9.0 // indirect
    github.com/ipfs/go-ipfs-delay v0.0.1 // indirect
    github.com/ipfs/go-ipfs-ds-help v1.1.0 // indirect
    github.com/ipfs/go-ipfs-exchange-interface v0.2.0 // indirect
    github.com/ipfs/go-ipfs-exchange-offline v0.3.0 // indirect
    github.com/ipfs/go-ipfs-keystore v0.1.0 // indirect
    github.com/ipfs/go-ipfs-pq v0.0.3 // indirect
    github.com/ipfs/go-ipfs-redirects-file v0.1.1 // indirect
    github.com/ipfs/go-ipfs-util v0.0.3 // indirect
    github.com/ipfs/go-ipld-cbor v0.0.6 // indirect
    github.com/ipfs/go-ipld-format v0.5.0 // indirect
    github.com/ipfs/go-ipld-git v0.1.1 // indirect
    github.com/ipfs/go-ipld-legacy v0.2.1 // indirect
    github.com/ipfs/go-log v1.0.5 // indirect
    github.com/ipfs/go-log/v2 v2.5.1 // indirect
    github.com/ipfs/go-merkledag v0.11.0 // indirect
    github.com/ipfs/go-metrics-interface v0.0.1 // indirect
    github.com/ipfs/go-peertaskqueue v0.8.1 // indirect
    github.com/ipfs/go-unixfsnode v1.7.1 // indirect
    github.com/ipfs/go-verifcid v0.0.2 // indirect
    github.com/ipfs/kubo v0.22.0 // indirect
    github.com/ipld/go-car v0.5.0 // indirect
    github.com/ipld/go-car/v2 v2.10.2-0.20230622090957-499d0c909d33 // indirect
    github.com/ipld/go-codec-dagpb v1.6.0 // indirect
    github.com/ipld/go-ipld-prime v0.20.0 // indirect
    github.com/jackpal/go-nat-pmp v1.0.2 // indirect
    github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
    github.com/jbenet/goprocess v0.1.4 // indirect
    github.com/klauspost/compress v1.16.7 // indirect
    github.com/klauspost/cpuid/v2 v2.2.5 // indirect
    github.com/koron/go-ssdp v0.0.4 // indirect
    github.com/kr/pretty v0.3.1 // indirect
    github.com/kr/text v0.2.0 // indirect
    github.com/libp2p/go-buffer-pool v0.1.0 // indirect
    github.com/libp2p/go-cidranger v1.1.0 // indirect
    github.com/libp2p/go-doh-resolver v0.4.0 // indirect
    github.com/libp2p/go-flow-metrics v0.1.0 // indirect
    github.com/libp2p/go-libp2p v0.29.2 // indirect
    github.com/libp2p/go-libp2p-asn-util v0.3.0 // indirect
    github.com/libp2p/go-libp2p-gostream v0.6.0 // indirect
    github.com/libp2p/go-libp2p-http v0.5.0 // indirect
    github.com/libp2p/go-libp2p-kad-dht v0.24.2 // indirect
    github.com/libp2p/go-libp2p-kbucket v0.6.3 // indirect
    github.com/libp2p/go-libp2p-pubsub v0.9.3 // indirect
    github.com/libp2p/go-libp2p-pubsub-router v0.6.0 // indirect
    github.com/libp2p/go-libp2p-record v0.2.0 // indirect
    github.com/libp2p/go-libp2p-routing-helpers v0.7.1 // indirect
    github.com/libp2p/go-libp2p-xor v0.1.0 // indirect
    github.com/libp2p/go-mplex v0.7.0 // 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.1 // indirect
    github.com/libp2p/go-reuseport v0.3.0 // indirect
    github.com/libp2p/go-yamux/v4 v4.0.1 // indirect
    github.com/libp2p/zeroconf/v2 v2.2.0 // indirect
    github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
    github.com/mattn/go-colorable v0.1.13 // indirect
    github.com/mattn/go-isatty v0.0.19 // indirect
    github.com/mattn/go-runewidth v0.0.14 // indirect
    github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
    github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
    github.com/miekg/dns v1.1.55 // 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/mitchellh/go-homedir v1.1.0 // indirect
    github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // 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 v0.10.1 // indirect
    github.com/multiformats/go-multiaddr-dns v0.3.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.4.1 // indirect
    github.com/multiformats/go-varint v0.0.7 // indirect
    github.com/onsi/ginkgo/v2 v2.11.0 // indirect
    github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 // indirect
    github.com/opentracing/opentracing-go v1.2.0 // indirect
    github.com/openzipkin/zipkin-go v0.4.1 // indirect
    github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
    github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 // indirect
    github.com/pkg/errors v0.9.1 // indirect
    github.com/polydawn/refmt v0.89.0 // indirect
    github.com/prometheus/client_golang v1.16.0 // indirect
    github.com/prometheus/client_model v0.4.0 // indirect
    github.com/prometheus/common v0.44.0 // indirect
    github.com/prometheus/procfs v0.11.0 // indirect
    github.com/prometheus/statsd_exporter v0.22.8 // indirect
    github.com/quic-go/qpack v0.4.0 // indirect
    github.com/quic-go/qtls-go1-19 v0.3.3 // indirect
    github.com/quic-go/qtls-go1-20 v0.2.3 // indirect
    github.com/quic-go/quic-go v0.36.4 // indirect
    github.com/quic-go/webtransport-go v0.5.3 // indirect
    github.com/raulk/go-watchdog v1.3.0 // indirect
    github.com/rivo/uniseg v0.2.0 // indirect
    github.com/rogpeppe/go-internal v1.10.0 // indirect
    github.com/rs/cors v1.8.3 // indirect
    github.com/rs/zerolog v1.30.0 // indirect
    github.com/samber/lo v1.36.0 // indirect
    github.com/spaolacci/murmur3 v1.1.0 // indirect
    github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect
    github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb // indirect
    github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect
    github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect
    github.com/whyrusleeping/cbor-gen v0.0.0-20230418232409-daab9ece03a0 // indirect
    github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f // indirect
    github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
    github.com/whyrusleeping/go-sysinfo v0.0.0-20190219211824-4a357d4b90b1 // indirect
    github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 // indirect
    github.com/xdg-go/pbkdf2 v1.0.0 // indirect
    github.com/xdg-go/scram v1.1.2 // indirect
    github.com/xdg-go/stringprep v1.0.4 // indirect
    github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
    go.mongodb.org/mongo-driver v1.12.1 // indirect
    go.opencensus.io v0.24.0 // indirect
    go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0 // indirect
    go.opentelemetry.io/otel v1.16.0 // indirect
    go.opentelemetry.io/otel/exporters/jaeger v1.14.0 // indirect
    go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 // indirect
    go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 // indirect
    go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0 // indirect
    go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.16.0 // indirect
    go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 // indirect
    go.opentelemetry.io/otel/exporters/zipkin v1.14.0 // indirect
    go.opentelemetry.io/otel/metric v1.16.0 // indirect
    go.opentelemetry.io/otel/sdk v1.16.0 // indirect
    go.opentelemetry.io/otel/trace v1.16.0 // indirect
    go.opentelemetry.io/proto/otlp v0.19.0 // indirect
    go.uber.org/atomic v1.11.0 // indirect
    go.uber.org/dig v1.17.0 // indirect
    go.uber.org/fx v1.20.0 // indirect
    go.uber.org/multierr v1.11.0 // indirect
    go.uber.org/zap v1.24.0 // indirect
    go4.org v0.0.0-20230225012048-214862532bf5 // indirect
    golang.org/x/crypto v0.13.0 // indirect
    golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 // indirect
    golang.org/x/mod v0.12.0 // indirect
    golang.org/x/net v0.15.0 // indirect
    golang.org/x/oauth2 v0.8.0 // indirect
    golang.org/x/sync v0.3.0 // indirect
    golang.org/x/sys v0.12.0 // indirect
    golang.org/x/text v0.13.0 // indirect
    golang.org/x/tools v0.11.0 // indirect
    golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
    gonum.org/v1/gonum v0.13.0 // indirect
    google.golang.org/appengine v1.6.7 // indirect
    google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
    google.golang.org/grpc v1.55.0 // indirect
    google.golang.org/protobuf v1.31.0 // indirect
    gopkg.in/square/go-jose.v2 v2.5.1 // indirect
    gopkg.in/yaml.v2 v2.4.0 // indirect
    lukechampine.com/blake3 v1.2.1 // indirect
    )
    80 changes: 80 additions & 0 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,80 @@
    package main

    import (
    "encoding/base64"
    "encoding/hex"
    "log"
    "os"
    "path/filepath"

    "go.vocdoni.io/dvote/api/censusdb"
    "go.vocdoni.io/dvote/censustree"
    "go.vocdoni.io/dvote/data/compressor"
    "go.vocdoni.io/dvote/db"
    "go.vocdoni.io/dvote/db/metadb"
    "go.vocdoni.io/proto/build/go/models"
    )

    var (
    data string = "KLUv/UQAJgF1CQAEERQgABiT7XhIAmfRhUNzqZzujeLgjUMPAADITmdtwRsAFCAAONK8kbiZKPeMurPksZSeKHh+x6MAABSAH0dptAAAFCAA3rhpllm+XUGg5X4XnWy0LgC5IAwAAITiUGzmfAAUIADhMIqNApGEm/+yAL5YLLY0f76Q2TE8f3EmSG/+/Kqf6pLZaMv4kbgMAAAs9hokoimx8FsRuj2JLt0A8udol3niuIQYJwAAWOw1SERTRdOgPoMC3mWefqdADEz+nK7YxyPlTXAvmOMSq6Qxjjxr26mKteEQEgAAQHY6awve88RW+qpw/qMHoHPD2pVyQTx39Yv3UrUn4qujldG6TA3pwUe3Y92h9AAAsNhrkIimCgAA6EAZkgFCByAZIHSA0EErciSrmoyVkkHtyFSonqA="
    root string = "+naYXn4lUkmNa6xrTCFK7KNNv0aItA95HhuqpGUoFS4="
    anonymous bool = true
    )

    func main() {
    log.SetFlags(log.LstdFlags | log.Lshortfile)

    // init test key-value database
    testTempPath := "./temp"
    defer os.RemoveAll(testTempPath)
    database, err := metadb.New(db.TypePebble, filepath.Join(testTempPath, "censusdb"))
    if err != nil {
    log.Fatal(err)
    }
    // set census type
    censusType := models.Census_ARBO_BLAKE2B
    if anonymous {
    censusType = models.Census_ARBO_POSEIDON
    }
    // init the target tree
    dbTree, err := censustree.New(censustree.Options{
    ParentDB: database,
    CensusType: censusType,
    MaxLevels: censustree.DefaultMaxLevels,
    Name: "test",
    })
    if err != nil {
    log.Fatal(err)
    }
    bData, err := base64.StdEncoding.DecodeString(data)
    if err != nil {
    log.Fatal()
    }
    bRoot, err := base64.StdEncoding.DecodeString(root)
    if err != nil {
    log.Fatal()
    }

    dump := censusdb.CensusDump{
    Data: bData,
    Type: censusType,
    RootHash: bRoot,
    MaxLevels: 160,
    }
    // decompress the retrieved dump and import it into the target tree
    decompressDump := compressor.NewCompressor().DecompressBytes(dump.Data)
    if err := dbTree.ImportDump(decompressDump); err != nil {
    log.Fatal(err)
    }

    newRoot, err := dbTree.Root()
    if err != nil {
    log.Fatal(err)
    }
    log.Println(hex.EncodeToString(newRoot))

    dbTree.IterateLeaves(func(key, value []byte) bool {
    log.Println(hex.EncodeToString(key), dbTree.BytesToBigInt(value))
    return true
    })
    }