Commit d4249455 authored by duanjinfei's avatar duanjinfei

change grpc bath sign tx

parent 077f0efa
...@@ -2,3 +2,4 @@ ...@@ -2,3 +2,4 @@
logs logs
root root
cpuProfile.prof cpuProfile.prof
*.DS_Store
\ No newline at end of file
...@@ -4,18 +4,23 @@ GOBIN = $(shell pwd)/build/bin ...@@ -4,18 +4,23 @@ GOBIN = $(shell pwd)/build/bin
GO ?= latest GO ?= latest
GOFILES_NOVENDOR := $(shell go list -f "{{.Dir}}" ./...) GOFILES_NOVENDOR := $(shell go list -f "{{.Dir}}" ./...)
default: metacryptor default: metacryptor testclient
all: metacryptor metacryptor-ocl all: metacryptor metacryptor-ocl testclient
metacryptor-ocl: metacryptor-ocl:
go build -tags opencl -o=${GOBIN}/$@ go build -tags opencl -o=${GOBIN}/$@
@echo "Done building." @echo "Done building."
metacryptor: metacryptor:
go build -o=${GOBIN}/$@ go build -o=${GOBIN}/$@ ./cmd/metacryptor
@echo "Done building." @echo "Done building."
testclient:
go build -o=${GOBIN}/$@ ./cmd/testclient
@echo "Done building."
clean: clean:
rm -fr build/* rm -fr build/*
docker: docker:
......
package main
import "runtime"
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
Execute()
}
package main
import (
"fmt"
"github.com/spf13/cobra"
)
var versionDetail bool
func init() {
RootCmd.AddCommand(versionCmd)
versionDetail = *versionCmd.Flags().BoolP("detail", "d", true, "Print detail version info")
}
// versionCmd represents the base command when called without any subcommands
var versionCmd = &cobra.Command{
Use: "version",
Short: "Print version number",
Long: ``,
Run: func(cmd *cobra.Command, args []string) {
if versionDetail {
fmt.Println("detail version:v1.0.0")
} else {
fmt.Println("version:v1.0.0")
}
},
}
package main
import (
"fmt"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/config"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/service"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/worker"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/xecc"
"github.com/fsnotify/fsnotify"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"google.golang.org/grpc"
"net"
"os"
"path"
"path/filepath"
"sync"
)
var cfgFile string
var Verbose bool
var routineCount uint
// RootCmd represents the base command when called without any subcommands
var RootCmd = &cobra.Command{
Use: "metacryptor",
Short: "The MetaCryptor command-line interface",
Long: ``,
Run: func(cmd *cobra.Command, args []string) {
runNode()
},
// Uncomment the following line if your bare application
// has an action associated with it:
// Run: func(cmd *cobra.Command, args []string) { },
}
func Execute() {
if err := RootCmd.Execute(); err != nil {
log.Fatal(err)
os.Exit(-1)
}
}
func init() {
cobra.OnInitialize(initConfig)
RootCmd.PersistentFlags().UintVar(&routineCount, "routine", 2, "routine count for corrupt do task")
RootCmd.PersistentFlags().StringVar(&cfgFile, "config", "config.toml", "config file (default is ./config.yaml)")
RootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output")
}
// initConfig reads in config file and ENV variables if set.
func initConfig() {
log.InitLog()
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
viper.SetConfigName("config") // name of config file (without extension)
if cfgFile != "" { // enable ability to specify config file via flag
//log.Warn(">>> cfgFile: ", cfgFile)
viper.SetConfigFile(cfgFile)
configDir := path.Dir(cfgFile)
if configDir != "." && configDir != dir {
viper.AddConfigPath(configDir)
}
}
viper.AddConfigPath(".")
viper.AutomaticEnv() // read in environment variables that match
// If a config file is found, read it in.
if err := viper.ReadInConfig(); err == nil {
log.Info("Using config file:", viper.ConfigFileUsed())
} else {
log.Error("Read config failed", "error", err)
return
}
_, err = config.ParseConfig(viper.ConfigFileUsed())
if err != nil {
log.WithField("error", err).Fatal("parse config failed")
return
}
//log.Info("config is", config.GetConfig())
config.GetConfig().SetRoutineCount(routineCount)
viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event) {
log.Warn("Config file changed:", e.Name)
})
}
func runNode() {
xecc.XeccInstance()
wk := worker.NewWorker()
wk.Start()
lis, err := net.Listen("tcp", config.GetConfig().GpcAddress)
if err != nil {
fmt.Printf("failed to listen: %v", err)
return
}
s := grpc.NewServer()
service.RegisterCrypter(s, wk)
err = s.Serve(lis)
if err != nil {
fmt.Printf("failed to serve: %v", err)
return
}
wg := sync.WaitGroup{}
wg.Add(1)
wg.Wait()
}
package main
import (
"context"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log"
basetype "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
metacrypter "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/crypter/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"math/big"
)
func main() {
client, err := grpc.Dial("127.0.0.1:38001", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Error("dial server failed", err)
}
accounts := common.CreateAccounts(1)
log.Info("account address is ", accounts[0].Address.String())
tmptx := accounts[0].MakeInitTx(big.NewInt(100))
crypterclient := metacrypter.NewCrypterServiceClient(client)
signTxReq := new(metacrypter.BatchSignTxRequest)
signTxReq.RawTx = make([]*basetype.MetaTxBase, 0)
{
var err error
stx := &basetype.MetaTxBase{
TxHash: common.ToHash(tmptx.Hash().Bytes()),
TxType: 1,
ChainId: common.FromBigInt(big.NewInt(100)),
Gas: tmptx.Gas(),
GasPrice: common.FromBigInt(tmptx.GasPrice()),
Value: common.FromBigInt(tmptx.Value()),
Data: tmptx.Data(),
Nonce: tmptx.Nonce(),
To: common.FromEthAddress(tmptx.To()),
}
signTxReq.RawTx = append(signTxReq.RawTx, stx)
signTxReq.Private = common.FromHex(accounts[0].Private)
signRes, err := crypterclient.BatchSignTx(context.Background(), signTxReq)
if err != nil {
log.Errorf("batch sign tx failed with error:(%s)", err)
return
}
recoverReq := new(metacrypter.BatchRecoverTxRequest)
recoverReq.RawTx = signRes.SignedTx
recoverRes, err := crypterclient.BatchRecoverTx(context.Background(), recoverReq, grpc.EmptyCallOption{})
if err != nil {
log.Error("batch recover batch signed tx failed", err)
} else {
log.Info("recover batch signed tx got from ", recoverRes.RecoverdTx[0].From)
}
}
{
req := new(metacrypter.BatchRecoverTxRequest)
req.RawTx = make([]*basetype.MetaTxBase, 0)
v, r, s := tmptx.RawSignatureValues()
log.WithField("txhash", tmptx.Hash().String()).Info("txhash")
log.WithField("r", common.Bytes2Hex(r.Bytes())).Info("tx r")
log.WithField("s", common.Bytes2Hex(s.Bytes())).Info("tx s")
log.WithField("v", common.Bytes2Hex(v.Bytes())).Info("tx v")
rtx := &basetype.MetaTxBase{
TxHash: common.ToHash(tmptx.Hash().Bytes()),
TxType: 1,
ChainId: common.FromBigInt(big.NewInt(100)),
Gas: tmptx.Gas(),
GasPrice: common.FromBigInt(tmptx.GasPrice()),
Value: common.FromBigInt(tmptx.Value()),
Data: tmptx.Data(),
Nonce: tmptx.Nonce(),
To: common.FromEthAddress(tmptx.To()),
R: common.FromBigInt(r),
S: common.FromBigInt(s),
V: common.FromBigInt(v),
}
req.RawTx = append(req.RawTx, rtx)
res, err := crypterclient.BatchRecoverTx(context.Background(), req, grpc.EmptyCallOption{})
if err != nil {
log.Error("batch recover tx failed", err)
}
log.Info("recover got from ", res.RecoverdTx[0].From)
}
}
package main package common
import ( import (
"crypto/ecdsa" "crypto/ecdsa"
...@@ -10,10 +10,10 @@ import ( ...@@ -10,10 +10,10 @@ import (
) )
type Account struct { type Account struct {
Address common.Address `json:"address"` Address common.Address `json:"address"`
Private string `json:"private"` Private string `json:"private"`
Nonce uint64 `json:"nonce"` Nonce uint64 `json:"nonce"`
PK *ecdsa.PrivateKey `json:"-"` PK *ecdsa.PrivateKey `json:"-"`
} }
func (acc *Account) MakeInitTx(chainid *big.Int) *types.Transaction { func (acc *Account) MakeInitTx(chainid *big.Int) *types.Transaction {
...@@ -33,7 +33,7 @@ func (acc *Account) MakeInitTx(chainid *big.Int) *types.Transaction { ...@@ -33,7 +33,7 @@ func (acc *Account) MakeInitTx(chainid *big.Int) *types.Transaction {
return tx return tx
} }
func (acc *Account) SignTx(tx *types.Transaction, chainid *big.Int) (*types.Transaction, error){ func (acc *Account) SignTx(tx *types.Transaction, chainid *big.Int) (*types.Transaction, error) {
signedTx, err := types.SignTx(tx, types.NewEIP155Signer(chainid), acc.PK) signedTx, err := types.SignTx(tx, types.NewEIP155Signer(chainid), acc.PK)
if err != nil { if err != nil {
return nil, err return nil, err
...@@ -43,8 +43,8 @@ func (acc *Account) SignTx(tx *types.Transaction, chainid *big.Int) (*types.Tran ...@@ -43,8 +43,8 @@ func (acc *Account) SignTx(tx *types.Transaction, chainid *big.Int) (*types.Tran
func CreateAccounts(count int) []*Account { func CreateAccounts(count int) []*Account {
accs := make([]*Account, 0, count) accs := make([]*Account, 0, count)
for i:=0; i < count; i++ { for i := 0; i < count; i++ {
pk,_ := crypto.GenerateKey() pk, _ := crypto.GenerateKey()
addr := crypto.PubkeyToAddress(pk.PublicKey) addr := crypto.PubkeyToAddress(pk.PublicKey)
private := hexutil.Encode(crypto.FromECDSA(pk)) private := hexutil.Encode(crypto.FromECDSA(pk))
accs = append(accs, &Account{Address: addr, Private: private, PK: pk}) accs = append(accs, &Account{Address: addr, Private: private, PK: pk})
......
...@@ -16,20 +16,14 @@ var ( ...@@ -16,20 +16,14 @@ var (
type LogConfig struct { type LogConfig struct {
Save uint `json:"save"` Save uint `json:"save"`
Path string `json:"path"`
Level string `json:"level"` Level string `json:"level"`
} }
func InitLog(logConfig LogConfig) { func InitLog() {
mlog.Out = os.Stdout mlog.Out = os.Stdout
var loglevel logrus.Level mlog.SetLevel(logrus.InfoLevel)
err := loglevel.UnmarshalText([]byte(logConfig.Level))
if err != nil {
mlog.Panicf("set log level failed: %v", err)
}
mlog.SetLevel(loglevel)
mlog.Formatter = &logrus.TextFormatter{FullTimestamp: true, TimestampFormat: "2006-01-2 15:04:05.000"} mlog.Formatter = &logrus.TextFormatter{FullTimestamp: true, TimestampFormat: "2006-01-2 15:04:05.000"}
localFilesystemLogger(mlog, logConfig.Path, logConfig.Save) //localFilesystemLogger(mlog, logConfig.Path, logConfig.Save)
} }
func logWriter(logPath string, level string, save uint) *rotatelogs.RotateLogs { func logWriter(logPath string, level string, save uint) *rotatelogs.RotateLogs {
......
grpc_addr = ":38002"
chain_id = 512512
\ No newline at end of file
package config
import (
"github.com/BurntSushi/toml"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log"
"github.com/spf13/viper"
"io/ioutil"
"runtime"
)
type Config struct {
GpcAddress string `json:"grpc_addr" toml:"grpc_addr"`
ChainId int64 `json:"chain_id" toml:"chain_id"`
RootDir string
}
var _cfg *Config = nil
func (conf *Config) SetRoutineCount(n uint) {
viper.Set("routine_count", n)
}
func (conf *Config) GetRoutineCount() uint {
root := viper.GetUint("routine_count")
if root <= 0 {
root = uint(runtime.NumCPU())
}
return root
}
func ParseConfig(path string) (*Config, error) {
data, err := ioutil.ReadFile(path)
if err != nil {
log.Error("get config failed", "err", err)
panic(err)
}
err = toml.Unmarshal(data, &_cfg)
//err = json.Unmarshal(data, &_cfg)
if err != nil {
log.Error("unmarshal config failed", "err", err)
panic(err)
}
return _cfg, nil
}
func GetConfig() *Config {
return _cfg
}
package crypto
import (
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common"
basev1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"math/big"
)
func SignTx(pk []byte, tx *basev1.MetaTxBase, chainid *big.Int) error {
txdata := &types.LegacyTx{
Nonce: tx.Nonce,
GasPrice: common.ToBigInt(tx.GasPrice),
Gas: tx.Gas,
To: common.ToEthAddress(tx.To),
Value: common.ToBigInt(tx.Value),
Data: tx.Data,
}
ntx := types.NewTx(txdata)
signer := types.NewEIP155Signer(chainid)
privk, err := crypto.ToECDSA(pk)
if err != nil {
return err
}
signedTx, err := types.SignTx(ntx, signer, privk)
if err != nil {
return err
}
v, r, s := signedTx.RawSignatureValues()
tx.R = common.FromBigInt(r)
tx.S = common.FromBigInt(s)
tx.V = common.FromBigInt(v)
return nil
}
...@@ -3,34 +3,52 @@ module github.com/CaduceusMetaverseProtocol/MetaCryptor ...@@ -3,34 +3,52 @@ module github.com/CaduceusMetaverseProtocol/MetaCryptor
go 1.18 go 1.18
require ( require (
github.com/BurntSushi/toml v0.3.1
github.com/CaduceusMetaverseProtocol/MetaProtocol v0.0.1 github.com/CaduceusMetaverseProtocol/MetaProtocol v0.0.1
github.com/CaduceusMetaverseProtocol/MetaTypes v1.0.0
github.com/btcsuite/btcd v0.21.0-beta github.com/btcsuite/btcd v0.21.0-beta
github.com/ethereum/go-ethereum v1.10.26 github.com/ethereum/go-ethereum v1.10.26
github.com/fsnotify/fsnotify v1.6.0
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/rakyll/statik v0.1.7 github.com/rakyll/statik v0.1.7
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
github.com/sirupsen/logrus v1.9.0 github.com/sirupsen/logrus v1.9.0
github.com/spf13/cobra v1.6.1
github.com/spf13/viper v1.15.0
github.com/tjfoc/gmsm v1.4.1 github.com/tjfoc/gmsm v1.4.1
golang.org/x/crypto v0.5.0 golang.org/x/crypto v0.5.0
google.golang.org/grpc v1.51.0 google.golang.org/grpc v1.52.0
) )
require ( require (
github.com/CaduceusMetaverseProtocol/MetaTypes v1.0.0 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.2 // indirect github.com/golang/protobuf v1.5.2 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.0.1 // indirect
github.com/jonboulle/clockwork v0.3.0 // indirect github.com/jonboulle/clockwork v0.3.0 // indirect
github.com/lestrrat-go/strftime v1.0.6 // indirect github.com/lestrrat-go/strftime v1.0.6 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/pelletier/go-toml/v2 v2.0.6 // indirect
github.com/pkg/errors v0.9.1 // indirect github.com/pkg/errors v0.9.1 // indirect
github.com/spf13/afero v1.9.3 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.4.2 // indirect
golang.org/x/net v0.5.0 // indirect golang.org/x/net v0.5.0 // indirect
golang.org/x/sys v0.4.0 // indirect golang.org/x/sys v0.4.0 // indirect
golang.org/x/text v0.6.0 // indirect golang.org/x/text v0.6.0 // indirect
google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc // indirect google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef // indirect
google.golang.org/protobuf v1.28.1 // indirect google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
) )
replace github.com/CaduceusMetaverseProtocol/MetaProtocol => ../MetaProtocol-main replace github.com/CaduceusMetaverseProtocol/MetaProtocol => ../MetaProtocol-main
replace github.com/CaduceusMetaverseProtocol/MetaTypes => ../MetaTypes-main replace github.com/CaduceusMetaverseProtocol/MetaTypes => ../MetaTypes-main
replace github.com/ethereum/go-ethereum => github.com/CaduceusMetaverseProtocol/go-ethereum v1.10.26
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/CaduceusMetaverseProtocol/go-ethereum v1.10.26 h1:+bPap43xrI8JBvlzEaAcBvhBZN5z0keRRd7lEn9UkqQ=
github.com/CaduceusMetaverseProtocol/go-ethereum v1.10.26/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg=
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8=
github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o=
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
...@@ -20,8 +61,14 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE ...@@ -20,8 +61,14 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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.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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
...@@ -32,59 +79,128 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1 ...@@ -32,59 +79,128 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/ethereum/go-ethereum v1.10.26 h1:i/7d9RBBwiXCEuyduBQzJw/mKmnvzsN14jqBmytw72s= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
github.com/ethereum/go-ethereum v1.10.26/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg=
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/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/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/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jonboulle/clockwork v0.3.0 h1:9BSCMi8C+0qdApAp4auwX0RkLGUjs956h0EkuQymUhg= github.com/jonboulle/clockwork v0.3.0 h1:9BSCMi8C+0qdApAp4auwX0RkLGUjs956h0EkuQymUhg=
github.com/jonboulle/clockwork v0.3.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/jonboulle/clockwork v0.3.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
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/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8= github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is= github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4= github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA= github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ= github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ=
github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw= github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/onsi/ginkgo v1.6.0/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.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU=
github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
...@@ -93,106 +209,374 @@ github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= ...@@ -93,106 +209,374 @@ github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ=
github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk=
github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU=
github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=
github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE=
github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4=
github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/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-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-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-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-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-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.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/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k=
golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/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-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-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-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= 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/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc h1:nUKKji0AarrQKh6XpFEpG3p1TNztxhe7C8TcUvDgXqw= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc/go.mod h1:1dOng4TWOomJrDGhpXjfCD35wQC6jnC7HpRmOFRqEV0= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef h1:uQ2vjV/sHTsWSqdKeLqmwitzgvjMl7o4IdtHwUDXSJY=
google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.52.0 h1:kd48UiU7EHsV4rnLyOJRuP/Il/UHE7gdDAQ+SZI7nZk=
google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
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/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
package main
import (
"context"
"fmt"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/service"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/xecc"
basetype "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
metacrypter "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/crypter/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"math/big"
"net"
"time"
)
func test() {
time.Sleep(time.Second * 4)
client, err := grpc.Dial("127.0.0.1:38001", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Error("dial server failed", err)
}
accounts := CreateAccounts(1)
log.Info("account address is ", accounts[0].Address.String())
tx := accounts[0].MakeInitTx(big.NewInt(100))
crypterclient := metacrypter.NewCrypterServiceClient(client)
req := new(metacrypter.BatchRecoverTxRequest)
req.RawTx = make([]*basetype.MetaTxBase, 0)
v, r, s := tx.RawSignatureValues()
log.WithField("txhash", tx.Hash().String()).Info("txhash")
log.WithField("r", common.Bytes2Hex(r.Bytes())).Info("tx r")
log.WithField("s", common.Bytes2Hex(s.Bytes())).Info("tx s")
log.WithField("v", common.Bytes2Hex(v.Bytes())).Info("tx v")
rtx := &basetype.MetaTxBase{
TxHash: common.ToHash(tx.Hash().Bytes()),
TxType: 1,
ChainId: common.FromBigInt(big.NewInt(100)),
Gas: tx.Gas(),
GasPrice: common.FromBigInt(tx.GasPrice()),
Value: common.FromBigInt(tx.Value()),
Data: tx.Data(),
Nonce: tx.Nonce(),
To: common.FromEthAddress(tx.To()),
R: common.FromBigInt(r),
S: common.FromBigInt(s),
V: common.FromBigInt(v),
}
req.RawTx = append(req.RawTx, rtx)
res, err := crypterclient.BatchRecoverTx(context.Background(), req, grpc.EmptyCallOption{})
if err != nil {
log.Error("batch recover tx failed", err)
}
log.Info("recover got from ", res.RecoverdTx[0].From)
}
func main() {
xecc.XeccInstance()
lis, err := net.Listen("tcp", ":38001")
if err != nil {
fmt.Printf("failed to listen: %v", err)
return
}
s := grpc.NewServer()
service.RegisterCrypter(s)
go test()
err = s.Serve(lis)
if err != nil {
fmt.Printf("failed to serve: %v", err)
return
}
}
...@@ -2,74 +2,48 @@ package service ...@@ -2,74 +2,48 @@ package service
import ( import (
"context" "context"
"encoding/hex"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log" "github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log"
metatypes "github.com/CaduceusMetaverseProtocol/MetaTypes/types" "github.com/CaduceusMetaverseProtocol/MetaCryptor/worker"
"math/big"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/crypto"
metacrypter "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/crypter/v1" metacrypter "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/crypter/v1"
metatypes "github.com/CaduceusMetaverseProtocol/MetaTypes/types"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
) )
type CrypterServer struct { type CrypterServer struct {
worker *worker.Worker
metacrypter.UnimplementedCrypterServiceServer metacrypter.UnimplementedCrypterServiceServer
} }
func (*CrypterServer) BatchSign(ctx context.Context, req *metacrypter.BatchSignRequest) (*metacrypter.BatchSignResponse, error) { func (s *CrypterServer) BatchSign(ctx context.Context, req *metacrypter.BatchSignRequest) (*metacrypter.BatchSignResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchSign not implemented") return nil, status.Errorf(codes.Unimplemented, "method BatchSign not implemented")
} }
func (*CrypterServer) BatchVerify(ctx context.Context, req *metacrypter.BatchVerifyRequest) (*metacrypter.BatchVerifyResponse, error) { func (s *CrypterServer) BatchVerify(ctx context.Context, req *metacrypter.BatchVerifyRequest) (*metacrypter.BatchVerifyResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchVerify not implemented") return nil, status.Errorf(codes.Unimplemented, "method BatchVerify not implemented")
} }
func (*CrypterServer) BatchRecover(ctx context.Context, req *metacrypter.BatchRecoverRequest) (*metacrypter.BatchRecoverResponse, error) { func (s *CrypterServer) BatchRecover(ctx context.Context, req *metacrypter.BatchRecoverRequest) (*metacrypter.BatchRecoverResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchRecover not implemented") return nil, status.Errorf(codes.Unimplemented, "method BatchRecover not implemented")
} }
func (*CrypterServer) BatchRecoverTx(ctx context.Context, req *metacrypter.BatchRecoverTxRequest) (*metacrypter.BatchRecoverTxResponse, error) { func (s *CrypterServer) BatchSignTx(ctx context.Context, req *metacrypter.BatchSignTxRequest) (*metacrypter.BatchSignTxResponse, error) {
log.Info("server get batch recover tx request")
signedTxs := s.worker.BatchSignTx(req.RawTx, req.Private)
response := new(metacrypter.BatchSignTxResponse)
response.SignedTx = signedTxs
return response, nil
}
func (s *CrypterServer) BatchRecoverTx(ctx context.Context, req *metacrypter.BatchRecoverTxRequest) (*metacrypter.BatchRecoverTxResponse, error) {
//tasks := make([]*XTaskSecp256k1RPubkey, len(req.RawTx)) //tasks := make([]*XTaskSecp256k1RPubkey, len(req.RawTx))
//big8 := big.NewInt(8) //big8 := big.NewInt(8)
log.Info("server get batch recover tx request") log.Info("server get batch recover tx request")
froms := make([][]byte, len(req.RawTx)) froms := s.worker.BatchRecoverTx(req.RawTx)
for i, tx := range req.RawTx {
log.WithField("txhash", tx.TxHash.String()).Info("txhash")
log.WithField("r", tx.R.String()).Info("tx r")
log.WithField("s", tx.S.String()).Info("tx s")
log.WithField("v", tx.V.String()).Info("tx v")
log.WithField("chainid", tx.ChainId.String()).Info("tx chainid")
V := common.ToBigInt(tx.V)
chainid := common.ToBigInt(tx.ChainId)
chainIdMul := new(big.Int).Mul(chainid, big.NewInt(2))
v := new(big.Int).Sub(V, chainIdMul)
vb := byte(v.Uint64() - 35)
log.WithField("vb is ", vb).Info("vb")
signature := make([]byte, 65)
copy(signature[:32], common.LeftPadBytes(tx.R.Bytes(), 32))
copy(signature[32:64], common.LeftPadBytes(tx.S.Bytes(), 32))
signature[64] = vb
pubk, err := crypto.RecoverPubkey(common.LeftPadBytes(crypto.SignedHash(tx, chainid), 32), signature)
if err != nil {
log.Info("recover failed for tx", "index", i, "err", err)
} else {
froms[i] = common.CopyBytes(crypto.Keccak256(pubk[1:])[12:])
log.Info("recover address is ", hex.EncodeToString(froms[i]))
}
//task := &XTaskSecp256k1RPubkey{
// Msg: tx.TxHash.Hash,
// Rsig: crypto.BytesCombine(common.LeftPadBytes(tx.R.Data, 32), common.LeftPadBytes(tx.S.Data, 32), []byte{vb}),
//}
//tasks[i] = task
}
response := new(metacrypter.BatchRecoverTxResponse) response := new(metacrypter.BatchRecoverTxResponse)
response.RecoverdTx = req.RawTx response.RecoverdTx = req.RawTx
//resps, err := xecc.XeccInstance().BatchSecp256k1RecoverPubkey(tasks)
//if err != nil {
// return response, err
//}
for i := 0; i < len(response.RecoverdTx); i++ { for i := 0; i < len(response.RecoverdTx); i++ {
a := metatypes.BytesToAddress(froms[i]) a := metatypes.BytesToAddress(froms[i])
...@@ -79,6 +53,6 @@ func (*CrypterServer) BatchRecoverTx(ctx context.Context, req *metacrypter.Batch ...@@ -79,6 +53,6 @@ func (*CrypterServer) BatchRecoverTx(ctx context.Context, req *metacrypter.Batch
return response, nil return response, nil
} }
func RegisterCrypter(server *grpc.Server) { func RegisterCrypter(server *grpc.Server, worker *worker.Worker) {
metacrypter.RegisterCrypterServiceServer(server, &CrypterServer{}) metacrypter.RegisterCrypterServiceServer(server, &CrypterServer{worker: worker})
} }
package worker
import (
"errors"
"sync"
)
var (
ErrTaskPoolIsFull = errors.New("task pool is full")
)
type TaskHandle func(interface{})
type Tasks struct {
tasknum uint
handler TaskHandle
taskpool chan interface{}
wg sync.WaitGroup
}
func NewTasks(routine uint, handle TaskHandle) *Tasks {
return &Tasks{
tasknum: routine,
handler: handle,
taskpool: make(chan interface{}, 1000000),
}
}
func (t *Tasks) AddTask(task interface{}) error {
select {
case t.taskpool <- task:
return nil
default:
return ErrTaskPoolIsFull
}
}
func (t *Tasks) Stop() {
close(t.taskpool)
}
func (t *Tasks) Run() {
for i := uint(0); i < t.tasknum; i++ {
t.wg.Add(1)
go func() {
defer t.wg.Done()
for {
select {
case task, ok := <-t.taskpool:
if !ok {
return
}
t.handler(task)
}
}
}()
}
}
func (t *Tasks) Done() {
t.wg.Wait()
}
package worker
import (
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/config"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/crypto"
basev1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
"math/big"
"sync"
)
type Worker struct {
recoverTask *Tasks
signTask *Tasks
}
func NewWorker() *Worker {
w := new(Worker)
w.recoverTask = NewTasks(config.GetConfig().GetRoutineCount(), w.handleRecoverTx)
w.signTask = NewTasks(config.GetConfig().GetRoutineCount(), w.handleSignTx)
return w
}
func (w *Worker) handleRecoverTx(t interface{}) {
defChainId := big.NewInt(config.GetConfig().ChainId)
item, ok := t.(*ItemRecover)
if !ok {
return
}
tx := item.tx
log.WithField("txHash", tx.TxHash.String()).Info("txHash")
log.WithField("r", tx.R.String()).Info("tx r")
log.WithField("s", tx.S.String()).Info("tx s")
log.WithField("v", tx.V.String()).Info("tx v")
log.WithField("chainId", tx.ChainId.String()).Info("tx chainId")
var chainid *big.Int
if tx.ChainId == nil {
chainid = defChainId
} else {
chainid = common.ToBigInt(tx.ChainId)
}
V := common.ToBigInt(tx.V)
chainIdMul := new(big.Int).Mul(chainid, big.NewInt(2))
v := new(big.Int).Sub(V, chainIdMul)
vb := byte(v.Uint64() - 35)
signature := make([]byte, 65)
copy(signature[:32], common.LeftPadBytes(tx.R.Bytes(), 32))
copy(signature[32:64], common.LeftPadBytes(tx.S.Bytes(), 32))
signature[64] = vb
pubk, err := crypto.RecoverPubkey(common.LeftPadBytes(crypto.SignedHash(tx, chainid), 32), signature)
if err != nil {
item.response <- err
} else {
item.response <- common.CopyBytes(crypto.Keccak256(pubk[1:])[12:])
}
}
func (w *Worker) handleSignTx(t interface{}) {
defChainId := big.NewInt(config.GetConfig().ChainId)
item := t.(*ItemSignTx)
tx := item.tx
var chainid *big.Int
if tx.ChainId == nil {
chainid = defChainId
} else {
chainid = common.ToBigInt(tx.ChainId)
}
err := crypto.SignTx(item.pk, tx, chainid)
if err != nil {
item.response <- err
} else {
item.response <- tx
}
}
func (w *Worker) Start() {
w.recoverTask.Run()
w.signTask.Run()
}
type ItemRecover struct {
tx *basev1.MetaTxBase
response chan interface{}
}
type ItemSignTx struct {
tx *basev1.MetaTxBase
pk []byte
response chan interface{}
}
func (w *Worker) BatchRecoverTx(txs []*basev1.MetaTxBase) [][]byte {
results := make([][]byte, len(txs))
wg := sync.WaitGroup{}
for i, tx := range txs {
wg.Add(1)
go func(tx *basev1.MetaTxBase, froms [][]byte, index int) {
defer wg.Done()
res := make(chan interface{})
if err := w.recoverTask.AddTask(&ItemRecover{tx: tx, response: res}); err != nil {
res <- err
}
data := <-res
switch msg := (data).(type) {
case error:
froms[index] = []byte{}
case []byte:
froms[index] = common.CopyBytes(msg)
}
}(tx, results, i)
}
wg.Wait()
return results
}
func (w *Worker) BatchSignTx(txs []*basev1.MetaTxBase, pk []byte) []*basev1.MetaTxBase {
results := make([]*basev1.MetaTxBase, len(txs))
wg := sync.WaitGroup{}
for i, tx := range txs {
wg.Add(1)
go func(tx *basev1.MetaTxBase, signedTxs []*basev1.MetaTxBase, index int) {
defer wg.Done()
res := make(chan interface{})
if err := w.signTask.AddTask(&ItemSignTx{pk: pk, tx: tx, response: res}); err != nil {
res <- err
}
data := <-res
switch msg := (data).(type) {
case error:
//froms[index] = []byte{}
case *basev1.MetaTxBase:
signedTxs[index] = msg
}
}(tx, results, i)
}
wg.Wait()
return results
}
.idea .idea
.vscode .vscode
protocol protocol
gen
...@@ -38,6 +38,14 @@ message BatchRecoverResponse { ...@@ -38,6 +38,14 @@ message BatchRecoverResponse {
repeated bytes pubkey = 1; repeated bytes pubkey = 1;
} }
message BatchSignTxRequest {
repeated base.v1.MetaTxBase raw_tx = 1;
bytes private = 2;
}
message BatchSignTxResponse {
repeated base.v1.MetaTxBase signed_tx = 1;
}
message BatchRecoverTxRequest { message BatchRecoverTxRequest {
repeated base.v1.MetaTxBase raw_tx = 1; repeated base.v1.MetaTxBase raw_tx = 1;
} }
......
...@@ -8,5 +8,6 @@ service CrypterService { ...@@ -8,5 +8,6 @@ service CrypterService {
rpc BatchSign(BatchSignRequest) returns (BatchSignResponse) {} rpc BatchSign(BatchSignRequest) returns (BatchSignResponse) {}
rpc BatchVerify(BatchVerifyRequest) returns (BatchVerifyResponse) {} rpc BatchVerify(BatchVerifyRequest) returns (BatchVerifyResponse) {}
rpc BatchRecover(BatchRecoverRequest) returns (BatchRecoverResponse) {} rpc BatchRecover(BatchRecoverRequest) returns (BatchRecoverResponse) {}
rpc BatchSignTx(BatchSignTxRequest) returns (BatchSignTxResponse) {}
rpc BatchRecoverTx(BatchRecoverTxRequest) returns (BatchRecoverTxResponse) {} rpc BatchRecoverTx(BatchRecoverTxRequest) returns (BatchRecoverTxResponse) {}
} }
...@@ -299,6 +299,90 @@ func (m *BatchRecoverResponse) GetPubkey() [][]byte { ...@@ -299,6 +299,90 @@ func (m *BatchRecoverResponse) GetPubkey() [][]byte {
return nil return nil
} }
type BatchSignTxRequest struct {
RawTx []*v1.MetaTxBase `protobuf:"bytes,1,rep,name=raw_tx,json=rawTx,proto3" json:"raw_tx,omitempty"`
Private []byte `protobuf:"bytes,2,opt,name=private,proto3" json:"private,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BatchSignTxRequest) Reset() { *m = BatchSignTxRequest{} }
func (m *BatchSignTxRequest) String() string { return proto.CompactTextString(m) }
func (*BatchSignTxRequest) ProtoMessage() {}
func (*BatchSignTxRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_c54a21c4b8afb3e6, []int{6}
}
func (m *BatchSignTxRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BatchSignTxRequest.Unmarshal(m, b)
}
func (m *BatchSignTxRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BatchSignTxRequest.Marshal(b, m, deterministic)
}
func (m *BatchSignTxRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_BatchSignTxRequest.Merge(m, src)
}
func (m *BatchSignTxRequest) XXX_Size() int {
return xxx_messageInfo_BatchSignTxRequest.Size(m)
}
func (m *BatchSignTxRequest) XXX_DiscardUnknown() {
xxx_messageInfo_BatchSignTxRequest.DiscardUnknown(m)
}
var xxx_messageInfo_BatchSignTxRequest proto.InternalMessageInfo
func (m *BatchSignTxRequest) GetRawTx() []*v1.MetaTxBase {
if m != nil {
return m.RawTx
}
return nil
}
func (m *BatchSignTxRequest) GetPrivate() []byte {
if m != nil {
return m.Private
}
return nil
}
type BatchSignTxResponse struct {
SignedTx []*v1.MetaTxBase `protobuf:"bytes,1,rep,name=signed_tx,json=signedTx,proto3" json:"signed_tx,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BatchSignTxResponse) Reset() { *m = BatchSignTxResponse{} }
func (m *BatchSignTxResponse) String() string { return proto.CompactTextString(m) }
func (*BatchSignTxResponse) ProtoMessage() {}
func (*BatchSignTxResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_c54a21c4b8afb3e6, []int{7}
}
func (m *BatchSignTxResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BatchSignTxResponse.Unmarshal(m, b)
}
func (m *BatchSignTxResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BatchSignTxResponse.Marshal(b, m, deterministic)
}
func (m *BatchSignTxResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_BatchSignTxResponse.Merge(m, src)
}
func (m *BatchSignTxResponse) XXX_Size() int {
return xxx_messageInfo_BatchSignTxResponse.Size(m)
}
func (m *BatchSignTxResponse) XXX_DiscardUnknown() {
xxx_messageInfo_BatchSignTxResponse.DiscardUnknown(m)
}
var xxx_messageInfo_BatchSignTxResponse proto.InternalMessageInfo
func (m *BatchSignTxResponse) GetSignedTx() []*v1.MetaTxBase {
if m != nil {
return m.SignedTx
}
return nil
}
type BatchRecoverTxRequest struct { type BatchRecoverTxRequest struct {
RawTx []*v1.MetaTxBase `protobuf:"bytes,1,rep,name=raw_tx,json=rawTx,proto3" json:"raw_tx,omitempty"` RawTx []*v1.MetaTxBase `protobuf:"bytes,1,rep,name=raw_tx,json=rawTx,proto3" json:"raw_tx,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
...@@ -310,7 +394,7 @@ func (m *BatchRecoverTxRequest) Reset() { *m = BatchRecoverTxRequest{} } ...@@ -310,7 +394,7 @@ func (m *BatchRecoverTxRequest) Reset() { *m = BatchRecoverTxRequest{} }
func (m *BatchRecoverTxRequest) String() string { return proto.CompactTextString(m) } func (m *BatchRecoverTxRequest) String() string { return proto.CompactTextString(m) }
func (*BatchRecoverTxRequest) ProtoMessage() {} func (*BatchRecoverTxRequest) ProtoMessage() {}
func (*BatchRecoverTxRequest) Descriptor() ([]byte, []int) { func (*BatchRecoverTxRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_c54a21c4b8afb3e6, []int{6} return fileDescriptor_c54a21c4b8afb3e6, []int{8}
} }
func (m *BatchRecoverTxRequest) XXX_Unmarshal(b []byte) error { func (m *BatchRecoverTxRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BatchRecoverTxRequest.Unmarshal(m, b) return xxx_messageInfo_BatchRecoverTxRequest.Unmarshal(m, b)
...@@ -348,7 +432,7 @@ func (m *BatchRecoverTxResponse) Reset() { *m = BatchRecoverTxResponse{} ...@@ -348,7 +432,7 @@ func (m *BatchRecoverTxResponse) Reset() { *m = BatchRecoverTxResponse{}
func (m *BatchRecoverTxResponse) String() string { return proto.CompactTextString(m) } func (m *BatchRecoverTxResponse) String() string { return proto.CompactTextString(m) }
func (*BatchRecoverTxResponse) ProtoMessage() {} func (*BatchRecoverTxResponse) ProtoMessage() {}
func (*BatchRecoverTxResponse) Descriptor() ([]byte, []int) { func (*BatchRecoverTxResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_c54a21c4b8afb3e6, []int{7} return fileDescriptor_c54a21c4b8afb3e6, []int{9}
} }
func (m *BatchRecoverTxResponse) XXX_Unmarshal(b []byte) error { func (m *BatchRecoverTxResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BatchRecoverTxResponse.Unmarshal(m, b) return xxx_messageInfo_BatchRecoverTxResponse.Unmarshal(m, b)
...@@ -382,6 +466,8 @@ func init() { ...@@ -382,6 +466,8 @@ func init() {
proto.RegisterType((*BatchVerifyResponse)(nil), "crypter.v1.BatchVerifyResponse") proto.RegisterType((*BatchVerifyResponse)(nil), "crypter.v1.BatchVerifyResponse")
proto.RegisterType((*BatchRecoverRequest)(nil), "crypter.v1.BatchRecoverRequest") proto.RegisterType((*BatchRecoverRequest)(nil), "crypter.v1.BatchRecoverRequest")
proto.RegisterType((*BatchRecoverResponse)(nil), "crypter.v1.BatchRecoverResponse") proto.RegisterType((*BatchRecoverResponse)(nil), "crypter.v1.BatchRecoverResponse")
proto.RegisterType((*BatchSignTxRequest)(nil), "crypter.v1.BatchSignTxRequest")
proto.RegisterType((*BatchSignTxResponse)(nil), "crypter.v1.BatchSignTxResponse")
proto.RegisterType((*BatchRecoverTxRequest)(nil), "crypter.v1.BatchRecoverTxRequest") proto.RegisterType((*BatchRecoverTxRequest)(nil), "crypter.v1.BatchRecoverTxRequest")
proto.RegisterType((*BatchRecoverTxResponse)(nil), "crypter.v1.BatchRecoverTxResponse") proto.RegisterType((*BatchRecoverTxResponse)(nil), "crypter.v1.BatchRecoverTxResponse")
} }
...@@ -389,36 +475,39 @@ func init() { ...@@ -389,36 +475,39 @@ func init() {
func init() { proto.RegisterFile("crypter/v1/request_response.proto", fileDescriptor_c54a21c4b8afb3e6) } func init() { proto.RegisterFile("crypter/v1/request_response.proto", fileDescriptor_c54a21c4b8afb3e6) }
var fileDescriptor_c54a21c4b8afb3e6 = []byte{ var fileDescriptor_c54a21c4b8afb3e6 = []byte{
// 492 bytes of a gzipped FileDescriptorProto // 533 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x93, 0xcf, 0x6a, 0xdb, 0x40, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x93, 0xcf, 0x6a, 0xdb, 0x40,
0x10, 0xc6, 0x91, 0xdc, 0x98, 0x64, 0x5c, 0x42, 0xab, 0x38, 0xc6, 0x35, 0x85, 0xba, 0x3a, 0x85, 0x10, 0xc6, 0x91, 0xd2, 0xb8, 0xce, 0x38, 0x84, 0x56, 0x71, 0x8c, 0x6b, 0x0a, 0x75, 0x75, 0x32,
0x1e, 0x24, 0x94, 0xe6, 0x94, 0xde, 0xac, 0x43, 0x4f, 0x2d, 0x46, 0x11, 0x26, 0x94, 0x80, 0x59, 0x3d, 0x48, 0x55, 0x9a, 0x53, 0x7a, 0xb3, 0x0f, 0x39, 0xb5, 0x18, 0x45, 0x98, 0x10, 0x02, 0x66,
0x49, 0x63, 0x45, 0xd8, 0xf2, 0xaa, 0xbb, 0x2b, 0x45, 0x3a, 0x14, 0xfa, 0x2c, 0x3d, 0xf6, 0x39, 0x2d, 0x8d, 0x15, 0x61, 0xcb, 0xab, 0xee, 0xae, 0x14, 0xe9, 0x50, 0xe8, 0xb3, 0xf4, 0xd8, 0xe7,
0x7a, 0xea, 0x63, 0xf4, 0xd8, 0xa7, 0x28, 0x2b, 0xad, 0xfc, 0x0f, 0x4a, 0xa1, 0x90, 0xdb, 0xcc, 0xe8, 0xa9, 0x8f, 0xd1, 0x63, 0x9f, 0xa2, 0xac, 0xb4, 0xf2, 0x3f, 0x28, 0x81, 0x40, 0x6f, 0x3b,
0x68, 0xe6, 0xfb, 0x7e, 0x3b, 0xda, 0x85, 0xd7, 0x21, 0xab, 0x32, 0x81, 0xcc, 0x2e, 0x1c, 0x9b, 0xa3, 0x6f, 0xbf, 0xef, 0xb7, 0xa3, 0x5d, 0x78, 0xeb, 0xb3, 0x22, 0x11, 0xc8, 0xec, 0xcc, 0xb1,
0xe1, 0xe7, 0x1c, 0xb9, 0x98, 0x33, 0xe4, 0x19, 0x5d, 0x73, 0xb4, 0x32, 0x46, 0x05, 0x35, 0x40, 0x19, 0x7e, 0x49, 0x91, 0x8b, 0x29, 0x43, 0x9e, 0xd0, 0x15, 0x47, 0x2b, 0x61, 0x54, 0x50, 0x03,
0xb5, 0x58, 0x85, 0x33, 0x1a, 0xc7, 0x94, 0xc6, 0x2b, 0xb4, 0xeb, 0x2f, 0x41, 0xbe, 0xb0, 0x17, 0x94, 0xc4, 0xca, 0x9c, 0x5e, 0x3f, 0xa4, 0x34, 0x5c, 0xa2, 0x5d, 0x7e, 0x99, 0xa5, 0x73, 0x7b,
0x09, 0xae, 0xa2, 0x79, 0x4a, 0xf8, 0xb2, 0xe9, 0x1e, 0xbd, 0x3a, 0xec, 0x10, 0x49, 0x8a, 0x5c, 0x1e, 0xe1, 0x32, 0x98, 0xc6, 0x84, 0x2f, 0x2a, 0x75, 0xef, 0xcd, 0xbe, 0x42, 0x44, 0x31, 0x72,
0x90, 0x34, 0x53, 0x0d, 0x46, 0x40, 0x38, 0x4a, 0xbb, 0x14, 0x05, 0x51, 0xb5, 0x17, 0x7b, 0x14, 0x41, 0xe2, 0x44, 0x09, 0x8c, 0x19, 0xe1, 0x28, 0xe3, 0x62, 0x14, 0x44, 0xf5, 0x5e, 0xed, 0x50,
0x9c, 0xe6, 0x2c, 0x54, 0xee, 0x26, 0x83, 0x67, 0x13, 0x22, 0xc2, 0xfb, 0x9b, 0x24, 0x5e, 0x7b, 0x70, 0x9a, 0x32, 0x5f, 0xa5, 0x9b, 0x0c, 0x5e, 0x0c, 0x89, 0xf0, 0xef, 0xaf, 0xa3, 0x70, 0xe5,
0x0d, 0xa0, 0xd1, 0x87, 0xa3, 0x8c, 0x25, 0xc5, 0x72, 0xa8, 0x8d, 0x3b, 0x17, 0x4f, 0xbd, 0x26, 0x56, 0x80, 0x46, 0x1b, 0x0e, 0x13, 0x16, 0x65, 0x8b, 0xae, 0xd6, 0x3f, 0x18, 0x1c, 0xbb, 0x55,
0x31, 0x0c, 0x78, 0x12, 0x11, 0x41, 0x86, 0x7a, 0x5d, 0xac, 0x63, 0xe3, 0x0a, 0x1a, 0xfa, 0xb9, 0x61, 0x18, 0xf0, 0x2c, 0x20, 0x82, 0x74, 0xf5, 0xb2, 0x59, 0xae, 0x8d, 0x0b, 0xa8, 0xe8, 0xa7,
0xa8, 0x32, 0x1c, 0x76, 0xc6, 0xda, 0xc5, 0xe9, 0xe5, 0xb9, 0xb5, 0x3d, 0x90, 0xe5, 0xca, 0xd0, 0xa2, 0x48, 0xb0, 0x7b, 0xd0, 0xd7, 0x06, 0x27, 0xe7, 0x67, 0xd6, 0xe6, 0x40, 0xd6, 0x48, 0x2e,
0xaf, 0x32, 0xf4, 0x4e, 0xc2, 0x36, 0x34, 0x1d, 0x78, 0xbe, 0xe3, 0xd9, 0x2c, 0xc3, 0x78, 0x09, 0xbd, 0x22, 0x41, 0xf7, 0xc8, 0xaf, 0x97, 0xa6, 0x03, 0x2f, 0xb7, 0x32, 0xab, 0x61, 0x18, 0xaf,
0x27, 0x3c, 0x89, 0xd7, 0x44, 0xe4, 0x0c, 0x95, 0xf1, 0xb6, 0x60, 0x7e, 0xd5, 0xc0, 0xa8, 0x67, 0xe1, 0x88, 0x47, 0xe1, 0x8a, 0x88, 0x94, 0xa1, 0x0a, 0xde, 0x34, 0xcc, 0x6f, 0x1a, 0x18, 0xe5,
0x66, 0xc8, 0x92, 0x45, 0xd5, 0x92, 0x0e, 0xa0, 0x9b, 0xe5, 0xc1, 0x12, 0x2b, 0x35, 0xa1, 0xb2, 0x9e, 0x09, 0xb2, 0x68, 0x5e, 0xd4, 0xa4, 0x1d, 0x68, 0x24, 0xe9, 0x6c, 0x81, 0x85, 0xda, 0xa1,
0x7d, 0x31, 0xfd, 0x40, 0xec, 0xbf, 0xa9, 0xcf, 0xf6, 0x08, 0x14, 0xf7, 0x08, 0x8e, 0x0b, 0x59, 0xaa, 0x5d, 0x33, 0x7d, 0xcf, 0xec, 0xc9, 0xd4, 0xa7, 0x3b, 0x04, 0x8a, 0xbb, 0x07, 0xcd, 0x4c,
0x49, 0x30, 0xaa, 0x21, 0x8e, 0xbd, 0x4d, 0x6e, 0x7e, 0x51, 0x23, 0x1e, 0x86, 0xb4, 0x40, 0xd6, 0x76, 0x22, 0x0c, 0x4a, 0x88, 0xa6, 0xbb, 0xae, 0xcd, 0xaf, 0x6a, 0x8b, 0x8b, 0x3e, 0xcd, 0x90,
0x52, 0xb7, 0x9b, 0xd4, 0x76, 0x36, 0xf9, 0x18, 0xc4, 0x16, 0xf4, 0xf7, 0xed, 0x15, 0xf2, 0x5f, 0xd5, 0xd4, 0xf5, 0x24, 0xb5, 0xad, 0x49, 0xfe, 0x0f, 0x62, 0x0b, 0xda, 0xbb, 0xf1, 0x0a, 0xf9,
0xb6, 0x66, 0xba, 0x70, 0xbe, 0xdb, 0xef, 0x97, 0x2d, 0xf0, 0x1b, 0xe8, 0x32, 0xf2, 0x30, 0x17, 0x1f, 0x53, 0x33, 0x6f, 0xd5, 0x8c, 0xe5, 0x7f, 0xf1, 0xf2, 0x9a, 0xf6, 0x1d, 0x34, 0x18, 0x79,
0x65, 0x3d, 0xd0, 0xbb, 0x3c, 0xb3, 0xe4, 0x25, 0x93, 0xbe, 0x1f, 0x50, 0x10, 0xbf, 0x9c, 0x10, 0x98, 0x8a, 0xbc, 0x54, 0xb7, 0xce, 0x4f, 0x2d, 0x79, 0xc3, 0x64, 0xe8, 0x27, 0x14, 0xc4, 0xcb,
0x8e, 0xde, 0x11, 0x23, 0x0f, 0x7e, 0x69, 0x7e, 0x84, 0xc1, 0xa1, 0x88, 0xb2, 0xbd, 0x82, 0x1e, 0x87, 0x84, 0xa3, 0x7b, 0xc8, 0xc8, 0x83, 0x97, 0x1b, 0x5d, 0x78, 0x2e, 0x2f, 0x0b, 0x11, 0xf2,
0x6b, 0x8a, 0xd1, 0x3f, 0xa4, 0xa0, 0xed, 0xf3, 0xcb, 0xc9, 0x0f, 0x0d, 0x4e, 0x43, 0x9a, 0xee, 0x0c, 0xda, 0xe0, 0xd8, 0xad, 0x4b, 0xf3, 0x4a, 0x8d, 0xa2, 0xf6, 0x56, 0x28, 0xef, 0xab, 0x63,
0x1c, 0x76, 0xd2, 0x57, 0x5c, 0xad, 0xf2, 0x54, 0xde, 0xe4, 0xa9, 0xf6, 0xe9, 0x26, 0x4e, 0xc4, 0x63, 0xf0, 0x88, 0x7f, 0xb3, 0x52, 0x79, 0xb9, 0x39, 0x82, 0xb3, 0xed, 0x43, 0x3d, 0x89, 0xd3,
0x7d, 0x1e, 0x58, 0x21, 0x4d, 0x6d, 0x97, 0x44, 0x79, 0x88, 0x39, 0x97, 0xaa, 0x05, 0x32, 0xd5, 0xfc, 0x0c, 0x9d, 0x7d, 0x13, 0x05, 0x74, 0x01, 0x2d, 0x56, 0x35, 0x1f, 0x43, 0x82, 0x5a, 0xe7,
0x14, 0xd2, 0x95, 0x2d, 0x2b, 0x9b, 0x24, 0xc6, 0x75, 0xf3, 0x94, 0xec, 0x98, 0xda, 0xdb, 0x57, 0xe5, 0xc3, 0x9f, 0x1a, 0x9c, 0xf8, 0x34, 0xde, 0xfa, 0x23, 0xc3, 0xb6, 0xe2, 0xaa, 0x9d, 0xc7,
0xf2, 0x4e, 0x85, 0x85, 0xf3, 0x4d, 0xef, 0xb8, 0xb7, 0xb7, 0xdf, 0x75, 0x70, 0x95, 0xff, 0xcc, 0xf2, 0xb9, 0x8d, 0xb5, 0xdb, 0xeb, 0x30, 0x12, 0xf7, 0xe9, 0xcc, 0xf2, 0x69, 0x6c, 0x8f, 0x48,
0xf9, 0xb9, 0x49, 0xee, 0x66, 0xce, 0x2f, 0x7d, 0xb0, 0x4d, 0xee, 0xde, 0x4f, 0x27, 0x52, 0x5e, 0x90, 0xfa, 0x98, 0x72, 0xe9, 0x9a, 0x21, 0x53, 0x22, 0x9f, 0x2e, 0x6d, 0xd9, 0x59, 0x17, 0x21,
0xfe, 0xd1, 0xdf, 0x7a, 0x4f, 0x7d, 0xb8, 0xbe, 0x9e, 0x39, 0x41, 0xb7, 0x76, 0x79, 0xfb, 0x27, 0xae, 0xaa, 0xf7, 0x6e, 0x87, 0xd4, 0xde, 0x3c, 0xe5, 0x8f, 0x6a, 0x99, 0x39, 0xdf, 0xf5, 0x83,
0x00, 0x00, 0xff, 0xff, 0xae, 0xa0, 0xe3, 0xb0, 0x11, 0x04, 0x00, 0x00, 0xd1, 0xcd, 0xcd, 0x0f, 0x1d, 0x46, 0x2a, 0x7f, 0xe2, 0xfc, 0x5a, 0x17, 0x77, 0x13, 0xe7, 0xb7,
0xde, 0xd9, 0x14, 0x77, 0x57, 0xe3, 0xa1, 0xb4, 0x97, 0xd7, 0xee, 0x8f, 0xde, 0x52, 0x1f, 0x2e,
0x2f, 0x27, 0xce, 0xac, 0x51, 0xa6, 0x7c, 0xf8, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x6e, 0x4a,
0x99, 0xb6, 0x04, 0x00, 0x00,
} }
...@@ -23,25 +23,26 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package ...@@ -23,25 +23,26 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() { proto.RegisterFile("crypter/v1/service.proto", fileDescriptor_05ac8b6606ffe814) } func init() { proto.RegisterFile("crypter/v1/service.proto", fileDescriptor_05ac8b6606ffe814) }
var fileDescriptor_05ac8b6606ffe814 = []byte{ var fileDescriptor_05ac8b6606ffe814 = []byte{
// 317 bytes of a gzipped FileDescriptorProto // 331 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x4f, 0x4a, 0xc3, 0x40, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x4f, 0x4a, 0xc3, 0x40,
0x14, 0xc6, 0x6d, 0x04, 0xc1, 0x69, 0xe9, 0x62, 0x16, 0x22, 0xc5, 0x7f, 0xed, 0x01, 0x66, 0x18, 0x14, 0x87, 0x6d, 0x0a, 0x82, 0xd3, 0xd2, 0xc5, 0x2c, 0x44, 0x8a, 0xff, 0xda, 0x03, 0x64, 0x18,
0xdd, 0xd5, 0x5d, 0xba, 0x10, 0x04, 0x21, 0x34, 0x25, 0x54, 0x29, 0x48, 0x3a, 0x7d, 0xa6, 0x01, 0xdd, 0xd5, 0x5d, 0xba, 0x10, 0x04, 0x21, 0x34, 0x25, 0x54, 0x29, 0x48, 0x3a, 0x7d, 0xa6, 0x01,
0xdb, 0xa9, 0x33, 0x93, 0xa1, 0xbd, 0x8e, 0x4b, 0xcf, 0xe0, 0x09, 0x3c, 0x84, 0x0b, 0x97, 0x9e, 0xdb, 0xa9, 0x33, 0x93, 0xa1, 0xbd, 0x8e, 0x4b, 0x57, 0x1e, 0xc0, 0x13, 0x78, 0x0c, 0x97, 0x9e,
0x42, 0x9a, 0x99, 0xa4, 0x81, 0x12, 0x77, 0x79, 0xef, 0xfb, 0xcd, 0xef, 0x41, 0x3e, 0x74, 0xca, 0x42, 0x92, 0x99, 0x24, 0x85, 0x1a, 0x77, 0x79, 0xef, 0xfb, 0xe5, 0x7b, 0x0f, 0xe6, 0xa1, 0x13,
0xe5, 0x66, 0xa5, 0x41, 0x52, 0xc3, 0xa8, 0x02, 0x69, 0x52, 0x0e, 0x64, 0x25, 0x85, 0x16, 0x18, 0x26, 0xb6, 0x6b, 0x05, 0x82, 0x68, 0x4a, 0x24, 0x08, 0x9d, 0x30, 0x70, 0xd7, 0x82, 0x2b, 0x8e,
0xb9, 0x84, 0x18, 0xd6, 0xe9, 0x56, 0x28, 0x09, 0x6f, 0x19, 0x28, 0xfd, 0x2c, 0x41, 0xad, 0xc4, 0x91, 0x25, 0xae, 0xa6, 0xdd, 0xde, 0x4e, 0x4a, 0xc0, 0x6b, 0x0a, 0x52, 0x3d, 0x09, 0x90, 0x6b,
0x52, 0x39, 0xfc, 0xfa, 0xdb, 0x43, 0xed, 0x81, 0xa5, 0x42, 0xeb, 0xc1, 0xf7, 0xe8, 0xd8, 0x8f, 0xbe, 0x92, 0x36, 0x7e, 0xf5, 0xd1, 0x44, 0x9d, 0xa1, 0x49, 0x05, 0xc6, 0x83, 0xef, 0xd0, 0x91,
0x35, 0x9f, 0x87, 0x69, 0xb2, 0xc4, 0x67, 0x64, 0xe7, 0x23, 0xe5, 0x7a, 0x68, 0x65, 0x9d, 0xf3, 0x17, 0x29, 0xb6, 0x08, 0x92, 0x78, 0x85, 0x4f, 0xdd, 0xca, 0xe7, 0x96, 0xed, 0x91, 0x91, 0x75,
0x9a, 0xd4, 0x9e, 0xe8, 0x1d, 0xe0, 0x00, 0x35, 0xf3, 0x75, 0x04, 0x32, 0x7d, 0xd9, 0xe0, 0x8b, 0xcf, 0x6a, 0xa8, 0x19, 0xd1, 0x3f, 0xc0, 0x3e, 0x6a, 0xe5, 0xed, 0x10, 0x44, 0xf2, 0xbc, 0xc5,
0x3d, 0xde, 0x06, 0x85, 0xef, 0xb2, 0x36, 0x2f, 0x8d, 0x21, 0x6a, 0xe5, 0xc1, 0x10, 0xb8, 0x30, 0xe7, 0x7b, 0x79, 0x03, 0x0a, 0xdf, 0x45, 0x2d, 0x2f, 0x8d, 0x01, 0x6a, 0xe7, 0x60, 0x04, 0x8c,
0x20, 0xf1, 0xfe, 0x13, 0x97, 0x14, 0xce, 0xab, 0x7a, 0xa0, 0x94, 0x3e, 0xa2, 0x76, 0x35, 0x19, 0x6b, 0x10, 0x78, 0xff, 0x17, 0x4b, 0x0a, 0xe7, 0x65, 0x7d, 0x60, 0x6f, 0xcd, 0x6c, 0xfb, 0xf1,
0xad, 0x71, 0xb7, 0xee, 0xd5, 0x68, 0x5d, 0x88, 0x7b, 0xff, 0x21, 0x85, 0xda, 0xff, 0x6c, 0xa0, 0xe6, 0x8f, 0x35, 0x0d, 0xa8, 0x5f, 0xb3, 0xe0, 0xa5, 0xf1, 0x01, 0x75, 0x76, 0x67, 0x8d, 0x37,
0x36, 0x17, 0x8b, 0x0a, 0xeb, 0xb7, 0xdc, 0x9f, 0x0e, 0xb6, 0x0d, 0x04, 0x8d, 0xa7, 0x30, 0x49, 0xb8, 0x57, 0xb7, 0x47, 0xe5, 0xed, 0xff, 0x17, 0x29, 0xd4, 0xde, 0x67, 0x03, 0x75, 0x18, 0x5f,
0xf5, 0x3c, 0x9b, 0x12, 0x2e, 0x16, 0x74, 0x10, 0xcf, 0x32, 0x0e, 0x99, 0x7a, 0x00, 0x1d, 0x1b, 0xee, 0x64, 0xbd, 0xb6, 0x7d, 0x3b, 0x3f, 0x7b, 0x53, 0xbf, 0xf1, 0x18, 0xc4, 0x89, 0x5a, 0xa4,
0x90, 0xca, 0x42, 0x5c, 0xbc, 0xd2, 0xed, 0xa6, 0x1c, 0x12, 0x58, 0xd2, 0xbc, 0x40, 0x9a, 0x08, 0x33, 0x97, 0xf1, 0x25, 0x19, 0x46, 0xf3, 0x94, 0x41, 0x2a, 0xef, 0x41, 0x45, 0x1a, 0x84, 0x34,
0xba, 0x6b, 0xf9, 0xd6, 0x7d, 0x1a, 0xf6, 0xee, 0x1d, 0x0e, 0xc6, 0xe3, 0x0f, 0x0f, 0xb9, 0x72, 0x21, 0xc6, 0x5f, 0x48, 0xd6, 0x29, 0x8b, 0x18, 0x56, 0x24, 0x3f, 0x09, 0x12, 0x73, 0x52, 0xdd,
0x49, 0xc4, 0xbe, 0xca, 0x61, 0x12, 0xb1, 0x1f, 0xef, 0x64, 0x37, 0x4c, 0xee, 0x02, 0x7f, 0xab, 0xcd, 0x8d, 0xfd, 0xd4, 0xf4, 0xcd, 0x69, 0x0e, 0x27, 0x93, 0x77, 0x07, 0xd9, 0x73, 0x71, 0x43,
0x9f, 0xc5, 0x3a, 0xfe, 0xf5, 0x9a, 0x2e, 0xe8, 0xf7, 0x23, 0x36, 0x3d, 0xca, 0xaf, 0xdc, 0xfc, 0xfa, 0x55, 0x16, 0xd3, 0x90, 0x7e, 0x3b, 0xc7, 0x55, 0x31, 0xbd, 0xf5, 0xbd, 0x4c, 0x3f, 0x8f,
0x05, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x94, 0xc4, 0x24, 0x71, 0x02, 0x00, 0x00, 0x54, 0xf4, 0xe3, 0xb4, 0x2c, 0x18, 0x0c, 0x42, 0x3a, 0x3b, 0xcc, 0xa7, 0x5c, 0xff, 0x06, 0x00,
0x00, 0xff, 0xff, 0x0a, 0xf6, 0xf3, 0x8c, 0xc3, 0x02, 0x00, 0x00,
} }
...@@ -25,6 +25,7 @@ type CrypterServiceClient interface { ...@@ -25,6 +25,7 @@ type CrypterServiceClient interface {
BatchSign(ctx context.Context, in *BatchSignRequest, opts ...grpc.CallOption) (*BatchSignResponse, error) BatchSign(ctx context.Context, in *BatchSignRequest, opts ...grpc.CallOption) (*BatchSignResponse, error)
BatchVerify(ctx context.Context, in *BatchVerifyRequest, opts ...grpc.CallOption) (*BatchVerifyResponse, error) BatchVerify(ctx context.Context, in *BatchVerifyRequest, opts ...grpc.CallOption) (*BatchVerifyResponse, error)
BatchRecover(ctx context.Context, in *BatchRecoverRequest, opts ...grpc.CallOption) (*BatchRecoverResponse, error) BatchRecover(ctx context.Context, in *BatchRecoverRequest, opts ...grpc.CallOption) (*BatchRecoverResponse, error)
BatchSignTx(ctx context.Context, in *BatchSignTxRequest, opts ...grpc.CallOption) (*BatchSignTxResponse, error)
BatchRecoverTx(ctx context.Context, in *BatchRecoverTxRequest, opts ...grpc.CallOption) (*BatchRecoverTxResponse, error) BatchRecoverTx(ctx context.Context, in *BatchRecoverTxRequest, opts ...grpc.CallOption) (*BatchRecoverTxResponse, error)
} }
...@@ -63,6 +64,15 @@ func (c *crypterServiceClient) BatchRecover(ctx context.Context, in *BatchRecove ...@@ -63,6 +64,15 @@ func (c *crypterServiceClient) BatchRecover(ctx context.Context, in *BatchRecove
return out, nil return out, nil
} }
func (c *crypterServiceClient) BatchSignTx(ctx context.Context, in *BatchSignTxRequest, opts ...grpc.CallOption) (*BatchSignTxResponse, error) {
out := new(BatchSignTxResponse)
err := c.cc.Invoke(ctx, "/crypter.v1.CrypterService/BatchSignTx", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *crypterServiceClient) BatchRecoverTx(ctx context.Context, in *BatchRecoverTxRequest, opts ...grpc.CallOption) (*BatchRecoverTxResponse, error) { func (c *crypterServiceClient) BatchRecoverTx(ctx context.Context, in *BatchRecoverTxRequest, opts ...grpc.CallOption) (*BatchRecoverTxResponse, error) {
out := new(BatchRecoverTxResponse) out := new(BatchRecoverTxResponse)
err := c.cc.Invoke(ctx, "/crypter.v1.CrypterService/BatchRecoverTx", in, out, opts...) err := c.cc.Invoke(ctx, "/crypter.v1.CrypterService/BatchRecoverTx", in, out, opts...)
...@@ -79,6 +89,7 @@ type CrypterServiceServer interface { ...@@ -79,6 +89,7 @@ type CrypterServiceServer interface {
BatchSign(context.Context, *BatchSignRequest) (*BatchSignResponse, error) BatchSign(context.Context, *BatchSignRequest) (*BatchSignResponse, error)
BatchVerify(context.Context, *BatchVerifyRequest) (*BatchVerifyResponse, error) BatchVerify(context.Context, *BatchVerifyRequest) (*BatchVerifyResponse, error)
BatchRecover(context.Context, *BatchRecoverRequest) (*BatchRecoverResponse, error) BatchRecover(context.Context, *BatchRecoverRequest) (*BatchRecoverResponse, error)
BatchSignTx(context.Context, *BatchSignTxRequest) (*BatchSignTxResponse, error)
BatchRecoverTx(context.Context, *BatchRecoverTxRequest) (*BatchRecoverTxResponse, error) BatchRecoverTx(context.Context, *BatchRecoverTxRequest) (*BatchRecoverTxResponse, error)
mustEmbedUnimplementedCrypterServiceServer() mustEmbedUnimplementedCrypterServiceServer()
} }
...@@ -96,6 +107,9 @@ func (UnimplementedCrypterServiceServer) BatchVerify(context.Context, *BatchVeri ...@@ -96,6 +107,9 @@ func (UnimplementedCrypterServiceServer) BatchVerify(context.Context, *BatchVeri
func (UnimplementedCrypterServiceServer) BatchRecover(context.Context, *BatchRecoverRequest) (*BatchRecoverResponse, error) { func (UnimplementedCrypterServiceServer) BatchRecover(context.Context, *BatchRecoverRequest) (*BatchRecoverResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchRecover not implemented") return nil, status.Errorf(codes.Unimplemented, "method BatchRecover not implemented")
} }
func (UnimplementedCrypterServiceServer) BatchSignTx(context.Context, *BatchSignTxRequest) (*BatchSignTxResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchSignTx not implemented")
}
func (UnimplementedCrypterServiceServer) BatchRecoverTx(context.Context, *BatchRecoverTxRequest) (*BatchRecoverTxResponse, error) { func (UnimplementedCrypterServiceServer) BatchRecoverTx(context.Context, *BatchRecoverTxRequest) (*BatchRecoverTxResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchRecoverTx not implemented") return nil, status.Errorf(codes.Unimplemented, "method BatchRecoverTx not implemented")
} }
...@@ -166,6 +180,24 @@ func _CrypterService_BatchRecover_Handler(srv interface{}, ctx context.Context, ...@@ -166,6 +180,24 @@ func _CrypterService_BatchRecover_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _CrypterService_BatchSignTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(BatchSignTxRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(CrypterServiceServer).BatchSignTx(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/crypter.v1.CrypterService/BatchSignTx",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(CrypterServiceServer).BatchSignTx(ctx, req.(*BatchSignTxRequest))
}
return interceptor(ctx, in, info, handler)
}
func _CrypterService_BatchRecoverTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _CrypterService_BatchRecoverTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(BatchRecoverTxRequest) in := new(BatchRecoverTxRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
...@@ -203,6 +235,10 @@ var CrypterService_ServiceDesc = grpc.ServiceDesc{ ...@@ -203,6 +235,10 @@ var CrypterService_ServiceDesc = grpc.ServiceDesc{
MethodName: "BatchRecover", MethodName: "BatchRecover",
Handler: _CrypterService_BatchRecover_Handler, Handler: _CrypterService_BatchRecover_Handler,
}, },
{
MethodName: "BatchSignTx",
Handler: _CrypterService_BatchSignTx_Handler,
},
{ {
MethodName: "BatchRecoverTx", MethodName: "BatchRecoverTx",
Handler: _CrypterService_BatchRecoverTx_Handler, Handler: _CrypterService_BatchRecoverTx_Handler,
......
...@@ -1035,12 +1035,12 @@ func (m *NonceResponse) GetNonce() uint64 { ...@@ -1035,12 +1035,12 @@ func (m *NonceResponse) GetNonce() uint64 {
type RepeatedNonceRequest struct { type RepeatedNonceRequest struct {
// request address // request address
Address []github_com_CaduceusMetaverseProtocol_MetaTypes_types.Address `protobuf:"bytes,1,rep,name=address,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address" json:"address,omitempty"` Address [][]byte `protobuf:"bytes,1,rep,name=address,proto3" json:"address,omitempty"`
// request block number // request block number
BlockId []github_com_CaduceusMetaverseProtocol_MetaTypes_types.BigInt `protobuf:"bytes,2,rep,name=block_id,json=blockId,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt" json:"block_id,omitempty"` BlockId [][]byte `protobuf:"bytes,2,rep,name=block_id,json=blockId,proto3" json:"block_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
} }
func (m *RepeatedNonceRequest) Reset() { *m = RepeatedNonceRequest{} } func (m *RepeatedNonceRequest) Reset() { *m = RepeatedNonceRequest{} }
...@@ -1067,11 +1067,25 @@ func (m *RepeatedNonceRequest) XXX_DiscardUnknown() { ...@@ -1067,11 +1067,25 @@ func (m *RepeatedNonceRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_RepeatedNonceRequest proto.InternalMessageInfo var xxx_messageInfo_RepeatedNonceRequest proto.InternalMessageInfo
func (m *RepeatedNonceRequest) GetAddress() [][]byte {
if m != nil {
return m.Address
}
return nil
}
func (m *RepeatedNonceRequest) GetBlockId() [][]byte {
if m != nil {
return m.BlockId
}
return nil
}
type RepeatedNonceResponse struct { type RepeatedNonceResponse struct {
// request address // the address
Address []github_com_CaduceusMetaverseProtocol_MetaTypes_types.Address `protobuf:"bytes,1,rep,name=address,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address" json:"address,omitempty"` Address [][]byte `protobuf:"bytes,1,rep,name=address,proto3" json:"address,omitempty"`
// request block number // block height
BlockId []github_com_CaduceusMetaverseProtocol_MetaTypes_types.BigInt `protobuf:"bytes,2,rep,name=block_id,json=blockId,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt" json:"block_id,omitempty"` BlockId [][]byte `protobuf:"bytes,2,rep,name=block_id,json=blockId,proto3" json:"block_id,omitempty"`
// nonce // nonce
Nonce []uint64 `protobuf:"varint,3,rep,packed,name=nonce,proto3" json:"nonce,omitempty"` Nonce []uint64 `protobuf:"varint,3,rep,packed,name=nonce,proto3" json:"nonce,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
...@@ -1103,6 +1117,20 @@ func (m *RepeatedNonceResponse) XXX_DiscardUnknown() { ...@@ -1103,6 +1117,20 @@ func (m *RepeatedNonceResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_RepeatedNonceResponse proto.InternalMessageInfo var xxx_messageInfo_RepeatedNonceResponse proto.InternalMessageInfo
func (m *RepeatedNonceResponse) GetAddress() [][]byte {
if m != nil {
return m.Address
}
return nil
}
func (m *RepeatedNonceResponse) GetBlockId() [][]byte {
if m != nil {
return m.BlockId
}
return nil
}
func (m *RepeatedNonceResponse) GetNonce() []uint64 { func (m *RepeatedNonceResponse) GetNonce() []uint64 {
if m != nil { if m != nil {
return m.Nonce return m.Nonce
...@@ -3566,119 +3594,118 @@ func init() { ...@@ -3566,119 +3594,118 @@ func init() {
func init() { proto.RegisterFile("nebula/v1/account_req_res.proto", fileDescriptor_19f8068ca46d164c) } func init() { proto.RegisterFile("nebula/v1/account_req_res.proto", fileDescriptor_19f8068ca46d164c) }
var fileDescriptor_19f8068ca46d164c = []byte{ var fileDescriptor_19f8068ca46d164c = []byte{
// 1809 bytes of a gzipped FileDescriptorProto // 1807 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xdd, 0x6f, 0x1b, 0x59, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xdd, 0x6f, 0x1b, 0x59,
0x15, 0xd7, 0xd8, 0x69, 0x3e, 0x4e, 0x9c, 0x8f, 0x4e, 0x12, 0xdb, 0x9b, 0x05, 0xa5, 0xbd, 0x0b, 0x15, 0xd7, 0x38, 0x69, 0x3e, 0x4e, 0x9c, 0x8f, 0x4e, 0x12, 0xdb, 0xcd, 0x82, 0xd2, 0xce, 0x42,
0x25, 0x62, 0x4b, 0x5c, 0x37, 0xea, 0x4a, 0xec, 0x2e, 0x2a, 0x75, 0xd8, 0xed, 0x56, 0xca, 0x9a, 0x89, 0xd8, 0x12, 0xd7, 0x8d, 0xba, 0x12, 0xbb, 0x8b, 0x4a, 0x6d, 0x76, 0xbb, 0x15, 0x59, 0x93,
0xec, 0x24, 0x5b, 0xad, 0x60, 0x91, 0xb9, 0xf6, 0xdc, 0x8c, 0x87, 0x8e, 0xe7, 0xba, 0x73, 0xaf, 0x9d, 0x64, 0xab, 0x15, 0x2c, 0x32, 0xd7, 0x33, 0x37, 0xe3, 0xa1, 0xe3, 0xb9, 0xee, 0xdc, 0xeb,
0x53, 0x97, 0xa7, 0x16, 0x10, 0x5a, 0x89, 0x07, 0xb4, 0xe2, 0x19, 0x21, 0x21, 0x84, 0xd0, 0x8a, 0xd4, 0xe5, 0xa9, 0x05, 0x84, 0x90, 0x78, 0x40, 0x2b, 0x9e, 0x11, 0x12, 0x42, 0x08, 0xad, 0x78,
0x47, 0x24, 0x1e, 0xf8, 0x0b, 0xe0, 0x1d, 0x09, 0xf5, 0xa1, 0x0f, 0xbc, 0x51, 0x9e, 0x90, 0xf8, 0x44, 0xe2, 0x81, 0xbf, 0x00, 0xde, 0x91, 0x50, 0x1f, 0xfa, 0xc0, 0x1b, 0xcb, 0x2b, 0x7f, 0x00,
0x03, 0xd0, 0xfd, 0x9a, 0x19, 0x7f, 0xe4, 0x83, 0x48, 0xb6, 0xab, 0xe6, 0x25, 0x9a, 0x7b, 0x7c, 0xba, 0x5f, 0xf3, 0x61, 0x3b, 0x1f, 0x1b, 0xc9, 0x76, 0xd5, 0xbc, 0x44, 0x73, 0xcf, 0x9c, 0xf3,
0xce, 0xef, 0xfc, 0xce, 0x47, 0xee, 0x3d, 0xd7, 0x1e, 0xd8, 0x08, 0x49, 0xbd, 0x13, 0xe0, 0xd2, 0x3b, 0xbf, 0xf3, 0x91, 0x3b, 0xe7, 0x8e, 0x07, 0x36, 0x43, 0xdc, 0xec, 0x06, 0xa8, 0x7c, 0x54,
0x51, 0xb9, 0x84, 0x1b, 0x0d, 0xda, 0x09, 0x79, 0x2d, 0x22, 0x0f, 0x6b, 0x11, 0x61, 0x5b, 0xed, 0x29, 0x23, 0xc7, 0x21, 0xdd, 0x90, 0x35, 0x22, 0xfc, 0xa8, 0x11, 0x61, 0xba, 0xdd, 0x89, 0x08,
0x88, 0x72, 0x6a, 0xcf, 0x29, 0x85, 0xad, 0xa3, 0xf2, 0xfa, 0x15, 0x8f, 0x52, 0x2f, 0x20, 0x25, 0x23, 0xe6, 0xbc, 0x54, 0xd8, 0x3e, 0xaa, 0x6c, 0x5c, 0xf5, 0x08, 0xf1, 0x02, 0x5c, 0x16, 0x37,
0xf9, 0x41, 0xbd, 0x73, 0x58, 0x3a, 0xf4, 0x49, 0xe0, 0xd6, 0x5a, 0x98, 0x3d, 0x50, 0xca, 0xeb, 0x9a, 0xdd, 0xc3, 0xf2, 0xa1, 0x8f, 0x03, 0xb7, 0xd1, 0x46, 0xf4, 0xa1, 0x54, 0xde, 0xd8, 0xec,
0x1b, 0xfd, 0x1a, 0xdc, 0x6f, 0x11, 0xc6, 0x71, 0xab, 0xad, 0x15, 0xf2, 0x75, 0xcc, 0x88, 0x70, 0xd7, 0x60, 0x7e, 0x1b, 0x53, 0x86, 0xda, 0x1d, 0xa5, 0x50, 0x68, 0x22, 0x8a, 0xb9, 0xb3, 0x08,
0x16, 0x11, 0x46, 0x3b, 0x51, 0x83, 0x68, 0xb9, 0x6d, 0xe4, 0x2d, 0xc2, 0xb1, 0x96, 0x2d, 0x49, 0x53, 0xd2, 0x8d, 0x1c, 0xac, 0xe4, 0xa6, 0x96, 0xb7, 0x31, 0x43, 0x4a, 0xb6, 0x2c, 0x64, 0x1e,
0x99, 0x47, 0x3d, 0xaa, 0x05, 0xc5, 0x84, 0x6b, 0xaf, 0x39, 0x5a, 0x05, 0xbb, 0x4a, 0x5d, 0x72, 0xf1, 0x88, 0x12, 0x94, 0x12, 0xae, 0x59, 0x73, 0x6b, 0x0d, 0xcc, 0x3a, 0x71, 0xf1, 0x03, 0x1c,
0x9f, 0x44, 0xcc, 0xa7, 0xa1, 0x43, 0x1e, 0x76, 0x08, 0xe3, 0xa8, 0x04, 0x2b, 0x3d, 0x52, 0xd6, 0x51, 0x9f, 0x84, 0x36, 0x7e, 0xd4, 0xc5, 0x94, 0x59, 0x65, 0x58, 0xcd, 0x48, 0x69, 0x87, 0x84,
0xa6, 0x21, 0x23, 0x76, 0x11, 0x66, 0x8e, 0x94, 0xa8, 0x68, 0x5d, 0xb1, 0x36, 0xe7, 0x1c, 0xb3, 0x14, 0x9b, 0x25, 0x98, 0x3d, 0x92, 0xa2, 0x92, 0x71, 0xd5, 0xd8, 0x9a, 0xb7, 0xf5, 0xd2, 0xba,
0x44, 0x57, 0x61, 0x7e, 0xbf, 0x89, 0xb7, 0xb5, 0xbd, 0x6d, 0xc3, 0x94, 0x8b, 0x39, 0x96, 0x5a, 0x06, 0x0b, 0xfb, 0x2d, 0xb4, 0xa3, 0xec, 0x4d, 0x13, 0xa6, 0x5d, 0xc4, 0x90, 0xd0, 0xca, 0xdb,
0x39, 0x47, 0x3e, 0xa3, 0x36, 0xe4, 0x94, 0x8a, 0x06, 0xfb, 0x21, 0x4c, 0x35, 0x31, 0x6b, 0x4a, 0xe2, 0xda, 0xea, 0x40, 0x5e, 0xaa, 0x28, 0xb0, 0x1f, 0xc1, 0x74, 0x0b, 0xd1, 0x96, 0xd0, 0x59,
0x9d, 0xf9, 0x9b, 0x0b, 0x5b, 0x82, 0xf3, 0xd6, 0x51, 0x79, 0xeb, 0x03, 0xcc, 0x9a, 0x95, 0x6f, 0xb8, 0xb5, 0xb8, 0xcd, 0x39, 0x6f, 0x1f, 0x55, 0xb6, 0xdf, 0x47, 0xb4, 0x55, 0xfd, 0xd6, 0xf3,
0x3d, 0x7b, 0xbe, 0xf1, 0x4d, 0xcf, 0xe7, 0xcd, 0x4e, 0x7d, 0xab, 0x41, 0x5b, 0xa5, 0x1d, 0xec, 0x17, 0x9b, 0xdf, 0xf4, 0x7c, 0xd6, 0xea, 0x36, 0xb7, 0x1d, 0xd2, 0x2e, 0xd7, 0x90, 0xdb, 0x75,
0x76, 0x1a, 0xa4, 0xc3, 0x3e, 0x24, 0x1c, 0x0b, 0x9f, 0x64, 0x4f, 0xb0, 0x6f, 0xd0, 0xa0, 0x24, 0x70, 0x97, 0x7e, 0x80, 0x19, 0xe2, 0x3e, 0xf1, 0x1e, 0x67, 0xef, 0x90, 0xa0, 0xcc, 0x25, 0x07,
0x24, 0x07, 0x8f, 0xdb, 0x84, 0x95, 0xb8, 0xf8, 0x2b, 0xcd, 0x1d, 0x89, 0x8c, 0x56, 0xe0, 0x72, 0x4f, 0x3a, 0x98, 0x96, 0x19, 0xff, 0x2b, 0xcc, 0x6d, 0x81, 0x6c, 0xad, 0xc2, 0xe5, 0x3a, 0x66,
0x95, 0xf0, 0xbe, 0xd0, 0xb6, 0xc0, 0x4e, 0x0b, 0x4f, 0x8d, 0x6c, 0x0d, 0x56, 0xaa, 0x84, 0xef, 0x7d, 0xa1, 0x6d, 0x83, 0x99, 0x16, 0x9e, 0x1a, 0xd9, 0x3a, 0xac, 0xd6, 0x31, 0xdb, 0xc3, 0x38,
0x11, 0x12, 0xed, 0x88, 0x1a, 0x1b, 0x98, 0x5b, 0xb0, 0xda, 0x2b, 0xd6, 0x40, 0x5f, 0x06, 0x68, 0xaa, 0xf1, 0x1a, 0x6b, 0x98, 0xdb, 0xb0, 0x96, 0x15, 0x2b, 0xa0, 0x2f, 0x03, 0x74, 0x30, 0x8e,
0x13, 0x12, 0xd5, 0x64, 0x43, 0x48, 0xac, 0x05, 0x67, 0xae, 0x6d, 0xd4, 0x50, 0x11, 0xf2, 0x86, 0x1a, 0xa2, 0x21, 0x04, 0xd6, 0xa2, 0x3d, 0xdf, 0xd1, 0x6a, 0x56, 0x09, 0x0a, 0x9a, 0x79, 0x1f,
0x79, 0x1f, 0xaf, 0x6d, 0x28, 0x0c, 0x7c, 0x72, 0x2a, 0xb9, 0x65, 0x58, 0xdc, 0x7f, 0x1c, 0x36, 0xaf, 0x1d, 0x28, 0x0e, 0xdc, 0x39, 0x95, 0xdc, 0x0a, 0x2c, 0xed, 0x3f, 0x09, 0x1d, 0x3f, 0xf4,
0xfc, 0xd0, 0x33, 0x30, 0x7f, 0xcd, 0xc0, 0x52, 0x2c, 0xd2, 0xf6, 0x87, 0x70, 0x89, 0x71, 0x1c, 0x34, 0xcc, 0xdf, 0x73, 0xb0, 0x1c, 0x8b, 0x94, 0xfd, 0x21, 0x5c, 0xa2, 0x0c, 0x45, 0x4c, 0xa5,
0x71, 0x9d, 0xea, 0xa5, 0x38, 0xd5, 0x15, 0xdf, 0xbb, 0x17, 0xf2, 0xca, 0xed, 0x67, 0xcf, 0x37, 0x7a, 0x39, 0x4e, 0x75, 0xd5, 0xf7, 0xee, 0x87, 0xac, 0x7a, 0xe7, 0xf9, 0x8b, 0xcd, 0xb7, 0xcf,
0xde, 0x39, 0x57, 0xb2, 0x15, 0x80, 0xa3, 0xe0, 0xed, 0x3a, 0x64, 0x49, 0xe8, 0x16, 0x33, 0x23, 0x95, 0x6c, 0x09, 0x60, 0x4b, 0x78, 0xb3, 0x09, 0x53, 0x38, 0x74, 0x4b, 0xb9, 0x11, 0x79, 0xe1,
0xf2, 0x22, 0xc0, 0xed, 0x1f, 0xc1, 0x4c, 0xa3, 0x13, 0x45, 0x24, 0xe4, 0xc5, 0xec, 0x88, 0xfc, 0xe0, 0xe6, 0x8f, 0x61, 0xd6, 0xe9, 0x46, 0x11, 0x0e, 0x59, 0x69, 0x6a, 0x44, 0x7e, 0xb4, 0x03,
0x18, 0x07, 0xe8, 0x32, 0x2c, 0xed, 0x50, 0x3f, 0x14, 0xf8, 0x26, 0xbd, 0x4f, 0x2c, 0x58, 0x4e, 0xeb, 0x32, 0x2c, 0xd7, 0x88, 0x1f, 0x72, 0x7c, 0x9d, 0xde, 0xa7, 0x06, 0xac, 0x24, 0x32, 0x95,
0x64, 0x3a, 0xbf, 0x01, 0xcc, 0x60, 0xd7, 0x8d, 0x08, 0x63, 0x3a, 0xc3, 0xcb, 0x31, 0xa7, 0x3b, 0xdf, 0x00, 0x66, 0x91, 0xeb, 0x46, 0x98, 0x52, 0x95, 0xe1, 0x95, 0x98, 0xd3, 0x5d, 0x29, 0xaf,
0x4a, 0x5e, 0xf9, 0xf6, 0xb3, 0xe7, 0x1b, 0xef, 0x9e, 0x8b, 0x94, 0x46, 0x70, 0x8c, 0x0b, 0xb4, 0x7e, 0xfb, 0xf9, 0x8b, 0xcd, 0x77, 0xce, 0x45, 0x4a, 0x21, 0xd8, 0xda, 0x85, 0xb5, 0x0c, 0x8b,
0x04, 0x0b, 0x1f, 0xfa, 0x61, 0xaa, 0xe4, 0x9b, 0xb0, 0x68, 0x04, 0x9a, 0x50, 0x1e, 0xa6, 0x19, 0x1f, 0xf8, 0x61, 0xaa, 0xe4, 0x5b, 0xb0, 0xa4, 0x05, 0x8a, 0x50, 0x01, 0x66, 0x28, 0x43, 0xac,
0xc7, 0xbc, 0xc3, 0x74, 0xbf, 0xe8, 0x95, 0x08, 0x48, 0xfe, 0x7b, 0x60, 0x1e, 0x07, 0xf4, 0x75, 0x4b, 0x55, 0xbf, 0xa8, 0x15, 0x0f, 0x48, 0xfc, 0x7b, 0x20, 0x16, 0x07, 0xf4, 0x75, 0x58, 0x49,
0x58, 0x4e, 0x44, 0x89, 0x79, 0x44, 0x58, 0x27, 0xe0, 0xc6, 0x5c, 0xad, 0x84, 0xf9, 0x5d, 0xcc, 0x44, 0x89, 0x79, 0x84, 0x69, 0x37, 0x60, 0xda, 0x5c, 0xae, 0xb8, 0xf9, 0x3d, 0x44, 0xf7, 0x22,
0xf6, 0x22, 0xbf, 0x11, 0x9b, 0x3f, 0xb5, 0x60, 0x39, 0x91, 0x69, 0xfb, 0x16, 0xcc, 0x79, 0x98, 0xdf, 0x89, 0xcd, 0x9f, 0x19, 0xb0, 0x92, 0xc8, 0x94, 0x7d, 0x1b, 0xe6, 0x3d, 0x44, 0x1b, 0x1d,
0xd5, 0xda, 0x42, 0x38, 0xb2, 0x9e, 0x9b, 0xf5, 0xb4, 0x5b, 0x41, 0xeb, 0x8e, 0xda, 0x80, 0x59, 0x2e, 0x1c, 0x59, 0xcf, 0xcd, 0x79, 0xca, 0x2d, 0xa7, 0x75, 0x57, 0x6e, 0xc0, 0x34, 0x5d, 0xa6,
0xba, 0x4c, 0x89, 0x6c, 0x58, 0x99, 0xb2, 0x63, 0x28, 0xd3, 0x07, 0xc4, 0xf7, 0x9a, 0xf1, 0x8e, 0x44, 0x36, 0xac, 0x4c, 0x53, 0x63, 0x28, 0xd3, 0xfb, 0xd8, 0xf7, 0x5a, 0xf1, 0x8e, 0xf1, 0x13,
0xf1, 0x63, 0x58, 0x34, 0x02, 0x4d, 0xa8, 0x09, 0xd3, 0x4d, 0x29, 0x19, 0x59, 0x92, 0x34, 0x3e, 0x58, 0xd2, 0x02, 0x45, 0xa8, 0x05, 0x33, 0x2d, 0x21, 0x19, 0x59, 0x92, 0x14, 0xbe, 0xf5, 0x5f,
0xfa, 0xb7, 0x05, 0x8b, 0x15, 0x1c, 0xe0, 0x30, 0xae, 0xdc, 0x78, 0x9b, 0xd6, 0x7e, 0x00, 0xb3, 0x03, 0x96, 0xaa, 0x28, 0x40, 0x61, 0x5c, 0xb9, 0xf1, 0x36, 0xad, 0xf9, 0x10, 0xe6, 0x9a, 0x01,
0xf5, 0x80, 0x36, 0x1e, 0xd4, 0xfc, 0xd1, 0xed, 0x0f, 0x33, 0xd2, 0xc3, 0x3d, 0x17, 0xfd, 0x23, 0x71, 0x1e, 0x36, 0xfc, 0xd1, 0xed, 0x0f, 0xb3, 0xc2, 0xc3, 0x7d, 0xd7, 0xfa, 0x57, 0x0e, 0x96,
0x03, 0x4b, 0x71, 0xb4, 0x93, 0xf8, 0x1f, 0x1d, 0x6b, 0xb8, 0x62, 0x4b, 0xac, 0xab, 0x68, 0x47, 0xe3, 0x68, 0x27, 0xf1, 0x3f, 0x3a, 0xd6, 0x70, 0xf9, 0x96, 0xd8, 0x94, 0xd1, 0x8e, 0x6e, 0x4b,
0xb7, 0x25, 0x6a, 0x07, 0xe8, 0xef, 0x19, 0x58, 0xdc, 0xe7, 0x34, 0xc2, 0xde, 0x05, 0x68, 0x24, 0x54, 0x0e, 0xac, 0x7f, 0xe6, 0x60, 0x69, 0x9f, 0x91, 0x08, 0x79, 0x17, 0xa0, 0x91, 0xcc, 0x16,
0xbb, 0x09, 0xb3, 0x6d, 0xca, 0x7c, 0x2e, 0x4e, 0xde, 0xec, 0x08, 0xc6, 0x94, 0x18, 0x1d, 0xbd, 0xcc, 0x75, 0x08, 0xf5, 0x19, 0x7f, 0xf2, 0x4e, 0x8d, 0x60, 0x4c, 0x89, 0xd1, 0xad, 0xcf, 0xf9,
0x10, 0xc7, 0xb6, 0xc9, 0xeb, 0xab, 0xdf, 0xb2, 0x63, 0x4b, 0x6c, 0x3c, 0x89, 0x4e, 0xa5, 0x26, 0x63, 0x5b, 0xe7, 0xf5, 0xd5, 0x6f, 0xd9, 0xb1, 0x25, 0x36, 0x9e, 0x44, 0xa7, 0x53, 0x93, 0xe8,
0xd1, 0x7f, 0x59, 0x90, 0xab, 0xd2, 0x8b, 0xb1, 0x17, 0x3e, 0xc9, 0xc0, 0x82, 0x8e, 0xf5, 0xd5, 0x7f, 0x0c, 0xc8, 0xd7, 0xc9, 0xc5, 0xd8, 0x0b, 0x9f, 0xe6, 0x60, 0x51, 0xc5, 0xfa, 0xea, 0xb7,
0x6f, 0xab, 0x55, 0xb8, 0x14, 0x52, 0xb3, 0x0f, 0x4e, 0x39, 0x6a, 0x81, 0xfe, 0x63, 0xc1, 0xaa, 0xd5, 0x1a, 0x5c, 0x0a, 0x89, 0xde, 0x07, 0xa7, 0x6d, 0xb9, 0xb0, 0xbe, 0x0b, 0x6b, 0x36, 0xee,
0x43, 0xda, 0x04, 0x73, 0xe2, 0x1e, 0x5f, 0xf6, 0xec, 0x78, 0x33, 0x91, 0x1d, 0x6d, 0xd9, 0x3f, 0x60, 0xc4, 0xb0, 0x9b, 0xa9, 0x7a, 0x29, 0x3b, 0x0f, 0xe4, 0x13, 0xd2, 0x57, 0x32, 0xa4, 0xc5,
0xcb, 0xc0, 0x5a, 0x5f, 0xcc, 0x93, 0x98, 0x82, 0xc6, 0x1a, 0x74, 0xba, 0xfc, 0xd9, 0xa4, 0xfc, 0x2d, 0x9d, 0xcf, 0x26, 0xac, 0xf7, 0x81, 0x25, 0x43, 0xfa, 0x17, 0x46, 0x4b, 0x13, 0x9e, 0x4a,
0xff, 0xb5, 0xa0, 0x70, 0x10, 0xe1, 0x90, 0xe1, 0x86, 0xd8, 0x11, 0xd2, 0xb7, 0xb8, 0x57, 0xf9, 0x08, 0xff, 0xcf, 0x80, 0xe2, 0x41, 0x84, 0x42, 0x8a, 0x1c, 0xde, 0xc3, 0xe9, 0x73, 0xc7, 0xab,
0x1f, 0xff, 0x17, 0x19, 0x28, 0x0e, 0x86, 0x7d, 0x21, 0xf6, 0x00, 0x75, 0xf7, 0xd6, 0x7b, 0x80, 0xdc, 0xaa, 0xbf, 0xca, 0x41, 0x69, 0x30, 0xec, 0x0b, 0xd1, 0xb5, 0xf2, 0xb4, 0xa8, 0xba, 0x56,
0x5c, 0xa0, 0xcf, 0x2d, 0x40, 0x15, 0xa1, 0xd1, 0x9f, 0x92, 0xca, 0x63, 0x79, 0x60, 0xe8, 0x7e, 0x2c, 0xac, 0x4f, 0x0d, 0xb0, 0xaa, 0x5c, 0xa3, 0x3f, 0x25, 0xd5, 0x27, 0x62, 0x8b, 0x53, 0xfd,
0x78, 0x00, 0xa0, 0x98, 0x8e, 0xec, 0x9b, 0x89, 0x39, 0x89, 0x2f, 0x1e, 0xd1, 0x1f, 0x2c, 0x78, 0xf0, 0x10, 0x40, 0x32, 0x1d, 0xd9, 0x59, 0x7a, 0x5e, 0xe0, 0xf3, 0x4b, 0xeb, 0x4f, 0x06, 0xbc,
0xe3, 0x44, 0x4e, 0xba, 0x58, 0xe3, 0x24, 0x95, 0xa4, 0x2f, 0x23, 0xbf, 0xba, 0xd0, 0xe9, 0xfb, 0x7e, 0x22, 0x27, 0x55, 0xac, 0x71, 0x92, 0x4a, 0xd2, 0x97, 0x13, 0x87, 0x6d, 0x95, 0xbe, 0xdf,
0x95, 0x05, 0x5f, 0x39, 0x86, 0x6a, 0xb5, 0xd3, 0xaa, 0x93, 0x28, 0x49, 0x60, 0x52, 0x6a, 0x6b, 0x18, 0xf0, 0x95, 0x63, 0xa8, 0xd6, 0xbb, 0xed, 0x26, 0x8e, 0x92, 0x04, 0x26, 0xa5, 0x36, 0x46,
0xd4, 0x2d, 0xfe, 0x85, 0x05, 0x5f, 0x3d, 0x85, 0x55, 0x9c, 0xc2, 0xf1, 0xd1, 0x3a, 0x26, 0x85, 0xdd, 0xe2, 0x9f, 0x19, 0xf0, 0xd5, 0x53, 0x58, 0xc5, 0x29, 0x1c, 0x1f, 0xad, 0x63, 0x52, 0xf8,
0x3f, 0xb7, 0xa0, 0xf0, 0x71, 0xd8, 0x08, 0xc8, 0xa4, 0xdb, 0xee, 0xd7, 0x16, 0x14, 0x07, 0x89, 0x0b, 0x03, 0x8a, 0x1f, 0x85, 0x4e, 0x80, 0x27, 0xdd, 0x76, 0xbf, 0x35, 0xa0, 0x34, 0x48, 0xe4,
0xbc, 0x3c, 0xbd, 0xf6, 0x99, 0x05, 0xaf, 0xa5, 0xf9, 0x4d, 0xb0, 0xc1, 0x7e, 0x63, 0xc1, 0xfa, 0xe5, 0xe9, 0xb5, 0x5f, 0x1a, 0x70, 0x25, 0xcd, 0x6f, 0x82, 0x0d, 0xf6, 0x3b, 0x03, 0x36, 0x86,
0x30, 0x2a, 0x2f, 0x4f, 0x57, 0x89, 0x8b, 0xfd, 0x5d, 0xc2, 0x77, 0xa8, 0x7b, 0x41, 0x86, 0xd9, 0x51, 0x79, 0x79, 0xba, 0x8a, 0x1f, 0x45, 0xef, 0x61, 0x56, 0x23, 0xee, 0x05, 0x19, 0xbf, 0x96,
0xa5, 0x38, 0xda, 0x57, 0xff, 0x28, 0xb3, 0x61, 0xaa, 0x41, 0x5d, 0x35, 0xcd, 0xe6, 0x1c, 0xf9, 0xe3, 0x68, 0x5f, 0xfd, 0x47, 0x99, 0x09, 0xd3, 0x0e, 0x71, 0xe5, 0xfc, 0x95, 0xb7, 0xc5, 0xb5,
0x8c, 0x7e, 0x69, 0xc1, 0xfc, 0xbe, 0xef, 0x85, 0x93, 0xa9, 0xb6, 0xb9, 0x4d, 0x65, 0x52, 0xb7, 0xf5, 0x6b, 0x03, 0x16, 0xf6, 0x7d, 0x2f, 0x9c, 0x4c, 0xb5, 0xf5, 0xfc, 0x9f, 0x4b, 0xcd, 0xff,
0xa9, 0xeb, 0x90, 0x53, 0x84, 0x74, 0x41, 0xbe, 0x04, 0x73, 0xcc, 0xf7, 0x42, 0xcc, 0x3b, 0x11, 0x37, 0x20, 0x2f, 0x09, 0xa9, 0x82, 0x7c, 0x09, 0xe6, 0xa9, 0xef, 0x85, 0x88, 0x75, 0x23, 0xac,
0xd1, 0x3f, 0x00, 0x24, 0x02, 0xf4, 0x67, 0x0b, 0xf2, 0x42, 0x3d, 0xb5, 0x65, 0x4f, 0x26, 0x94, 0x5e, 0x59, 0x27, 0x02, 0xeb, 0xaf, 0x06, 0x14, 0xb8, 0x7a, 0x6a, 0xcb, 0x9e, 0x4c, 0x28, 0x45,
0x02, 0xcc, 0xf0, 0x6e, 0x2d, 0x15, 0xcd, 0x34, 0xef, 0x7e, 0x07, 0x73, 0x6c, 0xe7, 0x61, 0xba, 0x98, 0x65, 0xbd, 0x46, 0x2a, 0x9a, 0x19, 0xd6, 0xfb, 0x0e, 0x62, 0xc8, 0x2c, 0xc0, 0x4c, 0x1b,
0x45, 0x78, 0x93, 0xba, 0x3a, 0xef, 0x7a, 0x85, 0xde, 0x82, 0xc2, 0x00, 0x71, 0x1d, 0xf2, 0xeb, 0xb3, 0x16, 0x71, 0x55, 0xde, 0xd5, 0xca, 0x7a, 0x13, 0x8a, 0x03, 0xc4, 0x55, 0xc8, 0xaf, 0xc9,
0x2a, 0x64, 0xe2, 0xd6, 0x78, 0x57, 0x87, 0x3c, 0xab, 0x04, 0x07, 0x5d, 0xf4, 0x27, 0x11, 0x31, 0x90, 0xb1, 0xdb, 0x60, 0x3d, 0x15, 0xf2, 0x9c, 0x14, 0x1c, 0xf4, 0xac, 0xbf, 0xf0, 0x88, 0x71,
0x09, 0xdd, 0x89, 0x47, 0x7c, 0xbd, 0x37, 0xe2, 0xf9, 0x9b, 0x2b, 0xb1, 0x37, 0x69, 0xdb, 0xad, 0xe8, 0x4e, 0x3c, 0xe2, 0x1b, 0xd9, 0x88, 0x17, 0x6e, 0xad, 0xc6, 0xde, 0x84, 0x6d, 0xaf, 0x8a,
0x60, 0x46, 0x4c, 0x1a, 0xd0, 0x13, 0x0b, 0x0a, 0x03, 0xb4, 0x75, 0xbc, 0x44, 0x22, 0x8d, 0xec, 0x28, 0xd6, 0x69, 0xb0, 0x9e, 0x1a, 0x50, 0x1c, 0xa0, 0xad, 0xe2, 0xc5, 0x02, 0x69, 0x64, 0x8f,
0x88, 0x98, 0xe6, 0x5d, 0x79, 0x52, 0x55, 0xe1, 0x35, 0xc1, 0xc0, 0xc1, 0x8f, 0x86, 0xe4, 0xae, 0x88, 0x19, 0xd6, 0x13, 0x4f, 0xaa, 0x3a, 0x5c, 0xe1, 0x0c, 0x6c, 0xf4, 0x78, 0x48, 0xee, 0x2a,
0xdc, 0x9f, 0xf3, 0xf9, 0x9b, 0xab, 0x3d, 0xf1, 0xec, 0x45, 0x94, 0x1e, 0x1e, 0x74, 0x53, 0x95, 0xfd, 0x39, 0x5f, 0xb8, 0xb5, 0x96, 0x89, 0x67, 0x2f, 0x22, 0xe4, 0xf0, 0xa0, 0x97, 0xaa, 0xc4,
0xf8, 0xa9, 0x05, 0xeb, 0xc3, 0x00, 0xc7, 0x1b, 0xd5, 0x6d, 0x98, 0xdf, 0xc1, 0x41, 0x60, 0xe2, 0xcf, 0x0c, 0xd8, 0x18, 0x06, 0x38, 0xde, 0xa8, 0xee, 0xc0, 0x42, 0x0d, 0x05, 0x81, 0x8e, 0xe3,
0xb8, 0x31, 0x18, 0xc7, 0xd0, 0xba, 0x24, 0x61, 0x5c, 0x83, 0x9c, 0x02, 0x18, 0xfa, 0x75, 0x7d, 0xe6, 0x60, 0x1c, 0x43, 0xeb, 0x92, 0x84, 0x71, 0x1d, 0xf2, 0x12, 0x60, 0xe8, 0x0b, 0xe6, 0x7c,
0x2e, 0xfe, 0xba, 0xfe, 0x7d, 0xb0, 0xdf, 0x63, 0xdc, 0x6f, 0x61, 0x4e, 0xee, 0x62, 0x76, 0x7e, 0xfc, 0x82, 0xf9, 0x3d, 0x30, 0xdf, 0xa5, 0xcc, 0x6f, 0x23, 0x86, 0xef, 0x21, 0x7a, 0x7e, 0x7f,
0x7f, 0x9f, 0x5b, 0xb0, 0xd2, 0x03, 0x74, 0xb2, 0x5f, 0xbb, 0x0e, 0x59, 0x0f, 0xb3, 0xd1, 0xfd, 0x9f, 0x1a, 0xb0, 0x9a, 0x01, 0x3a, 0xd9, 0xaf, 0xd9, 0x84, 0x29, 0x0f, 0xd1, 0xd1, 0xfd, 0x70,
0x0c, 0xe4, 0x61, 0x86, 0x9e, 0x5a, 0x60, 0xcb, 0xd1, 0x6f, 0x82, 0x83, 0xd4, 0x6d, 0x58, 0xe9, 0xe1, 0x21, 0x6a, 0x3d, 0x33, 0xc0, 0x14, 0xa3, 0xdf, 0x04, 0x07, 0xa9, 0x3b, 0xb0, 0x9a, 0xa1,
0xa1, 0xa0, 0xd3, 0xb2, 0x09, 0x97, 0xa4, 0x8e, 0x76, 0x6f, 0xf7, 0x24, 0x57, 0x1a, 0x38, 0x4a, 0xa0, 0xd2, 0xb2, 0x05, 0x97, 0x84, 0x8e, 0x72, 0x6f, 0x66, 0x92, 0x2b, 0x0c, 0x6c, 0xa9, 0xc0,
0x41, 0xf4, 0xe3, 0xaa, 0x46, 0x98, 0xe0, 0x90, 0x73, 0x07, 0xd6, 0xfa, 0x48, 0xfc, 0xdf, 0x81, 0xfb, 0x71, 0x4d, 0x21, 0x4c, 0x70, 0xc8, 0xb9, 0x0b, 0xeb, 0x7d, 0x24, 0xbe, 0x70, 0x20, 0xcf,
0x3c, 0xb5, 0x7a, 0xee, 0x9a, 0xbd, 0x35, 0x19, 0xdf, 0x66, 0x31, 0x84, 0x82, 0x0e, 0xa5, 0x9c, 0x8c, 0xcc, 0x59, 0x33, 0x5b, 0x93, 0xf1, 0x6d, 0x16, 0x43, 0x28, 0xa8, 0x50, 0x2a, 0xc9, 0xd6,
0x6c, 0x7d, 0x8a, 0x43, 0xb1, 0xb7, 0xe5, 0x53, 0xbb, 0x81, 0xd9, 0xff, 0xc4, 0xe5, 0xa2, 0x07, 0x27, 0x39, 0x94, 0xb2, 0x2d, 0x9f, 0xda, 0x0d, 0xf4, 0xfe, 0xc7, 0x0f, 0x17, 0x19, 0xc0, 0xaa,
0xb0, 0x62, 0x0a, 0x7f, 0x27, 0x74, 0xef, 0x85, 0x2e, 0xe9, 0x4e, 0xa2, 0xe9, 0xc4, 0x18, 0xe8, 0x2e, 0xfc, 0xdd, 0xd0, 0xbd, 0x1f, 0xba, 0xb8, 0x37, 0x89, 0xa6, 0xe3, 0x63, 0xa0, 0xcf, 0x9d,
0x0b, 0xe7, 0x66, 0x0c, 0x94, 0x0b, 0xf4, 0x7d, 0xb8, 0x76, 0x1a, 0xd7, 0xf3, 0x67, 0xe2, 0x8f, 0xeb, 0x31, 0x50, 0x2c, 0xac, 0x1f, 0xc0, 0xf5, 0xd3, 0xb8, 0x9e, 0x3f, 0x13, 0x7f, 0x36, 0xe0,
0x16, 0x7c, 0x6d, 0x10, 0x5d, 0x35, 0xcb, 0x60, 0x2e, 0xc6, 0x3b, 0x12, 0x0f, 0xc9, 0xc5, 0x0f, 0x6b, 0x83, 0xe8, 0xb2, 0x59, 0x06, 0x73, 0x31, 0xde, 0x91, 0x78, 0x48, 0x2e, 0x7e, 0x08, 0x5b,
0x60, 0xf3, 0x74, 0xb6, 0xe7, 0xcf, 0xc6, 0x4f, 0xac, 0x9e, 0x46, 0x73, 0x48, 0x83, 0xf8, 0x6d, 0xa7, 0xb3, 0x3d, 0x7f, 0x36, 0x7e, 0x6a, 0x64, 0x1a, 0xcd, 0xc6, 0x0e, 0xf6, 0x3b, 0x6c, 0xcc,
0x3e, 0xe6, 0x66, 0xff, 0x08, 0xd6, 0x87, 0x71, 0xd0, 0x51, 0x6d, 0x03, 0xf0, 0x6e, 0x2d, 0x52, 0xcd, 0xfe, 0x21, 0x6c, 0x0c, 0xe3, 0xa0, 0xa2, 0xda, 0x01, 0x60, 0xbd, 0x46, 0x24, 0xa5, 0x43,
0xd2, 0xa1, 0x67, 0xa3, 0xb1, 0x98, 0xe3, 0x5d, 0xfd, 0x88, 0x7e, 0x67, 0xc1, 0x86, 0xbc, 0xeb, 0x9f, 0x8d, 0xda, 0x62, 0x9e, 0xf5, 0xd4, 0xa5, 0xf5, 0x07, 0x03, 0x36, 0xc5, 0x59, 0xe7, 0xe5,
0xbc, 0xdc, 0x9d, 0xbe, 0x03, 0x57, 0x8e, 0x67, 0xa9, 0xe3, 0xdf, 0x80, 0xf9, 0x8e, 0xd0, 0xa9, 0xee, 0xf4, 0x1a, 0x5c, 0x3d, 0x9e, 0xa5, 0x8a, 0x7f, 0x13, 0x16, 0xba, 0x5c, 0xa7, 0x91, 0x6c,
0x25, 0xdb, 0x57, 0xce, 0x01, 0x29, 0x92, 0x46, 0xe8, 0xf7, 0x16, 0x5c, 0x4d, 0xa3, 0xbc, 0xb4, 0x5f, 0x79, 0x1b, 0x84, 0x48, 0x18, 0x59, 0x7f, 0x34, 0xe0, 0x5a, 0x1a, 0xe5, 0xa5, 0xed, 0xe5,
0xbd, 0xfc, 0x1e, 0xa0, 0x93, 0x78, 0x9e, 0x35, 0x5e, 0x1b, 0x96, 0x77, 0x68, 0xab, 0xed, 0x07, 0x77, 0xc1, 0x3a, 0x89, 0xe7, 0x59, 0xe3, 0x35, 0x61, 0xa5, 0x46, 0xda, 0x1d, 0x3f, 0xc0, 0x51,
0x24, 0x8a, 0x7f, 0x22, 0x2f, 0xc3, 0xe5, 0x94, 0x2c, 0x99, 0xdd, 0x1b, 0x46, 0x68, 0x66, 0xf7, 0xfc, 0xa3, 0x6e, 0x05, 0x2e, 0xa7, 0x64, 0xc9, 0xec, 0xee, 0x68, 0xa1, 0x9e, 0xdd, 0x63, 0x81,
0x58, 0x80, 0x6e, 0x40, 0x5e, 0x9b, 0xec, 0xd3, 0xc0, 0x77, 0x7d, 0xfe, 0xd8, 0xa4, 0x2a, 0x0f, 0x75, 0x13, 0x0a, 0xca, 0x64, 0x9f, 0x04, 0xbe, 0xeb, 0xb3, 0x27, 0x3a, 0x55, 0x05, 0x98, 0x91,
0xd3, 0xea, 0xad, 0x22, 0x33, 0x0a, 0xa8, 0x15, 0xfa, 0x06, 0x14, 0x06, 0x2c, 0xb4, 0x2b, 0x73, 0xdf, 0xc1, 0xe8, 0x51, 0x40, 0xae, 0xac, 0x6f, 0x40, 0x71, 0xc0, 0x42, 0xb9, 0xd2, 0x87, 0x1b,
0xb9, 0xb1, 0x52, 0x97, 0x9b, 0x37, 0x63, 0x4e, 0xbb, 0xbb, 0xbb, 0xa7, 0x61, 0x6f, 0x82, 0x9d, 0x23, 0x75, 0xb8, 0x79, 0x23, 0xe6, 0xb4, 0xbb, 0xbb, 0x7b, 0x1a, 0xf6, 0x16, 0x98, 0x69, 0xe5,
0x56, 0x3e, 0x01, 0xb6, 0x04, 0x6b, 0x86, 0x05, 0x89, 0xda, 0x24, 0xf9, 0xfa, 0xf7, 0x38, 0xe8, 0x13, 0x60, 0xcb, 0xb0, 0xae, 0x59, 0xe0, 0xa8, 0x83, 0x93, 0xd7, 0xbf, 0xc7, 0x41, 0xdf, 0x48,
0xeb, 0x49, 0xa0, 0xc6, 0xe0, 0x04, 0xf8, 0x4d, 0x58, 0xae, 0x92, 0x47, 0xef, 0xfb, 0x01, 0x4f, 0x02, 0xd5, 0x06, 0x27, 0xc0, 0x6f, 0xc1, 0x4a, 0x1d, 0x3f, 0x7e, 0xcf, 0x0f, 0x58, 0xf2, 0x04,
0x4e, 0xf0, 0x55, 0xb8, 0xd4, 0xc6, 0x11, 0x6e, 0x69, 0x45, 0xb5, 0x40, 0x37, 0xe0, 0x72, 0x4a, 0x5f, 0x83, 0x4b, 0x1d, 0x14, 0xa1, 0xb6, 0x52, 0x94, 0x0b, 0xeb, 0x26, 0x5c, 0x4e, 0x69, 0x26,
0x33, 0xb9, 0x3c, 0x1c, 0x4a, 0x89, 0xe9, 0xb3, 0x9c, 0x33, 0xab, 0x04, 0xf7, 0x5c, 0x54, 0x80, 0x87, 0x87, 0x43, 0x21, 0xd1, 0x7d, 0x96, 0xb7, 0xe7, 0xa4, 0xe0, 0xbe, 0x6b, 0x15, 0x61, 0xbd,
0xb5, 0x2a, 0x79, 0x24, 0xab, 0xd8, 0xe3, 0x00, 0xdd, 0x82, 0x7c, 0xff, 0x07, 0x67, 0xc1, 0xbb, 0x8e, 0x1f, 0x8b, 0x2a, 0x66, 0x1c, 0x58, 0xb7, 0xa1, 0xd0, 0x7f, 0xe3, 0x2c, 0x78, 0xd7, 0x60,
0x0a, 0x1b, 0x7b, 0x24, 0x74, 0xfd, 0xd0, 0x4b, 0xed, 0x1f, 0xbd, 0xc8, 0xb7, 0xe1, 0xca, 0xf1, 0x73, 0x0f, 0x87, 0xae, 0x1f, 0x7a, 0xa9, 0xfd, 0x23, 0x8b, 0x7c, 0x07, 0xae, 0x1e, 0xaf, 0x72,
0x2a, 0x67, 0xf1, 0x71, 0x0b, 0xf2, 0x1f, 0x87, 0x7e, 0xc8, 0x38, 0x0e, 0x82, 0xde, 0xac, 0x9c, 0x16, 0x1f, 0xb7, 0xa1, 0xf0, 0x51, 0xe8, 0x87, 0x94, 0xa1, 0x20, 0xc8, 0x66, 0xe5, 0x44, 0xb3,
0x68, 0x56, 0x86, 0xc2, 0x80, 0xd9, 0xd0, 0x49, 0x73, 0x36, 0x9e, 0x70, 0xb7, 0x61, 0x55, 0x69, 0x0a, 0x14, 0x07, 0xcc, 0x86, 0x4e, 0x9a, 0x73, 0xf1, 0x84, 0xbb, 0x03, 0x6b, 0x52, 0xb3, 0xd6,
0xee, 0x34, 0x71, 0xe8, 0x11, 0x76, 0x26, 0x3f, 0x6f, 0xc2, 0x5a, 0x9f, 0x51, 0x52, 0x5b, 0x3f, 0x42, 0xa1, 0x87, 0xe9, 0x99, 0xfc, 0xbc, 0x01, 0xeb, 0x7d, 0x46, 0x49, 0x6d, 0xfd, 0xf0, 0x90,
0x3c, 0xa4, 0xa6, 0xb6, 0xe2, 0x59, 0x54, 0x4c, 0x29, 0xef, 0x52, 0xef, 0x6c, 0xf0, 0xef, 0x82, 0xe8, 0xda, 0xf2, 0x6b, 0x5e, 0x31, 0xa9, 0xbc, 0x4b, 0xbc, 0xb3, 0xc1, 0xbf, 0x03, 0x66, 0xda,
0x9d, 0xb6, 0xd0, 0xd8, 0xd7, 0x60, 0x2a, 0xa0, 0x9e, 0xf9, 0xc9, 0xc5, 0xee, 0x1b, 0xb8, 0x77, 0x42, 0x61, 0x5f, 0x87, 0xe9, 0x80, 0x78, 0xfa, 0x53, 0x09, 0xb3, 0x6f, 0xe0, 0xde, 0x25, 0x9e,
0xa9, 0xe7, 0xc8, 0xcf, 0xd1, 0x1b, 0x30, 0x9f, 0xf6, 0x34, 0xbc, 0x8d, 0xde, 0x82, 0xdc, 0xb9, 0x2d, 0xee, 0x5b, 0xaf, 0xc3, 0x42, 0xda, 0xd3, 0xf0, 0x36, 0x7a, 0x13, 0xf2, 0xe7, 0x02, 0xff,
0xc0, 0xbf, 0x0b, 0xeb, 0x07, 0x84, 0xf1, 0x63, 0x2e, 0xa3, 0xe7, 0x38, 0x0b, 0x7f, 0x66, 0xc1, 0x1e, 0x6c, 0x1c, 0x60, 0xca, 0x8e, 0x39, 0x8c, 0x9e, 0xe3, 0x59, 0xf8, 0x73, 0x03, 0x5e, 0x1b,
0xeb, 0x43, 0x11, 0xc7, 0x7a, 0xa3, 0xaa, 0xfc, 0xc5, 0x82, 0x85, 0x06, 0x6d, 0x6d, 0xc5, 0xef, 0x8a, 0x38, 0xd6, 0x13, 0x55, 0xf5, 0x6f, 0x06, 0x2c, 0x3a, 0xa4, 0xbd, 0x1d, 0x7f, 0x21, 0x58,
0x5b, 0x56, 0x6c, 0xfd, 0xf2, 0x8f, 0x43, 0x1e, 0x3a, 0x84, 0x49, 0x94, 0x3d, 0xeb, 0x7b, 0x1f, 0x35, 0xd5, 0xe7, 0x2a, 0x36, 0x7e, 0x64, 0x63, 0x2a, 0x50, 0xf6, 0x8c, 0xef, 0x7f, 0x78, 0x66,
0x9d, 0xd9, 0x55, 0xbc, 0xf0, 0x48, 0xa8, 0x5e, 0xc9, 0x2c, 0x79, 0xb4, 0x14, 0xbf, 0x44, 0xf9, 0x57, 0xf1, 0xc2, 0xc3, 0xa1, 0xfc, 0x88, 0xb0, 0xec, 0x91, 0x72, 0xfc, 0xd9, 0xdf, 0xdb, 0xf2,
0x8e, 0x7a, 0x3a, 0x2a, 0xff, 0x36, 0x93, 0xad, 0x7e, 0xf2, 0xc9, 0x17, 0x99, 0xb9, 0xaa, 0x72, 0xea, 0xa8, 0xf2, 0xfb, 0xdc, 0x54, 0xfd, 0xe3, 0x8f, 0x3f, 0xcb, 0xcd, 0xd7, 0xa5, 0xeb, 0x07,
0x7d, 0xbf, 0xfc, 0x37, 0xf3, 0xfc, 0xe9, 0xfd, 0xf2, 0x3f, 0x33, 0x6b, 0xf1, 0xf3, 0xa7, 0x77, 0x95, 0x7f, 0xe8, 0xeb, 0x4f, 0x1e, 0x54, 0xfe, 0x9d, 0x5b, 0x8f, 0xaf, 0x3f, 0xb9, 0xb7, 0x57,
0xf7, 0x2a, 0x02, 0x59, 0xe4, 0xf7, 0x45, 0x06, 0x94, 0xfc, 0xed, 0xb7, 0xef, 0x97, 0xeb, 0xd3, 0xe5, 0xc8, 0x3c, 0xbf, 0x9f, 0xe7, 0x40, 0xca, 0xdf, 0x7a, 0xeb, 0x41, 0xa5, 0x39, 0x23, 0xf0,
0x12, 0x7f, 0xfb, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x47, 0xd4, 0x65, 0xf6, 0x50, 0x2a, 0x00, 0x77, 0xfe, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x17, 0x90, 0xdd, 0xd0, 0x02, 0x29, 0x00, 0x00,
0x00,
} }
...@@ -134,6 +134,7 @@ func (m *Sha3Request) GetData() []byte { ...@@ -134,6 +134,7 @@ func (m *Sha3Request) GetData() []byte {
} }
type Sha3Response struct { type Sha3Response struct {
//
Hash *github_com_CaduceusMetaverseProtocol_MetaTypes_types.Hash `protobuf:"bytes,1,opt,name=hash,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.Hash" json:"hash,omitempty"` Hash *github_com_CaduceusMetaverseProtocol_MetaTypes_types.Hash `protobuf:"bytes,1,opt,name=hash,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.Hash" json:"hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
...@@ -1034,13 +1035,13 @@ func (m *NonceResponse) GetNonce() uint64 { ...@@ -1034,13 +1035,13 @@ func (m *NonceResponse) GetNonce() uint64 {
} }
type RepeatedNonceRequest struct { type RepeatedNonceRequest struct {
// request address //repeated bytes addresses =1;
Address []github_com_CaduceusMetaverseProtocol_MetaTypes_types.Address `protobuf:"bytes,1,rep,name=address,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address" json:"address,omitempty"`
// request block number // request block number
BlockId []github_com_CaduceusMetaverseProtocol_MetaTypes_types.BigInt `protobuf:"bytes,2,rep,name=block_id,json=blockId,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt" json:"block_id,omitempty"` //repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"];
XXX_NoUnkeyedLiteral struct{} `json:"-"` List []*NonceRequest `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
XXX_unrecognized []byte `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
} }
func (m *RepeatedNonceRequest) Reset() { *m = RepeatedNonceRequest{} } func (m *RepeatedNonceRequest) Reset() { *m = RepeatedNonceRequest{} }
...@@ -1067,16 +1068,18 @@ func (m *RepeatedNonceRequest) XXX_DiscardUnknown() { ...@@ -1067,16 +1068,18 @@ func (m *RepeatedNonceRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_RepeatedNonceRequest proto.InternalMessageInfo var xxx_messageInfo_RepeatedNonceRequest proto.InternalMessageInfo
func (m *RepeatedNonceRequest) GetList() []*NonceRequest {
if m != nil {
return m.List
}
return nil
}
type RepeatedNonceResponse struct { type RepeatedNonceResponse struct {
// request address List []*NonceResponse `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
Address []github_com_CaduceusMetaverseProtocol_MetaTypes_types.Address `protobuf:"bytes,1,rep,name=address,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address" json:"address,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
// request block number XXX_unrecognized []byte `json:"-"`
BlockId []github_com_CaduceusMetaverseProtocol_MetaTypes_types.BigInt `protobuf:"bytes,2,rep,name=block_id,json=blockId,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt" json:"block_id,omitempty"` XXX_sizecache int32 `json:"-"`
// nonce
Nonce []uint64 `protobuf:"varint,3,rep,packed,name=nonce,proto3" json:"nonce,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
} }
func (m *RepeatedNonceResponse) Reset() { *m = RepeatedNonceResponse{} } func (m *RepeatedNonceResponse) Reset() { *m = RepeatedNonceResponse{} }
...@@ -1103,9 +1106,9 @@ func (m *RepeatedNonceResponse) XXX_DiscardUnknown() { ...@@ -1103,9 +1106,9 @@ func (m *RepeatedNonceResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_RepeatedNonceResponse proto.InternalMessageInfo var xxx_messageInfo_RepeatedNonceResponse proto.InternalMessageInfo
func (m *RepeatedNonceResponse) GetNonce() []uint64 { func (m *RepeatedNonceResponse) GetList() []*NonceResponse {
if m != nil { if m != nil {
return m.Nonce return m.List
} }
return nil return nil
} }
...@@ -3495,117 +3498,118 @@ func init() { ...@@ -3495,117 +3498,118 @@ func init() {
func init() { proto.RegisterFile("ring/v1/account_req_res.proto", fileDescriptor_edf64ab8a9a4cbde) } func init() { proto.RegisterFile("ring/v1/account_req_res.proto", fileDescriptor_edf64ab8a9a4cbde) }
var fileDescriptor_edf64ab8a9a4cbde = []byte{ var fileDescriptor_edf64ab8a9a4cbde = []byte{
// 1789 bytes of a gzipped FileDescriptorProto // 1795 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xdb, 0x6f, 0x1b, 0x59, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xdd, 0x6f, 0x1b, 0x59,
0x19, 0xd7, 0xd8, 0x69, 0x2e, 0x9f, 0xdd, 0x24, 0x9d, 0x38, 0xb6, 0x37, 0xb0, 0x4a, 0x7b, 0x16, 0x15, 0xd7, 0x38, 0x69, 0x3e, 0x8e, 0xdd, 0x24, 0x9d, 0x24, 0xb6, 0x37, 0xb0, 0x4a, 0x7b, 0x17,
0x4a, 0xc4, 0x16, 0xbb, 0x6e, 0xd4, 0x95, 0xd8, 0x5d, 0x54, 0x6a, 0xb3, 0xdb, 0xad, 0x94, 0x5a, 0x4a, 0xd8, 0x2d, 0x76, 0xdd, 0xa8, 0x2b, 0xb1, 0xbb, 0xa8, 0xc4, 0x66, 0xb7, 0x5b, 0x29, 0x8d,
0x61, 0x92, 0x8d, 0x56, 0xb0, 0xc8, 0x1c, 0xcf, 0x9c, 0x8c, 0x87, 0x8c, 0xe7, 0xb8, 0x73, 0x8e, 0xc2, 0xa4, 0x5b, 0xad, 0x60, 0x91, 0xb9, 0x9e, 0xb9, 0x19, 0x0f, 0x1d, 0xcf, 0x75, 0xe7, 0x5e,
0x53, 0x87, 0xa7, 0x16, 0x24, 0xb4, 0x12, 0x0f, 0x68, 0xc5, 0x33, 0x42, 0x42, 0x08, 0xa1, 0x15, 0xa7, 0x2e, 0x4f, 0x2d, 0x48, 0x08, 0x89, 0x07, 0xb4, 0xe2, 0x19, 0x21, 0x21, 0x84, 0xd0, 0x0a,
0xbc, 0x21, 0xf1, 0x37, 0xc0, 0x3b, 0x12, 0xea, 0x43, 0x1f, 0x78, 0xa3, 0x3c, 0x21, 0xf1, 0x07, 0xde, 0x90, 0xf8, 0x1b, 0xe0, 0x1d, 0x09, 0xf5, 0xa1, 0x0f, 0xbc, 0x51, 0x5e, 0xf9, 0x03, 0xd0,
0xa0, 0x73, 0xe6, 0xcc, 0xc5, 0x97, 0x5c, 0x36, 0x92, 0xed, 0x28, 0x79, 0x49, 0xe6, 0x7c, 0xf3, 0xbd, 0x73, 0xef, 0x7c, 0xd8, 0xce, 0xc7, 0x46, 0xb2, 0x5d, 0xb5, 0x2f, 0xed, 0xdc, 0x33, 0xe7,
0x5d, 0x7e, 0xdf, 0xc5, 0xdf, 0xf9, 0xce, 0xcc, 0xc0, 0x9b, 0xbe, 0xe3, 0xd9, 0xe5, 0xc3, 0x4a, 0xfc, 0xce, 0xef, 0x7c, 0xe4, 0xce, 0xb9, 0xe3, 0x81, 0x37, 0x43, 0x2f, 0x70, 0xab, 0x47, 0xb5,
0x19, 0x9b, 0x26, 0xed, 0x7a, 0xbc, 0xe1, 0x93, 0xa7, 0x0d, 0x9f, 0xb0, 0x52, 0xc7, 0xa7, 0x9c, 0x2a, 0xb6, 0x6d, 0xda, 0x0b, 0x78, 0x33, 0x24, 0x0f, 0x9b, 0x21, 0x61, 0x95, 0x6e, 0x48, 0x39,
0xea, 0x73, 0xe2, 0x76, 0xe9, 0xb0, 0xb2, 0x76, 0xd3, 0xa6, 0xd4, 0x76, 0x49, 0x59, 0x92, 0x9b, 0x35, 0xe7, 0xc5, 0xed, 0xca, 0x51, 0x6d, 0xe3, 0xb2, 0x4b, 0xa9, 0xeb, 0x93, 0xaa, 0x14, 0xb7,
0xdd, 0xfd, 0xf2, 0xbe, 0x43, 0x5c, 0xab, 0xd1, 0xc6, 0xec, 0x20, 0x60, 0x5d, 0x2b, 0x7a, 0xa4, 0x7a, 0x87, 0xd5, 0x43, 0x8f, 0xf8, 0x4e, 0xb3, 0x83, 0xd9, 0x83, 0x48, 0x75, 0xa3, 0x1c, 0x90,
0xd9, 0x75, 0xb1, 0xd0, 0xe5, 0x13, 0x46, 0xbb, 0xbe, 0x49, 0xd4, 0x9d, 0xf5, 0x41, 0x59, 0xee, 0x56, 0xcf, 0xc7, 0x02, 0x2b, 0x24, 0x8c, 0xf6, 0x42, 0x9b, 0xa8, 0x3b, 0x9b, 0x83, 0xb6, 0xdc,
0xb4, 0x09, 0xe3, 0xb8, 0xdd, 0x51, 0x0c, 0xf9, 0x26, 0x66, 0x64, 0x84, 0xa0, 0x1e, 0xd2, 0xdb, 0xeb, 0x10, 0xc6, 0x71, 0xa7, 0xab, 0x14, 0x8a, 0x2d, 0xcc, 0xc8, 0x08, 0x43, 0x53, 0xcb, 0x3b,
0x84, 0x63, 0x45, 0x5b, 0x92, 0x34, 0x9b, 0xda, 0x34, 0x20, 0xa0, 0x1c, 0xe8, 0x75, 0x6a, 0x91, 0x84, 0x63, 0x25, 0x5b, 0x96, 0x32, 0x97, 0xba, 0x34, 0x12, 0xa0, 0x35, 0x30, 0xf7, 0xa8, 0x43,
0x3d, 0xe2, 0x33, 0x87, 0x7a, 0x06, 0x79, 0xda, 0x25, 0x8c, 0xa3, 0x32, 0xac, 0xf4, 0x51, 0x59, 0xee, 0x93, 0x90, 0x79, 0x34, 0xb0, 0xc8, 0xc3, 0x1e, 0x61, 0x1c, 0x55, 0x61, 0x35, 0x23, 0x65,
0x87, 0x7a, 0x8c, 0xe8, 0x45, 0x98, 0x3b, 0x0c, 0x48, 0x45, 0xed, 0xa6, 0xb6, 0xb1, 0x60, 0x84, 0x5d, 0x1a, 0x30, 0x62, 0x96, 0x61, 0xfe, 0x28, 0x12, 0x95, 0x8d, 0xcb, 0xc6, 0xd6, 0xa2, 0xa5,
0x4b, 0x74, 0x0b, 0x32, 0x3b, 0x2d, 0xbc, 0xa9, 0xe4, 0x75, 0x1d, 0x66, 0x2c, 0xcc, 0xb1, 0xe4, 0x97, 0xe8, 0x0a, 0xe4, 0x0f, 0xda, 0x78, 0x5b, 0xd9, 0x9b, 0x26, 0xcc, 0x3a, 0x98, 0x63, 0xa9,
0xca, 0x1a, 0xf2, 0x1a, 0x75, 0x20, 0x1b, 0xb0, 0x28, 0x65, 0x3f, 0x86, 0x99, 0x16, 0x66, 0x2d, 0x55, 0xb0, 0xe4, 0x35, 0xea, 0x42, 0x21, 0x52, 0x51, 0x60, 0x3f, 0x86, 0xd9, 0x36, 0x66, 0x6d,
0xc9, 0x93, 0xb9, 0x77, 0xbd, 0x24, 0x90, 0x95, 0x0e, 0x2b, 0xa5, 0x8f, 0x30, 0x6b, 0x55, 0xbf, 0xa9, 0x93, 0xbf, 0x71, 0xb1, 0x22, 0x98, 0x55, 0x8e, 0x6a, 0x95, 0x8f, 0x31, 0x6b, 0xd7, 0xbf,
0xf3, 0xf2, 0xd5, 0xfa, 0xb7, 0x6d, 0x87, 0xb7, 0xba, 0xcd, 0x92, 0x49, 0xdb, 0xe5, 0x1a, 0xb6, 0xf3, 0xec, 0xf9, 0xe6, 0xb7, 0x5d, 0x8f, 0xb7, 0x7b, 0xad, 0x8a, 0x4d, 0x3b, 0xd5, 0x06, 0x76,
0xba, 0x26, 0xe9, 0xb2, 0x27, 0x84, 0x63, 0x61, 0x93, 0x6c, 0x0b, 0xf4, 0x26, 0x75, 0xcb, 0x82, 0x7a, 0x36, 0xe9, 0xb1, 0xbb, 0x84, 0x63, 0xe1, 0x93, 0xec, 0x0b, 0xf6, 0x36, 0xf5, 0xab, 0x42,
0xb2, 0x7b, 0xd4, 0x21, 0xac, 0xcc, 0xc5, 0x5f, 0x29, 0x6e, 0x48, 0xcd, 0x68, 0x05, 0x6e, 0xd4, 0x72, 0xef, 0x71, 0x97, 0xb0, 0x2a, 0x17, 0xff, 0x4a, 0x73, 0x4b, 0x22, 0xa3, 0x55, 0xb8, 0xb4,
0x09, 0x1f, 0x70, 0xad, 0x04, 0x7a, 0x92, 0x78, 0xaa, 0x67, 0xab, 0xb0, 0x52, 0x27, 0x7c, 0x9b, 0x47, 0xf8, 0x40, 0x68, 0x15, 0x30, 0xd3, 0xc2, 0x53, 0x23, 0x5b, 0x87, 0xd5, 0x3d, 0xc2, 0xf7,
0x10, 0xbf, 0x26, 0x32, 0x1c, 0xaa, 0xb9, 0x0f, 0xb9, 0x7e, 0xb2, 0x52, 0xf4, 0x26, 0x40, 0x87, 0x09, 0x09, 0x1b, 0xa2, 0xc2, 0x1a, 0xe6, 0x26, 0xac, 0x65, 0xc5, 0x0a, 0xe8, 0x4d, 0x80, 0x2e,
0x10, 0xbf, 0x21, 0xcb, 0x41, 0xea, 0xba, 0x6e, 0x2c, 0x74, 0x42, 0x36, 0x54, 0x84, 0x7c, 0x88, 0x21, 0x61, 0x53, 0xb6, 0x83, 0xc4, 0xba, 0x68, 0x2d, 0x76, 0xb5, 0x1a, 0x2a, 0x43, 0x51, 0x33,
0x7c, 0x00, 0xd7, 0x26, 0x14, 0x86, 0xee, 0x9c, 0x0a, 0x6e, 0x19, 0x16, 0x77, 0x8e, 0x3c, 0xd3, 0x1f, 0xe0, 0xb5, 0x0d, 0xa5, 0xa1, 0x3b, 0xa7, 0x92, 0x5b, 0x81, 0xa5, 0x83, 0xc7, 0x81, 0xed,
0xf1, 0xec, 0x50, 0xcd, 0xdf, 0x52, 0xb0, 0x14, 0x91, 0x94, 0xfc, 0x3e, 0x5c, 0x63, 0x1c, 0xfb, 0x05, 0xae, 0x86, 0xf9, 0x7b, 0x0e, 0x96, 0x63, 0x91, 0xb2, 0x3f, 0x84, 0x0b, 0x8c, 0xe3, 0x90,
0x5c, 0x85, 0x7a, 0x29, 0x0a, 0x75, 0xd5, 0xb1, 0x1f, 0x7b, 0xbc, 0xfa, 0xe0, 0xe5, 0xab, 0xf5, 0xab, 0x54, 0x2f, 0xc7, 0xa9, 0xae, 0x7b, 0xee, 0x9d, 0x80, 0xd7, 0x6f, 0x3d, 0x7b, 0xbe, 0xf9,
0xf7, 0xce, 0x15, 0xec, 0x40, 0x81, 0x11, 0xa8, 0xd7, 0x9b, 0x90, 0x26, 0x9e, 0x55, 0x4c, 0x8d, 0xfe, 0xb9, 0x92, 0x1d, 0x01, 0x58, 0x11, 0xbc, 0xd9, 0x82, 0x19, 0x12, 0x38, 0xe5, 0xdc, 0x98,
0xc9, 0x8a, 0x50, 0xae, 0xff, 0x04, 0xe6, 0xcc, 0xae, 0xef, 0x13, 0x8f, 0x17, 0xd3, 0x63, 0xb2, 0xbc, 0x08, 0x70, 0xf3, 0x27, 0x30, 0x6f, 0xf7, 0xc2, 0x90, 0x04, 0xbc, 0x3c, 0x33, 0x26, 0x3f,
0x13, 0x1a, 0x40, 0x37, 0x60, 0xa9, 0x46, 0x1d, 0x4f, 0xe8, 0x0f, 0xc3, 0xfb, 0x5c, 0x83, 0xe5, 0xda, 0x01, 0xba, 0x04, 0xcb, 0x0d, 0xea, 0x05, 0x02, 0x5f, 0xa7, 0xf7, 0x89, 0x01, 0x2b, 0x89,
0x98, 0xa6, 0xe2, 0xeb, 0xc2, 0x1c, 0xb6, 0x2c, 0x9f, 0x30, 0xa6, 0x22, 0xbc, 0x1c, 0x61, 0x7a, 0x4c, 0xe5, 0xd7, 0x87, 0x79, 0xec, 0x38, 0x21, 0x61, 0x4c, 0x65, 0x78, 0x25, 0xe6, 0xb4, 0x13,
0x18, 0xd0, 0xab, 0xdf, 0x7d, 0xf9, 0x6a, 0xfd, 0xfd, 0x73, 0x81, 0x52, 0x1a, 0x8c, 0xd0, 0x04, 0xc9, 0xeb, 0xdf, 0x7d, 0xf6, 0x7c, 0xf3, 0x83, 0x73, 0x91, 0x52, 0x08, 0x96, 0x76, 0x81, 0x96,
0x5a, 0x82, 0xeb, 0x4f, 0x1c, 0x2f, 0x91, 0xf2, 0x0d, 0x58, 0x0c, 0x09, 0x0a, 0x50, 0x1e, 0x66, 0xe1, 0xe2, 0x5d, 0x2f, 0x48, 0x95, 0x7c, 0x0b, 0x96, 0xb4, 0x40, 0x11, 0x2a, 0xc2, 0x1c, 0xe3,
0x19, 0xc7, 0xbc, 0xcb, 0x54, 0xbd, 0xa8, 0x95, 0x70, 0x48, 0xfe, 0x3c, 0x30, 0x8f, 0x1c, 0xfa, 0x98, 0xf7, 0x98, 0xea, 0x17, 0xb5, 0x12, 0x01, 0xc9, 0x3f, 0x0f, 0xcc, 0xe3, 0x80, 0xde, 0x86,
0x26, 0x2c, 0xc7, 0xa4, 0x58, 0xdc, 0x27, 0xac, 0xeb, 0xf2, 0x50, 0x3c, 0x58, 0x09, 0xf1, 0x47, 0x95, 0x44, 0x94, 0x98, 0x87, 0x84, 0xf5, 0x7c, 0xae, 0xcd, 0xa3, 0x95, 0x30, 0xbf, 0x8d, 0xd9,
0x98, 0x6d, 0xfb, 0x8e, 0x19, 0x89, 0xbf, 0xd0, 0x60, 0x39, 0xa6, 0x29, 0xf9, 0x36, 0x2c, 0xd8, 0x7e, 0xe8, 0xd9, 0xb1, 0xf9, 0x53, 0x03, 0x56, 0x12, 0x99, 0xb2, 0xef, 0xc0, 0xa2, 0x8b, 0x59,
0x98, 0x35, 0x3a, 0x82, 0x38, 0xb6, 0x9a, 0x9b, 0xb7, 0x95, 0x59, 0x01, 0xeb, 0x61, 0xd0, 0x7e, 0xb3, 0x2b, 0x84, 0x63, 0xeb, 0xb9, 0x05, 0x57, 0xb9, 0x15, 0xb4, 0x76, 0xa2, 0xed, 0x97, 0xa5,
0x59, 0x32, 0x4d, 0x31, 0x6d, 0x54, 0x9a, 0xd2, 0x13, 0x48, 0xd3, 0x47, 0xc4, 0xb1, 0x5b, 0x51, 0xcb, 0x94, 0xc8, 0x46, 0x95, 0x69, 0x66, 0x02, 0x65, 0xfa, 0x98, 0x78, 0x6e, 0x3b, 0xde, 0x31,
0xc7, 0xf8, 0x29, 0x2c, 0x86, 0x04, 0x05, 0xa8, 0x05, 0xb3, 0x2d, 0x49, 0x19, 0x5b, 0x90, 0x94, 0x7e, 0x0a, 0x4b, 0x5a, 0xa0, 0x08, 0xb5, 0x61, 0xae, 0x2d, 0x25, 0x63, 0x4b, 0x92, 0xc2, 0x47,
0x7e, 0xf4, 0x1f, 0x0d, 0x16, 0xab, 0xd8, 0xc5, 0x5e, 0x94, 0xb9, 0xc9, 0x16, 0xad, 0x7e, 0x00, 0xff, 0x35, 0x60, 0xa9, 0x8e, 0x7d, 0x1c, 0xc4, 0x95, 0x9b, 0x6c, 0xd3, 0x9a, 0x0f, 0x60, 0xa1,
0xf3, 0x4d, 0x97, 0x9a, 0x07, 0x0d, 0x67, 0x7c, 0xfd, 0x61, 0x4e, 0x5a, 0x78, 0x6c, 0xa1, 0x7f, 0xe5, 0x53, 0xfb, 0x41, 0xd3, 0x1b, 0xdf, 0xfe, 0x30, 0x2f, 0x3d, 0xdc, 0x71, 0xd0, 0xbf, 0x72,
0xa6, 0x60, 0x29, 0xf2, 0x76, 0x1a, 0xbf, 0xd1, 0x89, 0xba, 0x2b, 0x5a, 0x62, 0x33, 0xf0, 0x76, 0xb0, 0x1c, 0x47, 0x3b, 0x8d, 0xbf, 0xd1, 0x89, 0x86, 0x2b, 0xb6, 0xc4, 0x56, 0x14, 0xed, 0xf8,
0x7c, 0x2d, 0x51, 0x19, 0x40, 0xff, 0x48, 0xc1, 0xe2, 0x0e, 0xa7, 0x3e, 0xb6, 0xaf, 0x40, 0x21, 0xb6, 0x44, 0xe5, 0x00, 0xfd, 0x33, 0x07, 0x4b, 0x07, 0x9c, 0x86, 0xd8, 0x7d, 0x0d, 0x1a, 0xc9,
0xe9, 0x2d, 0x98, 0xef, 0x50, 0xe6, 0x70, 0xb1, 0xf3, 0xa6, 0xc7, 0x30, 0xa6, 0x44, 0xda, 0xd1, 0x6c, 0xc3, 0x42, 0x97, 0x32, 0x8f, 0x8b, 0x27, 0xef, 0xcc, 0x18, 0xc6, 0x94, 0x18, 0x1d, 0xbd,
0x6b, 0xb1, 0x6d, 0x87, 0x71, 0xbd, 0xfc, 0x25, 0x3b, 0xb1, 0xc0, 0x46, 0x93, 0xe8, 0x4c, 0x62, 0x10, 0x8f, 0x6d, 0x9d, 0xd7, 0x57, 0xbf, 0x65, 0x27, 0x96, 0xd8, 0x78, 0x12, 0x9d, 0x4d, 0x4d,
0x12, 0xfd, 0xb7, 0x06, 0xd9, 0x3a, 0xbd, 0x1a, 0xbd, 0xf0, 0x79, 0x0a, 0xae, 0x2b, 0x5f, 0x2f, 0xa2, 0xff, 0x31, 0xa0, 0xb0, 0x47, 0x5f, 0x8f, 0xbd, 0xf0, 0x49, 0x0e, 0x2e, 0xaa, 0x58, 0x5f,
0x7f, 0x59, 0xe5, 0xe0, 0x9a, 0x47, 0xc3, 0x3e, 0x38, 0x63, 0x04, 0x0b, 0xf4, 0x5f, 0x0d, 0x72, 0xfd, 0xb6, 0x5a, 0x83, 0x0b, 0x01, 0xd5, 0xfb, 0xe0, 0xac, 0x15, 0x2d, 0xd0, 0x0e, 0xac, 0x59,
0x06, 0xe9, 0x10, 0xcc, 0x89, 0x75, 0x7c, 0xda, 0xd3, 0x93, 0x8d, 0x44, 0x7a, 0xbc, 0x69, 0xff, 0xa4, 0x4b, 0x30, 0x27, 0x4e, 0xa6, 0xea, 0xdf, 0x84, 0x59, 0xdf, 0x63, 0x5c, 0x0d, 0x03, 0xeb,
0x2c, 0x05, 0xab, 0x03, 0x3e, 0x4f, 0x63, 0x0a, 0x9a, 0xa8, 0xd3, 0xc9, 0xf4, 0xa7, 0xe3, 0xf4, 0x15, 0x75, 0x58, 0xab, 0xa4, 0x95, 0x2c, 0xa9, 0x82, 0x1a, 0xb0, 0x3e, 0x00, 0xa1, 0x92, 0xf9,
0xff, 0x4f, 0x83, 0xc2, 0xae, 0x8f, 0x3d, 0x86, 0x4d, 0xd1, 0x11, 0x92, 0xa7, 0xb8, 0xcb, 0xfc, 0x76, 0x06, 0xa3, 0x38, 0x88, 0x11, 0x69, 0x29, 0x90, 0xff, 0x19, 0x50, 0xba, 0x17, 0xe2, 0x80,
0xc3, 0xff, 0x65, 0x0a, 0x8a, 0xc3, 0x6e, 0x5f, 0x89, 0x1e, 0x10, 0x9c, 0xbd, 0x55, 0x0f, 0x90, 0x61, 0x5b, 0xb4, 0x66, 0xfa, 0x38, 0xf1, 0x2a, 0x77, 0xe0, 0xaf, 0x72, 0x50, 0x1e, 0x0e, 0xfb,
0x0b, 0xf4, 0xb9, 0x06, 0xa8, 0x2a, 0x38, 0x06, 0x43, 0x52, 0x3d, 0x92, 0x1b, 0x86, 0xaa, 0x87, 0xb5, 0x68, 0xc6, 0xe8, 0x10, 0xa8, 0x9a, 0x51, 0x2e, 0xd0, 0xe7, 0x06, 0xa0, 0xba, 0xd0, 0x18,
0x03, 0x80, 0x00, 0xe9, 0xd8, 0x9e, 0x4c, 0x2c, 0x48, 0xfd, 0xe2, 0x12, 0xfd, 0x51, 0x83, 0xb7, 0x4c, 0x49, 0xfd, 0xb1, 0xdc, 0xb9, 0x54, 0x3f, 0x3c, 0x00, 0x88, 0x98, 0x8e, 0xed, 0x88, 0xbc,
0x4e, 0xc4, 0xa4, 0x92, 0x35, 0x49, 0x50, 0x71, 0xf8, 0x52, 0xf2, 0xd1, 0x85, 0x0a, 0xdf, 0xaf, 0x28, 0xf1, 0xc5, 0x25, 0xfa, 0x93, 0x01, 0x6f, 0x9d, 0xc8, 0x49, 0x15, 0x6b, 0x92, 0xa4, 0x92,
0x35, 0xf8, 0xda, 0x31, 0x50, 0xeb, 0xdd, 0x76, 0x93, 0xf8, 0x71, 0x00, 0xe3, 0x54, 0x6b, 0xe3, 0xf4, 0xe5, 0xe4, 0x19, 0x5a, 0xa5, 0xef, 0x37, 0x06, 0x7c, 0xed, 0x18, 0xaa, 0x7b, 0xbd, 0x4e,
0x2e, 0xf1, 0x2f, 0x34, 0xf8, 0xfa, 0x29, 0xa8, 0xa2, 0x10, 0x4e, 0x0e, 0xd6, 0x31, 0x21, 0xfc, 0x8b, 0x84, 0x49, 0x02, 0x93, 0x52, 0x1b, 0xe3, 0x6e, 0xf1, 0x2f, 0x0c, 0xf8, 0xfa, 0x29, 0xac,
0x85, 0x06, 0x85, 0x8f, 0x3d, 0xd3, 0x25, 0xd3, 0x2e, 0xbb, 0xdf, 0x68, 0x50, 0x1c, 0x06, 0x72, 0xe2, 0x14, 0x4e, 0x8e, 0xd6, 0x31, 0x29, 0xfc, 0x85, 0x01, 0xa5, 0x4f, 0x02, 0xdb, 0x27, 0xd3,
0x71, 0x6a, 0xed, 0x33, 0x0d, 0xde, 0x48, 0xe2, 0x9b, 0x62, 0x81, 0xfd, 0x56, 0x83, 0xb5, 0x51, 0x6e, 0xbb, 0xdf, 0x1a, 0x50, 0x1e, 0x26, 0xf2, 0xf2, 0xf4, 0xda, 0x2f, 0x0d, 0x78, 0x23, 0xcd,
0x50, 0x2e, 0x4e, 0x55, 0x89, 0x83, 0xfd, 0x23, 0xc2, 0x6b, 0xd4, 0xba, 0x22, 0xc3, 0xec, 0x52, 0x6f, 0x8a, 0x0d, 0xf6, 0x3b, 0x03, 0x36, 0x46, 0x51, 0x79, 0x79, 0xba, 0x4a, 0x9c, 0x30, 0x6f,
0xe4, 0xed, 0xe5, 0xdf, 0xca, 0x74, 0x98, 0x31, 0xa9, 0x15, 0x4c, 0xb3, 0x59, 0x43, 0x5e, 0xa3, 0x13, 0xde, 0xa0, 0xce, 0x6b, 0x32, 0x55, 0x2d, 0xc7, 0xd1, 0xbe, 0xfa, 0x8f, 0x32, 0x13, 0x66,
0x5f, 0x69, 0x90, 0xd9, 0x71, 0x6c, 0x6f, 0x3a, 0xd9, 0x0e, 0x4f, 0x53, 0xa9, 0xc4, 0x69, 0xea, 0x6d, 0xea, 0x44, 0x63, 0x55, 0xc1, 0x92, 0xd7, 0xe8, 0xd7, 0x06, 0xe4, 0x0f, 0x3c, 0x37, 0x98,
0x0e, 0x64, 0x03, 0x40, 0x2a, 0x21, 0x5f, 0x85, 0x05, 0xe6, 0xd8, 0x1e, 0xe6, 0x5d, 0x9f, 0xa8, 0x4e, 0xb5, 0xf5, 0x58, 0x9f, 0x4b, 0x8d, 0xf5, 0xd7, 0xa0, 0x10, 0x11, 0x52, 0x05, 0xf9, 0x2a,
0x17, 0x00, 0x31, 0x01, 0xfd, 0x55, 0x83, 0xbc, 0x60, 0x4f, 0xb4, 0xec, 0xe9, 0xb8, 0x52, 0x80, 0x2c, 0x32, 0xcf, 0x0d, 0x30, 0xef, 0x85, 0x44, 0xbd, 0x89, 0x4e, 0x04, 0xe8, 0x6f, 0x06, 0x14,
0x39, 0xde, 0x6b, 0x24, 0xbc, 0x99, 0xe5, 0xbd, 0xef, 0x61, 0x8e, 0xf5, 0x3c, 0xcc, 0xb6, 0x09, 0x85, 0x7a, 0x6a, 0xcb, 0x9e, 0x4e, 0x28, 0x25, 0x98, 0xe7, 0xfd, 0x66, 0x2a, 0x9a, 0x39, 0xde,
0x6f, 0x51, 0x4b, 0xc5, 0x5d, 0xad, 0xd0, 0x3b, 0x50, 0x18, 0x02, 0xae, 0x5c, 0xfe, 0x4a, 0xe0, 0xff, 0x1e, 0xe6, 0xd8, 0x2c, 0xc2, 0x5c, 0x87, 0xf0, 0x36, 0x75, 0x54, 0xde, 0xd5, 0x0a, 0xbd,
0x32, 0xb1, 0x1a, 0xbc, 0xa7, 0x5c, 0x9e, 0x0f, 0x08, 0xbb, 0x3d, 0xf4, 0x17, 0xe1, 0x31, 0xf1, 0x0b, 0xa5, 0x21, 0xe2, 0x2a, 0xe4, 0xaf, 0x44, 0x21, 0x13, 0xa7, 0xc9, 0xfb, 0x2a, 0xe4, 0x85,
0xac, 0xa9, 0x7b, 0x7c, 0xa7, 0xdf, 0xe3, 0xcc, 0xbd, 0x95, 0xc8, 0x9a, 0x94, 0xed, 0x55, 0x31, 0x48, 0x70, 0xaf, 0x8f, 0xfe, 0x2a, 0x22, 0x26, 0x81, 0x33, 0xf5, 0x88, 0xaf, 0x65, 0x23, 0xce,
0x23, 0x61, 0x18, 0xd0, 0x73, 0x0d, 0x0a, 0x43, 0xb0, 0x95, 0xbf, 0x44, 0x6a, 0x1a, 0xdb, 0x16, 0xdf, 0x58, 0x8d, 0xbd, 0x49, 0xdb, 0x7e, 0x1d, 0x33, 0xa2, 0xd3, 0x80, 0x9e, 0x18, 0x50, 0x1a,
0x31, 0xcb, 0x7b, 0x72, 0xa7, 0xaa, 0xc3, 0x1b, 0x02, 0x81, 0x81, 0x9f, 0x8d, 0x88, 0x5d, 0x65, 0xa2, 0xad, 0xe2, 0x25, 0x12, 0x69, 0x6c, 0x8f, 0x88, 0x39, 0xde, 0x97, 0x4f, 0xaa, 0x3d, 0x78,
0x30, 0xe6, 0x99, 0x7b, 0xb9, 0x3e, 0x7f, 0xb6, 0x7d, 0x4a, 0xf7, 0x77, 0x7b, 0x89, 0x4c, 0xfc, 0x43, 0x30, 0xb0, 0xf0, 0xa3, 0x11, 0xb9, 0xab, 0x0d, 0xe6, 0x3c, 0x7f, 0x63, 0x2d, 0x13, 0xcf,
0x5c, 0x83, 0xb5, 0x51, 0x0a, 0x27, 0xeb, 0xd5, 0x03, 0xc8, 0xd4, 0xb0, 0xeb, 0x86, 0x7e, 0xdc, 0x7e, 0x48, 0xe9, 0xe1, 0xbd, 0x7e, 0xaa, 0x12, 0x3f, 0x37, 0x60, 0x63, 0x14, 0xe0, 0x64, 0xa3,
0x1d, 0xf6, 0x63, 0x64, 0x5e, 0x62, 0x37, 0x6e, 0x43, 0x36, 0x50, 0x30, 0xf2, 0x71, 0x7d, 0x36, 0xba, 0x05, 0xf9, 0x06, 0xf6, 0x7d, 0x1d, 0xc7, 0xf5, 0xe1, 0x38, 0x46, 0xd6, 0x25, 0x09, 0xe3,
0x7a, 0x5c, 0xff, 0x21, 0xe8, 0x1f, 0x30, 0xee, 0xb4, 0x31, 0x27, 0x8f, 0x30, 0x3b, 0xbf, 0xbd, 0x2a, 0x14, 0x22, 0x80, 0x91, 0xef, 0x8d, 0x0b, 0xf1, 0x7b, 0xe3, 0x8f, 0xc0, 0xfc, 0x90, 0x71,
0xcf, 0x35, 0x58, 0xe9, 0x53, 0x74, 0xb2, 0x5d, 0xbd, 0x09, 0x69, 0x1b, 0xb3, 0xf1, 0xbd, 0x06, 0xaf, 0x83, 0x39, 0xb9, 0x8d, 0xd9, 0xf9, 0xfd, 0x7d, 0x6e, 0xc0, 0x6a, 0x06, 0xe8, 0x64, 0xbf,
0xb2, 0x31, 0x43, 0x2f, 0x34, 0xd0, 0xe5, 0xe8, 0x37, 0xc5, 0x41, 0xea, 0x01, 0xac, 0xf4, 0x41, 0x66, 0x0b, 0x66, 0x5c, 0xcc, 0xc6, 0xf7, 0x7b, 0x84, 0x8b, 0x19, 0x7a, 0x6a, 0x80, 0x29, 0x47,
0x50, 0x61, 0xd9, 0x80, 0x6b, 0x92, 0x47, 0x99, 0xd7, 0xfb, 0x82, 0x2b, 0x05, 0x8c, 0x80, 0x41, 0xbf, 0x29, 0x0e, 0x52, 0xb7, 0x60, 0x35, 0x43, 0x41, 0xa5, 0x65, 0x0b, 0x2e, 0x48, 0x1d, 0xe5,
0xd4, 0x63, 0x4e, 0x69, 0x98, 0xe2, 0x90, 0xf3, 0x10, 0x56, 0x07, 0x40, 0x7c, 0x69, 0x47, 0x5e, 0xde, 0xcc, 0x24, 0x57, 0x1a, 0x58, 0x91, 0x82, 0xe8, 0xc7, 0x35, 0x85, 0x30, 0xc5, 0x21, 0x67,
0x68, 0x7d, 0x67, 0xcd, 0xfe, 0x9c, 0x4c, 0xae, 0x59, 0x8c, 0x80, 0xa0, 0x5c, 0xa9, 0xc4, 0xad, 0x07, 0xd6, 0x07, 0x48, 0x7c, 0xe9, 0x40, 0x9e, 0x1a, 0x99, 0xb3, 0x66, 0xb6, 0x26, 0x93, 0xdb,
0x2f, 0xc0, 0x50, 0xec, 0x2f, 0xf9, 0x44, 0x37, 0x08, 0xfb, 0x9f, 0x38, 0x5c, 0xf4, 0x29, 0xac, 0x2c, 0x46, 0x50, 0x50, 0xa1, 0xd4, 0x92, 0xad, 0x2f, 0xe2, 0x50, 0xce, 0xb6, 0x7c, 0x6a, 0x37,
0x86, 0x89, 0x7f, 0xe8, 0x59, 0x8f, 0x3d, 0x8b, 0xf4, 0xa6, 0x51, 0x74, 0x62, 0x0c, 0x74, 0x84, 0xd0, 0xfb, 0x9f, 0x38, 0x5c, 0x64, 0x00, 0xeb, 0xba, 0xf0, 0x3b, 0x81, 0x73, 0x27, 0x70, 0x48,
0xf1, 0x70, 0x0c, 0x94, 0x0b, 0xf4, 0x43, 0xb8, 0x7d, 0x1a, 0xd6, 0xf3, 0x47, 0xe2, 0x4f, 0x1a, 0x7f, 0x1a, 0x4d, 0x27, 0xc6, 0x40, 0x4f, 0x38, 0xd7, 0x63, 0xa0, 0x5c, 0xa0, 0x1f, 0xc2, 0xd5,
0x7c, 0x63, 0x58, 0x7b, 0x50, 0x2c, 0xc3, 0xb1, 0x98, 0xec, 0x48, 0x3c, 0x22, 0x16, 0x3f, 0x82, 0xd3, 0xb8, 0x9e, 0x3f, 0x13, 0x7f, 0x36, 0xe0, 0x1b, 0xc3, 0xe8, 0x51, 0xb3, 0x0c, 0xe7, 0x62,
0x8d, 0xd3, 0xd1, 0x9e, 0x3f, 0x1a, 0x3f, 0xd3, 0xfa, 0x0a, 0xcd, 0x20, 0x26, 0x71, 0x3a, 0x7c, 0xb2, 0x23, 0xf1, 0x88, 0x5c, 0xfc, 0x08, 0xb6, 0x4e, 0x67, 0x7b, 0xfe, 0x6c, 0xfc, 0xcc, 0xc8,
0xc2, 0xc5, 0xfe, 0x7d, 0x58, 0x1b, 0x85, 0x41, 0x79, 0xb5, 0x09, 0xc0, 0x7b, 0x0d, 0x3f, 0xa0, 0x34, 0x9a, 0x45, 0x6c, 0xe2, 0x75, 0xf9, 0x84, 0x9b, 0xfd, 0xfb, 0xb0, 0x31, 0x8a, 0x83, 0x8a,
0x8e, 0xdc, 0x1b, 0x43, 0x89, 0x05, 0xde, 0x53, 0x97, 0xe8, 0xf7, 0x1a, 0xac, 0xcb, 0xb3, 0xce, 0x6a, 0x1b, 0x80, 0xf7, 0x9b, 0x61, 0x24, 0x1d, 0xf9, 0x6c, 0xd4, 0x16, 0x8b, 0xbc, 0xaf, 0x2e,
0xc5, 0xae, 0xf4, 0x1a, 0xdc, 0x3c, 0x1e, 0xa5, 0xf2, 0x7f, 0x1d, 0x32, 0x5d, 0xc1, 0xd3, 0x88, 0xd1, 0x1f, 0x0c, 0xd8, 0x94, 0x67, 0x9d, 0x97, 0xbb, 0xd3, 0x1b, 0x70, 0xf9, 0x78, 0x96, 0x2a,
0xdb, 0x57, 0xd6, 0x00, 0x49, 0x92, 0x42, 0xe8, 0x0f, 0x1a, 0xdc, 0x4a, 0x6a, 0xb9, 0xb0, 0xb5, 0xfe, 0x4d, 0xc8, 0xf7, 0x84, 0x4e, 0x33, 0xd9, 0xbe, 0x0a, 0x16, 0x48, 0x91, 0x34, 0x42, 0x7f,
0xfc, 0x01, 0xa0, 0x93, 0x70, 0x9e, 0xd5, 0x5f, 0x1d, 0x96, 0x6b, 0xb4, 0xdd, 0x71, 0x5c, 0xe2, 0x34, 0xe0, 0x4a, 0x1a, 0xe5, 0xa5, 0xed, 0xe5, 0x0f, 0x01, 0x9d, 0xc4, 0xf3, 0xac, 0xf1, 0x9a,
0x47, 0xaf, 0xc8, 0x2b, 0x70, 0x23, 0x41, 0x8b, 0x67, 0x77, 0x33, 0x24, 0x86, 0xb3, 0x7b, 0x44, 0xb0, 0xd2, 0xa0, 0x9d, 0xae, 0xe7, 0x93, 0x30, 0xfe, 0xad, 0xb6, 0x06, 0x97, 0x52, 0xb2, 0x64,
0x40, 0x77, 0x21, 0xaf, 0x44, 0x76, 0xa8, 0xeb, 0x58, 0x0e, 0x3f, 0x0a, 0x43, 0x95, 0x87, 0xd9, 0x76, 0xb7, 0xb5, 0x50, 0xcf, 0xee, 0xb1, 0x00, 0x5d, 0x87, 0xa2, 0x32, 0x39, 0xa0, 0xbe, 0xe7,
0xe0, 0xd3, 0xa3, 0x70, 0x14, 0x08, 0x56, 0xe8, 0x5b, 0x50, 0x18, 0x92, 0x50, 0xa6, 0xc2, 0xc3, 0x78, 0xfc, 0xb1, 0x4e, 0x55, 0x11, 0xe6, 0xa2, 0x6f, 0x60, 0xf4, 0x28, 0x10, 0xad, 0xd0, 0xb7,
0x8d, 0x96, 0x38, 0xdc, 0xbc, 0x1d, 0x61, 0xda, 0xda, 0xda, 0x3a, 0x4d, 0xf7, 0x06, 0xe8, 0x49, 0xa0, 0x34, 0x64, 0xa1, 0x5c, 0xe9, 0xc3, 0x8d, 0x91, 0x3a, 0xdc, 0xbc, 0x13, 0x73, 0xda, 0xdd,
0xe6, 0x13, 0xd4, 0x96, 0x61, 0x35, 0x44, 0x41, 0xfc, 0x0e, 0x89, 0x1f, 0xff, 0x1e, 0xa7, 0xfa, 0xdd, 0x3d, 0x0d, 0x7b, 0x0b, 0xcc, 0xb4, 0xf2, 0x09, 0xb0, 0x55, 0x58, 0xd7, 0x2c, 0x48, 0xd8,
0x4e, 0xec, 0x68, 0x28, 0x70, 0x82, 0xfa, 0x0d, 0x58, 0xae, 0x93, 0x67, 0x1f, 0x3a, 0x2e, 0x8f, 0x25, 0xc9, 0xeb, 0xdf, 0xe3, 0xa0, 0xaf, 0x25, 0x81, 0x6a, 0x83, 0x13, 0xe0, 0xb7, 0x60, 0x65,
0x77, 0xf0, 0x1c, 0x5c, 0xeb, 0x60, 0x1f, 0xb7, 0x15, 0x63, 0xb0, 0x40, 0x77, 0xe1, 0x46, 0x82, 0x8f, 0x3c, 0xfa, 0xc8, 0xf3, 0x79, 0xf2, 0x04, 0x5f, 0x83, 0x0b, 0x5d, 0x1c, 0xe2, 0x8e, 0x52,
0x33, 0x3e, 0x3c, 0xec, 0x4b, 0x4a, 0x58, 0x67, 0x59, 0x63, 0x3e, 0x20, 0x3c, 0xb6, 0x50, 0x01, 0x8c, 0x16, 0xe8, 0x3a, 0x5c, 0x4a, 0x69, 0x26, 0x87, 0x87, 0x43, 0x29, 0xd1, 0x7d, 0x56, 0xb0,
0x56, 0xeb, 0xe4, 0x99, 0xcc, 0x62, 0x9f, 0x01, 0x74, 0x1f, 0xf2, 0x83, 0x37, 0xce, 0xa2, 0xef, 0x16, 0x22, 0xc1, 0x1d, 0x07, 0x95, 0x60, 0x7d, 0x8f, 0x3c, 0x92, 0x55, 0xcc, 0x38, 0x40, 0x37,
0x16, 0xac, 0x6f, 0x13, 0xcf, 0x72, 0x3c, 0x3b, 0xd1, 0x3f, 0xfa, 0x35, 0x3f, 0x80, 0x9b, 0xc7, 0xa1, 0x38, 0x78, 0xe3, 0x2c, 0x78, 0x57, 0x60, 0x73, 0x9f, 0x04, 0x8e, 0x17, 0xb8, 0xa9, 0xfd,
0xb3, 0x9c, 0xc5, 0xc6, 0x7d, 0xc8, 0x7f, 0xec, 0x39, 0x1e, 0xe3, 0xd8, 0x75, 0xfb, 0xa3, 0x72, 0x23, 0x8b, 0x7c, 0x0b, 0x2e, 0x1f, 0xaf, 0x72, 0x16, 0x1f, 0x37, 0xa1, 0xf8, 0x49, 0xe0, 0x05,
0xa2, 0x58, 0x05, 0x0a, 0x43, 0x62, 0x23, 0x27, 0xcd, 0xf9, 0x68, 0xc2, 0xdd, 0x84, 0x5c, 0xc0, 0x8c, 0x63, 0xdf, 0xcf, 0x66, 0xe5, 0x44, 0xb3, 0x1a, 0x94, 0x86, 0xcc, 0x46, 0x4e, 0x9a, 0x0b,
0x59, 0x6b, 0x61, 0xcf, 0x26, 0xec, 0x4c, 0x76, 0xde, 0x86, 0xd5, 0x01, 0xa1, 0x38, 0xb7, 0x8e, 0xf1, 0x84, 0xbb, 0x0d, 0x6b, 0x91, 0x66, 0xa3, 0x8d, 0x03, 0x97, 0xb0, 0x33, 0xf9, 0x79, 0x07,
0xb7, 0x4f, 0xc3, 0xdc, 0x8a, 0x6b, 0x91, 0xb1, 0x80, 0x79, 0x8b, 0xda, 0x67, 0x53, 0xff, 0x3e, 0xd6, 0x07, 0x8c, 0x92, 0xda, 0x7a, 0xc1, 0x21, 0xd5, 0xb5, 0x15, 0xd7, 0xa2, 0x62, 0x91, 0xf2,
0xe8, 0x49, 0x09, 0xa5, 0xfb, 0x36, 0xcc, 0xb8, 0xd4, 0x0e, 0x5f, 0xb9, 0xe8, 0x03, 0x03, 0xf7, 0x2e, 0x75, 0xcf, 0x06, 0xff, 0x01, 0x98, 0x69, 0x0b, 0x85, 0x7d, 0x15, 0x66, 0x7d, 0xea, 0xea,
0x16, 0xb5, 0x0d, 0x79, 0x1f, 0xbd, 0x05, 0x99, 0xa4, 0xa5, 0xd1, 0x65, 0xf4, 0x0e, 0x64, 0xcf, 0x2f, 0x20, 0xcc, 0x81, 0x81, 0x7b, 0x97, 0xba, 0x96, 0xbc, 0x8f, 0xde, 0x82, 0x7c, 0xda, 0xd3,
0xa3, 0xbc, 0xfa, 0x67, 0x0d, 0x32, 0x26, 0x6d, 0x97, 0xd4, 0x57, 0x89, 0x55, 0x5d, 0x7d, 0x22, 0xe8, 0x36, 0x7a, 0x17, 0x0a, 0xe7, 0x01, 0xaf, 0xff, 0xc5, 0x80, 0xbc, 0x4d, 0x3b, 0xfa, 0xd7,
0x63, 0x90, 0xa7, 0x06, 0x61, 0xb2, 0x55, 0x6d, 0x6b, 0x3f, 0x78, 0x72, 0xe6, 0x7e, 0x16, 0x2d, 0x92, 0xba, 0xa9, 0xbe, 0xd5, 0xb0, 0xc8, 0x43, 0x8b, 0x30, 0xb9, 0x55, 0xed, 0x1b, 0x3f, 0xb8,
0x6c, 0xe2, 0x05, 0x9f, 0x27, 0x96, 0x6d, 0x5a, 0x56, 0x9f, 0x44, 0xbe, 0x27, 0xfe, 0x1f, 0x56, 0x7b, 0xe6, 0xfd, 0x2c, 0x5e, 0xb8, 0x24, 0x88, 0xbe, 0x93, 0xab, 0xba, 0xb4, 0xaa, 0xbe, 0xcd,
0x7e, 0x97, 0x4a, 0x1b, 0x9f, 0x7c, 0xf2, 0x45, 0x6a, 0xce, 0x10, 0x46, 0xf7, 0x2a, 0x7f, 0x0f, 0x7b, 0x5f, 0xfc, 0x7f, 0x54, 0xfb, 0x7d, 0x6e, 0xc6, 0xfa, 0xf4, 0xd3, 0x2f, 0x72, 0xf3, 0x96,
0xae, 0x3e, 0xdd, 0xab, 0xfc, 0x2b, 0xb5, 0xa2, 0xae, 0x3e, 0x7d, 0xb4, 0x5d, 0x15, 0xfa, 0xc4, 0x70, 0x7a, 0xbf, 0xf6, 0x8f, 0xe8, 0xea, 0xb3, 0xfb, 0xb5, 0x7f, 0xe7, 0x56, 0xd5, 0xd5, 0x67,
0x3e, 0xfc, 0x3a, 0x35, 0x2f, 0xa8, 0xef, 0xbe, 0xbb, 0x57, 0x69, 0xce, 0x4a, 0x9d, 0x9b, 0xff, 0xb7, 0xf7, 0xeb, 0x02, 0x4f, 0x3c, 0x87, 0x5f, 0xe4, 0x16, 0x84, 0xf4, 0xbd, 0xf7, 0xee, 0xd7,
0x0f, 0x00, 0x00, 0xff, 0xff, 0xcf, 0x0b, 0xcb, 0xce, 0x66, 0x29, 0x00, 0x00, 0x5a, 0x73, 0x12, 0x73, 0xfb, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf5, 0xd3, 0x4b, 0xb2, 0xef,
0x27, 0x00, 0x00,
} }
...@@ -22,6 +22,82 @@ var _ = math.Inf ...@@ -22,6 +22,82 @@ var _ = math.Inf
// proto package needs to be updated. // proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
type RequestBroadcastTx struct {
Tx []byte `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RequestBroadcastTx) Reset() { *m = RequestBroadcastTx{} }
func (m *RequestBroadcastTx) String() string { return proto.CompactTextString(m) }
func (*RequestBroadcastTx) ProtoMessage() {}
func (*RequestBroadcastTx) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{0}
}
func (m *RequestBroadcastTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RequestBroadcastTx.Unmarshal(m, b)
}
func (m *RequestBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_RequestBroadcastTx.Marshal(b, m, deterministic)
}
func (m *RequestBroadcastTx) XXX_Merge(src proto.Message) {
xxx_messageInfo_RequestBroadcastTx.Merge(m, src)
}
func (m *RequestBroadcastTx) XXX_Size() int {
return xxx_messageInfo_RequestBroadcastTx.Size(m)
}
func (m *RequestBroadcastTx) XXX_DiscardUnknown() {
xxx_messageInfo_RequestBroadcastTx.DiscardUnknown(m)
}
var xxx_messageInfo_RequestBroadcastTx proto.InternalMessageInfo
func (m *RequestBroadcastTx) GetTx() []byte {
if m != nil {
return m.Tx
}
return nil
}
type ResponseBroadcastTx struct {
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ResponseBroadcastTx) Reset() { *m = ResponseBroadcastTx{} }
func (m *ResponseBroadcastTx) String() string { return proto.CompactTextString(m) }
func (*ResponseBroadcastTx) ProtoMessage() {}
func (*ResponseBroadcastTx) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{1}
}
func (m *ResponseBroadcastTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseBroadcastTx.Unmarshal(m, b)
}
func (m *ResponseBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ResponseBroadcastTx.Marshal(b, m, deterministic)
}
func (m *ResponseBroadcastTx) XXX_Merge(src proto.Message) {
xxx_messageInfo_ResponseBroadcastTx.Merge(m, src)
}
func (m *ResponseBroadcastTx) XXX_Size() int {
return xxx_messageInfo_ResponseBroadcastTx.Size(m)
}
func (m *ResponseBroadcastTx) XXX_DiscardUnknown() {
xxx_messageInfo_ResponseBroadcastTx.DiscardUnknown(m)
}
var xxx_messageInfo_ResponseBroadcastTx proto.InternalMessageInfo
func (m *ResponseBroadcastTx) GetHash() []byte {
if m != nil {
return m.Hash
}
return nil
}
type BroadcastEthTxWithFromRequest struct { type BroadcastEthTxWithFromRequest struct {
EthTx *v1.EthTransaction `protobuf:"bytes,1,opt,name=ethTx,proto3" json:"ethTx,omitempty"` EthTx *v1.EthTransaction `protobuf:"bytes,1,opt,name=ethTx,proto3" json:"ethTx,omitempty"`
From string `protobuf:"bytes,2,opt,name=from,proto3" json:"from,omitempty"` From string `protobuf:"bytes,2,opt,name=from,proto3" json:"from,omitempty"`
...@@ -34,7 +110,7 @@ func (m *BroadcastEthTxWithFromRequest) Reset() { *m = BroadcastEthTxWit ...@@ -34,7 +110,7 @@ func (m *BroadcastEthTxWithFromRequest) Reset() { *m = BroadcastEthTxWit
func (m *BroadcastEthTxWithFromRequest) String() string { return proto.CompactTextString(m) } func (m *BroadcastEthTxWithFromRequest) String() string { return proto.CompactTextString(m) }
func (*BroadcastEthTxWithFromRequest) ProtoMessage() {} func (*BroadcastEthTxWithFromRequest) ProtoMessage() {}
func (*BroadcastEthTxWithFromRequest) Descriptor() ([]byte, []int) { func (*BroadcastEthTxWithFromRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{0} return fileDescriptor_2dc67120507b0009, []int{2}
} }
func (m *BroadcastEthTxWithFromRequest) XXX_Unmarshal(b []byte) error { func (m *BroadcastEthTxWithFromRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BroadcastEthTxWithFromRequest.Unmarshal(m, b) return xxx_messageInfo_BroadcastEthTxWithFromRequest.Unmarshal(m, b)
...@@ -68,6 +144,166 @@ func (m *BroadcastEthTxWithFromRequest) GetFrom() string { ...@@ -68,6 +144,166 @@ func (m *BroadcastEthTxWithFromRequest) GetFrom() string {
return "" return ""
} }
type BroadcastLegacyEthTxWithFromRequest struct {
LegacyTx *v1.EthLegacyTx `protobuf:"bytes,1,opt,name=LegacyTx,proto3" json:"LegacyTx,omitempty"`
From string `protobuf:"bytes,2,opt,name=from,proto3" json:"from,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BroadcastLegacyEthTxWithFromRequest) Reset() { *m = BroadcastLegacyEthTxWithFromRequest{} }
func (m *BroadcastLegacyEthTxWithFromRequest) String() string { return proto.CompactTextString(m) }
func (*BroadcastLegacyEthTxWithFromRequest) ProtoMessage() {}
func (*BroadcastLegacyEthTxWithFromRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{3}
}
func (m *BroadcastLegacyEthTxWithFromRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BroadcastLegacyEthTxWithFromRequest.Unmarshal(m, b)
}
func (m *BroadcastLegacyEthTxWithFromRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BroadcastLegacyEthTxWithFromRequest.Marshal(b, m, deterministic)
}
func (m *BroadcastLegacyEthTxWithFromRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_BroadcastLegacyEthTxWithFromRequest.Merge(m, src)
}
func (m *BroadcastLegacyEthTxWithFromRequest) XXX_Size() int {
return xxx_messageInfo_BroadcastLegacyEthTxWithFromRequest.Size(m)
}
func (m *BroadcastLegacyEthTxWithFromRequest) XXX_DiscardUnknown() {
xxx_messageInfo_BroadcastLegacyEthTxWithFromRequest.DiscardUnknown(m)
}
var xxx_messageInfo_BroadcastLegacyEthTxWithFromRequest proto.InternalMessageInfo
func (m *BroadcastLegacyEthTxWithFromRequest) GetLegacyTx() *v1.EthLegacyTx {
if m != nil {
return m.LegacyTx
}
return nil
}
func (m *BroadcastLegacyEthTxWithFromRequest) GetFrom() string {
if m != nil {
return m.From
}
return ""
}
type ResponseLegacyEthTxBroadcastTx struct {
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ResponseLegacyEthTxBroadcastTx) Reset() { *m = ResponseLegacyEthTxBroadcastTx{} }
func (m *ResponseLegacyEthTxBroadcastTx) String() string { return proto.CompactTextString(m) }
func (*ResponseLegacyEthTxBroadcastTx) ProtoMessage() {}
func (*ResponseLegacyEthTxBroadcastTx) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{4}
}
func (m *ResponseLegacyEthTxBroadcastTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseLegacyEthTxBroadcastTx.Unmarshal(m, b)
}
func (m *ResponseLegacyEthTxBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ResponseLegacyEthTxBroadcastTx.Marshal(b, m, deterministic)
}
func (m *ResponseLegacyEthTxBroadcastTx) XXX_Merge(src proto.Message) {
xxx_messageInfo_ResponseLegacyEthTxBroadcastTx.Merge(m, src)
}
func (m *ResponseLegacyEthTxBroadcastTx) XXX_Size() int {
return xxx_messageInfo_ResponseLegacyEthTxBroadcastTx.Size(m)
}
func (m *ResponseLegacyEthTxBroadcastTx) XXX_DiscardUnknown() {
xxx_messageInfo_ResponseLegacyEthTxBroadcastTx.DiscardUnknown(m)
}
var xxx_messageInfo_ResponseLegacyEthTxBroadcastTx proto.InternalMessageInfo
func (m *ResponseLegacyEthTxBroadcastTx) GetHash() []byte {
if m != nil {
return m.Hash
}
return nil
}
type BroadcastLegacyEthTxsWithFromRequest struct {
List []*BroadcastLegacyEthTxWithFromRequest `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BroadcastLegacyEthTxsWithFromRequest) Reset() { *m = BroadcastLegacyEthTxsWithFromRequest{} }
func (m *BroadcastLegacyEthTxsWithFromRequest) String() string { return proto.CompactTextString(m) }
func (*BroadcastLegacyEthTxsWithFromRequest) ProtoMessage() {}
func (*BroadcastLegacyEthTxsWithFromRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{5}
}
func (m *BroadcastLegacyEthTxsWithFromRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BroadcastLegacyEthTxsWithFromRequest.Unmarshal(m, b)
}
func (m *BroadcastLegacyEthTxsWithFromRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BroadcastLegacyEthTxsWithFromRequest.Marshal(b, m, deterministic)
}
func (m *BroadcastLegacyEthTxsWithFromRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_BroadcastLegacyEthTxsWithFromRequest.Merge(m, src)
}
func (m *BroadcastLegacyEthTxsWithFromRequest) XXX_Size() int {
return xxx_messageInfo_BroadcastLegacyEthTxsWithFromRequest.Size(m)
}
func (m *BroadcastLegacyEthTxsWithFromRequest) XXX_DiscardUnknown() {
xxx_messageInfo_BroadcastLegacyEthTxsWithFromRequest.DiscardUnknown(m)
}
var xxx_messageInfo_BroadcastLegacyEthTxsWithFromRequest proto.InternalMessageInfo
func (m *BroadcastLegacyEthTxsWithFromRequest) GetList() []*BroadcastLegacyEthTxWithFromRequest {
if m != nil {
return m.List
}
return nil
}
type ResponseLegacyEthTxsBroadcastTx struct {
List []*ResponseLegacyEthTxBroadcastTx `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ResponseLegacyEthTxsBroadcastTx) Reset() { *m = ResponseLegacyEthTxsBroadcastTx{} }
func (m *ResponseLegacyEthTxsBroadcastTx) String() string { return proto.CompactTextString(m) }
func (*ResponseLegacyEthTxsBroadcastTx) ProtoMessage() {}
func (*ResponseLegacyEthTxsBroadcastTx) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{6}
}
func (m *ResponseLegacyEthTxsBroadcastTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseLegacyEthTxsBroadcastTx.Unmarshal(m, b)
}
func (m *ResponseLegacyEthTxsBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ResponseLegacyEthTxsBroadcastTx.Marshal(b, m, deterministic)
}
func (m *ResponseLegacyEthTxsBroadcastTx) XXX_Merge(src proto.Message) {
xxx_messageInfo_ResponseLegacyEthTxsBroadcastTx.Merge(m, src)
}
func (m *ResponseLegacyEthTxsBroadcastTx) XXX_Size() int {
return xxx_messageInfo_ResponseLegacyEthTxsBroadcastTx.Size(m)
}
func (m *ResponseLegacyEthTxsBroadcastTx) XXX_DiscardUnknown() {
xxx_messageInfo_ResponseLegacyEthTxsBroadcastTx.DiscardUnknown(m)
}
var xxx_messageInfo_ResponseLegacyEthTxsBroadcastTx proto.InternalMessageInfo
func (m *ResponseLegacyEthTxsBroadcastTx) GetList() []*ResponseLegacyEthTxBroadcastTx {
if m != nil {
return m.List
}
return nil
}
type BroadcastEthTxWithFromRequests struct { type BroadcastEthTxWithFromRequests struct {
List []*BroadcastEthTxWithFromRequest `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"` List []*BroadcastEthTxWithFromRequest `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
...@@ -79,7 +315,7 @@ func (m *BroadcastEthTxWithFromRequests) Reset() { *m = BroadcastEthTxWi ...@@ -79,7 +315,7 @@ func (m *BroadcastEthTxWithFromRequests) Reset() { *m = BroadcastEthTxWi
func (m *BroadcastEthTxWithFromRequests) String() string { return proto.CompactTextString(m) } func (m *BroadcastEthTxWithFromRequests) String() string { return proto.CompactTextString(m) }
func (*BroadcastEthTxWithFromRequests) ProtoMessage() {} func (*BroadcastEthTxWithFromRequests) ProtoMessage() {}
func (*BroadcastEthTxWithFromRequests) Descriptor() ([]byte, []int) { func (*BroadcastEthTxWithFromRequests) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{1} return fileDescriptor_2dc67120507b0009, []int{7}
} }
func (m *BroadcastEthTxWithFromRequests) XXX_Unmarshal(b []byte) error { func (m *BroadcastEthTxWithFromRequests) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BroadcastEthTxWithFromRequests.Unmarshal(m, b) return xxx_messageInfo_BroadcastEthTxWithFromRequests.Unmarshal(m, b)
...@@ -117,7 +353,7 @@ func (m *ResponseBroadcastTxs) Reset() { *m = ResponseBroadcastTxs{} } ...@@ -117,7 +353,7 @@ func (m *ResponseBroadcastTxs) Reset() { *m = ResponseBroadcastTxs{} }
func (m *ResponseBroadcastTxs) String() string { return proto.CompactTextString(m) } func (m *ResponseBroadcastTxs) String() string { return proto.CompactTextString(m) }
func (*ResponseBroadcastTxs) ProtoMessage() {} func (*ResponseBroadcastTxs) ProtoMessage() {}
func (*ResponseBroadcastTxs) Descriptor() ([]byte, []int) { func (*ResponseBroadcastTxs) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{2} return fileDescriptor_2dc67120507b0009, []int{8}
} }
func (m *ResponseBroadcastTxs) XXX_Unmarshal(b []byte) error { func (m *ResponseBroadcastTxs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseBroadcastTxs.Unmarshal(m, b) return xxx_messageInfo_ResponseBroadcastTxs.Unmarshal(m, b)
...@@ -154,7 +390,7 @@ func (m *RequestPing) Reset() { *m = RequestPing{} } ...@@ -154,7 +390,7 @@ func (m *RequestPing) Reset() { *m = RequestPing{} }
func (m *RequestPing) String() string { return proto.CompactTextString(m) } func (m *RequestPing) String() string { return proto.CompactTextString(m) }
func (*RequestPing) ProtoMessage() {} func (*RequestPing) ProtoMessage() {}
func (*RequestPing) Descriptor() ([]byte, []int) { func (*RequestPing) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{3} return fileDescriptor_2dc67120507b0009, []int{9}
} }
func (m *RequestPing) XXX_Unmarshal(b []byte) error { func (m *RequestPing) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RequestPing.Unmarshal(m, b) return xxx_messageInfo_RequestPing.Unmarshal(m, b)
...@@ -184,7 +420,7 @@ func (m *ResponsePing) Reset() { *m = ResponsePing{} } ...@@ -184,7 +420,7 @@ func (m *ResponsePing) Reset() { *m = ResponsePing{} }
func (m *ResponsePing) String() string { return proto.CompactTextString(m) } func (m *ResponsePing) String() string { return proto.CompactTextString(m) }
func (*ResponsePing) ProtoMessage() {} func (*ResponsePing) ProtoMessage() {}
func (*ResponsePing) Descriptor() ([]byte, []int) { func (*ResponsePing) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{4} return fileDescriptor_2dc67120507b0009, []int{10}
} }
func (m *ResponsePing) XXX_Unmarshal(b []byte) error { func (m *ResponsePing) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponsePing.Unmarshal(m, b) return xxx_messageInfo_ResponsePing.Unmarshal(m, b)
...@@ -204,177 +440,112 @@ func (m *ResponsePing) XXX_DiscardUnknown() { ...@@ -204,177 +440,112 @@ func (m *ResponsePing) XXX_DiscardUnknown() {
var xxx_messageInfo_ResponsePing proto.InternalMessageInfo var xxx_messageInfo_ResponsePing proto.InternalMessageInfo
type RequestBroadcastTx struct {
Tx []byte `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RequestBroadcastTx) Reset() { *m = RequestBroadcastTx{} }
func (m *RequestBroadcastTx) String() string { return proto.CompactTextString(m) }
func (*RequestBroadcastTx) ProtoMessage() {}
func (*RequestBroadcastTx) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{5}
}
func (m *RequestBroadcastTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RequestBroadcastTx.Unmarshal(m, b)
}
func (m *RequestBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_RequestBroadcastTx.Marshal(b, m, deterministic)
}
func (m *RequestBroadcastTx) XXX_Merge(src proto.Message) {
xxx_messageInfo_RequestBroadcastTx.Merge(m, src)
}
func (m *RequestBroadcastTx) XXX_Size() int {
return xxx_messageInfo_RequestBroadcastTx.Size(m)
}
func (m *RequestBroadcastTx) XXX_DiscardUnknown() {
xxx_messageInfo_RequestBroadcastTx.DiscardUnknown(m)
}
var xxx_messageInfo_RequestBroadcastTx proto.InternalMessageInfo
func (m *RequestBroadcastTx) GetTx() []byte {
if m != nil {
return m.Tx
}
return nil
}
type ResponseBroadcastTx struct {
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ResponseBroadcastTx) Reset() { *m = ResponseBroadcastTx{} }
func (m *ResponseBroadcastTx) String() string { return proto.CompactTextString(m) }
func (*ResponseBroadcastTx) ProtoMessage() {}
func (*ResponseBroadcastTx) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{6}
}
func (m *ResponseBroadcastTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseBroadcastTx.Unmarshal(m, b)
}
func (m *ResponseBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ResponseBroadcastTx.Marshal(b, m, deterministic)
}
func (m *ResponseBroadcastTx) XXX_Merge(src proto.Message) {
xxx_messageInfo_ResponseBroadcastTx.Merge(m, src)
}
func (m *ResponseBroadcastTx) XXX_Size() int {
return xxx_messageInfo_ResponseBroadcastTx.Size(m)
}
func (m *ResponseBroadcastTx) XXX_DiscardUnknown() {
xxx_messageInfo_ResponseBroadcastTx.DiscardUnknown(m)
}
var xxx_messageInfo_ResponseBroadcastTx proto.InternalMessageInfo
func (m *ResponseBroadcastTx) GetHash() []byte {
if m != nil {
return m.Hash
}
return nil
}
func init() { func init() {
proto.RegisterType((*RequestBroadcastTx)(nil), "ring.v1.RequestBroadcastTx")
proto.RegisterType((*ResponseBroadcastTx)(nil), "ring.v1.ResponseBroadcastTx")
proto.RegisterType((*BroadcastEthTxWithFromRequest)(nil), "ring.v1.broadcastEthTxWithFromRequest") proto.RegisterType((*BroadcastEthTxWithFromRequest)(nil), "ring.v1.broadcastEthTxWithFromRequest")
proto.RegisterType((*BroadcastLegacyEthTxWithFromRequest)(nil), "ring.v1.broadcastLegacyEthTxWithFromRequest")
proto.RegisterType((*ResponseLegacyEthTxBroadcastTx)(nil), "ring.v1.ResponseLegacyEthTxBroadcastTx")
proto.RegisterType((*BroadcastLegacyEthTxsWithFromRequest)(nil), "ring.v1.broadcastLegacyEthTxsWithFromRequest")
proto.RegisterType((*ResponseLegacyEthTxsBroadcastTx)(nil), "ring.v1.ResponseLegacyEthTxsBroadcastTx")
proto.RegisterType((*BroadcastEthTxWithFromRequests)(nil), "ring.v1.broadcastEthTxWithFromRequests") proto.RegisterType((*BroadcastEthTxWithFromRequests)(nil), "ring.v1.broadcastEthTxWithFromRequests")
proto.RegisterType((*ResponseBroadcastTxs)(nil), "ring.v1.ResponseBroadcastTxs") proto.RegisterType((*ResponseBroadcastTxs)(nil), "ring.v1.ResponseBroadcastTxs")
proto.RegisterType((*RequestPing)(nil), "ring.v1.RequestPing") proto.RegisterType((*RequestPing)(nil), "ring.v1.RequestPing")
proto.RegisterType((*ResponsePing)(nil), "ring.v1.ResponsePing") proto.RegisterType((*ResponsePing)(nil), "ring.v1.ResponsePing")
proto.RegisterType((*RequestBroadcastTx)(nil), "ring.v1.RequestBroadcastTx")
proto.RegisterType((*ResponseBroadcastTx)(nil), "ring.v1.ResponseBroadcastTx")
} }
func init() { proto.RegisterFile("ring/v1/service.proto", fileDescriptor_2dc67120507b0009) } func init() { proto.RegisterFile("ring/v1/service.proto", fileDescriptor_2dc67120507b0009) }
var fileDescriptor_2dc67120507b0009 = []byte{ var fileDescriptor_2dc67120507b0009 = []byte{
// 1323 bytes of a gzipped FileDescriptorProto // 1429 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0xdd, 0x6e, 0x1b, 0xc5, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0xdf, 0x72, 0xd3, 0xc6,
0x17, 0xff, 0xdb, 0x4d, 0x9b, 0x76, 0x9c, 0xa6, 0x7f, 0xb6, 0x4d, 0x6b, 0x1c, 0xf2, 0x81, 0x41, 0x17, 0xfe, 0x39, 0x04, 0x02, 0xeb, 0x10, 0x7e, 0x2c, 0x09, 0xb8, 0x4e, 0xf3, 0x07, 0xc3, 0x94,
0x90, 0x52, 0xba, 0xae, 0x5b, 0x21, 0xa1, 0x56, 0x7c, 0xd4, 0x26, 0x4d, 0x01, 0xc7, 0xb2, 0xec, 0x50, 0x40, 0xc6, 0xd0, 0xce, 0x74, 0x60, 0xda, 0x82, 0xdd, 0x10, 0xda, 0x3a, 0x1e, 0x8f, 0x0c,
0x36, 0x14, 0x14, 0xa9, 0x1a, 0xaf, 0xa7, 0xeb, 0x15, 0xeb, 0x19, 0x67, 0x67, 0xec, 0x24, 0x5c, 0x29, 0xed, 0x64, 0xca, 0xac, 0xe5, 0x45, 0x56, 0x91, 0x25, 0xa3, 0x5d, 0x27, 0x4e, 0xaf, 0x3a,
0x21, 0x71, 0xc5, 0x6b, 0x70, 0x83, 0xc4, 0xa3, 0xf0, 0x18, 0x5c, 0x72, 0xc1, 0x33, 0xa0, 0xd9, 0xd3, 0xab, 0xbe, 0x46, 0x6f, 0x3a, 0xd3, 0x37, 0x69, 0x1f, 0xa3, 0x97, 0x7d, 0x8a, 0xce, 0x4a,
0x9d, 0x19, 0x9f, 0xdd, 0x59, 0x3b, 0xe6, 0x2a, 0xde, 0xf3, 0xfb, 0x38, 0x33, 0xc7, 0x73, 0xe6, 0xbb, 0xeb, 0x23, 0xad, 0xec, 0x98, 0xab, 0xd8, 0xe7, 0xfb, 0xce, 0xf7, 0x9d, 0x5d, 0x9d, 0xdd,
0xac, 0x83, 0x36, 0xa2, 0x80, 0xfa, 0xb5, 0x69, 0xbd, 0xc6, 0x49, 0x34, 0x0d, 0x3c, 0xe2, 0x8e, 0xa3, 0x18, 0xad, 0x45, 0x5e, 0xe0, 0x56, 0x8f, 0x6a, 0x55, 0x46, 0xa3, 0x23, 0xcf, 0xa1, 0xd6,
0x23, 0x26, 0x98, 0xb3, 0x2a, 0xc3, 0xee, 0xb4, 0x5e, 0xd9, 0xf4, 0x19, 0xf3, 0x43, 0x52, 0x8b, 0x30, 0x0a, 0x79, 0x88, 0x97, 0x44, 0xd8, 0x3a, 0xaa, 0x95, 0xd7, 0xdd, 0x30, 0x74, 0x7d, 0x5a,
0xc3, 0xfd, 0xc9, 0x9b, 0x1a, 0x19, 0x8d, 0xc5, 0x79, 0xc2, 0xaa, 0x6c, 0x6b, 0x71, 0x44, 0x4e, 0x8d, 0xc3, 0xdd, 0xd1, 0x9b, 0x2a, 0x1d, 0x0c, 0xf9, 0x49, 0xc2, 0x2a, 0x6f, 0xaa, 0xe4, 0x88,
0x26, 0x84, 0x8b, 0xd7, 0x11, 0xe1, 0x63, 0x46, 0xb9, 0x72, 0xa9, 0x6c, 0x69, 0x1c, 0x7b, 0x1e, 0xbe, 0x1b, 0x51, 0xc6, 0x5f, 0x47, 0x94, 0x0d, 0xc3, 0x80, 0x49, 0x95, 0xf2, 0x86, 0xc2, 0x89,
0x9b, 0x50, 0x89, 0x9f, 0x48, 0x8e, 0x82, 0x6f, 0xf7, 0x31, 0x27, 0x89, 0x9c, 0xb3, 0x49, 0xa4, 0xe3, 0x84, 0xa3, 0x40, 0xe0, 0xef, 0x04, 0x47, 0xc2, 0x57, 0xbb, 0x84, 0xd1, 0x24, 0x9d, 0x85,
0x93, 0x57, 0x6e, 0xe9, 0x38, 0x11, 0xc3, 0xd7, 0xe2, 0x2c, 0x89, 0x56, 0xfb, 0x68, 0xab, 0x1f, 0xa3, 0x48, 0x99, 0x97, 0x57, 0x55, 0x9c, 0xf2, 0xfe, 0x6b, 0x3e, 0x4e, 0xa2, 0x95, 0x9b, 0x08,
0x31, 0x3c, 0xf0, 0x30, 0x17, 0xfb, 0x62, 0xf8, 0xe2, 0xec, 0xbb, 0x40, 0x0c, 0x9f, 0x45, 0x6c, 0xdb, 0x89, 0x4d, 0x3d, 0x0a, 0x49, 0xcf, 0x21, 0x8c, 0xbf, 0x18, 0xe3, 0x15, 0xb4, 0xc0, 0xc7,
0xd4, 0x4d, 0x92, 0x3b, 0xf7, 0xd1, 0x65, 0x22, 0xe3, 0xe5, 0xc2, 0x6e, 0x61, 0xaf, 0xf4, 0xf0, 0xa5, 0xc2, 0x76, 0x61, 0x67, 0xd9, 0x5e, 0xe0, 0xe3, 0xca, 0x6d, 0x74, 0xc5, 0x96, 0x45, 0x40,
0x8e, 0x2b, 0x6d, 0xdc, 0x69, 0xdd, 0x95, 0xec, 0x08, 0x53, 0x8e, 0x3d, 0x11, 0x30, 0xda, 0x4d, 0x1a, 0x46, 0x8b, 0x7d, 0xc2, 0xfa, 0x92, 0x18, 0x7f, 0xae, 0x74, 0xd1, 0x46, 0x57, 0x51, 0x76,
0x58, 0x8e, 0x83, 0x56, 0xde, 0x44, 0x6c, 0x54, 0x2e, 0xee, 0x16, 0xf6, 0xae, 0x75, 0xe3, 0xcf, 0x79, 0xff, 0xc5, 0xf8, 0x3b, 0x8f, 0xf7, 0x9f, 0x45, 0xe1, 0x40, 0xda, 0xe0, 0x7b, 0xe8, 0x2c,
0xd5, 0x63, 0xb4, 0xbd, 0x30, 0x07, 0x77, 0x1e, 0xa3, 0x95, 0x30, 0xe0, 0xa2, 0x5c, 0xd8, 0xbd, 0x15, 0xf1, 0x38, 0xab, 0xf8, 0xe0, 0x9a, 0x25, 0xea, 0xb2, 0x8e, 0x6a, 0x96, 0x60, 0x47, 0x24,
0xb4, 0x57, 0x7a, 0xf8, 0x81, 0xab, 0xea, 0xe4, 0x2e, 0x94, 0x75, 0x63, 0x4d, 0xf5, 0x39, 0xba, 0x60, 0xc4, 0xe1, 0x5e, 0x18, 0xd8, 0x09, 0x4b, 0x78, 0xbc, 0x89, 0xc2, 0x41, 0x69, 0x61, 0xbb,
0xd5, 0x55, 0x05, 0x6a, 0x68, 0xfa, 0x8b, 0x33, 0xee, 0x3c, 0x48, 0x79, 0xbe, 0x63, 0x3c, 0x73, 0xb0, 0x73, 0xc1, 0x8e, 0x3f, 0x57, 0xde, 0xa2, 0x1b, 0xda, 0xa3, 0x49, 0x5d, 0xe2, 0x9c, 0xe4,
0xc8, 0xca, 0xe9, 0x3a, 0x2a, 0x29, 0xeb, 0x4e, 0x40, 0xfd, 0xea, 0x3a, 0x5a, 0xd3, 0xdc, 0xf8, 0x3a, 0xdd, 0x47, 0xe7, 0x13, 0x54, 0x9b, 0xad, 0x42, 0x33, 0x85, 0xd9, 0x9a, 0x95, 0x6b, 0xf6,
0xf9, 0x7d, 0xe4, 0x28, 0x18, 0x48, 0x9d, 0x75, 0x54, 0x14, 0x49, 0x71, 0xd6, 0xba, 0x45, 0x71, 0x09, 0xda, 0x54, 0x6b, 0x07, 0x5e, 0xa7, 0x6d, 0x43, 0x1f, 0xdd, 0xcc, 0x2b, 0x91, 0x65, 0x6b,
0x56, 0xbd, 0x8b, 0x6e, 0xe6, 0x64, 0x90, 0x75, 0x19, 0x62, 0x3e, 0x54, 0xc4, 0xf8, 0xf3, 0xc3, 0x7c, 0x82, 0x16, 0x7d, 0x8f, 0xf1, 0x52, 0x61, 0xfb, 0xcc, 0x4e, 0xf1, 0xc1, 0x5d, 0x4b, 0x76,
0x7f, 0x76, 0x50, 0xa9, 0x1b, 0x50, 0xbf, 0x97, 0x1c, 0x12, 0xe7, 0x11, 0x5a, 0x91, 0x89, 0x9c, 0x88, 0x35, 0xc7, 0xfa, 0xec, 0x38, 0xb3, 0xf2, 0x23, 0xda, 0xca, 0xa9, 0x8f, 0xc1, 0x02, 0x1f,
0x5b, 0x60, 0xad, 0x66, 0x39, 0x95, 0x0d, 0x6b, 0x07, 0x31, 0xf9, 0x08, 0xad, 0xa5, 0xb6, 0xfd, 0xa7, 0x4c, 0x6e, 0x69, 0x93, 0xd9, 0xeb, 0x92, 0xfa, 0x87, 0x68, 0x73, 0xe6, 0x03, 0x65, 0xf8,
0xe1, 0x72, 0xc5, 0xe3, 0x95, 0xad, 0x45, 0x15, 0xe1, 0x4e, 0x0f, 0x95, 0xe0, 0xfa, 0x97, 0xfc, 0x51, 0x4a, 0xfe, 0x23, 0x73, 0x0d, 0x33, 0xaa, 0x7f, 0x8e, 0x56, 0x73, 0x3a, 0x8b, 0xe1, 0xfb,
0x4e, 0x2a, 0x0b, 0xeb, 0xec, 0x7c, 0x82, 0x56, 0x7a, 0x43, 0xfc, 0x08, 0xec, 0x50, 0x3e, 0x6a, 0x29, 0xcd, 0x0f, 0x8d, 0x92, 0xcd, 0x3a, 0x2f, 0xa2, 0xa2, 0x94, 0x6e, 0x7b, 0x81, 0x5b, 0x59,
0xed, 0x46, 0x26, 0x9a, 0xe8, 0xab, 0xff, 0x73, 0xf6, 0x51, 0xa9, 0xcd, 0x06, 0xe4, 0x88, 0x44, 0x41, 0xcb, 0x8a, 0x2b, 0xbe, 0x3f, 0xf8, 0xeb, 0x3a, 0x2a, 0xda, 0x5e, 0xe0, 0x76, 0x92, 0x13,
0x3c, 0x60, 0xd4, 0xb9, 0xed, 0x26, 0xed, 0xe3, 0xea, 0xf6, 0x71, 0xf7, 0x65, 0xfb, 0x80, 0xdc, 0x89, 0x1f, 0xa2, 0x45, 0x11, 0xc7, 0xab, 0x40, 0x5a, 0x67, 0x97, 0xd7, 0x0c, 0xc3, 0x98, 0x7c,
0x80, 0x0d, 0x6c, 0x9a, 0x08, 0xb5, 0x89, 0xb8, 0xc8, 0x65, 0x73, 0xe6, 0x62, 0xc8, 0xc0, 0xe4, 0x80, 0x96, 0x53, 0x55, 0xde, 0x9a, 0x6f, 0xad, 0xac, 0xbc, 0x31, 0x6b, 0x01, 0x0c, 0x77, 0x50,
0x00, 0xad, 0xb5, 0x89, 0xe8, 0x10, 0x12, 0x35, 0x65, 0xf3, 0xcd, 0xb5, 0xd9, 0x82, 0x36, 0x86, 0x11, 0x3e, 0xaf, 0x39, 0xb7, 0xb0, 0x3c, 0x73, 0x5b, 0xf0, 0x4f, 0xe8, 0x72, 0x3d, 0xdd, 0x45,
0x0e, 0x8c, 0x0e, 0xd1, 0x8d, 0x8e, 0x94, 0x78, 0x2c, 0xbc, 0x68, 0x49, 0xbb, 0xc6, 0x2b, 0xa3, 0x2f, 0xc6, 0xf8, 0xbd, 0x3a, 0xac, 0x3c, 0x6f, 0xab, 0xe0, 0x01, 0xc2, 0x86, 0x17, 0xc3, 0xf7,
0x00, 0x76, 0x9f, 0xa1, 0xd5, 0xde, 0x39, 0xf5, 0xe4, 0x91, 0x98, 0x67, 0x53, 0x9e, 0xd5, 0x37, 0x66, 0x9a, 0x65, 0xcf, 0x42, 0x79, 0x67, 0x96, 0x5b, 0xaa, 0xa1, 0x3f, 0x45, 0x8b, 0x9d, 0x3e,
0x61, 0x02, 0xf9, 0x17, 0xe8, 0x6a, 0x93, 0x05, 0x54, 0x36, 0xf7, 0x5c, 0xfd, 0xdb, 0x46, 0xaf, 0x79, 0x08, 0x1e, 0x9e, 0xf8, 0xaa, 0x74, 0xd6, 0x32, 0xd1, 0x44, 0xab, 0xf2, 0x3f, 0xbc, 0x8b,
0xa9, 0xc0, 0xe0, 0x09, 0xba, 0x72, 0x18, 0xd0, 0x45, 0xe9, 0xef, 0x18, 0x79, 0x42, 0x4c, 0x67, 0x8a, 0xad, 0xb0, 0x47, 0x0f, 0x68, 0xc4, 0xbc, 0x30, 0xc0, 0x57, 0xad, 0xe4, 0x1a, 0xb6, 0xd4,
0x7f, 0x8e, 0xf9, 0xb0, 0x8b, 0xc5, 0x32, 0xd9, 0x35, 0x35, 0x6d, 0xf0, 0x34, 0xb9, 0x0d, 0xf9, 0x35, 0x6c, 0xed, 0x8a, 0x6b, 0x18, 0x6c, 0x2b, 0x60, 0x03, 0x99, 0x06, 0x42, 0x2d, 0xca, 0x4f,
0x12, 0x06, 0x9a, 0x9a, 0x36, 0x38, 0xc0, 0xbc, 0x13, 0xc9, 0x3e, 0xbc, 0xd8, 0x40, 0x53, 0x81, 0x53, 0x59, 0x9f, 0xa8, 0x68, 0x32, 0x10, 0xd9, 0x43, 0xcb, 0x2d, 0xca, 0xdb, 0x94, 0x46, 0x0d,
0xc1, 0x97, 0xa8, 0xd4, 0x08, 0x99, 0xf7, 0x63, 0x7b, 0x32, 0xea, 0x93, 0x68, 0x89, 0x22, 0x3c, 0x71, 0x89, 0x4f, 0x95, 0xd9, 0x80, 0x32, 0x9a, 0x0e, 0x84, 0xf6, 0xd1, 0xa5, 0xb6, 0x48, 0x71,
0x27, 0x81, 0x3f, 0x84, 0x07, 0xe2, 0x1b, 0xe5, 0xd0, 0x38, 0x97, 0x1b, 0x74, 0x66, 0xe7, 0x10, 0x42, 0xff, 0xb4, 0x92, 0xb6, 0xb5, 0x56, 0x26, 0x03, 0xc8, 0x7d, 0x8e, 0x96, 0x3a, 0x27, 0x81,
0x44, 0xed, 0x36, 0x4b, 0x81, 0xc6, 0xab, 0x83, 0xae, 0x2b, 0x40, 0xad, 0x67, 0x2b, 0x2b, 0x48, 0x23, 0xba, 0x7d, 0x9a, 0x4c, 0x69, 0xb2, 0xbf, 0x09, 0x13, 0xa4, 0x7f, 0x89, 0xce, 0x37, 0x42,
0xe2, 0xda, 0x6f, 0x7b, 0x1e, 0x6c, 0x1c, 0x7f, 0x42, 0x9b, 0x31, 0x04, 0xee, 0xfc, 0xf8, 0x44, 0x2f, 0x10, 0xd7, 0xec, 0xd4, 0xfc, 0x0f, 0x74, 0xbe, 0xa2, 0x02, 0x81, 0xc7, 0xe8, 0xdc, 0xbe,
0xab, 0xd5, 0xde, 0x4b, 0x1b, 0xe4, 0xb3, 0x74, 0xb6, 0x8f, 0x97, 0x23, 0x9b, 0xdc, 0x3f, 0x17, 0x17, 0xcc, 0xb2, 0xbf, 0xa6, 0xd3, 0x13, 0x62, 0xda, 0xfd, 0x39, 0x61, 0x7d, 0x9b, 0xf0, 0x79,
0xd0, 0xd6, 0x1c, 0xa6, 0xda, 0xde, 0xfd, 0x8b, 0x1c, 0xd3, 0xdb, 0x75, 0x97, 0xa5, 0x9b, 0x25, 0xdc, 0x15, 0x35, 0x2d, 0xf0, 0x34, 0x99, 0xaa, 0x6c, 0x0e, 0x01, 0x45, 0x4d, 0x0b, 0xec, 0x11,
0x7c, 0x8f, 0xfe, 0xff, 0x92, 0x7a, 0x21, 0x81, 0x7b, 0x9e, 0xb5, 0x65, 0x16, 0xd2, 0x79, 0xde, 0xd6, 0x8e, 0xc4, 0x15, 0x73, 0xba, 0x80, 0xa2, 0x02, 0x81, 0x27, 0xa8, 0x58, 0xf7, 0x43, 0xe7,
0x5d, 0xc0, 0x30, 0xd6, 0xaf, 0x91, 0x03, 0x51, 0xb5, 0xa3, 0x6a, 0xae, 0x34, 0xbd, 0x8d, 0xf7, 0x6d, 0x6b, 0x34, 0xe8, 0xd2, 0x68, 0x8e, 0x4d, 0x78, 0x4e, 0x3d, 0xb7, 0x0f, 0x1b, 0xe2, 0x1b,
0x16, 0x72, 0x4c, 0x82, 0x13, 0x54, 0x8e, 0xf1, 0xc6, 0x79, 0xbc, 0x5b, 0x99, 0xfe, 0x29, 0x1d, 0xa9, 0x50, 0x3f, 0x11, 0x0b, 0xc4, 0x93, 0x3e, 0x04, 0x51, 0xf3, 0x06, 0x49, 0x81, 0x5a, 0xab,
0x7c, 0x4d, 0x07, 0xe4, 0xcc, 0xd9, 0x4b, 0x5b, 0xe4, 0x50, 0x74, 0xb2, 0xbb, 0x4b, 0x30, 0x4d, 0x8d, 0x2e, 0x4a, 0x40, 0xd6, 0xb3, 0x91, 0x4d, 0x48, 0xe2, 0x4a, 0x6f, 0x73, 0x1a, 0xac, 0x15,
0xca, 0x53, 0x54, 0x81, 0xac, 0x64, 0x49, 0x26, 0xe9, 0x47, 0xb9, 0x56, 0x69, 0x92, 0x4e, 0x7b, 0x7f, 0x46, 0xeb, 0x31, 0x04, 0x46, 0x7d, 0xdc, 0xd1, 0xb2, 0xda, 0x3b, 0x69, 0x81, 0x7c, 0x96,
0x6f, 0x29, 0xae, 0x49, 0xfc, 0x15, 0xba, 0xd6, 0x64, 0xa3, 0x71, 0x10, 0x92, 0x88, 0x3b, 0xf0, 0x72, 0xbb, 0x3b, 0x1f, 0x59, 0x7b, 0xff, 0x52, 0x40, 0x1b, 0x53, 0x98, 0x72, 0x79, 0xf7, 0x4e,
0xc2, 0x52, 0x31, 0x6d, 0x5b, 0xc9, 0x83, 0x8c, 0xcb, 0x11, 0xba, 0xa1, 0xc2, 0x3d, 0x16, 0x06, 0x53, 0x4c, 0x2f, 0xd7, 0x9a, 0x97, 0xae, 0x4b, 0xf8, 0x1e, 0xfd, 0xff, 0x65, 0xe0, 0xf8, 0x14,
0x83, 0x40, 0x9c, 0x3b, 0x3b, 0x59, 0x81, 0x46, 0xb4, 0xe3, 0xee, 0x7c, 0x02, 0x18, 0x1e, 0x48, 0xae, 0x79, 0x72, 0x2c, 0xb3, 0x90, 0xf2, 0xb9, 0x3e, 0x83, 0xa1, 0xa5, 0x5f, 0x23, 0x0c, 0x51,
0x81, 0xad, 0x56, 0xcb, 0xb1, 0xd6, 0xd0, 0x6a, 0xb5, 0xb4, 0xdb, 0x66, 0x2e, 0x66, 0x8c, 0x7a, 0xb9, 0xa2, 0x4a, 0x6e, 0x6a, 0x7a, 0x19, 0x37, 0x66, 0x72, 0xb4, 0xc1, 0x3b, 0x54, 0x8a, 0xf1,
0x68, 0x5d, 0x67, 0x21, 0xd1, 0x98, 0x50, 0xe1, 0x6c, 0x5b, 0xe9, 0x13, 0x40, 0x1b, 0xee, 0xcc, 0xfa, 0x49, 0xbc, 0x5a, 0x61, 0xff, 0x34, 0xe8, 0x7d, 0x1d, 0xf4, 0xe8, 0x18, 0xef, 0xa4, 0x25,
0xc5, 0xe1, 0x05, 0xb4, 0xcf, 0x45, 0x30, 0xc2, 0x82, 0x1c, 0x60, 0x0e, 0x2e, 0x20, 0x10, 0xb5, 0x72, 0x28, 0xca, 0xec, 0xf6, 0x1c, 0x4c, 0x6d, 0x79, 0x8c, 0xca, 0x90, 0x95, 0x94, 0xa4, 0x4d,
0x2f, 0xa0, 0x14, 0x68, 0xbc, 0x8e, 0xd1, 0x5b, 0xa0, 0xab, 0x54, 0xc3, 0xcc, 0xda, 0xc1, 0xc2, 0x3f, 0xce, 0x95, 0x4a, 0x93, 0x94, 0xed, 0x9d, 0xb9, 0xb8, 0xda, 0xf8, 0x2b, 0x74, 0xa1, 0x11,
0xb4, 0x6f, 0x75, 0x11, 0xc5, 0xb8, 0xff, 0x52, 0x40, 0xdb, 0x29, 0xdc, 0x3e, 0xd8, 0x6e, 0xbe, 0x0e, 0x86, 0x9e, 0x4f, 0x23, 0x86, 0xe1, 0x85, 0x25, 0x63, 0x4a, 0xb6, 0x9c, 0x07, 0x69, 0x95,
0xd1, 0xdc, 0xe3, 0x5d, 0x5b, 0x9a, 0x6f, 0x56, 0xf1, 0x6b, 0x01, 0xed, 0xda, 0xe4, 0xcc, 0x59, 0x03, 0x74, 0x49, 0x86, 0x3b, 0xa1, 0xef, 0xf5, 0x3c, 0x7e, 0x82, 0xb7, 0xb2, 0x09, 0x0a, 0x51,
0x7f, 0xb0, 0xc0, 0x37, 0xff, 0xc4, 0xd7, 0xff, 0x83, 0x02, 0x5e, 0x22, 0xf0, 0x6d, 0x9c, 0x78, 0x8a, 0xdb, 0xd3, 0x09, 0x60, 0x78, 0x20, 0x09, 0x36, 0x9b, 0x4d, 0x6c, 0xd4, 0xd0, 0x6c, 0x36,
0x24, 0x18, 0x0b, 0x27, 0xb7, 0x9a, 0x0a, 0xb4, 0x2f, 0x91, 0x3c, 0x8e, 0x49, 0xf0, 0x39, 0x5a, 0x95, 0xda, 0x7a, 0x2e, 0xa6, 0x85, 0x3a, 0x68, 0x45, 0xb9, 0xd0, 0x68, 0x48, 0x03, 0x8e, 0x37,
0x6d, 0xe0, 0x10, 0x53, 0x8f, 0x38, 0xb3, 0x19, 0xa6, 0x22, 0xda, 0xaa, 0x6c, 0x03, 0x50, 0xdf, 0x0d, 0xfb, 0x04, 0x50, 0x82, 0x5b, 0x53, 0x71, 0x78, 0x01, 0xed, 0x32, 0xee, 0x0d, 0x08, 0xa7,
0x13, 0x2c, 0xc2, 0x3e, 0xd4, 0xab, 0x88, 0xad, 0x37, 0x80, 0xd1, 0x7f, 0x8a, 0x2e, 0xb7, 0x99, 0x7b, 0x84, 0x81, 0x0b, 0x08, 0x44, 0xcd, 0x0b, 0x28, 0x05, 0x6a, 0xad, 0x43, 0x74, 0x19, 0x9c,
0xcc, 0xbe, 0x01, 0xde, 0xf2, 0x40, 0xee, 0xdb, 0xd9, 0x30, 0x9c, 0x85, 0x5d, 0x32, 0x26, 0x58, 0x2a, 0x79, 0x60, 0x26, 0xc7, 0xc1, 0xc0, 0x94, 0x6e, 0x65, 0x16, 0x45, 0xab, 0xff, 0x5a, 0x40,
0x90, 0x41, 0xe2, 0x00, 0xdf, 0x7c, 0x41, 0xdc, 0x9e, 0x85, 0x19, 0x18, 0x0e, 0x83, 0xec, 0xc8, 0x9b, 0x29, 0xdc, 0x6c, 0x6c, 0x2b, 0x5f, 0x68, 0x6a, 0x7b, 0x57, 0xe7, 0xe6, 0xeb, 0x2a, 0x7e,
0x00, 0xc3, 0x20, 0x0b, 0xd9, 0xc3, 0xc0, 0x66, 0xc0, 0x32, 0x1d, 0x10, 0xd1, 0x64, 0x03, 0x58, 0x2b, 0xa0, 0x6d, 0x93, 0x9c, 0xe9, 0xf5, 0xfb, 0x33, 0x74, 0xf3, 0x3b, 0xbe, 0xf6, 0x1e, 0x19,
0x26, 0x15, 0xb1, 0xcb, 0x64, 0x00, 0xa3, 0x97, 0x6f, 0xd8, 0x81, 0x4f, 0xe1, 0x1b, 0x76, 0xe0, 0xf0, 0x12, 0x81, 0xff, 0x84, 0x51, 0x87, 0x7a, 0x43, 0x8e, 0x73, 0x77, 0x53, 0x82, 0xe6, 0x25,
0xd3, 0x9c, 0x37, 0xec, 0x38, 0x0a, 0x2f, 0x3c, 0x19, 0x01, 0x0b, 0x03, 0x17, 0x5e, 0x06, 0xb1, 0x92, 0xc7, 0xd1, 0x06, 0x5f, 0xa0, 0xa5, 0x3a, 0xf1, 0x49, 0xe0, 0x50, 0x3c, 0x99, 0x61, 0x32,
0x2f, 0x3c, 0x8b, 0x90, 0xf2, 0x25, 0x74, 0x30, 0xc7, 0x37, 0x8d, 0xe4, 0xf8, 0x66, 0x09, 0xf0, 0xa2, 0xa4, 0x4a, 0x26, 0x00, 0xf3, 0x3b, 0x3c, 0x8c, 0x88, 0x0b, 0xf3, 0x65, 0xc4, 0xcc, 0xd7,
0xb8, 0x4b, 0xb0, 0x8b, 0x4f, 0xa1, 0x75, 0x35, 0xa5, 0x4c, 0x83, 0xf6, 0x71, 0xcf, 0xe3, 0xc0, 0x80, 0xce, 0xff, 0x0c, 0x9d, 0x6d, 0x85, 0xc2, 0x7d, 0x0d, 0xbc, 0xe5, 0x01, 0xef, 0xab, 0xd9,
0x3a, 0x36, 0x71, 0x18, 0x82, 0x3a, 0xca, 0x47, 0xbb, 0x8e, 0x49, 0x14, 0x8e, 0x9f, 0x36, 0x39, 0x30, 0x9c, 0x85, 0x36, 0x1d, 0x52, 0xc2, 0x69, 0x2f, 0x51, 0x80, 0x2f, 0xf5, 0x20, 0x6e, 0xce,
0x7d, 0x16, 0x84, 0x82, 0x44, 0x60, 0xfc, 0x98, 0x98, 0x3d, 0x7e, 0x00, 0x64, 0x5c, 0xbe, 0x45, 0xc2, 0x0c, 0x0c, 0x87, 0x41, 0x76, 0x64, 0x80, 0x61, 0x90, 0x85, 0xcc, 0x61, 0x60, 0x32, 0xe0,
0xeb, 0x6d, 0x72, 0x1a, 0x37, 0xbc, 0xb2, 0x9a, 0xf7, 0x3a, 0xb9, 0x03, 0x7d, 0x80, 0x20, 0x55, 0x36, 0xed, 0x51, 0xde, 0x08, 0x7b, 0x70, 0x9b, 0x64, 0xc4, 0xdc, 0x26, 0x0d, 0xe8, 0x7c, 0xf1,
0xaa, 0x72, 0x87, 0xd0, 0x41, 0x40, 0x7d, 0xb0, 0xd3, 0x0b, 0x6c, 0x67, 0xb3, 0x7e, 0x9e, 0x34, 0x86, 0xed, 0xb9, 0x01, 0x7c, 0xc3, 0xf6, 0xdc, 0x20, 0xe7, 0x0d, 0x3b, 0x8e, 0xc2, 0x0b, 0x4f,
0xfd, 0x1d, 0xbf, 0xa4, 0x01, 0xe5, 0x02, 0x87, 0xa1, 0xf2, 0xdd, 0x01, 0x43, 0x3b, 0x85, 0xd8, 0x44, 0x40, 0x61, 0xe0, 0xc2, 0xcb, 0x20, 0xe6, 0x85, 0x67, 0x10, 0x52, 0xba, 0x34, 0xe8, 0x4d,
0xdf, 0xb1, 0x45, 0x80, 0x7d, 0x9b, 0xc4, 0x9a, 0x43, 0x4c, 0x7d, 0xc2, 0x41, 0xdf, 0xa6, 0xe2, 0xd1, 0x4d, 0x23, 0x39, 0xba, 0x59, 0x02, 0x6c, 0x77, 0x01, 0xda, 0xe4, 0x18, 0x4a, 0x57, 0x52,
0x76, 0xdf, 0x66, 0x60, 0x38, 0x7e, 0x13, 0xa8, 0xc5, 0x7c, 0x0e, 0xc6, 0xef, 0x2c, 0x68, 0x8f, 0x99, 0x69, 0xd0, 0x6c, 0xf7, 0x3c, 0x0e, 0xdc, 0xc7, 0x06, 0xf1, 0x7d, 0xb0, 0x8f, 0xe2, 0xab,
0x5f, 0x88, 0xc1, 0xd3, 0x11, 0x5b, 0xcc, 0x4e, 0x07, 0x14, 0x6f, 0x64, 0xa2, 0x5a, 0xd6, 0xf8, 0xb9, 0x8f, 0x49, 0x14, 0x8e, 0x9f, 0x16, 0x3d, 0x7e, 0xe6, 0xf9, 0x9c, 0x46, 0x60, 0xfc, 0xe8,
0xbd, 0x80, 0x4a, 0x1e, 0x1b, 0x69, 0xb8, 0xb1, 0xa6, 0x7e, 0xf9, 0xc7, 0xbf, 0xea, 0x3a, 0x85, 0x98, 0x39, 0x7e, 0x00, 0xa4, 0x55, 0xbe, 0x45, 0x2b, 0x2d, 0x7a, 0x1c, 0x1f, 0x78, 0x29, 0x35,
0x1f, 0x0e, 0xfd, 0x40, 0x0c, 0x27, 0x7d, 0xd7, 0x63, 0xa3, 0x5a, 0x13, 0x0f, 0x26, 0x1e, 0x99, 0xed, 0x75, 0x72, 0x0b, 0xea, 0x80, 0x84, 0xd4, 0x56, 0x95, 0xda, 0x34, 0xe8, 0x79, 0x81, 0x0b,
0xf0, 0x43, 0x22, 0xf0, 0x94, 0x44, 0x9c, 0xe8, 0x9f, 0x7e, 0x35, 0x19, 0x31, 0x0f, 0x3e, 0xa1, 0x56, 0x7a, 0x8a, 0xec, 0x64, 0xd6, 0x4f, 0x4b, 0x4d, 0x3f, 0xe3, 0x97, 0x81, 0x17, 0x30, 0x4e,
0xc9, 0x7f, 0x91, 0x6a, 0x3e, 0xab, 0xa9, 0x7f, 0x0c, 0x3d, 0x91, 0x7f, 0xa7, 0xf5, 0xdf, 0x8a, 0x7c, 0x5f, 0xea, 0x6e, 0x81, 0xa1, 0x9d, 0x42, 0xcc, 0x67, 0x6c, 0x10, 0xe0, 0xb9, 0x4d, 0x62,
0x97, 0xba, 0xaf, 0x5e, 0xfd, 0x51, 0x5c, 0xed, 0xca, 0x74, 0x47, 0xf5, 0x3f, 0x93, 0x4f, 0xc7, 0x8d, 0x3e, 0x09, 0x5c, 0xca, 0xc0, 0xb9, 0x4d, 0xc5, 0xcd, 0x73, 0x9b, 0x81, 0xe1, 0xf8, 0x4d,
0x47, 0xf5, 0xbf, 0x8a, 0x37, 0xd5, 0xa7, 0xe3, 0x83, 0x4e, 0x43, 0xfa, 0x0d, 0xb0, 0xc0, 0x7f, 0xa0, 0x66, 0xe8, 0x32, 0x30, 0x7e, 0x27, 0x41, 0x73, 0xfc, 0x42, 0x0c, 0x76, 0x47, 0x2c, 0x31,
0x17, 0xaf, 0xca, 0xe8, 0xe3, 0xc7, 0x47, 0xf5, 0xfe, 0x95, 0xd8, 0xf3, 0xd1, 0xbf, 0x01, 0x00, 0xe9, 0x0e, 0x98, 0xbc, 0x96, 0x89, 0xaa, 0xb4, 0xfa, 0x1f, 0x05, 0x54, 0x74, 0xc2, 0x81, 0x82,
0x00, 0xff, 0xff, 0xe6, 0x63, 0x18, 0x9d, 0xc9, 0x12, 0x00, 0x00, 0xeb, 0xcb, 0xf2, 0x47, 0x8d, 0xf8, 0xbf, 0xba, 0x76, 0xe1, 0x87, 0x7d, 0xd7, 0xe3, 0xfd, 0x51,
0xd7, 0x72, 0xc2, 0x41, 0xb5, 0x41, 0x7a, 0x23, 0x87, 0x8e, 0xd8, 0x3e, 0xe5, 0xe4, 0x88, 0x46,
0x8c, 0xaa, 0x7f, 0xfd, 0xaa, 0x22, 0xa2, 0xbf, 0xb8, 0x34, 0x48, 0x7e, 0x8d, 0xac, 0xba, 0x61,
0x55, 0xfe, 0xc0, 0xf8, 0x58, 0xfc, 0x3d, 0xaa, 0xfd, 0xbe, 0x70, 0xc6, 0x7e, 0xf5, 0xea, 0xcf,
0x85, 0x25, 0x5b, 0xd8, 0x1d, 0xd4, 0xfe, 0x4e, 0x3e, 0x1d, 0x1e, 0xd4, 0xfe, 0x59, 0xb8, 0x22,
0x3f, 0x1d, 0xee, 0xb5, 0xeb, 0x42, 0xaf, 0x47, 0x38, 0xf9, 0x77, 0xe1, 0xbc, 0x88, 0x3e, 0x7a,
0x74, 0x50, 0xeb, 0x9e, 0x8b, 0x35, 0x1f, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x9e, 0x6c, 0x66,
0x91, 0x11, 0x15, 0x00, 0x00,
} }
...@@ -24,9 +24,11 @@ const _ = grpc.SupportPackageIsVersion7 ...@@ -24,9 +24,11 @@ const _ = grpc.SupportPackageIsVersion7
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type RingServiceClient interface { type RingServiceClient interface {
Ping(ctx context.Context, in *RequestPing, opts ...grpc.CallOption) (*ResponsePing, error) Ping(ctx context.Context, in *RequestPing, opts ...grpc.CallOption) (*ResponsePing, error)
// rpc BroadcastTx(RequestBroadcastTx) returns (ResponseBroadcastTx); //rpc BroadcastTx(RequestBroadcastTx) returns (ResponseBroadcastTx);
BroadcastTxs(ctx context.Context, in *BroadcastEthTxWithFromRequests, opts ...grpc.CallOption) (*ResponseBroadcastTxs, error) BroadcastTxs(ctx context.Context, in *BroadcastEthTxWithFromRequests, opts ...grpc.CallOption) (*ResponseBroadcastTxs, error)
BroadcastTx(ctx context.Context, in *BroadcastEthTxWithFromRequest, opts ...grpc.CallOption) (*ResponseBroadcastTx, error) BroadcastTx(ctx context.Context, in *BroadcastEthTxWithFromRequest, opts ...grpc.CallOption) (*ResponseBroadcastTx, error)
BroadcastLegacyTx(ctx context.Context, in *BroadcastLegacyEthTxWithFromRequest, opts ...grpc.CallOption) (*ResponseLegacyEthTxBroadcastTx, error)
BroadcastLegacyTxs(ctx context.Context, in *BroadcastLegacyEthTxsWithFromRequest, opts ...grpc.CallOption) (*ResponseLegacyEthTxsBroadcastTx, error)
// web3 // web3
Sha3(ctx context.Context, in *Sha3Request, opts ...grpc.CallOption) (*Sha3Response, error) Sha3(ctx context.Context, in *Sha3Request, opts ...grpc.CallOption) (*Sha3Response, error)
NodeVersion(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*NodeVersionResponse, error) NodeVersion(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*NodeVersionResponse, error)
...@@ -120,6 +122,24 @@ func (c *ringServiceClient) BroadcastTx(ctx context.Context, in *BroadcastEthTxW ...@@ -120,6 +122,24 @@ func (c *ringServiceClient) BroadcastTx(ctx context.Context, in *BroadcastEthTxW
return out, nil return out, nil
} }
func (c *ringServiceClient) BroadcastLegacyTx(ctx context.Context, in *BroadcastLegacyEthTxWithFromRequest, opts ...grpc.CallOption) (*ResponseLegacyEthTxBroadcastTx, error) {
out := new(ResponseLegacyEthTxBroadcastTx)
err := c.cc.Invoke(ctx, "/ring.v1.RingService/BroadcastLegacyTx", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *ringServiceClient) BroadcastLegacyTxs(ctx context.Context, in *BroadcastLegacyEthTxsWithFromRequest, opts ...grpc.CallOption) (*ResponseLegacyEthTxsBroadcastTx, error) {
out := new(ResponseLegacyEthTxsBroadcastTx)
err := c.cc.Invoke(ctx, "/ring.v1.RingService/BroadcastLegacyTxs", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *ringServiceClient) Sha3(ctx context.Context, in *Sha3Request, opts ...grpc.CallOption) (*Sha3Response, error) { func (c *ringServiceClient) Sha3(ctx context.Context, in *Sha3Request, opts ...grpc.CallOption) (*Sha3Response, error) {
out := new(Sha3Response) out := new(Sha3Response)
err := c.cc.Invoke(ctx, "/ring.v1.RingService/Sha3", in, out, opts...) err := c.cc.Invoke(ctx, "/ring.v1.RingService/Sha3", in, out, opts...)
...@@ -548,9 +568,11 @@ func (c *ringServiceClient) Logs(ctx context.Context, in *LogsRequest, opts ...g ...@@ -548,9 +568,11 @@ func (c *ringServiceClient) Logs(ctx context.Context, in *LogsRequest, opts ...g
// for forward compatibility // for forward compatibility
type RingServiceServer interface { type RingServiceServer interface {
Ping(context.Context, *RequestPing) (*ResponsePing, error) Ping(context.Context, *RequestPing) (*ResponsePing, error)
// rpc BroadcastTx(RequestBroadcastTx) returns (ResponseBroadcastTx); //rpc BroadcastTx(RequestBroadcastTx) returns (ResponseBroadcastTx);
BroadcastTxs(context.Context, *BroadcastEthTxWithFromRequests) (*ResponseBroadcastTxs, error) BroadcastTxs(context.Context, *BroadcastEthTxWithFromRequests) (*ResponseBroadcastTxs, error)
BroadcastTx(context.Context, *BroadcastEthTxWithFromRequest) (*ResponseBroadcastTx, error) BroadcastTx(context.Context, *BroadcastEthTxWithFromRequest) (*ResponseBroadcastTx, error)
BroadcastLegacyTx(context.Context, *BroadcastLegacyEthTxWithFromRequest) (*ResponseLegacyEthTxBroadcastTx, error)
BroadcastLegacyTxs(context.Context, *BroadcastLegacyEthTxsWithFromRequest) (*ResponseLegacyEthTxsBroadcastTx, error)
// web3 // web3
Sha3(context.Context, *Sha3Request) (*Sha3Response, error) Sha3(context.Context, *Sha3Request) (*Sha3Response, error)
NodeVersion(context.Context, *emptypb.Empty) (*NodeVersionResponse, error) NodeVersion(context.Context, *emptypb.Empty) (*NodeVersionResponse, error)
...@@ -623,6 +645,12 @@ func (UnimplementedRingServiceServer) BroadcastTxs(context.Context, *BroadcastEt ...@@ -623,6 +645,12 @@ func (UnimplementedRingServiceServer) BroadcastTxs(context.Context, *BroadcastEt
func (UnimplementedRingServiceServer) BroadcastTx(context.Context, *BroadcastEthTxWithFromRequest) (*ResponseBroadcastTx, error) { func (UnimplementedRingServiceServer) BroadcastTx(context.Context, *BroadcastEthTxWithFromRequest) (*ResponseBroadcastTx, error) {
return nil, status.Errorf(codes.Unimplemented, "method BroadcastTx not implemented") return nil, status.Errorf(codes.Unimplemented, "method BroadcastTx not implemented")
} }
func (UnimplementedRingServiceServer) BroadcastLegacyTx(context.Context, *BroadcastLegacyEthTxWithFromRequest) (*ResponseLegacyEthTxBroadcastTx, error) {
return nil, status.Errorf(codes.Unimplemented, "method BroadcastLegacyTx not implemented")
}
func (UnimplementedRingServiceServer) BroadcastLegacyTxs(context.Context, *BroadcastLegacyEthTxsWithFromRequest) (*ResponseLegacyEthTxsBroadcastTx, error) {
return nil, status.Errorf(codes.Unimplemented, "method BroadcastLegacyTxs not implemented")
}
func (UnimplementedRingServiceServer) Sha3(context.Context, *Sha3Request) (*Sha3Response, error) { func (UnimplementedRingServiceServer) Sha3(context.Context, *Sha3Request) (*Sha3Response, error) {
return nil, status.Errorf(codes.Unimplemented, "method Sha3 not implemented") return nil, status.Errorf(codes.Unimplemented, "method Sha3 not implemented")
} }
...@@ -831,6 +859,42 @@ func _RingService_BroadcastTx_Handler(srv interface{}, ctx context.Context, dec ...@@ -831,6 +859,42 @@ func _RingService_BroadcastTx_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _RingService_BroadcastLegacyTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(BroadcastLegacyEthTxWithFromRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RingServiceServer).BroadcastLegacyTx(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/ring.v1.RingService/BroadcastLegacyTx",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RingServiceServer).BroadcastLegacyTx(ctx, req.(*BroadcastLegacyEthTxWithFromRequest))
}
return interceptor(ctx, in, info, handler)
}
func _RingService_BroadcastLegacyTxs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(BroadcastLegacyEthTxsWithFromRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RingServiceServer).BroadcastLegacyTxs(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/ring.v1.RingService/BroadcastLegacyTxs",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RingServiceServer).BroadcastLegacyTxs(ctx, req.(*BroadcastLegacyEthTxsWithFromRequest))
}
return interceptor(ctx, in, info, handler)
}
func _RingService_Sha3_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _RingService_Sha3_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Sha3Request) in := new(Sha3Request)
if err := dec(in); err != nil { if err := dec(in); err != nil {
...@@ -1696,6 +1760,14 @@ var RingService_ServiceDesc = grpc.ServiceDesc{ ...@@ -1696,6 +1760,14 @@ var RingService_ServiceDesc = grpc.ServiceDesc{
MethodName: "BroadcastTx", MethodName: "BroadcastTx",
Handler: _RingService_BroadcastTx_Handler, Handler: _RingService_BroadcastTx_Handler,
}, },
{
MethodName: "BroadcastLegacyTx",
Handler: _RingService_BroadcastLegacyTx_Handler,
},
{
MethodName: "BroadcastLegacyTxs",
Handler: _RingService_BroadcastLegacyTxs_Handler,
},
{ {
MethodName: "Sha3", MethodName: "Sha3",
Handler: _RingService_Sha3_Handler, Handler: _RingService_Sha3_Handler,
......
...@@ -8,6 +8,13 @@ require ( ...@@ -8,6 +8,13 @@ require (
google.golang.org/protobuf v1.28.1 google.golang.org/protobuf v1.28.1
) )
require (
github.com/ghodss/yaml v1.0.0 // indirect
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)
require ( require (
github.com/CaduceusMetaverseProtocol/MetaTypes v1.0.0 github.com/CaduceusMetaverseProtocol/MetaTypes v1.0.0
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
......
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8=
github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0=
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/ethereum/go-ethereum v1.10.26 h1:i/7d9RBBwiXCEuyduBQzJw/mKmnvzsN14jqBmytw72s= github.com/ethereum/go-ethereum v1.10.26 h1:i/7d9RBBwiXCEuyduBQzJw/mKmnvzsN14jqBmytw72s=
github.com/ethereum/go-ethereum v1.10.26/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg= github.com/ethereum/go-ethereum v1.10.26/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
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/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4=
...@@ -41,22 +67,39 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U ...@@ -41,22 +67,39 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
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/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
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-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
...@@ -69,6 +112,10 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= ...@@ -69,6 +112,10 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k=
golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/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-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
...@@ -78,11 +125,27 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T ...@@ -78,11 +125,27 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618=
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-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc h1:nUKKji0AarrQKh6XpFEpG3p1TNztxhe7C8TcUvDgXqw= google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc h1:nUKKji0AarrQKh6XpFEpG3p1TNztxhe7C8TcUvDgXqw=
google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc/go.mod h1:1dOng4TWOomJrDGhpXjfCD35wQC6jnC7HpRmOFRqEV0= google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc/go.mod h1:1dOng4TWOomJrDGhpXjfCD35wQC6jnC7HpRmOFRqEV0=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U=
google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
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=
...@@ -133,25 +133,22 @@ message NonceResponse { ...@@ -133,25 +133,22 @@ message NonceResponse {
uint64 nonce = 3; uint64 nonce = 3;
} }
message RepeatedNonceRequest { message RepeatedNonceRequest {
// request address // request address
repeated base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"]; repeated bytes address = 1;
// request block number // request block number
repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"]; repeated bytes block_id = 2;
} }
message RepeatedNonceResponse { message RepeatedNonceResponse {
// request address // the address
repeated base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"]; repeated bytes address = 1;
// request block number // block height
repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"]; repeated bytes block_id = 2;
// nonce // nonce
repeated uint64 nonce = 3; repeated uint64 nonce = 3;
} }
message TransactionCountRequest { message TransactionCountRequest {
// request address // request address
base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"]; base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"];
......
...@@ -136,18 +136,25 @@ message NonceResponse { ...@@ -136,18 +136,25 @@ message NonceResponse {
message RepeatedNonceRequest { message RepeatedNonceRequest {
// request address // request address
repeated base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"]; // repeated base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"];
//repeated bytes addresses =1;
// request block number // request block number
repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"]; //repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"];
repeated NonceRequest list=1;
} }
message RepeatedNonceResponse { message RepeatedNonceResponse {
// request address // request address
repeated base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"]; //repeated base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"];
// request block number
repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"]; // repeated bytes addresses =1;
// nonce // // request block number
repeated uint64 nonce = 3; // repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"];
// // nonce
// repeated uint64 nonce = 3;
repeated NonceResponse list=1;
} }
......
...@@ -11,18 +11,63 @@ import "base/v1/eth_tx.proto"; ...@@ -11,18 +11,63 @@ import "base/v1/eth_tx.proto";
message RequestBroadcastTx {
bytes tx = 1;
}
message ResponseBroadcastTx {
bytes hash =1;
}
message broadcastEthTxWithFromRequest{ message broadcastEthTxWithFromRequest{
base.v1.EthTransaction ethTx =1; base.v1.EthTransaction ethTx =1;
string from =2; string from =2;
} }
message broadcastLegacyEthTxWithFromRequest{
base.v1.EthLegacyTx LegacyTx =1;
string from =2;
}
message ResponseLegacyEthTxBroadcastTx {
bytes hash =1;
}
message broadcastLegacyEthTxsWithFromRequest{
repeated broadcastLegacyEthTxWithFromRequest list =1;
}
message ResponseLegacyEthTxsBroadcastTx {
repeated ResponseLegacyEthTxBroadcastTx list=1;
}
message broadcastEthTxWithFromRequests{
repeated broadcastEthTxWithFromRequest list =1;
}
message ResponseBroadcastTxs{
repeated ResponseBroadcastTx list =1;
}
service RingService{ service RingService{
rpc Ping(RequestPing) returns (ResponsePing); rpc Ping(RequestPing) returns (ResponsePing);
//rpc BroadcastTx(RequestBroadcastTx) returns (ResponseBroadcastTx); //rpc BroadcastTx(RequestBroadcastTx) returns (ResponseBroadcastTx);
rpc BroadcastTxs(broadcastEthTxWithFromRequests) returns (ResponseBroadcastTxs);
rpc BroadcastTx(broadcastEthTxWithFromRequest) returns (ResponseBroadcastTx); rpc BroadcastTx(broadcastEthTxWithFromRequest) returns (ResponseBroadcastTx);
rpc BroadcastLegacyTx(broadcastLegacyEthTxWithFromRequest) returns (ResponseLegacyEthTxBroadcastTx);
rpc BroadcastLegacyTxs(broadcastLegacyEthTxsWithFromRequest) returns (ResponseLegacyEthTxsBroadcastTx);
// web3 // web3
rpc Sha3(Sha3Request) returns (Sha3Response) {}; rpc Sha3(Sha3Request) returns (Sha3Response) {};
...@@ -100,10 +145,3 @@ message RequestPing {} ...@@ -100,10 +145,3 @@ message RequestPing {}
message ResponsePing {} message ResponsePing {}
message RequestBroadcastTx {
bytes tx = 1;
}
message ResponseBroadcastTx {
bytes hash =1;
}
\ No newline at end of file
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
"receiveAddr": "0x0Fb196385c8826e3806ebA2cA2cb78B26E08fEEe", "receiveAddr": "0x0Fb196385c8826e3806ebA2cA2cb78B26E08fEEe",
"count": 100, "count": 100,
"type": 1, "type": 1,
"rpcNode": "54.168.125.67:8545", "rpcNode": "54.168.125.67:5001",
"grpcNode": "18.183.99.139:38002",
"amount": 10000000, "amount": 10000000,
"chainId": 100, "chainId": 100,
"initAccountPrv": "FD5CC6F5E7E2805E920AC5DC83D5AF1106F9C92F0C04F9D5E1FD4261B4B4464A", "initAccountPrv": "FD5CC6F5E7E2805E920AC5DC83D5AF1106F9C92F0C04F9D5E1FD4261B4B4464A",
......
...@@ -22,7 +22,7 @@ func init() { ...@@ -22,7 +22,7 @@ func init() {
startCmd.PersistentFlags().StringVar(&cpuProfile, "cpuProfile", "cpuProfile.prof", "Statistics cpu profile") startCmd.PersistentFlags().StringVar(&cpuProfile, "cpuProfile", "cpuProfile.prof", "Statistics cpu profile")
startCmd.PersistentFlags().IntVar(&startCount, "startCount", 0, "read excel start count") startCmd.PersistentFlags().IntVar(&startCount, "startCount", 0, "read excel start count")
startCmd.PersistentFlags().IntVar(&endCount, "endCount", 100, "read excel end count") startCmd.PersistentFlags().IntVar(&endCount, "endCount", 100, "read excel end count")
startCmd.PersistentFlags().BoolVar(&broadcastTxArr, "broadcastTxArr", false, "test grpc interface -> broadcastTxArr") startCmd.PersistentFlags().BoolVar(&broadcastTxArr, "broadcastTxArr", true, "test grpc interface -> broadcastTxArr")
startCmd.PersistentFlags().IntVar(&txCount, "txCount", 1000, "send tran count") startCmd.PersistentFlags().IntVar(&txCount, "txCount", 1000, "send tran count")
startCmd.PersistentFlags().IntVar(&goRoutineCount, "goRoutineCount", 10, "send tran goRoutine count") startCmd.PersistentFlags().IntVar(&goRoutineCount, "goRoutineCount", 10, "send tran goRoutine count")
startCmd.PersistentFlags().IntVar(&batchCount, "batchCount", 100, "batch send tran count") startCmd.PersistentFlags().IntVar(&batchCount, "batchCount", 100, "batch send tran count")
......
...@@ -4,13 +4,13 @@ import ( ...@@ -4,13 +4,13 @@ import (
"ChainGrpcTest/log" "ChainGrpcTest/log"
"ChainGrpcTest/tool" "ChainGrpcTest/tool"
"ChainGrpcTest/transaction" "ChainGrpcTest/transaction"
"github.com/ethereum/go-ethereum/core/types" basev1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
"sync" "sync"
) )
var ( var (
SendTxAccountArr [][]string SendTxAccountArr [][]string
tranArrChan chan []*types.Transaction tranArrChan chan []*basev1.MetaTxBase
) )
func init() { func init() {
...@@ -21,7 +21,7 @@ func init() { ...@@ -21,7 +21,7 @@ func init() {
return return
} }
cfg.StorageAccFileName += ".xlsx" cfg.StorageAccFileName += ".xlsx"
tranArrChan = make(chan []*types.Transaction, 10000) tranArrChan = make(chan []*basev1.MetaTxBase, 10000)
} }
func startTest() { func startTest() {
...@@ -49,7 +49,8 @@ func startTest() { ...@@ -49,7 +49,8 @@ func startTest() {
}() }()
for { for {
log.Info("----------------------------------start") log.Info("----------------------------------start")
arr := transaction.SignedTxArr(syncMap, SendTxAccountArr, cfg) //arr := transaction.SignedTxArr(syncMap, SendTxAccountArr, cfg)
arr := transaction.GrpcSignedTxArr(syncMap, SendTxAccountArr, cfg)
log.Info("----------------------------------end") log.Info("----------------------------------end")
tranArrChan <- arr tranArrChan <- arr
syncMap = updateNonce(syncMap, cfg) syncMap = updateNonce(syncMap, cfg)
......
...@@ -15,6 +15,7 @@ type Config struct { ...@@ -15,6 +15,7 @@ type Config struct {
GoRoutineCount int `json:"goRoutineCount"` GoRoutineCount int `json:"goRoutineCount"`
Type int `json:"type"` Type int `json:"type"`
RpcNode string `json:"rpcNode"` RpcNode string `json:"rpcNode"`
GrpcNode string `json:"grpcNode"`
Amount int64 `json:"amount"` Amount int64 `json:"amount"`
ChainId int64 `json:"chainId"` ChainId int64 `json:"chainId"`
InitAccountPrv string `json:"initAccountPrv"` InitAccountPrv string `json:"initAccountPrv"`
......
...@@ -3,12 +3,9 @@ package transaction ...@@ -3,12 +3,9 @@ package transaction
import ( import (
"ChainGrpcTest/log" "ChainGrpcTest/log"
"ChainGrpcTest/tool" "ChainGrpcTest/tool"
"ChainGrpcTest/txcache"
"context" "context"
v1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1" v1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
ring "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/ring/v1" ring "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/ring/v1"
metatypes "github.com/CaduceusMetaverseProtocol/MetaTypes/types"
"github.com/ethereum/go-ethereum/core/types"
gogotypes "github.com/gogo/protobuf/types" gogotypes "github.com/gogo/protobuf/types"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
...@@ -25,7 +22,7 @@ func init() { ...@@ -25,7 +22,7 @@ func init() {
broadcastEthTxWithFromRequestsArr = make(chan *ring.BroadcastEthTxWithFromRequests, 1000000) broadcastEthTxWithFromRequestsArr = make(chan *ring.BroadcastEthTxWithFromRequests, 1000000)
} }
func BroadcastTxArr(tranArr []*types.Transaction, cfg *tool.Config) error { func BroadcastTxArr(tranArr []*v1.MetaTxBase, cfg *tool.Config) error {
client, err := grpc.Dial(cfg.RpcNode, grpc.WithTransportCredentials(insecure.NewCredentials())) client, err := grpc.Dial(cfg.RpcNode, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil { if err != nil {
return err return err
...@@ -44,9 +41,7 @@ func BroadcastTxArr(tranArr []*types.Transaction, cfg *tool.Config) error { ...@@ -44,9 +41,7 @@ func BroadcastTxArr(tranArr []*types.Transaction, cfg *tool.Config) error {
if err != nil { if err != nil {
log.Error("gogo types.MarshalAny error:", err) log.Error("gogo types.MarshalAny error:", err)
} }
fromAddr, _ := txcache.GetFromAddr(tranArr[i].Hash().Hex())
request := ring.BroadcastEthTxWithFromRequest{ request := ring.BroadcastEthTxWithFromRequest{
From: fromAddr,
EthTx: &v1.EthTransaction{Tx: ethTxAsAny}, EthTx: &v1.EthTransaction{Tx: ethTxAsAny},
} }
ethTxArr = append(ethTxArr, &request) ethTxArr = append(ethTxArr, &request)
...@@ -92,25 +87,17 @@ func broadcastTx(cfg *tool.Config, client ring.RingServiceClient) error { ...@@ -92,25 +87,17 @@ func broadcastTx(cfg *tool.Config, client ring.RingServiceClient) error {
} }
} }
func constructionEthLegacyTx(tran *types.Transaction) v1.EthLegacyTx { func constructionEthLegacyTx(tran *v1.MetaTxBase) v1.EthLegacyTx {
v, r, s := tran.RawSignatureValues()
toAddr := metatypes.BytesToAddress(tran.To().Bytes())
nv := metatypes.NewBigInt(0)
nv.Set(v)
nr := metatypes.NewBigInt(0)
nr.Set(r)
ns := metatypes.NewBigInt(0)
ns.Set(s)
rawTx := v1.EthLegacyTx{ rawTx := v1.EthLegacyTx{
Nonce: tran.Nonce(), Nonce: tran.Nonce,
GasPrice: metatypes.NewBigInt(tran.GasPrice().Int64()), GasPrice: tran.GasPrice,
Gas: tran.Gas(), Gas: tran.Gas,
To: &toAddr, To: tran.To,
Value: metatypes.NewBigInt(tran.Value().Int64()), Value: tran.Value,
Data: tran.Data(), Data: tran.Data,
V: nv, V: tran.V,
R: nr, R: tran.R,
S: ns, S: tran.S,
} }
return rawTx return rawTx
} }
...@@ -6,15 +6,16 @@ import ( ...@@ -6,15 +6,16 @@ import (
"ChainGrpcTest/txcache" "ChainGrpcTest/txcache"
"context" "context"
"crypto/ecdsa" "crypto/ecdsa"
ring "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/ring/v1" basev1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
crypterv1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/crypter/v1"
metatypes "github.com/CaduceusMetaverseProtocol/MetaTypes/types" metatypes "github.com/CaduceusMetaverseProtocol/MetaTypes/types"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"math/big" "math/big"
"net" "net"
"strconv"
"strings" "strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
...@@ -41,11 +42,20 @@ type SignTranArr struct { ...@@ -41,11 +42,20 @@ type SignTranArr struct {
mux sync.RWMutex mux sync.RWMutex
} }
type GrpcSignTranArr struct {
TranArr []*basev1.MetaTxBase
mux sync.RWMutex
}
var ( var (
tran = make(chan *Transactor, 0) tran = make(chan *Transactor, 0)
grpcTran = make(chan *crypterv1.BatchSignTxRequest, 0)
signTranArr = &SignTranArr{ signTranArr = &SignTranArr{
TranArr: make([]*types.Transaction, 0), TranArr: make([]*types.Transaction, 0),
} }
grpcSignTranArr = &GrpcSignTranArr{
TranArr: make([]*basev1.MetaTxBase, 0),
}
batchSignCount, handleNonceCount int32 batchSignCount, handleNonceCount int32
) )
...@@ -97,26 +107,26 @@ func InitAccNonce(sendTxAccountArr [][]string, cfg *tool.Config) (error, sync.Ma ...@@ -97,26 +107,26 @@ func InitAccNonce(sendTxAccountArr [][]string, cfg *tool.Config) (error, sync.Ma
return err, sync.Map{} return err, sync.Map{}
} }
defer client.Close() defer client.Close()
serviceClient := ring.NewRingServiceClient(client) //serviceClient := ring.NewRingServiceClient(client)
for i := 0; i < cfg.GoRoutineCount; i++ { for i := 0; i < cfg.GoRoutineCount; i++ {
go func() { go func() {
for { for {
select { select {
case sendTxAccount := <-rowsCh: case sendTxAccount := <-rowsCh:
addressRow := sendTxAccount[0] //addressRow := sendTxAccount[0]
privateKey := sendTxAccount[1] privateKey := sendTxAccount[1]
fromAddr := metatypes.HexToAddress(addressRow) //fromAddr := metatypes.HexToAddress(addressRow)
nonceReq := &ring.NonceRequest{ //nonceReq := &ring.NonceRequest{
Address: (*metatypes.Address)(fromAddr.Bytes()), // Address: (*metatypes.Address)(fromAddr.Bytes()),
} //}
ctx, cancel := context.WithTimeout(context.Background(), time.Second*20) //ctx, cancel := context.WithTimeout(context.Background(), time.Second*20)
defer cancel() //defer cancel()
response, err := serviceClient.Nonce(ctx, nonceReq) //response, err := serviceClient.Nonce(ctx, nonceReq)
if err != nil { if err != nil {
log.Error("get account nonce error:", err) log.Error("get account nonce error:", err)
} }
intNum, _ := strconv.Atoi(strconv.FormatUint(response.Nonce, 10)) //intNum, _ := strconv.Atoi(strconv.FormatUint(response.Nonce, 10))
accountsNonceMap.Store(privateKey, intNum) accountsNonceMap.Store(privateKey, 0)
atomic.AddInt32(&handleNonceCount, 1) atomic.AddInt32(&handleNonceCount, 1)
} }
} }
...@@ -206,6 +216,92 @@ func signedTxFunc() (*types.Transaction, error) { ...@@ -206,6 +216,92 @@ func signedTxFunc() (*types.Transaction, error) {
} }
} }
// GrpcSignedTxArr 获取全部签名数据
func GrpcSignedTxArr(syncMap sync.Map, sendTxAccountArr [][]string, cfg *tool.Config) []*basev1.MetaTxBase {
client, err := grpc.Dial(cfg.GrpcNode, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Error("dial nebula failed", "err", err)
}
serviceClient := crypterv1.NewCrypterServiceClient(client)
for i := 0; i < cfg.GoRoutineCount; i++ {
go grpcSignedTxFunc(serviceClient)
}
for _, rows := range sendTxAccountArr {
fromAddr := rows[0]
privateKey := rows[1]
value, ok := syncMap.Load(privateKey)
if !ok {
log.Error("Load nonce map error...........")
continue
}
nonce := new(big.Int).SetInt64(int64(value.(int)))
log.Infof("from addr:%s,nonce:%d", fromAddr, nonce)
rawTxArr := make([]*basev1.MetaTxBase, 0)
prv, err := crypto.HexToECDSA(privateKey)
if err != nil {
return nil
}
for signCount := 0; signCount < cfg.SignCount; signCount++ {
toAddress := metatypes.HexToAddress(cfg.ReceiveAddr)
base := &basev1.MetaTxBase{
ChainId: metatypes.NewBigInt(cfg.ChainId),
Nonce: nonce.Uint64(),
GasPrice: metatypes.NewBigInt(1000000001),
Gas: metatypes.NewBigInt(300000).Uint64(),
To: &toAddress,
Value: metatypes.NewBigInt(cfg.Amount),
Data: nil,
}
rawTxArr = append(rawTxArr, base)
if err != nil {
log.Errorf("signed tx error %s ", err)
continue
}
nonce = big.NewInt(1).Add(nonce, big.NewInt(1))
}
requestMetaTx := crypterv1.BatchSignTxRequest{
RawTx: rawTxArr,
Private: prv.D.Bytes(),
}
grpcTran <- &requestMetaTx
}
for {
if len(sendTxAccountArr)*cfg.SignCount == int(batchSignCount) && len(grpcSignTranArr.TranArr) == len(sendTxAccountArr)*cfg.SignCount {
batchSignCount = 0
newTranArr := make([]*basev1.MetaTxBase, 0)
for _, tran := range grpcSignTranArr.TranArr {
newTranArr = append(newTranArr, tran)
}
grpcSignTranArr.TranArr = make([]*basev1.MetaTxBase, 0)
return newTranArr
}
}
}
// grpcSignedTxFunc 签名本币转账交易
func grpcSignedTxFunc(client crypterv1.CrypterServiceClient) (*types.Transaction, error) {
for {
select {
case t := <-grpcTran:
tx, err := client.BatchSignTx(context.Background(), t)
if err != nil {
return nil, err
}
AddGrpcTran(tx.GetSignedTx())
}
}
}
func AddGrpcTran(grpcSignTx []*basev1.MetaTxBase) {
grpcSignTranArr.mux.Lock()
defer grpcSignTranArr.mux.Unlock()
for _, txBase := range grpcSignTx {
grpcSignTranArr.TranArr = append(grpcSignTranArr.TranArr, txBase)
atomic.AddInt32(&batchSignCount, 1)
}
}
func Add(signedTx *types.Transaction) { func Add(signedTx *types.Transaction) {
signTranArr.mux.Lock() signTranArr.mux.Lock()
defer signTranArr.mux.Unlock() defer signTranArr.mux.Unlock()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment