This is an automated email from the ASF dual-hosted git repository.

smihaylov pushed a commit to branch tendermint
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-dta.git


The following commit(s) were added to refs/heads/tendermint by this push:
     new 5ea82a5  Remove IPFS
5ea82a5 is described below

commit 5ea82a5a28f630ae3c391c9a47e8bd0e290f51ef
Author: Stanislav Mihaylov <[email protected]>
AuthorDate: Mon Oct 7 18:18:54 2019 +0300

    Remove IPFS
---
 cmd/service/main.go              |  48 +--
 cmd/servicetester/tendertest1.sh |   4 +-
 go.mod                           |  16 +-
 go.sum                           | 647 +--------------------------------------
 libs/ipfs/apiconnector.go        | 174 -----------
 libs/ipfs/ipfs.go                |  43 ---
 libs/ipfs/memory.go              | 104 -------
 libs/ipfs/nodeconnector.go       | 259 ----------------
 libs/ipfs/nodeconnector_test.go  |  89 ------
 libs/transport/http.go           |   6 +
 pkg/api/proto.go                 |  48 +--
 pkg/bitcoinplugin/helpers.go     |  13 +-
 pkg/bitcoinplugin/service.go     |   2 +-
 pkg/common/chain.go              |   1 -
 pkg/common/common.go             |  28 +-
 pkg/config/config.go             |  12 +-
 pkg/config/default.go            |  14 -
 pkg/defaultservice/fulfillTX.go  |   8 +-
 pkg/defaultservice/init.go       |   9 -
 pkg/defaultservice/order.go      |  84 ++---
 pkg/defaultservice/orderTX.go    |   8 +-
 pkg/defaultservice/service.go    |   4 +-
 pkg/endpoints/endpoints.go       |  30 +-
 pkg/identity/identity.go         |  37 ++-
 pkg/tendermint/connector.go      |   7 +-
 25 files changed, 179 insertions(+), 1516 deletions(-)

