From 8149b7110696e943c05774d70ae6adbde50f53c7 Mon Sep 17 00:00:00 2001 From: yan-soon Date: Thu, 18 Apr 2024 18:22:54 +0800 Subject: [PATCH] add validateOracleVotes hook --- abci/client/grpc_client.go | 4 + abci/client/mocks/client.go | 26 + abci/client/socket_client.go | 11 + abci/types/application.go | 5 + abci/types/messages.go | 6 + abci/types/mocks/application.go | 26 + abci/types/types.pb.go | 1204 ++++++++++++++++++++++------- proto/buf.yaml | 1 - proto/tendermint/abci/types.proto | 21 +- proto/tendermint/oracle/tx.proto | 25 - proxy/app_conn.go | 6 + proxy/mocks/app_conn_consensus.go | 26 + state/execution.go | 21 +- 13 files changed, 1047 insertions(+), 335 deletions(-) delete mode 100644 proto/tendermint/oracle/tx.proto diff --git a/abci/client/grpc_client.go b/abci/client/grpc_client.go index 9da15a5a27d..e2b5a2f3932 100644 --- a/abci/client/grpc_client.go +++ b/abci/client/grpc_client.go @@ -253,3 +253,7 @@ func (cli *grpcClient) SignGossipVote(ctx context.Context, req *types.RequestSig func (cli *grpcClient) PrepareOracleVotes(ctx context.Context, req *types.RequestPrepareOracleVotes) (*types.ResponsePrepareOracleVotes, error) { return cli.client.PrepareOracleVotes(ctx, types.ToRequestPrepareOracleVotes(req).GetPrepareOracleVotes(), grpc.WaitForReady(true)) } + +func (cli *grpcClient) ValidateOracleVotes(ctx context.Context, req *types.RequestValidateOracleVotes) (*types.ResponseValidateOracleVotes, error) { + return cli.client.ValidateOracleVotes(ctx, types.ToRequestValidateOracleVotes(req).GetValidateOracleVotes(), grpc.WaitForReady(true)) +} diff --git a/abci/client/mocks/client.go b/abci/client/mocks/client.go index bd0cb9d3545..71fc6565492 100644 --- a/abci/client/mocks/client.go +++ b/abci/client/mocks/client.go @@ -618,6 +618,32 @@ func (_m *Client) String() string { return r0 } +// ValidateOracleVotes provides a mock function with given fields: _a0, _a1 +func (_m *Client) ValidateOracleVotes(_a0 context.Context, _a1 *types.RequestValidateOracleVotes) (*types.ResponseValidateOracleVotes, error) { + ret := _m.Called(_a0, _a1) + + var r0 *types.ResponseValidateOracleVotes + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *types.RequestValidateOracleVotes) (*types.ResponseValidateOracleVotes, error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *types.RequestValidateOracleVotes) *types.ResponseValidateOracleVotes); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*types.ResponseValidateOracleVotes) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *types.RequestValidateOracleVotes) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // VerifyVoteExtension provides a mock function with given fields: _a0, _a1 func (_m *Client) VerifyVoteExtension(_a0 context.Context, _a1 *types.RequestVerifyVoteExtension) (*types.ResponseVerifyVoteExtension, error) { ret := _m.Called(_a0, _a1) diff --git a/abci/client/socket_client.go b/abci/client/socket_client.go index 50061df42e8..45d383968a6 100644 --- a/abci/client/socket_client.go +++ b/abci/client/socket_client.go @@ -434,6 +434,17 @@ func (cli *socketClient) PrepareOracleVotes(ctx context.Context, req *types.Requ return reqRes.Response.GetPrepareOracleVotes(), cli.Error() } +func (cli *socketClient) ValidateOracleVotes(ctx context.Context, req *types.RequestValidateOracleVotes) (*types.ResponseValidateOracleVotes, error) { + reqRes, err := cli.queueRequest(ctx, types.ToRequestValidateOracleVotes(req)) + if err != nil { + return nil, err + } + if err := cli.Flush(ctx); err != nil { + return nil, err + } + return reqRes.Response.GetValidateOracleVotes(), cli.Error() +} + func (cli *socketClient) queueRequest(ctx context.Context, req *types.Request) (*ReqRes, error) { reqres := NewReqRes(req) diff --git a/abci/types/application.go b/abci/types/application.go index 53efb1df743..aba4b1bc5db 100644 --- a/abci/types/application.go +++ b/abci/types/application.go @@ -38,6 +38,7 @@ type Application interface { // Hooks SignGossipVote(context.Context, *RequestSignGossipVote) (*ResponseSignGossipVote, error) PrepareOracleVotes(context.Context, *RequestPrepareOracleVotes) (*ResponsePrepareOracleVotes, error) + ValidateOracleVotes(context.Context, *RequestValidateOracleVotes) (*ResponseValidateOracleVotes, error) } //------------------------------------------------------- @@ -131,3 +132,7 @@ func (BaseApplication) SignGossipVote(_ context.Context, req *RequestSignGossipV func (BaseApplication) PrepareOracleVotes(_ context.Context, req *RequestPrepareOracleVotes) (*ResponsePrepareOracleVotes, error) { return &ResponsePrepareOracleVotes{}, nil } + +func (BaseApplication) ValidateOracleVotes(_ context.Context, req *RequestValidateOracleVotes) (*ResponseValidateOracleVotes, error) { + return &ResponseValidateOracleVotes{}, nil +} diff --git a/abci/types/messages.go b/abci/types/messages.go index 57bd2d4271b..a9a17d7ebe1 100644 --- a/abci/types/messages.go +++ b/abci/types/messages.go @@ -136,6 +136,12 @@ func ToRequestPrepareOracleVotes(req *RequestPrepareOracleVotes) *Request { } } +func ToRequestValidateOracleVotes(req *RequestValidateOracleVotes) *Request { + return &Request{ + Value: &Request_ValidateOracleVotes{req}, + } +} + //---------------------------------------- func ToResponseException(errStr string) *Response { diff --git a/abci/types/mocks/application.go b/abci/types/mocks/application.go index 7a26813b53c..d9816a6f9ed 100644 --- a/abci/types/mocks/application.go +++ b/abci/types/mocks/application.go @@ -404,6 +404,32 @@ func (_m *Application) SignGossipVote(_a0 context.Context, _a1 *types.RequestSig return r0, r1 } +// ValidateOracleVotes provides a mock function with given fields: _a0, _a1 +func (_m *Application) ValidateOracleVotes(_a0 context.Context, _a1 *types.RequestValidateOracleVotes) (*types.ResponseValidateOracleVotes, error) { + ret := _m.Called(_a0, _a1) + + var r0 *types.ResponseValidateOracleVotes + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *types.RequestValidateOracleVotes) (*types.ResponseValidateOracleVotes, error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *types.RequestValidateOracleVotes) *types.ResponseValidateOracleVotes); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*types.ResponseValidateOracleVotes) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *types.RequestValidateOracleVotes) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // VerifyVoteExtension provides a mock function with given fields: _a0, _a1 func (_m *Application) VerifyVoteExtension(_a0 context.Context, _a1 *types.RequestVerifyVoteExtension) (*types.ResponseVerifyVoteExtension, error) { ret := _m.Called(_a0, _a1) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index 9518b4054ba..791f55bd16d 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -122,7 +122,7 @@ func (x ResponseOfferSnapshot_Result) String() string { } func (ResponseOfferSnapshot_Result) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{29, 0} + return fileDescriptor_252557cfdd89a31a, []int{30, 0} } type ResponseApplySnapshotChunk_Result int32 @@ -159,7 +159,7 @@ func (x ResponseApplySnapshotChunk_Result) String() string { } func (ResponseApplySnapshotChunk_Result) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{31, 0} + return fileDescriptor_252557cfdd89a31a, []int{32, 0} } type ResponseProcessProposal_ProposalStatus int32 @@ -187,7 +187,7 @@ func (x ResponseProcessProposal_ProposalStatus) String() string { } func (ResponseProcessProposal_ProposalStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{33, 0} + return fileDescriptor_252557cfdd89a31a, []int{34, 0} } type ResponseVerifyVoteExtension_VerifyStatus int32 @@ -219,7 +219,32 @@ func (x ResponseVerifyVoteExtension_VerifyStatus) String() string { } func (ResponseVerifyVoteExtension_VerifyStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{35, 0} + return fileDescriptor_252557cfdd89a31a, []int{36, 0} +} + +type ResponseValidateOracleVotes_Status int32 + +const ( + ResponseValidateOracleVotes_present ResponseValidateOracleVotes_Status = 0 + ResponseValidateOracleVotes_absent ResponseValidateOracleVotes_Status = 1 +) + +var ResponseValidateOracleVotes_Status_name = map[int32]string{ + 0: "present", + 1: "absent", +} + +var ResponseValidateOracleVotes_Status_value = map[string]int32{ + "present": 0, + "absent": 1, +} + +func (x ResponseValidateOracleVotes_Status) String() string { + return proto.EnumName(ResponseValidateOracleVotes_Status_name, int32(x)) +} + +func (ResponseValidateOracleVotes_Status) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{41, 0} } type Request struct { @@ -242,6 +267,7 @@ type Request struct { // *Request_FinalizeBlock // *Request_SignGossipVote // *Request_PrepareOracleVotes + // *Request_ValidateOracleVotes Value isRequest_Value `protobuf_oneof:"value"` } @@ -338,6 +364,9 @@ type Request_SignGossipVote struct { type Request_PrepareOracleVotes struct { PrepareOracleVotes *RequestPrepareOracleVotes `protobuf:"bytes,22,opt,name=prepare_oracle_votes,json=prepareOracleVotes,proto3,oneof" json:"prepare_oracle_votes,omitempty"` } +type Request_ValidateOracleVotes struct { + ValidateOracleVotes *RequestValidateOracleVotes `protobuf:"bytes,23,opt,name=validate_oracle_votes,json=validateOracleVotes,proto3,oneof" json:"validate_oracle_votes,omitempty"` +} func (*Request_Echo) isRequest_Value() {} func (*Request_Flush) isRequest_Value() {} @@ -357,6 +386,7 @@ func (*Request_VerifyVoteExtension) isRequest_Value() {} func (*Request_FinalizeBlock) isRequest_Value() {} func (*Request_SignGossipVote) isRequest_Value() {} func (*Request_PrepareOracleVotes) isRequest_Value() {} +func (*Request_ValidateOracleVotes) isRequest_Value() {} func (m *Request) GetValue() isRequest_Value { if m != nil { @@ -491,6 +521,13 @@ func (m *Request) GetPrepareOracleVotes() *RequestPrepareOracleVotes { return nil } +func (m *Request) GetValidateOracleVotes() *RequestValidateOracleVotes { + if x, ok := m.GetValue().(*Request_ValidateOracleVotes); ok { + return x.ValidateOracleVotes + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*Request) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -512,6 +549,7 @@ func (*Request) XXX_OneofWrappers() []interface{} { (*Request_FinalizeBlock)(nil), (*Request_SignGossipVote)(nil), (*Request_PrepareOracleVotes)(nil), + (*Request_ValidateOracleVotes)(nil), } } @@ -1695,6 +1733,50 @@ func (m *RequestPrepareOracleVotes) XXX_DiscardUnknown() { var xxx_messageInfo_RequestPrepareOracleVotes proto.InternalMessageInfo +type RequestValidateOracleVotes struct { + OracleTx []byte `protobuf:"bytes,1,opt,name=oracle_tx,json=oracleTx,proto3" json:"oracle_tx,omitempty"` +} + +func (m *RequestValidateOracleVotes) Reset() { *m = RequestValidateOracleVotes{} } +func (m *RequestValidateOracleVotes) String() string { return proto.CompactTextString(m) } +func (*RequestValidateOracleVotes) ProtoMessage() {} +func (*RequestValidateOracleVotes) Descriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{19} +} +func (m *RequestValidateOracleVotes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RequestValidateOracleVotes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RequestValidateOracleVotes.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RequestValidateOracleVotes) XXX_Merge(src proto.Message) { + xxx_messageInfo_RequestValidateOracleVotes.Merge(m, src) +} +func (m *RequestValidateOracleVotes) XXX_Size() int { + return m.Size() +} +func (m *RequestValidateOracleVotes) XXX_DiscardUnknown() { + xxx_messageInfo_RequestValidateOracleVotes.DiscardUnknown(m) +} + +var xxx_messageInfo_RequestValidateOracleVotes proto.InternalMessageInfo + +func (m *RequestValidateOracleVotes) GetOracleTx() []byte { + if m != nil { + return m.OracleTx + } + return nil +} + type Response struct { // Types that are valid to be assigned to Value: // @@ -1717,6 +1799,7 @@ type Response struct { // *Response_FinalizeBlock // *Response_SignGossipVote // *Response_PrepareOracleVotes + // *Response_ValidateOracleVotes Value isResponse_Value `protobuf_oneof:"value"` } @@ -1724,7 +1807,7 @@ func (m *Response) Reset() { *m = Response{} } func (m *Response) String() string { return proto.CompactTextString(m) } func (*Response) ProtoMessage() {} func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{19} + return fileDescriptor_252557cfdd89a31a, []int{20} } func (m *Response) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1816,6 +1899,9 @@ type Response_SignGossipVote struct { type Response_PrepareOracleVotes struct { PrepareOracleVotes *ResponsePrepareOracleVotes `protobuf:"bytes,23,opt,name=prepare_oracle_votes,json=prepareOracleVotes,proto3,oneof" json:"prepare_oracle_votes,omitempty"` } +type Response_ValidateOracleVotes struct { + ValidateOracleVotes *ResponseValidateOracleVotes `protobuf:"bytes,24,opt,name=validate_oracle_votes,json=validateOracleVotes,proto3,oneof" json:"validate_oracle_votes,omitempty"` +} func (*Response_Exception) isResponse_Value() {} func (*Response_Echo) isResponse_Value() {} @@ -1836,6 +1922,7 @@ func (*Response_VerifyVoteExtension) isResponse_Value() {} func (*Response_FinalizeBlock) isResponse_Value() {} func (*Response_SignGossipVote) isResponse_Value() {} func (*Response_PrepareOracleVotes) isResponse_Value() {} +func (*Response_ValidateOracleVotes) isResponse_Value() {} func (m *Response) GetValue() isResponse_Value { if m != nil { @@ -1977,6 +2064,13 @@ func (m *Response) GetPrepareOracleVotes() *ResponsePrepareOracleVotes { return nil } +func (m *Response) GetValidateOracleVotes() *ResponseValidateOracleVotes { + if x, ok := m.GetValue().(*Response_ValidateOracleVotes); ok { + return x.ValidateOracleVotes + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*Response) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -1999,6 +2093,7 @@ func (*Response) XXX_OneofWrappers() []interface{} { (*Response_FinalizeBlock)(nil), (*Response_SignGossipVote)(nil), (*Response_PrepareOracleVotes)(nil), + (*Response_ValidateOracleVotes)(nil), } } @@ -2011,7 +2106,7 @@ func (m *ResponseException) Reset() { *m = ResponseException{} } func (m *ResponseException) String() string { return proto.CompactTextString(m) } func (*ResponseException) ProtoMessage() {} func (*ResponseException) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{20} + return fileDescriptor_252557cfdd89a31a, []int{21} } func (m *ResponseException) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2055,7 +2150,7 @@ func (m *ResponseEcho) Reset() { *m = ResponseEcho{} } func (m *ResponseEcho) String() string { return proto.CompactTextString(m) } func (*ResponseEcho) ProtoMessage() {} func (*ResponseEcho) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{21} + return fileDescriptor_252557cfdd89a31a, []int{22} } func (m *ResponseEcho) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2098,7 +2193,7 @@ func (m *ResponseFlush) Reset() { *m = ResponseFlush{} } func (m *ResponseFlush) String() string { return proto.CompactTextString(m) } func (*ResponseFlush) ProtoMessage() {} func (*ResponseFlush) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{22} + return fileDescriptor_252557cfdd89a31a, []int{23} } func (m *ResponseFlush) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2139,7 +2234,7 @@ func (m *ResponseInfo) Reset() { *m = ResponseInfo{} } func (m *ResponseInfo) String() string { return proto.CompactTextString(m) } func (*ResponseInfo) ProtoMessage() {} func (*ResponseInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{23} + return fileDescriptor_252557cfdd89a31a, []int{24} } func (m *ResponseInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2213,7 +2308,7 @@ func (m *ResponseInitChain) Reset() { *m = ResponseInitChain{} } func (m *ResponseInitChain) String() string { return proto.CompactTextString(m) } func (*ResponseInitChain) ProtoMessage() {} func (*ResponseInitChain) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{24} + return fileDescriptor_252557cfdd89a31a, []int{25} } func (m *ResponseInitChain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2280,7 +2375,7 @@ func (m *ResponseQuery) Reset() { *m = ResponseQuery{} } func (m *ResponseQuery) String() string { return proto.CompactTextString(m) } func (*ResponseQuery) ProtoMessage() {} func (*ResponseQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{25} + return fileDescriptor_252557cfdd89a31a, []int{26} } func (m *ResponseQuery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2387,7 +2482,7 @@ func (m *ResponseCheckTx) Reset() { *m = ResponseCheckTx{} } func (m *ResponseCheckTx) String() string { return proto.CompactTextString(m) } func (*ResponseCheckTx) ProtoMessage() {} func (*ResponseCheckTx) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{26} + return fileDescriptor_252557cfdd89a31a, []int{27} } func (m *ResponseCheckTx) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2480,7 +2575,7 @@ func (m *ResponseCommit) Reset() { *m = ResponseCommit{} } func (m *ResponseCommit) String() string { return proto.CompactTextString(m) } func (*ResponseCommit) ProtoMessage() {} func (*ResponseCommit) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{27} + return fileDescriptor_252557cfdd89a31a, []int{28} } func (m *ResponseCommit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2524,7 +2619,7 @@ func (m *ResponseListSnapshots) Reset() { *m = ResponseListSnapshots{} } func (m *ResponseListSnapshots) String() string { return proto.CompactTextString(m) } func (*ResponseListSnapshots) ProtoMessage() {} func (*ResponseListSnapshots) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{28} + return fileDescriptor_252557cfdd89a31a, []int{29} } func (m *ResponseListSnapshots) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2568,7 +2663,7 @@ func (m *ResponseOfferSnapshot) Reset() { *m = ResponseOfferSnapshot{} } func (m *ResponseOfferSnapshot) String() string { return proto.CompactTextString(m) } func (*ResponseOfferSnapshot) ProtoMessage() {} func (*ResponseOfferSnapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{29} + return fileDescriptor_252557cfdd89a31a, []int{30} } func (m *ResponseOfferSnapshot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2612,7 +2707,7 @@ func (m *ResponseLoadSnapshotChunk) Reset() { *m = ResponseLoadSnapshotC func (m *ResponseLoadSnapshotChunk) String() string { return proto.CompactTextString(m) } func (*ResponseLoadSnapshotChunk) ProtoMessage() {} func (*ResponseLoadSnapshotChunk) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{30} + return fileDescriptor_252557cfdd89a31a, []int{31} } func (m *ResponseLoadSnapshotChunk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2658,7 +2753,7 @@ func (m *ResponseApplySnapshotChunk) Reset() { *m = ResponseApplySnapsho func (m *ResponseApplySnapshotChunk) String() string { return proto.CompactTextString(m) } func (*ResponseApplySnapshotChunk) ProtoMessage() {} func (*ResponseApplySnapshotChunk) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{31} + return fileDescriptor_252557cfdd89a31a, []int{32} } func (m *ResponseApplySnapshotChunk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2716,7 +2811,7 @@ func (m *ResponsePrepareProposal) Reset() { *m = ResponsePrepareProposal func (m *ResponsePrepareProposal) String() string { return proto.CompactTextString(m) } func (*ResponsePrepareProposal) ProtoMessage() {} func (*ResponsePrepareProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{32} + return fileDescriptor_252557cfdd89a31a, []int{33} } func (m *ResponsePrepareProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2760,7 +2855,7 @@ func (m *ResponseProcessProposal) Reset() { *m = ResponseProcessProposal func (m *ResponseProcessProposal) String() string { return proto.CompactTextString(m) } func (*ResponseProcessProposal) ProtoMessage() {} func (*ResponseProcessProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{33} + return fileDescriptor_252557cfdd89a31a, []int{34} } func (m *ResponseProcessProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2804,7 +2899,7 @@ func (m *ResponseExtendVote) Reset() { *m = ResponseExtendVote{} } func (m *ResponseExtendVote) String() string { return proto.CompactTextString(m) } func (*ResponseExtendVote) ProtoMessage() {} func (*ResponseExtendVote) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{34} + return fileDescriptor_252557cfdd89a31a, []int{35} } func (m *ResponseExtendVote) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2848,7 +2943,7 @@ func (m *ResponseVerifyVoteExtension) Reset() { *m = ResponseVerifyVoteE func (m *ResponseVerifyVoteExtension) String() string { return proto.CompactTextString(m) } func (*ResponseVerifyVoteExtension) ProtoMessage() {} func (*ResponseVerifyVoteExtension) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{35} + return fileDescriptor_252557cfdd89a31a, []int{36} } func (m *ResponseVerifyVoteExtension) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2903,7 +2998,7 @@ func (m *ResponseFinalizeBlock) Reset() { *m = ResponseFinalizeBlock{} } func (m *ResponseFinalizeBlock) String() string { return proto.CompactTextString(m) } func (*ResponseFinalizeBlock) ProtoMessage() {} func (*ResponseFinalizeBlock) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{36} + return fileDescriptor_252557cfdd89a31a, []int{37} } func (m *ResponseFinalizeBlock) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2975,7 +3070,7 @@ func (m *ResponseSignGossipVote) Reset() { *m = ResponseSignGossipVote{} func (m *ResponseSignGossipVote) String() string { return proto.CompactTextString(m) } func (*ResponseSignGossipVote) ProtoMessage() {} func (*ResponseSignGossipVote) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{37} + return fileDescriptor_252557cfdd89a31a, []int{38} } func (m *ResponseSignGossipVote) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3021,7 +3116,7 @@ func (m *Vote) Reset() { *m = Vote{} } func (m *Vote) String() string { return proto.CompactTextString(m) } func (*Vote) ProtoMessage() {} func (*Vote) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{38} + return fileDescriptor_252557cfdd89a31a, []int{39} } func (m *Vote) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3079,7 +3174,7 @@ func (m *ResponsePrepareOracleVotes) Reset() { *m = ResponsePrepareOracl func (m *ResponsePrepareOracleVotes) String() string { return proto.CompactTextString(m) } func (*ResponsePrepareOracleVotes) ProtoMessage() {} func (*ResponsePrepareOracleVotes) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{39} + return fileDescriptor_252557cfdd89a31a, []int{40} } func (m *ResponsePrepareOracleVotes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3115,6 +3210,58 @@ func (m *ResponsePrepareOracleVotes) GetVotes() []Vote { return nil } +type ResponseValidateOracleVotes struct { + EncodedOracleTx []byte `protobuf:"bytes,1,opt,name=encoded_oracle_tx,json=encodedOracleTx,proto3" json:"encoded_oracle_tx,omitempty"` + Status ResponseValidateOracleVotes_Status `protobuf:"varint,2,opt,name=status,proto3,enum=tendermint.abci.ResponseValidateOracleVotes_Status" json:"status,omitempty"` +} + +func (m *ResponseValidateOracleVotes) Reset() { *m = ResponseValidateOracleVotes{} } +func (m *ResponseValidateOracleVotes) String() string { return proto.CompactTextString(m) } +func (*ResponseValidateOracleVotes) ProtoMessage() {} +func (*ResponseValidateOracleVotes) Descriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{41} +} +func (m *ResponseValidateOracleVotes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResponseValidateOracleVotes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ResponseValidateOracleVotes.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ResponseValidateOracleVotes) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponseValidateOracleVotes.Merge(m, src) +} +func (m *ResponseValidateOracleVotes) XXX_Size() int { + return m.Size() +} +func (m *ResponseValidateOracleVotes) XXX_DiscardUnknown() { + xxx_messageInfo_ResponseValidateOracleVotes.DiscardUnknown(m) +} + +var xxx_messageInfo_ResponseValidateOracleVotes proto.InternalMessageInfo + +func (m *ResponseValidateOracleVotes) GetEncodedOracleTx() []byte { + if m != nil { + return m.EncodedOracleTx + } + return nil +} + +func (m *ResponseValidateOracleVotes) GetStatus() ResponseValidateOracleVotes_Status { + if m != nil { + return m.Status + } + return ResponseValidateOracleVotes_present +} + type CommitInfo struct { Round int32 `protobuf:"varint,1,opt,name=round,proto3" json:"round,omitempty"` Votes []VoteInfo `protobuf:"bytes,2,rep,name=votes,proto3" json:"votes"` @@ -3124,7 +3271,7 @@ func (m *CommitInfo) Reset() { *m = CommitInfo{} } func (m *CommitInfo) String() string { return proto.CompactTextString(m) } func (*CommitInfo) ProtoMessage() {} func (*CommitInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{40} + return fileDescriptor_252557cfdd89a31a, []int{42} } func (m *CommitInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3182,7 +3329,7 @@ func (m *ExtendedCommitInfo) Reset() { *m = ExtendedCommitInfo{} } func (m *ExtendedCommitInfo) String() string { return proto.CompactTextString(m) } func (*ExtendedCommitInfo) ProtoMessage() {} func (*ExtendedCommitInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{41} + return fileDescriptor_252557cfdd89a31a, []int{43} } func (m *ExtendedCommitInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3237,7 +3384,7 @@ func (m *Event) Reset() { *m = Event{} } func (m *Event) String() string { return proto.CompactTextString(m) } func (*Event) ProtoMessage() {} func (*Event) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{42} + return fileDescriptor_252557cfdd89a31a, []int{44} } func (m *Event) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3291,7 +3438,7 @@ func (m *EventAttribute) Reset() { *m = EventAttribute{} } func (m *EventAttribute) String() string { return proto.CompactTextString(m) } func (*EventAttribute) ProtoMessage() {} func (*EventAttribute) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{43} + return fileDescriptor_252557cfdd89a31a, []int{45} } func (m *EventAttribute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3359,7 +3506,7 @@ func (m *ExecTxResult) Reset() { *m = ExecTxResult{} } func (m *ExecTxResult) String() string { return proto.CompactTextString(m) } func (*ExecTxResult) ProtoMessage() {} func (*ExecTxResult) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{44} + return fileDescriptor_252557cfdd89a31a, []int{46} } func (m *ExecTxResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3458,7 +3605,7 @@ func (m *TxResult) Reset() { *m = TxResult{} } func (m *TxResult) String() string { return proto.CompactTextString(m) } func (*TxResult) ProtoMessage() {} func (*TxResult) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{45} + return fileDescriptor_252557cfdd89a31a, []int{47} } func (m *TxResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3525,7 +3672,7 @@ func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) String() string { return proto.CompactTextString(m) } func (*Validator) ProtoMessage() {} func (*Validator) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{46} + return fileDescriptor_252557cfdd89a31a, []int{48} } func (m *Validator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3577,7 +3724,7 @@ func (m *ValidatorUpdate) Reset() { *m = ValidatorUpdate{} } func (m *ValidatorUpdate) String() string { return proto.CompactTextString(m) } func (*ValidatorUpdate) ProtoMessage() {} func (*ValidatorUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{47} + return fileDescriptor_252557cfdd89a31a, []int{49} } func (m *ValidatorUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3629,7 +3776,7 @@ func (m *VoteInfo) Reset() { *m = VoteInfo{} } func (m *VoteInfo) String() string { return proto.CompactTextString(m) } func (*VoteInfo) ProtoMessage() {} func (*VoteInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{48} + return fileDescriptor_252557cfdd89a31a, []int{50} } func (m *VoteInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3687,7 +3834,7 @@ func (m *ExtendedVoteInfo) Reset() { *m = ExtendedVoteInfo{} } func (m *ExtendedVoteInfo) String() string { return proto.CompactTextString(m) } func (*ExtendedVoteInfo) ProtoMessage() {} func (*ExtendedVoteInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{49} + return fileDescriptor_252557cfdd89a31a, []int{51} } func (m *ExtendedVoteInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3762,7 +3909,7 @@ func (m *Misbehavior) Reset() { *m = Misbehavior{} } func (m *Misbehavior) String() string { return proto.CompactTextString(m) } func (*Misbehavior) ProtoMessage() {} func (*Misbehavior) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{50} + return fileDescriptor_252557cfdd89a31a, []int{52} } func (m *Misbehavior) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3838,7 +3985,7 @@ func (m *Snapshot) Reset() { *m = Snapshot{} } func (m *Snapshot) String() string { return proto.CompactTextString(m) } func (*Snapshot) ProtoMessage() {} func (*Snapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{51} + return fileDescriptor_252557cfdd89a31a, []int{53} } func (m *Snapshot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3909,6 +4056,7 @@ func init() { proto.RegisterEnum("tendermint.abci.ResponseApplySnapshotChunk_Result", ResponseApplySnapshotChunk_Result_name, ResponseApplySnapshotChunk_Result_value) proto.RegisterEnum("tendermint.abci.ResponseProcessProposal_ProposalStatus", ResponseProcessProposal_ProposalStatus_name, ResponseProcessProposal_ProposalStatus_value) proto.RegisterEnum("tendermint.abci.ResponseVerifyVoteExtension_VerifyStatus", ResponseVerifyVoteExtension_VerifyStatus_name, ResponseVerifyVoteExtension_VerifyStatus_value) + proto.RegisterEnum("tendermint.abci.ResponseValidateOracleVotes_Status", ResponseValidateOracleVotes_Status_name, ResponseValidateOracleVotes_Status_value) proto.RegisterType((*Request)(nil), "tendermint.abci.Request") proto.RegisterType((*RequestEcho)(nil), "tendermint.abci.RequestEcho") proto.RegisterType((*RequestFlush)(nil), "tendermint.abci.RequestFlush") @@ -3928,6 +4076,7 @@ func init() { proto.RegisterType((*RequestFinalizeBlock)(nil), "tendermint.abci.RequestFinalizeBlock") proto.RegisterType((*RequestSignGossipVote)(nil), "tendermint.abci.RequestSignGossipVote") proto.RegisterType((*RequestPrepareOracleVotes)(nil), "tendermint.abci.RequestPrepareOracleVotes") + proto.RegisterType((*RequestValidateOracleVotes)(nil), "tendermint.abci.RequestValidateOracleVotes") proto.RegisterType((*Response)(nil), "tendermint.abci.Response") proto.RegisterType((*ResponseException)(nil), "tendermint.abci.ResponseException") proto.RegisterType((*ResponseEcho)(nil), "tendermint.abci.ResponseEcho") @@ -3949,6 +4098,7 @@ func init() { proto.RegisterType((*ResponseSignGossipVote)(nil), "tendermint.abci.ResponseSignGossipVote") proto.RegisterType((*Vote)(nil), "tendermint.abci.Vote") proto.RegisterType((*ResponsePrepareOracleVotes)(nil), "tendermint.abci.ResponsePrepareOracleVotes") + proto.RegisterType((*ResponseValidateOracleVotes)(nil), "tendermint.abci.ResponseValidateOracleVotes") proto.RegisterType((*CommitInfo)(nil), "tendermint.abci.CommitInfo") proto.RegisterType((*ExtendedCommitInfo)(nil), "tendermint.abci.ExtendedCommitInfo") proto.RegisterType((*Event)(nil), "tendermint.abci.Event") @@ -3966,220 +4116,227 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 3400 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x73, 0x23, 0xc5, - 0x15, 0xd7, 0x48, 0x23, 0x59, 0x7a, 0xfa, 0xf0, 0xb8, 0xbd, 0xeb, 0x15, 0xda, 0xc5, 0x36, 0x43, - 0x01, 0xcb, 0x02, 0x36, 0x78, 0xb3, 0x7c, 0xd4, 0x42, 0x2a, 0xb2, 0x56, 0x8b, 0xec, 0x35, 0xb6, - 0x19, 0xcb, 0x4b, 0x91, 0x0f, 0x86, 0xb1, 0xd4, 0x96, 0x86, 0x95, 0x34, 0xc3, 0xcc, 0xc8, 0xc8, - 0x9c, 0x52, 0x21, 0xa9, 0x4a, 0x71, 0xa2, 0x2a, 0x17, 0x0e, 0xe1, 0x90, 0x43, 0x2e, 0xf9, 0x0b, - 0x72, 0xca, 0x29, 0x07, 0x2a, 0x95, 0x03, 0xc7, 0x9c, 0x48, 0x0a, 0x6e, 0x5c, 0x72, 0xe0, 0x90, - 0x6b, 0xaa, 0x3f, 0xe6, 0x4b, 0x9a, 0xb1, 0xa4, 0x85, 0x1c, 0x52, 0xc9, 0xad, 0xfb, 0xe9, 0xbd, - 0xd7, 0xd3, 0xaf, 0x5f, 0xf7, 0x7b, 0xef, 0xd7, 0x2d, 0xb8, 0xea, 0xe0, 0x41, 0x1b, 0x5b, 0x7d, - 0x7d, 0xe0, 0x6c, 0x6a, 0x27, 0x2d, 0x7d, 0xd3, 0x39, 0x37, 0xb1, 0xbd, 0x61, 0x5a, 0x86, 0x63, - 0xa0, 0x45, 0xff, 0xc7, 0x0d, 0xf2, 0x63, 0xe5, 0xd1, 0x00, 0x77, 0xcb, 0x3a, 0x37, 0x1d, 0x63, - 0xd3, 0xb4, 0x0c, 0xe3, 0x94, 0xf1, 0x57, 0xae, 0x4d, 0xfe, 0xfc, 0x00, 0x9f, 0x73, 0x6d, 0x21, - 0x61, 0x3a, 0xca, 0xa6, 0xa9, 0x59, 0x5a, 0xdf, 0xfd, 0x79, 0x7d, 0xe2, 0xe7, 0x33, 0xad, 0xa7, - 0xb7, 0x35, 0xc7, 0xb0, 0x38, 0xc7, 0x5a, 0xc7, 0x30, 0x3a, 0x3d, 0xbc, 0x49, 0x7b, 0x27, 0xc3, - 0xd3, 0x4d, 0x47, 0xef, 0x63, 0xdb, 0xd1, 0xfa, 0x26, 0x67, 0xb8, 0xd4, 0x31, 0x3a, 0x06, 0x6d, - 0x6e, 0x92, 0x56, 0xc4, 0xb8, 0x86, 0xa5, 0xb5, 0x7a, 0x38, 0x38, 0x49, 0xf9, 0x5b, 0x80, 0x05, - 0x05, 0xbf, 0x3f, 0xc4, 0xb6, 0x83, 0xb6, 0x40, 0xc4, 0xad, 0xae, 0x51, 0x16, 0xd6, 0x85, 0xeb, - 0xf9, 0xad, 0x6b, 0x1b, 0x63, 0xf3, 0xdf, 0xe0, 0x7c, 0xf5, 0x56, 0xd7, 0x68, 0x24, 0x14, 0xca, - 0x8b, 0x6e, 0x41, 0xfa, 0xb4, 0x37, 0xb4, 0xbb, 0xe5, 0x24, 0x15, 0x7a, 0x34, 0x4e, 0xe8, 0x2e, - 0x61, 0x6a, 0x24, 0x14, 0xc6, 0x4d, 0x86, 0xd2, 0x07, 0xa7, 0x46, 0x39, 0x75, 0xf1, 0x50, 0x3b, - 0x83, 0x53, 0x3a, 0x14, 0xe1, 0x45, 0xdb, 0x00, 0xfa, 0x40, 0x77, 0xd4, 0x56, 0x57, 0xd3, 0x07, - 0xe5, 0x34, 0x95, 0x7c, 0x2c, 0x5e, 0x52, 0x77, 0x6a, 0x84, 0xb1, 0x91, 0x50, 0x72, 0xba, 0xdb, - 0x21, 0x9f, 0xfb, 0xfe, 0x10, 0x5b, 0xe7, 0xe5, 0xcc, 0xc5, 0x9f, 0xfb, 0x26, 0x61, 0x22, 0x9f, - 0x4b, 0xb9, 0xd1, 0xab, 0x90, 0x6d, 0x75, 0x71, 0xeb, 0x81, 0xea, 0x8c, 0xca, 0x59, 0x2a, 0xb9, - 0x16, 0x27, 0x59, 0x23, 0x7c, 0xcd, 0x51, 0x23, 0xa1, 0x2c, 0xb4, 0x58, 0x13, 0xbd, 0x0c, 0x99, - 0x96, 0xd1, 0xef, 0xeb, 0x4e, 0x39, 0x4f, 0x65, 0x57, 0x63, 0x65, 0x29, 0x57, 0x23, 0xa1, 0x70, - 0x7e, 0xb4, 0x0f, 0xa5, 0x9e, 0x6e, 0x3b, 0xaa, 0x3d, 0xd0, 0x4c, 0xbb, 0x6b, 0x38, 0x76, 0xb9, - 0x40, 0x35, 0x3c, 0x11, 0xa7, 0x61, 0x4f, 0xb7, 0x9d, 0x23, 0x97, 0xb9, 0x91, 0x50, 0x8a, 0xbd, - 0x20, 0x81, 0xe8, 0x33, 0x4e, 0x4f, 0xb1, 0xe5, 0x29, 0x2c, 0x17, 0x2f, 0xd6, 0x77, 0x40, 0xb8, - 0x5d, 0x79, 0xa2, 0xcf, 0x08, 0x12, 0xd0, 0x4f, 0x60, 0xb9, 0x67, 0x68, 0x6d, 0x4f, 0x9d, 0xda, - 0xea, 0x0e, 0x07, 0x0f, 0xca, 0x25, 0xaa, 0xf4, 0xe9, 0xd8, 0x8f, 0x34, 0xb4, 0xb6, 0xab, 0xa2, - 0x46, 0x04, 0x1a, 0x09, 0x65, 0xa9, 0x37, 0x4e, 0x44, 0xef, 0xc0, 0x25, 0xcd, 0x34, 0x7b, 0xe7, - 0xe3, 0xda, 0x17, 0xa9, 0xf6, 0x1b, 0x71, 0xda, 0xab, 0x44, 0x66, 0x5c, 0x3d, 0xd2, 0x26, 0xa8, - 0xa8, 0x09, 0x92, 0x69, 0x61, 0x53, 0xb3, 0xb0, 0x6a, 0x5a, 0x86, 0x69, 0xd8, 0x5a, 0xaf, 0x2c, - 0x51, 0xdd, 0x4f, 0xc5, 0xe9, 0x3e, 0x64, 0xfc, 0x87, 0x9c, 0xbd, 0x91, 0x50, 0x16, 0xcd, 0x30, - 0x89, 0x69, 0x35, 0x5a, 0xd8, 0xb6, 0x7d, 0xad, 0x4b, 0xd3, 0xb4, 0x52, 0xfe, 0xb0, 0xd6, 0x10, - 0x09, 0xd5, 0x21, 0x8f, 0x47, 0x44, 0x5c, 0x3d, 0x33, 0x1c, 0x5c, 0x46, 0x54, 0xa1, 0x1c, 0xbb, - 0x43, 0x29, 0xeb, 0x7d, 0xc3, 0xc1, 0x8d, 0x84, 0x02, 0xd8, 0xeb, 0x21, 0x0d, 0x2e, 0x9f, 0x61, - 0x4b, 0x3f, 0x3d, 0xa7, 0x6a, 0x54, 0xfa, 0x8b, 0xad, 0x1b, 0x83, 0xf2, 0x32, 0x55, 0xf8, 0x4c, - 0x9c, 0xc2, 0xfb, 0x54, 0x88, 0xa8, 0xa8, 0xbb, 0x22, 0x8d, 0x84, 0xb2, 0x7c, 0x36, 0x49, 0x26, - 0x2e, 0x76, 0xaa, 0x0f, 0xb4, 0x9e, 0xfe, 0x21, 0x56, 0x4f, 0x7a, 0x46, 0xeb, 0x41, 0xf9, 0xd2, - 0xc5, 0x2e, 0x76, 0x97, 0x73, 0x6f, 0x13, 0x66, 0xe2, 0x62, 0xa7, 0x41, 0x02, 0x52, 0x40, 0xb2, - 0xf5, 0xce, 0x40, 0xed, 0x18, 0xb6, 0xad, 0x9b, 0x6c, 0xfa, 0x97, 0xa9, 0xc6, 0x27, 0xe3, 0x34, - 0x1e, 0xe9, 0x9d, 0xc1, 0xeb, 0x94, 0x9d, 0x9b, 0xa0, 0x64, 0x87, 0x28, 0xc4, 0xb3, 0xdc, 0x95, - 0x67, 0x47, 0x22, 0x55, 0x6b, 0x97, 0x57, 0x2e, 0xf6, 0x2c, 0xbe, 0xfa, 0x07, 0x54, 0x84, 0x28, - 0x22, 0x3b, 0x0c, 0x99, 0x13, 0xd4, 0xed, 0x05, 0x48, 0x9f, 0x69, 0xbd, 0x21, 0xde, 0x15, 0xb3, - 0xa2, 0x94, 0xde, 0x15, 0xb3, 0x0b, 0x52, 0x76, 0x57, 0xcc, 0xe6, 0x24, 0xd8, 0x15, 0xb3, 0x20, - 0xe5, 0xe5, 0xa7, 0x20, 0x1f, 0x38, 0x4c, 0x51, 0x19, 0x16, 0xfa, 0xd8, 0xb6, 0xb5, 0x0e, 0xa6, - 0x67, 0x6f, 0x4e, 0x71, 0xbb, 0x72, 0x09, 0x0a, 0xc1, 0x03, 0x54, 0xfe, 0x44, 0xf0, 0x24, 0xc9, - 0xd9, 0x48, 0x24, 0xcf, 0xb0, 0x45, 0x97, 0x90, 0x4b, 0xf2, 0x2e, 0x7a, 0x1c, 0x8a, 0xd4, 0xfc, - 0xaa, 0xfb, 0x3b, 0x39, 0xa0, 0x45, 0xa5, 0x40, 0x89, 0xf7, 0x39, 0xd3, 0x1a, 0xe4, 0xcd, 0x2d, - 0xd3, 0x63, 0x49, 0x51, 0x16, 0x30, 0xb7, 0x4c, 0x97, 0xe1, 0x31, 0x28, 0x10, 0x0b, 0x78, 0x1c, - 0x22, 0x1d, 0x24, 0x4f, 0x68, 0x9c, 0x45, 0xfe, 0x6b, 0x12, 0xa4, 0xf1, 0x43, 0x17, 0xbd, 0x0c, - 0x22, 0x09, 0x4f, 0x3c, 0x94, 0x54, 0x36, 0x58, 0xec, 0xda, 0x70, 0x63, 0xd7, 0x46, 0xd3, 0x8d, - 0x5d, 0xdb, 0xd9, 0xcf, 0xbf, 0x5c, 0x4b, 0x7c, 0xf2, 0xf7, 0x35, 0x41, 0xa1, 0x12, 0xe8, 0x11, - 0x72, 0xd4, 0x6a, 0xfa, 0x40, 0xd5, 0xdb, 0xf4, 0x93, 0x73, 0xe4, 0x1c, 0xd5, 0xf4, 0xc1, 0x4e, - 0x1b, 0xed, 0x81, 0xd4, 0x32, 0x06, 0x36, 0x1e, 0xd8, 0x43, 0x5b, 0x65, 0xd1, 0x93, 0x07, 0x90, - 0x50, 0x18, 0x60, 0xe1, 0xad, 0xe6, 0x72, 0x1e, 0x52, 0x46, 0x65, 0xb1, 0x15, 0x26, 0xa0, 0xbb, - 0x00, 0x5e, 0x88, 0xb5, 0xcb, 0xe2, 0x7a, 0xea, 0x7a, 0x7e, 0x6b, 0x7d, 0x62, 0xe9, 0xef, 0xbb, - 0x2c, 0xc7, 0x66, 0x5b, 0x73, 0xf0, 0xb6, 0x48, 0x3e, 0x57, 0x09, 0x48, 0xa2, 0x27, 0x61, 0x51, - 0x33, 0x4d, 0xd5, 0x76, 0x34, 0x07, 0xab, 0x27, 0xe7, 0xc4, 0x8f, 0x48, 0x6c, 0x2a, 0x28, 0x45, - 0xcd, 0x34, 0x8f, 0x08, 0x75, 0x9b, 0x10, 0xd1, 0x13, 0x50, 0x22, 0x71, 0x48, 0xd7, 0x7a, 0x6a, - 0x17, 0xeb, 0x9d, 0xae, 0x43, 0x63, 0x50, 0x4a, 0x29, 0x72, 0x6a, 0x83, 0x12, 0xe5, 0xb6, 0xb7, - 0xe2, 0x34, 0x06, 0x21, 0x04, 0x62, 0x5b, 0x73, 0x34, 0x6a, 0xc9, 0x82, 0x42, 0xdb, 0x84, 0x66, - 0x6a, 0x4e, 0x97, 0xdb, 0x87, 0xb6, 0xd1, 0x0a, 0x64, 0xb8, 0xda, 0x14, 0x55, 0xcb, 0x7b, 0xe8, - 0x12, 0xa4, 0x4d, 0xcb, 0x38, 0xc3, 0x74, 0xe9, 0xb2, 0x0a, 0xeb, 0xc8, 0x0a, 0x94, 0xc2, 0xf1, - 0x0a, 0x95, 0x20, 0xe9, 0x8c, 0xf8, 0x28, 0x49, 0x67, 0x84, 0x9e, 0x07, 0x91, 0x18, 0x92, 0x8e, - 0x51, 0x8a, 0x88, 0xd0, 0x5c, 0xae, 0x79, 0x6e, 0x62, 0x85, 0x72, 0xca, 0x8b, 0x50, 0x0c, 0xc5, - 0x31, 0x79, 0x05, 0x2e, 0x45, 0x85, 0x25, 0xb9, 0xeb, 0xd1, 0x43, 0xe1, 0x05, 0xdd, 0x82, 0xac, - 0x17, 0x97, 0x98, 0xe3, 0x3c, 0x32, 0x31, 0xac, 0xcb, 0xac, 0x78, 0xac, 0xc4, 0x63, 0xc8, 0x02, - 0x74, 0x35, 0x9e, 0x85, 0x14, 0x94, 0x05, 0xcd, 0x34, 0x1b, 0x9a, 0xdd, 0x95, 0xdf, 0x85, 0x72, - 0x5c, 0xcc, 0x09, 0x18, 0x4c, 0xa0, 0x6e, 0xef, 0x1a, 0x6c, 0x05, 0x32, 0xa7, 0x86, 0xd5, 0xd7, - 0x1c, 0xaa, 0xac, 0xa8, 0xf0, 0x1e, 0x31, 0x24, 0x8b, 0x3f, 0x29, 0x4a, 0x66, 0x1d, 0x59, 0x85, - 0x47, 0x62, 0xe3, 0x0e, 0x11, 0xd1, 0x07, 0x6d, 0xcc, 0xcc, 0x5a, 0x54, 0x58, 0xc7, 0x57, 0xc4, - 0x3e, 0x96, 0x75, 0xc8, 0xb0, 0x36, 0x9d, 0x2b, 0xd5, 0x9f, 0x53, 0x78, 0x4f, 0xfe, 0x34, 0x05, - 0x2b, 0xd1, 0xd1, 0x07, 0xad, 0x43, 0xa1, 0xaf, 0x8d, 0x54, 0x67, 0xc4, 0xdd, 0x4e, 0xa0, 0x0b, - 0x0f, 0x7d, 0x6d, 0xd4, 0x1c, 0x31, 0x9f, 0x93, 0x20, 0xe5, 0x8c, 0xec, 0x72, 0x72, 0x3d, 0x75, - 0xbd, 0xa0, 0x90, 0x26, 0x3a, 0x86, 0xa5, 0x9e, 0xd1, 0xd2, 0x7a, 0x6a, 0x4f, 0xb3, 0x1d, 0x95, - 0xa7, 0x25, 0x6c, 0x13, 0x3d, 0x3e, 0x61, 0x6c, 0x16, 0x47, 0x70, 0x9b, 0xad, 0x27, 0x39, 0x70, - 0xb8, 0xff, 0x2f, 0x52, 0x1d, 0x7b, 0x9a, 0xbb, 0xd4, 0xe8, 0x0e, 0xe4, 0xfb, 0xba, 0x7d, 0x82, - 0xbb, 0xda, 0x99, 0x6e, 0x58, 0x7c, 0x37, 0x4d, 0x3a, 0xcd, 0x1b, 0x3e, 0x0f, 0xd7, 0x14, 0x14, - 0x0b, 0x2c, 0x49, 0x3a, 0xe4, 0xc3, 0xee, 0x69, 0x92, 0x99, 0xfb, 0x34, 0x79, 0x1e, 0x2e, 0x0d, - 0xf0, 0xc8, 0x51, 0xfd, 0xfd, 0xca, 0xfc, 0x64, 0x81, 0x9a, 0x1e, 0x91, 0xdf, 0xbc, 0x1d, 0x6e, - 0x13, 0x97, 0x41, 0x4f, 0xd3, 0xf8, 0x6d, 0x1a, 0x36, 0xb6, 0x54, 0xad, 0xdd, 0xb6, 0xb0, 0x6d, - 0xd3, 0x94, 0xaf, 0x40, 0x83, 0x32, 0xa5, 0x57, 0x19, 0x59, 0xfe, 0x75, 0x70, 0x69, 0xc2, 0xf1, - 0x9a, 0x1b, 0x5e, 0xf0, 0x0d, 0x7f, 0x44, 0x62, 0x0e, 0x95, 0x6f, 0x87, 0x6c, 0xcf, 0xf2, 0xe6, - 0xab, 0x93, 0xfb, 0x6b, 0xdc, 0xe6, 0xc8, 0x15, 0x8f, 0x37, 0x7b, 0xea, 0xe1, 0xcc, 0x8e, 0x40, - 0xa4, 0x46, 0x11, 0xd9, 0x11, 0x43, 0xda, 0xff, 0x6d, 0x4b, 0xf1, 0x51, 0x0a, 0x96, 0x26, 0x92, - 0x1f, 0x6f, 0x62, 0x42, 0xe4, 0xc4, 0x92, 0x91, 0x13, 0x4b, 0xcd, 0x3d, 0x31, 0xbe, 0xd6, 0xe2, - 0xf4, 0xb5, 0x4e, 0x7f, 0x8f, 0x6b, 0x9d, 0x79, 0xb8, 0xb5, 0xfe, 0x8f, 0xae, 0xc2, 0x6f, 0x05, - 0xa8, 0xc4, 0x67, 0x8c, 0x91, 0xcb, 0xf1, 0x0c, 0x2c, 0x79, 0x9f, 0xe2, 0xa9, 0x67, 0x07, 0xa3, - 0xe4, 0xfd, 0xc0, 0xf5, 0xc7, 0xc6, 0xb8, 0x27, 0xa0, 0x34, 0x96, 0xcf, 0x32, 0x57, 0x2e, 0x9e, - 0x05, 0xc7, 0x97, 0x7f, 0x99, 0xf2, 0x02, 0x4f, 0x28, 0xe9, 0x8c, 0xd8, 0xad, 0x6f, 0xc2, 0x72, - 0x1b, 0xb7, 0xf4, 0xf6, 0xc3, 0x6e, 0xd6, 0x25, 0x2e, 0xfd, 0xff, 0xbd, 0x1a, 0xe9, 0x25, 0x97, - 0x23, 0x33, 0xf5, 0x48, 0x25, 0x42, 0xa4, 0x12, 0xf4, 0x23, 0x28, 0x04, 0x2a, 0x02, 0x16, 0xe2, - 0xc6, 0xea, 0x79, 0x96, 0xda, 0x6f, 0xf8, 0xfa, 0x95, 0x7c, 0xc7, 0x6b, 0xc7, 0x3a, 0x93, 0x7c, - 0xd5, 0x8b, 0xe8, 0x93, 0xf9, 0xbe, 0xfc, 0x97, 0x3c, 0x64, 0x15, 0x6c, 0x9b, 0x24, 0x97, 0x44, - 0xdb, 0x90, 0xc3, 0xa3, 0x16, 0x36, 0x1d, 0x37, 0xfd, 0x8e, 0x2e, 0xc9, 0x18, 0x77, 0xdd, 0xe5, - 0x6c, 0x24, 0x14, 0x5f, 0x0c, 0xdd, 0xe4, 0x98, 0x4b, 0x3c, 0x7c, 0xc2, 0xc5, 0x83, 0xa0, 0xcb, - 0x8b, 0x2e, 0xe8, 0x92, 0x8a, 0xc5, 0x13, 0x98, 0xd4, 0x18, 0xea, 0x72, 0x93, 0xa3, 0x2e, 0xe2, - 0x94, 0xc1, 0x42, 0xb0, 0x4b, 0x2d, 0x04, 0xbb, 0x64, 0xa6, 0x4c, 0x33, 0x06, 0x77, 0x79, 0xd1, - 0xc5, 0x5d, 0x16, 0xa6, 0x7c, 0xf1, 0x18, 0xf0, 0xf2, 0x5a, 0x00, 0x78, 0xc9, 0x51, 0xd1, 0xf5, - 0x58, 0xd1, 0x08, 0xe4, 0xe5, 0x15, 0x0f, 0x79, 0x29, 0xc4, 0xa2, 0x36, 0x5c, 0x78, 0x1c, 0x7a, - 0x39, 0x98, 0x80, 0x5e, 0x8a, 0xb1, 0x55, 0x27, 0x53, 0x31, 0x05, 0x7b, 0x39, 0x98, 0xc0, 0x5e, - 0x4a, 0x53, 0x14, 0x4e, 0x01, 0x5f, 0x7e, 0x1a, 0x0d, 0xbe, 0xc4, 0xc3, 0x23, 0xfc, 0x33, 0x67, - 0x43, 0x5f, 0xd4, 0x18, 0xf4, 0x45, 0x8a, 0x45, 0x0a, 0x98, 0xfa, 0x99, 0xe1, 0x97, 0xe3, 0x08, - 0xf8, 0x85, 0x01, 0x25, 0xd7, 0x63, 0x95, 0xcf, 0x80, 0xbf, 0x1c, 0x47, 0xe0, 0x2f, 0x68, 0xaa, - 0xda, 0xa9, 0x00, 0xcc, 0xdd, 0x30, 0x00, 0xb3, 0x1c, 0x93, 0x31, 0xfb, 0xbb, 0x3d, 0x06, 0x81, - 0x39, 0x89, 0x43, 0x60, 0x18, 0x4a, 0xf2, 0x6c, 0xac, 0xc6, 0x39, 0x20, 0x98, 0x83, 0x09, 0x08, - 0xe6, 0xf2, 0x14, 0x4f, 0x9b, 0x82, 0xc1, 0x1c, 0x45, 0x60, 0x30, 0x2b, 0xb1, 0x98, 0x16, 0x53, - 0x39, 0x15, 0x84, 0x51, 0x63, 0x40, 0x98, 0x2b, 0x53, 0x1c, 0xec, 0x61, 0x50, 0x98, 0xb4, 0x94, - 0xd9, 0x15, 0xb3, 0x59, 0x29, 0xc7, 0xf0, 0x97, 0x5d, 0x31, 0x9b, 0x97, 0x0a, 0xf2, 0xd3, 0x24, - 0x67, 0x1c, 0x3b, 0x9d, 0x49, 0x75, 0x86, 0x2d, 0xcb, 0xb0, 0x38, 0x9e, 0xc2, 0x3a, 0xf2, 0x75, - 0x52, 0x95, 0xfb, 0x27, 0xf1, 0x05, 0x88, 0x0d, 0xad, 0x82, 0x03, 0xa7, 0xaf, 0xfc, 0x47, 0xc1, - 0x97, 0xa5, 0x98, 0x4d, 0xb0, 0xa2, 0xcf, 0xf1, 0x8a, 0x3e, 0x80, 0xe3, 0x24, 0xc3, 0x38, 0xce, - 0x1a, 0xe4, 0x49, 0x75, 0x3b, 0x06, 0xd1, 0x68, 0xa6, 0x07, 0xd1, 0xdc, 0x80, 0x25, 0x9a, 0xa2, - 0x30, 0xb4, 0x87, 0x87, 0x34, 0x91, 0x86, 0xb4, 0x45, 0xf2, 0x03, 0x5b, 0x53, 0x96, 0x11, 0x3c, - 0x07, 0xcb, 0x01, 0x5e, 0xaf, 0x6a, 0x66, 0x78, 0x85, 0xe4, 0x71, 0x57, 0x79, 0xf9, 0xfc, 0x67, - 0xc1, 0xb7, 0x90, 0x8f, 0xed, 0x44, 0xc1, 0x30, 0xc2, 0xf7, 0x04, 0xc3, 0x24, 0x1f, 0x1a, 0x86, - 0x09, 0xa2, 0x00, 0xa9, 0x30, 0x0a, 0xf0, 0x2f, 0xc1, 0x5f, 0x13, 0x0f, 0x54, 0x69, 0x19, 0x6d, - 0xcc, 0xeb, 0x72, 0xda, 0x26, 0x49, 0x60, 0xcf, 0xe8, 0xf0, 0xea, 0x9b, 0x34, 0x09, 0x97, 0x17, - 0x2e, 0x73, 0x3c, 0x1a, 0x7a, 0x25, 0x3d, 0x4b, 0xb5, 0x78, 0x49, 0x2f, 0x41, 0xea, 0x01, 0x66, - 0x97, 0x0a, 0x05, 0x85, 0x34, 0x09, 0x1f, 0x75, 0x3e, 0x9e, 0x32, 0xb1, 0x0e, 0x7a, 0x19, 0x72, - 0xf4, 0xc6, 0x48, 0x35, 0x4c, 0x9b, 0x5f, 0x24, 0x84, 0x92, 0x49, 0x76, 0x6d, 0xb4, 0x71, 0x48, - 0x78, 0x0e, 0x4c, 0x5b, 0xc9, 0x9a, 0xbc, 0x15, 0xc8, 0x56, 0x72, 0xa1, 0x1c, 0xef, 0x1a, 0xe4, - 0xc8, 0xd7, 0xdb, 0xa6, 0xd6, 0xc2, 0x65, 0xa0, 0x1f, 0xea, 0x13, 0xe4, 0x3f, 0x24, 0x61, 0x71, - 0x2c, 0x3c, 0x46, 0xce, 0xdd, 0x75, 0xc9, 0x64, 0x00, 0x64, 0x9a, 0xcd, 0x1e, 0xab, 0x00, 0x1d, - 0xcd, 0x56, 0x3f, 0xd0, 0x06, 0x0e, 0x6e, 0x73, 0xa3, 0x04, 0x28, 0xa8, 0x02, 0x59, 0xd2, 0x1b, - 0xda, 0xb8, 0xcd, 0xf1, 0x2e, 0xaf, 0x8f, 0x1a, 0x90, 0xc1, 0x67, 0x78, 0xe0, 0xd8, 0xe5, 0x05, - 0xba, 0xec, 0x2b, 0x93, 0x00, 0x04, 0xf9, 0x79, 0xbb, 0x4c, 0x16, 0xfb, 0x9b, 0x2f, 0xd7, 0x24, - 0xc6, 0xfd, 0xac, 0xd1, 0xd7, 0x1d, 0xdc, 0x37, 0x9d, 0x73, 0x85, 0xcb, 0x87, 0xad, 0x90, 0x1d, - 0xb3, 0x02, 0x45, 0x5e, 0x0b, 0x2e, 0xa0, 0x42, 0x6c, 0xaa, 0x1b, 0x96, 0xee, 0x9c, 0x2b, 0xc5, - 0x3e, 0xee, 0x9b, 0x86, 0xd1, 0x53, 0xd9, 0x1e, 0xaf, 0x42, 0x29, 0x9c, 0x0d, 0xa0, 0xc7, 0xa1, - 0x68, 0x61, 0x47, 0xd3, 0x07, 0x6a, 0x28, 0x53, 0x2c, 0x30, 0x22, 0xdb, 0x53, 0xbb, 0x62, 0x56, - 0x90, 0x92, 0xbb, 0x62, 0x36, 0x29, 0xa5, 0xe4, 0x43, 0x92, 0xd9, 0x46, 0x64, 0x03, 0xe8, 0x25, - 0xc8, 0xf9, 0x89, 0x84, 0x40, 0x67, 0x7b, 0x01, 0xb6, 0xe5, 0xf3, 0xca, 0x7f, 0x12, 0x7c, 0x95, - 0x61, 0xb4, 0xac, 0x0e, 0x19, 0x0b, 0xdb, 0xc3, 0x1e, 0xc3, 0xaf, 0x4a, 0x5b, 0xcf, 0xcd, 0x96, - 0x47, 0x10, 0xea, 0xb0, 0xe7, 0x28, 0x5c, 0x58, 0x7e, 0x07, 0x32, 0x8c, 0x82, 0xf2, 0xb0, 0x70, - 0xbc, 0x7f, 0x6f, 0xff, 0xe0, 0xad, 0x7d, 0x29, 0x81, 0x00, 0x32, 0xd5, 0x5a, 0xad, 0x7e, 0xd8, - 0x94, 0x04, 0x94, 0x83, 0x74, 0x75, 0xfb, 0x40, 0x69, 0x4a, 0x49, 0x42, 0x56, 0xea, 0xbb, 0xf5, - 0x5a, 0x53, 0x4a, 0xa1, 0x25, 0x28, 0xb2, 0xb6, 0x7a, 0xf7, 0x40, 0x79, 0xa3, 0xda, 0x94, 0xc4, - 0x00, 0xe9, 0xa8, 0xbe, 0x7f, 0xa7, 0xae, 0x48, 0x69, 0xf9, 0x05, 0x92, 0x4e, 0xc7, 0x64, 0x1e, - 0x3e, 0x14, 0x26, 0x04, 0xa0, 0x30, 0xf9, 0xd3, 0x24, 0x29, 0x23, 0xe3, 0xd2, 0x09, 0xb4, 0x3b, - 0x36, 0xf1, 0xad, 0x39, 0x72, 0x91, 0xb1, 0xd9, 0x93, 0xca, 0xd1, 0xc2, 0xa7, 0xd8, 0x69, 0x75, - 0x59, 0x7a, 0xc3, 0x4e, 0xa0, 0xa2, 0x52, 0xe4, 0x54, 0x2a, 0x64, 0x33, 0xb6, 0xf7, 0x70, 0xcb, - 0x51, 0x99, 0x13, 0xd9, 0xb4, 0x7c, 0xcb, 0x11, 0x36, 0x42, 0x3d, 0x62, 0x44, 0xf9, 0xdd, 0xb9, - 0x6c, 0x99, 0x83, 0xb4, 0x52, 0x6f, 0x2a, 0x6f, 0x4b, 0x29, 0x84, 0xa0, 0x44, 0x9b, 0xea, 0xd1, - 0x7e, 0xf5, 0xf0, 0xa8, 0x71, 0x40, 0x6c, 0xb9, 0x0c, 0x8b, 0xae, 0x2d, 0x5d, 0x62, 0x5a, 0x7e, - 0x06, 0xae, 0xc4, 0xe4, 0x42, 0x93, 0x45, 0xac, 0xfc, 0x3b, 0x21, 0xc8, 0x1d, 0xce, 0x67, 0x0e, - 0x20, 0x63, 0x3b, 0x9a, 0x33, 0xb4, 0xb9, 0x11, 0x5f, 0x9a, 0x35, 0x39, 0xda, 0x70, 0x1b, 0x47, - 0x54, 0x5c, 0xe1, 0x6a, 0xe4, 0x5b, 0x50, 0x0a, 0xff, 0x12, 0x6f, 0x03, 0xdf, 0x89, 0x92, 0xf2, - 0x6d, 0x40, 0x93, 0x39, 0x53, 0x44, 0x41, 0x2f, 0x44, 0x15, 0xf4, 0xbf, 0x17, 0xe0, 0xea, 0x05, - 0xf9, 0x11, 0x7a, 0x73, 0x6c, 0x92, 0xaf, 0xcc, 0x93, 0x5d, 0x6d, 0x30, 0xda, 0xd8, 0x34, 0x6f, - 0x42, 0x21, 0x48, 0x9f, 0x6d, 0x92, 0xdf, 0x24, 0xfd, 0x4d, 0x1c, 0x46, 0x1e, 0xfc, 0x23, 0x50, - 0xf8, 0x8e, 0x47, 0xe0, 0xab, 0x00, 0xce, 0x48, 0x65, 0x6e, 0x1d, 0x59, 0x0e, 0x73, 0x44, 0x17, - 0xb7, 0x9a, 0x23, 0xbe, 0x09, 0x72, 0x0e, 0x6f, 0xd9, 0xe8, 0x28, 0x08, 0xc3, 0x0c, 0x69, 0x8c, - 0xb5, 0x39, 0x44, 0x31, 0x6b, 0x30, 0xf6, 0xe1, 0x1a, 0x46, 0xb6, 0xd1, 0xdb, 0x70, 0x65, 0x2c, - 0x51, 0xf0, 0x54, 0x8b, 0xb3, 0xe6, 0x0b, 0x97, 0xc3, 0xf9, 0x82, 0xab, 0x3a, 0x18, 0xed, 0xd3, - 0xe1, 0x68, 0xff, 0x12, 0xac, 0x44, 0xe7, 0xa0, 0xe8, 0x51, 0x00, 0x3c, 0x20, 0x61, 0xa1, 0xad, - 0x7a, 0x57, 0x1d, 0x39, 0x4e, 0x69, 0x8e, 0xe4, 0x63, 0x10, 0x29, 0xdb, 0x55, 0xc8, 0xf1, 0x84, - 0x54, 0x6f, 0xf3, 0x24, 0x2d, 0xcb, 0x08, 0x3b, 0x6d, 0x12, 0x69, 0xbc, 0x77, 0x17, 0x1c, 0x41, - 0xf4, 0x09, 0x5e, 0x1c, 0x4d, 0xf9, 0xa9, 0x9d, 0x7c, 0xe0, 0x1f, 0x66, 0x93, 0xa9, 0x2b, 0x7a, - 0x01, 0xd2, 0x2c, 0xed, 0x65, 0xeb, 0x7f, 0x79, 0xd2, 0xd8, 0x86, 0x67, 0x61, 0xc6, 0x29, 0xbf, - 0x0d, 0xe0, 0xe3, 0x4d, 0xe4, 0x08, 0xb5, 0x8c, 0xe1, 0x80, 0x7d, 0x69, 0x5a, 0x61, 0x1d, 0x74, - 0xcb, 0x55, 0x9b, 0x8c, 0x89, 0x35, 0x44, 0x6d, 0x00, 0xaf, 0xe2, 0xaa, 0x75, 0x40, 0x93, 0x98, - 0x7f, 0xcc, 0x10, 0xaf, 0x85, 0x87, 0x78, 0x2c, 0xf6, 0xf6, 0x20, 0x7a, 0xa8, 0x0f, 0x21, 0x4d, - 0x5d, 0x9b, 0xd8, 0x8c, 0x5e, 0x34, 0xf1, 0x74, 0x98, 0xb4, 0xd1, 0xcf, 0x00, 0x34, 0xc7, 0xb1, - 0xf4, 0x93, 0xa1, 0x3f, 0xc0, 0x5a, 0xf4, 0xd6, 0xa8, 0xba, 0x7c, 0xdb, 0xd7, 0xf8, 0x1e, 0xb9, - 0xe4, 0x8b, 0x06, 0xf6, 0x49, 0x40, 0xa1, 0xbc, 0x0f, 0xa5, 0xb0, 0xac, 0x9b, 0xc0, 0xb1, 0x6f, - 0x08, 0x27, 0x70, 0x2c, 0x1f, 0xe7, 0x09, 0x9c, 0x97, 0xfe, 0xa5, 0xd8, 0x6d, 0x1a, 0xed, 0xc8, - 0x3f, 0x4f, 0x42, 0x21, 0xb8, 0xb3, 0xfe, 0xf7, 0x72, 0x2c, 0xf9, 0x57, 0x02, 0x64, 0xbd, 0xe9, - 0x87, 0xaf, 0xd6, 0x42, 0x77, 0x91, 0xcc, 0x7a, 0xc9, 0xe0, 0x7d, 0x18, 0xbb, 0x79, 0x4c, 0x79, - 0x37, 0x8f, 0xb7, 0xbd, 0xf8, 0x1e, 0x87, 0x53, 0x05, 0x6d, 0xcd, 0xbd, 0xca, 0x4d, 0x67, 0x6e, - 0x43, 0xce, 0x3b, 0x9e, 0x48, 0x55, 0x15, 0x86, 0x11, 0xdd, 0x2e, 0xbd, 0x15, 0x35, 0x3e, 0xe0, - 0x97, 0x6d, 0x29, 0x85, 0x75, 0xe4, 0x36, 0x2c, 0x8e, 0x9d, 0x6d, 0xe8, 0x36, 0x2c, 0x98, 0xc3, - 0x13, 0xd5, 0x75, 0x8e, 0x31, 0xc4, 0xd6, 0xcd, 0xd7, 0x87, 0x27, 0x3d, 0xbd, 0x75, 0x0f, 0x9f, - 0xbb, 0x1f, 0x63, 0x0e, 0x4f, 0xee, 0x31, 0x1f, 0x62, 0xa3, 0x24, 0x83, 0xa3, 0xfc, 0x46, 0x80, - 0xac, 0xbb, 0x27, 0xd0, 0x0f, 0x21, 0xe7, 0x9d, 0x9b, 0xde, 0x6d, 0x79, 0xec, 0x81, 0xcb, 0xf5, - 0xfb, 0x22, 0xa8, 0xea, 0x5e, 0xf3, 0xeb, 0x6d, 0xf5, 0xb4, 0xa7, 0x31, 0x5f, 0x2a, 0x85, 0x6d, - 0xc6, 0x4e, 0x56, 0x1a, 0x70, 0x76, 0xee, 0xdc, 0xed, 0x69, 0x1d, 0x25, 0x4f, 0x65, 0x76, 0xda, - 0xa4, 0xc3, 0x53, 0xd7, 0x6f, 0x05, 0x90, 0xc6, 0x77, 0xec, 0x77, 0xfe, 0xba, 0xc9, 0x38, 0x9e, - 0x8a, 0x88, 0xe3, 0x68, 0x13, 0x96, 0x3d, 0x0e, 0xd5, 0xd6, 0x3b, 0x03, 0xcd, 0x19, 0x5a, 0x98, - 0x63, 0xdc, 0xc8, 0xfb, 0xe9, 0xc8, 0xfd, 0x65, 0x72, 0xd6, 0xe9, 0x87, 0x9c, 0xf5, 0x47, 0x49, - 0xc8, 0x07, 0x10, 0x77, 0xf4, 0x83, 0xc0, 0x61, 0x54, 0x8a, 0x08, 0x7d, 0x01, 0x5e, 0xff, 0xe6, - 0x3b, 0x6c, 0xa6, 0xe4, 0xfc, 0x66, 0x8a, 0xbb, 0xd7, 0x70, 0x01, 0x7c, 0x71, 0x6e, 0x00, 0xff, - 0x59, 0x40, 0x8e, 0xe1, 0x68, 0x3d, 0xf5, 0xcc, 0x70, 0xf4, 0x41, 0x47, 0x65, 0x6e, 0xc8, 0x8e, - 0x0e, 0x89, 0xfe, 0x72, 0x9f, 0xfe, 0x70, 0x48, 0x3d, 0xf2, 0x17, 0x02, 0x64, 0xbd, 0xba, 0x62, - 0xde, 0x7b, 0xf1, 0x15, 0xc8, 0xf0, 0xd4, 0x99, 0x5d, 0x8c, 0xf3, 0x5e, 0xe4, 0x4d, 0x45, 0x05, - 0xb2, 0x7d, 0xec, 0x68, 0xf4, 0x1c, 0x64, 0x61, 0xdb, 0xeb, 0xdf, 0x78, 0x05, 0xf2, 0x81, 0x37, - 0x05, 0xe4, 0x68, 0xdc, 0xaf, 0xbf, 0x25, 0x25, 0x2a, 0x0b, 0x1f, 0x7f, 0xb6, 0x9e, 0xda, 0xc7, - 0x1f, 0x90, 0xdd, 0xac, 0xd4, 0x6b, 0x8d, 0x7a, 0xed, 0x9e, 0x24, 0x54, 0xf2, 0x1f, 0x7f, 0xb6, - 0xbe, 0xa0, 0x60, 0x0a, 0xf4, 0xde, 0xb8, 0x07, 0x8b, 0x63, 0x0b, 0x13, 0xce, 0xcb, 0x10, 0x94, - 0xee, 0x1c, 0x1f, 0xee, 0xed, 0xd4, 0xaa, 0xcd, 0xba, 0x7a, 0xff, 0xa0, 0x59, 0x97, 0x04, 0x74, - 0x05, 0x96, 0xf7, 0x76, 0x5e, 0x6f, 0x34, 0xd5, 0xda, 0xde, 0x4e, 0x7d, 0xbf, 0xa9, 0x56, 0x9b, - 0xcd, 0x6a, 0xed, 0x9e, 0x94, 0xdc, 0xfa, 0x67, 0x01, 0xc4, 0xea, 0x76, 0x6d, 0x07, 0xd5, 0x40, - 0xa4, 0x58, 0xcf, 0x85, 0x0f, 0x21, 0x2b, 0x17, 0x43, 0xf6, 0xe8, 0x2e, 0xa4, 0x29, 0x0c, 0x84, - 0x2e, 0x7e, 0x19, 0x59, 0x99, 0x82, 0xe1, 0x93, 0x8f, 0xa1, 0x3b, 0xf2, 0xc2, 0xa7, 0x92, 0x95, - 0x8b, 0x21, 0x7d, 0xb4, 0x07, 0x0b, 0x2e, 0x0a, 0x30, 0xed, 0xfd, 0x62, 0x65, 0x2a, 0xce, 0x4e, - 0xa6, 0xc6, 0xd0, 0x94, 0x8b, 0x5f, 0x51, 0x56, 0xa6, 0x80, 0xfd, 0x68, 0x07, 0x32, 0xbc, 0xde, - 0x9e, 0xf2, 0x30, 0xb2, 0x32, 0x0d, 0xbe, 0x47, 0x0a, 0xe4, 0x7c, 0x9c, 0x6a, 0xfa, 0xdb, 0xd0, - 0xca, 0x0c, 0xf7, 0x18, 0xe8, 0x1d, 0x28, 0x86, 0x6b, 0xf9, 0xd9, 0x1e, 0x5f, 0x56, 0x66, 0xbc, - 0x28, 0x20, 0xfa, 0xc3, 0x85, 0xfd, 0x6c, 0x8f, 0x31, 0x2b, 0x33, 0xde, 0x1b, 0xa0, 0xf7, 0x60, - 0x69, 0xb2, 0xf0, 0x9e, 0xfd, 0x6d, 0x66, 0x65, 0x8e, 0x9b, 0x04, 0xd4, 0x07, 0x14, 0x51, 0xb0, - 0xcf, 0xf1, 0x54, 0xb3, 0x32, 0xcf, 0xc5, 0x02, 0x6a, 0xc3, 0xe2, 0x78, 0x15, 0x3c, 0xeb, 0xd3, - 0xcd, 0xca, 0xcc, 0x97, 0x0c, 0x6c, 0x94, 0x70, 0xf5, 0x3c, 0xeb, 0x53, 0xce, 0xca, 0xcc, 0x77, - 0x0e, 0xe8, 0x18, 0x20, 0x50, 0x00, 0xcf, 0xf0, 0xb4, 0xb3, 0x32, 0xcb, 0xed, 0x03, 0x32, 0x61, - 0x39, 0xaa, 0x32, 0x9e, 0xe7, 0xa5, 0x67, 0x65, 0xae, 0x4b, 0x09, 0xe2, 0xcf, 0xe1, 0x1a, 0x77, - 0xb6, 0x97, 0x9f, 0x95, 0x19, 0x6f, 0x27, 0x90, 0x06, 0xa5, 0xb1, 0xba, 0x6e, 0xc6, 0x87, 0xa0, - 0x95, 0x59, 0x2f, 0x2b, 0x88, 0x1b, 0x47, 0x94, 0x6a, 0x73, 0xbc, 0x0b, 0xad, 0xcc, 0x73, 0x7d, - 0xb1, 0x5d, 0xfd, 0xfc, 0xab, 0x55, 0xe1, 0x8b, 0xaf, 0x56, 0x85, 0x7f, 0x7c, 0xb5, 0x2a, 0x7c, - 0xf2, 0xf5, 0x6a, 0xe2, 0x8b, 0xaf, 0x57, 0x13, 0x7f, 0xfb, 0x7a, 0x35, 0xf1, 0xe3, 0xa7, 0x3a, - 0xba, 0xd3, 0x1d, 0x9e, 0x6c, 0xb4, 0x8c, 0xfe, 0x66, 0xcb, 0xe8, 0x63, 0xe7, 0xe4, 0xd4, 0xf1, - 0x1b, 0xfe, 0x3f, 0x16, 0x4e, 0x32, 0x34, 0x27, 0xb8, 0xf9, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xce, 0xf1, 0xaf, 0xd9, 0xd1, 0x30, 0x00, 0x00, + // 3509 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x70, 0x23, 0xc5, + 0xf5, 0xd7, 0xe8, 0xcb, 0xd2, 0xd3, 0x87, 0xc7, 0xed, 0x5d, 0xaf, 0xd0, 0x2e, 0xb6, 0x77, 0x28, + 0x60, 0x59, 0xc0, 0x06, 0xef, 0x7f, 0x81, 0xad, 0x85, 0x7f, 0xc5, 0xd6, 0x6a, 0x91, 0xbd, 0x8b, + 0x6d, 0xc6, 0xf2, 0x52, 0xe4, 0x83, 0x61, 0x24, 0xb5, 0xa5, 0x61, 0x25, 0xcd, 0x30, 0x33, 0x32, + 0x32, 0xa7, 0x54, 0x48, 0xaa, 0x52, 0x9c, 0xa8, 0xca, 0x85, 0x43, 0x38, 0xe4, 0x90, 0x4b, 0x0e, + 0x39, 0x27, 0x97, 0x9c, 0x72, 0xe0, 0x90, 0x03, 0xa7, 0x54, 0x4e, 0x24, 0x81, 0x1b, 0xd7, 0x1c, + 0x72, 0x4d, 0xf5, 0xc7, 0x7c, 0x6a, 0xc6, 0x92, 0x16, 0x72, 0x48, 0x25, 0xb7, 0xee, 0x37, 0xef, + 0xbd, 0x56, 0xbf, 0x7e, 0xdd, 0xef, 0xf5, 0xef, 0xb5, 0xe0, 0xb2, 0x8d, 0x87, 0x1d, 0x6c, 0x0e, + 0xb4, 0xa1, 0xbd, 0xa9, 0xb6, 0xda, 0xda, 0xa6, 0x7d, 0x66, 0x60, 0x6b, 0xc3, 0x30, 0x75, 0x5b, + 0x47, 0x8b, 0xde, 0xc7, 0x0d, 0xf2, 0xb1, 0xfa, 0xb8, 0x8f, 0xbb, 0x6d, 0x9e, 0x19, 0xb6, 0xbe, + 0x69, 0x98, 0xba, 0x7e, 0xc2, 0xf8, 0xab, 0x57, 0x26, 0x3f, 0x3f, 0xc4, 0x67, 0x5c, 0x5b, 0x40, + 0x98, 0x8e, 0xb2, 0x69, 0xa8, 0xa6, 0x3a, 0x70, 0x3e, 0xaf, 0x4f, 0x7c, 0x3e, 0x55, 0xfb, 0x5a, + 0x47, 0xb5, 0x75, 0x93, 0x73, 0xac, 0x75, 0x75, 0xbd, 0xdb, 0xc7, 0x9b, 0xb4, 0xd7, 0x1a, 0x9d, + 0x6c, 0xda, 0xda, 0x00, 0x5b, 0xb6, 0x3a, 0x30, 0x38, 0xc3, 0x85, 0xae, 0xde, 0xd5, 0x69, 0x73, + 0x93, 0xb4, 0x22, 0xc6, 0xd5, 0x4d, 0xb5, 0xdd, 0xc7, 0xfe, 0x49, 0x4a, 0x7f, 0x2e, 0xc0, 0x82, + 0x8c, 0xdf, 0x1f, 0x61, 0xcb, 0x46, 0x5b, 0x90, 0xc6, 0xed, 0x9e, 0x5e, 0x11, 0xd6, 0x85, 0x6b, + 0x85, 0xad, 0x2b, 0x1b, 0xa1, 0xf9, 0x6f, 0x70, 0xbe, 0x7a, 0xbb, 0xa7, 0x37, 0x12, 0x32, 0xe5, + 0x45, 0x37, 0x21, 0x73, 0xd2, 0x1f, 0x59, 0xbd, 0x4a, 0x92, 0x0a, 0x3d, 0x1e, 0x27, 0x74, 0x97, + 0x30, 0x35, 0x12, 0x32, 0xe3, 0x26, 0x43, 0x69, 0xc3, 0x13, 0xbd, 0x92, 0x3a, 0x7f, 0xa8, 0xdd, + 0xe1, 0x09, 0x1d, 0x8a, 0xf0, 0xa2, 0x1d, 0x00, 0x6d, 0xa8, 0xd9, 0x4a, 0xbb, 0xa7, 0x6a, 0xc3, + 0x4a, 0x86, 0x4a, 0x5e, 0x8d, 0x97, 0xd4, 0xec, 0x1a, 0x61, 0x6c, 0x24, 0xe4, 0xbc, 0xe6, 0x74, + 0xc8, 0xcf, 0x7d, 0x7f, 0x84, 0xcd, 0xb3, 0x4a, 0xf6, 0xfc, 0x9f, 0xfb, 0x26, 0x61, 0x22, 0x3f, + 0x97, 0x72, 0xa3, 0x57, 0x21, 0xd7, 0xee, 0xe1, 0xf6, 0x43, 0xc5, 0x1e, 0x57, 0x72, 0x54, 0x72, + 0x2d, 0x4e, 0xb2, 0x46, 0xf8, 0x9a, 0xe3, 0x46, 0x42, 0x5e, 0x68, 0xb3, 0x26, 0x7a, 0x05, 0xb2, + 0x6d, 0x7d, 0x30, 0xd0, 0xec, 0x4a, 0x81, 0xca, 0xae, 0xc6, 0xca, 0x52, 0xae, 0x46, 0x42, 0xe6, + 0xfc, 0x68, 0x1f, 0xca, 0x7d, 0xcd, 0xb2, 0x15, 0x6b, 0xa8, 0x1a, 0x56, 0x4f, 0xb7, 0xad, 0x4a, + 0x91, 0x6a, 0x78, 0x32, 0x4e, 0xc3, 0x7d, 0xcd, 0xb2, 0x8f, 0x1c, 0xe6, 0x46, 0x42, 0x2e, 0xf5, + 0xfd, 0x04, 0xa2, 0x4f, 0x3f, 0x39, 0xc1, 0xa6, 0xab, 0xb0, 0x52, 0x3a, 0x5f, 0xdf, 0x01, 0xe1, + 0x76, 0xe4, 0x89, 0x3e, 0xdd, 0x4f, 0x40, 0x3f, 0x80, 0xe5, 0xbe, 0xae, 0x76, 0x5c, 0x75, 0x4a, + 0xbb, 0x37, 0x1a, 0x3e, 0xac, 0x94, 0xa9, 0xd2, 0x67, 0x62, 0x7f, 0xa4, 0xae, 0x76, 0x1c, 0x15, + 0x35, 0x22, 0xd0, 0x48, 0xc8, 0x4b, 0xfd, 0x30, 0x11, 0xbd, 0x03, 0x17, 0x54, 0xc3, 0xe8, 0x9f, + 0x85, 0xb5, 0x2f, 0x52, 0xed, 0xd7, 0xe3, 0xb4, 0x6f, 0x13, 0x99, 0xb0, 0x7a, 0xa4, 0x4e, 0x50, + 0x51, 0x13, 0x44, 0xc3, 0xc4, 0x86, 0x6a, 0x62, 0xc5, 0x30, 0x75, 0x43, 0xb7, 0xd4, 0x7e, 0x45, + 0xa4, 0xba, 0x9f, 0x8e, 0xd3, 0x7d, 0xc8, 0xf8, 0x0f, 0x39, 0x7b, 0x23, 0x21, 0x2f, 0x1a, 0x41, + 0x12, 0xd3, 0xaa, 0xb7, 0xb1, 0x65, 0x79, 0x5a, 0x97, 0xa6, 0x69, 0xa5, 0xfc, 0x41, 0xad, 0x01, + 0x12, 0xaa, 0x43, 0x01, 0x8f, 0x89, 0xb8, 0x72, 0xaa, 0xdb, 0xb8, 0x82, 0xa8, 0x42, 0x29, 0x76, + 0x87, 0x52, 0xd6, 0x07, 0xba, 0x8d, 0x1b, 0x09, 0x19, 0xb0, 0xdb, 0x43, 0x2a, 0x5c, 0x3c, 0xc5, + 0xa6, 0x76, 0x72, 0x46, 0xd5, 0x28, 0xf4, 0x8b, 0xa5, 0xe9, 0xc3, 0xca, 0x32, 0x55, 0xf8, 0x6c, + 0x9c, 0xc2, 0x07, 0x54, 0x88, 0xa8, 0xa8, 0x3b, 0x22, 0x8d, 0x84, 0xbc, 0x7c, 0x3a, 0x49, 0x26, + 0x2e, 0x76, 0xa2, 0x0d, 0xd5, 0xbe, 0xf6, 0x21, 0x56, 0x5a, 0x7d, 0xbd, 0xfd, 0xb0, 0x72, 0xe1, + 0x7c, 0x17, 0xbb, 0xcb, 0xb9, 0x77, 0x08, 0x33, 0x71, 0xb1, 0x13, 0x3f, 0x01, 0xc9, 0x20, 0x5a, + 0x5a, 0x77, 0xa8, 0x74, 0x75, 0xcb, 0xd2, 0x0c, 0x36, 0xfd, 0x8b, 0x54, 0xe3, 0x53, 0x71, 0x1a, + 0x8f, 0xb4, 0xee, 0xf0, 0x75, 0xca, 0xce, 0x4d, 0x50, 0xb6, 0x02, 0x14, 0xe2, 0x59, 0xce, 0xca, + 0xb3, 0x23, 0x91, 0xaa, 0xb5, 0x2a, 0x2b, 0xe7, 0x7b, 0x16, 0x5f, 0xfd, 0x03, 0x2a, 0x42, 0x14, + 0x91, 0x1d, 0x86, 0x8c, 0x09, 0x2a, 0x35, 0x33, 0x3b, 0xbd, 0x43, 0x03, 0x5c, 0x9a, 0x62, 0x66, + 0x2e, 0x14, 0x1c, 0x61, 0xf9, 0x74, 0x92, 0xbc, 0xb3, 0x00, 0x99, 0x53, 0xb5, 0x3f, 0xc2, 0x7b, + 0xe9, 0x5c, 0x5a, 0xcc, 0xec, 0xa5, 0x73, 0x0b, 0x62, 0x6e, 0x2f, 0x9d, 0xcb, 0x8b, 0xb0, 0x97, + 0xce, 0x81, 0x58, 0x90, 0x9e, 0x86, 0x82, 0xef, 0xbc, 0x46, 0x15, 0x58, 0x18, 0x60, 0xcb, 0x52, + 0xbb, 0x98, 0x1e, 0xef, 0x79, 0xd9, 0xe9, 0x4a, 0x65, 0x28, 0xfa, 0xcf, 0x68, 0xe9, 0x13, 0xc1, + 0x95, 0x24, 0xc7, 0x2f, 0x91, 0x3c, 0xc5, 0x26, 0xf5, 0x12, 0x2e, 0xc9, 0xbb, 0xe8, 0x09, 0x28, + 0xd1, 0x15, 0x56, 0x9c, 0xef, 0x24, 0x06, 0xa4, 0xe5, 0x22, 0x25, 0x3e, 0xe0, 0x4c, 0x6b, 0x50, + 0x30, 0xb6, 0x0c, 0x97, 0x25, 0x45, 0x59, 0xc0, 0xd8, 0x32, 0x1c, 0x86, 0xab, 0x50, 0x24, 0x36, + 0x70, 0x39, 0xd2, 0x74, 0x90, 0x02, 0xa1, 0x71, 0x16, 0xe9, 0x4f, 0x49, 0x10, 0xc3, 0xe7, 0x3a, + 0x7a, 0x05, 0xd2, 0x24, 0x02, 0xf2, 0x68, 0x55, 0xdd, 0x60, 0xe1, 0x71, 0xc3, 0x09, 0x8f, 0x1b, + 0x4d, 0x27, 0x3c, 0xee, 0xe4, 0x3e, 0xff, 0x72, 0x2d, 0xf1, 0xc9, 0x5f, 0xd7, 0x04, 0x99, 0x4a, + 0xa0, 0xc7, 0xc8, 0x69, 0xae, 0x6a, 0x43, 0x45, 0xeb, 0xd0, 0x9f, 0x9c, 0x27, 0x47, 0xb5, 0xaa, + 0x0d, 0x77, 0x3b, 0xe8, 0x3e, 0x88, 0x6d, 0x7d, 0x68, 0xe1, 0xa1, 0x35, 0xb2, 0x14, 0x16, 0xa0, + 0x79, 0x8c, 0x0a, 0x44, 0x1a, 0x16, 0x41, 0x6b, 0x0e, 0xe7, 0x21, 0x65, 0x94, 0x17, 0xdb, 0x41, + 0x02, 0xba, 0x0b, 0xe0, 0x46, 0x71, 0xab, 0x92, 0x5e, 0x4f, 0x5d, 0x2b, 0x6c, 0xad, 0x4f, 0x2c, + 0xfe, 0x03, 0x87, 0xe5, 0xd8, 0x20, 0xab, 0xbc, 0x93, 0x26, 0x3f, 0x57, 0xf6, 0x49, 0xa2, 0xa7, + 0x60, 0x51, 0x35, 0x0c, 0xc5, 0xb2, 0x89, 0x43, 0xb5, 0xce, 0x88, 0x27, 0x91, 0xf0, 0x57, 0x94, + 0x4b, 0xaa, 0x61, 0x1c, 0x11, 0xea, 0x0e, 0x21, 0xa2, 0x27, 0xa1, 0x4c, 0x42, 0x9d, 0xa6, 0xf6, + 0x95, 0x1e, 0xd6, 0xba, 0x3d, 0x9b, 0x86, 0xb9, 0x94, 0x5c, 0xe2, 0xd4, 0x06, 0x25, 0x4a, 0x1d, + 0x77, 0xc5, 0x69, 0x98, 0x43, 0x08, 0xd2, 0x1d, 0xd5, 0x56, 0xa9, 0x25, 0x8b, 0x32, 0x6d, 0x13, + 0x9a, 0xa1, 0xda, 0x3d, 0x6e, 0x1f, 0xda, 0x46, 0x2b, 0x90, 0xe5, 0x6a, 0x53, 0x54, 0x2d, 0xef, + 0xa1, 0x0b, 0x90, 0x31, 0x4c, 0xfd, 0x14, 0xd3, 0xa5, 0xcb, 0xc9, 0xac, 0x23, 0xc9, 0x50, 0x0e, + 0x86, 0x44, 0x54, 0x86, 0xa4, 0x3d, 0xe6, 0xa3, 0x24, 0xed, 0x31, 0x7a, 0x01, 0xd2, 0xc4, 0x90, + 0x74, 0x8c, 0x72, 0x44, 0x12, 0xc0, 0xe5, 0x9a, 0x67, 0x06, 0x96, 0x29, 0xa7, 0xb4, 0x08, 0xa5, + 0x40, 0xa8, 0x94, 0x56, 0xe0, 0x42, 0x54, 0xe4, 0x93, 0x7a, 0x2e, 0x3d, 0x10, 0xc1, 0xd0, 0x4d, + 0xc8, 0xb9, 0xa1, 0x8f, 0x39, 0xce, 0x63, 0x13, 0xc3, 0x3a, 0xcc, 0xb2, 0xcb, 0x4a, 0x3c, 0x86, + 0x2c, 0x40, 0x4f, 0xe5, 0x89, 0x4e, 0x51, 0x5e, 0x50, 0x0d, 0xa3, 0xa1, 0x5a, 0x3d, 0xe9, 0x5d, + 0xa8, 0xc4, 0x85, 0x35, 0x9f, 0xc1, 0x04, 0xea, 0xf6, 0x8e, 0xc1, 0x56, 0x20, 0x7b, 0xa2, 0x9b, + 0x03, 0xd5, 0xa6, 0xca, 0x4a, 0x32, 0xef, 0x11, 0x43, 0xb2, 0x10, 0x97, 0xa2, 0x64, 0xd6, 0x91, + 0x14, 0x78, 0x2c, 0x36, 0xb4, 0x11, 0x11, 0x6d, 0xd8, 0xc1, 0xcc, 0xac, 0x25, 0x99, 0x75, 0x3c, + 0x45, 0xec, 0xc7, 0xb2, 0x0e, 0x19, 0xd6, 0xa2, 0x73, 0xa5, 0xfa, 0xf3, 0x32, 0xef, 0x49, 0x9f, + 0xa6, 0x60, 0x25, 0x3a, 0xc0, 0xa1, 0x75, 0x28, 0x0e, 0xd4, 0xb1, 0x62, 0x8f, 0xb9, 0xdb, 0x09, + 0x74, 0xe1, 0x61, 0xa0, 0x8e, 0x9b, 0x63, 0xe6, 0x73, 0x22, 0xa4, 0xec, 0xb1, 0x55, 0x49, 0xae, + 0xa7, 0xae, 0x15, 0x65, 0xd2, 0x44, 0xc7, 0xb0, 0xd4, 0xd7, 0xdb, 0x6a, 0x5f, 0xe9, 0xab, 0x96, + 0xad, 0xf0, 0xcc, 0x87, 0x6d, 0xa2, 0x27, 0x26, 0x8c, 0xcd, 0x42, 0x15, 0xee, 0xb0, 0xf5, 0x24, + 0x07, 0x0e, 0xf7, 0xff, 0x45, 0xaa, 0xe3, 0xbe, 0xea, 0x2c, 0x35, 0xba, 0x03, 0x85, 0x81, 0x66, + 0xb5, 0x70, 0x4f, 0x3d, 0xd5, 0x74, 0x93, 0xef, 0xa6, 0x49, 0xa7, 0x79, 0xc3, 0xe3, 0xe1, 0x9a, + 0xfc, 0x62, 0xbe, 0x25, 0xc9, 0x04, 0x7c, 0xd8, 0x39, 0x4d, 0xb2, 0x73, 0x9f, 0x26, 0x2f, 0xc0, + 0x85, 0x21, 0x1e, 0xdb, 0x8a, 0xb7, 0x5f, 0x99, 0x9f, 0x2c, 0x50, 0xd3, 0x23, 0xf2, 0xcd, 0xdd, + 0xe1, 0x16, 0x71, 0x19, 0xf4, 0x0c, 0x4d, 0x11, 0x0c, 0xdd, 0xc2, 0xa6, 0xa2, 0x76, 0x3a, 0x26, + 0xb6, 0x2c, 0x9a, 0x55, 0x16, 0x69, 0xdc, 0xa7, 0xf4, 0x6d, 0x46, 0x96, 0x7e, 0xee, 0x5f, 0x9a, + 0x60, 0x4a, 0xc0, 0x0d, 0x2f, 0x78, 0x86, 0x3f, 0x22, 0x61, 0x8d, 0xca, 0x77, 0x02, 0xb6, 0x67, + 0xa9, 0xf9, 0xe5, 0xc9, 0xfd, 0x15, 0xb6, 0x39, 0x72, 0xc4, 0xe3, 0xcd, 0x9e, 0x7a, 0x34, 0xb3, + 0x23, 0x48, 0x53, 0xa3, 0xa4, 0xd9, 0x11, 0x43, 0xda, 0xff, 0x69, 0x4b, 0xf1, 0x51, 0x0a, 0x96, + 0x26, 0xf2, 0x2b, 0x77, 0x62, 0x42, 0xe4, 0xc4, 0x92, 0x91, 0x13, 0x4b, 0xcd, 0x3d, 0x31, 0xbe, + 0xd6, 0xe9, 0xe9, 0x6b, 0x9d, 0xf9, 0x0e, 0xd7, 0x3a, 0xfb, 0x68, 0x6b, 0xfd, 0x6f, 0x5d, 0x85, + 0x5f, 0x0a, 0x50, 0x8d, 0x4f, 0x4a, 0x23, 0x97, 0xe3, 0x59, 0x58, 0x72, 0x7f, 0x8a, 0xab, 0x9e, + 0x1d, 0x8c, 0xa2, 0xfb, 0x81, 0xeb, 0x8f, 0x8d, 0x71, 0x4f, 0x42, 0x39, 0x94, 0x32, 0x33, 0x57, + 0x2e, 0x9d, 0xfa, 0xc7, 0x97, 0x7e, 0x9a, 0x72, 0x03, 0x4f, 0x20, 0xaf, 0x8d, 0xd8, 0xad, 0x6f, + 0xc2, 0x72, 0x07, 0xb7, 0xb5, 0xce, 0xa3, 0x6e, 0xd6, 0x25, 0x2e, 0xfd, 0xbf, 0xbd, 0x1a, 0xe9, + 0x25, 0x17, 0x23, 0x2f, 0x03, 0x91, 0x4a, 0x84, 0x48, 0x25, 0xe8, 0x7b, 0x50, 0xf4, 0x5d, 0x3a, + 0x58, 0x88, 0x0b, 0x41, 0x06, 0x2c, 0xb9, 0xdf, 0xf0, 0xf4, 0xcb, 0x85, 0xae, 0xdb, 0x8e, 0x75, + 0x26, 0xe9, 0xb2, 0x1b, 0xd1, 0x27, 0xaf, 0x14, 0xd2, 0x2d, 0xcf, 0xc1, 0x27, 0xf3, 0x7e, 0x74, + 0x19, 0xf2, 0xfc, 0x46, 0xe1, 0xa6, 0x52, 0x39, 0x46, 0x68, 0x8e, 0xa5, 0xdf, 0x16, 0x21, 0x27, + 0x63, 0xcb, 0x20, 0x69, 0x28, 0xda, 0x81, 0x3c, 0x1e, 0xb7, 0xb1, 0x61, 0x3b, 0x99, 0x7b, 0xf4, + 0x85, 0x91, 0x71, 0xd7, 0x1d, 0xce, 0x46, 0x42, 0xf6, 0xc4, 0xd0, 0x0d, 0x8e, 0x08, 0xc5, 0x83, + 0x3b, 0x5c, 0xdc, 0x0f, 0x09, 0xbd, 0xe4, 0x40, 0x42, 0xa9, 0x58, 0xb4, 0x83, 0x49, 0x85, 0x30, + 0xa1, 0x1b, 0x1c, 0x13, 0x4a, 0x4f, 0x19, 0x2c, 0x00, 0x0a, 0xd5, 0x02, 0xa0, 0x50, 0x76, 0xca, + 0x34, 0x63, 0x50, 0xa1, 0x97, 0x1c, 0x54, 0x68, 0x61, 0xca, 0x2f, 0x0e, 0xc1, 0x42, 0xaf, 0xf9, + 0x60, 0xa1, 0x3c, 0x15, 0x5d, 0x8f, 0x15, 0x8d, 0xc0, 0x85, 0x6e, 0xb9, 0xb8, 0x50, 0x31, 0x16, + 0x53, 0xe2, 0xc2, 0x61, 0x60, 0xe8, 0x60, 0x02, 0x18, 0x2a, 0xc5, 0xde, 0x89, 0x99, 0x8a, 0x29, + 0xc8, 0xd0, 0xc1, 0x04, 0x32, 0x54, 0x9e, 0xa2, 0x70, 0x0a, 0x34, 0xf4, 0xc3, 0x68, 0x68, 0x28, + 0x1e, 0xbc, 0xe1, 0x3f, 0x73, 0x36, 0x6c, 0x48, 0x89, 0xc1, 0x86, 0xc4, 0xd8, 0x0b, 0x36, 0x53, + 0x3f, 0x33, 0x38, 0x74, 0x1c, 0x01, 0x0e, 0x31, 0x18, 0xe7, 0x5a, 0xac, 0xf2, 0x19, 0xd0, 0xa1, + 0xe3, 0x08, 0x74, 0x08, 0x4d, 0x55, 0x3b, 0x15, 0x1e, 0xba, 0x1b, 0x84, 0x87, 0x96, 0x63, 0x92, + 0x6d, 0x6f, 0xb7, 0xc7, 0xe0, 0x43, 0xad, 0x38, 0x7c, 0x88, 0x61, 0x38, 0xcf, 0xc5, 0x6a, 0x9c, + 0x03, 0x20, 0x3a, 0x98, 0x00, 0x88, 0x2e, 0x4e, 0xf1, 0xb4, 0x29, 0x08, 0xd1, 0x51, 0x04, 0x42, + 0xb4, 0x12, 0x8b, 0xb8, 0x31, 0x95, 0x53, 0x21, 0x22, 0x25, 0x06, 0x22, 0xba, 0x34, 0xc5, 0xc1, + 0x66, 0xc6, 0x88, 0x5a, 0x71, 0x18, 0x51, 0x65, 0x9a, 0xa9, 0x1f, 0x09, 0x24, 0xca, 0x88, 0xd9, + 0xbd, 0x74, 0x2e, 0x27, 0xe6, 0x19, 0x3c, 0xb4, 0x97, 0xce, 0x15, 0xc4, 0xa2, 0xf4, 0x0c, 0x49, + 0x69, 0x43, 0x11, 0x80, 0x5c, 0x1e, 0xb1, 0x69, 0xea, 0x26, 0x87, 0x7b, 0x58, 0x47, 0xba, 0x06, + 0x45, 0xff, 0x69, 0x7f, 0x0e, 0xa0, 0x44, 0x2f, 0xe9, 0xbe, 0x13, 0x5e, 0xfa, 0x9d, 0xe0, 0xc9, + 0x52, 0x48, 0xc9, 0x0f, 0x38, 0xe4, 0x39, 0xe0, 0xe0, 0x83, 0x99, 0x92, 0x41, 0x98, 0x69, 0x0d, + 0x0a, 0xe4, 0xf2, 0x1d, 0x42, 0x90, 0x54, 0xc3, 0x45, 0x90, 0xae, 0xc3, 0x12, 0xcd, 0xa0, 0x18, + 0x18, 0xc5, 0x23, 0x6e, 0x9a, 0x46, 0xdc, 0x45, 0xf2, 0x81, 0xf9, 0x0d, 0x4b, 0x58, 0x9e, 0x87, + 0x65, 0x1f, 0xaf, 0x7b, 0xa9, 0x67, 0x70, 0x8a, 0xe8, 0x72, 0x6f, 0xf3, 0xdb, 0xfd, 0x1f, 0x05, + 0xcf, 0x42, 0x1e, 0xf4, 0x14, 0x85, 0x12, 0x09, 0xdf, 0x11, 0x4a, 0x94, 0x7c, 0x64, 0x94, 0xc8, + 0x0f, 0x52, 0xa4, 0x82, 0x20, 0xc5, 0x3f, 0x05, 0x6f, 0x4d, 0x5c, 0xcc, 0xa7, 0xad, 0x77, 0x30, + 0x87, 0x0d, 0x68, 0x9b, 0xe4, 0xa8, 0x7d, 0xbd, 0xcb, 0xc1, 0x01, 0xd2, 0x24, 0x5c, 0x6e, 0x48, + 0xce, 0xf3, 0x88, 0xeb, 0x22, 0x0e, 0x2c, 0x13, 0xe4, 0x88, 0x83, 0x08, 0xa9, 0x87, 0x98, 0x95, + 0x55, 0x8a, 0x32, 0x69, 0x12, 0x3e, 0xea, 0x7c, 0x3c, 0xa3, 0x63, 0x1d, 0xf4, 0x0a, 0xe4, 0x69, + 0xcd, 0x4c, 0xd1, 0x0d, 0x8b, 0x97, 0x52, 0x02, 0xb9, 0x2e, 0x2b, 0x9c, 0x6d, 0x1c, 0x12, 0x9e, + 0x03, 0xc3, 0x92, 0x73, 0x06, 0x6f, 0xf9, 0x92, 0xa9, 0x7c, 0x20, 0x05, 0xbd, 0x02, 0x79, 0xf2, + 0xeb, 0x2d, 0x43, 0x6d, 0xe3, 0x0a, 0xd0, 0x1f, 0xea, 0x11, 0xa4, 0xdf, 0x24, 0x61, 0x31, 0x14, + 0x82, 0x23, 0xe7, 0xee, 0xb8, 0x64, 0xd2, 0x87, 0x81, 0xcd, 0x66, 0x8f, 0x55, 0x80, 0xae, 0x6a, + 0x29, 0x1f, 0xa8, 0x43, 0x1b, 0x77, 0xb8, 0x51, 0x7c, 0x14, 0x54, 0x85, 0x1c, 0xe9, 0x8d, 0x2c, + 0xdc, 0xe1, 0x70, 0x9c, 0xdb, 0x47, 0x0d, 0xc8, 0xe2, 0x53, 0x3c, 0xb4, 0xad, 0xca, 0x02, 0x5d, + 0xf6, 0x95, 0x49, 0x7c, 0x84, 0x7c, 0xde, 0xa9, 0x90, 0xc5, 0xfe, 0xe6, 0xcb, 0x35, 0x91, 0x71, + 0x3f, 0xa7, 0x0f, 0x34, 0x1b, 0x0f, 0x0c, 0xfb, 0x4c, 0xe6, 0xf2, 0x41, 0x2b, 0xe4, 0x42, 0x56, + 0xa0, 0xc0, 0x70, 0xd1, 0xc1, 0x7b, 0x88, 0x4d, 0x35, 0xdd, 0xd4, 0xec, 0x33, 0xb9, 0x34, 0xc0, + 0x03, 0x43, 0xd7, 0xfb, 0x0a, 0xdb, 0xe3, 0xdb, 0x50, 0x0e, 0x66, 0x1c, 0xe8, 0x09, 0x28, 0x99, + 0xd8, 0x56, 0xb5, 0xa1, 0x12, 0x48, 0x64, 0x8b, 0x8c, 0xc8, 0xf6, 0xd4, 0x5e, 0x3a, 0x27, 0x88, + 0xc9, 0xbd, 0x74, 0x2e, 0x29, 0xa6, 0xa4, 0x43, 0x92, 0x78, 0x47, 0x64, 0x1c, 0xe8, 0x65, 0xc8, + 0x7b, 0xc9, 0x8a, 0x40, 0x67, 0x7b, 0x0e, 0xf4, 0xe6, 0xf1, 0x4a, 0x7f, 0x10, 0x3c, 0x95, 0x41, + 0x30, 0xaf, 0x0e, 0x59, 0x13, 0x5b, 0xa3, 0x3e, 0x83, 0xd7, 0xca, 0x5b, 0xcf, 0xcf, 0x96, 0xab, + 0x10, 0xea, 0xa8, 0x6f, 0xcb, 0x5c, 0x58, 0x7a, 0x07, 0xb2, 0x8c, 0x82, 0x0a, 0xb0, 0x70, 0xbc, + 0x7f, 0x6f, 0xff, 0xe0, 0xad, 0x7d, 0x31, 0x81, 0x00, 0xb2, 0xdb, 0xb5, 0x5a, 0xfd, 0xb0, 0x29, + 0x0a, 0x28, 0x0f, 0x99, 0xed, 0x9d, 0x03, 0xb9, 0x29, 0x26, 0x09, 0x59, 0xae, 0xef, 0xd5, 0x6b, + 0x4d, 0x31, 0x85, 0x96, 0xa0, 0xc4, 0xda, 0xca, 0xdd, 0x03, 0xf9, 0x8d, 0xed, 0xa6, 0x98, 0xf6, + 0x91, 0x8e, 0xea, 0xfb, 0x77, 0xea, 0xb2, 0x98, 0x91, 0x5e, 0x24, 0xd9, 0x7e, 0x4c, 0x76, 0xe3, + 0x21, 0x75, 0x82, 0x0f, 0xa9, 0x93, 0x3e, 0x4d, 0x92, 0x4b, 0x40, 0x5c, 0xca, 0x82, 0xf6, 0x42, + 0x13, 0xdf, 0x9a, 0x23, 0xdf, 0x09, 0xcd, 0x9e, 0x5c, 0x6c, 0x4d, 0x7c, 0x82, 0xed, 0x76, 0x8f, + 0xa5, 0x50, 0xec, 0x04, 0x2a, 0xc9, 0x25, 0x4e, 0xa5, 0x42, 0x16, 0x63, 0x7b, 0x0f, 0xb7, 0x6d, + 0x85, 0x39, 0x91, 0x45, 0x6f, 0x97, 0x79, 0xc2, 0x46, 0xa8, 0x47, 0x8c, 0x28, 0xbd, 0x3b, 0x97, + 0x2d, 0xf3, 0x90, 0x91, 0xeb, 0x4d, 0xf9, 0x6d, 0x31, 0x85, 0x10, 0x94, 0x69, 0x53, 0x39, 0xda, + 0xdf, 0x3e, 0x3c, 0x6a, 0x1c, 0x10, 0x5b, 0x2e, 0xc3, 0xa2, 0x63, 0x4b, 0x87, 0x98, 0x91, 0x9e, + 0x85, 0x4b, 0x31, 0xf9, 0xd6, 0xe4, 0x1d, 0x5b, 0xfa, 0x95, 0xe0, 0xe7, 0x0e, 0xe6, 0x4c, 0x07, + 0x90, 0xb5, 0x6c, 0xd5, 0x1e, 0x59, 0xdc, 0x88, 0x2f, 0xcf, 0x9a, 0x80, 0x6d, 0x38, 0x8d, 0x23, + 0x2a, 0x2e, 0x73, 0x35, 0xd2, 0x4d, 0x28, 0x07, 0xbf, 0xc4, 0xdb, 0xc0, 0x73, 0xa2, 0xa4, 0x74, + 0x1b, 0xd0, 0x64, 0x5e, 0x16, 0x81, 0x37, 0x08, 0x51, 0x78, 0xc3, 0xaf, 0x05, 0xb8, 0x7c, 0x4e, + 0x0e, 0x86, 0xde, 0x0c, 0x4d, 0xf2, 0xd6, 0x3c, 0x19, 0xdc, 0x06, 0xa3, 0x85, 0xa6, 0x79, 0x03, + 0x8a, 0x7e, 0xfa, 0x6c, 0x93, 0xfc, 0x26, 0xe9, 0x6d, 0xe2, 0x20, 0x30, 0xe2, 0x1d, 0x81, 0xc2, + 0xb7, 0x3c, 0x02, 0x5f, 0x05, 0xb0, 0xc7, 0x0a, 0x73, 0xeb, 0xc8, 0xdb, 0x3a, 0x07, 0x9c, 0x71, + 0xbb, 0x39, 0xe6, 0x9b, 0x20, 0x6f, 0xf3, 0x96, 0x85, 0x8e, 0xfc, 0x28, 0xd1, 0x88, 0xc6, 0x58, + 0x8b, 0x23, 0x28, 0xb3, 0x06, 0x63, 0x0f, 0x4d, 0x62, 0x64, 0x0b, 0xbd, 0x0d, 0x97, 0x42, 0x89, + 0x82, 0xab, 0x3a, 0x3d, 0x6b, 0xbe, 0x70, 0x31, 0x98, 0x2f, 0x38, 0xaa, 0xfd, 0xd1, 0x3e, 0x13, + 0x8c, 0xf6, 0x2f, 0xc3, 0x4a, 0x74, 0x9e, 0x8b, 0x1e, 0x07, 0xc0, 0x43, 0x12, 0x16, 0x3a, 0x1e, + 0x7c, 0x90, 0xe7, 0x94, 0xe6, 0x58, 0x3a, 0x86, 0x34, 0x65, 0xf3, 0x40, 0x06, 0xad, 0xc3, 0x93, + 0x34, 0x0e, 0x32, 0xec, 0x76, 0x48, 0xa4, 0x71, 0x5f, 0x9e, 0x70, 0x80, 0xd3, 0x23, 0xb8, 0x71, + 0x34, 0xe5, 0xa5, 0x76, 0xd2, 0x81, 0x77, 0x98, 0x4d, 0xa6, 0xc7, 0xe8, 0x45, 0xc8, 0xb0, 0xc4, + 0x97, 0xad, 0xff, 0xc5, 0x49, 0x63, 0xeb, 0xae, 0x85, 0x19, 0xa7, 0xf4, 0x7b, 0xbf, 0xd7, 0x47, + 0x80, 0x24, 0xd7, 0x61, 0xc9, 0x99, 0x66, 0x18, 0x2c, 0x59, 0xe4, 0x1f, 0x0e, 0x38, 0x66, 0x82, + 0xee, 0xb9, 0x3b, 0x84, 0x95, 0xa1, 0x6e, 0xcc, 0x93, 0x78, 0x6f, 0x84, 0xf6, 0xc6, 0x55, 0xc8, + 0x7a, 0xbb, 0xc2, 0x30, 0xb1, 0x85, 0x87, 0x36, 0xdb, 0x15, 0x6a, 0x8b, 0xb6, 0x05, 0xe9, 0x6d, + 0x00, 0x0f, 0xca, 0x23, 0xc7, 0xbf, 0xa9, 0x8f, 0x86, 0xcc, 0xca, 0x19, 0x99, 0x75, 0xd0, 0x4d, + 0xc7, 0x24, 0xc9, 0x98, 0x38, 0x49, 0x06, 0xf7, 0x41, 0x81, 0xdc, 0x2c, 0x1a, 0xa0, 0xc9, 0x72, + 0x4a, 0xcc, 0x10, 0xaf, 0x05, 0x87, 0xb8, 0x1a, 0x5b, 0x98, 0x89, 0x1e, 0xea, 0x43, 0xc8, 0xd0, + 0x6d, 0x49, 0xd6, 0x9b, 0xd6, 0xf0, 0x78, 0x2a, 0x4f, 0xda, 0xe8, 0x47, 0x00, 0xaa, 0x6d, 0x9b, + 0x5a, 0x6b, 0xe4, 0x0d, 0xb0, 0x16, 0xbd, 0xad, 0xb7, 0x1d, 0xbe, 0x9d, 0x2b, 0x7c, 0x7f, 0x5f, + 0xf0, 0x44, 0x7d, 0x7b, 0xdc, 0xa7, 0x50, 0xda, 0x87, 0x72, 0x50, 0xd6, 0x49, 0x3e, 0xd9, 0x6f, + 0x08, 0x26, 0x9f, 0xec, 0x2e, 0xc1, 0x93, 0x4f, 0x37, 0x75, 0x4d, 0xb1, 0x42, 0x25, 0xed, 0x48, + 0x3f, 0x4e, 0x42, 0xd1, 0x7f, 0x2a, 0xfc, 0xf7, 0xe5, 0x87, 0xd2, 0xcf, 0x04, 0xc8, 0xb9, 0xd3, + 0x0f, 0x56, 0x2d, 0x03, 0x65, 0x5e, 0x66, 0xbd, 0xa4, 0xbf, 0xd4, 0xc8, 0x8a, 0xba, 0x29, 0xb7, + 0xa8, 0x7b, 0xdb, 0xcd, 0x4d, 0xe2, 0x70, 0x3c, 0xbf, 0xad, 0xb9, 0x57, 0x39, 0xa9, 0xd8, 0x6d, + 0xc8, 0xbb, 0x47, 0x2b, 0xb9, 0x11, 0x06, 0x11, 0x5a, 0xa7, 0x4b, 0x0b, 0xce, 0xfa, 0x07, 0xbc, + 0x8e, 0x99, 0x92, 0x59, 0x47, 0xea, 0xc0, 0x62, 0xe8, 0x5c, 0x46, 0xb7, 0x61, 0xc1, 0x18, 0xb5, + 0x14, 0xc7, 0x39, 0x42, 0x60, 0xb8, 0x73, 0xd7, 0x18, 0xb5, 0xfa, 0x5a, 0xfb, 0x1e, 0x3e, 0x73, + 0x7e, 0x8c, 0x31, 0x6a, 0xdd, 0x63, 0x3e, 0xc4, 0x46, 0x49, 0xfa, 0x47, 0xf9, 0x85, 0x00, 0x39, + 0x67, 0x4f, 0xa0, 0xff, 0x87, 0xbc, 0x7b, 0xe6, 0xbb, 0x0f, 0x11, 0x62, 0x83, 0x05, 0xd7, 0xef, + 0x89, 0xa0, 0x6d, 0xe7, 0x05, 0x85, 0xd6, 0x51, 0x4e, 0xfa, 0x2a, 0xf3, 0xa5, 0x72, 0xd0, 0x66, + 0x2c, 0x2a, 0xd0, 0x60, 0xb9, 0x7b, 0xe7, 0x6e, 0x5f, 0xed, 0xca, 0x05, 0x2a, 0xb3, 0xdb, 0x21, + 0x1d, 0x9e, 0x76, 0xff, 0x43, 0x00, 0x31, 0xbc, 0x63, 0xbf, 0xf5, 0xaf, 0x9b, 0xcc, 0x41, 0x52, + 0x11, 0x39, 0x08, 0xda, 0x84, 0x65, 0x97, 0x43, 0xb1, 0xb4, 0xee, 0x50, 0xb5, 0x47, 0x26, 0xe6, + 0xe5, 0x03, 0xe4, 0x7e, 0x3a, 0x72, 0xbe, 0x4c, 0xce, 0x3a, 0xf3, 0x88, 0xb3, 0xfe, 0x28, 0x09, + 0x05, 0x5f, 0x31, 0x03, 0xfd, 0x9f, 0xef, 0x30, 0x2a, 0x47, 0x84, 0x6d, 0x1f, 0xaf, 0xf7, 0xa8, + 0x20, 0x68, 0xa6, 0xe4, 0xfc, 0x66, 0x8a, 0x2b, 0x19, 0x39, 0xb5, 0x91, 0xf4, 0xdc, 0xb5, 0x91, + 0xe7, 0x00, 0xd9, 0xba, 0xad, 0xf6, 0x95, 0x53, 0xdd, 0xd6, 0x86, 0x5d, 0x85, 0xb9, 0x21, 0x3b, + 0x3a, 0x44, 0xfa, 0xe5, 0x01, 0xfd, 0x70, 0x48, 0x3d, 0xf2, 0x27, 0x02, 0xe4, 0xdc, 0x3b, 0xd1, + 0xbc, 0x4f, 0x0e, 0x56, 0x20, 0xcb, 0xd3, 0x7e, 0xf6, 0xe6, 0x80, 0xf7, 0x22, 0x8b, 0x40, 0x55, + 0xc8, 0x0d, 0xb0, 0xad, 0xd2, 0x73, 0x90, 0xa5, 0x1c, 0x6e, 0xff, 0xfa, 0x2d, 0x28, 0xf8, 0x9e, + 0x6b, 0x90, 0xa3, 0x71, 0xbf, 0xfe, 0x96, 0x98, 0xa8, 0x2e, 0x7c, 0xfc, 0xd9, 0x7a, 0x6a, 0x1f, + 0x7f, 0x40, 0x76, 0xb3, 0x5c, 0xaf, 0x35, 0xea, 0xb5, 0x7b, 0xa2, 0x50, 0x2d, 0x7c, 0xfc, 0xd9, + 0xfa, 0x82, 0x8c, 0x29, 0x10, 0x7e, 0xfd, 0x1e, 0x2c, 0x86, 0x16, 0x26, 0x98, 0x53, 0x22, 0x28, + 0xdf, 0x39, 0x3e, 0xbc, 0xbf, 0x5b, 0xdb, 0x6e, 0xd6, 0x95, 0x07, 0x07, 0xcd, 0xba, 0x28, 0xa0, + 0x4b, 0xb0, 0x7c, 0x7f, 0xf7, 0xf5, 0x46, 0x53, 0xa9, 0xdd, 0xdf, 0xad, 0xef, 0x37, 0x95, 0xed, + 0x66, 0x73, 0xbb, 0x76, 0x4f, 0x4c, 0x6e, 0xfd, 0xbd, 0x04, 0xe9, 0xed, 0x9d, 0xda, 0x2e, 0xaa, + 0x41, 0x9a, 0xe2, 0x54, 0xe7, 0x3e, 0x63, 0xad, 0x9e, 0x5f, 0xd2, 0x40, 0x77, 0x21, 0x43, 0x21, + 0x2c, 0x74, 0xfe, 0xbb, 0xd6, 0xea, 0x94, 0x1a, 0x07, 0xf9, 0x31, 0x74, 0x47, 0x9e, 0xfb, 0xd0, + 0xb5, 0x7a, 0x7e, 0xc9, 0x03, 0xdd, 0x87, 0x05, 0x07, 0xc1, 0x98, 0xf6, 0xfa, 0xb4, 0x3a, 0xb5, + 0x0e, 0x41, 0xa6, 0xc6, 0x90, 0xa0, 0xf3, 0xdf, 0xc0, 0x56, 0xa7, 0x14, 0x43, 0xd0, 0x2e, 0x64, + 0x39, 0x56, 0x30, 0xe5, 0x59, 0x6b, 0x75, 0x5a, 0x79, 0x03, 0xc9, 0x90, 0xf7, 0x30, 0xb6, 0xe9, + 0x2f, 0x7b, 0xab, 0x33, 0xd4, 0x79, 0xd0, 0x3b, 0x50, 0x0a, 0xe2, 0x10, 0xb3, 0x3d, 0x9d, 0xad, + 0xce, 0x58, 0x48, 0x21, 0xfa, 0x83, 0xa0, 0xc4, 0x6c, 0x4f, 0x69, 0xab, 0x33, 0xd6, 0x55, 0xd0, + 0x7b, 0xb0, 0x34, 0x09, 0x1a, 0xcc, 0xfe, 0xb2, 0xb6, 0x3a, 0x47, 0xa5, 0x05, 0x0d, 0x00, 0x45, + 0x80, 0x0d, 0x73, 0x3c, 0xb4, 0xad, 0xce, 0x53, 0x78, 0x41, 0x1d, 0x58, 0x0c, 0xdf, 0xe0, 0x67, + 0x7d, 0x78, 0x5b, 0x9d, 0xb9, 0x08, 0xc3, 0x46, 0x09, 0xde, 0xfc, 0x67, 0x7d, 0x88, 0x5b, 0x9d, + 0xb9, 0x26, 0x83, 0x8e, 0x01, 0x7c, 0x97, 0xf7, 0x19, 0x1e, 0xe6, 0x56, 0x67, 0xa9, 0xce, 0x20, + 0x03, 0x96, 0xa3, 0x6e, 0xf5, 0xf3, 0xbc, 0xd3, 0xad, 0xce, 0x55, 0xb4, 0x21, 0xfe, 0x1c, 0xbc, + 0x9f, 0xcf, 0xf6, 0x6e, 0xb7, 0x3a, 0x63, 0xf5, 0x06, 0xa9, 0x50, 0x0e, 0xdd, 0x49, 0x67, 0x7c, + 0xc6, 0x5b, 0x9d, 0xb5, 0x98, 0x43, 0xdc, 0x38, 0xe2, 0x9a, 0x39, 0xc7, 0xab, 0xde, 0xea, 0x3c, + 0xe5, 0x1d, 0xba, 0x46, 0x11, 0x77, 0xd0, 0x79, 0x1e, 0xf9, 0x56, 0xe7, 0xaa, 0xf6, 0xec, 0x6c, + 0x7f, 0xfe, 0xd5, 0xaa, 0xf0, 0xc5, 0x57, 0xab, 0xc2, 0xdf, 0xbe, 0x5a, 0x15, 0x3e, 0xf9, 0x7a, + 0x35, 0xf1, 0xc5, 0xd7, 0xab, 0x89, 0xbf, 0x7c, 0xbd, 0x9a, 0xf8, 0xfe, 0xd3, 0x5d, 0xcd, 0xee, + 0x8d, 0x5a, 0x1b, 0x6d, 0x7d, 0xb0, 0xd9, 0xd6, 0x07, 0xd8, 0x6e, 0x9d, 0xd8, 0x5e, 0xc3, 0xfb, + 0x87, 0x4b, 0x2b, 0x4b, 0xb3, 0x90, 0x1b, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x27, 0x79, 0x3b, + 0x76, 0x01, 0x33, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4212,6 +4369,7 @@ type ABCIClient interface { FinalizeBlock(ctx context.Context, in *RequestFinalizeBlock, opts ...grpc.CallOption) (*ResponseFinalizeBlock, error) SignGossipVote(ctx context.Context, in *RequestSignGossipVote, opts ...grpc.CallOption) (*ResponseSignGossipVote, error) PrepareOracleVotes(ctx context.Context, in *RequestPrepareOracleVotes, opts ...grpc.CallOption) (*ResponsePrepareOracleVotes, error) + ValidateOracleVotes(ctx context.Context, in *RequestValidateOracleVotes, opts ...grpc.CallOption) (*ResponseValidateOracleVotes, error) } type aBCIClient struct { @@ -4384,6 +4542,15 @@ func (c *aBCIClient) PrepareOracleVotes(ctx context.Context, in *RequestPrepareO return out, nil } +func (c *aBCIClient) ValidateOracleVotes(ctx context.Context, in *RequestValidateOracleVotes, opts ...grpc.CallOption) (*ResponseValidateOracleVotes, error) { + out := new(ResponseValidateOracleVotes) + err := c.cc.Invoke(ctx, "/tendermint.abci.ABCI/ValidateOracleVotes", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ABCIServer is the server API for ABCI service. type ABCIServer interface { Echo(context.Context, *RequestEcho) (*ResponseEcho, error) @@ -4404,6 +4571,7 @@ type ABCIServer interface { FinalizeBlock(context.Context, *RequestFinalizeBlock) (*ResponseFinalizeBlock, error) SignGossipVote(context.Context, *RequestSignGossipVote) (*ResponseSignGossipVote, error) PrepareOracleVotes(context.Context, *RequestPrepareOracleVotes) (*ResponsePrepareOracleVotes, error) + ValidateOracleVotes(context.Context, *RequestValidateOracleVotes) (*ResponseValidateOracleVotes, error) } // UnimplementedABCIServer can be embedded to have forward compatible implementations. @@ -4464,6 +4632,9 @@ func (*UnimplementedABCIServer) SignGossipVote(ctx context.Context, req *Request func (*UnimplementedABCIServer) PrepareOracleVotes(ctx context.Context, req *RequestPrepareOracleVotes) (*ResponsePrepareOracleVotes, error) { return nil, status.Errorf(codes.Unimplemented, "method PrepareOracleVotes not implemented") } +func (*UnimplementedABCIServer) ValidateOracleVotes(ctx context.Context, req *RequestValidateOracleVotes) (*ResponseValidateOracleVotes, error) { + return nil, status.Errorf(codes.Unimplemented, "method ValidateOracleVotes not implemented") +} func RegisterABCIServer(s grpc1.Server, srv ABCIServer) { s.RegisterService(&_ABCI_serviceDesc, srv) @@ -4793,6 +4964,24 @@ func _ABCI_PrepareOracleVotes_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _ABCI_ValidateOracleVotes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequestValidateOracleVotes) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABCIServer).ValidateOracleVotes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/tendermint.abci.ABCI/ValidateOracleVotes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABCIServer).ValidateOracleVotes(ctx, req.(*RequestValidateOracleVotes)) + } + return interceptor(ctx, in, info, handler) +} + var _ABCI_serviceDesc = grpc.ServiceDesc{ ServiceName: "tendermint.abci.ABCI", HandlerType: (*ABCIServer)(nil), @@ -4869,6 +5058,10 @@ var _ABCI_serviceDesc = grpc.ServiceDesc{ MethodName: "PrepareOracleVotes", Handler: _ABCI_PrepareOracleVotes_Handler, }, + { + MethodName: "ValidateOracleVotes", + Handler: _ABCI_ValidateOracleVotes_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "tendermint/abci/types.proto", @@ -5298,6 +5491,29 @@ func (m *Request_PrepareOracleVotes) MarshalToSizedBuffer(dAtA []byte) (int, err } return len(dAtA) - i, nil } +func (m *Request_ValidateOracleVotes) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Request_ValidateOracleVotes) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.ValidateOracleVotes != nil { + { + size, err := m.ValidateOracleVotes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xba + } + return len(dAtA) - i, nil +} func (m *RequestEcho) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5463,12 +5679,12 @@ func (m *RequestInitChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - n20, err20 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) - if err20 != nil { - return 0, err20 + n21, err21 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) + if err21 != nil { + return 0, err21 } - i -= n20 - i = encodeVarintTypes(dAtA, i, uint64(n20)) + i -= n21 + i = encodeVarintTypes(dAtA, i, uint64(n21)) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -5763,12 +5979,12 @@ func (m *RequestPrepareProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x3a } - n22, err22 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) - if err22 != nil { - return 0, err22 + n23, err23 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) + if err23 != nil { + return 0, err23 } - i -= n22 - i = encodeVarintTypes(dAtA, i, uint64(n22)) + i -= n23 + i = encodeVarintTypes(dAtA, i, uint64(n23)) i-- dAtA[i] = 0x32 if m.Height != 0 { @@ -5851,12 +6067,12 @@ func (m *RequestProcessProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x3a } - n24, err24 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) - if err24 != nil { - return 0, err24 + n25, err25 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) + if err25 != nil { + return 0, err25 } - i -= n24 - i = encodeVarintTypes(dAtA, i, uint64(n24)) + i -= n25 + i = encodeVarintTypes(dAtA, i, uint64(n25)) i-- dAtA[i] = 0x32 if m.Height != 0 { @@ -5974,12 +6190,12 @@ func (m *RequestExtendVote) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x22 } } - n27, err27 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) - if err27 != nil { - return 0, err27 + n28, err28 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) + if err28 != nil { + return 0, err28 } - i -= n27 - i = encodeVarintTypes(dAtA, i, uint64(n27)) + i -= n28 + i = encodeVarintTypes(dAtA, i, uint64(n28)) i-- dAtA[i] = 0x1a if m.Height != 0 { @@ -6080,12 +6296,12 @@ func (m *RequestFinalizeBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x3a } - n28, err28 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) - if err28 != nil { - return 0, err28 + n29, err29 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) + if err29 != nil { + return 0, err29 } - i -= n28 - i = encodeVarintTypes(dAtA, i, uint64(n28)) + i -= n29 + i = encodeVarintTypes(dAtA, i, uint64(n29)) i-- dAtA[i] = 0x32 if m.Height != 0 { @@ -6208,6 +6424,36 @@ func (m *RequestPrepareOracleVotes) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } +func (m *RequestValidateOracleVotes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RequestValidateOracleVotes) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RequestValidateOracleVotes) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.OracleTx) > 0 { + i -= len(m.OracleTx) + copy(dAtA[i:], m.OracleTx) + i = encodeVarintTypes(dAtA, i, uint64(len(m.OracleTx))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *Response) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6655,6 +6901,29 @@ func (m *Response_PrepareOracleVotes) MarshalToSizedBuffer(dAtA []byte) (int, er } return len(dAtA) - i, nil } +func (m *Response_ValidateOracleVotes) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Response_ValidateOracleVotes) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.ValidateOracleVotes != nil { + { + size, err := m.ValidateOracleVotes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 + } + return len(dAtA) - i, nil +} func (m *ResponseException) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -7166,20 +7435,20 @@ func (m *ResponseApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, err } } if len(m.RefetchChunks) > 0 { - dAtA52 := make([]byte, len(m.RefetchChunks)*10) - var j51 int + dAtA54 := make([]byte, len(m.RefetchChunks)*10) + var j53 int for _, num := range m.RefetchChunks { for num >= 1<<7 { - dAtA52[j51] = uint8(uint64(num)&0x7f | 0x80) + dAtA54[j53] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j51++ + j53++ } - dAtA52[j51] = uint8(num) - j51++ + dAtA54[j53] = uint8(num) + j53++ } - i -= j51 - copy(dAtA[i:], dAtA52[:j51]) - i = encodeVarintTypes(dAtA, i, uint64(j51)) + i -= j53 + copy(dAtA[i:], dAtA54[:j53]) + i = encodeVarintTypes(dAtA, i, uint64(j53)) i-- dAtA[i] = 0x12 } @@ -7502,6 +7771,41 @@ func (m *ResponsePrepareOracleVotes) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *ResponseValidateOracleVotes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResponseValidateOracleVotes) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResponseValidateOracleVotes) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Status != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x10 + } + if len(m.EncodedOracleTx) > 0 { + i -= len(m.EncodedOracleTx) + copy(dAtA[i:], m.EncodedOracleTx) + i = encodeVarintTypes(dAtA, i, uint64(len(m.EncodedOracleTx))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *CommitInfo) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -7995,12 +8299,12 @@ func (m *Misbehavior) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x28 } - n58, err58 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) - if err58 != nil { - return 0, err58 + n60, err60 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) + if err60 != nil { + return 0, err60 } - i -= n58 - i = encodeVarintTypes(dAtA, i, uint64(n58)) + i -= n60 + i = encodeVarintTypes(dAtA, i, uint64(n60)) i-- dAtA[i] = 0x22 if m.Height != 0 { @@ -8317,6 +8621,18 @@ func (m *Request_PrepareOracleVotes) Size() (n int) { } return n } +func (m *Request_ValidateOracleVotes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ValidateOracleVotes != nil { + l = m.ValidateOracleVotes.Size() + n += 2 + l + sovTypes(uint64(l)) + } + return n +} func (m *RequestEcho) Size() (n int) { if m == nil { return 0 @@ -8720,6 +9036,19 @@ func (m *RequestPrepareOracleVotes) Size() (n int) { return n } +func (m *RequestValidateOracleVotes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.OracleTx) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + return n +} + func (m *Response) Size() (n int) { if m == nil { return 0 @@ -8942,20 +9271,32 @@ func (m *Response_SignGossipVote) Size() (n int) { } var l int _ = l - if m.SignGossipVote != nil { - l = m.SignGossipVote.Size() + if m.SignGossipVote != nil { + l = m.SignGossipVote.Size() + n += 2 + l + sovTypes(uint64(l)) + } + return n +} +func (m *Response_PrepareOracleVotes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PrepareOracleVotes != nil { + l = m.PrepareOracleVotes.Size() n += 2 + l + sovTypes(uint64(l)) } return n } -func (m *Response_PrepareOracleVotes) Size() (n int) { +func (m *Response_ValidateOracleVotes) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.PrepareOracleVotes != nil { - l = m.PrepareOracleVotes.Size() + if m.ValidateOracleVotes != nil { + l = m.ValidateOracleVotes.Size() n += 2 + l + sovTypes(uint64(l)) } return n @@ -9339,6 +9680,22 @@ func (m *ResponsePrepareOracleVotes) Size() (n int) { return n } +func (m *ResponseValidateOracleVotes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.EncodedOracleTx) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.Status != 0 { + n += 1 + sovTypes(uint64(m.Status)) + } + return n +} + func (m *CommitInfo) Size() (n int) { if m == nil { return 0 @@ -10254,6 +10611,41 @@ func (m *Request) Unmarshal(dAtA []byte) error { } m.Value = &Request_PrepareOracleVotes{v} iNdEx = postIndex + case 23: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidateOracleVotes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &RequestValidateOracleVotes{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Value = &Request_ValidateOracleVotes{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -13072,6 +13464,90 @@ func (m *RequestPrepareOracleVotes) Unmarshal(dAtA []byte) error { } return nil } +func (m *RequestValidateOracleVotes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RequestValidateOracleVotes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RequestValidateOracleVotes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OracleTx", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OracleTx = append(m.OracleTx[:0], dAtA[iNdEx:postIndex]...) + if m.OracleTx == nil { + m.OracleTx = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Response) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -13766,6 +14242,41 @@ func (m *Response) Unmarshal(dAtA []byte) error { } m.Value = &Response_PrepareOracleVotes{v} iNdEx = postIndex + case 24: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidateOracleVotes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &ResponseValidateOracleVotes{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Value = &Response_ValidateOracleVotes{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -16229,6 +16740,109 @@ func (m *ResponsePrepareOracleVotes) Unmarshal(dAtA []byte) error { } return nil } +func (m *ResponseValidateOracleVotes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResponseValidateOracleVotes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResponseValidateOracleVotes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EncodedOracleTx", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EncodedOracleTx = append(m.EncodedOracleTx[:0], dAtA[iNdEx:postIndex]...) + if m.EncodedOracleTx == nil { + m.EncodedOracleTx = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= ResponseValidateOracleVotes_Status(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *CommitInfo) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/proto/buf.yaml b/proto/buf.yaml index 976755ad445..4e1d99fa43a 100644 --- a/proto/buf.yaml +++ b/proto/buf.yaml @@ -1,7 +1,6 @@ version: v1 name: buf.build/Switcheo/cometbft deps: - - buf.build/cosmos/cosmos-sdk - buf.build/cosmos/cosmos-proto - buf.build/cosmos/gogo-proto - buf.build/googleapis/googleapis diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index 59f6ceb6965..5d5205ffdcf 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -37,6 +37,7 @@ service ABCI { rpc FinalizeBlock(RequestFinalizeBlock) returns (ResponseFinalizeBlock); rpc SignGossipVote(RequestSignGossipVote) returns (ResponseSignGossipVote); rpc PrepareOracleVotes(RequestPrepareOracleVotes) returns (ResponsePrepareOracleVotes); + rpc ValidateOracleVotes(RequestValidateOracleVotes) returns (ResponseValidateOracleVotes); } //---------------------------------------- @@ -61,7 +62,8 @@ message Request { RequestVerifyVoteExtension verify_vote_extension = 19; RequestFinalizeBlock finalize_block = 20; RequestSignGossipVote sign_gossip_vote = 21; - RequestPrepareOracleVotes prepare_oracle_votes = 22; + RequestPrepareOracleVotes prepare_oracle_votes = 22; + RequestValidateOracleVotes validate_oracle_votes = 23; } reserved 4, 7, 9, 10; // SetOption, BeginBlock, DeliverTx, EndBlock } @@ -206,6 +208,10 @@ message RequestSignGossipVote { message RequestPrepareOracleVotes {} +message RequestValidateOracleVotes { + bytes oracle_tx = 1; +} + //---------------------------------------- // Response types @@ -229,7 +235,8 @@ message Response { ResponseVerifyVoteExtension verify_vote_extension = 20; ResponseFinalizeBlock finalize_block = 21; ResponseSignGossipVote sign_gossip_vote = 22; - ResponsePrepareOracleVotes prepare_oracle_votes = 23; + ResponsePrepareOracleVotes prepare_oracle_votes = 23; + ResponseValidateOracleVotes validate_oracle_votes = 24; } reserved 5, 8, 10, 11; // SetOption, BeginBlock, DeliverTx, EndBlock } @@ -394,6 +401,16 @@ message ResponsePrepareOracleVotes { repeated Vote votes = 1 [(gogoproto.nullable) = false]; } +message ResponseValidateOracleVotes { + bytes encoded_oracle_tx = 1; + Status status = 2; + + enum Status { + present = 0; + absent = 1; + } +} + //---------------------------------------- // Misc. diff --git a/proto/tendermint/oracle/tx.proto b/proto/tendermint/oracle/tx.proto deleted file mode 100644 index c2153ff88f5..00000000000 --- a/proto/tendermint/oracle/tx.proto +++ /dev/null @@ -1,25 +0,0 @@ -syntax = "proto3"; -package tendermint.oracle; -import "google/protobuf/wrappers.proto"; -import "gogoproto/gogo.proto"; -import "cosmos/msg/v1/msg.proto"; -import "cosmos_proto/cosmos.proto"; -import "tendermint/oracle/types.proto"; -// this line is used by starport scaffolding # proto/tx/import - -option go_package = "github.com/cometbft/cometbft/proto/tendermint/oracle"; -option (gogoproto.goproto_getters_all) = false; - -// Msg defines the Msg service. -service Msg { - option (cosmos.msg.v1.service) = true; - rpc GossipVotes(MsgGossipVotes) returns (MsgGossipVotesResponse); -} - -message MsgGossipVotes { - option (cosmos.msg.v1.signer) = "proposer"; - string proposer = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; - repeated GossipVote GossipVotes = 2; -} - -message MsgGossipVotesResponse {} diff --git a/proxy/app_conn.go b/proxy/app_conn.go index 4b94a1b8f46..1a46247ccc2 100644 --- a/proxy/app_conn.go +++ b/proxy/app_conn.go @@ -26,6 +26,7 @@ type AppConnConsensus interface { Commit(context.Context) (*types.ResponseCommit, error) SignGossipVote(context.Context, *types.RequestSignGossipVote) (*types.ResponseSignGossipVote, error) PrepareOracleVotes(context.Context, *types.RequestPrepareOracleVotes) (*types.ResponsePrepareOracleVotes, error) + ValidateOracleVotes(context.Context, *types.RequestValidateOracleVotes) (*types.ResponseValidateOracleVotes, error) } type AppConnMempool interface { @@ -121,6 +122,11 @@ func (app *appConnConsensus) PrepareOracleVotes(ctx context.Context, req *types. return app.appConn.PrepareOracleVotes(ctx, req) } +func (app *appConnConsensus) ValidateOracleVotes(ctx context.Context, req *types.RequestValidateOracleVotes) (*types.ResponseValidateOracleVotes, error) { + defer addTimeSample(app.metrics.MethodTimingSeconds.With("method", "commit", "type", "sync"))() + return app.appConn.ValidateOracleVotes(ctx, req) +} + //------------------------------------------------ // Implements AppConnMempool (subset of abcicli.Client) diff --git a/proxy/mocks/app_conn_consensus.go b/proxy/mocks/app_conn_consensus.go index 006412f74b4..28e114d6357 100644 --- a/proxy/mocks/app_conn_consensus.go +++ b/proxy/mocks/app_conn_consensus.go @@ -237,6 +237,32 @@ func (_m *AppConnConsensus) SignGossipVote(_a0 context.Context, _a1 *types.Reque return r0, r1 } +// ValidateOracleVotes provides a mock function with given fields: _a0, _a1 +func (_m *AppConnConsensus) ValidateOracleVotes(_a0 context.Context, _a1 *types.RequestValidateOracleVotes) (*types.ResponseValidateOracleVotes, error) { + ret := _m.Called(_a0, _a1) + + var r0 *types.ResponseValidateOracleVotes + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *types.RequestValidateOracleVotes) (*types.ResponseValidateOracleVotes, error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *types.RequestValidateOracleVotes) *types.ResponseValidateOracleVotes); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*types.ResponseValidateOracleVotes) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *types.RequestValidateOracleVotes) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // VerifyVoteExtension provides a mock function with given fields: _a0, _a1 func (_m *AppConnConsensus) VerifyVoteExtension(_a0 context.Context, _a1 *types.RequestVerifyVoteExtension) (*types.ResponseVerifyVoteExtension, error) { ret := _m.Called(_a0, _a1) diff --git a/state/execution.go b/state/execution.go index b61acfbc4e5..900ff355678 100644 --- a/state/execution.go +++ b/state/execution.go @@ -272,20 +272,17 @@ func (blockExec *BlockExecutor) ProcessProposal( ) (bool, error) { txs := block.Data.Txs.ToSliceOfBytes() if len(txs) > 0 { - oracleTx := &oracleproto.GossipVotes{} - // check if oracleTx is successfully injected into first position of txs - if err := oracleTx.Unmarshal(txs[0]); err != nil { + res, err := blockExec.proxyApp.ValidateOracleVotes(context.Background(), &abci.RequestValidateOracleVotes{OracleTx: txs[0]}) + + if err != nil && res.Status == abci.ResponseValidateOracleVotes_absent { // oracleTx is not present, continue normal processProposal flow blockExec.logger.Error("error unmarshalling oracleVotesMsg or oracleVotesMsg not present", "err", err) - } else { - newTxBz, err := blockExec.validateOracleGossipVotes(oracleTx, block.Header.Height) - if err != nil { - // oracleTx is present but it is invalid, remove from txs - txs = txs[1:] - } else { - // oracleTx is present and valid, update txBz as some of the gossipVotes might have been removed due to invalid sig - txs[0] = newTxBz - } + } else if err != nil && res.Status == abci.ResponseValidateOracleVotes_present { + // oracleTx is present but it is invalid, remove from txs + txs = txs[1:] + } else if err != nil { + // oracleTx is present and valid, update txBz as some of the gossipVotes might have been removed due to invalid sig + txs[0] = res.EncodedOracleTx } }