Browse Source

Proof uses uint64 for blockHeight

pull/1780/head
Ethan Frey 8 years ago
parent
commit
fdc047ae7a
14 changed files with 197 additions and 198 deletions
  1. +3
    -3
      client/client.go
  2. +3
    -3
      client/grpc_client.go
  3. +3
    -3
      client/local_client.go
  4. +3
    -3
      client/socket_client.go
  5. +2
    -2
      cmd/abci-cli/tmsp-cli.go
  6. +2
    -2
      example/chain_aware/chain_aware_app.go
  7. +2
    -2
      example/counter/counter.go
  8. +1
    -1
      example/dummy/dummy.go
  9. +2
    -2
      example/dummy/persistent_dummy.go
  10. +1
    -1
      example/nil/nil_app.go
  11. +1
    -1
      types/application.go
  12. +1
    -1
      types/messages.go
  13. +109
    -110
      types/types.pb.go
  14. +64
    -64
      types/types.proto

+ 3
- 3
client/client.go View File

@ -4,8 +4,8 @@ import (
"fmt"
"sync"
. "github.com/tendermint/go-common"
"github.com/tendermint/abci/types"
. "github.com/tendermint/go-common"
)
type Client interface {
@ -21,7 +21,7 @@ type Client interface {
DeliverTxAsync(tx []byte) *ReqRes
CheckTxAsync(tx []byte) *ReqRes
QueryAsync(tx []byte) *ReqRes
ProofAsync(key []byte, blockHeight int64) *ReqRes
ProofAsync(key []byte, blockHeight uint64) *ReqRes
CommitAsync() *ReqRes
FlushSync() error
@ -31,7 +31,7 @@ type Client interface {
DeliverTxSync(tx []byte) (res types.Result)
CheckTxSync(tx []byte) (res types.Result)
QuerySync(tx []byte) (res types.Result)
ProofSync(key []byte, blockHeight int64) (res types.Result)
ProofSync(key []byte, blockHeight uint64) (res types.Result)
CommitSync() (res types.Result)
InitChainAsync(validators []*types.Validator) *ReqRes


+ 3
- 3
client/grpc_client.go View File

@ -8,8 +8,8 @@ import (
context "golang.org/x/net/context"
grpc "google.golang.org/grpc"
. "github.com/tendermint/go-common"
"github.com/tendermint/abci/types"
. "github.com/tendermint/go-common"
)
// A stripped copy of the remoteClient that makes
@ -182,7 +182,7 @@ func (cli *grpcClient) QueryAsync(query []byte) *ReqRes {
return cli.finishAsyncCall(req, &types.Response{&types.Response_Query{res}})
}
func (cli *grpcClient) ProofAsync(key []byte, blockHeight int64) *ReqRes {
func (cli *grpcClient) ProofAsync(key []byte, blockHeight uint64) *ReqRes {
req := types.ToRequestProof(key, blockHeight)
res, err := cli.client.Proof(context.Background(), req.GetProof(), grpc.FailFast(true))
if err != nil {
@ -310,7 +310,7 @@ func (cli *grpcClient) CheckTxSync(tx []byte) (res types.Result) {
return types.Result{Code: resp.Code, Data: resp.Data, Log: resp.Log}
}
func (cli *grpcClient) ProofSync(key []byte, blockHeight int64) (res types.Result) {
func (cli *grpcClient) ProofSync(key []byte, blockHeight uint64) (res types.Result) {
reqres := cli.ProofAsync(key, blockHeight)
if res := cli.checkErrGetResult(); res.IsErr() {
return res


+ 3
- 3
client/local_client.go View File

@ -3,8 +3,8 @@ package abcicli
import (
"sync"
. "github.com/tendermint/go-common"
types "github.com/tendermint/abci/types"
. "github.com/tendermint/go-common"
)
type localClient struct {
@ -99,7 +99,7 @@ func (app *localClient) QueryAsync(tx []byte) *ReqRes {
)
}
func (app *localClient) ProofAsync(key []byte, blockHeight int64) *ReqRes {
func (app *localClient) ProofAsync(key []byte, blockHeight uint64) *ReqRes {
app.mtx.Lock()
res := app.Application.Proof(key, blockHeight)
app.mtx.Unlock()
@ -202,7 +202,7 @@ func (app *localClient) QuerySync(query []byte) (res types.Result) {
return res
}
func (app *localClient) ProofSync(key []byte, blockHeight int64) (res types.Result) {
func (app *localClient) ProofSync(key []byte, blockHeight uint64) (res types.Result) {
app.mtx.Lock()
res = app.Application.Proof(key, blockHeight)
app.mtx.Unlock()


+ 3
- 3
client/socket_client.go View File

@ -10,8 +10,8 @@ import (
"sync"
"time"
. "github.com/tendermint/go-common"
"github.com/tendermint/abci/types"
. "github.com/tendermint/go-common"
)
const (
@ -255,7 +255,7 @@ func (cli *socketClient) QueryAsync(query []byte) *ReqRes {
return cli.queueRequest(types.ToRequestQuery(query))
}
func (cli *socketClient) ProofAsync(key []byte, blockHeight int64) *ReqRes {
func (cli *socketClient) ProofAsync(key []byte, blockHeight uint64) *ReqRes {
return cli.queueRequest(types.ToRequestProof(key, blockHeight))
}
@ -349,7 +349,7 @@ func (cli *socketClient) QuerySync(query []byte) (res types.Result) {
return types.Result{Code: resp.Code, Data: resp.Data, Log: resp.Log}
}
func (cli *socketClient) ProofSync(key []byte, blockHeight int64) (res types.Result) {
func (cli *socketClient) ProofSync(key []byte, blockHeight uint64) (res types.Result) {
reqres := cli.queueRequest(types.ToRequestProof(key, blockHeight))
cli.FlushSync()
if err := cli.Error(); err != nil {


+ 2
- 2
cmd/abci-cli/tmsp-cli.go View File

@ -324,9 +324,9 @@ func cmdProof(c *cli.Context) error {
return err
}
var height int64
var height uint64
if len(args) == 2 {
height, _ = strconv.ParseInt(args[1], 10, 0)
height, _ = strconv.ParseUint(args[1], 10, 0)
}
res := client.ProofSync(keyBytes, height)
rsp := newResponse(res, string(res.Data), true)


+ 2
- 2
example/chain_aware/chain_aware_app.go View File

@ -3,9 +3,9 @@ package main
import (
"flag"
. "github.com/tendermint/go-common"
"github.com/tendermint/abci/server"
"github.com/tendermint/abci/types"
. "github.com/tendermint/go-common"
)
func main() {
@ -61,7 +61,7 @@ func (app *ChainAwareApplication) Query(query []byte) types.Result {
return types.NewResultOK([]byte(Fmt("%d,%d", app.beginCount, app.endCount)), "")
}
func (app *ChainAwareApplication) Proof(key []byte, blockHeight int64) types.Result {
func (app *ChainAwareApplication) Proof(key []byte, blockHeight uint64) types.Result {
return types.NewResultOK(nil, Fmt("Proof is not supported"))
}


+ 2
- 2
example/counter/counter.go View File

@ -3,8 +3,8 @@ package counter
import (
"encoding/binary"
. "github.com/tendermint/go-common"
"github.com/tendermint/abci/types"
. "github.com/tendermint/go-common"
)
type CounterApplication struct {
@ -84,6 +84,6 @@ func (app *CounterApplication) Query(query []byte) types.Result {
return types.ErrUnknownRequest.SetLog(Fmt("Invalid nonce. Expected hash or tx, got %v", queryStr))
}
func (app *CounterApplication) Proof(key []byte, blockHeight int64) types.Result {
func (app *CounterApplication) Proof(key []byte, blockHeight uint64) types.Result {
return types.NewResultOK(nil, Fmt("Proof is not supported"))
}

+ 1
- 1
example/dummy/dummy.go View File

@ -54,7 +54,7 @@ func (app *DummyApplication) Query(query []byte) types.Result {
return types.NewResultOK(wire.JSONBytes(queryResult), "")
}
func (app *DummyApplication) Proof(key []byte, blockHeight int64) types.Result {
func (app *DummyApplication) Proof(key []byte, blockHeight uint64) types.Result {
// TODO: when go-merkle supports querying older blocks without possible panics,
// we should store a cache and allow a query. But for now it is impossible.
// And this is just a Dummy application anyway, what do you expect? ;)


+ 2
- 2
example/dummy/persistent_dummy.go View File

@ -6,11 +6,11 @@ import (
"strconv"
"strings"
"github.com/tendermint/abci/types"
. "github.com/tendermint/go-common"
dbm "github.com/tendermint/go-db"
"github.com/tendermint/go-merkle"
"github.com/tendermint/go-wire"
"github.com/tendermint/abci/types"
)
const (
@ -93,7 +93,7 @@ func (app *PersistentDummyApplication) Query(query []byte) types.Result {
return app.app.Query(query)
}
func (app *PersistentDummyApplication) Proof(key []byte, blockHeight int64) types.Result {
func (app *PersistentDummyApplication) Proof(key []byte, blockHeight uint64) types.Result {
return app.app.Proof(key, blockHeight)
}


+ 1
- 1
example/nil/nil_app.go View File

@ -35,6 +35,6 @@ func (app *NilApplication) Query(query []byte) types.Result {
return types.NewResultOK(nil, "")
}
func (app *NilApplication) Proof(key []byte, blockHeight int64) types.Result {
func (app *NilApplication) Proof(key []byte, blockHeight uint64) types.Result {
return types.NewResultOK(nil, "")
}

+ 1
- 1
types/application.go View File

@ -23,7 +23,7 @@ type Application interface {
Query(query []byte) Result
// Get proof for state
Proof(key []byte, blockHeight int64) Result
Proof(key []byte, blockHeight uint64) Result
// Return the application Merkle root hash
Commit() Result


+ 1
- 1
types/messages.go View File

@ -55,7 +55,7 @@ func ToRequestQuery(queryBytes []byte) *Request {
}
}
func ToRequestProof(key []byte, blockHeight int64) *Request {
func ToRequestProof(key []byte, blockHeight uint64) *Request {
return &Request{
Value: &Request_Proof{&RequestProof{key, blockHeight}},
}


+ 109
- 110
types/types.pb.go View File

@ -769,7 +769,7 @@ func (m *RequestQuery) GetQuery() []byte {
type RequestProof struct {
Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
Height int64 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"`
Height uint64 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"`
}
func (m *RequestProof) Reset() { *m = RequestProof{} }
@ -784,7 +784,7 @@ func (m *RequestProof) GetKey() []byte {
return nil
}
func (m *RequestProof) GetHeight() int64 {
func (m *RequestProof) GetHeight() uint64 {
if m != nil {
return m.Height
}
@ -2231,113 +2231,112 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("types/types.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 1714 bytes of a gzipped FileDescriptorProto
// 1710 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x58, 0x5b, 0x6f, 0xe4, 0x48,
0x15, 0x8e, 0xfb, 0xde, 0xa7, 0x93, 0x4e, 0xe5, 0xe4, 0xe6, 0x34, 0x3c, 0x8c, 0x0c, 0xcb, 0x66,
0x86, 0x61, 0x06, 0x65, 0xb5, 0x68, 0xc2, 0x22, 0xa4, 0x64, 0x26, 0x9b, 0xb4, 0x56, 0x3b, 0x13,
0xbc, 0xb3, 0xfb, 0x00, 0x88, 0x96, 0xd3, 0xae, 0xee, 0x36, 0x71, 0x6c, 0x8f, 0x2f, 0xd9, 0x84,
0x3f, 0xc2, 0x4f, 0xe0, 0x17, 0xf0, 0xc2, 0x13, 0x4f, 0x48, 0xdc, 0x2f, 0x7f, 0x85, 0x3f, 0x80,
0x4e, 0x55, 0xf9, 0x1a, 0x9b, 0xa7, 0xd9, 0x97, 0x96, 0xeb, 0xdc, 0xaa, 0x4e, 0xd5, 0x77, 0xbe,
0x3a, 0x5d, 0xb0, 0x15, 0xdf, 0x07, 0x3c, 0x7a, 0x2e, 0x7e, 0x9f, 0x05, 0xa1, 0x1f, 0xfb, 0xd8,
0x15, 0x03, 0xe3, 0xbf, 0x1d, 0xe8, 0x9b, 0xfc, 0x5d, 0xc2, 0xa3, 0x18, 0x0f, 0xa1, 0xc3, 0xe7,
0x2b, 0x5f, 0xd7, 0x1e, 0x69, 0x87, 0xa3, 0x23, 0x7c, 0x26, 0xcd, 0x95, 0xf6, 0x6c, 0xbe, 0xf2,
0x2f, 0xd6, 0x4c, 0x61, 0x81, 0xdf, 0x87, 0xee, 0xc2, 0x4d, 0xa2, 0x95, 0xde, 0x12, 0xa6, 0xdb,
0x65, 0xd3, 0x4f, 0x49, 0x75, 0xb1, 0x66, 0x4a, 0x1b, 0x0a, 0xeb, 0x78, 0x0b, 0x5f, 0x6f, 0xd7,
0x85, 0x9d, 0x7a, 0x0b, 0x11, 0x96, 0x2c, 0xf0, 0x05, 0x40, 0xc4, 0xe3, 0x99, 0x1f, 0xc4, 0x8e,
0xef, 0xe9, 0x1d, 0x61, 0xbf, 0x5f, 0xb6, 0xff, 0x82, 0xc7, 0x6f, 0x84, 0xfa, 0x62, 0xcd, 0x1c,
0x46, 0xe9, 0x80, 0x3c, 0x6d, 0xee, 0x3a, 0xb7, 0x3c, 0x9c, 0xc5, 0x77, 0x7a, 0xb7, 0xce, 0xf3,
0x95, 0xd4, 0xbf, 0xbd, 0x23, 0x4f, 0x3b, 0x1d, 0xe0, 0x11, 0x0c, 0xe6, 0x2b, 0x3e, 0xbf, 0x26,
0xbf, 0x9e, 0xf0, 0xdb, 0x2d, 0xfb, 0xbd, 0x24, 0xad, 0xf0, 0xea, 0xcf, 0xe5, 0x27, 0x3e, 0x83,
0xde, 0xdc, 0xbf, 0xb9, 0x71, 0x62, 0xbd, 0x2f, 0x3c, 0x76, 0x2a, 0x1e, 0x42, 0x77, 0xb1, 0x66,
0x2a, 0x2b, 0xda, 0xae, 0x77, 0x09, 0x0f, 0xef, 0xf5, 0x41, 0xdd, 0x76, 0xfd, 0x8c, 0x54, 0xb4,
0x5d, 0xc2, 0x86, 0x52, 0x71, 0x3c, 0x27, 0x9e, 0xcd, 0x57, 0x96, 0xe3, 0xe9, 0xc3, 0xba, 0x54,
0xa6, 0x9e, 0x13, 0xbf, 0x24, 0x35, 0xa5, 0xe2, 0xa4, 0x03, 0xfc, 0x04, 0x46, 0x57, 0x7c, 0xe9,
0x78, 0xb3, 0x2b, 0xd7, 0x9f, 0x5f, 0xeb, 0x20, 0x5c, 0xf5, 0xb2, 0xeb, 0x29, 0x19, 0x9c, 0x92,
0xfe, 0x62, 0xcd, 0x84, 0xab, 0x6c, 0x84, 0x1f, 0xc3, 0x90, 0x7b, 0xb6, 0x72, 0x1d, 0x09, 0xd7,
0xbd, 0x0a, 0x02, 0x3c, 0x3b, 0x75, 0x1c, 0x70, 0xf5, 0x4d, 0xa9, 0x05, 0xa1, 0xef, 0x2f, 0xf4,
0xf5, 0xba, 0xd4, 0x2e, 0x49, 0x45, 0xa9, 0x09, 0x9b, 0xd3, 0x3e, 0x74, 0x6f, 0x2d, 0x37, 0xe1,
0xc6, 0x87, 0x30, 0x2a, 0xc0, 0x0a, 0x75, 0xe8, 0xdf, 0xf0, 0x28, 0xb2, 0x96, 0x5c, 0x60, 0x6f,
0x68, 0xa6, 0x43, 0x63, 0x0c, 0xeb, 0x45, 0x50, 0x19, 0x1b, 0x99, 0x23, 0x01, 0xc7, 0xf8, 0x31,
0xb0, 0x2a, 0x2e, 0x90, 0x41, 0xfb, 0x9a, 0xdf, 0xab, 0x40, 0xf4, 0x89, 0x3b, 0x6a, 0x5a, 0x81,
0xd6, 0xa1, 0xa9, 0xd6, 0x60, 0x64, 0xbe, 0x19, 0x32, 0x70, 0x0c, 0xad, 0xf8, 0x4e, 0xb8, 0xae,
0x9b, 0xad, 0xf8, 0xce, 0x78, 0x04, 0xe3, 0x32, 0x0a, 0x1e, 0x58, 0x7c, 0x37, 0x5b, 0xa0, 0x38,
0x46, 0x9a, 0x4b, 0x1e, 0xb5, 0x34, 0x91, 0x03, 0xe3, 0x45, 0x66, 0x25, 0x76, 0xa4, 0xb8, 0xc6,
0x75, 0xb9, 0xc6, 0x3d, 0xe8, 0xad, 0xb8, 0xb3, 0x5c, 0xc5, 0x62, 0x91, 0x6d, 0x53, 0x8d, 0x8c,
0x4d, 0xd8, 0x28, 0xa1, 0xca, 0x78, 0x95, 0x2d, 0x3b, 0x43, 0x01, 0xfe, 0x10, 0xe0, 0xd6, 0x72,
0x1d, 0xdb, 0x8a, 0xfd, 0x30, 0xd2, 0xb5, 0x47, 0xed, 0xc3, 0xd1, 0x11, 0x53, 0x27, 0xf1, 0x55,
0xaa, 0x30, 0x0b, 0x36, 0xc6, 0x6b, 0xd8, 0x7a, 0x00, 0x08, 0x44, 0xe8, 0xac, 0xac, 0x68, 0xa5,
0x96, 0x25, 0xbe, 0xf1, 0x03, 0x5a, 0x97, 0x65, 0xf3, 0x50, 0x95, 0xfa, 0x86, 0x0a, 0x7b, 0x21,
0x84, 0xa6, 0x52, 0x1a, 0x8f, 0x61, 0xb3, 0x82, 0x92, 0x42, 0x46, 0x14, 0xaf, 0x93, 0x65, 0xf4,
0x87, 0x2e, 0x0c, 0x4c, 0x1e, 0x05, 0xbe, 0x17, 0x71, 0x7c, 0x01, 0x43, 0x7e, 0x37, 0xe7, 0xb2,
0xe0, 0xb5, 0x0a, 0x60, 0xa5, 0xcd, 0x59, 0xaa, 0x27, 0xb0, 0x67, 0xc6, 0xf8, 0x58, 0x91, 0x55,
0x95, 0x81, 0x94, 0x53, 0x91, 0xad, 0x9e, 0xa6, 0x6c, 0xd5, 0xae, 0x54, 0xab, 0xb4, 0xad, 0xd0,
0xd5, 0x63, 0x45, 0x57, 0x9d, 0xda, 0xc0, 0x25, 0xbe, 0x3a, 0x2e, 0xf1, 0x55, 0xb7, 0x76, 0xf9,
0x0d, 0x84, 0x75, 0x5c, 0x22, 0xac, 0x5e, 0xad, 0x6b, 0x03, 0x63, 0x7d, 0x54, 0x60, 0xac, 0x7e,
0xa5, 0x50, 0xa5, 0x63, 0x0d, 0x65, 0x3d, 0xcf, 0x28, 0x6b, 0x50, 0x21, 0x39, 0xe5, 0x52, 0xe5,
0xac, 0xa7, 0x29, 0x90, 0x87, 0xb5, 0x9b, 0x56, 0x21, 0xad, 0xe3, 0x12, 0x69, 0x41, 0x6d, 0x3a,
0x0d, 0xac, 0xf5, 0x93, 0x32, 0x6b, 0x49, 0xea, 0x39, 0xa8, 0xf8, 0x36, 0xd2, 0xd6, 0x8f, 0x8a,
0xb4, 0xb5, 0x5e, 0x21, 0x4b, 0x85, 0x85, 0x3a, 0xde, 0x7a, 0x9a, 0xf2, 0xd6, 0x46, 0x6d, 0x7a,
0x4d, 0xc4, 0xf5, 0x98, 0xea, 0xa6, 0x82, 0x4b, 0xaa, 0x79, 0x1e, 0x86, 0x7e, 0xa8, 0x38, 0x47,
0x0e, 0x8c, 0x43, 0xaa, 0xf9, 0x1c, 0x8d, 0xff, 0x87, 0xe4, 0x44, 0x8d, 0x17, 0xb0, 0x68, 0xfc,
0x56, 0xcb, 0x7d, 0x09, 0x70, 0x54, 0x99, 0xb6, 0x15, 0x5b, 0xca, 0x51, 0x7c, 0x53, 0xbc, 0x5b,
0x1e, 0x46, 0x84, 0x3c, 0xc9, 0x6b, 0xe9, 0x10, 0x9f, 0xc0, 0x96, 0x6b, 0x45, 0xb1, 0xdc, 0x94,
0x99, 0x2a, 0xc2, 0xb6, 0x28, 0xc2, 0x4d, 0x52, 0xc8, 0xdd, 0x10, 0x62, 0xfc, 0x01, 0x6c, 0x17,
0x6c, 0xad, 0x20, 0x98, 0x09, 0x0a, 0xe8, 0x08, 0x0a, 0x60, 0x99, 0xf5, 0x49, 0x10, 0x5c, 0x58,
0xd1, 0xca, 0xf8, 0x20, 0xcf, 0xbf, 0xc4, 0xb8, 0xae, 0xbf, 0x4c, 0x19, 0xd7, 0xf5, 0x97, 0xc6,
0xaf, 0x72, 0xb3, 0x9c, 0x5c, 0xbf, 0x03, 0x9d, 0xb9, 0x6f, 0xcb, 0xec, 0xc7, 0x47, 0x9b, 0x6a,
0xc7, 0x5f, 0xfa, 0x36, 0x7f, 0x7b, 0x1f, 0x70, 0x53, 0x28, 0xb3, 0x4c, 0x5b, 0x92, 0x83, 0x44,
0xa6, 0x2a, 0x7e, 0x3b, 0x8f, 0xff, 0x4b, 0xa2, 0x9b, 0x12, 0xd6, 0xdf, 0x67, 0xf4, 0x9f, 0xe7,
0xe7, 0x21, 0x49, 0xfd, 0x9b, 0x89, 0x2d, 0xaf, 0x82, 0xf7, 0x18, 0xfb, 0x17, 0x74, 0x5b, 0x15,
0xcb, 0xf9, 0x7d, 0x06, 0xdf, 0xce, 0x8f, 0x34, 0x2b, 0x64, 0x63, 0x07, 0xf0, 0x61, 0x85, 0xca,
0x5b, 0xb9, 0x5c, 0x7b, 0xf8, 0x3d, 0xe8, 0xda, 0xce, 0x62, 0x11, 0xe9, 0x9d, 0x86, 0xdb, 0x49,
0xaa, 0x8d, 0xdf, 0xb5, 0xa0, 0x27, 0xef, 0x16, 0x3c, 0x20, 0x9e, 0xb3, 0x1c, 0x6f, 0xe6, 0xd8,
0x69, 0xc5, 0x88, 0xf1, 0xd4, 0xae, 0xdc, 0x96, 0xd9, 0xdd, 0x42, 0xa9, 0xc4, 0xce, 0x0d, 0x57,
0x60, 0x17, 0xdf, 0xb8, 0x0f, 0x7d, 0x2f, 0xb9, 0x99, 0xc5, 0x77, 0x91, 0x40, 0x75, 0xc7, 0xec,
0x79, 0xc9, 0xcd, 0xdb, 0xbb, 0x08, 0x8f, 0x60, 0xa3, 0x00, 0x7d, 0xc7, 0x56, 0x04, 0x3e, 0x56,
0x4b, 0x13, 0xeb, 0x9e, 0xbe, 0x32, 0x47, 0x59, 0x11, 0x4c, 0x6d, 0x3c, 0x04, 0x51, 0x13, 0x33,
0x49, 0x92, 0xb2, 0x56, 0x7a, 0x62, 0xdf, 0xc6, 0x24, 0x57, 0x2c, 0x4a, 0x17, 0xe7, 0xb7, 0x60,
0x48, 0x3b, 0x29, 0x4d, 0xfa, 0xc2, 0x64, 0x40, 0x02, 0xa1, 0xfc, 0x10, 0x36, 0xf3, 0xcb, 0x58,
0x9a, 0x0c, 0x64, 0x94, 0x5c, 0x2c, 0x0c, 0x0f, 0x60, 0x90, 0xd5, 0xe4, 0x50, 0x58, 0xf4, 0x2d,
0x55, 0x8a, 0x53, 0xe8, 0xab, 0x25, 0xd6, 0x5e, 0xdc, 0x4f, 0xa0, 0x1b, 0x58, 0x61, 0x1c, 0xa9,
0x0b, 0x32, 0x25, 0xb8, 0x4b, 0x2b, 0xa4, 0x5e, 0x49, 0x5d, 0xdf, 0xd2, 0xc4, 0x38, 0x86, 0x8d,
0x92, 0x9c, 0x18, 0x2d, 0xf6, 0x63, 0xcb, 0x55, 0x57, 0xb7, 0x1c, 0x64, 0xd3, 0xb4, 0xf2, 0x69,
0x8c, 0x63, 0x18, 0x66, 0x67, 0x48, 0xc7, 0x12, 0x24, 0x57, 0x9f, 0x65, 0x9d, 0x8d, 0x1a, 0x51,
0xb8, 0xc0, 0xff, 0x5a, 0xf5, 0x10, 0x1d, 0x53, 0x0e, 0x9e, 0xfc, 0x49, 0x83, 0xd1, 0xe7, 0x92,
0x02, 0x09, 0x8d, 0xb8, 0x09, 0xa3, 0xd7, 0x89, 0xeb, 0x2a, 0x11, 0x5b, 0xc3, 0x01, 0x74, 0x88,
0x39, 0x99, 0x86, 0x43, 0xe8, 0x0a, 0x66, 0x64, 0x2d, 0x12, 0x12, 0x25, 0xb2, 0x36, 0x6e, 0xc0,
0x30, 0xe3, 0x20, 0xd6, 0xa1, 0x61, 0x46, 0xc9, 0xac, 0x4b, 0xc3, 0x8c, 0x7a, 0xd8, 0x16, 0x8e,
0xa0, 0xaf, 0x98, 0x82, 0x21, 0x02, 0xf4, 0xe4, 0x49, 0xb1, 0x6d, 0x0a, 0x2d, 0x8a, 0x9c, 0xed,
0x90, 0x4b, 0x06, 0x6d, 0xb6, 0x8b, 0x63, 0x80, 0x1c, 0xd4, 0x6c, 0x0f, 0xd7, 0x61, 0x90, 0xc2,
0x99, 0xed, 0x93, 0x9f, 0x28, 0x60, 0xa6, 0x3f, 0xf9, 0x7d, 0x17, 0x06, 0x69, 0x4d, 0x61, 0x0f,
0x5a, 0x6f, 0x3e, 0x63, 0x6b, 0xb8, 0x05, 0x1b, 0x53, 0x2f, 0xe6, 0xa1, 0x67, 0xb9, 0x67, 0x74,
0x1f, 0x30, 0x8d, 0x44, 0x67, 0xde, 0xdc, 0xb7, 0x1d, 0x6f, 0x29, 0x45, 0x2d, 0x8a, 0x79, 0x6a,
0xd9, 0xaf, 0x7d, 0x6f, 0xce, 0x59, 0x1b, 0x19, 0xac, 0x7f, 0xe9, 0x59, 0x49, 0xbc, 0xf2, 0x43,
0xe7, 0x37, 0xdc, 0x66, 0x1d, 0xdc, 0x85, 0xad, 0xa9, 0x17, 0x25, 0x8b, 0x85, 0x33, 0x77, 0xb8,
0x17, 0x7f, 0x9a, 0x78, 0x76, 0xc4, 0xba, 0x88, 0x30, 0xfe, 0xd2, 0xbb, 0xf6, 0xfc, 0xaf, 0x3d,
0xd5, 0x75, 0xb1, 0x1e, 0xea, 0xb0, 0x73, 0x6a, 0x45, 0xfc, 0x55, 0x12, 0xb8, 0xce, 0xdc, 0x8a,
0xf9, 0x89, 0x6d, 0x87, 0x3c, 0x8a, 0x18, 0xa7, 0x20, 0xa4, 0x29, 0xcf, 0xbd, 0x48, 0x1d, 0x4a,
0xf1, 0x39, 0x8f, 0xd8, 0x12, 0x0f, 0x60, 0xf7, 0x81, 0x46, 0xcc, 0xbc, 0xc2, 0x6f, 0x83, 0x5e,
0x55, 0x9d, 0x5b, 0xd1, 0x65, 0xe8, 0xcc, 0x39, 0x73, 0x70, 0x07, 0x98, 0xd4, 0x0a, 0x18, 0x4f,
0xbd, 0x20, 0x89, 0xd9, 0xaf, 0xd3, 0xf9, 0x95, 0xf4, 0x4d, 0x12, 0x93, 0xf8, 0xba, 0x22, 0xbe,
0x14, 0x50, 0x61, 0x2e, 0xee, 0xc3, 0x76, 0x41, 0xfc, 0x05, 0xe5, 0x47, 0xbb, 0x73, 0x93, 0xaf,
0x57, 0x2a, 0x9c, 0xa5, 0x67, 0xc5, 0x49, 0xc8, 0x99, 0x87, 0x7b, 0x80, 0xa4, 0x51, 0x5b, 0x92,
0x26, 0xee, 0xa7, 0x33, 0x28, 0xb9, 0x9a, 0x21, 0xa8, 0x8a, 0xdd, 0x64, 0xe9, 0x78, 0xec, 0x1d,
0xee, 0x02, 0x3b, 0xf7, 0x6f, 0x95, 0xf4, 0xcc, 0x8b, 0x9d, 0xf8, 0x9e, 0xfd, 0x59, 0xc3, 0x1d,
0xd8, 0xcc, 0xc5, 0xe7, 0xa1, 0x9f, 0x04, 0xec, 0x2f, 0x1a, 0xee, 0x03, 0xe6, 0xd2, 0xcb, 0xd0,
0x0f, 0xfc, 0xc8, 0x72, 0xd9, 0x5f, 0x35, 0xdc, 0x83, 0xad, 0x73, 0xff, 0x36, 0x3b, 0x05, 0xe9,
0xf0, 0xb7, 0xd4, 0x21, 0x93, 0x7f, 0xce, 0x6f, 0xae, 0x78, 0xc8, 0xfe, 0xae, 0xe1, 0x01, 0xec,
0x14, 0x15, 0x59, 0xac, 0x7f, 0x68, 0x6a, 0x45, 0x99, 0xea, 0x2b, 0x3f, 0xe6, 0xec, 0x9f, 0xa9,
0x58, 0xed, 0x83, 0x0a, 0xf4, 0x2f, 0x0d, 0xb7, 0x61, 0x9c, 0x8b, 0x85, 0xed, 0xbf, 0x35, 0x9c,
0xc0, 0x6e, 0x49, 0xe8, 0x78, 0xcb, 0x4b, 0xaa, 0x3e, 0xf6, 0x1f, 0xed, 0xe8, 0x8f, 0x5d, 0xd8,
0x3c, 0x39, 0x7d, 0x39, 0x3d, 0x09, 0xe4, 0x04, 0x74, 0x97, 0x3f, 0x97, 0x35, 0x87, 0x35, 0xff,
0xfe, 0x27, 0x75, 0x4d, 0x36, 0x1e, 0xa9, 0xd2, 0xc4, 0xba, 0x47, 0x80, 0x49, 0x6d, 0xaf, 0x4d,
0x93, 0xc8, 0xb6, 0xe6, 0xe1, 0x5b, 0xc0, 0xa4, 0xae, 0xe1, 0xc6, 0x9f, 0x16, 0x4a, 0x1d, 0x9b,
0x5e, 0x04, 0x26, 0x8d, 0xad, 0x37, 0xf9, 0xe7, 0x7d, 0x48, 0xd3, 0xbb, 0xc0, 0xa4, 0xb1, 0xff,
0xc6, 0x17, 0x19, 0x7b, 0x60, 0xfd, 0xeb, 0xc0, 0xa4, 0xa1, 0x05, 0xa7, 0xed, 0x91, 0x3d, 0x44,
0xdd, 0x9f, 0xfe, 0x49, 0x6d, 0x57, 0x4d, 0x3e, 0xb2, 0x37, 0xa8, 0xfb, 0x37, 0x3d, 0xa9, 0x6d,
0x55, 0xf1, 0xe3, 0x94, 0xd2, 0xb0, 0xf6, 0x31, 0x62, 0x52, 0xdf, 0xef, 0xd3, 0xc6, 0xe4, 0x7f,
0x23, 0x9b, 0x5e, 0x19, 0x26, 0x8d, 0x9d, 0x3c, 0x9e, 0x14, 0x39, 0x12, 0x1b, 0xdf, 0x1a, 0x26,
0xcd, 0xfd, 0x3c, 0x7e, 0x92, 0xd3, 0x2a, 0x36, 0xbc, 0x38, 0x4c, 0x9a, 0x5a, 0xfa, 0xab, 0x9e,
0x78, 0xcc, 0xfa, 0xe8, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xce, 0x8c, 0x71, 0x92, 0xe1, 0x12,
0x00, 0x00,
0x15, 0x8e, 0x3b, 0x7d, 0x3d, 0x9d, 0x74, 0x2a, 0x27, 0x37, 0xa7, 0xe1, 0x61, 0x64, 0x58, 0x36,
0x33, 0x0c, 0x33, 0x28, 0xab, 0x45, 0x13, 0x16, 0x21, 0x25, 0x33, 0xd9, 0xa4, 0xb5, 0xda, 0x99,
0xe0, 0x9d, 0xdd, 0x07, 0x40, 0xb4, 0x9c, 0x76, 0x75, 0xb7, 0x89, 0xdb, 0xf6, 0xf8, 0x92, 0x4d,
0xf8, 0x23, 0xfc, 0x04, 0x7e, 0x01, 0x2f, 0x3c, 0xf1, 0x84, 0xc4, 0xfd, 0xf2, 0x57, 0xf8, 0x03,
0xe8, 0x54, 0x95, 0xaf, 0xb1, 0x79, 0x9a, 0x7d, 0x69, 0xb9, 0xce, 0xad, 0xea, 0x54, 0x7d, 0xe7,
0xab, 0xd3, 0x05, 0xdb, 0xf1, 0x7d, 0xc0, 0xa3, 0xe7, 0xe2, 0xf7, 0x59, 0x10, 0xfa, 0xb1, 0x8f,
0x1d, 0x31, 0x30, 0xfe, 0xdb, 0x86, 0x9e, 0xc9, 0xdf, 0x25, 0x3c, 0x8a, 0xf1, 0x08, 0xda, 0x7c,
0xb6, 0xf4, 0x75, 0xed, 0x91, 0x76, 0x34, 0x3c, 0xc6, 0x67, 0xd2, 0x5c, 0x69, 0xcf, 0x67, 0x4b,
0xff, 0x72, 0xcd, 0x14, 0x16, 0xf8, 0x7d, 0xe8, 0xcc, 0xdd, 0x24, 0x5a, 0xea, 0x2d, 0x61, 0xba,
0x53, 0x36, 0xfd, 0x94, 0x54, 0x97, 0x6b, 0xa6, 0xb4, 0xa1, 0xb0, 0x8e, 0x37, 0xf7, 0xf5, 0xf5,
0xba, 0xb0, 0x13, 0x6f, 0x2e, 0xc2, 0x92, 0x05, 0xbe, 0x00, 0x88, 0x78, 0x3c, 0xf5, 0x83, 0xd8,
0xf1, 0x3d, 0xbd, 0x2d, 0xec, 0x0f, 0xca, 0xf6, 0x5f, 0xf0, 0xf8, 0x8d, 0x50, 0x5f, 0xae, 0x99,
0x83, 0x28, 0x1d, 0x90, 0xa7, 0xcd, 0x5d, 0xe7, 0x96, 0x87, 0xd3, 0xf8, 0x4e, 0xef, 0xd4, 0x79,
0xbe, 0x92, 0xfa, 0xb7, 0x77, 0xe4, 0x69, 0xa7, 0x03, 0x3c, 0x86, 0xfe, 0x6c, 0xc9, 0x67, 0x37,
0xe4, 0xd7, 0x15, 0x7e, 0x7b, 0x65, 0xbf, 0x97, 0xa4, 0x15, 0x5e, 0xbd, 0x99, 0xfc, 0xc4, 0x67,
0xd0, 0x9d, 0xf9, 0xab, 0x95, 0x13, 0xeb, 0x3d, 0xe1, 0xb1, 0x5b, 0xf1, 0x10, 0xba, 0xcb, 0x35,
0x53, 0x59, 0xd1, 0x76, 0xbd, 0x4b, 0x78, 0x78, 0xaf, 0xf7, 0xeb, 0xb6, 0xeb, 0x67, 0xa4, 0xa2,
0xed, 0x12, 0x36, 0x94, 0x8a, 0xe3, 0x39, 0xf1, 0x74, 0xb6, 0xb4, 0x1c, 0x4f, 0x1f, 0xd4, 0xa5,
0x32, 0xf1, 0x9c, 0xf8, 0x25, 0xa9, 0x29, 0x15, 0x27, 0x1d, 0xe0, 0x27, 0x30, 0xbc, 0xe6, 0x0b,
0xc7, 0x9b, 0x5e, 0xbb, 0xfe, 0xec, 0x46, 0x07, 0xe1, 0xaa, 0x97, 0x5d, 0xcf, 0xc8, 0xe0, 0x8c,
0xf4, 0x97, 0x6b, 0x26, 0x5c, 0x67, 0x23, 0xfc, 0x18, 0x06, 0xdc, 0xb3, 0x95, 0xeb, 0x50, 0xb8,
0xee, 0x57, 0x10, 0xe0, 0xd9, 0xa9, 0x63, 0x9f, 0xab, 0x6f, 0x4a, 0x2d, 0x08, 0x7d, 0x7f, 0xae,
0x6f, 0xd4, 0xa5, 0x76, 0x45, 0x2a, 0x4a, 0x4d, 0xd8, 0x9c, 0xf5, 0xa0, 0x73, 0x6b, 0xb9, 0x09,
0x37, 0x3e, 0x84, 0x61, 0x01, 0x56, 0xa8, 0x43, 0x6f, 0xc5, 0xa3, 0xc8, 0x5a, 0x70, 0x81, 0xbd,
0x81, 0x99, 0x0e, 0x8d, 0x11, 0x6c, 0x14, 0x41, 0x65, 0x6c, 0x66, 0x8e, 0x04, 0x1c, 0xe3, 0xc7,
0xc0, 0xaa, 0xb8, 0x40, 0x06, 0xeb, 0x37, 0xfc, 0x5e, 0x05, 0xa2, 0x4f, 0xdc, 0x55, 0xd3, 0x0a,
0xb4, 0x0e, 0x4c, 0xb5, 0x06, 0x23, 0xf3, 0xcd, 0x90, 0x81, 0x23, 0x68, 0xc5, 0x77, 0xc2, 0x75,
0xc3, 0x6c, 0xc5, 0x77, 0xc6, 0x23, 0x18, 0x95, 0x51, 0xf0, 0xc0, 0xe2, 0xbb, 0xd9, 0x02, 0xc5,
0x31, 0xd2, 0x5c, 0xf2, 0xa8, 0xa5, 0x89, 0x1c, 0x18, 0x2f, 0x32, 0x2b, 0xb1, 0x23, 0xc5, 0x35,
0x6e, 0xc8, 0x35, 0xee, 0x43, 0x77, 0xc9, 0x9d, 0xc5, 0x32, 0x16, 0x8b, 0x6c, 0x9b, 0x6a, 0x64,
0x6c, 0xc1, 0x66, 0x09, 0x55, 0xc6, 0xab, 0x6c, 0xd9, 0x19, 0x0a, 0xf0, 0x87, 0x00, 0xb7, 0x96,
0xeb, 0xd8, 0x56, 0xec, 0x87, 0x91, 0xae, 0x3d, 0x5a, 0x3f, 0x1a, 0x1e, 0x33, 0x75, 0x12, 0x5f,
0xa5, 0x0a, 0xb3, 0x60, 0x63, 0xbc, 0x86, 0xed, 0x07, 0x80, 0x40, 0x84, 0xf6, 0xd2, 0x8a, 0x96,
0x6a, 0x59, 0xe2, 0x1b, 0x3f, 0xa0, 0x75, 0x59, 0x36, 0x0f, 0x55, 0xa9, 0x6f, 0xaa, 0xb0, 0x97,
0x42, 0x68, 0x2a, 0xa5, 0xf1, 0x18, 0xb6, 0x2a, 0x28, 0x29, 0x64, 0xa4, 0x95, 0x32, 0xfa, 0x43,
0x07, 0xfa, 0x26, 0x8f, 0x02, 0xdf, 0x8b, 0x38, 0xbe, 0x80, 0x01, 0xbf, 0x9b, 0x71, 0x59, 0xf0,
0x5a, 0x05, 0xb0, 0xd2, 0xe6, 0x3c, 0xd5, 0x13, 0xd8, 0x33, 0x63, 0x7c, 0xac, 0xc8, 0xaa, 0xca,
0x40, 0xca, 0xa9, 0xc8, 0x56, 0x4f, 0x53, 0xb6, 0x5a, 0xaf, 0x54, 0xab, 0xb4, 0xad, 0xd0, 0xd5,
0x63, 0x45, 0x57, 0xed, 0xda, 0xc0, 0x25, 0xbe, 0x3a, 0x29, 0xf1, 0x55, 0xa7, 0x76, 0xf9, 0x0d,
0x84, 0x75, 0x52, 0x22, 0xac, 0x6e, 0xad, 0x6b, 0x03, 0x63, 0x7d, 0x54, 0x60, 0xac, 0x5e, 0xa5,
0x50, 0xa5, 0x63, 0x0d, 0x65, 0x3d, 0xcf, 0x28, 0xab, 0x5f, 0x21, 0x39, 0xe5, 0x52, 0xe5, 0xac,
0xa7, 0x29, 0x90, 0x07, 0xb5, 0x9b, 0x56, 0x21, 0xad, 0x93, 0x12, 0x69, 0x41, 0x6d, 0x3a, 0x0d,
0xac, 0xf5, 0x93, 0x32, 0x6b, 0x49, 0xea, 0x39, 0xac, 0xf8, 0x36, 0xd2, 0xd6, 0x8f, 0x8a, 0xb4,
0xb5, 0x51, 0x21, 0x4b, 0x85, 0x85, 0x3a, 0xde, 0x7a, 0x9a, 0xf2, 0xd6, 0x66, 0x6d, 0x7a, 0x4d,
0xc4, 0xf5, 0x98, 0xea, 0xa6, 0x82, 0x4b, 0xaa, 0x79, 0x1e, 0x86, 0x7e, 0xa8, 0x38, 0x47, 0x0e,
0x8c, 0x23, 0xaa, 0xf9, 0x1c, 0x8d, 0xff, 0x87, 0xe4, 0x44, 0x8d, 0x17, 0xb0, 0x68, 0xfc, 0x56,
0xcb, 0x7d, 0x09, 0x70, 0x54, 0x99, 0xb6, 0x15, 0x5b, 0xca, 0x51, 0x7c, 0x53, 0xbc, 0x5b, 0x1e,
0x46, 0x84, 0x3c, 0xc9, 0x6b, 0xe9, 0x10, 0x9f, 0xc0, 0xb6, 0x6b, 0x45, 0xb1, 0xdc, 0x94, 0xa9,
0x2a, 0xc2, 0x75, 0x51, 0x84, 0x5b, 0xa4, 0x90, 0xbb, 0x21, 0xc4, 0xf8, 0x03, 0xd8, 0x29, 0xd8,
0x5a, 0x41, 0x30, 0x15, 0x14, 0xd0, 0x16, 0x14, 0xc0, 0x32, 0xeb, 0xd3, 0x20, 0xb8, 0xb4, 0xa2,
0xa5, 0xf1, 0x41, 0x9e, 0x7f, 0x89, 0x71, 0x5d, 0x7f, 0x91, 0x32, 0xae, 0xeb, 0x2f, 0x8c, 0x5f,
0xe5, 0x66, 0x39, 0xb9, 0x7e, 0x07, 0xda, 0x33, 0xdf, 0x96, 0xd9, 0x8f, 0x8e, 0xb7, 0xd4, 0x8e,
0xbf, 0xf4, 0x6d, 0xfe, 0xf6, 0x3e, 0xe0, 0xa6, 0x50, 0x66, 0x99, 0xb6, 0x24, 0x07, 0x89, 0x4c,
0x55, 0xfc, 0xf5, 0x3c, 0xfe, 0x2f, 0x89, 0x6e, 0x4a, 0x58, 0x7f, 0x9f, 0xd1, 0x7f, 0x9e, 0x9f,
0x87, 0x24, 0xf5, 0x6f, 0x26, 0xb6, 0xbc, 0x0a, 0xde, 0x63, 0xec, 0x5f, 0xd0, 0x6d, 0x55, 0x2c,
0xe7, 0xf7, 0x19, 0x7c, 0x27, 0x3f, 0xd2, 0xac, 0x90, 0x8d, 0x5d, 0xc0, 0x87, 0x15, 0x2a, 0x6f,
0xe5, 0x72, 0xed, 0xe1, 0xf7, 0xa0, 0x63, 0x3b, 0xf3, 0x79, 0xa4, 0xb7, 0x1b, 0x6e, 0x27, 0xa9,
0x36, 0x7e, 0xd7, 0x82, 0xae, 0xbc, 0x5b, 0xf0, 0x90, 0x78, 0xce, 0x72, 0xbc, 0xa9, 0x63, 0xa7,
0x15, 0x23, 0xc6, 0x13, 0xbb, 0xe9, 0xb6, 0xa4, 0x54, 0x62, 0x67, 0xc5, 0x15, 0xd8, 0xc5, 0x37,
0x1e, 0x40, 0xcf, 0x4b, 0x56, 0xd3, 0xf8, 0x2e, 0x12, 0xa8, 0x6e, 0x9b, 0x5d, 0x2f, 0x59, 0xbd,
0xbd, 0x8b, 0xf0, 0x18, 0x36, 0x0b, 0xd0, 0x77, 0x6c, 0x45, 0xe0, 0x23, 0xb5, 0x34, 0xb1, 0xee,
0xc9, 0x2b, 0x73, 0x98, 0x15, 0xc1, 0xc4, 0xc6, 0x23, 0x10, 0x35, 0x31, 0x95, 0x24, 0x29, 0x6b,
0xa5, 0x2b, 0xf6, 0x6d, 0x44, 0x72, 0xc5, 0xa2, 0x74, 0x71, 0x7e, 0x0b, 0x06, 0xb4, 0x93, 0xd2,
0xa4, 0x27, 0x4c, 0xfa, 0x24, 0x10, 0xca, 0x0f, 0x61, 0x2b, 0xbf, 0x8c, 0xa5, 0x49, 0x5f, 0x46,
0xc9, 0xc5, 0xc2, 0xf0, 0x10, 0xfa, 0x59, 0x4d, 0x0e, 0x84, 0x45, 0xcf, 0x52, 0xa5, 0x38, 0x81,
0x9e, 0x5a, 0x62, 0xed, 0xc5, 0xfd, 0x04, 0x3a, 0x81, 0x15, 0xc6, 0x91, 0xba, 0x20, 0x53, 0x82,
0xbb, 0xb2, 0x42, 0xea, 0x95, 0xd4, 0xf5, 0x2d, 0x4d, 0x8c, 0x13, 0xd8, 0x2c, 0xc9, 0x89, 0xd1,
0x62, 0x3f, 0xb6, 0x5c, 0x75, 0x75, 0xcb, 0x41, 0x36, 0x4d, 0x2b, 0x9f, 0xc6, 0x38, 0x81, 0x41,
0x76, 0x86, 0x74, 0x2c, 0x41, 0x72, 0xfd, 0x59, 0xd6, 0xd9, 0xa8, 0x11, 0x85, 0x0b, 0xfc, 0xaf,
0x55, 0x0f, 0xd1, 0x36, 0xe5, 0xe0, 0xc9, 0x9f, 0x34, 0x18, 0x7e, 0x2e, 0x29, 0x90, 0xd0, 0x88,
0x5b, 0x30, 0x7c, 0x9d, 0xb8, 0xae, 0x12, 0xb1, 0x35, 0xec, 0x43, 0x9b, 0x98, 0x93, 0x69, 0x38,
0x80, 0x8e, 0x60, 0x46, 0xd6, 0x22, 0x21, 0x51, 0x22, 0x5b, 0xc7, 0x4d, 0x18, 0x64, 0x1c, 0xc4,
0xda, 0x34, 0xcc, 0x28, 0x99, 0x75, 0x68, 0x98, 0x51, 0x0f, 0xdb, 0xc6, 0x21, 0xf4, 0x14, 0x53,
0x30, 0x44, 0x80, 0xae, 0x3c, 0x29, 0xb6, 0x43, 0xa1, 0x45, 0x91, 0xb3, 0x5d, 0x72, 0xc9, 0xa0,
0xcd, 0xf6, 0x70, 0x04, 0x90, 0x83, 0x9a, 0xed, 0xe3, 0x06, 0xf4, 0x53, 0x38, 0xb3, 0x03, 0xf2,
0x13, 0x05, 0xcc, 0xf4, 0x27, 0xbf, 0xef, 0x40, 0x3f, 0xad, 0x29, 0xec, 0x42, 0xeb, 0xcd, 0x67,
0x6c, 0x0d, 0xb7, 0x61, 0x73, 0xe2, 0xc5, 0x3c, 0xf4, 0x2c, 0xf7, 0x9c, 0xee, 0x03, 0xa6, 0x91,
0xe8, 0xdc, 0x9b, 0xf9, 0xb6, 0xe3, 0x2d, 0xa4, 0xa8, 0x45, 0x31, 0xcf, 0x2c, 0xfb, 0xb5, 0xef,
0xcd, 0x38, 0x5b, 0x47, 0x06, 0x1b, 0x5f, 0x7a, 0x56, 0x12, 0x2f, 0xfd, 0xd0, 0xf9, 0x0d, 0xb7,
0x59, 0x1b, 0xf7, 0x60, 0x7b, 0xe2, 0x45, 0xc9, 0x7c, 0xee, 0xcc, 0x1c, 0xee, 0xc5, 0x9f, 0x26,
0x9e, 0x1d, 0xb1, 0x0e, 0x22, 0x8c, 0xbe, 0xf4, 0x6e, 0x3c, 0xff, 0x6b, 0x4f, 0x75, 0x5d, 0xac,
0x8b, 0x3a, 0xec, 0x9e, 0x59, 0x11, 0x7f, 0x95, 0x04, 0xae, 0x33, 0xb3, 0x62, 0x7e, 0x6a, 0xdb,
0x21, 0x8f, 0x22, 0xc6, 0x29, 0x08, 0x69, 0xca, 0x73, 0xcf, 0x53, 0x87, 0x52, 0x7c, 0xce, 0x23,
0xb6, 0xc0, 0x43, 0xd8, 0x7b, 0xa0, 0x11, 0x33, 0x2f, 0xf1, 0xdb, 0xa0, 0x57, 0x55, 0x17, 0x56,
0x74, 0x15, 0x3a, 0x33, 0xce, 0x1c, 0xdc, 0x05, 0x26, 0xb5, 0x02, 0xc6, 0x13, 0x2f, 0x48, 0x62,
0xf6, 0xeb, 0x74, 0x7e, 0x25, 0x7d, 0x93, 0xc4, 0x24, 0xbe, 0xa9, 0x88, 0xaf, 0x04, 0x54, 0x98,
0x8b, 0x07, 0xb0, 0x53, 0x10, 0x7f, 0x41, 0xf9, 0xd1, 0xee, 0xac, 0xf2, 0xf5, 0x4a, 0x85, 0xb3,
0xf0, 0xac, 0x38, 0x09, 0x39, 0xf3, 0x70, 0x1f, 0x90, 0x34, 0x6a, 0x4b, 0xd2, 0xc4, 0xfd, 0x74,
0x06, 0x25, 0x57, 0x33, 0x04, 0x55, 0xb1, 0x9b, 0x2c, 0x1c, 0x8f, 0xbd, 0xc3, 0x3d, 0x60, 0x17,
0xfe, 0xad, 0x92, 0x9e, 0x7b, 0xb1, 0x13, 0xdf, 0xb3, 0x3f, 0x6b, 0xb8, 0x0b, 0x5b, 0xb9, 0xf8,
0x22, 0xf4, 0x93, 0x80, 0xfd, 0x45, 0xc3, 0x03, 0xc0, 0x5c, 0x7a, 0x15, 0xfa, 0x81, 0x1f, 0x59,
0x2e, 0xfb, 0xab, 0x86, 0xfb, 0xb0, 0x7d, 0xe1, 0xdf, 0x66, 0xa7, 0x20, 0x1d, 0xfe, 0x96, 0x3a,
0x64, 0xf2, 0xcf, 0xf9, 0xea, 0x9a, 0x87, 0xec, 0xef, 0x1a, 0x1e, 0xc2, 0x6e, 0x51, 0x91, 0xc5,
0xfa, 0x87, 0xa6, 0x56, 0x94, 0xa9, 0xbe, 0xf2, 0x63, 0xce, 0xfe, 0x99, 0x8a, 0xd5, 0x3e, 0xa8,
0x40, 0xff, 0xd2, 0x70, 0x07, 0x46, 0xb9, 0x58, 0xd8, 0xfe, 0x5b, 0xc3, 0x31, 0xec, 0x95, 0x84,
0x8e, 0xb7, 0xb8, 0xa2, 0xea, 0x63, 0xff, 0xd1, 0x8e, 0xff, 0xd8, 0x81, 0xad, 0xd3, 0xb3, 0x97,
0x93, 0xd3, 0x40, 0x4e, 0x40, 0x77, 0xf9, 0x73, 0x59, 0x73, 0x58, 0xf3, 0xef, 0x7f, 0x5c, 0xd7,
0x64, 0xe3, 0xb1, 0x2a, 0x4d, 0xac, 0x7b, 0x04, 0x18, 0xd7, 0xf6, 0xda, 0x34, 0x89, 0x6c, 0x6b,
0x1e, 0xbe, 0x05, 0x8c, 0xeb, 0x1a, 0x6e, 0xfc, 0x69, 0xa1, 0xd4, 0xb1, 0xe9, 0x45, 0x60, 0xdc,
0xd8, 0x7a, 0x93, 0x7f, 0xde, 0x87, 0x34, 0xbd, 0x0b, 0x8c, 0x1b, 0xfb, 0x6f, 0x7c, 0x91, 0xb1,
0x07, 0xd6, 0xbf, 0x0e, 0x8c, 0x1b, 0x5a, 0x70, 0xda, 0x1e, 0xd9, 0x43, 0xd4, 0xfd, 0xe9, 0x1f,
0xd7, 0x76, 0xd5, 0xe4, 0x23, 0x7b, 0x83, 0xba, 0x7f, 0xd3, 0xe3, 0xda, 0x56, 0x15, 0x3f, 0x4e,
0x29, 0x0d, 0x6b, 0x1f, 0x23, 0xc6, 0xf5, 0xfd, 0x3e, 0x6d, 0x4c, 0xfe, 0x37, 0xb2, 0xe9, 0x95,
0x61, 0xdc, 0xd8, 0xc9, 0xe3, 0x69, 0x91, 0x23, 0xb1, 0xf1, 0xad, 0x61, 0xdc, 0xdc, 0xcf, 0xe3,
0x27, 0x39, 0xad, 0x62, 0xc3, 0x8b, 0xc3, 0xb8, 0xa9, 0xa5, 0xbf, 0xee, 0x8a, 0xc7, 0xac, 0x8f,
0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x2e, 0xe2, 0x17, 0xe1, 0x12, 0x00, 0x00,
}

+ 64
- 64
types/types.proto View File

@ -11,63 +11,63 @@ package types;
// so we don't have to type switch
// (would be twice as fast, but we're talking about 15ns)
enum MessageType {
NullMessage = 0x00;
Echo = 0x01;
Flush = 0x02;
Info = 0x03;
SetOption = 0x04;
Exception = 0x05;
DeliverTx = 0x11;
CheckTx = 0x12;
Commit = 0x13;
Query = 0x14;
InitChain = 0x15;
BeginBlock = 0x16;
EndBlock = 0x17;
Proof = 0x18;
NullMessage = 0x00;
Echo = 0x01;
Flush = 0x02;
Info = 0x03;
SetOption = 0x04;
Exception = 0x05;
DeliverTx = 0x11;
CheckTx = 0x12;
Commit = 0x13;
Query = 0x14;
InitChain = 0x15;
BeginBlock = 0x16;
EndBlock = 0x17;
Proof = 0x18;
}
//----------------------------------------
// Code types
enum CodeType {
OK = 0;
// General response codes, 0 ~ 99
InternalError = 1;
EncodingError = 2;
BadNonce = 3;
Unauthorized = 4;
InsufficientFunds = 5;
UnknownRequest = 6;
// Reserved for basecoin, 100 ~ 199
BaseDuplicateAddress = 101;
BaseEncodingError = 102;
BaseInsufficientFees = 103;
BaseInsufficientFunds = 104;
BaseInsufficientGasPrice = 105;
BaseInvalidInput = 106;
BaseInvalidOutput = 107;
BaseInvalidPubKey = 108;
BaseInvalidSequence = 109;
BaseInvalidSignature = 110;
BaseUnknownAddress = 111;
BaseUnknownPubKey = 112;
BaseUnknownPlugin = 113;
// Reserved for governance, 200 ~ 299
GovUnknownEntity = 201;
GovUnknownGroup = 202;
GovUnknownProposal = 203;
GovDuplicateGroup = 204;
GovDuplicateMember = 205;
GovDuplicateProposal = 206;
GovDuplicateVote = 207;
GovInvalidMember = 208;
GovInvalidVote = 209;
GovInvalidVotingPower = 210;
OK = 0;
// General response codes, 0 ~ 99
InternalError = 1;
EncodingError = 2;
BadNonce = 3;
Unauthorized = 4;
InsufficientFunds = 5;
UnknownRequest = 6;
// Reserved for basecoin, 100 ~ 199
BaseDuplicateAddress = 101;
BaseEncodingError = 102;
BaseInsufficientFees = 103;
BaseInsufficientFunds = 104;
BaseInsufficientGasPrice = 105;
BaseInvalidInput = 106;
BaseInvalidOutput = 107;
BaseInvalidPubKey = 108;
BaseInvalidSequence = 109;
BaseInvalidSignature = 110;
BaseUnknownAddress = 111;
BaseUnknownPubKey = 112;
BaseUnknownPlugin = 113;
// Reserved for governance, 200 ~ 299
GovUnknownEntity = 201;
GovUnknownGroup = 202;
GovUnknownProposal = 203;
GovDuplicateGroup = 204;
GovDuplicateMember = 205;
GovDuplicateProposal = 206;
GovDuplicateVote = 207;
GovInvalidMember = 208;
GovInvalidVote = 209;
GovInvalidVotingPower = 210;
}
@ -87,7 +87,7 @@ message Request {
RequestInitChain init_chain = 9;
RequestBeginBlock begin_block = 10;
RequestEndBlock end_block = 11;
RequestProof proof = 12;
RequestProof proof = 12;
}
}
@ -107,20 +107,20 @@ message RequestSetOption{
}
message RequestDeliverTx{
bytes tx = 1;
bytes tx = 1;
}
message RequestCheckTx{
bytes tx = 1;
bytes tx = 1;
}
message RequestQuery{
bytes query = 1;
bytes query = 1;
}
message RequestProof{
bytes key = 1;
int64 height = 2;
bytes key = 1;
uint64 height = 2;
}
message RequestCommit{
@ -157,7 +157,7 @@ message Response {
ResponseInitChain init_chain = 10;
ResponseBeginBlock begin_block = 11;
ResponseEndBlock end_block = 12;
ResponseProof proof = 13;
ResponseProof proof = 13;
}
}
@ -202,9 +202,9 @@ message ResponseQuery{
}
message ResponseProof{
CodeType code = 1;
bytes data = 2;
string log = 3;
CodeType code = 1;
bytes data = 2;
string log = 3;
}
message ResponseCommit{
@ -250,8 +250,8 @@ message PartSetHeader {
}
message Validator {
bytes pubKey = 1;
uint64 power = 2;
bytes pubKey = 1;
uint64 power = 2;
}
//----------------------------------------
@ -265,7 +265,7 @@ service ABCIApplication {
rpc DeliverTx(RequestDeliverTx) returns (ResponseDeliverTx);
rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx);
rpc Query(RequestQuery) returns (ResponseQuery);
rpc Proof(RequestProof) returns (ResponseProof);
rpc Proof(RequestProof) returns (ResponseProof);
rpc Commit(RequestCommit) returns (ResponseCommit);
rpc InitChain(RequestInitChain) returns (ResponseInitChain);
rpc BeginBlock(RequestBeginBlock) returns (ResponseBeginBlock);


Loading…
Cancel
Save