diff --git a/cmd/service/main.go b/cmd/service/main.go
index 9c77efe..bb987f8 100644
--- a/cmd/service/main.go
+++ b/cmd/service/main.go
@@ -31,10 +31,8 @@ import (
        "strings"
        "syscall"
 
-       "github.com/apache/incubator-milagro-dta/libs/keystore"
-
        "github.com/apache/incubator-milagro-dta/libs/datastore"
-       "github.com/apache/incubator-milagro-dta/libs/ipfs"
+       "github.com/apache/incubator-milagro-dta/libs/keystore"
        "github.com/apache/incubator-milagro-dta/libs/logger"
        "github.com/apache/incubator-milagro-dta/libs/transport"
        "github.com/apache/incubator-milagro-dta/pkg/api"
@@ -79,22 +77,14 @@ func initConfig(args []string) error {
        // Init the config folder
        config.Init(configFolder(), cfg)
 
-       logger.Info("IPFS connector type: %s", cfg.IPFS.Connector)
-       var ipfsConnector ipfs.Connector
-       switch cfg.IPFS.Connector {
-       case "api":
-               ipfsConnector, err = 
ipfs.NewAPIConnector(ipfs.NodeAddr(cfg.IPFS.APIAddress))
-       case "embedded":
-               ipfsConnector, err = ipfs.NewNodeConnector(
-                       ipfs.AddLocalAddress(cfg.IPFS.ListenAddress),
-                       ipfs.AddBootstrapPeer(cfg.IPFS.Bootstrap...),
-                       ipfs.WithLevelDatastore(filepath.Join(configFolder(), 
"ipfs-data")),
-               )
-       }
+       // Init Tendermint node connector
+       tmConnector, err := 
tendermint.NewNodeConnector(cfg.Blockchain.BroadcastNode, cfg.Node.NodeID, nil, 
logger)
        if err != nil {
-               return errors.Wrap(err, "init IPFS connector")
+               return errors.Wrap(err, "Blockchain Node connector")
        }
 
+       logger.Info("Node connector address: %s", cfg.Blockchain.BroadcastNode)
+
        keyStore, err := keystore.NewFileStore(filepath.Join(configFolder(), 
keysFile))
        if err != nil {
                return err
@@ -103,11 +93,13 @@ func initConfig(args []string) error {
        if err != nil {
                return err
        }
-       newID, err := identity.StoreIdentity(rawDocID, secret, ipfsConnector, 
keyStore)
+       newID, err := identity.StoreIdentity(rawDocID, secret, tmConnector, 
keyStore)
        if err != nil {
                return err
        }
 
+       logger.Info("New Node ID: %s", newID)
+
        cfg.Node.NodeID = newID
        if initOptions.MasterFidNodeID != "" {
                cfg.Node.MasterFiduciaryNodeID = initOptions.MasterFidNodeID
@@ -115,10 +107,6 @@ func initConfig(args []string) error {
                cfg.Node.MasterFiduciaryNodeID = newID
        }
 
-       if initOptions.MasterFidNodeAddress != "" {
-               cfg.Node.MasterFiduciaryServer = 
initOptions.MasterFidNodeAddress
-       }
-
        if cfg.Node.MasterFiduciaryNodeID == "" {
                cfg.Node.MasterFiduciaryNodeID = newID
        }
@@ -153,21 +141,6 @@ func startDaemon(args []string) error {
                return errors.Wrap(err, "init datastore")
        }
 
-       logger.Info("IPFS connector type: %s", cfg.IPFS.Connector)
-       var ipfsConnector ipfs.Connector
-       switch cfg.IPFS.Connector {
-       case "api":
-               ipfsConnector, err = 
ipfs.NewAPIConnector(ipfs.NodeAddr(cfg.IPFS.APIAddress))
-       case "embedded":
-               ipfsConnector, err = ipfs.NewNodeConnector(
-                       ipfs.AddLocalAddress(cfg.IPFS.ListenAddress),
-                       ipfs.AddBootstrapPeer(cfg.IPFS.Bootstrap...),
-                       ipfs.WithLevelDatastore(filepath.Join(configFolder(), 
"ipfs-data")),
-               )
-       }
-       if err != nil {
-               return errors.Wrap(err, "init IPFS connector")
-       }
        keyStore, err := keystore.NewFileStore(filepath.Join(configFolder(), 
keysFile))
        if err != nil {
                return err
@@ -208,7 +181,6 @@ func startDaemon(args []string) error {
                defaultservice.WithRng(rand.Reader),
                defaultservice.WithDataStore(store),
                defaultservice.WithKeyStore(keyStore),
-               defaultservice.WithIPFS(ipfsConnector),
                defaultservice.WithTendermint(tmConnector),
                defaultservice.WithConfig(cfg),
        ); err != nil {
@@ -216,7 +188,7 @@ func startDaemon(args []string) error {
        }
        logger.Info("Service plugin loaded: %s", svcPlugin.Name())
 
-       if err := identity.CheckIdentity(cfg.Node.NodeID, cfg.Node.NodeName, 
ipfsConnector, keyStore); err != nil {
+       if err := identity.CheckIdentity(cfg.Node.NodeID, cfg.Node.NodeName, 
tmConnector, keyStore); err != nil {
                return errors.Wrap(err, "Invalid node identity")
        }
 
diff --git a/cmd/servicetester/tendertest1.sh b/cmd/servicetester/tendertest1.sh
index 7f91702..318f1e9 100755
--- a/cmd/servicetester/tendertest1.sh
+++ b/cmd/servicetester/tendertest1.sh
@@ -1,8 +1,8 @@
-ref=$(curl -s -X POST "127.0.0.1:5556/v1/order1" -H "accept: */*" -H 
"Content-Type: application/json" -d 
"{\"beneficiaryIDDocumentCID\":\"QmecffRZTSJDETCRLcjcPe7ynmYNyYpnh7WKzKTdmX1GBZ\",\"extension\":{\"coin\":\"0\"}}")
+ref=$(curl -s -X POST "127.0.0.1:5556/v1/order1" -H "accept: */*" -H 
"Content-Type: application/json" -d 
"{\"beneficiaryIDDocumentCID\":\"90bac919210be1ef29cd6da22d512c2f8a04693544fe6e474cb5d90c6fbe4645\",\"extension\":{\"coin\":\"0\"}}")
 
 #sleep long enough for blockchain to catch up
 sleep 4
 
-curl -X POST "127.0.0.1:5556/v1/order/secret1" -H "accept: */*" -H 
"Content-Type: application/json" -d 
"{\"orderReference\":$ref,\"beneficiaryIDDocumentCID\":\"QmecffRZTSJDETCRLcjcPe7ynmYNyYpnh7WKzKTdmX1GBZ\"}"
+curl -X POST "127.0.0.1:5556/v1/order/secret1" -H "accept: */*" -H 
"Content-Type: application/json" -d 
"{\"orderReference\":$ref,\"beneficiaryIDDocumentCID\":\"90bac919210be1ef29cd6da22d512c2f8a04693544fe6e474cb5d90c6fbe4645\"}"
 
 
diff --git a/go.mod b/go.mod
index 860eb9c..384d062 100644
--- a/go.mod
+++ b/go.mod
@@ -5,6 +5,7 @@ require (
        github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3
        github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d
        github.com/coreos/go-oidc v2.0.0+incompatible
+       github.com/fatih/color v1.7.0 // indirect
        github.com/go-kit/kit v0.9.0
        github.com/go-playground/locales v0.12.1 // indirect
        github.com/go-playground/universal-translator v0.16.0 // indirect
@@ -15,16 +16,9 @@ require (
        github.com/google/uuid v1.1.1
        github.com/gorilla/mux v1.7.3
        github.com/hokaccha/go-prettyjson v0.0.0-20190818114111-108c894c2c0e
-       github.com/ipfs/go-datastore v0.0.5
-       github.com/ipfs/go-ds-leveldb v0.0.2
-       github.com/ipfs/go-ipfs v0.4.22
-       github.com/ipfs/go-ipfs-api v0.0.1
-       github.com/ipfs/go-ipfs-config v0.0.3
-       github.com/ipfs/go-ipfs-files v0.0.3
-       github.com/ipfs/interface-go-ipfs-core v0.0.8
        github.com/leodido/go-urn v1.1.0 // indirect
-       github.com/libp2p/go-libp2p-crypto v0.0.2
-       github.com/libp2p/go-libp2p-peer v0.1.1
+       github.com/mattn/go-colorable v0.1.4 // indirect
+       github.com/mattn/go-isatty v0.0.9 // indirect
        github.com/multiformats/go-multihash v0.0.5
        github.com/mwitkow/go-proto-validators v0.1.0
        github.com/pkg/errors v0.8.1
@@ -41,8 +35,4 @@ require (
        gopkg.in/square/go-jose.v2 v2.3.1 // indirect
 )
 
-replace github.com/golangci/golangci-lint => github.com/golangci/golangci-lint 
v1.18.0
-
-replace github.com/go-critic/go-critic v0.0.0-20181204210945-ee9bf5809ead => 
github.com/go-critic/go-critic v0.3.5-0.20190526074819-1df300866540
-
 go 1.13
diff --git a/go.sum b/go.sum
index fd46e0f..b36c254 100644
--- a/go.sum
+++ b/go.sum
@@ -1,24 +1,9 @@
-bazil.org/fuse v0.0.0-20180421153158-65cc252bf669 
h1:FNCRpXiquG1aoyqcIWVFmpTSKVcx2bQD38uZZeGtdlw=
-bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod 
h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
 cloud.google.com/go v0.26.0/go.mod 
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod 
h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
-github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod 
h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
 github.com/BurntSushi/toml v0.3.1/go.mod 
h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Kubuxu/go-os-helper v0.0.1/go.mod 
h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y=
-github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd/go.mod 
h1:bqoB8kInrTeEtYAwaIXoSRqdwnjQmFhsfusnzyui6yY=
 github.com/OneOfOne/xxhash v1.2.2/go.mod 
h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
-github.com/OpenPeeDeeP/depguard v1.0.0/go.mod 
h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o=
-github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod 
h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
-github.com/Stebalien/go-bitfield v0.0.0-20180330043415-076a62f9ce6e/go.mod 
h1:3oM7gXIttpYDAJXpVNnSCiUMYBLIZ6cb1t+Ip982MRo=
-github.com/Stebalien/go-bitfield v0.0.1 
h1:X3kbSSPUaJK60wV2hjOPZwmpljr6VGCqdq4cBLhbQBo=
-github.com/Stebalien/go-bitfield v0.0.1/go.mod 
h1:GNjFpasyUVkHMsfEOk8EFLJ9syQ6SI+XWrX9Wf2XH0s=
-github.com/TylerBrock/colorjson v0.0.0-20180527164720-95ec53f28296 
h1:JYWTroLXcNzSCgu66NMgdjwoMHQRbv2SoOVNFb4kRkE=
 github.com/TylerBrock/colorjson v0.0.0-20180527164720-95ec53f28296/go.mod 
h1:VSw57q4QFiWDbRnjdX8Cb3Ow0SFncRw+bA/ofY6Q83w=
-github.com/VividCortex/gohistogram v1.0.0 
h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE=
-github.com/VividCortex/gohistogram v1.0.0/go.mod 
h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
 github.com/VividCortex/gohistogram v1.0.0/go.mod 
h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
 github.com/Workiva/go-datastructures v1.0.50/go.mod 
h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA=
-github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg=
 github.com/aead/siphash v1.0.1/go.mod 
h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod 
h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod 
h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@ -26,776 +11,206 @@ github.com/armon/consul-api 
v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod 
h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
 github.com/beorn7/perks v1.0.0/go.mod 
h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
-github.com/bifurcation/mint v0.0.0-20181105073638-824af6541065/go.mod 
h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU=
-github.com/blang/semver v3.5.1+incompatible/go.mod 
h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
-github.com/bren2010/proquint v0.0.0-20160323162903-38337c27106d 
h1:QgeLLoPD3kRVmeu/1al9iIpIANMi9O1zXFm8BnYGCJg=
-github.com/bren2010/proquint v0.0.0-20160323162903-38337c27106d/go.mod 
h1:Jbj8eKecMNwf0KFI75skSUZqMB4UCRcndUScVBTWyUI=
 github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod 
h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0=
-github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod 
h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8=
-github.com/btcsuite/btcd v0.0.0-20190427004231-96897255fd17/go.mod 
h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI=
 github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3 
h1:A/EVblehb75cUgXA5njHPn0kLAsykn6mJGz7rnmW5W0=
 github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod 
h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI=
-github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f 
h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo=
 github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod 
h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
 github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod 
h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
-github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod 
h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
 github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d 
h1:yJzD/yFppdVCf6ApMkVy8cUxV0XrxdP9rVf6D87/Mng=
 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 
h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw=
 github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod 
h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
-github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd 
h1:qdGvebPBDuYDPGi1WCPjy1tGyMpmDK8IEapSsszn7HE=
 github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod 
h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY=
-github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723 
h1:ZA/jbKoGcVAnER6pCHPEkGdZOV7U1oLUedErBHCUMs0=
 github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod 
h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
-github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 
h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc=
 github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod 
h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
 github.com/btcsuite/winsvc v1.0.0/go.mod 
h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
-github.com/cenkalti/backoff v2.1.1+incompatible 
h1:tKJnvO2kl0zmb/jA5UKAt4VoEVw1qxKWjE/Bpp46npY=
-github.com/cenkalti/backoff v2.1.1+incompatible/go.mod 
h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
 github.com/cespare/xxhash v1.1.0/go.mod 
h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
-github.com/cheekybits/genny v1.0.0 
h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE=
-github.com/cheekybits/genny v1.0.0/go.mod 
h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ=
-github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod 
h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U=
 github.com/client9/misspell v0.3.4/go.mod 
h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/coreos/bbolt v1.3.2/go.mod 
h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
 github.com/coreos/etcd v3.3.10+incompatible/go.mod 
h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
-github.com/coreos/go-etcd v2.0.0+incompatible/go.mod 
h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
 github.com/coreos/go-oidc v2.0.0+incompatible 
h1:+RStIopZ8wooMx+Vs5Bt8zMXxV1ABl5LbakNExNmZIg=
 github.com/coreos/go-oidc v2.0.0+incompatible/go.mod 
h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
 github.com/coreos/go-semver v0.2.0/go.mod 
h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-semver v0.2.1-0.20180108230905-e214231b295a 
h1:U0BbGfKnviqVBJQB4etvm+mKx53KfkumNLBt6YeF/0Q=
-github.com/coreos/go-semver v0.2.1-0.20180108230905-e214231b295a/go.mod 
h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod 
h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod 
h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/cpuguy83/go-md2man v1.0.10 
h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
-github.com/cpuguy83/go-md2man v1.0.10/go.mod 
h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
-github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d 
h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod 
h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-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/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 
h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0=
-github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod 
h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4=
-github.com/dgraph-io/badger v1.5.5-0.20190226225317-8115aed38f8f/go.mod 
h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ=
-github.com/dgraph-io/badger v1.6.0-rc1/go.mod 
h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod 
h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
-github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod 
h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
-github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod 
h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
 github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod 
h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
-github.com/dustin/go-humanize v1.0.0/go.mod 
h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/elgris/jsondiff v0.0.0-20160530203242-765b5c24c302/go.mod 
h1:qBlWZqWeVx9BjvqBsnC/8RUlAYpIFmPvgROcw0n1scE=
-github.com/etcd-io/bbolt v1.3.3 h1:gSJmxrs37LgTqR/oyJBWok6k6SvXEUerFTbltIhXkBM=
 github.com/etcd-io/bbolt v1.3.3/go.mod 
h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
-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/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 
h1:0JZ+dUmQeA8IIVUMzysrX4/AKuQwWhV2dYQuPZdvdSQ=
 github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod 
h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64=
-github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 
h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A=
 github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod 
h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg=
-github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 
h1:E2s37DuLxFhQDg5gKsWoLBOB0n+ZW8s599zru8FJ2/Y=
 github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod 
h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0=
-github.com/fatih/color v1.6.0/go.mod 
h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
 github.com/fatih/color v1.7.0/go.mod 
h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
-github.com/fd/go-nat v1.0.0/go.mod 
h1:BTBu/CKvMmOMUPkKVef1pngt2WFH/lg7E6yQnulfp6E=
-github.com/fortytw2/leaktest v1.3.0 
h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
 github.com/fortytw2/leaktest v1.3.0/go.mod 
h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
-github.com/fsnotify/fsnotify v1.4.7 
h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
-github.com/fsnotify/fsnotify v1.4.7/go.mod 
h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.7/go.mod 
h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/ghodss/yaml v1.0.0/go.mod 
h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/go-check/check v0.0.0-20180628173108-788fd7840127 
h1:0gkP6mzaMqkmpcJYCFOLkIBwI7xFExG03bbkOkCvUPI=
-github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod 
h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98=
-github.com/go-critic/go-critic v0.3.5-0.20190526074819-1df300866540/go.mod 
h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA=
-github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=
 github.com/go-kit/kit v0.8.0/go.mod 
h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk=
 github.com/go-kit/kit v0.9.0/go.mod 
h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-lintpack/lintpack v0.5.2/go.mod 
h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM=
 github.com/go-logfmt/logfmt v0.3.0/go.mod 
h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 github.com/go-logfmt/logfmt v0.4.0 
h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=
 github.com/go-logfmt/logfmt v0.4.0/go.mod 
h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-ole/go-ole v1.2.1/go.mod 
h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
 github.com/go-playground/locales v0.12.1 
h1:2FITxuFt/xuCNP1Acdhv62OzaCiviiE4kotfhkmOqEc=
 github.com/go-playground/locales v0.12.1/go.mod 
h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
 github.com/go-playground/universal-translator v0.16.0 
h1:X++omBR/4cE2MNg91AoC3rmGrCjJ8eAeUP/K/EKx4DM=
 github.com/go-playground/universal-translator v0.16.0/go.mod 
h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY=
 github.com/go-stack/stack v1.8.0/go.mod 
h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw=
 github.com/go-test/deep v1.0.2/go.mod 
h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
-github.com/go-toolsmith/astcast v1.0.0/go.mod 
h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4=
-github.com/go-toolsmith/astcopy v1.0.0/go.mod 
h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ=
-github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod 
h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY=
-github.com/go-toolsmith/astequal v1.0.0/go.mod 
h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY=
-github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod 
h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg=
-github.com/go-toolsmith/astfmt v1.0.0/go.mod 
h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw=
-github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod 
h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU=
-github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod 
h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk=
-github.com/go-toolsmith/astp v1.0.0/go.mod 
h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI=
-github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod 
h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks=
-github.com/go-toolsmith/pkgload v1.0.0/go.mod 
h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc=
-github.com/go-toolsmith/strparse v1.0.0/go.mod 
h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8=
-github.com/go-toolsmith/typep v1.0.0/go.mod 
h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU=
 github.com/go-yaml/yaml v2.1.0+incompatible 
h1:RYi2hDdss1u4YE7GwixGzWwVo47T8UQwnTLB6vQiq+o=
 github.com/go-yaml/yaml v2.1.0+incompatible/go.mod 
h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0=
-github.com/gobwas/glob v0.2.3/go.mod 
h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
 github.com/gogo/protobuf v1.1.1/go.mod 
h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
 github.com/gogo/protobuf v1.2.1/go.mod 
h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
 github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE=
 github.com/gogo/protobuf v1.3.0/go.mod 
h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b 
h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod 
h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod 
h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/mock v1.0.0/go.mod 
h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/mock v1.1.1/go.mod 
h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.2.0/go.mod 
h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/protobuf v1.2.0/go.mod 
h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.0/go.mod 
h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0=
-github.com/golang/protobuf v1.3.1 
h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
 github.com/golang/protobuf v1.3.1/go.mod 
h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2 
h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
 github.com/golang/protobuf v1.3.2/go.mod 
h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db 
h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
-github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod 
h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
 github.com/golang/snappy v0.0.1/go.mod 
h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod 
h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4=
-github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod 
h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk=
-github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod 
h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0=
-github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod 
h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8=
-github.com/golangci/go-tools v0.0.0-20190318055746-e32c54105b7c/go.mod 
h1:unzUULGw35sjyOYjUt0jMTXqHlZPpPc6e+xfO4cd6mM=
-github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod 
h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o=
-github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod 
h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU=
-github.com/golangci/gofmt v0.0.0-20181222123516-0b8337e80d98/go.mod 
h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU=
-github.com/golangci/golangci-lint v1.18.0/go.mod 
h1:kaqo8l0OZKYPtjNmG4z4HrWLgcYNIJ9B9q3LWri9uLg=
-github.com/golangci/gosec v0.0.0-20190211064107-66fb7fc33547/go.mod 
h1:0qUabqiIQgfmlAmulqxyiGkkyF6/tOGSnY2cnPVwrzU=
-github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod 
h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU=
-github.com/golangci/lint-1 v0.0.0-20190420132249-ee948d087217/go.mod 
h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg=
-github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod 
h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o=
-github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod 
h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA=
-github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod 
h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI=
-github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod 
h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4=
-github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod 
h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ=
 github.com/google/btree v1.0.0/go.mod 
h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
 github.com/google/go-cmp v0.2.0/go.mod 
h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
 github.com/google/gofuzz v1.0.0/go.mod 
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
 github.com/google/uuid v1.1.1/go.mod 
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod 
h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
 github.com/gorilla/mux v1.7.3/go.mod 
h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/websocket v1.4.0 
h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
 github.com/gorilla/websocket v1.4.0/go.mod 
h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
 github.com/gorilla/websocket v1.4.1 
h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
 github.com/gorilla/websocket v1.4.1/go.mod 
h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gostaticanalysis/analysisutil 
v0.0.0-20190318220348-4088753ea4d3/go.mod 
h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE=
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod 
h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod 
h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
 github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod 
h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
-github.com/gxed/go-shellwords v1.0.3/go.mod 
h1:N7paucT91ByIjmVJHhvoarjoQnmsi3Jd3vH7VqgtMxQ=
-github.com/gxed/hashland/keccakpg v0.0.1/go.mod 
h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU=
-github.com/gxed/hashland/murmur3 v0.0.1/go.mod 
h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48=
-github.com/gxed/pubsub v0.0.0-20180201040156-26ebdf44f824/go.mod 
h1:OiEWyHgK+CWrmOlVquHaIK1vhpUJydC9m0Je6mhaiNE=
-github.com/hashicorp/errwrap v1.0.0 
h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
-github.com/hashicorp/errwrap v1.0.0/go.mod 
h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
-github.com/hashicorp/go-multierror v1.0.0 
h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
-github.com/hashicorp/go-multierror v1.0.0/go.mod 
h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
-github.com/hashicorp/golang-lru v0.5.0/go.mod 
h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1 
h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
-github.com/hashicorp/golang-lru v0.5.1/go.mod 
h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod 
h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
 github.com/hashicorp/hcl v1.0.0/go.mod 
h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
 github.com/hokaccha/go-prettyjson v0.0.0-20190818114111-108c894c2c0e 
h1:0aewS5NTyxftZHSnFaJmWE5oCCrj4DyEXkAiMa1iZJM=
 github.com/hokaccha/go-prettyjson v0.0.0-20190818114111-108c894c2c0e/go.mod 
h1:pFlLw2CfqZiIBOx6BuCeRLCrfxBJipTY0nIOF/VbGcI=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
 github.com/hpcloud/tail v1.0.0/go.mod 
h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/hsanjuan/go-libp2p-gostream v0.0.31/go.mod 
h1:cWvV5/NQ5XWi0eQZnX/svsAk6NLc4U26pItvj0eDeRk=
-github.com/hsanjuan/go-libp2p-http v0.0.2/go.mod 
h1:MynY94gfOZxrw/0lVF4o7vbV2Zr84IC8sLBXmj8F5IE=
-github.com/huin/goupnp v0.0.0-20180415215157-1395d1447324/go.mod 
h1:MZ2ZmwcBpvOoJ22IJsc7va19ZwoheaBk43rKg12SKag=
-github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo=
-github.com/huin/goupnp v1.0.0/go.mod 
h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc=
-github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod 
h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod 
h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/ipfs/bbloom v0.0.1 h1:s7KkiBPfxCeDVo47KySjK0ACPc5GJRUxFpdyWEuDjhw=
-github.com/ipfs/bbloom v0.0.1/go.mod 
h1:oqo8CVWsJFMOZqTglBG4wydCE4IQA/G2/SEofB0rjUI=
-github.com/ipfs/dir-index-html v1.0.3/go.mod 
h1:TG9zbaH/+4MnkGel0xF4SLNhk+YZvBNo6jjBkO/LaWc=
-github.com/ipfs/go-bitswap v0.0.3/go.mod 
h1:jadAZYsP/tcRMl47ZhFxhaNuDQoXawT8iHMg+iFoQbg=
-github.com/ipfs/go-bitswap v0.0.8-0.20190704155249-cbb485998356 
h1:DNc/6p5YnnHWnKab5Lmg6BS4CsRjWyYvapaIsQELAJg=
-github.com/ipfs/go-bitswap v0.0.8-0.20190704155249-cbb485998356/go.mod 
h1:kYh8QssUH3mAuCwV3WmfcSqwJLhQC4WynKpd1hxt85A=
-github.com/ipfs/go-block-format v0.0.1/go.mod 
h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc=
-github.com/ipfs/go-block-format v0.0.2 
h1:qPDvcP19izTjU8rgo6p7gTXZlkMkF5bz5G3fqIsSCPE=
-github.com/ipfs/go-block-format v0.0.2/go.mod 
h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY=
-github.com/ipfs/go-blockservice v0.0.3 
h1:40OvwrxeudTAlUGUAKNYnNPcwQeLtXedjzTWecnUinQ=
-github.com/ipfs/go-blockservice v0.0.3/go.mod 
h1:/NNihwTi6V2Yr6g8wBI+BSwPuURpBRMtYNGrlxZ8KuI=
-github.com/ipfs/go-cid v0.0.1/go.mod 
h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM=
-github.com/ipfs/go-cid v0.0.2 h1:tuuKaZPU1M6HcejsO3AcYWW8sZ8MTvyxfc4uqB4eFE8=
-github.com/ipfs/go-cid v0.0.2/go.mod 
h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM=
-github.com/ipfs/go-cidutil v0.0.2 
h1:CNOboQf1t7Qp0nuNh8QMmhJs0+Q//bRL1axtCnIB1Yo=
-github.com/ipfs/go-cidutil v0.0.2/go.mod 
h1:ewllrvrxG6AMYStla3GD7Cqn+XYSLqjK0vc+086tB6s=
-github.com/ipfs/go-datastore v0.0.1/go.mod 
h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE=
-github.com/ipfs/go-datastore v0.0.3/go.mod 
h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE=
-github.com/ipfs/go-datastore v0.0.5 
h1:q3OfiOZV5rlsK1H5V8benjeUApRfMGs4Mrhmr6NriQo=
-github.com/ipfs/go-datastore v0.0.5/go.mod 
h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE=
-github.com/ipfs/go-detect-race v0.0.1/go.mod 
h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps=
-github.com/ipfs/go-ds-badger v0.0.2/go.mod 
h1:Y3QpeSFWQf6MopLTiZD+VT6IC1yZqaGmjvRcKeSGij8=
-github.com/ipfs/go-ds-badger v0.0.5/go.mod 
h1:g5AuuCGmr7efyzQhLL8MzwqcauPojGPUaHzfGTzuE3s=
-github.com/ipfs/go-ds-flatfs v0.0.2/go.mod 
h1:YsMGWjUieue+smePAWeH/YhHtlmEMnEGhiwIn6K6rEM=
-github.com/ipfs/go-ds-leveldb v0.0.1/go.mod 
h1:feO8V3kubwsEF22n0YRQCffeb79OOYIykR4L04tMOYc=
-github.com/ipfs/go-ds-leveldb v0.0.2 
h1:P5HB59Zblym0B5XYOeEyw3YtPtbpIqQCavCSWaWEEk8=
-github.com/ipfs/go-ds-leveldb v0.0.2/go.mod 
h1:CWFeBh5IAAscWyG/QRH+lJaAlnLWjsfPSNs4teyPUp0=
-github.com/ipfs/go-ds-measure v0.0.1/go.mod 
h1:wiH6bepKsgyNKpz3nyb4erwhhIVpIxnZbsjN1QpVbbE=
-github.com/ipfs/go-fs-lock v0.0.1/go.mod 
h1:DNBekbboPKcxs1aukPSaOtFA3QfSdi5C855v0i9XJ8Y=
-github.com/ipfs/go-ipfs v0.4.22 h1:dDUSkIj0kSrMJW55wOm9P+mYewxCDSATy+PGZrShdfI=
-github.com/ipfs/go-ipfs v0.4.22/go.mod 
h1:vgIn+MMrMEN2Yd6AWxAZVP/+YGI8dSGSgwiTEU6R2kw=
-github.com/ipfs/go-ipfs-addr v0.0.1 
h1:DpDFybnho9v3/a1dzJ5KnWdThWD1HrFLpQ+tWIyBaFI=
-github.com/ipfs/go-ipfs-addr v0.0.1/go.mod 
h1:uKTDljHT3Q3SUWzDLp3aYUi8MrY32fgNgogsIa0npjg=
-github.com/ipfs/go-ipfs-api v0.0.1 
h1:4wx4mSgeq5FwMN8LDF7WLwPDKEd+YKjgySrpOJQ2r8o=
-github.com/ipfs/go-ipfs-api v0.0.1/go.mod 
h1:0FhXgCzrLu7qNmdxZvgYqD9jFzJxzz1NAVt3OQ0WOIc=
-github.com/ipfs/go-ipfs-blockstore v0.0.1 
h1:O9n3PbmTYZoNhkgkEyrXTznbmktIXif62xLX+8dPHzc=
-github.com/ipfs/go-ipfs-blockstore v0.0.1/go.mod 
h1:d3WClOmRQKFnJ0Jz/jj/zmksX0ma1gROTlovZKBmN08=
-github.com/ipfs/go-ipfs-blocksutil v0.0.1/go.mod 
h1:Yq4M86uIOmxmGPUHv/uI7uKqZNtLb449gwKqXjIsnRk=
-github.com/ipfs/go-ipfs-chunker v0.0.1 
h1:cHUUxKFQ99pozdahi+uSC/3Y6HeRpi9oTeUHbE27SEw=
-github.com/ipfs/go-ipfs-chunker v0.0.1/go.mod 
h1:tWewYK0we3+rMbOh7pPFGDyypCtvGcBFymgY4rSDLAw=
-github.com/ipfs/go-ipfs-cmds v0.0.8/go.mod 
h1:TiK4e7/V31tuEb8YWDF8lN3qrnDH+BS7ZqWIeYJlAs8=
-github.com/ipfs/go-ipfs-config v0.0.1/go.mod 
h1:KDbHjNyg4e6LLQSQpkgQMBz6Jf4LXiWAcmnkcwmH0DU=
-github.com/ipfs/go-ipfs-config v0.0.3 
h1:Ep4tRdP1iVK76BgOprD9B/qtOEdpno+1Xb57BqydgGk=
-github.com/ipfs/go-ipfs-config v0.0.3/go.mod 
h1:KDbHjNyg4e6LLQSQpkgQMBz6Jf4LXiWAcmnkcwmH0DU=
-github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod 
h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
-github.com/ipfs/go-ipfs-delay v0.0.1 
h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ=
-github.com/ipfs/go-ipfs-delay v0.0.1/go.mod 
h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
-github.com/ipfs/go-ipfs-ds-help v0.0.1 
h1:QBg+Ts2zgeemK/dB0saiF/ykzRGgfoFMT90Rzo0OnVU=
-github.com/ipfs/go-ipfs-ds-help v0.0.1/go.mod 
h1:gtP9xRaZXqIQRh1HRpp595KbBEdgqWFxefeVKOV8sxo=
-github.com/ipfs/go-ipfs-exchange-interface v0.0.1 
h1:LJXIo9W7CAmugqI+uofioIpRb6rY30GUu7G6LUfpMvM=
-github.com/ipfs/go-ipfs-exchange-interface v0.0.1/go.mod 
h1:c8MwfHjtQjPoDyiy9cFquVtVHkO9b9Ob3FG91qJnWCM=
-github.com/ipfs/go-ipfs-exchange-offline v0.0.1 
h1:P56jYKZF7lDDOLx5SotVh5KFxoY6C81I1NSHW1FxGew=
-github.com/ipfs/go-ipfs-exchange-offline v0.0.1/go.mod 
h1:WhHSFCVYX36H/anEKQboAzpUws3x7UeEGkzQc3iNkM0=
-github.com/ipfs/go-ipfs-files v0.0.1/go.mod 
h1:INEFm0LL2LWXBhNJ2PMIIb2w45hpXgPjNoE7yA8Y1d4=
-github.com/ipfs/go-ipfs-files v0.0.2/go.mod 
h1:INEFm0LL2LWXBhNJ2PMIIb2w45hpXgPjNoE7yA8Y1d4=
-github.com/ipfs/go-ipfs-files v0.0.3 
h1:ME+QnC3uOyla1ciRPezDW0ynQYK2ikOh9OCKAEg4uUA=
-github.com/ipfs/go-ipfs-files v0.0.3/go.mod 
h1:INEFm0LL2LWXBhNJ2PMIIb2w45hpXgPjNoE7yA8Y1d4=
-github.com/ipfs/go-ipfs-flags v0.0.1/go.mod 
h1:RnXBb9WV53GSfTrSDVK61NLTFKvWc60n+K9EgCDh+rA=
-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.1 
h1:zgUotX8dcAB/w/HidJh1zzc1yFq6Vm8J7T2F4itj/RU=
-github.com/ipfs/go-ipfs-pq v0.0.1/go.mod 
h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY=
-github.com/ipfs/go-ipfs-routing v0.0.1 
h1:394mZeTLcbM/LDO12PneBYvkZAUA+nRnmC0lAzDXKOY=
-github.com/ipfs/go-ipfs-routing v0.0.1/go.mod 
h1:k76lf20iKFxQTjcJokbPM9iBXVXVZhcOwc360N4nuKs=
-github.com/ipfs/go-ipfs-util v0.0.1 
h1:Wz9bL2wB2YBJqggkA4dD7oSmqB4cAnpNbGrlHJulv50=
-github.com/ipfs/go-ipfs-util v0.0.1/go.mod 
h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc=
-github.com/ipfs/go-ipld-cbor v0.0.1/go.mod 
h1:RXHr8s4k0NE0TKhnrxqZC9M888QfsBN9rhS5NjfKzY8=
-github.com/ipfs/go-ipld-cbor v0.0.2 
h1:amzFztBQQQ69UA5+f7JRfoXF/z2l//MGfEDHVkS20+s=
-github.com/ipfs/go-ipld-cbor v0.0.2/go.mod 
h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc=
-github.com/ipfs/go-ipld-format v0.0.1/go.mod 
h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms=
-github.com/ipfs/go-ipld-format v0.0.2 
h1:OVAGlyYT6JPZ0pEfGntFPS40lfrDmaDbQwNHEY2G9Zs=
-github.com/ipfs/go-ipld-format v0.0.2/go.mod 
h1:4B6+FM2u9OJ9zCV+kSbgFAZlOrv1Hqbf0INGQgiKf9k=
-github.com/ipfs/go-ipld-git v0.0.2/go.mod 
h1:RuvMXa9qtJpDbqngyICCU/d+cmLFXxLsbIclmD0Lcr0=
-github.com/ipfs/go-ipns v0.0.1 h1:5vX0+ehF55YWxE8Pmf4eB8szcP+fh24AXnvCkOmSLCc=
-github.com/ipfs/go-ipns v0.0.1/go.mod 
h1:HOiAXgGiH0wCSwsFM1IKdOy6YGT4iZafcsUKni703/g=
-github.com/ipfs/go-log v0.0.1 h1:9XTUN/rW64BCG1YhPK9Hoy3q8nr4gOmHHBpgFdfw6Lc=
-github.com/ipfs/go-log v0.0.1/go.mod 
h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM=
-github.com/ipfs/go-merkledag v0.0.3 
h1:A5DlOMzqTRDVmdgkf3dzCKCFmVWH4Zqwb0cbYXUs+Ro=
-github.com/ipfs/go-merkledag v0.0.3/go.mod 
h1:Oc5kIXLHokkE1hWGMBHw+oxehkAaTOqtEb7Zbh6BhLA=
-github.com/ipfs/go-metrics-interface v0.0.1 
h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg=
-github.com/ipfs/go-metrics-interface v0.0.1/go.mod 
h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY=
-github.com/ipfs/go-metrics-prometheus v0.0.2/go.mod 
h1:ELLU99AQQNi+zX6GCGm2lAgnzdSH3u5UVlCdqSXnEks=
-github.com/ipfs/go-mfs v0.0.7 h1:Xjqk0jAhgwhMHO39oH4jqP1QkeAGqDelxa814voygN0=
-github.com/ipfs/go-mfs v0.0.7/go.mod 
h1:10Hdow7wUbSlIamnOduxeP6MEp58TozZmdnAhugOKz8=
-github.com/ipfs/go-path v0.0.3/go.mod 
h1:zIRQUez3LuQIU25zFjC2hpBTHimWx7VK5bjZgRLbbdo=
-github.com/ipfs/go-path v0.0.4 h1:zG/id80tV51XAfvCsRJIEGQSHGuTDBi8RWrtr3EfcfY=
-github.com/ipfs/go-path v0.0.4/go.mod 
h1:zIRQUez3LuQIU25zFjC2hpBTHimWx7VK5bjZgRLbbdo=
-github.com/ipfs/go-peertaskqueue v0.0.5-0.20190704154349-f09820a0a5b6 
h1:/8zfOPbZ8q0YadOu7snck13TtYW9f08v65XDWag9+jU=
-github.com/ipfs/go-peertaskqueue v0.0.5-0.20190704154349-f09820a0a5b6/go.mod 
h1:03H8fhyeMfKNFWqzYEVyMbcPUeYrqP1MX6Kd+aN+rMQ=
-github.com/ipfs/go-todocounter v0.0.1 
h1:kITWA5ZcQZfrUnDNkRn04Xzh0YFaDFXsoO2A81Eb6Lw=
-github.com/ipfs/go-todocounter v0.0.1/go.mod 
h1:l5aErvQc8qKE2r7NDMjmq5UNAvuZy0rC8BHOplkWvZ4=
-github.com/ipfs/go-unixfs v0.0.4/go.mod 
h1:eIo/p9ADu/MFOuyxzwU+Th8D6xoxU//r590vUpWyfz8=
-github.com/ipfs/go-unixfs v0.0.6 
h1:mQ6KS3NK4GA9hyUpGdGItqt5llzyIx0Qy2UxC/A7bEo=
-github.com/ipfs/go-unixfs v0.0.6/go.mod 
h1:g41FlHFM/qacA3jzMPOYKIwNwbgTQEKJH2hQiq19Zrc=
-github.com/ipfs/go-verifcid v0.0.1 
h1:m2HI7zIuR5TFyQ1b79Da5N9dnnCP1vcu2QqawmWlK2E=
-github.com/ipfs/go-verifcid v0.0.1/go.mod 
h1:5Hrva5KBeIog4A+UpqlaIU+DEstipcJYQQZc0g37pY0=
-github.com/ipfs/hang-fds v0.0.1/go.mod 
h1:U4JNbzwTpk/qP2Ms4VgrZ4HcgJGVosBJqMXvwe4udSY=
-github.com/ipfs/interface-go-ipfs-core v0.0.8 
h1:nmEYOfK6QRf3VIdggoZ4rmbKXcC2g6cEdU13Z1CvmL4=
-github.com/ipfs/interface-go-ipfs-core v0.0.8/go.mod 
h1:RU+DSZXV+JdA7Yagu3OrSoB6hngSmMtK1w6ENOqmfQ8=
-github.com/ipfs/iptb v1.4.0/go.mod 
h1:1rzHpCYtNp87/+hTxG5TfCVn/yMY3dKnLn8tBiMfdmg=
-github.com/ipfs/iptb-plugins v0.0.2/go.mod 
h1:Vud+X6lHv5QlgVbqCPBHt91I0gPIRgmkD6/tMUsI07U=
-github.com/jackpal/gateway v1.0.4/go.mod 
h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA=
-github.com/jackpal/gateway v1.0.5 
h1:qzXWUJfuMdlLMtt0a3Dgt+xkWQiA5itDEITVJtuSwMc=
-github.com/jackpal/gateway v1.0.5/go.mod 
h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA=
-github.com/jackpal/go-nat-pmp v1.0.1 
h1:i0LektDkO1QlrTm/cSuP+PyBCDnYvjPLGl4LdWEMiaA=
-github.com/jackpal/go-nat-pmp v1.0.1/go.mod 
h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
-github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod 
h1:rGaEvXB4uRSZMmzKNLoXvTu1sfx+1kv/DojUlPrSZGs=
-github.com/jbenet/go-cienv v0.1.0/go.mod 
h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
-github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 
h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
-github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod 
h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
-github.com/jbenet/go-is-domain v1.0.2 
h1:11r5MSptcNFZyBoqubBQnVMUKRWLuRjL1banaIk+iYo=
-github.com/jbenet/go-is-domain v1.0.2/go.mod 
h1:xbRLRb0S7FgzDBTJlguhDVwLYM/5yNtvktxj2Ttfy7Q=
-github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c/go.mod 
h1:sdx1xVM9UuLw1tXnhJWN3piypTUO3vCIHYmG15KE/dU=
-github.com/jbenet/go-random-files v0.0.0-20190219210431-31b3f20ebded/go.mod 
h1:FKvZrl5nnaGnTAMewcq0i7wM5zHD75e0lwlnF8q46uo=
-github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2 
h1:vhC1OXXiT9R2pczegwz6moDvuRpggaroAXhPIseh57A=
-github.com/jbenet/go-temp-err-catcher 
v0.0.0-20150120210811-aac704a3f4f2/go.mod 
h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs=
-github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod 
h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY=
-github.com/jbenet/goprocess v0.1.3 
h1:YKyIEECS/XvcfHtBzxtjBBbWK+MbvA6dG8ASiqwvr10=
-github.com/jbenet/goprocess v0.1.3/go.mod 
h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4=
-github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89 
h1:12K8AlpT0/6QUXSfV0yi4Q0jkbq8NDtIKFtF61AoqV0=
 github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod 
h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
-github.com/jmhodges/levigo v1.0.0 
h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U=
 github.com/jmhodges/levigo v1.0.0/go.mod 
h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ=
 github.com/jonboulle/clockwork v0.1.0/go.mod 
h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
-github.com/jrick/logrotate v1.0.0 
h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI=
 github.com/jrick/logrotate v1.0.0/go.mod 
h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
-github.com/jtolds/gls v4.2.1+incompatible/go.mod 
h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod 
h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/kisielk/errcheck v1.1.0/go.mod 
h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
 github.com/kisielk/errcheck v1.2.0/go.mod 
h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
-github.com/kisielk/gotool v0.0.0-20161130080628-0de1eaf82fa3/go.mod 
h1:jxZFDH7ILpTPQTk+E2s+z4CUas9lVNjIuKR4c5/zKgM=
 github.com/kisielk/gotool v1.0.0/go.mod 
h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 
h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE=
 github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod 
h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
-github.com/klauspost/compress v1.4.0/go.mod 
h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
-github.com/klauspost/compress v1.4.1/go.mod 
h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
-github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod 
h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
-github.com/klauspost/cpuid v1.2.0/go.mod 
h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod 
h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b 
h1:wxtKgYHEncAU00muMD06dzLiahtGM1eouRNOzVV7tdQ=
-github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b/go.mod 
h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod 
h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod 
h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod 
h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/leodido/go-urn v1.1.0 
h1:Sm1gr51B1kKyfD2BlRcLSiEkffoG96g6TPv6eRoEiB8=
 github.com/leodido/go-urn v1.1.0/go.mod 
h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
-github.com/libp2p/go-addr-util v0.0.1 
h1:TpTQm9cXVRVSKsYbgQ7GKc3KbbHVTnbostgGaDEP+88=
-github.com/libp2p/go-addr-util v0.0.1/go.mod 
h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ=
-github.com/libp2p/go-buffer-pool v0.0.1/go.mod 
h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ=
 github.com/libp2p/go-buffer-pool v0.0.2 
h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs=
 github.com/libp2p/go-buffer-pool v0.0.2/go.mod 
h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM=
-github.com/libp2p/go-conn-security v0.0.1 
h1:4kMMrqrt9EUNCNjX1xagSJC+bq16uqjMe9lk1KBMVNs=
-github.com/libp2p/go-conn-security v0.0.1/go.mod 
h1:bGmu51N0KU9IEjX7kl2PQjgZa40JQWnayTvNMgD/vyk=
-github.com/libp2p/go-conn-security-multistream v0.0.1/go.mod 
h1:nc9vud7inQ+d6SO0I/6dSWrdMnHnzZNHeyUQqrAJulE=
-github.com/libp2p/go-conn-security-multistream v0.0.2 
h1:Ykz0lnNjxk+0SdslUmlLNyrleqdpS1S/VW+dxFdt74Y=
-github.com/libp2p/go-conn-security-multistream v0.0.2/go.mod 
h1:nc9vud7inQ+d6SO0I/6dSWrdMnHnzZNHeyUQqrAJulE=
-github.com/libp2p/go-flow-metrics v0.0.1 
h1:0gxuFd2GuK7IIP5pKljLwps6TvcuYgvG7Atqi3INF5s=
-github.com/libp2p/go-flow-metrics v0.0.1/go.mod 
h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8=
-github.com/libp2p/go-libp2p v0.0.2/go.mod 
h1:Qu8bWqFXiocPloabFGUcVG4kk94fLvfC8mWTDdFC9wE=
-github.com/libp2p/go-libp2p v0.0.27/go.mod 
h1:kjeVlESxQisK2DvyKp38/UMHYd9gAMTj3C3XOB/DEZo=
-github.com/libp2p/go-libp2p v0.0.28 
h1:tkDnM7iwrz9OSRRb8YAV4HYjv8TKsAxyxrV2sES9/Aw=
-github.com/libp2p/go-libp2p v0.0.28/go.mod 
h1:GBW0VbgEKe8ELXVpLQJduJYlJHRv/XfwP6Fo9TEcDJU=
-github.com/libp2p/go-libp2p-autonat v0.0.2/go.mod 
h1:fs71q5Xk+pdnKU014o2iq1RhMs9/PMaG5zXRFNnIIT4=
-github.com/libp2p/go-libp2p-autonat v0.0.3/go.mod 
h1:fs71q5Xk+pdnKU014o2iq1RhMs9/PMaG5zXRFNnIIT4=
-github.com/libp2p/go-libp2p-autonat v0.0.5/go.mod 
h1:cKt+qOSnWAZp0dqIuUk62v0/QAPw0vnLuVZnmzkOXRk=
-github.com/libp2p/go-libp2p-autonat v0.0.6 
h1:OCStANLLpeyQeWFUuqZJ7aS9+Bx0/uoVb1PtLA9fGTQ=
-github.com/libp2p/go-libp2p-autonat v0.0.6/go.mod 
h1:uZneLdOkZHro35xIhpbtTzLlgYturpu4J5+0cZK3MqE=
-github.com/libp2p/go-libp2p-autonat-svc v0.0.2/go.mod 
h1:j4iMiw0d3diRm5iB0noXumtb0mPvWrM1qAyh640cp8w=
-github.com/libp2p/go-libp2p-autonat-svc v0.0.5 
h1:bTom7QFAkJMXiA8ibSsKQ2+LKEHsXZz2IAWYolg/YYg=
-github.com/libp2p/go-libp2p-autonat-svc v0.0.5/go.mod 
h1:6aLiQelA0CKEcPR0TvE9bqJ7U8Mc0nVdwCoho3ROdck=
-github.com/libp2p/go-libp2p-blankhost v0.0.1/go.mod 
h1:Ibpbw/7cPPYwFb7PACIWdvxxv0t0XCCI10t7czjAjTc=
-github.com/libp2p/go-libp2p-circuit v0.0.1/go.mod 
h1:Dqm0s/BiV63j8EEAs8hr1H5HudqvCAeXxDyic59lCwE=
-github.com/libp2p/go-libp2p-circuit v0.0.7/go.mod 
h1:DFCgZ2DklFGTUIZIhSvbbWXTErUgjyNrJGfDHOrTKIA=
-github.com/libp2p/go-libp2p-circuit v0.0.8 
h1:vd9vZDy+LDssTvUuxIqnYUOAK2hfHoSQO2xjWhPVEmc=
-github.com/libp2p/go-libp2p-circuit v0.0.8/go.mod 
h1:DFCgZ2DklFGTUIZIhSvbbWXTErUgjyNrJGfDHOrTKIA=
-github.com/libp2p/go-libp2p-connmgr v0.0.1/go.mod 
h1:eUBBlbuwBBTd/eim7KV5x0fOD2UHDjSwhzmBL6miIx8=
-github.com/libp2p/go-libp2p-connmgr v0.0.6 
h1:oEUriPO/qWTvfHRPEU4HdNlNhYigdueOs2X3UZCdbYM=
-github.com/libp2p/go-libp2p-connmgr v0.0.6/go.mod 
h1:uwDfgdgqB5248sQYib1xo603cSsMg9PgAKu0Z+Y65Qk=
-github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod 
h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE=
-github.com/libp2p/go-libp2p-crypto v0.0.2 
h1:TTdJ4y6Uoa6NxQcuEaVkQfFRcQeCE2ReDk8Ok4I0Fyw=
-github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod 
h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I=
-github.com/libp2p/go-libp2p-daemon v0.0.6/go.mod 
h1:nkhjsjSzkF+tg6iScsTTgq9m+VfyMtXNpycYG4CFvC8=
-github.com/libp2p/go-libp2p-discovery v0.0.1/go.mod 
h1:ZkkF9xIFRLA1xCc7bstYFkd80gBGK8Fc1JqGoU2i+zI=
-github.com/libp2p/go-libp2p-discovery v0.0.4 
h1:/kZwOVmcUHvB94zegSJYnUA9EvT1g8APoQJb5FHyT1c=
-github.com/libp2p/go-libp2p-discovery v0.0.4/go.mod 
h1:ReQGiv7QTtza8FUWzewfuMmRDVOQVp+lxHlJJA8YQCM=
-github.com/libp2p/go-libp2p-host v0.0.1/go.mod 
h1:qWd+H1yuU0m5CwzAkvbSjqKairayEHdR5MMl7Cwa7Go=
-github.com/libp2p/go-libp2p-host v0.0.3 
h1:BB/1Z+4X0rjKP5lbQTmjEjLbDVbrcmLOlA6QDsN5/j4=
-github.com/libp2p/go-libp2p-host v0.0.3/go.mod 
h1:Y/qPyA6C8j2coYyos1dfRm0I8+nvd4TGrDGt4tA7JR8=
-github.com/libp2p/go-libp2p-interface-connmgr v0.0.1/go.mod 
h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
-github.com/libp2p/go-libp2p-interface-connmgr v0.0.4/go.mod 
h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
-github.com/libp2p/go-libp2p-interface-connmgr v0.0.5 
h1:KG/KNYL2tYzXAfMvQN5K1aAGTYSYUMJ1prgYa2/JI1E=
-github.com/libp2p/go-libp2p-interface-connmgr v0.0.5/go.mod 
h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
-github.com/libp2p/go-libp2p-interface-pnet v0.0.1 
h1:7GnzRrBTJHEsofi1ahFdPN9Si6skwXQE9UqR2S+Pkh8=
-github.com/libp2p/go-libp2p-interface-pnet v0.0.1/go.mod 
h1:el9jHpQAXK5dnTpKA4yfCNBZXvrzdOU75zz+C6ryp3k=
-github.com/libp2p/go-libp2p-kad-dht v0.0.4/go.mod 
h1:oaBflOQcuC8H+SVV0YN26H6AS+wcUEJyjUGV66vXuSY=
-github.com/libp2p/go-libp2p-kad-dht v0.0.13 
h1:ReMb41jJrngvXnU5Tirf74bBkXx4M9ne5QyFQPeNYtw=
-github.com/libp2p/go-libp2p-kad-dht v0.0.13/go.mod 
h1:3A4xaZJeJ3zD3jCg17mtI+rA7uuXiiQdKVyAZOhZo1U=
-github.com/libp2p/go-libp2p-kbucket v0.0.1/go.mod 
h1:Y0iQDHRTk/ZgM8PC4jExoF+E4j+yXWwRkdldkMa5Xm4=
-github.com/libp2p/go-libp2p-kbucket v0.1.1 
h1:ZrvW3qCM+lAuv7nrNts/zfEiClq+GZe8OIzX4Vb3Dwo=
-github.com/libp2p/go-libp2p-kbucket v0.1.1/go.mod 
h1:Y0iQDHRTk/ZgM8PC4jExoF+E4j+yXWwRkdldkMa5Xm4=
-github.com/libp2p/go-libp2p-loggables v0.0.1 
h1:HVww9oAnINIxbt69LJNkxD8lnbfgteXR97Xm4p3l9ps=
-github.com/libp2p/go-libp2p-loggables v0.0.1/go.mod 
h1:lDipDlBNYbpyqyPX/KcoO+eq0sJYEVR2JgOexcivchg=
-github.com/libp2p/go-libp2p-metrics v0.0.1 
h1:yumdPC/P2VzINdmcKZd0pciSUCpou+s0lwYCjBbzQZU=
-github.com/libp2p/go-libp2p-metrics v0.0.1/go.mod 
h1:jQJ95SXXA/K1VZi13h52WZMa9ja78zjyy5rspMsC/08=
-github.com/libp2p/go-libp2p-mplex v0.1.1 
h1:lSPS1VJ36P01gGO//KgcsmSah5uoC3X9r7WY5j+iP4c=
-github.com/libp2p/go-libp2p-mplex v0.1.1/go.mod 
h1:KUQWpGkCzfV7UIpi8SKsAVxyBgz1c9R5EvxgnwLsb/I=
-github.com/libp2p/go-libp2p-nat v0.0.2/go.mod 
h1:QrjXQSD5Dj4IJOdEcjHRkWTSomyxRo6HnUkf/TfQpLQ=
-github.com/libp2p/go-libp2p-nat v0.0.4 
h1:+KXK324yaY701On8a0aGjTnw8467kW3ExKcqW2wwmyw=
-github.com/libp2p/go-libp2p-nat v0.0.4/go.mod 
h1:N9Js/zVtAXqaeT99cXgTV9e75KpnWCvVOiGzlcHmBbY=
-github.com/libp2p/go-libp2p-net v0.0.0-20190226201932-e71fff5ba6e9/go.mod 
h1:8W6Wx3AZbTRTe8zSMLoAmT3mGyau+w6kGIRk+Z+MZ7Q=
-github.com/libp2p/go-libp2p-net v0.0.1/go.mod 
h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c=
-github.com/libp2p/go-libp2p-net v0.0.2 
h1:qP06u4TYXfl7uW/hzqPhlVVTSA2nw1B/bHBJaUnbh6M=
-github.com/libp2p/go-libp2p-net v0.0.2/go.mod 
h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c=
-github.com/libp2p/go-libp2p-netutil v0.0.1/go.mod 
h1:GdusFvujWZI9Vt0X5BKqwWWmZFxecf9Gt03cKxm2f/Q=
-github.com/libp2p/go-libp2p-peer v0.0.1/go.mod 
h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J0AMzcDUVruVoo=
-github.com/libp2p/go-libp2p-peer v0.1.1 
h1:qGCWD1a+PyZcna6htMPo26jAtqirVnJ5NvBQIKV7rRY=
-github.com/libp2p/go-libp2p-peer v0.1.1/go.mod 
h1:jkF12jGB4Gk/IOo+yomm+7oLWxF278F7UnrYUQ1Q8es=
-github.com/libp2p/go-libp2p-peerstore 
v0.0.0-20190226201924-e2df3e49eabf/go.mod 
h1:lLfgn0N3z2t+ER57a88K7NTZjMO27ez5TyWSURd428E=
-github.com/libp2p/go-libp2p-peerstore v0.0.1/go.mod 
h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20=
-github.com/libp2p/go-libp2p-peerstore v0.0.6 
h1:RgX/djPFXqZGktW0j2eF4NAX0pzDsCot45jO2GewC+g=
-github.com/libp2p/go-libp2p-peerstore v0.0.6/go.mod 
h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20=
-github.com/libp2p/go-libp2p-pnet v0.0.1 
h1:2e5d15M8XplUKsU4Fqrll5eDfqGg/7mHUufLkhbfKHM=
-github.com/libp2p/go-libp2p-pnet v0.0.1/go.mod 
h1:bWN8HqdpgCdKnXSCsJhbWjiU3UZFa/tIe4no5jCmHVw=
-github.com/libp2p/go-libp2p-protocol v0.0.0-20171212212132-b29f3d97e3a2/go.mod 
h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s=
-github.com/libp2p/go-libp2p-protocol v0.0.1 
h1:+zkEmZ2yFDi5adpVE3t9dqh/N9TbpFWywowzeEzBbLM=
-github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod 
h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s=
-github.com/libp2p/go-libp2p-pubsub v0.0.1/go.mod 
h1:fYKlZBOF2yrJzYlgeEVFSbYWfbS+E8Zix6gMZ0A6WgE=
-github.com/libp2p/go-libp2p-pubsub v0.0.3 
h1:DKVoDac2u1Dr8gX7B1HFjCrXkMxr8tfbnt0Fk1mmkgk=
-github.com/libp2p/go-libp2p-pubsub v0.0.3/go.mod 
h1:fYKlZBOF2yrJzYlgeEVFSbYWfbS+E8Zix6gMZ0A6WgE=
-github.com/libp2p/go-libp2p-pubsub-router v0.0.3 
h1:2EF+8nueIsA9Unpj1MxdlS9+dX29kwCxSttchMMfXsI=
-github.com/libp2p/go-libp2p-pubsub-router v0.0.3/go.mod 
h1:h5z0kyMFRu2J46tt15eEuLHKEmu1MrFghsGHqTc/iII=
-github.com/libp2p/go-libp2p-quic-transport 
v0.0.0-20190301030811-862195d91de1/go.mod 
h1:bw/6H57fSVn44ldP1Js6hnzpoiUm9YgBDKSv+ch+hWc=
-github.com/libp2p/go-libp2p-quic-transport v0.0.3 
h1:FGEPXsjpY9K6P3iMtJQPKGl45eXickBY1+xSJ84lVVI=
-github.com/libp2p/go-libp2p-quic-transport v0.0.3/go.mod 
h1:v2oVuaFLkxlFpkFbXUty3dfEYSlNb0sCzvf8cRi1m/k=
-github.com/libp2p/go-libp2p-record v0.0.1 
h1:zN7AS3X46qmwsw5JLxdDuI43cH5UYwovKxHPjKBYQxw=
-github.com/libp2p/go-libp2p-record v0.0.1/go.mod 
h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q=
-github.com/libp2p/go-libp2p-routing v0.0.1 
h1:hPMAWktf9rYi3ME4MG48qE7dq1ofJxiQbfdvpNntjhc=
-github.com/libp2p/go-libp2p-routing v0.0.1/go.mod 
h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys=
-github.com/libp2p/go-libp2p-routing-helpers v0.0.2 
h1:SLX7eDQE8Xo197NwNM/hM7WnH3w6fSGY9+G9HkiYwqQ=
-github.com/libp2p/go-libp2p-routing-helpers v0.0.2/go.mod 
h1:zf1ook9HoOQpfnVXrF4gGorkPrGGf1g25vgH5+4SRNU=
-github.com/libp2p/go-libp2p-secio v0.0.1/go.mod 
h1:IdG6iQybdcYmbTzxp4J5dwtUEDTOvZrT0opIDVNPrJs=
-github.com/libp2p/go-libp2p-secio v0.0.3 
h1:h3fPeDrej7bvvARnC2oSjAfcLZOaS4REZKgWCRQNpE4=
-github.com/libp2p/go-libp2p-secio v0.0.3/go.mod 
h1:hS7HQ00MgLhRO/Wyu1bTX6ctJKhVpm+j2/S2A5UqYb0=
-github.com/libp2p/go-libp2p-swarm v0.0.1/go.mod 
h1:mh+KZxkbd3lQnveQ3j2q60BM1Cw2mX36XXQqwfPOShs=
-github.com/libp2p/go-libp2p-swarm v0.0.5/go.mod 
h1:+nkJir4feiXtWQjb/4CQHMEK8Vw+c5nVVxT8R5bs0yY=
-github.com/libp2p/go-libp2p-swarm v0.0.6 
h1:gE0P/v2h+KEXtAi9YTw2UBOSODJ4m9VuuJ+ktc2LVUo=
-github.com/libp2p/go-libp2p-swarm v0.0.6/go.mod 
h1:s5GZvzg9xXe8sbeESuFpjt8CJPTCa8mhEusweJqyFy8=
-github.com/libp2p/go-libp2p-tls v0.0.1 
h1:UIslpmpKDbjEymuidtP2D9up00GfWrOs6eyTKf83uBA=
-github.com/libp2p/go-libp2p-tls v0.0.1/go.mod 
h1:DInSFKxm9XHHSbCdJRbcWctRYkmtPGnqiaUtgjiEa7g=
-github.com/libp2p/go-libp2p-transport 
v0.0.0-20190226201958-e8580c8a519d/go.mod 
h1:lcwgOszllbhvQXul37Kv5YbSYXPoUhRB2Z+Nr3jaBmo=
-github.com/libp2p/go-libp2p-transport v0.0.1/go.mod 
h1:UzbUs9X+PHOSw7S3ZmeOxfnwaQY5vGDzZmKPod3N3tk=
-github.com/libp2p/go-libp2p-transport v0.0.4/go.mod 
h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A=
-github.com/libp2p/go-libp2p-transport v0.0.5 
h1:pV6+UlRxyDpASSGD+60vMvdifSCby6JkJDfi+yUMHac=
-github.com/libp2p/go-libp2p-transport v0.0.5/go.mod 
h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A=
-github.com/libp2p/go-libp2p-transport-upgrader v0.0.1/go.mod 
h1:NJpUAgQab/8K6K0m+JmZCe5RUXG10UMEx4kWe9Ipj5c=
-github.com/libp2p/go-libp2p-transport-upgrader v0.0.3/go.mod 
h1:Ng1HzfMIopyYscMHNFmJqiMMcpgDlj0t+NyjVWW89ws=
-github.com/libp2p/go-libp2p-transport-upgrader v0.0.4 
h1:uGMOd14BL1oFlfb/cGfOxPjiTKBhzWV4aMjjoCF1Z1o=
-github.com/libp2p/go-libp2p-transport-upgrader v0.0.4/go.mod 
h1:RGq+tupk+oj7PzL2kn/m1w6YXxcIAYJYeI90h6BGgUc=
-github.com/libp2p/go-libp2p-yamux v0.1.2/go.mod 
h1:xUoV/RmYkg6BW/qGxA9XJyg+HzXFYkeXbnhjmnYzKp8=
-github.com/libp2p/go-libp2p-yamux v0.1.3 
h1:HmKvv2jWJ4GEm3iP7cEKjuw0POa6rK+Hcsu1FBKzpLc=
-github.com/libp2p/go-libp2p-yamux v0.1.3/go.mod 
h1:VGSQVrqkh6y4nm0189qqxMtvyBft44MOYYPpYKXiVt4=
-github.com/libp2p/go-maddr-filter v0.0.1/go.mod 
h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q=
-github.com/libp2p/go-maddr-filter v0.0.4 
h1:hx8HIuuwk34KePddrp2mM5ivgPkZ09JH4AvsALRbFUs=
-github.com/libp2p/go-maddr-filter v0.0.4/go.mod 
h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q=
-github.com/libp2p/go-mplex v0.0.1/go.mod 
h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0=
-github.com/libp2p/go-mplex v0.0.3/go.mod 
h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0=
-github.com/libp2p/go-mplex v0.0.4 
h1:043XJ3Zr7/Oz5cfyUaJwxUZyP02TngTpt4oq8R5UizQ=
-github.com/libp2p/go-mplex v0.0.4/go.mod 
h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0=
-github.com/libp2p/go-msgio v0.0.1/go.mod 
h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ=
-github.com/libp2p/go-msgio v0.0.2 
h1:ivPvEKHxmVkTClHzg6RXTYHqaJQ0V9cDbq+6lKb3UV0=
-github.com/libp2p/go-msgio v0.0.2/go.mod 
h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ=
-github.com/libp2p/go-nat v0.0.3 h1:l6fKV+p0Xa354EqQOQP+d8CivdLM4kl5GxC1hSc/UeI=
-github.com/libp2p/go-nat v0.0.3/go.mod 
h1:88nUEt0k0JD45Bk93NIwDqjlhiOwOoV36GchpcVc1yI=
-github.com/libp2p/go-reuseport v0.0.1 
h1:7PhkfH73VXfPJYKQ6JwS5I/eVcoyYi9IMNGc6FWpFLw=
-github.com/libp2p/go-reuseport v0.0.1/go.mod 
h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA=
-github.com/libp2p/go-reuseport-transport v0.0.1/go.mod 
h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs=
-github.com/libp2p/go-reuseport-transport v0.0.2 
h1:WglMwyXyBu61CMkjCCtnmqNqnjib0GIEjMiHTwR/KN4=
-github.com/libp2p/go-reuseport-transport v0.0.2/go.mod 
h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs=
-github.com/libp2p/go-stream-muxer v0.0.0-20190218175335-a3f82916c8ad/go.mod 
h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14=
-github.com/libp2p/go-stream-muxer v0.0.1 
h1:Ce6e2Pyu+b5MC1k3eeFtAax0pW4gc6MosYSLV05UeLw=
-github.com/libp2p/go-stream-muxer v0.0.1/go.mod 
h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14=
-github.com/libp2p/go-stream-muxer-multistream v0.1.1 
h1:DhHqb4nu1fQv/vQKeLAaZGmhLsUA4SF77IdYJiWE1d4=
-github.com/libp2p/go-stream-muxer-multistream v0.1.1/go.mod 
h1:zmGdfkQ1AzOECIAcccoL8L//laqawOsO03zX8Sa+eGw=
-github.com/libp2p/go-tcp-transport v0.0.1/go.mod 
h1:mnjg0o0O5TmXUaUIanYPUqkW4+u6mK0en8rlpA6BBTs=
-github.com/libp2p/go-tcp-transport v0.0.3/go.mod 
h1:f11C2zvCaGDkE8aFPUKmuYZwd3pP6HI24LeLMWhJnkQ=
-github.com/libp2p/go-tcp-transport v0.0.4 
h1:2iRu994wCT/iEz62F+c60FUoSkijNEQ0q2Itc+79XlQ=
-github.com/libp2p/go-tcp-transport v0.0.4/go.mod 
h1:+E8HvC8ezEVOxIo3V5vCK9l1y/19K427vCzQ+xHKH/o=
-github.com/libp2p/go-testutil v0.0.1/go.mod 
h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I=
-github.com/libp2p/go-ws-transport v0.0.1/go.mod 
h1:p3bKjDWHEgtuKKj+2OdPYs5dAPIjtpQGHF2tJfGz7Ww=
-github.com/libp2p/go-ws-transport v0.0.3/go.mod 
h1:iU0kzfMcO4tBVIk3z+7srp1YG/RFLWTSuO4enpivw8g=
-github.com/libp2p/go-ws-transport v0.0.4 
h1:3wt9ed0gIUrne627XHvPMTwG4/AUpsLDy4TGQi2EyQ0=
-github.com/libp2p/go-ws-transport v0.0.4/go.mod 
h1:X9wfEcm2LAJYMox9x2VHAMHAZZSQMFC9mIa/UF6OuZk=
-github.com/libp2p/go-yamux v1.2.1/go.mod 
h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow=
-github.com/libp2p/go-yamux v1.2.2/go.mod 
h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow=
-github.com/libp2p/go-yamux v1.2.3 
h1:xX8A36vpXb59frIzWFdEgptLMsOANMFq2K7fPRlunYI=
-github.com/libp2p/go-yamux v1.2.3/go.mod 
h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow=
-github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod 
h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
-github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod 
h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04=
-github.com/lucas-clemente/quic-go v0.10.0/go.mod 
h1:wuD+2XqEx8G9jtwx5ou2BEYBsE+whgQmlj0Vz/77PrY=
-github.com/lucas-clemente/quic-go v0.11.1 
h1:zasajC848Dqq/+WqfqBCkmPw+YHNe1MBts/z7y7nXf4=
-github.com/lucas-clemente/quic-go v0.11.1/go.mod 
h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw=
-github.com/lucas-clemente/quic-go-certificates 
v0.0.0-20160823095156-d2f86524cced/go.mod 
h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58=
-github.com/magiconair/properties v1.7.6/go.mod 
h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 github.com/magiconair/properties v1.8.0/go.mod 
h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
-github.com/magiconair/properties v1.8.1 
h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
 github.com/magiconair/properties v1.8.1/go.mod 
h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
-github.com/marten-seemann/qtls v0.2.3 
h1:0yWJ43C62LsZt08vuQJDK1uC1czUc3FJeCLPoNAI4vA=
-github.com/marten-seemann/qtls v0.2.3/go.mod 
h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk=
-github.com/mattn/go-colorable v0.0.9/go.mod 
h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
-github.com/mattn/go-colorable v0.1.1 
h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg=
-github.com/mattn/go-colorable v0.1.1/go.mod 
h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
-github.com/mattn/go-isatty v0.0.3/go.mod 
h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
-github.com/mattn/go-isatty v0.0.5/go.mod 
h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-isatty v0.0.7 
h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc=
-github.com/mattn/go-isatty v0.0.7/go.mod 
h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-runewidth v0.0.4/go.mod 
h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
-github.com/mattn/goveralls v0.0.2/go.mod 
h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
+github.com/mattn/go-colorable v0.1.4 
h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
+github.com/mattn/go-colorable v0.1.4/go.mod 
h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-isatty v0.0.8/go.mod 
h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.9 
h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg=
+github.com/mattn/go-isatty v0.0.9/go.mod 
h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
 github.com/matttproud/golang_protobuf_extensions v1.0.1 
h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod 
h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod 
h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
-github.com/miekg/dns v1.1.4/go.mod 
h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
-github.com/miekg/dns v1.1.12 h1:WMhc1ik4LNkTg8U9l3hI1LvxKmIL+f1+WV/SZtCbDDA=
-github.com/miekg/dns v1.1.12/go.mod 
h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
-github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 
h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g=
 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod 
h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ=
-github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod 
h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U=
-github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5 
h1:l16XLUUJ34wIz+RIvLhSwGvLvKyy+W598b135bJN6mg=
 github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod 
h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U=
-github.com/mitchellh/go-homedir v1.0.0/go.mod 
h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/go-homedir v1.1.0 
h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
-github.com/mitchellh/go-homedir v1.1.0/go.mod 
h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936/go.mod 
h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk=
-github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod 
h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/mapstructure v1.1.2/go.mod 
h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-github.com/mozilla/tls-observatory v0.0.0-20180409132520-8791a200eb40/go.mod 
h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk=
-github.com/mr-tron/base58 v1.1.0/go.mod 
h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8=
-github.com/mr-tron/base58 v1.1.2 
h1:ZEw4I2EgPKDJ2iEw0cNmLB3ROrEmkOtXIkaG7wZg+78=
 github.com/mr-tron/base58 v1.1.2/go.mod 
h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
-github.com/multiformats/go-base32 v0.0.3 
h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI=
-github.com/multiformats/go-base32 v0.0.3/go.mod 
h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA=
-github.com/multiformats/go-multiaddr v0.0.1/go.mod 
h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44=
-github.com/multiformats/go-multiaddr v0.0.2/go.mod 
h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44=
-github.com/multiformats/go-multiaddr v0.0.4 
h1:WgMSI84/eRLdbptXMkMWDXPjPq7SPLIgGUVm2eroyU4=
-github.com/multiformats/go-multiaddr v0.0.4/go.mod 
h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44=
-github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod 
h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q=
-github.com/multiformats/go-multiaddr-dns v0.0.2/go.mod 
h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q=
-github.com/multiformats/go-multiaddr-dns v0.0.3 
h1:P19q/k9jwmtgh+qXFkKfgFM7rCg/9l5AVqh7VNxSXhs=
-github.com/multiformats/go-multiaddr-dns v0.0.3/go.mod 
h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q=
-github.com/multiformats/go-multiaddr-net v0.0.1 
h1:76O59E3FavvHqNg7jvzWzsPSW5JSi/ek0E4eiDVbg9g=
-github.com/multiformats/go-multiaddr-net v0.0.1/go.mod 
h1:nw6HSxNmCIQH27XPGBuX+d1tnvM7ihcFwHMSstNAVUU=
-github.com/multiformats/go-multibase v0.0.1 
h1:PN9/v21eLywrFWdFNsFKaU04kLJzuYzmrJR+ubhT9qA=
-github.com/multiformats/go-multibase v0.0.1/go.mod 
h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs=
-github.com/multiformats/go-multicodec v0.1.6 
h1:4u6lcjbE4VVVoigU4QJSSVYsGVP4j2jtDkR8lPwOrLE=
-github.com/multiformats/go-multicodec v0.1.6/go.mod 
h1:lliaRHbcG8q33yf4Ot9BGD7JqR/Za9HE7HTyVyKwrUQ=
-github.com/multiformats/go-multihash v0.0.1/go.mod 
h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U=
-github.com/multiformats/go-multihash v0.0.5 
h1:1wxmCvTXAifAepIMyF39vZinRw5sbqjPs/UIi93+uik=
 github.com/multiformats/go-multihash v0.0.5/go.mod 
h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po=
-github.com/multiformats/go-multistream v0.0.1/go.mod 
h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg=
-github.com/multiformats/go-multistream v0.0.4 
h1:rNgWgFyzRSTI9L+xISrz7kN5MdNXoEcoIeeCH05wLKA=
-github.com/multiformats/go-multistream v0.0.4/go.mod 
h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod 
h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mwitkow/go-proto-validators v0.1.0 
h1:2Org0/cGKUUUDzoLSRSsGJDqyLWrb5lG57o5+QdRr8M=
 github.com/mwitkow/go-proto-validators v0.1.0/go.mod 
h1:bA3eoTMLQkf/A7h7JOC3ddMBLXwS19KK7DEeSPL1O+4=
-github.com/nbutton23/zxcvbn-go v0.0.0-20160627004424-a22cb81b2ecd/go.mod 
h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
-github.com/nbutton23/zxcvbn-go v0.0.0-20171102151520-eafdab6b0663/go.mod 
h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
 github.com/oklog/ulid v1.3.1/go.mod 
h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod 
h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.6.0/go.mod 
h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.7.0/go.mod 
h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.8.0/go.mod 
h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod 
h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
-github.com/onsi/gomega v1.4.2/go.mod 
h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.4.3/go.mod 
h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.5.0/go.mod 
h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/opentracing/opentracing-go v1.0.2/go.mod 
h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/opentracing/opentracing-go v1.1.0 
h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
-github.com/opentracing/opentracing-go v1.1.0/go.mod 
h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/pelletier/go-toml v1.1.0/go.mod 
h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pelletier/go-toml v1.2.0/go.mod 
h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pkg/errors v0.8.0/go.mod 
h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
 github.com/pkg/errors v0.8.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/polydawn/refmt v0.0.0-20190221155625-df39d6c2d992 
h1:bzMe+2coZJYHnhGgVlcQKuRy4FSny4ds8dLQjw5P1XE=
-github.com/polydawn/refmt v0.0.0-20190221155625-df39d6c2d992/go.mod 
h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o=
 github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 
h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU=
 github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod 
h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
 github.com/prometheus/client_golang v0.9.1/go.mod 
h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v0.9.2/go.mod 
h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM=
 github.com/prometheus/client_golang v0.9.3 
h1:9iH4JKXLzFbOAdtqv/a+j8aewx2Y8lAjAydhbaScPF8=
 github.com/prometheus/client_golang v0.9.3/go.mod 
h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod 
h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 
h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod 
h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod 
h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
-github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod 
h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
 github.com/prometheus/common v0.4.0 
h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM=
 github.com/prometheus/common v0.4.0/go.mod 
h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod 
h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod 
h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084 
h1:sofwID9zm4tzrgykg80hfFph1mryUeLRsUfoocVVmRY=
 github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod 
h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.0.0-20190519111021-9935e8e0588d 
h1:Z5QMcUKnQw7ouB1wDuyZM6TL/rm+brJcNk6Ai8ut3zM=
-github.com/prometheus/procfs v0.0.0-20190519111021-9935e8e0588d/go.mod 
h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
 github.com/prometheus/tsdb v0.7.1/go.mod 
h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
-github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod 
h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI=
 github.com/rcrowley/go-metrics v0.0.0-20180503174638-e2704e165165 
h1:nkcn14uNmFEuGCb2mBZbBb24RdNRL08b/wb+xBOYpuk=
 github.com/rcrowley/go-metrics v0.0.0-20180503174638-e2704e165165/go.mod 
h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod 
h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
-github.com/rogpeppe/go-internal v1.1.0/go.mod 
h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rs/cors v1.6.0/go.mod 
h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
 github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
 github.com/rs/cors v1.7.0/go.mod 
h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
-github.com/russross/blackfriday v1.5.2 
h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
-github.com/russross/blackfriday v1.5.2/go.mod 
h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
-github.com/russross/blackfriday/v2 v2.0.1 
h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod 
h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod 
h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
-github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod 
h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
-github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod 
h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
-github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod 
h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
-github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod 
h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
-github.com/shurcooL/sanitized_anchor_name v1.0.0 
h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod 
h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
-github.com/sirupsen/logrus v1.0.5/go.mod 
h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
 github.com/sirupsen/logrus v1.2.0/go.mod 
h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod 
h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
-github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa/go.mod 
h1:2RVY1rIf+2J2o/IM9+vPq9RzmHDSseB7FoXiSNIUsoU=
 github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod 
h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4=
 github.com/soheilhy/cmux v0.1.4/go.mod 
h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
-github.com/sourcegraph/go-diff v0.5.1/go.mod 
h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE=
-github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod 
h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0=
-github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod 
h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc=
 github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod 
h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
-github.com/spaolacci/murmur3 v1.1.0 
h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
 github.com/spaolacci/murmur3 v1.1.0/go.mod 
h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
-github.com/spf13/afero v1.1.0/go.mod 
h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
 github.com/spf13/afero v1.1.2/go.mod 
h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
-github.com/spf13/cast v1.2.0/go.mod 
h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
 github.com/spf13/cast v1.3.0/go.mod 
h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cobra v0.0.1/go.mod 
h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
-github.com/spf13/cobra v0.0.2/go.mod 
h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
-github.com/spf13/cobra v0.0.5/go.mod 
h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
-github.com/spf13/jwalterweatherman v0.0.0-20180109140146-7c0cea34c8ec/go.mod 
h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod 
h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
-github.com/spf13/pflag v1.0.1/go.mod 
h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod 
h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/viper v1.0.2/go.mod 
h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM=
-github.com/spf13/viper v1.3.2/go.mod 
h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
 github.com/spf13/viper v1.4.0/go.mod 
h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
 github.com/stretchr/objx v0.1.0/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/testify v1.2.2/go.mod 
h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod 
h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 
h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 github.com/stretchr/testify v1.4.0/go.mod 
h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stumble/gorocksdb v0.0.3 
h1:9UU+QA1pqFYJuf9+5p7z1IqdE5k0mma4UAeu2wmX8kA=
 github.com/stumble/gorocksdb v0.0.3/go.mod 
h1:v6IHdFBXk5DJ1K4FZ0xi+eY737quiiBxYtSWXadLybY=
-github.com/syndtr/goleveldb v1.0.0 
h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
-github.com/syndtr/goleveldb v1.0.0/go.mod 
h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
 github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965 
h1:1oFLiOyVl+W7bnBzGhf7BbIv9loSFQcieWWYIjLqcAw=
 github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965/go.mod 
h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA=
 github.com/tendermint/go-amino v0.14.1 
h1:o2WudxNfdLNBwMyl2dqOJxiro5rfrEaU0Ugs6offJMk=
 github.com/tendermint/go-amino v0.14.1/go.mod 
h1:i/UKE5Uocn+argJJBb12qTZsCDBcAYMbR92AaJVmKso=
 github.com/tendermint/tendermint v0.32.4 
h1:KwZIMtT+ROvfMYO3wine6F9hak3SpngcRcAIzys1J3I=
 github.com/tendermint/tendermint v0.32.4/go.mod 
h1:D2+A3pNjY+Po72X0mTfaXorFhiVI8dh/Zg640FGyGtE=
-github.com/tendermint/tendermint v0.32.5 
h1:2hCLwuzfCKZxXSe/+iMEl+ChJWKJx6g/Wcvq3NMxVN4=
 github.com/tendermint/tm-db v0.2.0 
h1:rJxgdqn6fIiVJZy4zLpY1qVlyD0TU6vhkT4kEf71TQQ=
 github.com/tendermint/tm-db v0.2.0/go.mod 
h1:0cPKWu2Mou3IlxecH+MEUSYc1Ch537alLe6CpFrKzgw=
-github.com/texttheater/golang-levenshtein 
v0.0.0-20180516184445-d188e65d659e/go.mod 
h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g=
-github.com/timakin/bodyclose v0.0.0-20190721030226-87058b9bfcec/go.mod 
h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod 
h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/tyler-smith/go-bip39 v1.0.0 
h1:FOHg9gaQLeBBRbHE/QrTLfEiBHy5pQ/yXzf9JG5pYFM=
 github.com/tyler-smith/go-bip39 v1.0.0/go.mod 
h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs=
 github.com/ugorji/go v1.1.4/go.mod 
h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
-github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod 
h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
-github.com/ultraware/funlen v0.0.1/go.mod 
h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA=
-github.com/urfave/cli v1.20.0/go.mod 
h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
-github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY=
 github.com/urfave/cli v1.22.1/go.mod 
h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
-github.com/valyala/bytebufferpool v1.0.0/go.mod 
h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
-github.com/valyala/fasthttp v1.2.0/go.mod 
h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s=
-github.com/valyala/quicktemplate v1.1.1/go.mod 
h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4=
-github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod 
h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
-github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436/go.mod 
h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
-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=
-github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11/go.mod 
h1:Wlo/SzPmxVp6vXpGt/zaXhHH0fn4IxgqZc82aKg6bpQ=
-github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f 
h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E=
-github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod 
h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8=
-github.com/whyrusleeping/go-ctrlnet v0.0.0-20180313164037-f564fbbdaa95/go.mod 
h1:SJqKCCPXRfBFCwXjfNT/skfsceF7+MBFLI2OrvuRA7g=
-github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 
h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k=
-github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod 
h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc=
-github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc 
h1:9lDbC6Rz4bwmou+oE6Dt4Cb2BGMur5eR/GYptkKUVHo=
-github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod 
h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM=
-github.com/whyrusleeping/go-notifier v0.0.0-20170827234753-097c5d47330f 
h1:M/lL30eFZTKnomXY6huvM6G0+gVquFNf6mxghaWlFUg=
-github.com/whyrusleeping/go-notifier v0.0.0-20170827234753-097c5d47330f/go.mod 
h1:cZNvX9cFybI01GriPRMXDtczuvUhgbcYr9iCGaNlRv8=
-github.com/whyrusleeping/go-smux-multiplex v0.1.0/go.mod 
h1:OXL5hggHNZSsadXDlBJDD4eD3IQYEB3Yu6xpovd6pPw=
-github.com/whyrusleeping/go-smux-multiplex v3.0.16+incompatible/go.mod 
h1:34LEDbeKFZInPUrAG+bjuJmUXONGdEFW7XL0SpTY1y4=
-github.com/whyrusleeping/go-smux-multistream v0.1.0/go.mod 
h1:/usW3LIBirW4h9ko1PnoF7tExBnbxPBszG0n4wylJr8=
-github.com/whyrusleeping/go-smux-multistream v2.0.2+incompatible/go.mod 
h1:dRWHHvc4HDQSHh9gbKEBbUZ+f2Q8iZTPG3UOGYODxSQ=
-github.com/whyrusleeping/go-smux-yamux v0.1.1/go.mod 
h1:Yw+ayOEKERDHXLJ4GiE5AnBmldJW4QRLDzGFC9do8G0=
-github.com/whyrusleeping/go-smux-yamux v2.0.8+incompatible/go.mod 
h1:6qHUzBXUbB9MXmw3AUdB52L8sEb/hScCqOdW2kj/wuI=
-github.com/whyrusleeping/go-smux-yamux v2.0.9+incompatible/go.mod 
h1:6qHUzBXUbB9MXmw3AUdB52L8sEb/hScCqOdW2kj/wuI=
-github.com/whyrusleeping/go-sysinfo v0.0.0-20190219211824-4a357d4b90b1/go.mod 
h1:tKH72zYNt/exx6/5IQO6L9LoQ0rEjd5SbbWaDTs9Zso=
-github.com/whyrusleeping/mafmt v1.2.8 
h1:TCghSl5kkwEE0j+sU/gudyhVMRlpBin8fMBBHg59EbA=
-github.com/whyrusleeping/mafmt v1.2.8/go.mod 
h1:faQJFPbLSxzD9xpA02ttW/tS9vZykNvXwGvqIpk20FA=
-github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30 
h1:nMCC9Pwz1pxfC1Y6mYncdk+kq8d5aLx0Q+/gyZGE44M=
-github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30/go.mod 
h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4=
-github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 
h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds=
-github.com/whyrusleeping/multiaddr-filter 
v0.0.0-20160516205228-e903e4adabd7/go.mod 
h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI=
-github.com/whyrusleeping/tar-utils v0.0.0-20180509141711-8c6c8ba81d5c 
h1:GGsyl0dZ2jJgVT+VvWBf/cNijrHRhkrTjkmp5wg7li0=
-github.com/whyrusleeping/tar-utils v0.0.0-20180509141711-8c6c8ba81d5c/go.mod 
h1:xxcJeBb7SIUl/Wzkz1eVKJE/CB34YNrqX2TQI6jY9zs=
-github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee 
h1:lYbXeSvJi5zk5GLKVuid9TVjS9a0OmLIDKTfoZBL6Ow=
-github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod 
h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg=
-github.com/whyrusleeping/yamux v1.1.5/go.mod 
h1:E8LnQQ8HKx5KD29HZFUwM1PxCOdPRzGwur1mcYhXcD8=
-github.com/whyrusleeping/yamux v1.2.0/go.mod 
h1:Cgw3gpb4DrDZ1FrP/5pxg/cpiY54Gr5uCXwUylwi2GE=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod 
h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod 
h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
 go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg=
-go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
-go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
 go.uber.org/atomic v1.4.0/go.mod 
h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
-go.uber.org/dig v1.7.0 h1:E5/L92iQTNJTjfgJF2KgU+/JpMaiuvK2DHLBj0+kSZk=
-go.uber.org/dig v1.7.0/go.mod h1:z+dSd2TP9Usi48jL8M3v63iSBVkiwtVyMKxMZYYauPg=
-go.uber.org/fx v1.9.0 h1:7OAz8ucp35AU8eydejpYG7QrbE8rLKzGhHbZlJi5LYY=
-go.uber.org/fx v1.9.0/go.mod h1:mFdUyAUuJ3w4jAckiKSKbldsxy1ojpAMJ+dVZg5Y0Aw=
-go.uber.org/goleak v0.10.0/go.mod 
h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI=
-go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
 go.uber.org/multierr v1.1.0/go.mod 
h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
-go4.org v0.0.0-20190218023631-ce4c26f7be8e/go.mod 
h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
-go4.org v0.0.0-20190313082347-94abd6928b1d/go.mod 
h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
 golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod 
h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20180426230345-b49d69b5da94/go.mod 
h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod 
h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod 
h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod 
h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod 
h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod 
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod 
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod 
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734 
h1:p/H982KKEjUnLJkM3tt/LemDnOc1GiZL5FCVlORJ5zo=
 golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod 
h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f 
h1:R423Cnkcp5JABoeemiGEPlt9tHXFfw5kvc0yqlxRPWo=
-golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod 
h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod 
h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod 
h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod 
h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod 
h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/net v0.0.0-20170915142106-8351a756f30f/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180524181706-dfa909b99c79/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190310074541-c10a0554eabf/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod 
h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod 
h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190522135303-fa69b94a3b58/go.mod 
h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod 
h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859 
h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190628185345-da137c7871d7 
h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU=
 golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be 
h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=
@@ -803,71 +218,38 @@ golang.org/x/oauth2 
v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20171026204733-164713f0dfce/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=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190302025703-b6889370fb10/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb 
h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k=
-golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/go.mod 
h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a 
h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ=
+golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod 
h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod 
h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/tools v0.0.0-20170915040203-e531a2a1c15f/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190121143147-24cd39ecf745/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod 
h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod 
h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod 
h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod 
h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod 
h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod 
h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190909030654-5b82db07426d/go.mod 
h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/xerrors v0.0.0-20190212162355-a5947ffaace3/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 
h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/appengine v1.1.0/go.mod 
h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod 
h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod 
h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod 
h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2 
h1:67iHsV9djwGdZpdZNbLuQj6FOzCaZe3w+vhLjn5AcFA=
 google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod 
h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 
h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk=
-google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod 
h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/grpc v1.19.0/go.mod 
h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.21.0/go.mod 
h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
 google.golang.org/grpc v1.22.0/go.mod 
h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.23.1 h1:q4XQuHFC6I28BKZpo6IYyb3mNO+l7lSOxRuYTCiDfXk=
 google.golang.org/grpc v1.23.1/go.mod 
h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod 
h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod 
h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod 
h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod 
h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod 
h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
 gopkg.in/go-playground/assert.v1 v1.2.1/go.mod 
h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
 gopkg.in/go-playground/validator.v9 v9.29.1 
h1:SvGtYmN60a5CVKTOzMSyfzWDeZRxRuGvRQyEAKbw1xc=
 gopkg.in/go-playground/validator.v9 v9.29.1/go.mod 
h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
@@ -877,13 +259,6 @@ gopkg.in/square/go-jose.v2 v2.3.1/go.mod 
h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod 
h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod 
h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gotest.tools v2.1.0+incompatible/go.mod 
h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
-gotest.tools/gotestsum v0.3.4/go.mod 
h1:Mnf3e5FUzXbkCfynWBGOwLssY7gTQgCHObK9tMpAriY=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod 
h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
-mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod 
h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
-mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34/go.mod 
h1:H6SUd1XjIs+qQCyskXg5OFSrilMRUkD8ePJpHKDPaeY=
-sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod 
h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
diff --git a/libs/ipfs/apiconnector.go b/libs/ipfs/apiconnector.go
deleted file mode 100644
index 652016a..0000000
--- a/libs/ipfs/apiconnector.go
+++ /dev/null
@@ -1,174 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package ipfs
-
-import (
-       "bytes"
-       "context"
-       "encoding/json"
-       "io/ioutil"
-       "net"
-       "strings"
-
-       shell "github.com/ipfs/go-ipfs-api"
-       "github.com/pkg/errors"
-)
-
-// APIConnector is IPFS Shell API Connector
-type APIConnector struct {
-       shell *shell.Shell
-       id    string
-}
-
-// NewAPIConnector inisialises new IPFS API connector
-func NewAPIConnector(options ...APIConnectorOption) (Connector, error) {
-
-       cb := &APIConnectorBuilder{
-               nodeAddr: "localhost:5001",
-       }
-
-       for _, option := range options {
-               if err := option(cb); err != nil {
-                       return nil, err
-               }
-       }
-
-       sh := shell.NewShell(cb.nodeAddr)
-
-       outID, err := sh.ID()
-       if err != nil {
-               return nil, errors.Wrap(ErrNodeConnection, err.Error())
-       }
-
-       if !sh.IsUp() {
-               return nil, ErrNodeConnection
-       }
-
-       if cb.swarmPeerAddr != "" {
-               _ = sh.SwarmConnect(context.Background(), cb.swarmPeerAddr)
-       }
-
-       return &APIConnector{
-               shell: sh,
-               id:    outID.ID,
-       }, nil
-}
-
-// Add adds a data to the IPFS network and returns the ipfs path
-func (c *APIConnector) Add(data []byte) (string, error) {
-       return c.shell.Add(bytes.NewReader(data), shell.Pin(true), 
shell.Progress(false))
-}
-
-// Get gets a data from ipfs path
-func (c *APIConnector) Get(path string) ([]byte, error) {
-       r, err := c.shell.Cat(path)
-       if err != nil {
-               return nil, err
-       }
-
-       b, err := ioutil.ReadAll(r)
-       if err != nil {
-               return nil, err
-       }
-
-       // Pin the document
-       if err := c.shell.Pin(path); err != nil {
-               return nil, err
-       }
-
-       return b, nil
-}
-
-// AddJSON encodes the data in JSON and adds it to the IPFS
-func (c *APIConnector) AddJSON(data interface{}) (string, error) {
-       jd, err := json.Marshal(data)
-       if err != nil {
-               return "", err
-       }
-
-       return c.Add(jd)
-}
-
-// GetJSON gets data from IPFS and decodes it from JSON
-func (c *APIConnector) GetJSON(path string, data interface{}) error {
-       jd, err := c.Get(path)
-       if err != nil {
-               return err
-       }
-
-       if err := json.Unmarshal(jd, data); err != nil {
-               return errors.Wrap(ErrDocumentNotValid, err.Error())
-       }
-
-       return nil
-}
-
-// GetID returns the local id
-func (c *APIConnector) GetID() string {
-       return c.id
-}
-
-// APIConnectorBuilder for building the IPFS API connector
-type APIConnectorBuilder struct {
-       nodeAddr      string
-       swarmPeerAddr string
-}
-
-// APIConnectorOption function
-type APIConnectorOption func(*APIConnectorBuilder) error
-
-// NodeAddr specifies the IPFS local node address
-func NodeAddr(addr string) APIConnectorOption {
-       return func(cb *APIConnectorBuilder) error {
-               cb.nodeAddr = addr
-               return nil
-       }
-}
-
-// PeerAddr specifies the IPFS node peer to connect
-func PeerAddr(peerAddr string) APIConnectorOption {
-       return func(cb *APIConnectorBuilder) error {
-               cb.swarmPeerAddr = peerAddr
-               return nil
-       }
-}
-
-// PeerDomain returns the IPFS peer addr from domain TXT record
-func PeerDomain(domain string) APIConnectorOption {
-       return func(cb *APIConnectorBuilder) error {
-               var addr string
-               records, err := net.LookupTXT(domain)
-               if err != nil {
-                       return err
-               }
-
-               for _, r := range records {
-                       a := strings.TrimPrefix(strings.TrimSuffix(r, `"`), `"`)
-                       if len(a) > 0 && a[0] == '/' {
-                               addr = a
-                       }
-               }
-
-               if addr == "" {
-                       return errors.Errorf("unable to find the IPFS address 
from TXT record of %v", domain)
-               }
-
-               cb.swarmPeerAddr = addr
-               return nil
-       }
-}
diff --git a/libs/ipfs/ipfs.go b/libs/ipfs/ipfs.go
deleted file mode 100644
index b9fa733..0000000
--- a/libs/ipfs/ipfs.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-/*
-Package ipfs - connect, get and set operations for embedded or external IPFS 
node
-*/
-package ipfs
-
-import (
-       "github.com/pkg/errors"
-)
-
-var (
-       // ErrNodeConnection when the ipfs node is not accessible
-       ErrNodeConnection = errors.New("ipfs node connection problem")
-       // ErrDocumentNotValid when the ipfs document is not well formatted
-       ErrDocumentNotValid = errors.New("document not valid")
-       // ErrDocumentNotFound when the ipfs document is not dound
-       ErrDocumentNotFound = errors.New("document not found")
-)
-
-// Connector is the IPFS connector interface
-type Connector interface {
-       GetID() string
-       Add(data []byte) (string, error)
-       Get(path string) ([]byte, error)
-       AddJSON(data interface{}) (string, error)
-       GetJSON(path string, data interface{}) error
-}
diff --git a/libs/ipfs/memory.go b/libs/ipfs/memory.go
deleted file mode 100644
index ef20aa9..0000000
--- a/libs/ipfs/memory.go
+++ /dev/null
@@ -1,104 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package ipfs
-
-import (
-       "encoding/json"
-       "sync"
-
-       multihash "github.com/multiformats/go-multihash"
-       "github.com/pkg/errors"
-)
-
-// MemoryConnector ipmlements IPFS Connector interface with Memory storage
-type MemoryConnector struct {
-       mutex sync.RWMutex
-       store map[string][]byte
-}
-
-// NewMemoryConnector creates a new MemoryConnector struct
-func NewMemoryConnector() (Connector, error) {
-       return &MemoryConnector{
-               mutex: sync.RWMutex{},
-               store: map[string][]byte{},
-       }, nil
-}
-
-// Add adds data to Memory IPFS
-func (m *MemoryConnector) Add(data []byte) (string, error) {
-       id, err := genIPFSID(data)
-       if err != nil {
-               return "", err
-       }
-
-       m.mutex.Lock()
-       m.store[id] = data
-       m.mutex.Unlock()
-
-       return id, nil
-}
-
-// Get gets data from Memory IPFS
-func (m *MemoryConnector) Get(path string) ([]byte, error) {
-       m.mutex.RLock()
-       data, ok := m.store[path]
-       m.mutex.RUnlock()
-       if !ok {
-               return nil, errors.New("Key not found")
-       }
-
-       return data, nil
-}
-
-// AddJSON encodes data to JSON and stores it in Memory IPFS
-func (m *MemoryConnector) AddJSON(data interface{}) (string, error) {
-       jd, err := json.Marshal(data)
-       if err != nil {
-               return "", err
-       }
-
-       return m.Add(jd)
-}
-
-// GetJSON gets data from IPFS and decodes it from JSON
-func (m *MemoryConnector) GetJSON(path string, data interface{}) error {
-       jd, err := m.Get(path)
-       if err != nil {
-               return err
-       }
-
-       if err := json.Unmarshal(jd, data); err != nil {
-               return errors.Wrap(ErrDocumentNotValid, err.Error())
-       }
-
-       return nil
-}
-
-// GetID returns the local id
-func (m *MemoryConnector) GetID() string {
-       return ""
-}
-
-func genIPFSID(data []byte) (string, error) {
-       mh, err := multihash.Sum(data, multihash.SHA2_256, 32)
-       if err != nil {
-               return "", err
-       }
-
-       return mh.B58String(), nil
-}
diff --git a/libs/ipfs/nodeconnector.go b/libs/ipfs/nodeconnector.go
deleted file mode 100644
index d3d15e0..0000000
--- a/libs/ipfs/nodeconnector.go
+++ /dev/null
@@ -1,259 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package ipfs
-
-import (
-       "context"
-       "crypto/rand"
-       "encoding/base64"
-       "encoding/json"
-       "io/ioutil"
-
-       memoryds "github.com/ipfs/go-datastore"
-       dsync "github.com/ipfs/go-datastore/sync"
-       levelds "github.com/ipfs/go-ds-leveldb"
-       cfg "github.com/ipfs/go-ipfs-config"
-       files "github.com/ipfs/go-ipfs-files"
-       core "github.com/ipfs/go-ipfs/core"
-       coreapi "github.com/ipfs/go-ipfs/core/coreapi"
-       repo "github.com/ipfs/go-ipfs/repo"
-       coreiface "github.com/ipfs/interface-go-ipfs-core"
-       path "github.com/ipfs/interface-go-ipfs-core/path"
-       ci "github.com/libp2p/go-libp2p-crypto"
-       peer "github.com/libp2p/go-libp2p-peer"
-
-       "github.com/pkg/errors"
-)
-
-const (
-       defaultShardFun = "prefix"
-)
-
-// NodeConnectorBuilder for building the IPFS embedded node connector
-type NodeConnectorBuilder struct {
-       ctx            context.Context
-       localAddresses []string
-       bootstrapPeers []string
-       dstore         repo.Datastore
-}
-
-// NodeConnectorOption function
-type NodeConnectorOption func(*NodeConnectorBuilder) error
-
-// NodeConnector is IPFS embedded node
-type NodeConnector struct {
-       id   string
-       ctx  context.Context
-       node *core.IpfsNode
-       api  coreiface.CoreAPI
-}
-
-// NewNodeConnector inisialises and runs a new IPFS Node
-func NewNodeConnector(options ...NodeConnectorOption) (Connector, error) {
-       cb := &NodeConnectorBuilder{
-               localAddresses: []string{},
-               bootstrapPeers: []string{},
-               ctx:            context.Background(),
-               dstore:         nil,
-       }
-
-       for _, option := range options {
-               if err := option(cb); err != nil {
-                       return nil, err
-               }
-       }
-
-       if len(cb.localAddresses) == 0 {
-               cb.localAddresses = []string{"/ip4/0.0.0.0/tcp/4001"}
-       }
-
-       if cb.dstore == nil {
-               return nil, errors.New("IPFS datastore not initialized")
-       }
-
-       // Generate Node keys
-       priv, _, err := ci.GenerateKeyPairWithReader(ci.RSA, 2048, rand.Reader)
-       if err != nil {
-               return nil, err
-       }
-       privkeyb, err := priv.Bytes()
-       if err != nil {
-               return nil, err
-       }
-       pid, err := peer.IDFromPrivateKey(priv)
-       if err != nil {
-               return nil, err
-       }
-
-       conf := cfg.Config{
-               Bootstrap: cb.bootstrapPeers,
-       }
-       conf.Addresses.Swarm = cb.localAddresses
-       conf.Identity.PeerID = pid.Pretty()
-       conf.Identity.PrivKey = base64.StdEncoding.EncodeToString(privkeyb)
-       conf.Routing.Type = "dht"
-       conf.Swarm.ConnMgr = cfg.ConnMgr{
-               Type:        "basic",
-               LowWater:    20,
-               HighWater:   100,
-               GracePeriod: "30s",
-       }
-
-       appRepo := &repo.Mock{
-               D: dsync.MutexWrap(cb.dstore),
-               C: conf,
-       }
-
-       node, err := core.NewNode(cb.ctx, &core.BuildCfg{
-               Repo:   appRepo,
-               Online: true,
-       })
-       if err != nil {
-               return nil, err
-       }
-
-       api, err := coreapi.NewCoreAPI(node)
-       if err != nil {
-               return nil, err
-       }
-
-       return &NodeConnector{
-               id:   pid.Pretty(),
-               ctx:  cb.ctx,
-               node: node,
-               api:  api,
-       }, nil
-}
-
-// Add adds a data to the IPFS network and returns the ipfs path
-func (c *NodeConnector) Add(data []byte) (string, error) {
-       f := files.NewBytesFile(data)
-       defer f.Close()
-       r, err := c.api.Unixfs().Add(c.ctx, f)
-       if err != nil {
-               return "", err
-       }
-       return r.Cid().String(), nil
-}
-
-// Get gets a data from ipfs path
-func (c *NodeConnector) Get(ipfsPath string) ([]byte, error) {
-       p := path.New(ipfsPath)
-
-       node, err := c.api.Unixfs().Get(c.ctx, p)
-       if err != nil {
-               return nil, err
-       }
-       defer node.Close()
-
-       f := files.ToFile(node)
-       if f == nil {
-               return nil, errors.New("not a file")
-       }
-       defer f.Close()
-
-       b, err := ioutil.ReadAll(f)
-       if err != nil {
-               return nil, err
-       }
-
-       // TODO: Pin the document
-       return b, nil
-}
-
-// AddJSON encodes the data in JSON and adds it to the IPFS
-func (c *NodeConnector) AddJSON(data interface{}) (string, error) {
-       jd, err := json.Marshal(data)
-       if err != nil {
-               return "", err
-       }
-
-       return c.Add(jd)
-}
-
-// GetJSON gets data from IPFS and decodes it from JSON
-func (c *NodeConnector) GetJSON(path string, data interface{}) error {
-       jd, err := c.Get(path)
-       if err != nil {
-               return err
-       }
-
-       if err := json.Unmarshal(jd, data); err != nil {
-               return errors.Wrap(ErrDocumentNotValid, err.Error())
-       }
-
-       return nil
-}
-
-// GetID returns the local id
-func (c *NodeConnector) GetID() string {
-       return c.id
-}
-
-// AddLocalAddress adds a new local IPFS Swarm address
-func AddLocalAddress(addr string) NodeConnectorOption {
-       return func(cb *NodeConnectorBuilder) error {
-               cb.localAddresses = append(cb.localAddresses, addr)
-               return nil
-       }
-}
-
-// AddBootstrapPeer adds a IPFS peer to the list of IPFS bootatrap addresses
-func AddBootstrapPeer(peerAddr ...string) NodeConnectorOption {
-       return func(cb *NodeConnectorBuilder) error {
-               cb.bootstrapPeers = append(cb.bootstrapPeers, peerAddr...)
-               return nil
-       }
-}
-
-// AddDefaultBootstrapPeers adds the default IPFS bootstrap addresses
-// The default IPFS addresses are maintained by the IPFS team
-func AddDefaultBootstrapPeers() NodeConnectorOption {
-       return func(cb *NodeConnectorBuilder) error {
-               cb.bootstrapPeers = append(cb.bootstrapPeers, 
cfg.DefaultBootstrapAddresses...)
-               return nil
-       }
-}
-
-// WithLevelDatastore initialize IPFS node with LevelDB datastore
-func WithLevelDatastore(path string) NodeConnectorOption {
-       return func(cb *NodeConnectorBuilder) (err error) {
-               cb.dstore, err = levelds.NewDatastore(path, &levelds.Options{
-                       Compression: 0,
-               })
-
-               return nil
-       }
-}
-
-// WithMemoryDatastore initialize IPFS node with memory datastore
-func WithMemoryDatastore() NodeConnectorOption {
-       return func(cb *NodeConnectorBuilder) (err error) {
-               cb.dstore = memoryds.NewMapDatastore()
-
-               return nil
-       }
-}
-
-// WithContext sets the context
-func WithContext(ctx context.Context) NodeConnectorOption {
-       return func(cb *NodeConnectorBuilder) error {
-               cb.ctx = ctx
-               return nil
-       }
-}
diff --git a/libs/ipfs/nodeconnector_test.go b/libs/ipfs/nodeconnector_test.go
deleted file mode 100644
index 96e7795..0000000
--- a/libs/ipfs/nodeconnector_test.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package ipfs
-
-import (
-       "bytes"
-       "context"
-       "fmt"
-       "testing"
-       "time"
-
-       "github.com/pkg/errors"
-)
-
-func TestNodeConnector(t *testing.T) {
-       timeOut := time.Second * 5
-       ctx, cancel := context.WithCancel(context.Background())
-
-       errChan := make(chan error)
-       go func(ctx context.Context, errChan chan error) {
-               addr1 := "/ip4/127.0.0.1/tcp/53221"
-               addr2 := "/ip4/127.0.0.1/tcp/53222"
-
-               ipfs1, err := NewNodeConnector(
-                       WithContext(ctx),
-                       AddLocalAddress(addr1),
-                       WithMemoryDatastore(),
-               )
-               if err != nil {
-                       errChan <- err
-                       return
-               }
-
-               ipfs2, err := NewNodeConnector(
-                       WithContext(ctx),
-                       AddLocalAddress(addr2),
-                       AddBootstrapPeer(fmt.Sprintf("%s/ipfs/%s", addr1, 
ipfs1.GetID())),
-                       WithMemoryDatastore(),
-               )
-               if err != nil {
-                       t.Fatal(err)
-               }
-
-               bsend := []byte{1, 2, 3}
-               cid, err := ipfs1.Add(bsend)
-               if err != nil {
-                       errChan <- err
-                       return
-               }
-
-               b, err := ipfs2.Get(cid)
-               if err != nil {
-                       errChan <- err
-                       return
-               }
-
-               if !bytes.Equal(bsend, b) {
-                       errChan <- errors.Errorf("Expected: %v, found: %v", 
bsend, b)
-                       return
-               }
-
-               errChan <- nil
-       }(ctx, errChan)
-
-       time.AfterFunc(timeOut, func() {
-               t.Error("Timeout. Test took too long")
-               cancel()
-       })
-
-       if err := <-errChan; err != nil {
-               t.Fatal(err)
-       }
-
-}
diff --git a/libs/transport/http.go b/libs/transport/http.go
index 901bc5f..eb6fbd1 100644
--- a/libs/transport/http.go
+++ b/libs/transport/http.go
@@ -441,6 +441,7 @@ func getContextStr(ctx context.Context, key interface{}) 
string {
        return ""
 }
 
+// genReqID returns the request ID if present or generates a new random ID
 func getReqID(ctx context.Context) string {
        // check if request ID is passed as HTTP header
        reqID := getContextStr(ctx, httptransport.ContextKeyRequestXRequestID)
@@ -452,6 +453,11 @@ func getReqID(ctx context.Context) string {
        return reqID
 }
 
+// ReqID returns the Request ID if present
+func ReqID(ctx context.Context) string {
+       return getContextStr(ctx, contextReqID)
+}
+
 func metricsDurationMiddleware(duration metrics.Histogram) endpoint.Middleware 
{
        return func(next endpoint.Endpoint) endpoint.Endpoint {
                return func(ctx context.Context, request interface{}) (response 
interface{}, err error) {
diff --git a/pkg/api/proto.go b/pkg/api/proto.go
index e3200d7..59f1d77 100644
--- a/pkg/api/proto.go
+++ b/pkg/api/proto.go
@@ -30,16 +30,24 @@ import (
 )
 
 const (
-       //OrderIn Types for the Blockchain
-       TXOrderRequest    = "v1/order1"
-       TXFulfillRequest  = "v1/fulfill/order"
-       TXFulfillResponse = "v1/order2"
-       TXOrderResponse   = "dump"
+       // OrderIn Types for the Blockchain
 
-       TXOrderSecretRequest         = "v1/order/secret1"
-       TXFulfillOrderSecretRequest  = "v1/fulfill/order/secret"
+       // TXOrderRequest -
+       TXOrderRequest = "v1/order1"
+       // TXFulfillRequest -
+       TXFulfillRequest = "v1/fulfill/order"
+       // TXFulfillResponse -
+       TXFulfillResponse = "v1/order2"
+       // TXOrderResponse -
+       TXOrderResponse = "dump"
+       // TXOrderSecretRequest -
+       TXOrderSecretRequest = "v1/order/secret1"
+       // TXFulfillOrderSecretRequest -
+       TXFulfillOrderSecretRequest = "v1/fulfill/order/secret"
+       // TXFulfillOrderSecretResponse -
        TXFulfillOrderSecretResponse = "v1/order/secret2"
-       TXOrderSecretResponse        = "dump"
+       // TXOrderSecretResponse -
+       TXOrderSecretResponse = "dump"
 )
 
 //BlockChainTX - struct for on chain req/resp
@@ -56,8 +64,12 @@ type BlockChainTX struct {
 // CalcHash calculates, sets the TXhash and returns the string representation
 func (tx *BlockChainTX) CalcHash() string {
        txSha := sha256.Sum256(tx.Payload)
+       txHash := hex.EncodeToString(txSha[:])
+
        tx.TXhash = txSha[:]
-       return hex.EncodeToString(txSha[:])
+       tx.Tags["txhash"] = txHash
+
+       return txHash
 
 }
 
@@ -75,7 +87,7 @@ type CreateIdentityResponse struct {
 
 //GetIdentityRequest -
 type GetIdentityRequest struct {
-       IDDocumentCID string `json:"idDocumentCID"  validate:"IPFS"`
+       IDDocumentCID string `json:"idDocumentCID"  validate:"hashID"`
 }
 
 //GetIdentityResponse -
@@ -108,15 +120,15 @@ type IdentityListResponse struct {
 
 //OrderRequest -
 type OrderRequest struct {
-       // BeneficiaryIDDocumentCID string            
`json:"BeneficiaryIDDocumentCID,omitempty" validate:"omitempty,IPFS"`
+       // BeneficiaryIDDocumentCID string            
`json:"BeneficiaryIDDocumentCID,omitempty" validate:"omitempty,hashID"`
        BeneficiaryIDDocumentCID string            
`json:"beneficiaryIDDocumentCID,omitempty"`
        Extension                map[string]string `json:"extension,omitempty"`
 }
 
 //OrderResponse -
 type OrderResponse struct {
-       // OrderPart1CID  string            `json:"orderPart1CID,omitempty" 
validate:"omitempty,IPFS"`
-       // OrderPart2CID  string            `json:"orderPart2CID,omitempty" 
validate:"omitempty,IPFS"`
+       // OrderPart1CID  string            `json:"orderPart1CID,omitempty" 
validate:"omitempty,hashID"`
+       // OrderPart2CID  string            `json:"orderPart2CID,omitempty" 
validate:"omitempty,hashID"`
        OrderReference string            `json:"orderReference,omitempty" 
validate:"omitempty"`
        Commitment     string            `json:"commitment,omitempty"`
        CreatedAt      int64             `json:"createdAt,omitempty"`
@@ -154,7 +166,7 @@ type GetOrderResponse struct {
 //OrderSecretRequest -
 type OrderSecretRequest struct {
        OrderReference           string            
`json:"orderReference,omitempty" validate:"omitempty"`
-       BeneficiaryIDDocumentCID string            
`json:"beneficiaryIDDocumentCID,omitempty" validate:"omitempty,IPFS"`
+       BeneficiaryIDDocumentCID string            
`json:"beneficiaryIDDocumentCID,omitempty" validate:"omitempty,hashID"`
        Extension                map[string]string `json:"extension,omitempty"`
 }
 
@@ -168,8 +180,8 @@ type OrderSecretResponse struct {
 
 //FulfillOrderSecretRequest -
 type FulfillOrderSecretRequest struct {
-       OrderPart3CID     string            `json:"orderPart3CID,omitempty" 
validate:"IPFS"`
-       SenderDocumentCID string            `json:"documentCID,omitempty" 
validate:"IPFS"`
+       OrderPart3CID     string            `json:"orderPart3CID,omitempty" 
validate:"hashID"`
+       SenderDocumentCID string            `json:"documentCID,omitempty" 
validate:"hashID"`
        Extension         map[string]string `json:"extension,omitempty"`
 }
 
@@ -181,8 +193,8 @@ type FulfillOrderSecretResponse struct {
 
 //FulfillOrderRequest -
 type FulfillOrderRequest struct {
-       OrderPart1CID string            `json:"orderPart1CID,omitempty" 
validate:"IPFS"`
-       DocumentCID   string            `json:"documentCID,omitempty" 
validate:"IPFS"`
+       OrderPart1CID string            `json:"orderPart1CID,omitempty" 
validate:"hashID"`
+       DocumentCID   string            `json:"documentCID,omitempty" 
validate:"hashID"`
        Extension     map[string]string `json:"extension,omitempty"`
 }
 
diff --git a/pkg/bitcoinplugin/helpers.go b/pkg/bitcoinplugin/helpers.go
index 0ec08e3..3075e78 100644
--- a/pkg/bitcoinplugin/helpers.go
+++ b/pkg/bitcoinplugin/helpers.go
@@ -94,7 +94,7 @@ func adhocEncryptedEnvelopeEncode(s *Service, nodeID string, 
order documents.Ord
        if err != nil {
                return nil, err
        }
-       beneficiaryIDDocument, err := common.RetrieveIDDocFromIPFS(s.Ipfs, 
beneficiaryIDDocumentCID)
+       beneficiaryIDDocument, err := common.RetrieveIDDoc(s.Tendermint, 
beneficiaryIDDocumentCID)
        if err != nil {
                return nil, err
        }
@@ -150,17 +150,12 @@ func generateFinalPubKey(s *Service, pubKeyPart2of2 
string, order documents.Orde
 
        if order.BeneficiaryType == 
documents.OrderDocument_Beneficiary_Known_at_start {
                //There is a BeneficiaryID use it to generate the key
-               //Get beneficiary's identity out of IPFS
-               id := &documents.IDDoc{}
-               rawDocI, err := s.Ipfs.Get(beneficiaryIDDocumentCID)
-               if err != nil {
-                       return "", "", errors.Wrapf(err, "Read identity Doc")
-               }
-               err = documents.DecodeIDDocument(rawDocI, 
beneficiaryIDDocumentCID, id)
+               benIDDoc, err := common.RetrieveIDDoc(s.Tendermint, 
beneficiaryIDDocumentCID)
                if err != nil {
                        return "", "", err
                }
-               pubKeyPart1of2 = hex.EncodeToString(id.BeneficiaryECPublicKey)
+
+               pubKeyPart1of2 = 
hex.EncodeToString(benIDDoc.BeneficiaryECPublicKey)
        }
 
        finalPublicKey, err := addPublicKeys(pubKeyPart2of2, pubKeyPart1of2)
diff --git a/pkg/bitcoinplugin/service.go b/pkg/bitcoinplugin/service.go
index abe12e3..517d8b0 100644
--- a/pkg/bitcoinplugin/service.go
+++ b/pkg/bitcoinplugin/service.go
@@ -116,7 +116,7 @@ func (s *Service) ProduceBeneficiaryEncryptedData(blsSK 
[]byte, order *documents
 // ProduceFinalSecret -
 func (s *Service) ProduceFinalSecret(seed, sikeSK []byte, order, orderPart4 
*documents.OrderDoc, beneficiaryIDDocumentCID string) (secret, commitment 
string, extension map[string]string, err error) {
        //retrieve principal IDDoc
-       principalDocID, err := common.RetrieveIDDocFromIPFS(s.Ipfs, 
order.PrincipalCID)
+       principalDocID, err := common.RetrieveIDDoc(s.Tendermint, 
order.PrincipalCID)
        if err != nil {
                return "", "", nil, err
        }
diff --git a/pkg/common/chain.go b/pkg/common/chain.go
index a0438b5..8608bed 100644
--- a/pkg/common/chain.go
+++ b/pkg/common/chain.go
@@ -27,7 +27,6 @@ func CreateTX(nodeID string, store *datastore.Store, 
blsSecretKey []byte, id str
 //PeekTX Decode a transaction for header data but don't decrypt it
 func PeekTX(tx []byte) (string, error) {
        signerCID, err := documents.OrderDocumentSigner(tx)
-       print(signerCID)
        if err != nil {
                return "", errors.Wrap(err, "Error peeking signer")
        }
diff --git a/pkg/common/common.go b/pkg/common/common.go
index cdca4fe..f3a88fd 100644
--- a/pkg/common/common.go
+++ b/pkg/common/common.go
@@ -25,9 +25,10 @@ import (
        "io"
        "time"
 
+       "github.com/apache/incubator-milagro-dta/pkg/tendermint"
+
        "github.com/apache/incubator-milagro-dta/libs/datastore"
        "github.com/apache/incubator-milagro-dta/libs/documents"
-       "github.com/apache/incubator-milagro-dta/libs/ipfs"
        "github.com/google/uuid"
        "github.com/pkg/errors"
 )
@@ -56,25 +57,14 @@ func CreateNewDepositOrder(BeneficiaryIDDocumentCID string, 
nodeID string) (*doc
        return &order, nil
 }
 
-// RetrieveOrderFromIPFS - retrieve an Order from IPFS and Decode the into an  
object
-func RetrieveOrderFromIPFS(ipfs ipfs.Connector, ipfsID string, sikeSK []byte, 
recipientID string, sendersBlsPK []byte) (*documents.OrderDoc, error) {
-       o := &documents.OrderDoc{}
-       rawDocO, err := ipfs.Get(ipfsID)
+// RetrieveIDDoc finds and parses the IDDocument
+func RetrieveIDDoc(tmConn *tendermint.NodeConnector, id string) 
(*documents.IDDoc, error) {
+       rawDocI, err := tmConn.GetTx(id)
        if err != nil {
                return nil, err
        }
-       err = documents.DecodeOrderDocument(rawDocO, ipfsID, o, sikeSK, 
recipientID, sendersBlsPK)
-       return o, err
-}
-
-// RetrieveIDDocFromIPFS finds and parses the IDDocument
-func RetrieveIDDocFromIPFS(ipfs ipfs.Connector, ipfsID string) 
(*documents.IDDoc, error) {
        iddoc := &documents.IDDoc{}
-       rawDocI, err := ipfs.Get(ipfsID)
-       if err != nil {
-               return nil, err
-       }
-       err = documents.DecodeIDDocument(rawDocI, ipfsID, iddoc)
+       err = documents.DecodeIDDocument(rawDocI.Payload, id, iddoc)
        return iddoc, err
 }
 
@@ -114,10 +104,10 @@ func WriteOrderToStore(store *datastore.Store, 
orderReference string, address st
 }
 
 // BuildRecipientList builds a list of recipients who are able to decrypt the 
encrypted envelope
-func BuildRecipientList(ipfs ipfs.Connector, IDDocs ...string) 
(map[string]*documents.IDDoc, error) {
+func BuildRecipientList(tmConn *tendermint.NodeConnector, ids ...string) 
(map[string]*documents.IDDoc, error) {
        recipients := make(map[string]*documents.IDDoc)
-       for _, v := range IDDocs {
-               iddoc, err := RetrieveIDDocFromIPFS(ipfs, v)
+       for _, v := range ids {
+               iddoc, err := RetrieveIDDoc(tmConn, v)
                if err != nil {
                        return nil, err
                }
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 566c89c..a5cfdae 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -56,25 +56,16 @@ type LogConfig struct {
        Level  string `yaml:"level"`
 }
 
-// IPFSConfig -
-type IPFSConfig struct {
-       Connector     string   `yaml:"connector"`
-       Bootstrap     []string `yaml:"bootstrap"`
-       ListenAddress string   `yaml:"listenAddress"`
-       APIAddress    string   `yaml:"apiAddress"`
-}
-
 // NodeConfig -
 type NodeConfig struct {
        NodeType              string `yaml:"nodeType"`
-       MasterFiduciaryServer string `yaml:"masterFiduciaryServer"`
        MasterFiduciaryNodeID string `yaml:"masterFiduciaryNodeID"`
        NodeID                string `yaml:"nodeID"`
        NodeName              string `yaml:"nodeName"`
        Datastore             string `yaml:"dataStore"`
 }
 
-//Blockchain Config -
+//BlockchainConfig -
 type BlockchainConfig struct {
        BroadcastNode string `yaml:"broadcastNode"`
 }
@@ -89,7 +80,6 @@ type Config struct {
        HTTP       HTTPConfig       `yaml:"http"`
        Node       NodeConfig       `yaml:"node"`
        Log        LogConfig        `yaml:"log"`
-       IPFS       IPFSConfig       `yaml:"ipfs"`
        Plugins    PluginsConfig    `yaml:"plugins"`
        Blockchain BlockchainConfig `yaml:"blockchain"`
 }
diff --git a/pkg/config/default.go b/pkg/config/default.go
index 79ebd20..3c79d70 100644
--- a/pkg/config/default.go
+++ b/pkg/config/default.go
@@ -23,7 +23,6 @@ func DefaultConfig() *Config {
                HTTP:       defaultHTTPConfig(),
                Node:       defaultNodeConfig(),
                Log:        defaultLogConfig(),
-               IPFS:       defaultIPFSConfig(),
                Plugins:    defaultPluginsConfig(),
                Blockchain: defaultBlockchainConfig(),
        }
@@ -48,23 +47,10 @@ func defaultLogConfig() LogConfig {
        }
 }
 
-// IPFSConfig -
-func defaultIPFSConfig() IPFSConfig {
-       return IPFSConfig{
-               Bootstrap: []string{
-                       
"/ip4/34.252.47.231/tcp/4001/ipfs/QmcEPkctfqQs6vbvTD8EdJmzy4zouAtrV8AwjLbGhbURep",
-               },
-               Connector:     "embedded",
-               ListenAddress: "/ip4/0.0.0.0/tcp/4001",
-               APIAddress:    "http://localhost:5001";,
-       }
-}
-
 // NodeConfig -
 func defaultNodeConfig() NodeConfig {
        return NodeConfig{
                NodeType:              "multi",
-               MasterFiduciaryServer: "http://localhost:5556";,
                MasterFiduciaryNodeID: "",
                NodeID:                "",
                Datastore:             "embedded",
diff --git a/pkg/defaultservice/fulfillTX.go b/pkg/defaultservice/fulfillTX.go
index b0527a9..c3bce0d 100644
--- a/pkg/defaultservice/fulfillTX.go
+++ b/pkg/defaultservice/fulfillTX.go
@@ -55,7 +55,7 @@ func (s *Service) FulfillOrder(tx *api.BlockChainTX) (string, 
error) {
                return "", err
        }
 
-       remoteIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, remoteIDDocCID)
+       remoteIDDoc, err := common.RetrieveIDDoc(s.Tendermint, remoteIDDocCID)
        if err != nil {
                return "", err
        }
@@ -68,7 +68,7 @@ func (s *Service) FulfillOrder(tx *api.BlockChainTX) (string, 
error) {
        }
 
        //Recipient list is principal and self
-       recipientList, err := common.BuildRecipientList(s.Ipfs, 
order.PrincipalCID, nodeID)
+       recipientList, err := common.BuildRecipientList(s.Tendermint, 
order.PrincipalCID, nodeID)
        if err != nil {
                return "", err
        }
@@ -136,7 +136,7 @@ func (s *Service) FulfillOrderSecret(tx *api.BlockChainTX) 
(string, error) {
                return "", err
        }
 
-       remoteIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, remoteIDDocCID)
+       remoteIDDoc, err := common.RetrieveIDDoc(s.Tendermint, remoteIDDocCID)
        if err != nil {
                return "", err
        }
@@ -149,7 +149,7 @@ func (s *Service) FulfillOrderSecret(tx *api.BlockChainTX) 
(string, error) {
        }
 
        //Recipient list is beneficiary and self
-       recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID, 
order.BeneficiaryCID)
+       recipientList, err := common.BuildRecipientList(s.Tendermint, nodeID, 
order.BeneficiaryCID)
        if err != nil {
                return "", err
        }
diff --git a/pkg/defaultservice/init.go b/pkg/defaultservice/init.go
index e4874ae..1eb120e 100644
--- a/pkg/defaultservice/init.go
+++ b/pkg/defaultservice/init.go
@@ -21,7 +21,6 @@ import (
        "io"
 
        "github.com/apache/incubator-milagro-dta/libs/datastore"
-       "github.com/apache/incubator-milagro-dta/libs/ipfs"
        "github.com/apache/incubator-milagro-dta/libs/keystore"
        "github.com/apache/incubator-milagro-dta/libs/logger"
        "github.com/apache/incubator-milagro-dta/pkg/config"
@@ -76,14 +75,6 @@ func WithKeyStore(store keystore.Store) ServiceOption {
        }
 }
 
-// WithIPFS adds ipfs connector to the Service
-func WithIPFS(ipfsConnector ipfs.Connector) ServiceOption {
-       return func(s *Service) error {
-               s.Ipfs = ipfsConnector
-               return nil
-       }
-}
-
 // WithTendermint adds tendermint node connector to the Service
 func WithTendermint(tmConnector *tendermint.NodeConnector) ServiceOption {
        return func(s *Service) error {
diff --git a/pkg/defaultservice/order.go b/pkg/defaultservice/order.go
index 3f60158..abc24ab 100644
--- a/pkg/defaultservice/order.go
+++ b/pkg/defaultservice/order.go
@@ -19,7 +19,6 @@ package defaultservice
 
 import (
        "encoding/hex"
-       "encoding/json"
        "time"
 
        "github.com/apache/incubator-milagro-dta/libs/cryptowallet"
@@ -32,41 +31,44 @@ import (
 
 // GetOrder retreives an order
 func (s *Service) GetOrder(req *api.GetOrderRequest) (*api.GetOrderResponse, 
error) {
-       orderReference := req.OrderReference
-
-       var cid string
-       if err := s.Store.Get("order", orderReference, &cid); err != nil {
-               return nil, err
-       }
-
-       localIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.NodeID())
-       if err != nil {
-               return nil, err
-       }
-
-       // SIKE key
-       keyseed, err := s.KeyStore.Get("seed")
-       if err != nil {
-               return nil, err
-       }
-       _, sikeSK, err := identity.GenerateSIKEKeys(keyseed)
-       if err != nil {
-               return nil, err
-       }
-
-       order, err := common.RetrieveOrderFromIPFS(s.Ipfs, cid, sikeSK, 
s.NodeID(), localIDDoc.BLSPublicKey)
-       if err != nil {
-               return nil, err
-       }
-
-       orderByte, err := json.Marshal(order)
-       if err != nil {
-               return nil, err
-       }
-       return &api.GetOrderResponse{
-               OrderCID: cid,
-               Order:    string(orderByte),
-       }, nil
+       // TODO: Get Order
+       // orderReference := req.OrderReference
+
+       // var cid string
+       // if err := s.Store.Get("order", orderReference, &cid); err != nil {
+       //      return nil, err
+       // }
+
+       // localIDDoc, err := common.RetrieveIDDoc(s.Tendermint, s.NodeID())
+       // if err != nil {
+       //      return nil, err
+       // }
+
+       // // SIKE key
+       // keyseed, err := s.KeyStore.Get("seed")
+       // if err != nil {
+       //      return nil, err
+       // }
+       // _, sikeSK, err := identity.GenerateSIKEKeys(keyseed)
+       // if err != nil {
+       //      return nil, err
+       // }
+
+       // order, err := common.RetrieveOrderFromIPFS(s.Ipfs, cid, sikeSK, 
s.NodeID(), localIDDoc.BLSPublicKey)
+       // if err != nil {
+       //      return nil, err
+       // }
+
+       // orderByte, err := json.Marshal(order)
+       // if err != nil {
+       //      return nil, err
+       // }
+       // return &api.GetOrderResponse{
+       //      OrderCID: cid,
+       //      Order:    string(orderByte),
+       // }, nil
+
+       return nil, errors.New("Not implemented")
 }
 
 // OrderList retrieves the list of orders
@@ -136,7 +138,7 @@ func (s *Service) Order1(req *api.OrderRequest) (string, 
error) {
        //Initialise values from Request object
        beneficiaryIDDocumentCID := req.BeneficiaryIDDocumentCID
        nodeID := s.NodeID()
-       recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID, 
s.MasterFiduciaryNodeID())
+       recipientList, err := common.BuildRecipientList(s.Tendermint, nodeID, 
s.MasterFiduciaryNodeID())
        if err != nil {
                return "", err
        }
@@ -195,11 +197,11 @@ func (s *Service) OrderSecret1(req 
*api.OrderSecretRequest) (string, error) {
        }
 
        nodeID := s.NodeID()
-       recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID, 
s.MasterFiduciaryNodeID())
+       recipientList, err := common.BuildRecipientList(s.Tendermint, nodeID, 
s.MasterFiduciaryNodeID())
        if err != nil {
                return "", err
        }
-       remoteIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, 
s.MasterFiduciaryNodeID())
+       remoteIDDoc, err := common.RetrieveIDDoc(s.Tendermint, 
s.MasterFiduciaryNodeID())
        if err != nil {
                return "", err
        }
@@ -218,7 +220,7 @@ func (s *Service) OrderSecret1(req *api.OrderSecretRequest) 
(string, error) {
                return "", err
        }
 
-       localIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, s.NodeID())
+       localIDDoc, err := common.RetrieveIDDoc(s.Tendermint, s.NodeID())
        if err != nil {
                return "", err
        }
@@ -261,7 +263,7 @@ func (s *Service) OrderSecret1(req *api.OrderSecretRequest) 
(string, error) {
                return "", err
        }
 
-       //Create a request Object in IPFS
+       //Create a request Object
        order.OrderPart3 = &documents.OrderPart3{
                Redemption:               "SignedReferenceNumber",
                PreviousOrderCID:         previousOrderHash,
diff --git a/pkg/defaultservice/orderTX.go b/pkg/defaultservice/orderTX.go
index d6188c9..19600ff 100644
--- a/pkg/defaultservice/orderTX.go
+++ b/pkg/defaultservice/orderTX.go
@@ -34,7 +34,7 @@ func (s *Service) Order2(tx *api.BlockChainTX) (string, 
error) {
        reqPayload := tx.Payload
        txHashString := hex.EncodeToString(tx.TXhash)
 
-       remoteIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, 
s.MasterFiduciaryNodeID())
+       remoteIDDoc, err := common.RetrieveIDDoc(s.Tendermint, 
s.MasterFiduciaryNodeID())
        if err != nil {
                return "", err
        }
@@ -68,7 +68,7 @@ func (s *Service) Order2(tx *api.BlockChainTX) (string, 
error) {
        //The Processor for the TX is 'dump' - So the principal will pick up 
the TX and display
        //its contents.
 
-       recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID)
+       recipientList, err := common.BuildRecipientList(s.Tendermint, nodeID)
        if err != nil {
                return "", err
        }
@@ -118,7 +118,7 @@ func (s *Service) OrderSecret2(tx *api.BlockChainTX) 
(string, error) {
                return "", err
        }
 
-       remoteIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, 
s.MasterFiduciaryNodeID())
+       remoteIDDoc, err := common.RetrieveIDDoc(s.Tendermint, 
s.MasterFiduciaryNodeID())
        if err != nil {
                return "", err
        }
@@ -154,7 +154,7 @@ func (s *Service) OrderSecret2(tx *api.BlockChainTX) 
(string, error) {
        order.OrderPart4.Extension["FinalPrivateKey"] = finalPrivateKey
 
        //Output Only to self for autoviewing
-       recipientList, err := common.BuildRecipientList(s.Ipfs, nodeID)
+       recipientList, err := common.BuildRecipientList(s.Tendermint, nodeID)
        if err != nil {
                return "", err
        }
diff --git a/pkg/defaultservice/service.go b/pkg/defaultservice/service.go
index 2b9fe0d..b1b911a 100644
--- a/pkg/defaultservice/service.go
+++ b/pkg/defaultservice/service.go
@@ -28,7 +28,6 @@ import (
 
        "github.com/apache/incubator-milagro-dta/libs/datastore"
        "github.com/apache/incubator-milagro-dta/libs/documents"
-       "github.com/apache/incubator-milagro-dta/libs/ipfs"
        "github.com/apache/incubator-milagro-dta/libs/keystore"
        "github.com/apache/incubator-milagro-dta/libs/logger"
        "github.com/apache/incubator-milagro-dta/libs/transport"
@@ -52,7 +51,6 @@ type Service struct {
        Rng                   io.Reader
        Store                 *datastore.Store
        KeyStore              keystore.Store
-       Ipfs                  ipfs.Connector
        Tendermint            *tendermint.NodeConnector
        nodeID                string
        masterFiduciaryNodeID string
@@ -112,7 +110,7 @@ func (s *Service) Dump(tx *api.BlockChainTX) error {
        nodeID := s.NodeID()
        txHashString := hex.EncodeToString(tx.TXhash)
 
-       localIDDoc, err := common.RetrieveIDDocFromIPFS(s.Ipfs, nodeID)
+       localIDDoc, err := common.RetrieveIDDoc(s.Tendermint, nodeID)
        if err != nil {
                return err
        }
diff --git a/pkg/endpoints/endpoints.go b/pkg/endpoints/endpoints.go
index cdf530b..6f767f6 100644
--- a/pkg/endpoints/endpoints.go
+++ b/pkg/endpoints/endpoints.go
@@ -51,7 +51,7 @@ func Endpoints(svc service.Service, corsAllow string, 
authorizer transport.Autho
                "Order1": {
                        Path:        "/" + apiVersion + "/order1",
                        Method:      http.MethodPost,
-                       Endpoint:    MakeOrder1Endpoint(svc),
+                       Endpoint:    MakeOrder1Endpoint(svc, logger),
                        NewRequest:  func() interface{} { return 
&api.OrderRequest{} },
                        NewResponse: func() interface{} { return 
&api.OrderResponse{} },
                        Options: transport.ServerOptions(
@@ -66,7 +66,7 @@ func Endpoints(svc service.Service, corsAllow string, 
authorizer transport.Autho
                "GetOrder": {
                        Path:        "/" + apiVersion + 
"/order/{OrderReference}",
                        Method:      http.MethodGet,
-                       Endpoint:    MakeGetOrderEndpoint(svc),
+                       Endpoint:    MakeGetOrderEndpoint(svc, logger),
                        NewResponse: func() interface{} { return 
&api.GetOrderResponse{} },
                        Options: transport.ServerOptions(
                                transport.SetCors(corsAllow),
@@ -79,7 +79,7 @@ func Endpoints(svc service.Service, corsAllow string, 
authorizer transport.Autho
                "OrderList": {
                        Path:        "/" + apiVersion + "/order",
                        Method:      http.MethodGet,
-                       Endpoint:    MakeOrderListEndpoint(svc),
+                       Endpoint:    MakeOrderListEndpoint(svc, logger),
                        NewResponse: func() interface{} { return 
&api.OrderListResponse{} },
                        Options: transport.ServerOptions(
                                transport.SetCors(corsAllow),
@@ -92,7 +92,7 @@ func Endpoints(svc service.Service, corsAllow string, 
authorizer transport.Autho
                "OrderSecret1": {
                        Path:        "/" + apiVersion + "/order/secret1",
                        Method:      http.MethodPost,
-                       Endpoint:    MakeOrderSecret1Endpoint(svc),
+                       Endpoint:    MakeOrderSecret1Endpoint(svc, logger),
                        NewRequest:  func() interface{} { return 
&api.OrderSecretRequest{} },
                        NewResponse: func() interface{} { return 
&api.OrderSecretResponse{} },
                        Options: transport.ServerOptions(
@@ -110,7 +110,7 @@ func Endpoints(svc service.Service, corsAllow string, 
authorizer transport.Autho
                "Status": {
                        Path:        "/" + apiVersion + "/status",
                        Method:      http.MethodGet,
-                       Endpoint:    MakeStatusEndpoint(svc, nodeType),
+                       Endpoint:    MakeStatusEndpoint(svc, logger, nodeType),
                        NewResponse: func() interface{} { return 
&api.StatusResponse{} },
                        Options: transport.ServerOptions(
                                transport.SetCors(corsAllow),
@@ -160,7 +160,7 @@ func concatPluginEndpoints(logger *logger.Logger, dst 
transport.HTTPEndpoints, n
 }
 
 //MakeOrderListEndpoint -
-func MakeOrderListEndpoint(m service.Service) endpoint.Endpoint {
+func MakeOrderListEndpoint(m service.Service, log *logger.Logger) 
endpoint.Endpoint {
        return func(ctx context.Context, request interface{}) (response 
interface{}, err error) {
                params := transport.GetParams(ctx)
                sortBy := params.Get("sortBy")
@@ -180,12 +180,13 @@ func MakeOrderListEndpoint(m service.Service) 
endpoint.Endpoint {
                if err := validateRequest(req); err != nil {
                        return "", err
                }
+               debugRequest(ctx, req, log)
                return m.OrderList(req)
        }
 }
 
 //MakeGetOrderEndpoint -
-func MakeGetOrderEndpoint(m service.Service) endpoint.Endpoint {
+func MakeGetOrderEndpoint(m service.Service, log *logger.Logger) 
endpoint.Endpoint {
        return func(ctx context.Context, request interface{}) (response 
interface{}, err error) {
                params := transport.GetURLParams(ctx)
                orderReference := params.Get("OrderReference")
@@ -193,12 +194,13 @@ func MakeGetOrderEndpoint(m service.Service) 
endpoint.Endpoint {
                req := &api.GetOrderRequest{
                        OrderReference: orderReference,
                }
+               debugRequest(ctx, req, log)
                return m.GetOrder(req)
        }
 }
 
 //MakeOrder1Endpoint -
-func MakeOrder1Endpoint(m service.Service) endpoint.Endpoint {
+func MakeOrder1Endpoint(m service.Service, log *logger.Logger) 
endpoint.Endpoint {
        return func(ctx context.Context, request interface{}) (response 
interface{}, err error) {
                req, ok := request.(*api.OrderRequest)
                if !ok {
@@ -207,12 +209,13 @@ func MakeOrder1Endpoint(m service.Service) 
endpoint.Endpoint {
                if err := validateRequest(req); err != nil {
                        return "", err
                }
+               debugRequest(ctx, req, log)
                return m.Order1(req)
        }
 }
 
 //MakeOrderSecret1Endpoint -
-func MakeOrderSecret1Endpoint(m service.Service) endpoint.Endpoint {
+func MakeOrderSecret1Endpoint(m service.Service, log *logger.Logger) 
endpoint.Endpoint {
        return func(ctx context.Context, request interface{}) (response 
interface{}, err error) {
                req, ok := request.(*api.OrderSecretRequest)
                if !ok {
@@ -221,12 +224,13 @@ func MakeOrderSecret1Endpoint(m service.Service) 
endpoint.Endpoint {
                if err := validateRequest(req); err != nil {
                        return "", err
                }
+               debugRequest(ctx, req, log)
                return m.OrderSecret1(req)
        }
 }
 
 //MakeStatusEndpoint -
-func MakeStatusEndpoint(m service.Service, nodeType string) endpoint.Endpoint {
+func MakeStatusEndpoint(m service.Service, log *logger.Logger, nodeType 
string) endpoint.Endpoint {
        return func(ctx context.Context, request interface{}) (response 
interface{}, err error) {
                return m.Status(apiVersion, nodeType)
        }
@@ -234,9 +238,13 @@ func MakeStatusEndpoint(m service.Service, nodeType 
string) endpoint.Endpoint {
 
 func validateRequest(req interface{}) error {
        validate := validator.New()
-       validate.RegisterAlias("IPFS", "min=46,max=46,startswith=Q")
+       validate.RegisterAlias("hashID", "min=64,max=64")
        if err := validate.Struct(req); err != nil {
                return errors.Wrap(transport.ErrInvalidRequest, err.Error())
        }
        return nil
 }
+
+func debugRequest(ctx context.Context, req interface{}, log *logger.Logger) {
+       log.Debug("%s : %+v", transport.ReqID(ctx), req)
+}
diff --git a/pkg/identity/identity.go b/pkg/identity/identity.go
index 6e94c05..b6b236f 100644
--- a/pkg/identity/identity.go
+++ b/pkg/identity/identity.go
@@ -24,9 +24,12 @@ import (
        "bytes"
        "time"
 
+       "github.com/apache/incubator-milagro-dta/pkg/api"
+
+       "github.com/apache/incubator-milagro-dta/pkg/tendermint"
+
        "github.com/apache/incubator-milagro-dta/libs/cryptowallet"
        "github.com/apache/incubator-milagro-dta/libs/documents"
-       "github.com/apache/incubator-milagro-dta/libs/ipfs"
        "github.com/apache/incubator-milagro-dta/libs/keystore"
        "github.com/pkg/errors"
 )
@@ -74,28 +77,38 @@ func CreateIdentity(name string) (idDocument 
*documents.IDDoc, rawIDDoc, seed []
        return
 }
 
-// StoreIdentity writes IDDocument to IPFS and secret to keystore
-func StoreIdentity(rawIDDoc, secret []byte, ipfsConn ipfs.Connector, store 
keystore.Store) (idDocumentCID string, err error) {
-       // add ID Doc to IPFS
-       idDocumentCID, err = ipfsConn.Add(rawIDDoc)
-       if err != nil {
-               return
+// StoreIdentity writes IDDocument to blockchain and secret to keystore
+func StoreIdentity(rawIDDoc, secret []byte, tmConn *tendermint.NodeConnector, 
store keystore.Store) (idDocumentID string, err error) {
+
+       chainTX := &api.BlockChainTX{
+               Processor:              api.TXFulfillOrderSecretRequest,
+               SenderID:               tmConn.NodeID(),
+               RecipientID:            "",
+               AdditionalRecipientIDs: []string{},
+               Payload:                rawIDDoc,
+               Tags:                   map[string]string{},
        }
+
+       idDocumentID = chainTX.CalcHash()
+
+       if _, err := tmConn.PostTx(chainTX, "IDDocument"); err != nil {
+               return "", err
+       }
+
        // store the seed
-       err = store.Set("seed", secret)
-       return
+       return idDocumentID, store.Set("seed", secret)
 }
 
 // CheckIdentity verifies the IDDocument
-func CheckIdentity(id, name string, ipfsConn ipfs.Connector, store 
keystore.Store) error {
+func CheckIdentity(id, name string, tmConn *tendermint.NodeConnector, store 
keystore.Store) error {
 
-       rawIDDoc, err := ipfsConn.Get(id)
+       rawIDDoc, err := tmConn.GetTx(id)
        if err != nil {
                return errors.Wrap(err, "ID Document not found")
        }
 
        idDoc := &documents.IDDoc{}
-       if err := documents.DecodeIDDocument(rawIDDoc, id, idDoc); err != nil {
+       if err := documents.DecodeIDDocument(rawIDDoc.Payload, id, idDoc); err 
!= nil {
                return errors.Wrap(err, "Decode ID document")
        }
 
diff --git a/pkg/tendermint/connector.go b/pkg/tendermint/connector.go
index 0dab29e..1852f79 100644
--- a/pkg/tendermint/connector.go
+++ b/pkg/tendermint/connector.go
@@ -70,6 +70,11 @@ func (nc *NodeConnector) Stop() error {
        return nc.tmClient.Stop()
 }
 
+// NodeID returns the NodeID
+func (nc *NodeConnector) NodeID() string {
+       return nc.nodeID
+}
+
 // GetTx retreives a transaction by hash
 func (nc *NodeConnector) GetTx(txHash string) (*api.BlockChainTX, error) {
        query := fmt.Sprintf("tag.txhash='%s'", txHash)
@@ -78,7 +83,7 @@ func (nc *NodeConnector) GetTx(txHash string) 
(*api.BlockChainTX, error) {
                return nil, err
        }
        if len(result.Txs) == 0 {
-               return nil, errors.New("Transaction not found")
+               return nil, errors.Errorf("Document not found: %v", txHash)
        }
 
        payload := &api.BlockChainTX{}

Reply via email to