From 4a9247c120a755503751a0da0cd4f60fcbffd215 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 13 Aug 2020 13:09:23 +0200 Subject: [PATCH 01/32] version docs --- docs/.vuepress/config.js | 126 ++++++++++++++++++++++----------------- docs/versions | 2 + 2 files changed, 73 insertions(+), 55 deletions(-) diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 10acbdd28f..f158dfa5a3 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -1,6 +1,6 @@ module.exports = { - theme: "cosmos", - title: "Tendermint Core", + theme: 'cosmos', + title: 'Tendermint Core', // locales: { // "/": { // lang: "en-US" @@ -11,11 +11,11 @@ module.exports = { // }, base: process.env.VUEPRESS_BASE, themeConfig: { - repo: "tendermint/tendermint", - docsRepo: "tendermint/tendermint", - docsDir: "docs", + repo: 'tendermint/tendermint', + docsRepo: 'tendermint/tendermint', + docsDir: 'docs', editLinks: true, - label: "core", + label: 'core', topbar: { banner: false, }, @@ -23,15 +23,31 @@ module.exports = { auto: true, nav: [ { - title: "Resources", + title: 'Resources', children: [ { - title: "Developer Sessions", - path: "/DEV_SESSIONS.html" + title: 'Developer Sessions', + path: '/DEV_SESSIONS.html' }, { - title: "RPC", - path: "https://docs.tendermint.com/master/rpc/", + title: 'RPC', + path: 'https://docs.tendermint.com/master/rpc/', + static: true + }, + // TODO: remove once https://github.com/cosmos/vuepress-theme-cosmos/issues/91 is closed + { + title: 'v0.32', + path: '/v0.32/', + static: true + }, + { + title: 'v0.33', + path: '/v0.33/', + static: true + }, + { + title: 'Master', + path: '/master/', static: true } ] @@ -39,98 +55,98 @@ module.exports = { ] }, gutter: { - title: "Help & Support", + title: 'Help & Support', editLink: true, forum: { - title: "Tendermint Forum", - text: "Join the Tendermint forum to learn more", - url: "https://forum.cosmos.network/c/tendermint", - bg: "#0B7E0B", - logo: "tendermint" + title: 'Tendermint Forum', + text: 'Join the Tendermint forum to learn more', + url: 'https://forum.cosmos.network/c/tendermint', + bg: '#0B7E0B', + logo: 'tendermint' }, github: { - title: "Found an Issue?", - text: "Help us improve this page by suggesting edits on GitHub." + title: 'Found an Issue?', + text: 'Help us improve this page by suggesting edits on GitHub.' } }, footer: { question: { - text: "Chat with Tendermint developers in Discord or reach out on the Tendermint Forum to learn more." + text: 'Chat with Tendermint developers in Discord or reach out on the Tendermint Forum to learn more.' }, - logo: "/logo-bw.svg", + logo: '/logo-bw.svg', textLink: { - text: "tendermint.com", - url: "https://tendermint.com" + text: 'tendermint.com', + url: 'https://tendermint.com' }, services: [ { - service: "medium", - url: "https://medium.com/@tendermint" + service: 'medium', + url: 'https://medium.com/@tendermint' }, { - service: "twitter", - url: "https://twitter.com/tendermint_team" + service: 'twitter', + url: 'https://twitter.com/tendermint_team' }, { - service: "linkedin", - url: "https://www.linkedin.com/company/tendermint/" + service: 'linkedin', + url: 'https://www.linkedin.com/company/tendermint/' }, { - service: "reddit", - url: "https://reddit.com/r/cosmosnetwork" + service: 'reddit', + url: 'https://reddit.com/r/cosmosnetwork' }, { - service: "telegram", - url: "https://t.me/cosmosproject" + service: 'telegram', + url: 'https://t.me/cosmosproject' }, { - service: "youtube", - url: "https://www.youtube.com/c/CosmosProject" + service: 'youtube', + url: 'https://www.youtube.com/c/CosmosProject' } ], smallprint: - "The development of the Tendermint project is led primarily by Tendermint Inc., the for-profit entity which also maintains this website. Funding for this development comes primarily from the Interchain Foundation, a Swiss non-profit.", + 'The development of the Tendermint project is led primarily by Tendermint Inc., the for-profit entity which also maintains this website. Funding for this development comes primarily from the Interchain Foundation, a Swiss non-profit.', links: [ { - title: "Documentation", + title: 'Documentation', children: [ { - title: "Cosmos SDK", - url: "https://docs.cosmos.network" + title: 'Cosmos SDK', + url: 'https://docs.cosmos.network' }, { - title: "Cosmos Hub", - url: "https://hub.cosmos.network" + title: 'Cosmos Hub', + url: 'https://hub.cosmos.network' } ] }, { - title: "Community", + title: 'Community', children: [ { - title: "Tendermint blog", - url: "https://medium.com/@tendermint" + title: 'Tendermint blog', + url: 'https://medium.com/@tendermint' }, { - title: "Forum", - url: "https://forum.cosmos.network/c/tendermint" + title: 'Forum', + url: 'https://forum.cosmos.network/c/tendermint' } ] }, { - title: "Contributing", + title: 'Contributing', children: [ { - title: "Contributing to the docs", - url: "https://github.com/tendermint/tendermint" + title: 'Contributing to the docs', + url: 'https://github.com/tendermint/tendermint' }, { - title: "Source code on GitHub", - url: "https://github.com/tendermint/tendermint" + title: 'Source code on GitHub', + url: 'https://github.com/tendermint/tendermint' }, { - title: "Careers at Tendermint", - url: "https://tendermint.com/careers" + title: 'Careers at Tendermint', + url: 'https://tendermint.com/careers' } ] } @@ -139,9 +155,9 @@ module.exports = { }, plugins: [ [ - "@vuepress/google-analytics", + '@vuepress/google-analytics', { - ga: "UA-51029217-11" + ga: 'UA-51029217-11' } ] ], diff --git a/docs/versions b/docs/versions index 1f7391f92b..58dfb7e208 100644 --- a/docs/versions +++ b/docs/versions @@ -1 +1,3 @@ master +v0.33 +v0.32 From a46562d674ed7343a84887a7c20d7f7bf0dd78e3 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 13 Aug 2020 13:14:58 +0200 Subject: [PATCH 02/32] stash commits --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index fe43c9c534..62020f951a 100644 --- a/Makefile +++ b/Makefile @@ -170,6 +170,7 @@ build-docs: cd docs && \ while read p; do \ (git checkout $${p} && npm install && VUEPRESS_BASE="/$${p}/" npm run build) ; \ + git stash ; \ mkdir -p ~/output/$${p} ; \ cp -r .vuepress/dist/* ~/output/$${p}/ ; \ cp ~/output/$${p}/index.html ~/output ; \ From 99cf9c053157d0494a141f9021ba34cede0b35e0 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 13 Aug 2020 14:07:39 +0200 Subject: [PATCH 03/32] fix url --- docs/.vuepress/config.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index f158dfa5a3..80e86a178f 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -37,17 +37,17 @@ module.exports = { // TODO: remove once https://github.com/cosmos/vuepress-theme-cosmos/issues/91 is closed { title: 'v0.32', - path: '/v0.32/', + path: '/v0.32', static: true }, { title: 'v0.33', - path: '/v0.33/', + path: '/v0.33', static: true }, { title: 'Master', - path: '/master/', + path: '/master', static: true } ] From c51a1f51b5961e729975f5867965b773e39d10f9 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 13 Aug 2020 15:10:07 +0200 Subject: [PATCH 04/32] remove master from sidebar --- docs/.vuepress/config.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 80e86a178f..d09787489b 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -36,20 +36,15 @@ module.exports = { }, // TODO: remove once https://github.com/cosmos/vuepress-theme-cosmos/issues/91 is closed { - title: 'v0.32', + title: 'Version 0.32', path: '/v0.32', static: true }, { - title: 'v0.33', + title: 'Version 0.33', path: '/v0.33', static: true }, - { - title: 'Master', - path: '/master', - static: true - } ] } ] From 296d8540d44dd8326725d4b6bafcf8571f2c9f96 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Tue, 18 Aug 2020 17:54:42 +0200 Subject: [PATCH 05/32] test go version --- .github/workflows/tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1cee57e59d..0a9cd01896 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -32,6 +32,7 @@ jobs: .sum SET_ENV_NAME_INSERTIONS: 1 SET_ENV_NAME_LINES: 1 + - run: go version - name: Set GOBIN run: | echo "::add-path::$(go env GOPATH)/bin" From 25de71a893e6907c185d3e046a531c30d17d1ac5 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Tue, 18 Aug 2020 17:56:04 +0200 Subject: [PATCH 06/32] remove go version --- .github/workflows/tests.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0a9cd01896..1cee57e59d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -32,7 +32,6 @@ jobs: .sum SET_ENV_NAME_INSERTIONS: 1 SET_ENV_NAME_LINES: 1 - - run: go version - name: Set GOBIN run: | echo "::add-path::$(go env GOPATH)/bin" From 0cdebf6c2a9e555f5758be19463577ebfc28970d Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 20 Aug 2020 12:51:48 +0200 Subject: [PATCH 07/32] invert versions --- docs/versions | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/versions b/docs/versions index 58dfb7e208..1e6a129281 100644 --- a/docs/versions +++ b/docs/versions @@ -1,3 +1,3 @@ -master -v0.33 v0.32 +v0.33 +master From 1afe9db0f54e26e13438469acac7ed53f1dcd8f0 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 21 Aug 2020 15:03:08 +0200 Subject: [PATCH 08/32] add todo --- state/execution.go | 1 + 1 file changed, 1 insertion(+) diff --git a/state/execution.go b/state/execution.go index 2b93f83466..cf601aabc9 100644 --- a/state/execution.go +++ b/state/execution.go @@ -107,6 +107,7 @@ func (blockExec *BlockExecutor) CreateProposalBlock( // Fetch a limited amount of valid txs maxDataBytes := types.MaxDataBytes(maxBytes, state.Validators.Size(), len(evidence)) txs := blockExec.mempool.ReapMaxBytesMaxGas(maxDataBytes, maxGas) + // processedBlockTxs = PreProcess(txs) //TODO: create preprocess func return state.MakeBlock(height, txs, commit, evidence, proposerAddr) } From b1182044dc813b4609c33afe4d2508cc85201107 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 21 Aug 2020 15:49:07 +0200 Subject: [PATCH 09/32] init --- abci/types/application.go | 13 + abci/types/types.pb.go | 960 +++++++++++++++++++++++------- proto/tendermint/abci/types.proto | 24 +- 3 files changed, 772 insertions(+), 225 deletions(-) diff --git a/abci/types/application.go b/abci/types/application.go index 65cc78b8cd..de94890f99 100644 --- a/abci/types/application.go +++ b/abci/types/application.go @@ -29,6 +29,9 @@ type Application interface { OfferSnapshot(RequestOfferSnapshot) ResponseOfferSnapshot // Offer a snapshot to the application LoadSnapshotChunk(RequestLoadSnapshotChunk) ResponseLoadSnapshotChunk // Load a snapshot chunk ApplySnapshotChunk(RequestApplySnapshotChunk) ResponseApplySnapshotChunk // Apply a shapshot chunk + + // PreProcess Txs + PreprocessTxs(RequestPreprocessTxs) ResponsePreprocessTxs // State machine preprocessing of txs } //------------------------------------------------------- @@ -95,6 +98,10 @@ func (BaseApplication) ApplySnapshotChunk(req RequestApplySnapshotChunk) Respons return ResponseApplySnapshotChunk{} } +func (BaseApplication) PreprocessTxs(req RequestPreprocessTxs) ResponsePreprocessTxs { + return ResponsePreprocessTxs{} +} + //------------------------------------------------------- // GRPCApplication is a GRPC wrapper for Application @@ -182,3 +189,9 @@ func (app *GRPCApplication) ApplySnapshotChunk( res := app.app.ApplySnapshotChunk(*req) return &res, nil } + +func (app *GRPCApplication) PreprocessTxs( + ctx context.Context, req *RequestPreprocessTxs) (*ResponsePreprocessTxs, error) { + res := app.app.PreprocessTxs(*req) + return &res, nil +} diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index 1ccc05a337..a17db950db 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -92,7 +92,7 @@ func (x ResponseOfferSnapshot_Result) String() string { } func (ResponseOfferSnapshot_Result) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{30, 0} + return fileDescriptor_252557cfdd89a31a, []int{31, 0} } type ResponseApplySnapshotChunk_Result int32 @@ -129,7 +129,7 @@ func (x ResponseApplySnapshotChunk_Result) String() string { } func (ResponseApplySnapshotChunk_Result) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{32, 0} + return fileDescriptor_252557cfdd89a31a, []int{33, 0} } type Request struct { @@ -149,6 +149,7 @@ type Request struct { // *Request_OfferSnapshot // *Request_LoadSnapshotChunk // *Request_ApplySnapshotChunk + // *Request_PreprocessTxs Value isRequest_Value `protobuf_oneof:"value"` } @@ -236,6 +237,9 @@ type Request_LoadSnapshotChunk struct { type Request_ApplySnapshotChunk struct { ApplySnapshotChunk *RequestApplySnapshotChunk `protobuf:"bytes,15,opt,name=apply_snapshot_chunk,json=applySnapshotChunk,proto3,oneof" json:"apply_snapshot_chunk,omitempty"` } +type Request_PreprocessTxs struct { + PreprocessTxs *RequestPreprocessTxs `protobuf:"bytes,17,opt,name=preprocess_txs,json=preprocessTxs,proto3,oneof" json:"preprocess_txs,omitempty"` +} func (*Request_Echo) isRequest_Value() {} func (*Request_Flush) isRequest_Value() {} @@ -252,6 +256,7 @@ func (*Request_ListSnapshots) isRequest_Value() {} func (*Request_OfferSnapshot) isRequest_Value() {} func (*Request_LoadSnapshotChunk) isRequest_Value() {} func (*Request_ApplySnapshotChunk) isRequest_Value() {} +func (*Request_PreprocessTxs) isRequest_Value() {} func (m *Request) GetValue() isRequest_Value { if m != nil { @@ -365,6 +370,13 @@ func (m *Request) GetApplySnapshotChunk() *RequestApplySnapshotChunk { return nil } +func (m *Request) GetPreprocessTxs() *RequestPreprocessTxs { + if x, ok := m.GetValue().(*Request_PreprocessTxs); ok { + return x.PreprocessTxs + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*Request) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -383,6 +395,7 @@ func (*Request) XXX_OneofWrappers() []interface{} { (*Request_OfferSnapshot)(nil), (*Request_LoadSnapshotChunk)(nil), (*Request_ApplySnapshotChunk)(nil), + (*Request_PreprocessTxs)(nil), } } @@ -1187,6 +1200,50 @@ func (m *RequestApplySnapshotChunk) GetSender() string { return "" } +type RequestPreprocessTxs struct { + Txs [][]byte `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"` +} + +func (m *RequestPreprocessTxs) Reset() { *m = RequestPreprocessTxs{} } +func (m *RequestPreprocessTxs) String() string { return proto.CompactTextString(m) } +func (*RequestPreprocessTxs) ProtoMessage() {} +func (*RequestPreprocessTxs) Descriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{16} +} +func (m *RequestPreprocessTxs) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RequestPreprocessTxs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RequestPreprocessTxs.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 *RequestPreprocessTxs) XXX_Merge(src proto.Message) { + xxx_messageInfo_RequestPreprocessTxs.Merge(m, src) +} +func (m *RequestPreprocessTxs) XXX_Size() int { + return m.Size() +} +func (m *RequestPreprocessTxs) XXX_DiscardUnknown() { + xxx_messageInfo_RequestPreprocessTxs.DiscardUnknown(m) +} + +var xxx_messageInfo_RequestPreprocessTxs proto.InternalMessageInfo + +func (m *RequestPreprocessTxs) GetTxs() [][]byte { + if m != nil { + return m.Txs + } + return nil +} + type Response struct { // Types that are valid to be assigned to Value: // *Response_Exception @@ -1205,6 +1262,7 @@ type Response struct { // *Response_OfferSnapshot // *Response_LoadSnapshotChunk // *Response_ApplySnapshotChunk + // *Response_PreprocessTxs Value isResponse_Value `protobuf_oneof:"value"` } @@ -1212,7 +1270,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{16} + return fileDescriptor_252557cfdd89a31a, []int{17} } func (m *Response) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1295,6 +1353,9 @@ type Response_LoadSnapshotChunk struct { type Response_ApplySnapshotChunk struct { ApplySnapshotChunk *ResponseApplySnapshotChunk `protobuf:"bytes,16,opt,name=apply_snapshot_chunk,json=applySnapshotChunk,proto3,oneof" json:"apply_snapshot_chunk,omitempty"` } +type Response_PreprocessTxs struct { + PreprocessTxs *ResponsePreprocessTxs `protobuf:"bytes,17,opt,name=preprocess_txs,json=preprocessTxs,proto3,oneof" json:"preprocess_txs,omitempty"` +} func (*Response_Exception) isResponse_Value() {} func (*Response_Echo) isResponse_Value() {} @@ -1312,6 +1373,7 @@ func (*Response_ListSnapshots) isResponse_Value() {} func (*Response_OfferSnapshot) isResponse_Value() {} func (*Response_LoadSnapshotChunk) isResponse_Value() {} func (*Response_ApplySnapshotChunk) isResponse_Value() {} +func (*Response_PreprocessTxs) isResponse_Value() {} func (m *Response) GetValue() isResponse_Value { if m != nil { @@ -1432,6 +1494,13 @@ func (m *Response) GetApplySnapshotChunk() *ResponseApplySnapshotChunk { return nil } +func (m *Response) GetPreprocessTxs() *ResponsePreprocessTxs { + if x, ok := m.GetValue().(*Response_PreprocessTxs); ok { + return x.PreprocessTxs + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*Response) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -1451,6 +1520,7 @@ func (*Response) XXX_OneofWrappers() []interface{} { (*Response_OfferSnapshot)(nil), (*Response_LoadSnapshotChunk)(nil), (*Response_ApplySnapshotChunk)(nil), + (*Response_PreprocessTxs)(nil), } } @@ -1463,7 +1533,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{17} + return fileDescriptor_252557cfdd89a31a, []int{18} } func (m *ResponseException) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1507,7 +1577,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{18} + return fileDescriptor_252557cfdd89a31a, []int{19} } func (m *ResponseEcho) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1550,7 +1620,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{19} + return fileDescriptor_252557cfdd89a31a, []int{20} } func (m *ResponseFlush) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1591,7 +1661,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{20} + return fileDescriptor_252557cfdd89a31a, []int{21} } func (m *ResponseInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1667,7 +1737,7 @@ func (m *ResponseSetOption) Reset() { *m = ResponseSetOption{} } func (m *ResponseSetOption) String() string { return proto.CompactTextString(m) } func (*ResponseSetOption) ProtoMessage() {} func (*ResponseSetOption) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{21} + return fileDescriptor_252557cfdd89a31a, []int{22} } func (m *ResponseSetOption) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1727,7 +1797,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{22} + return fileDescriptor_252557cfdd89a31a, []int{23} } func (m *ResponseInitChain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1794,7 +1864,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{23} + return fileDescriptor_252557cfdd89a31a, []int{24} } func (m *ResponseQuery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1894,7 +1964,7 @@ func (m *ResponseBeginBlock) Reset() { *m = ResponseBeginBlock{} } func (m *ResponseBeginBlock) String() string { return proto.CompactTextString(m) } func (*ResponseBeginBlock) ProtoMessage() {} func (*ResponseBeginBlock) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{24} + return fileDescriptor_252557cfdd89a31a, []int{25} } func (m *ResponseBeginBlock) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1945,7 +2015,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{25} + return fileDescriptor_252557cfdd89a31a, []int{26} } func (m *ResponseCheckTx) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2045,7 +2115,7 @@ func (m *ResponseDeliverTx) Reset() { *m = ResponseDeliverTx{} } func (m *ResponseDeliverTx) String() string { return proto.CompactTextString(m) } func (*ResponseDeliverTx) ProtoMessage() {} func (*ResponseDeliverTx) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{26} + return fileDescriptor_252557cfdd89a31a, []int{27} } func (m *ResponseDeliverTx) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2140,7 +2210,7 @@ func (m *ResponseEndBlock) Reset() { *m = ResponseEndBlock{} } func (m *ResponseEndBlock) String() string { return proto.CompactTextString(m) } func (*ResponseEndBlock) ProtoMessage() {} func (*ResponseEndBlock) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{27} + return fileDescriptor_252557cfdd89a31a, []int{28} } func (m *ResponseEndBlock) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2200,7 +2270,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{28} + return fileDescriptor_252557cfdd89a31a, []int{29} } func (m *ResponseCommit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2251,7 +2321,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{29} + return fileDescriptor_252557cfdd89a31a, []int{30} } func (m *ResponseListSnapshots) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2295,7 +2365,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{30} + return fileDescriptor_252557cfdd89a31a, []int{31} } func (m *ResponseOfferSnapshot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2339,7 +2409,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{31} + return fileDescriptor_252557cfdd89a31a, []int{32} } func (m *ResponseLoadSnapshotChunk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2385,7 +2455,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{32} + return fileDescriptor_252557cfdd89a31a, []int{33} } func (m *ResponseApplySnapshotChunk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2435,6 +2505,50 @@ func (m *ResponseApplySnapshotChunk) GetRejectSenders() []string { return nil } +type ResponsePreprocessTxs struct { + Txs [][]byte `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"` +} + +func (m *ResponsePreprocessTxs) Reset() { *m = ResponsePreprocessTxs{} } +func (m *ResponsePreprocessTxs) String() string { return proto.CompactTextString(m) } +func (*ResponsePreprocessTxs) ProtoMessage() {} +func (*ResponsePreprocessTxs) Descriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{34} +} +func (m *ResponsePreprocessTxs) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResponsePreprocessTxs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ResponsePreprocessTxs.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 *ResponsePreprocessTxs) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponsePreprocessTxs.Merge(m, src) +} +func (m *ResponsePreprocessTxs) XXX_Size() int { + return m.Size() +} +func (m *ResponsePreprocessTxs) XXX_DiscardUnknown() { + xxx_messageInfo_ResponsePreprocessTxs.DiscardUnknown(m) +} + +var xxx_messageInfo_ResponsePreprocessTxs proto.InternalMessageInfo + +func (m *ResponsePreprocessTxs) GetTxs() [][]byte { + if m != nil { + return m.Txs + } + return nil +} + // ConsensusParams contains all consensus-relevant parameters // that can be adjusted by the abci app type ConsensusParams struct { @@ -2448,7 +2562,7 @@ func (m *ConsensusParams) Reset() { *m = ConsensusParams{} } func (m *ConsensusParams) String() string { return proto.CompactTextString(m) } func (*ConsensusParams) ProtoMessage() {} func (*ConsensusParams) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{33} + return fileDescriptor_252557cfdd89a31a, []int{35} } func (m *ConsensusParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2517,7 +2631,7 @@ func (m *BlockParams) Reset() { *m = BlockParams{} } func (m *BlockParams) String() string { return proto.CompactTextString(m) } func (*BlockParams) ProtoMessage() {} func (*BlockParams) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{34} + return fileDescriptor_252557cfdd89a31a, []int{36} } func (m *BlockParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2569,7 +2683,7 @@ func (m *LastCommitInfo) Reset() { *m = LastCommitInfo{} } func (m *LastCommitInfo) String() string { return proto.CompactTextString(m) } func (*LastCommitInfo) ProtoMessage() {} func (*LastCommitInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{35} + return fileDescriptor_252557cfdd89a31a, []int{37} } func (m *LastCommitInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2624,7 +2738,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{36} + return fileDescriptor_252557cfdd89a31a, []int{38} } func (m *Event) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2678,7 +2792,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{37} + return fileDescriptor_252557cfdd89a31a, []int{39} } func (m *EventAttribute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2742,7 +2856,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{38} + return fileDescriptor_252557cfdd89a31a, []int{40} } func (m *TxResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2810,7 +2924,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{39} + return fileDescriptor_252557cfdd89a31a, []int{41} } func (m *Validator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2863,7 +2977,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{40} + return fileDescriptor_252557cfdd89a31a, []int{42} } func (m *ValidatorUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2916,7 +3030,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{41} + return fileDescriptor_252557cfdd89a31a, []int{43} } func (m *VoteInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2977,7 +3091,7 @@ func (m *Evidence) Reset() { *m = Evidence{} } func (m *Evidence) String() string { return proto.CompactTextString(m) } func (*Evidence) ProtoMessage() {} func (*Evidence) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{42} + return fileDescriptor_252557cfdd89a31a, []int{44} } func (m *Evidence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3053,7 +3167,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{43} + return fileDescriptor_252557cfdd89a31a, []int{45} } func (m *Snapshot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3137,6 +3251,7 @@ func init() { proto.RegisterType((*RequestOfferSnapshot)(nil), "tendermint.abci.RequestOfferSnapshot") proto.RegisterType((*RequestLoadSnapshotChunk)(nil), "tendermint.abci.RequestLoadSnapshotChunk") proto.RegisterType((*RequestApplySnapshotChunk)(nil), "tendermint.abci.RequestApplySnapshotChunk") + proto.RegisterType((*RequestPreprocessTxs)(nil), "tendermint.abci.RequestPreprocessTxs") proto.RegisterType((*Response)(nil), "tendermint.abci.Response") proto.RegisterType((*ResponseException)(nil), "tendermint.abci.ResponseException") proto.RegisterType((*ResponseEcho)(nil), "tendermint.abci.ResponseEcho") @@ -3154,6 +3269,7 @@ func init() { proto.RegisterType((*ResponseOfferSnapshot)(nil), "tendermint.abci.ResponseOfferSnapshot") proto.RegisterType((*ResponseLoadSnapshotChunk)(nil), "tendermint.abci.ResponseLoadSnapshotChunk") proto.RegisterType((*ResponseApplySnapshotChunk)(nil), "tendermint.abci.ResponseApplySnapshotChunk") + proto.RegisterType((*ResponsePreprocessTxs)(nil), "tendermint.abci.ResponsePreprocessTxs") proto.RegisterType((*ConsensusParams)(nil), "tendermint.abci.ConsensusParams") proto.RegisterType((*BlockParams)(nil), "tendermint.abci.BlockParams") proto.RegisterType((*LastCommitInfo)(nil), "tendermint.abci.LastCommitInfo") @@ -3170,175 +3286,179 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 2681 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x4b, 0x73, 0x1b, 0xc7, - 0x11, 0xc6, 0xfb, 0xd1, 0x24, 0x1e, 0x1c, 0xd1, 0x32, 0xbc, 0x92, 0x48, 0x79, 0x55, 0x72, 0x2c, - 0xd9, 0x26, 0x13, 0xaa, 0xa4, 0x48, 0xb1, 0x13, 0x9b, 0x80, 0xa1, 0x80, 0x96, 0x4c, 0x32, 0x4b, - 0x4a, 0xce, 0xcb, 0x5a, 0x0f, 0xb0, 0x43, 0x60, 0x2d, 0x60, 0x77, 0x8d, 0x1d, 0x50, 0xa4, 0x8f, - 0x71, 0x72, 0x51, 0x2e, 0xce, 0x2d, 0x17, 0xff, 0x8f, 0x9c, 0x72, 0xc9, 0xc5, 0x55, 0xb9, 0xf8, - 0x98, 0x93, 0x92, 0x92, 0x2a, 0x97, 0xfc, 0x81, 0x1c, 0x93, 0x9a, 0xc7, 0xbe, 0x00, 0x2c, 0x00, - 0xda, 0xb9, 0xe5, 0x36, 0xd3, 0xdb, 0xdd, 0x8b, 0xe9, 0x9d, 0xfe, 0xe6, 0xeb, 0x1e, 0xc0, 0x05, - 0x4a, 0x2c, 0x83, 0x0c, 0x07, 0xa6, 0x45, 0x37, 0x71, 0xbb, 0x63, 0x6e, 0xd2, 0x53, 0x87, 0xb8, - 0x1b, 0xce, 0xd0, 0xa6, 0x36, 0xaa, 0x04, 0x0f, 0x37, 0xd8, 0x43, 0xe5, 0x52, 0x48, 0xbb, 0x33, - 0x3c, 0x75, 0xa8, 0xbd, 0xe9, 0x0c, 0x6d, 0xfb, 0x48, 0xe8, 0x2b, 0x17, 0x43, 0x8f, 0xb9, 0x9f, - 0xb0, 0xb7, 0xc8, 0x53, 0x69, 0xfc, 0x98, 0x9c, 0x7a, 0x4f, 0x2f, 0x4d, 0xd8, 0x3a, 0x78, 0x88, - 0x07, 0xde, 0xe3, 0xf5, 0xae, 0x6d, 0x77, 0xfb, 0x64, 0x93, 0xcf, 0xda, 0xa3, 0xa3, 0x4d, 0x6a, - 0x0e, 0x88, 0x4b, 0xf1, 0xc0, 0x91, 0x0a, 0xab, 0x5d, 0xbb, 0x6b, 0xf3, 0xe1, 0x26, 0x1b, 0x09, - 0xa9, 0xfa, 0x87, 0x02, 0xe4, 0x35, 0xf2, 0xd9, 0x88, 0xb8, 0x14, 0x6d, 0x41, 0x86, 0x74, 0x7a, - 0x76, 0x2d, 0x79, 0x39, 0xf9, 0xfa, 0xd2, 0xd6, 0xc5, 0x8d, 0xb1, 0xc5, 0x6d, 0x48, 0xbd, 0x66, - 0xa7, 0x67, 0xb7, 0x12, 0x1a, 0xd7, 0x45, 0x37, 0x21, 0x7b, 0xd4, 0x1f, 0xb9, 0xbd, 0x5a, 0x8a, - 0x1b, 0x5d, 0x8a, 0x33, 0xba, 0xcb, 0x94, 0x5a, 0x09, 0x4d, 0x68, 0xb3, 0x57, 0x99, 0xd6, 0x91, - 0x5d, 0x4b, 0xcf, 0x7e, 0xd5, 0x8e, 0x75, 0xc4, 0x5f, 0xc5, 0x74, 0x51, 0x1d, 0xc0, 0x25, 0x54, - 0xb7, 0x1d, 0x6a, 0xda, 0x56, 0x2d, 0xc3, 0x2d, 0x5f, 0x8d, 0xb3, 0x3c, 0x20, 0x74, 0x8f, 0x2b, - 0xb6, 0x12, 0x5a, 0xd1, 0xf5, 0x26, 0xcc, 0x87, 0x69, 0x99, 0x54, 0xef, 0xf4, 0xb0, 0x69, 0xd5, - 0xb2, 0xb3, 0x7d, 0xec, 0x58, 0x26, 0x6d, 0x30, 0x45, 0xe6, 0xc3, 0xf4, 0x26, 0x6c, 0xc9, 0x9f, - 0x8d, 0xc8, 0xf0, 0xb4, 0x96, 0x9b, 0xbd, 0xe4, 0x9f, 0x31, 0x25, 0xb6, 0x64, 0xae, 0x8d, 0x9a, - 0xb0, 0xd4, 0x26, 0x5d, 0xd3, 0xd2, 0xdb, 0x7d, 0xbb, 0xf3, 0xb8, 0x96, 0xe7, 0xc6, 0x6a, 0x9c, - 0x71, 0x9d, 0xa9, 0xd6, 0x99, 0x66, 0x2b, 0xa1, 0x41, 0xdb, 0x9f, 0xa1, 0x77, 0xa0, 0xd0, 0xe9, - 0x91, 0xce, 0x63, 0x9d, 0x9e, 0xd4, 0x0a, 0xdc, 0xc7, 0x7a, 0x9c, 0x8f, 0x06, 0xd3, 0x3b, 0x3c, - 0x69, 0x25, 0xb4, 0x7c, 0x47, 0x0c, 0xd9, 0xfa, 0x0d, 0xd2, 0x37, 0x8f, 0xc9, 0x90, 0xd9, 0x17, - 0x67, 0xaf, 0xff, 0x7d, 0xa1, 0xc9, 0x3d, 0x14, 0x0d, 0x6f, 0x82, 0xde, 0x85, 0x22, 0xb1, 0x0c, - 0xb9, 0x0c, 0xe0, 0x2e, 0x2e, 0xc7, 0xee, 0x15, 0xcb, 0xf0, 0x16, 0x51, 0x20, 0x72, 0x8c, 0x6e, - 0x43, 0xae, 0x63, 0x0f, 0x06, 0x26, 0xad, 0x2d, 0x71, 0xeb, 0xb5, 0xd8, 0x05, 0x70, 0xad, 0x56, - 0x42, 0x93, 0xfa, 0x68, 0x17, 0xca, 0x7d, 0xd3, 0xa5, 0xba, 0x6b, 0x61, 0xc7, 0xed, 0xd9, 0xd4, - 0xad, 0x2d, 0x73, 0x0f, 0x57, 0xe3, 0x3c, 0xdc, 0x37, 0x5d, 0x7a, 0xe0, 0x29, 0xb7, 0x12, 0x5a, - 0xa9, 0x1f, 0x16, 0x30, 0x7f, 0xf6, 0xd1, 0x11, 0x19, 0xfa, 0x0e, 0x6b, 0xa5, 0xd9, 0xfe, 0xf6, - 0x98, 0xb6, 0x67, 0xcf, 0xfc, 0xd9, 0x61, 0x01, 0xfa, 0x15, 0x9c, 0xeb, 0xdb, 0xd8, 0xf0, 0xdd, - 0xe9, 0x9d, 0xde, 0xc8, 0x7a, 0x5c, 0x2b, 0x73, 0xa7, 0xd7, 0x62, 0x7f, 0xa4, 0x8d, 0x0d, 0xcf, - 0x45, 0x83, 0x19, 0xb4, 0x12, 0xda, 0x4a, 0x7f, 0x5c, 0x88, 0x1e, 0xc1, 0x2a, 0x76, 0x9c, 0xfe, - 0xe9, 0xb8, 0xf7, 0x0a, 0xf7, 0x7e, 0x3d, 0xce, 0xfb, 0x36, 0xb3, 0x19, 0x77, 0x8f, 0xf0, 0x84, - 0xb4, 0x9e, 0x87, 0xec, 0x31, 0xee, 0x8f, 0x88, 0xfa, 0x3d, 0x58, 0x0a, 0xa5, 0x3a, 0xaa, 0x41, - 0x7e, 0x40, 0x5c, 0x17, 0x77, 0x09, 0x47, 0x86, 0xa2, 0xe6, 0x4d, 0xd5, 0x32, 0x2c, 0x87, 0xd3, - 0x5b, 0x1d, 0xf8, 0x86, 0x2c, 0x71, 0x99, 0xe1, 0x31, 0x19, 0xba, 0x2c, 0x5b, 0xa5, 0xa1, 0x9c, - 0xa2, 0x2b, 0x50, 0xe2, 0xdb, 0x47, 0xf7, 0x9e, 0x33, 0xf4, 0xc8, 0x68, 0xcb, 0x5c, 0xf8, 0x50, - 0x2a, 0xad, 0xc3, 0x92, 0xb3, 0xe5, 0xf8, 0x2a, 0x69, 0xae, 0x02, 0xce, 0x96, 0x23, 0x15, 0xd4, - 0x1f, 0x41, 0x75, 0x3c, 0xdb, 0x51, 0x15, 0xd2, 0x8f, 0xc9, 0xa9, 0x7c, 0x1f, 0x1b, 0xa2, 0x55, - 0xb9, 0x2c, 0xfe, 0x8e, 0xa2, 0x26, 0xd7, 0xf8, 0xd7, 0x94, 0x6f, 0xec, 0xa7, 0x39, 0xba, 0x0d, - 0x19, 0x86, 0x9a, 0x12, 0x00, 0x95, 0x0d, 0x01, 0xa9, 0x1b, 0x1e, 0xa4, 0x6e, 0x1c, 0x7a, 0x90, - 0x5a, 0x2f, 0x7c, 0xfd, 0x6c, 0x3d, 0xf1, 0xe5, 0xdf, 0xd7, 0x93, 0x1a, 0xb7, 0x40, 0xaf, 0xb0, - 0xac, 0xc4, 0xa6, 0xa5, 0x9b, 0x86, 0x7c, 0x4f, 0x9e, 0xcf, 0x77, 0x0c, 0x74, 0x0f, 0xaa, 0x1d, - 0xdb, 0x72, 0x89, 0xe5, 0x8e, 0x5c, 0x5d, 0x40, 0xb6, 0x84, 0xbd, 0xc9, 0xac, 0x69, 0x78, 0x8a, - 0xfb, 0x5c, 0x4f, 0xab, 0x74, 0xa2, 0x02, 0x74, 0x17, 0xe0, 0x18, 0xf7, 0x4d, 0x03, 0x53, 0x7b, - 0xe8, 0xd6, 0x32, 0x97, 0xd3, 0x53, 0xdd, 0x3c, 0xf4, 0x54, 0x1e, 0x38, 0x06, 0xa6, 0xa4, 0x9e, - 0x61, 0xbf, 0x56, 0x0b, 0x59, 0xa2, 0xd7, 0xa0, 0x82, 0x1d, 0x47, 0x77, 0x29, 0xa6, 0x44, 0x6f, - 0x9f, 0x52, 0xe2, 0x72, 0x30, 0x5c, 0xd6, 0x4a, 0xd8, 0x71, 0x0e, 0x98, 0xb4, 0xce, 0x84, 0xe8, - 0x2a, 0x94, 0x19, 0xf0, 0x99, 0xb8, 0xaf, 0xf7, 0x88, 0xd9, 0xed, 0x51, 0x0e, 0x7a, 0x69, 0xad, - 0x24, 0xa5, 0x2d, 0x2e, 0x54, 0x0d, 0x7f, 0x23, 0x70, 0xd0, 0x43, 0x08, 0x32, 0x06, 0xa6, 0x98, - 0x07, 0x72, 0x59, 0xe3, 0x63, 0x26, 0x73, 0x30, 0xed, 0xc9, 0xf0, 0xf0, 0x31, 0x3a, 0x0f, 0x39, - 0xe9, 0x36, 0xcd, 0xdd, 0xca, 0x19, 0xfb, 0x66, 0xce, 0xd0, 0x3e, 0x26, 0x1c, 0xe5, 0x0b, 0x9a, - 0x98, 0xa8, 0xbf, 0x4d, 0xc1, 0xca, 0x04, 0x3c, 0x32, 0xbf, 0x3d, 0xec, 0xf6, 0xbc, 0x77, 0xb1, - 0x31, 0xba, 0xc5, 0xfc, 0x62, 0x83, 0x0c, 0xe5, 0xb1, 0x54, 0x0b, 0x87, 0x48, 0x1c, 0xb9, 0x2d, - 0xfe, 0x5c, 0x86, 0x46, 0x6a, 0xa3, 0x3d, 0xa8, 0xf6, 0xb1, 0x4b, 0x75, 0x01, 0x37, 0x7a, 0xe8, - 0x88, 0x9a, 0x04, 0xd9, 0xfb, 0xd8, 0x03, 0x28, 0xb6, 0xd9, 0xa5, 0xa3, 0x72, 0x3f, 0x22, 0x45, - 0x1a, 0xac, 0xb6, 0x4f, 0x3f, 0xc7, 0x16, 0x35, 0x2d, 0xa2, 0x4f, 0x7c, 0xb9, 0x57, 0x26, 0x9c, - 0x36, 0x8f, 0x4d, 0x83, 0x58, 0x1d, 0xef, 0x93, 0x9d, 0xf3, 0x8d, 0xfd, 0x4f, 0xea, 0xaa, 0x1a, - 0x94, 0xa3, 0x00, 0x8f, 0xca, 0x90, 0xa2, 0x27, 0x32, 0x00, 0x29, 0x7a, 0x82, 0xbe, 0x0f, 0x19, - 0xb6, 0x48, 0xbe, 0xf8, 0xf2, 0x94, 0xd3, 0x55, 0xda, 0x1d, 0x9e, 0x3a, 0x44, 0xe3, 0x9a, 0xaa, - 0xea, 0x67, 0x83, 0x0f, 0xfa, 0xe3, 0x5e, 0xd5, 0x6b, 0x50, 0x19, 0x43, 0xf5, 0xd0, 0xf7, 0x4b, - 0x86, 0xbf, 0x9f, 0x5a, 0x81, 0x52, 0x04, 0xc2, 0xd5, 0xf3, 0xb0, 0x3a, 0x0d, 0x91, 0xd5, 0x9e, - 0x2f, 0x8f, 0x20, 0x2b, 0xba, 0x09, 0x05, 0x1f, 0x92, 0x45, 0x36, 0x4e, 0xc6, 0xca, 0x53, 0xd6, - 0x7c, 0x55, 0x96, 0x86, 0x6c, 0x5b, 0xf3, 0xfd, 0x90, 0xe2, 0x3f, 0x3c, 0x8f, 0x1d, 0xa7, 0x85, - 0xdd, 0x9e, 0xfa, 0x09, 0xd4, 0xe2, 0xe0, 0x76, 0x6c, 0x19, 0x19, 0x7f, 0x1b, 0x9e, 0x87, 0xdc, - 0x91, 0x3d, 0x1c, 0x60, 0xca, 0x9d, 0x95, 0x34, 0x39, 0x63, 0xdb, 0x53, 0x40, 0x6f, 0x9a, 0x8b, - 0xc5, 0x44, 0xd5, 0xe1, 0x95, 0x58, 0xc8, 0x65, 0x26, 0xa6, 0x65, 0x10, 0x11, 0xcf, 0x92, 0x26, - 0x26, 0x81, 0x23, 0xf1, 0x63, 0xc5, 0x84, 0xbd, 0xd6, 0xe5, 0x6b, 0xe5, 0xfe, 0x8b, 0x9a, 0x9c, - 0xa9, 0xff, 0x2c, 0x40, 0x41, 0x23, 0xae, 0xc3, 0x30, 0x01, 0xd5, 0xa1, 0x48, 0x4e, 0x3a, 0x44, - 0x90, 0xa1, 0x64, 0x2c, 0x99, 0x10, 0xda, 0x4d, 0x4f, 0x93, 0x9d, 0xe4, 0xbe, 0x19, 0xba, 0x21, - 0x09, 0x5f, 0x3c, 0x77, 0x93, 0xe6, 0x61, 0xc6, 0x77, 0xcb, 0x63, 0x7c, 0xe9, 0xd8, 0xc3, 0x5b, - 0x58, 0x8d, 0x51, 0xbe, 0x1b, 0x92, 0xf2, 0x65, 0xe6, 0xbc, 0x2c, 0xc2, 0xf9, 0x1a, 0x11, 0xce, - 0x97, 0x9d, 0xb3, 0xcc, 0x18, 0xd2, 0xd7, 0x88, 0x90, 0xbe, 0xdc, 0x1c, 0x27, 0x31, 0xac, 0xef, - 0x96, 0xc7, 0xfa, 0xf2, 0x73, 0x96, 0x3d, 0x46, 0xfb, 0xee, 0x46, 0x69, 0x9f, 0xa0, 0x6c, 0x57, - 0x62, 0xad, 0x63, 0x79, 0xdf, 0x8f, 0x43, 0xbc, 0xaf, 0x18, 0x4b, 0xba, 0x84, 0x93, 0x29, 0xc4, - 0xaf, 0x11, 0x21, 0x7e, 0x30, 0x27, 0x06, 0x31, 0xcc, 0xef, 0xbd, 0x30, 0xf3, 0x5b, 0x8a, 0x25, - 0x8f, 0x72, 0xd3, 0x4c, 0xa3, 0x7e, 0x77, 0x7c, 0xea, 0xb7, 0x1c, 0xcb, 0x5d, 0xe5, 0x1a, 0xc6, - 0xb9, 0xdf, 0xde, 0x04, 0xf7, 0x13, 0x5c, 0xed, 0xb5, 0x58, 0x17, 0x73, 0xc8, 0xdf, 0xde, 0x04, - 0xf9, 0x2b, 0xcf, 0x71, 0x38, 0x87, 0xfd, 0xfd, 0x7a, 0x3a, 0xfb, 0x8b, 0xe7, 0x67, 0xf2, 0x67, - 0x2e, 0x46, 0xff, 0xf4, 0x18, 0xfa, 0x57, 0xe5, 0xee, 0xdf, 0x88, 0x75, 0x7f, 0x76, 0xfe, 0x77, - 0x8d, 0x1d, 0xb3, 0x63, 0xc0, 0xc1, 0xa0, 0x8a, 0x0c, 0x87, 0xf6, 0x50, 0x52, 0x2b, 0x31, 0x51, - 0x5f, 0x67, 0x07, 0x7f, 0x00, 0x12, 0x33, 0xb8, 0x22, 0x3f, 0x12, 0x42, 0xc0, 0xa0, 0xfe, 0x29, - 0x19, 0xd8, 0xf2, 0xb3, 0x32, 0x4c, 0x1a, 0x8a, 0x92, 0x34, 0x84, 0x28, 0x64, 0x2a, 0x4a, 0x21, - 0xd7, 0x61, 0x89, 0x41, 0xfd, 0x18, 0x3b, 0xc4, 0x8e, 0xc7, 0x0e, 0xd1, 0x75, 0x58, 0xe1, 0x67, - 0xb9, 0x20, 0x9a, 0x12, 0xdf, 0x33, 0xfc, 0x98, 0xaa, 0xb0, 0x07, 0x62, 0x73, 0x0a, 0xa0, 0x7f, - 0x0b, 0xce, 0x85, 0x74, 0xfd, 0x23, 0x44, 0x50, 0xa2, 0xaa, 0xaf, 0xbd, 0x2d, 0xcf, 0x92, 0x0f, - 0x83, 0x00, 0x05, 0xcc, 0x13, 0x41, 0xa6, 0x63, 0x1b, 0x44, 0x02, 0x3c, 0x1f, 0x33, 0x36, 0xda, - 0xb7, 0xbb, 0x12, 0xc6, 0xd9, 0x90, 0x69, 0xf9, 0x28, 0x58, 0x14, 0x20, 0xa7, 0xfe, 0x25, 0x19, - 0xf8, 0x0b, 0xc8, 0xe8, 0x34, 0xde, 0x98, 0xfc, 0xdf, 0xf0, 0xc6, 0xd4, 0xb7, 0xe6, 0x8d, 0xe1, - 0x03, 0x36, 0x1d, 0x3d, 0x60, 0xff, 0x9d, 0x0c, 0xbe, 0xb0, 0xcf, 0x02, 0xbf, 0x5d, 0x44, 0x82, - 0xd3, 0x32, 0xcb, 0xbf, 0x97, 0x3c, 0x2d, 0x25, 0xb7, 0xcf, 0xf1, 0xf7, 0x46, 0xb9, 0x7d, 0x5e, - 0x9c, 0x9f, 0x7c, 0x82, 0x6e, 0x43, 0x91, 0x37, 0x5d, 0x74, 0xdb, 0x71, 0x25, 0xe0, 0x5e, 0x08, - 0xaf, 0x55, 0xf4, 0x56, 0x36, 0xf6, 0x99, 0xce, 0x9e, 0xe3, 0x6a, 0x05, 0x47, 0x8e, 0x42, 0x44, - 0xa0, 0x18, 0xe1, 0xa3, 0x17, 0xa1, 0xc8, 0x7e, 0xbd, 0xeb, 0xe0, 0x0e, 0xe1, 0xe0, 0x59, 0xd4, - 0x02, 0x81, 0xfa, 0x08, 0xd0, 0x24, 0x7c, 0xa3, 0x16, 0xe4, 0xc8, 0x31, 0xb1, 0x28, 0xfb, 0x6a, - 0x2c, 0xdc, 0xe7, 0xa7, 0x90, 0x3d, 0x62, 0xd1, 0x7a, 0x8d, 0x05, 0xf9, 0x5f, 0xcf, 0xd6, 0xab, - 0x42, 0xfb, 0x4d, 0x7b, 0x60, 0x52, 0x32, 0x70, 0xe8, 0xa9, 0x26, 0xed, 0xd5, 0x2f, 0x52, 0x8c, - 0x79, 0x45, 0xa0, 0x7d, 0x6a, 0x6c, 0xbd, 0x04, 0x4a, 0x85, 0x58, 0xf7, 0x62, 0xf1, 0x5e, 0x03, - 0xe8, 0x62, 0x57, 0x7f, 0x82, 0x2d, 0x4a, 0x0c, 0x19, 0xf4, 0x90, 0x04, 0x29, 0x50, 0x60, 0xb3, - 0x91, 0x4b, 0x0c, 0x59, 0x00, 0xf8, 0xf3, 0xd0, 0x3a, 0xf3, 0xdf, 0x6d, 0x9d, 0xd1, 0x28, 0x17, - 0xc6, 0xa3, 0xfc, 0xbb, 0x54, 0x90, 0x25, 0x01, 0x49, 0xfd, 0xff, 0x8b, 0xc3, 0xef, 0x79, 0xe5, - 0x1a, 0x3d, 0x63, 0xd1, 0x01, 0xac, 0xf8, 0x59, 0xaa, 0x8f, 0x78, 0xf6, 0x7a, 0xfb, 0x6e, 0xd1, - 0x34, 0xaf, 0x1e, 0x47, 0xc5, 0x2e, 0xfa, 0x39, 0xbc, 0x3c, 0x86, 0x40, 0xbe, 0xeb, 0xd4, 0x82, - 0x40, 0xf4, 0x52, 0x14, 0x88, 0x3c, 0xcf, 0x41, 0xac, 0xd2, 0xdf, 0x31, 0x37, 0x76, 0x58, 0x31, - 0x14, 0x66, 0x0c, 0x53, 0xbf, 0xfe, 0x15, 0x28, 0x0d, 0x09, 0x65, 0xf5, 0x79, 0xa4, 0xdc, 0x5c, - 0x16, 0x42, 0x59, 0xc4, 0xee, 0xc3, 0x4b, 0x53, 0x99, 0x03, 0xfa, 0x21, 0x14, 0x03, 0xd2, 0x91, - 0x8c, 0xa9, 0xdc, 0xfc, 0x6a, 0x24, 0xd0, 0x55, 0xff, 0x9c, 0x0c, 0x5c, 0x46, 0xeb, 0x9b, 0x26, - 0xe4, 0x86, 0xc4, 0x1d, 0xf5, 0x45, 0xc5, 0x51, 0xde, 0x7a, 0x6b, 0x31, 0xce, 0xc1, 0xa4, 0xa3, - 0x3e, 0xd5, 0xa4, 0xb1, 0xfa, 0x08, 0x72, 0x42, 0x82, 0x96, 0x20, 0xff, 0x60, 0xf7, 0xde, 0xee, - 0xde, 0x47, 0xbb, 0xd5, 0x04, 0x02, 0xc8, 0x6d, 0x37, 0x1a, 0xcd, 0xfd, 0xc3, 0x6a, 0x12, 0x15, - 0x21, 0xbb, 0x5d, 0xdf, 0xd3, 0x0e, 0xab, 0x29, 0x26, 0xd6, 0x9a, 0x1f, 0x34, 0x1b, 0x87, 0xd5, - 0x34, 0x5a, 0x81, 0x92, 0x18, 0xeb, 0x77, 0xf7, 0xb4, 0x0f, 0xb7, 0x0f, 0xab, 0x99, 0x90, 0xe8, - 0xa0, 0xb9, 0xfb, 0x7e, 0x53, 0xab, 0x66, 0xd5, 0x1f, 0xb0, 0x92, 0x26, 0x86, 0xa5, 0x04, 0xc5, - 0x4b, 0x32, 0x54, 0xbc, 0xa8, 0x7f, 0x4c, 0x81, 0x12, 0x4f, 0x3d, 0xd0, 0x07, 0x63, 0x0b, 0xdf, - 0x3a, 0x03, 0x6f, 0x19, 0x5b, 0x3d, 0xba, 0x0a, 0xe5, 0x21, 0x39, 0x22, 0xb4, 0xd3, 0x13, 0x54, - 0x48, 0x1c, 0x6c, 0x25, 0xad, 0x24, 0xa5, 0xdc, 0xc8, 0x15, 0x6a, 0x9f, 0x92, 0x0e, 0xd5, 0x45, - 0x1d, 0x25, 0x36, 0x5d, 0x91, 0xa9, 0x31, 0xe9, 0x81, 0x10, 0xaa, 0x9f, 0x9c, 0x29, 0x96, 0x45, - 0xc8, 0x6a, 0xcd, 0x43, 0xed, 0x17, 0xd5, 0x34, 0x42, 0x50, 0xe6, 0x43, 0xfd, 0x60, 0x77, 0x7b, - 0xff, 0xa0, 0xb5, 0xc7, 0x62, 0x79, 0x0e, 0x2a, 0x5e, 0x2c, 0x3d, 0x61, 0x56, 0xfd, 0x4f, 0x12, - 0x2a, 0x63, 0x09, 0x82, 0xb6, 0x20, 0x2b, 0xe8, 0x74, 0x5c, 0xd3, 0x9d, 0xe7, 0xb7, 0xcc, 0x26, - 0xa1, 0x8a, 0xde, 0x81, 0x02, 0x91, 0x7d, 0x82, 0x69, 0x89, 0x28, 0xfa, 0x1b, 0x5e, 0x27, 0x41, - 0x9a, 0xfa, 0x16, 0xe8, 0x5d, 0x28, 0xfa, 0x99, 0x2e, 0x6b, 0xb8, 0x57, 0x27, 0xcd, 0x7d, 0x8c, - 0x90, 0xf6, 0x81, 0x0d, 0xba, 0x13, 0x70, 0xb2, 0xcc, 0x24, 0x89, 0x97, 0xe6, 0x42, 0x41, 0x1a, - 0x7b, 0xfa, 0x6a, 0x03, 0x96, 0x42, 0xeb, 0x41, 0x17, 0xa0, 0x38, 0xc0, 0x27, 0xb2, 0xff, 0x24, - 0x3a, 0x08, 0x85, 0x01, 0x3e, 0x11, 0xad, 0xa7, 0x97, 0x21, 0xcf, 0x1e, 0x76, 0xb1, 0x40, 0x9b, - 0xb4, 0x96, 0x1b, 0xe0, 0x93, 0x9f, 0x62, 0x57, 0xfd, 0x18, 0xca, 0xd1, 0xde, 0x0b, 0xdb, 0x89, - 0x43, 0x7b, 0x64, 0x19, 0xdc, 0x47, 0x56, 0x13, 0x13, 0x74, 0x13, 0xb2, 0xc7, 0xb6, 0x00, 0xab, - 0xe9, 0x29, 0xfb, 0xd0, 0xa6, 0x24, 0xd4, 0xbb, 0x11, 0xda, 0xea, 0xe7, 0x90, 0xe5, 0xe0, 0xc3, - 0x80, 0x84, 0x77, 0x51, 0x24, 0x1f, 0x65, 0x63, 0xf4, 0x31, 0x00, 0xa6, 0x74, 0x68, 0xb6, 0x47, - 0x81, 0xe3, 0xf5, 0xe9, 0xe0, 0xb5, 0xed, 0xe9, 0xd5, 0x2f, 0x4a, 0x14, 0x5b, 0x0d, 0x4c, 0x43, - 0x48, 0x16, 0x72, 0xa8, 0xee, 0x42, 0x39, 0x6a, 0x1b, 0xee, 0x67, 0x2e, 0x4f, 0xe9, 0x67, 0xfa, - 0x9c, 0xc7, 0x67, 0x4c, 0x69, 0xd1, 0x31, 0xe3, 0x13, 0xf5, 0x69, 0x12, 0x0a, 0x87, 0x27, 0x72, - 0x5b, 0xc7, 0x34, 0x6b, 0x02, 0xd3, 0x54, 0xb8, 0x35, 0x21, 0xba, 0x3f, 0x69, 0xbf, 0xa7, 0xf4, - 0x9e, 0x9f, 0xb8, 0x99, 0x45, 0x8b, 0x47, 0xaf, 0xb9, 0x26, 0xc1, 0xea, 0x6d, 0x28, 0xfa, 0xbb, - 0x8a, 0x11, 0x7b, 0x6c, 0x18, 0x43, 0xe2, 0xba, 0x72, 0x6d, 0xde, 0x94, 0xf7, 0xfe, 0xec, 0x27, - 0xb2, 0xf9, 0x91, 0xd6, 0xc4, 0x44, 0x35, 0xa0, 0x32, 0x76, 0x6c, 0xa1, 0xb7, 0x21, 0xef, 0x8c, - 0xda, 0xba, 0x17, 0x9e, 0xb1, 0xe4, 0xf1, 0x48, 0xde, 0xa8, 0xdd, 0x37, 0x3b, 0xf7, 0xc8, 0xa9, - 0xf7, 0x63, 0x9c, 0x51, 0xfb, 0x9e, 0x88, 0xa2, 0x78, 0x4b, 0x2a, 0xfc, 0x96, 0x63, 0x28, 0x78, - 0x9b, 0x02, 0xfd, 0x24, 0x9c, 0x27, 0x5e, 0x47, 0x38, 0xf6, 0x28, 0x95, 0xee, 0x43, 0x69, 0x72, - 0x1d, 0x56, 0x5c, 0xb3, 0x6b, 0x11, 0x43, 0x0f, 0x4a, 0x0b, 0xfe, 0xb6, 0x82, 0x56, 0x11, 0x0f, - 0xee, 0x7b, 0x75, 0x85, 0xfa, 0x2c, 0x09, 0x05, 0x2f, 0x61, 0xa7, 0xee, 0xbb, 0xc8, 0x8f, 0x49, - 0x9d, 0xfd, 0xc7, 0xc4, 0x35, 0x5a, 0xbd, 0x8e, 0x77, 0xe6, 0xcc, 0x1d, 0xef, 0x37, 0x01, 0x51, - 0x9b, 0xe2, 0xbe, 0x7e, 0x6c, 0x53, 0xd3, 0xea, 0xea, 0x22, 0x9a, 0x82, 0x32, 0x55, 0xf9, 0x93, - 0x87, 0xfc, 0xc1, 0x3e, 0x0f, 0xec, 0x6f, 0x92, 0x50, 0xf0, 0x0f, 0xbf, 0xb3, 0xb6, 0xdb, 0xce, - 0x43, 0x4e, 0xe2, 0xbb, 0xe8, 0xb7, 0xc9, 0x99, 0xdf, 0xf9, 0xcd, 0x84, 0x3a, 0xbf, 0x0a, 0x14, - 0x06, 0x84, 0x62, 0xce, 0x00, 0x44, 0xf9, 0xe6, 0xcf, 0xaf, 0xdf, 0x81, 0xa5, 0x50, 0xe7, 0x93, - 0xa5, 0xd6, 0x6e, 0xf3, 0xa3, 0x6a, 0x42, 0xc9, 0x3f, 0xfd, 0xea, 0x72, 0x7a, 0x97, 0x3c, 0x61, - 0x9b, 0x52, 0x6b, 0x36, 0x5a, 0xcd, 0xc6, 0xbd, 0x6a, 0x52, 0x59, 0x7a, 0xfa, 0xd5, 0xe5, 0xbc, - 0x46, 0x78, 0x03, 0x65, 0xeb, 0x0b, 0x80, 0xca, 0x76, 0xbd, 0xb1, 0xc3, 0x0e, 0x25, 0xb3, 0x83, - 0x65, 0x5b, 0x29, 0xc3, 0x6b, 0xde, 0x99, 0x17, 0xa5, 0xca, 0xec, 0xae, 0x1a, 0xba, 0x0b, 0x59, - 0x5e, 0x0e, 0xa3, 0xd9, 0x37, 0xa7, 0xca, 0x9c, 0x36, 0x1b, 0xfb, 0x31, 0x7c, 0xd7, 0xce, 0xbc, - 0x4a, 0x55, 0x66, 0x77, 0xdd, 0x90, 0x06, 0xc5, 0xa0, 0x9e, 0x9d, 0x7f, 0xb5, 0xaa, 0x2c, 0xd0, - 0x89, 0x63, 0x3e, 0x03, 0xb6, 0x3e, 0xff, 0xaa, 0x51, 0x59, 0x00, 0x57, 0xd0, 0x7d, 0xc8, 0x7b, - 0x75, 0xd0, 0xbc, 0xcb, 0x4f, 0x65, 0x6e, 0x97, 0x8c, 0x7d, 0x02, 0x51, 0xaf, 0xce, 0xbe, 0xc9, - 0x55, 0xe6, 0xb4, 0xfc, 0xd0, 0x0e, 0xe4, 0x24, 0x05, 0x9d, 0x73, 0xa1, 0xa9, 0xcc, 0xeb, 0x7a, - 0xb1, 0xa0, 0x05, 0x8d, 0x80, 0xf9, 0xf7, 0xd3, 0xca, 0x02, 0xdd, 0x4c, 0xf4, 0x00, 0x20, 0x54, - 0x9d, 0x2e, 0x70, 0xf1, 0xac, 0x2c, 0xd2, 0xa5, 0x44, 0x7b, 0x50, 0xf0, 0xab, 0x90, 0xb9, 0xd7, - 0xc0, 0xca, 0xfc, 0x76, 0x21, 0x7a, 0x04, 0xa5, 0x28, 0xfd, 0x5e, 0xec, 0x72, 0x57, 0x59, 0xb0, - 0x0f, 0xc8, 0xfc, 0x47, 0xb9, 0xf8, 0x62, 0x97, 0xbd, 0xca, 0x82, 0x6d, 0x41, 0xf4, 0x29, 0xac, - 0x4c, 0x72, 0xe5, 0xc5, 0xef, 0x7e, 0x95, 0x33, 0x34, 0x0a, 0xd1, 0x00, 0xd0, 0x14, 0x8e, 0x7d, - 0x86, 0xab, 0x60, 0xe5, 0x2c, 0x7d, 0xc3, 0x7a, 0xf3, 0xeb, 0xe7, 0x6b, 0xc9, 0x6f, 0x9e, 0xaf, - 0x25, 0xff, 0xf1, 0x7c, 0x2d, 0xf9, 0xe5, 0x8b, 0xb5, 0xc4, 0x37, 0x2f, 0xd6, 0x12, 0x7f, 0x7b, - 0xb1, 0x96, 0xf8, 0xe5, 0x1b, 0x5d, 0x93, 0xf6, 0x46, 0xed, 0x8d, 0x8e, 0x3d, 0xd8, 0x0c, 0xff, - 0x4f, 0x65, 0xda, 0x7f, 0x67, 0xda, 0x39, 0x7e, 0xbc, 0xdc, 0xf8, 0x6f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x21, 0x92, 0x34, 0xc9, 0x5b, 0x23, 0x00, 0x00, + // 2742 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcd, 0x77, 0xdb, 0xc6, + 0x11, 0xe7, 0x37, 0x89, 0xa1, 0xf8, 0xa1, 0xb5, 0xe2, 0x30, 0x8c, 0x23, 0x29, 0xc8, 0x73, 0x6a, + 0x3b, 0x89, 0xd4, 0xca, 0xcf, 0xae, 0xdd, 0xa4, 0x4d, 0x44, 0x86, 0x2e, 0x15, 0x3b, 0xa2, 0x0a, + 0xc9, 0x4e, 0xbf, 0x62, 0x04, 0x24, 0x56, 0x24, 0x62, 0x12, 0x40, 0x80, 0xa5, 0x2c, 0xe5, 0xd8, + 0xb4, 0x17, 0xf7, 0x92, 0x63, 0x2f, 0xf9, 0x37, 0xfa, 0x7a, 0xea, 0xa5, 0x97, 0xbc, 0xd7, 0x4b, + 0x8e, 0x3d, 0xb9, 0xad, 0x7d, 0xeb, 0x3f, 0xd0, 0x63, 0xfb, 0xf6, 0x03, 0x5f, 0x24, 0x41, 0x52, + 0x49, 0x6f, 0xbd, 0xed, 0x0e, 0x66, 0x06, 0xdc, 0xc1, 0xee, 0x6f, 0x7e, 0x33, 0x4b, 0x78, 0x99, + 0x60, 0x53, 0xc7, 0xce, 0xc8, 0x30, 0xc9, 0xb6, 0xd6, 0xed, 0x19, 0xdb, 0xe4, 0xcc, 0xc6, 0xee, + 0x96, 0xed, 0x58, 0xc4, 0x42, 0x95, 0xe0, 0xe1, 0x16, 0x7d, 0x58, 0x7f, 0x25, 0xa4, 0xdd, 0x73, + 0xce, 0x6c, 0x62, 0x6d, 0xdb, 0x8e, 0x65, 0x1d, 0x73, 0xfd, 0xfa, 0xa5, 0xd0, 0x63, 0xe6, 0x27, + 0xec, 0x2d, 0xf2, 0x54, 0x18, 0x3f, 0xc2, 0x67, 0xde, 0xd3, 0x57, 0xa6, 0x6c, 0x6d, 0xcd, 0xd1, + 0x46, 0xde, 0xe3, 0x8d, 0xbe, 0x65, 0xf5, 0x87, 0x78, 0x9b, 0xcd, 0xba, 0xe3, 0xe3, 0x6d, 0x62, + 0x8c, 0xb0, 0x4b, 0xb4, 0x91, 0x2d, 0x14, 0xd6, 0xfa, 0x56, 0xdf, 0x62, 0xc3, 0x6d, 0x3a, 0xe2, + 0x52, 0xf9, 0x9f, 0x05, 0xc8, 0x2b, 0xf8, 0xb3, 0x31, 0x76, 0x09, 0xda, 0x81, 0x0c, 0xee, 0x0d, + 0xac, 0x5a, 0x72, 0x33, 0x79, 0xa5, 0xb8, 0x73, 0x69, 0x6b, 0x62, 0x71, 0x5b, 0x42, 0xaf, 0xd5, + 0x1b, 0x58, 0xed, 0x84, 0xc2, 0x74, 0xd1, 0x0d, 0xc8, 0x1e, 0x0f, 0xc7, 0xee, 0xa0, 0x96, 0x62, + 0x46, 0xaf, 0xc4, 0x19, 0xdd, 0xa1, 0x4a, 0xed, 0x84, 0xc2, 0xb5, 0xe9, 0xab, 0x0c, 0xf3, 0xd8, + 0xaa, 0xa5, 0xe7, 0xbf, 0x6a, 0xcf, 0x3c, 0x66, 0xaf, 0xa2, 0xba, 0xa8, 0x01, 0xe0, 0x62, 0xa2, + 0x5a, 0x36, 0x31, 0x2c, 0xb3, 0x96, 0x61, 0x96, 0xaf, 0xc6, 0x59, 0x1e, 0x62, 0xd2, 0x61, 0x8a, + 0xed, 0x84, 0x22, 0xb9, 0xde, 0x84, 0xfa, 0x30, 0x4c, 0x83, 0xa8, 0xbd, 0x81, 0x66, 0x98, 0xb5, + 0xec, 0x7c, 0x1f, 0x7b, 0xa6, 0x41, 0x9a, 0x54, 0x91, 0xfa, 0x30, 0xbc, 0x09, 0x5d, 0xf2, 0x67, + 0x63, 0xec, 0x9c, 0xd5, 0x72, 0xf3, 0x97, 0xfc, 0x33, 0xaa, 0x44, 0x97, 0xcc, 0xb4, 0x51, 0x0b, + 0x8a, 0x5d, 0xdc, 0x37, 0x4c, 0xb5, 0x3b, 0xb4, 0x7a, 0x8f, 0x6a, 0x79, 0x66, 0x2c, 0xc7, 0x19, + 0x37, 0xa8, 0x6a, 0x83, 0x6a, 0xb6, 0x13, 0x0a, 0x74, 0xfd, 0x19, 0x7a, 0x07, 0x0a, 0xbd, 0x01, + 0xee, 0x3d, 0x52, 0xc9, 0x69, 0xad, 0xc0, 0x7c, 0x6c, 0xc4, 0xf9, 0x68, 0x52, 0xbd, 0xa3, 0xd3, + 0x76, 0x42, 0xc9, 0xf7, 0xf8, 0x90, 0xae, 0x5f, 0xc7, 0x43, 0xe3, 0x04, 0x3b, 0xd4, 0x5e, 0x9a, + 0xbf, 0xfe, 0xf7, 0xb9, 0x26, 0xf3, 0x20, 0xe9, 0xde, 0x04, 0xbd, 0x0b, 0x12, 0x36, 0x75, 0xb1, + 0x0c, 0x60, 0x2e, 0x36, 0x63, 0xf7, 0x8a, 0xa9, 0x7b, 0x8b, 0x28, 0x60, 0x31, 0x46, 0xb7, 0x20, + 0xd7, 0xb3, 0x46, 0x23, 0x83, 0xd4, 0x8a, 0xcc, 0x7a, 0x3d, 0x76, 0x01, 0x4c, 0xab, 0x9d, 0x50, + 0x84, 0x3e, 0xda, 0x87, 0xf2, 0xd0, 0x70, 0x89, 0xea, 0x9a, 0x9a, 0xed, 0x0e, 0x2c, 0xe2, 0xd6, + 0x56, 0x98, 0x87, 0xcb, 0x71, 0x1e, 0xee, 0x19, 0x2e, 0x39, 0xf4, 0x94, 0xdb, 0x09, 0xa5, 0x34, + 0x0c, 0x0b, 0xa8, 0x3f, 0xeb, 0xf8, 0x18, 0x3b, 0xbe, 0xc3, 0x5a, 0x69, 0xbe, 0xbf, 0x0e, 0xd5, + 0xf6, 0xec, 0xa9, 0x3f, 0x2b, 0x2c, 0x40, 0xbf, 0x82, 0x0b, 0x43, 0x4b, 0xd3, 0x7d, 0x77, 0x6a, + 0x6f, 0x30, 0x36, 0x1f, 0xd5, 0xca, 0xcc, 0xe9, 0xd5, 0xd8, 0x1f, 0x69, 0x69, 0xba, 0xe7, 0xa2, + 0x49, 0x0d, 0xda, 0x09, 0x65, 0x75, 0x38, 0x29, 0x44, 0x0f, 0x61, 0x4d, 0xb3, 0xed, 0xe1, 0xd9, + 0xa4, 0xf7, 0x0a, 0xf3, 0x7e, 0x2d, 0xce, 0xfb, 0x2e, 0xb5, 0x99, 0x74, 0x8f, 0xb4, 0x29, 0x29, + 0x0d, 0x86, 0xed, 0x60, 0xdb, 0xb1, 0x7a, 0xd8, 0x75, 0x55, 0x72, 0xea, 0xd6, 0x56, 0xe7, 0x07, + 0xe3, 0xc0, 0xd7, 0x3e, 0x3a, 0x65, 0xc1, 0xb5, 0xc3, 0x82, 0x46, 0x1e, 0xb2, 0x27, 0xda, 0x70, + 0x8c, 0xe5, 0xef, 0x41, 0x31, 0x04, 0x1d, 0xa8, 0x06, 0xf9, 0x11, 0x76, 0x5d, 0xad, 0x8f, 0x19, + 0xd2, 0x48, 0x8a, 0x37, 0x95, 0xcb, 0xb0, 0x12, 0x86, 0x0b, 0x79, 0xe4, 0x1b, 0x52, 0x20, 0xa0, + 0x86, 0x27, 0xd8, 0x71, 0xe9, 0xe9, 0x17, 0x86, 0x62, 0x8a, 0x5e, 0x83, 0x12, 0xdb, 0x8e, 0xaa, + 0xf7, 0x9c, 0xa2, 0x51, 0x46, 0x59, 0x61, 0xc2, 0x07, 0x42, 0x69, 0x03, 0x8a, 0xf6, 0x8e, 0xed, + 0xab, 0xa4, 0x99, 0x0a, 0xd8, 0x3b, 0xb6, 0x50, 0x90, 0x7f, 0x04, 0xd5, 0x49, 0xf4, 0x40, 0x55, + 0x48, 0x3f, 0xc2, 0x67, 0xe2, 0x7d, 0x74, 0x88, 0xd6, 0xc4, 0xb2, 0xd8, 0x3b, 0x24, 0x45, 0xac, + 0xf1, 0xaf, 0x29, 0xdf, 0xd8, 0x87, 0x0d, 0x74, 0x0b, 0x32, 0x14, 0x85, 0x05, 0xa0, 0xd6, 0xb7, + 0x38, 0x44, 0x6f, 0x79, 0x10, 0xbd, 0x75, 0xe4, 0x41, 0x74, 0xa3, 0xf0, 0xf5, 0xd3, 0x8d, 0xc4, + 0x97, 0x7f, 0xdf, 0x48, 0x2a, 0xcc, 0x02, 0xbd, 0x44, 0x4f, 0xb9, 0x66, 0x98, 0xaa, 0xa1, 0x8b, + 0xf7, 0xe4, 0xd9, 0x7c, 0x4f, 0x47, 0x77, 0xa1, 0xda, 0xb3, 0x4c, 0x17, 0x9b, 0xee, 0xd8, 0x55, + 0x79, 0x0a, 0x10, 0x30, 0x3a, 0x7d, 0x0a, 0x9b, 0x9e, 0xe2, 0x01, 0xd3, 0x53, 0x2a, 0xbd, 0xa8, + 0x00, 0xdd, 0x01, 0x38, 0xd1, 0x86, 0x86, 0xae, 0x11, 0xcb, 0x71, 0x6b, 0x99, 0xcd, 0xf4, 0x4c, + 0x37, 0x0f, 0x3c, 0x95, 0xfb, 0xb6, 0xae, 0x11, 0xdc, 0xc8, 0xd0, 0x5f, 0xab, 0x84, 0x2c, 0xd1, + 0xeb, 0x50, 0xd1, 0x6c, 0x5b, 0x75, 0x89, 0x46, 0xb0, 0xda, 0x3d, 0x23, 0xd8, 0x65, 0xe0, 0xba, + 0xa2, 0x94, 0x34, 0xdb, 0x3e, 0xa4, 0xd2, 0x06, 0x15, 0xa2, 0xcb, 0x50, 0xa6, 0x40, 0x6a, 0x68, + 0x43, 0x75, 0x80, 0x8d, 0xfe, 0x80, 0x30, 0x10, 0x4d, 0x2b, 0x25, 0x21, 0x6d, 0x33, 0xa1, 0xac, + 0xfb, 0x1b, 0x81, 0x81, 0x28, 0x42, 0x90, 0xd1, 0x35, 0xa2, 0xb1, 0x40, 0xae, 0x28, 0x6c, 0x4c, + 0x65, 0xb6, 0x46, 0x06, 0x22, 0x3c, 0x6c, 0x8c, 0x2e, 0x42, 0x4e, 0xb8, 0x4d, 0x33, 0xb7, 0x62, + 0x46, 0xbf, 0x99, 0xed, 0x58, 0x27, 0x98, 0x65, 0x8d, 0x82, 0xc2, 0x27, 0xf2, 0x6f, 0x53, 0xb0, + 0x3a, 0x05, 0xb7, 0xd4, 0xef, 0x40, 0x73, 0x07, 0xde, 0xbb, 0xe8, 0x18, 0xdd, 0xa4, 0x7e, 0x35, + 0x1d, 0x3b, 0x22, 0xcd, 0xd5, 0xc2, 0x21, 0xe2, 0x29, 0xbc, 0xcd, 0x9e, 0x8b, 0xd0, 0x08, 0x6d, + 0xd4, 0x81, 0xea, 0x50, 0x73, 0x89, 0xca, 0xe1, 0x4b, 0x0d, 0xa5, 0xbc, 0x69, 0xd0, 0xbe, 0xa7, + 0x79, 0x80, 0x47, 0x37, 0xbb, 0x70, 0x54, 0x1e, 0x46, 0xa4, 0x48, 0x81, 0xb5, 0xee, 0xd9, 0xe7, + 0x9a, 0x49, 0x0c, 0x13, 0xab, 0x53, 0x5f, 0xee, 0xa5, 0x29, 0xa7, 0xad, 0x13, 0x43, 0xc7, 0x66, + 0xcf, 0xfb, 0x64, 0x17, 0x7c, 0x63, 0xff, 0x93, 0xba, 0xb2, 0x02, 0xe5, 0x68, 0xc2, 0x40, 0x65, + 0x48, 0x91, 0x53, 0x11, 0x80, 0x14, 0x39, 0x45, 0xdf, 0x87, 0x0c, 0x5d, 0x24, 0x5b, 0x7c, 0x79, + 0x46, 0xb6, 0x16, 0x76, 0x47, 0x67, 0x36, 0x56, 0x98, 0xa6, 0x2c, 0xfb, 0xa7, 0xc1, 0x4f, 0x22, + 0x93, 0x5e, 0xe5, 0xab, 0x50, 0x99, 0xc8, 0x12, 0xa1, 0xef, 0x97, 0x0c, 0x7f, 0x3f, 0xb9, 0x02, + 0xa5, 0x48, 0x4a, 0x90, 0x2f, 0xc2, 0xda, 0x2c, 0x84, 0x97, 0x07, 0xbe, 0x3c, 0x82, 0xd4, 0xe8, + 0x06, 0x14, 0x7c, 0x88, 0xe7, 0xa7, 0x71, 0x3a, 0x56, 0x9e, 0xb2, 0xe2, 0xab, 0xd2, 0x63, 0x48, + 0xb7, 0x35, 0xdb, 0x0f, 0x29, 0xf6, 0xc3, 0xf3, 0x9a, 0x6d, 0xb7, 0x35, 0x77, 0x20, 0x7f, 0x02, + 0xb5, 0x38, 0xf8, 0x9e, 0x58, 0x46, 0xc6, 0xdf, 0x86, 0x17, 0x21, 0x77, 0x6c, 0x39, 0x23, 0x8d, + 0x30, 0x67, 0x25, 0x45, 0xcc, 0xe8, 0xf6, 0xe4, 0x50, 0x9e, 0x66, 0x62, 0x3e, 0x91, 0x55, 0x78, + 0x29, 0x16, 0xc2, 0xa9, 0x89, 0x61, 0xea, 0x98, 0xc7, 0xb3, 0xa4, 0xf0, 0x49, 0xe0, 0x88, 0xff, + 0x58, 0x3e, 0xa1, 0xaf, 0x75, 0xd9, 0x5a, 0x99, 0x7f, 0x49, 0x11, 0x33, 0xf9, 0x8a, 0x1f, 0xac, + 0x08, 0x92, 0x53, 0xcc, 0xa3, 0xe8, 0x9f, 0xdc, 0x4c, 0x5f, 0x59, 0x51, 0xe8, 0x50, 0xfe, 0xa3, + 0x04, 0x05, 0x05, 0xbb, 0x36, 0x45, 0x0f, 0xd4, 0x00, 0x09, 0x9f, 0xf6, 0x30, 0xa7, 0x61, 0xc9, + 0x58, 0x1a, 0xc3, 0xb5, 0x5b, 0x9e, 0x26, 0xe5, 0x10, 0xbe, 0x19, 0xba, 0x2e, 0xa8, 0x66, 0x3c, + 0x6b, 0x14, 0xe6, 0x61, 0xae, 0x79, 0xd3, 0xe3, 0x9a, 0xe9, 0x58, 0xda, 0xc0, 0xad, 0x26, 0xc8, + 0xe6, 0x75, 0x41, 0x36, 0x33, 0x0b, 0x5e, 0x16, 0x61, 0x9b, 0xcd, 0x08, 0xdb, 0xcc, 0x2e, 0x58, + 0x66, 0x0c, 0xdd, 0x6c, 0x46, 0xe8, 0x66, 0x6e, 0x81, 0x93, 0x18, 0xbe, 0x79, 0xd3, 0xe3, 0x9b, + 0xf9, 0x05, 0xcb, 0x9e, 0x20, 0x9c, 0x77, 0xa2, 0x84, 0x93, 0x93, 0xc5, 0xd7, 0x62, 0xad, 0x63, + 0x19, 0xe7, 0x8f, 0x43, 0x8c, 0x53, 0x8a, 0xa5, 0x7b, 0xdc, 0xc9, 0x0c, 0xca, 0xd9, 0x8c, 0x50, + 0x4e, 0x58, 0x10, 0x83, 0x18, 0xce, 0xf9, 0x5e, 0x98, 0x73, 0x16, 0x63, 0x69, 0xab, 0xd8, 0x34, + 0xb3, 0x48, 0xe7, 0x6d, 0x9f, 0x74, 0xae, 0xc4, 0xb2, 0x66, 0xb1, 0x86, 0x49, 0xd6, 0xd9, 0x99, + 0x62, 0x9d, 0x9c, 0x25, 0xbe, 0x1e, 0xeb, 0x62, 0x01, 0xed, 0xec, 0x4c, 0xd1, 0xce, 0xf2, 0x02, + 0x87, 0x0b, 0x78, 0xe7, 0xaf, 0x67, 0xf3, 0xce, 0x78, 0x66, 0x28, 0x7e, 0xe6, 0x72, 0xc4, 0x53, + 0x8d, 0x21, 0x9e, 0x55, 0xe6, 0xfe, 0x8d, 0x58, 0xf7, 0x4b, 0x33, 0xcf, 0x4e, 0x0c, 0xf3, 0x8c, + 0x8f, 0xc7, 0xb2, 0xd4, 0xf3, 0x2a, 0xcd, 0xf0, 0x13, 0x48, 0x44, 0x51, 0x12, 0x3b, 0x8e, 0xe5, + 0x08, 0x56, 0xc7, 0x27, 0xf2, 0x15, 0xca, 0x39, 0x02, 0xd4, 0x99, 0x43, 0x53, 0x59, 0x36, 0x0a, + 0x21, 0x8d, 0xfc, 0xa7, 0x64, 0x60, 0xcb, 0xd2, 0x74, 0x98, 0xaf, 0x48, 0x82, 0xaf, 0x84, 0xd8, + 0x6b, 0x2a, 0xca, 0x5e, 0x37, 0xa0, 0x48, 0xb3, 0xcc, 0x04, 0x31, 0xd5, 0x6c, 0x8f, 0x98, 0xa2, + 0x6b, 0xb0, 0xca, 0x68, 0x04, 0xe7, 0xb8, 0x22, 0xb5, 0x64, 0x58, 0x86, 0xac, 0xd0, 0x07, 0x7c, + 0xb7, 0xf3, 0x1c, 0xf3, 0x16, 0x5c, 0x08, 0xe9, 0xfa, 0xd9, 0x8b, 0xb3, 0xb1, 0xaa, 0xaf, 0xbd, + 0x2b, 0xd2, 0xd8, 0x87, 0x41, 0x80, 0x02, 0xd2, 0x8b, 0x20, 0xd3, 0xb3, 0x74, 0x2c, 0x72, 0x0b, + 0x1b, 0xd3, 0xa4, 0x30, 0xb4, 0xfa, 0x22, 0x83, 0xd0, 0x21, 0xd5, 0xf2, 0x61, 0x55, 0xe2, 0xa8, + 0x29, 0xff, 0x25, 0x19, 0xf8, 0x0b, 0x78, 0xf0, 0x2c, 0xca, 0x9a, 0xfc, 0xdf, 0x50, 0xd6, 0xd4, + 0xb7, 0xa6, 0xac, 0xe1, 0xdc, 0x9e, 0x8e, 0xe6, 0xf6, 0x7f, 0x27, 0x83, 0x2f, 0xec, 0x13, 0xd0, + 0x6f, 0x17, 0x91, 0x20, 0x51, 0x67, 0xd9, 0xf7, 0x12, 0x89, 0x5a, 0x94, 0x15, 0x39, 0xf6, 0xde, + 0x68, 0x59, 0x91, 0xe7, 0xa9, 0x9b, 0x4d, 0xd0, 0x2d, 0x90, 0x58, 0xff, 0x48, 0xb5, 0x6c, 0x57, + 0x20, 0xf8, 0xcb, 0xe1, 0xb5, 0xf2, 0x36, 0xd1, 0xd6, 0x01, 0xd5, 0xe9, 0xd8, 0xae, 0x52, 0xb0, + 0xc5, 0x28, 0xc4, 0x41, 0xa4, 0x08, 0x15, 0xbe, 0x04, 0x12, 0xfd, 0xf5, 0xae, 0xad, 0xf5, 0x30, + 0x43, 0x63, 0x49, 0x09, 0x04, 0xf2, 0x43, 0x40, 0xd3, 0xf9, 0x00, 0xb5, 0x21, 0x87, 0x4f, 0xb0, + 0x49, 0x38, 0x27, 0x28, 0xee, 0x5c, 0x9c, 0xc1, 0x33, 0xb1, 0x49, 0x1a, 0x35, 0x1a, 0xe4, 0x7f, + 0x3d, 0xdd, 0xa8, 0x72, 0xed, 0x37, 0xad, 0x91, 0x41, 0xf0, 0xc8, 0x26, 0x67, 0x8a, 0xb0, 0x97, + 0xbf, 0x48, 0x51, 0xd2, 0x17, 0xc9, 0x15, 0x33, 0x63, 0xeb, 0x1d, 0xa0, 0x54, 0x88, 0xf0, 0x2f, + 0x17, 0xef, 0x75, 0x80, 0xbe, 0xe6, 0xaa, 0x8f, 0x35, 0x93, 0x60, 0x5d, 0x04, 0x3d, 0x24, 0x41, + 0x75, 0x28, 0xd0, 0xd9, 0xd8, 0xc5, 0xba, 0xa8, 0x3d, 0xfc, 0x79, 0x68, 0x9d, 0xf9, 0xef, 0xb6, + 0xce, 0x68, 0x94, 0x0b, 0x93, 0x51, 0xfe, 0x5d, 0x2a, 0x38, 0x25, 0x01, 0x3f, 0xfe, 0xff, 0x8b, + 0xc3, 0xef, 0x59, 0xd1, 0x1c, 0x4d, 0xda, 0xe8, 0x10, 0x56, 0xfd, 0x53, 0xaa, 0x8e, 0xd9, 0xe9, + 0xf5, 0xf6, 0xdd, 0xb2, 0xc7, 0xbc, 0x7a, 0x12, 0x15, 0xbb, 0xe8, 0xe7, 0xf0, 0xe2, 0x04, 0x02, + 0xf9, 0xae, 0x53, 0x4b, 0x02, 0xd1, 0x0b, 0x51, 0x20, 0xf2, 0x3c, 0x07, 0xb1, 0x4a, 0x7f, 0xc7, + 0xb3, 0xb1, 0x47, 0xeb, 0xb0, 0x30, 0x05, 0x99, 0xf9, 0xf5, 0x5f, 0x83, 0x92, 0x83, 0x89, 0x66, + 0x98, 0x6a, 0xa4, 0xd2, 0x5d, 0xe1, 0x42, 0x51, 0x3f, 0x1f, 0xc0, 0x0b, 0x33, 0xa9, 0x08, 0xfa, + 0x21, 0x48, 0x01, 0x8b, 0x49, 0xc6, 0x14, 0x8d, 0x7e, 0x21, 0x14, 0xe8, 0xca, 0x7f, 0x4e, 0x06, + 0x2e, 0xa3, 0xa5, 0x55, 0x0b, 0x72, 0x0e, 0x76, 0xc7, 0x43, 0x5e, 0xec, 0x94, 0x77, 0xde, 0x5a, + 0x8e, 0xc4, 0x50, 0xe9, 0x78, 0x48, 0x14, 0x61, 0x2c, 0x3f, 0x84, 0x1c, 0x97, 0xa0, 0x22, 0xe4, + 0xef, 0xef, 0xdf, 0xdd, 0xef, 0x7c, 0xb4, 0x5f, 0x4d, 0x20, 0x80, 0xdc, 0x6e, 0xb3, 0xd9, 0x3a, + 0x38, 0xaa, 0x26, 0x91, 0x04, 0xd9, 0xdd, 0x46, 0x47, 0x39, 0xaa, 0xa6, 0xa8, 0x58, 0x69, 0x7d, + 0xd0, 0x6a, 0x1e, 0x55, 0xd3, 0x68, 0x15, 0x4a, 0x7c, 0xac, 0xde, 0xe9, 0x28, 0x1f, 0xee, 0x1e, + 0x55, 0x33, 0x21, 0xd1, 0x61, 0x6b, 0xff, 0xfd, 0x96, 0x52, 0xcd, 0xca, 0x3f, 0xa0, 0xd5, 0x54, + 0x0c, 0xed, 0x09, 0xea, 0xa6, 0x64, 0xa8, 0x6e, 0x92, 0xff, 0x90, 0x82, 0x7a, 0x3c, 0x97, 0x41, + 0x1f, 0x4c, 0x2c, 0x7c, 0xe7, 0x1c, 0x44, 0x68, 0x62, 0xf5, 0xe8, 0x32, 0x94, 0x1d, 0x7c, 0x8c, + 0x49, 0x6f, 0xc0, 0xb9, 0x15, 0x4f, 0x6c, 0x25, 0xa5, 0x24, 0xa4, 0xcc, 0xc8, 0xe5, 0x6a, 0x9f, + 0xe2, 0x1e, 0x51, 0x79, 0x09, 0xc7, 0x37, 0x9d, 0x44, 0xd5, 0xa8, 0xf4, 0x90, 0x0b, 0xe5, 0x4f, + 0xce, 0x15, 0x4b, 0x09, 0xb2, 0x4a, 0xeb, 0x48, 0xf9, 0x45, 0x35, 0x8d, 0x10, 0x94, 0xd9, 0x50, + 0x3d, 0xdc, 0xdf, 0x3d, 0x38, 0x6c, 0x77, 0x68, 0x2c, 0x2f, 0x40, 0xc5, 0x8b, 0xa5, 0x27, 0xcc, + 0xca, 0x57, 0x83, 0xdd, 0xb0, 0xa8, 0x76, 0xfc, 0x4f, 0x12, 0x2a, 0x13, 0x67, 0x09, 0xed, 0x40, + 0x96, 0x53, 0xf9, 0xb8, 0xab, 0x06, 0x06, 0x05, 0xe2, 0xe0, 0x71, 0x55, 0xf4, 0x0e, 0x14, 0xb0, + 0xe8, 0x66, 0xcc, 0x3a, 0xb3, 0xbc, 0x0b, 0xe3, 0xf5, 0x3b, 0x84, 0xa9, 0x6f, 0x81, 0xde, 0x05, + 0xc9, 0x07, 0x05, 0x51, 0x3f, 0xbe, 0x3a, 0x6d, 0xee, 0xc3, 0x89, 0xb0, 0x0f, 0x6c, 0xd0, 0xed, + 0x80, 0xbe, 0x65, 0xa6, 0x0b, 0x08, 0x61, 0xce, 0x15, 0x84, 0xb1, 0xa7, 0x2f, 0x37, 0xa1, 0x18, + 0x5a, 0x0f, 0x7a, 0x19, 0xa4, 0x91, 0x76, 0x2a, 0xba, 0x64, 0xbc, 0xcf, 0x51, 0x18, 0x69, 0xa7, + 0xbc, 0x41, 0xf6, 0x22, 0xe4, 0xe9, 0xc3, 0xbe, 0xc6, 0x81, 0x29, 0xad, 0xe4, 0x46, 0xda, 0xe9, + 0x4f, 0x35, 0x57, 0xfe, 0x18, 0xca, 0xd1, 0x0e, 0x11, 0xdd, 0xb4, 0x8e, 0x35, 0x36, 0x75, 0xe6, + 0x23, 0xab, 0xf0, 0x09, 0xba, 0x01, 0xd9, 0x13, 0x8b, 0xe3, 0xda, 0xec, 0xd3, 0xfd, 0xc0, 0x22, + 0x38, 0xd4, 0x61, 0xe2, 0xda, 0xf2, 0xe7, 0x90, 0x65, 0x38, 0x45, 0x31, 0x87, 0xf5, 0x7a, 0x04, + 0x75, 0xa5, 0x63, 0xf4, 0x31, 0x80, 0x46, 0x88, 0x63, 0x74, 0xc7, 0x81, 0xe3, 0x8d, 0xd9, 0x38, + 0xb7, 0xeb, 0xe9, 0x35, 0x2e, 0x09, 0xc0, 0x5b, 0x0b, 0x4c, 0x43, 0xa0, 0x17, 0x72, 0x28, 0xef, + 0x43, 0x39, 0x6a, 0x1b, 0xee, 0xba, 0xae, 0xcc, 0xe8, 0xba, 0xfa, 0xf4, 0xc8, 0x27, 0x57, 0x69, + 0xde, 0xd7, 0x63, 0x13, 0xf9, 0x49, 0x12, 0x0a, 0x47, 0xa7, 0xe2, 0x04, 0xc4, 0xb4, 0x94, 0x02, + 0xd3, 0x54, 0xb8, 0x81, 0xc2, 0x7b, 0x54, 0x69, 0xbf, 0xf3, 0xf5, 0x9e, 0x7f, 0xc6, 0x33, 0xcb, + 0x16, 0xae, 0x5e, 0x0b, 0x50, 0xe0, 0xda, 0xdb, 0x20, 0xf9, 0xbb, 0x8a, 0xd6, 0x00, 0x9a, 0xae, + 0x3b, 0xd8, 0x75, 0xc5, 0xda, 0xbc, 0x29, 0xeb, 0x50, 0x5a, 0x8f, 0x45, 0x8b, 0x26, 0xad, 0xf0, + 0x89, 0xac, 0x43, 0x65, 0x22, 0xc3, 0xa1, 0xb7, 0x21, 0x6f, 0x8f, 0xbb, 0xaa, 0x17, 0x9e, 0x89, + 0xc3, 0xe3, 0xf1, 0xc1, 0x71, 0x77, 0x68, 0xf4, 0xee, 0xe2, 0x33, 0xef, 0xc7, 0xd8, 0xe3, 0xee, + 0x5d, 0x1e, 0x45, 0xfe, 0x96, 0x54, 0xf8, 0x2d, 0x27, 0x50, 0xf0, 0x36, 0x05, 0xfa, 0x49, 0xf8, + 0x9c, 0x78, 0x7d, 0xeb, 0xd8, 0xac, 0x2b, 0xdc, 0x87, 0x8e, 0xc9, 0x35, 0x58, 0x75, 0x8d, 0xbe, + 0x89, 0x75, 0x35, 0xa8, 0x42, 0xd8, 0xdb, 0x0a, 0x4a, 0x85, 0x3f, 0xb8, 0xe7, 0x95, 0x20, 0xf2, + 0xd3, 0x24, 0x14, 0xbc, 0x03, 0x3b, 0x73, 0xdf, 0x45, 0x7e, 0x4c, 0xea, 0xfc, 0x3f, 0x26, 0xae, + 0x1d, 0xec, 0xf5, 0xe5, 0x33, 0xe7, 0xee, 0xcb, 0xbf, 0x09, 0x88, 0x58, 0x44, 0x1b, 0xaa, 0x27, + 0x16, 0x31, 0xcc, 0xbe, 0xca, 0xa3, 0xc9, 0xd9, 0x55, 0x95, 0x3d, 0x79, 0xc0, 0x1e, 0x1c, 0xb0, + 0xc0, 0xfe, 0x26, 0x09, 0x05, 0x3f, 0x4f, 0x9e, 0xb7, 0x29, 0x78, 0x11, 0x72, 0x22, 0x15, 0xf0, + 0xae, 0xa0, 0x98, 0xf9, 0xfd, 0xe9, 0x4c, 0xa8, 0x3f, 0x5d, 0x87, 0xc2, 0x08, 0x13, 0x8d, 0x91, + 0x05, 0x5e, 0xe9, 0xf9, 0xf3, 0x6b, 0xb7, 0xa1, 0x18, 0xea, 0xcf, 0xd2, 0xa3, 0xb5, 0xdf, 0xfa, + 0xa8, 0x9a, 0xa8, 0xe7, 0x9f, 0x7c, 0xb5, 0x99, 0xde, 0xc7, 0x8f, 0xe9, 0xa6, 0x54, 0x5a, 0xcd, + 0x76, 0xab, 0x79, 0xb7, 0x9a, 0xac, 0x17, 0x9f, 0x7c, 0xb5, 0x99, 0x57, 0x30, 0x6b, 0xde, 0xec, + 0x7c, 0x01, 0x50, 0xd9, 0x6d, 0x34, 0xf7, 0x68, 0xfe, 0x32, 0x7a, 0x9a, 0x68, 0x69, 0x65, 0x58, + 0x79, 0x3c, 0xf7, 0x7a, 0xb8, 0x3e, 0xbf, 0xa3, 0x87, 0xee, 0x40, 0x96, 0x55, 0xce, 0x68, 0xfe, + 0x7d, 0x71, 0x7d, 0x41, 0x8b, 0x8f, 0xfe, 0x18, 0xb6, 0x6b, 0xe7, 0x5e, 0x20, 0xd7, 0xe7, 0x77, + 0xfc, 0x90, 0x02, 0x52, 0x50, 0xfa, 0x2e, 0xbe, 0x50, 0xae, 0x2f, 0xd1, 0x05, 0xa4, 0x3e, 0x03, + 0x62, 0xbf, 0xf8, 0x82, 0xb5, 0xbe, 0x04, 0xae, 0xa0, 0x7b, 0x90, 0xf7, 0x4a, 0xa6, 0x45, 0x57, + 0xbe, 0xf5, 0x85, 0x1d, 0x3a, 0xfa, 0x09, 0x78, 0x69, 0x3b, 0xff, 0xfe, 0xba, 0xbe, 0xa0, 0xdd, + 0x88, 0xf6, 0x20, 0x27, 0xd8, 0xea, 0x82, 0x6b, 0xdc, 0xfa, 0xa2, 0x8e, 0x1b, 0x0d, 0x5a, 0xd0, + 0x33, 0x58, 0x7c, 0x2b, 0x5f, 0x5f, 0xa2, 0x93, 0x8a, 0xee, 0x03, 0x84, 0x0a, 0xd9, 0x25, 0xae, + 0xdb, 0xeb, 0xcb, 0x74, 0x48, 0x51, 0x07, 0x0a, 0x7e, 0xc1, 0xb2, 0xf0, 0xf2, 0xbb, 0xbe, 0xb8, + 0x55, 0x89, 0x1e, 0x42, 0x29, 0xca, 0xd4, 0x97, 0xbb, 0xd2, 0xae, 0x2f, 0xd9, 0x83, 0xa4, 0xfe, + 0xa3, 0xb4, 0x7d, 0xb9, 0x2b, 0xee, 0xfa, 0x92, 0x2d, 0x49, 0xf4, 0x29, 0xac, 0x4e, 0xd3, 0xea, + 0xe5, 0x6f, 0xbc, 0xeb, 0xe7, 0x68, 0x52, 0xa2, 0x11, 0xa0, 0x19, 0x74, 0xfc, 0x1c, 0x17, 0xe0, + 0xf5, 0xf3, 0xf4, 0x2c, 0x1b, 0xad, 0xaf, 0x9f, 0xad, 0x27, 0xbf, 0x79, 0xb6, 0x9e, 0xfc, 0xc7, + 0xb3, 0xf5, 0xe4, 0x97, 0xcf, 0xd7, 0x13, 0xdf, 0x3c, 0x5f, 0x4f, 0xfc, 0xed, 0xf9, 0x7a, 0xe2, + 0x97, 0x6f, 0xf4, 0x0d, 0x32, 0x18, 0x77, 0xb7, 0x7a, 0xd6, 0x68, 0x3b, 0xfc, 0xef, 0x9c, 0x59, + 0xff, 0x18, 0xea, 0xe6, 0x58, 0x7a, 0xb9, 0xfe, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x6a, + 0x71, 0x16, 0x51, 0x24, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4272,6 +4392,29 @@ func (m *Request_ApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, err } return len(dAtA) - i, nil } +func (m *Request_PreprocessTxs) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Request_PreprocessTxs) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.PreprocessTxs != nil { + { + size, err := m.PreprocessTxs.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } + return len(dAtA) - i, nil +} func (m *RequestEcho) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -4467,12 +4610,12 @@ func (m *RequestInitChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - n17, err17 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err17 != nil { - return 0, err17 + n18, err18 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err18 != nil { + return 0, err18 } - i -= n17 - i = encodeVarintTypes(dAtA, i, uint64(n17)) + i -= n18 + i = encodeVarintTypes(dAtA, i, uint64(n18)) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -4855,6 +4998,38 @@ func (m *RequestApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } +func (m *RequestPreprocessTxs) 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 *RequestPreprocessTxs) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RequestPreprocessTxs) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Txs) > 0 { + for iNdEx := len(m.Txs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Txs[iNdEx]) + copy(dAtA[i:], m.Txs[iNdEx]) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Txs[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *Response) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5225,6 +5400,29 @@ func (m *Response_ApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, er } return len(dAtA) - i, nil } +func (m *Response_PreprocessTxs) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Response_PreprocessTxs) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.PreprocessTxs != nil { + { + size, err := m.PreprocessTxs.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } + return len(dAtA) - i, nil +} func (m *ResponseException) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5965,20 +6163,20 @@ func (m *ResponseApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, err } } if len(m.RefetchChunks) > 0 { - dAtA41 := make([]byte, len(m.RefetchChunks)*10) - var j40 int + dAtA43 := make([]byte, len(m.RefetchChunks)*10) + var j42 int for _, num := range m.RefetchChunks { for num >= 1<<7 { - dAtA41[j40] = uint8(uint64(num)&0x7f | 0x80) + dAtA43[j42] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j40++ + j42++ } - dAtA41[j40] = uint8(num) - j40++ + dAtA43[j42] = uint8(num) + j42++ } - i -= j40 - copy(dAtA[i:], dAtA41[:j40]) - i = encodeVarintTypes(dAtA, i, uint64(j40)) + i -= j42 + copy(dAtA[i:], dAtA43[:j42]) + i = encodeVarintTypes(dAtA, i, uint64(j42)) i-- dAtA[i] = 0x12 } @@ -5990,6 +6188,38 @@ func (m *ResponseApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *ResponsePreprocessTxs) 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 *ResponsePreprocessTxs) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResponsePreprocessTxs) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Txs) > 0 { + for iNdEx := len(m.Txs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Txs[iNdEx]) + copy(dAtA[i:], m.Txs[iNdEx]) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Txs[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *ConsensusParams) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6418,12 +6648,12 @@ func (m *Evidence) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x28 } - n49, err49 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err49 != nil { - return 0, err49 + n51, err51 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err51 != nil { + return 0, err51 } - i -= n49 - i = encodeVarintTypes(dAtA, i, uint64(n49)) + i -= n51 + i = encodeVarintTypes(dAtA, i, uint64(n51)) i-- dAtA[i] = 0x22 if m.Height != 0 { @@ -6706,6 +6936,18 @@ func (m *Request_ApplySnapshotChunk) Size() (n int) { } return n } +func (m *Request_PreprocessTxs) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PreprocessTxs != nil { + l = m.PreprocessTxs.Size() + n += 2 + l + sovTypes(uint64(l)) + } + return n +} func (m *RequestEcho) Size() (n int) { if m == nil { return 0 @@ -6956,6 +7198,21 @@ func (m *RequestApplySnapshotChunk) Size() (n int) { return n } +func (m *RequestPreprocessTxs) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Txs) > 0 { + for _, b := range m.Txs { + l = len(b) + n += 1 + l + sovTypes(uint64(l)) + } + } + return n +} + func (m *Response) Size() (n int) { if m == nil { return 0 @@ -7160,6 +7417,18 @@ func (m *Response_ApplySnapshotChunk) Size() (n int) { } return n } +func (m *Response_PreprocessTxs) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PreprocessTxs != nil { + l = m.PreprocessTxs.Size() + n += 2 + l + sovTypes(uint64(l)) + } + return n +} func (m *ResponseException) Size() (n int) { if m == nil { return 0 @@ -7508,6 +7777,21 @@ func (m *ResponseApplySnapshotChunk) Size() (n int) { return n } +func (m *ResponsePreprocessTxs) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Txs) > 0 { + for _, b := range m.Txs { + l = len(b) + n += 1 + l + sovTypes(uint64(l)) + } + } + return n +} + func (m *ConsensusParams) Size() (n int) { if m == nil { return 0 @@ -8279,6 +8563,41 @@ func (m *Request) Unmarshal(dAtA []byte) error { } m.Value = &Request_ApplySnapshotChunk{v} iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreprocessTxs", 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 := &RequestPreprocessTxs{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Value = &Request_PreprocessTxs{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -10009,6 +10328,91 @@ func (m *RequestApplySnapshotChunk) Unmarshal(dAtA []byte) error { } return nil } +func (m *RequestPreprocessTxs) 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: RequestPreprocessTxs: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RequestPreprocessTxs: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Txs", 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.Txs = append(m.Txs, make([]byte, postIndex-iNdEx)) + copy(m.Txs[len(m.Txs)-1], dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (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 @@ -10598,6 +11002,41 @@ func (m *Response) Unmarshal(dAtA []byte) error { } m.Value = &Response_ApplySnapshotChunk{v} iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreprocessTxs", 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 := &ResponsePreprocessTxs{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Value = &Response_PreprocessTxs{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -12961,6 +13400,91 @@ func (m *ResponseApplySnapshotChunk) Unmarshal(dAtA []byte) error { } return nil } +func (m *ResponsePreprocessTxs) 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: ResponsePreprocessTxs: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResponsePreprocessTxs: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Txs", 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.Txs = append(m.Txs, make([]byte, postIndex-iNdEx)) + copy(m.Txs[len(m.Txs)-1], dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ConsensusParams) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index c08cca2bdc..ba24f347ae 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -36,6 +36,7 @@ message Request { RequestOfferSnapshot offer_snapshot = 13; RequestLoadSnapshotChunk load_snapshot_chunk = 14; RequestApplySnapshotChunk apply_snapshot_chunk = 15; + RequestPreprocessTxs preprocess_txs = 17; } } @@ -125,6 +126,10 @@ message RequestApplySnapshotChunk { string sender = 3; } +message RequestPreprocessTxs { + repeated bytes txs = 1; +} + //---------------------------------------- // Response types @@ -146,6 +151,7 @@ message Response { ResponseOfferSnapshot offer_snapshot = 14; ResponseLoadSnapshotChunk load_snapshot_chunk = 15; ResponseApplySnapshotChunk apply_snapshot_chunk = 16; + ResponsePreprocessTxs preprocess_txs = 17; } } @@ -276,6 +282,10 @@ message ResponseApplySnapshotChunk { } } +message ResponsePreprocessTxs { + repeated bytes txs = 1; +} + //---------------------------------------- // Misc. @@ -334,9 +344,9 @@ message TxResult { // Validator message Validator { - bytes address = 1; // The first 20 bytes of SHA256(public key) + bytes address = 1; // The first 20 bytes of SHA256(public key) // PubKey pub_key = 2 [(gogoproto.nullable)=false]; - int64 power = 3; // The voting power + int64 power = 3; // The voting power } // ValidatorUpdate @@ -352,13 +362,13 @@ message VoteInfo { } message Evidence { - string type = 1; + string type = 1; // The offending validator - Validator validator = 2 [(gogoproto.nullable) = false]; - // The height when the offense occurred - int64 height = 3; + Validator validator = 2 [(gogoproto.nullable) = false]; + // The height when the offense occurred + int64 height = 3; // The corresponding time where the offense occurred - google.protobuf.Timestamp time = 4 [ + google.protobuf.Timestamp time = 4 [ (gogoproto.nullable) = false, (gogoproto.stdtime) = true ]; From 682a16d2a7934530f56b6649436d46cf74feaf0f Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 21 Aug 2020 16:42:57 +0200 Subject: [PATCH 10/32] changes to abci --- abci/client/client.go | 2 + abci/client/grpc_client.go | 15 + abci/client/local_client.go | 20 ++ abci/client/socket_client.go | 11 + abci/example/kvstore/persistent_kvstore.go | 5 + abci/types/application.go | 4 +- abci/types/messages.go | 12 + abci/types/types.pb.go | 383 +++++++++++---------- proto/tendermint/abci/types.proto | 1 + proxy/app_conn.go | 5 + 10 files changed, 283 insertions(+), 175 deletions(-) diff --git a/abci/client/client.go b/abci/client/client.go index 09583327a8..36ee8161d8 100644 --- a/abci/client/client.go +++ b/abci/client/client.go @@ -40,6 +40,7 @@ type Client interface { OfferSnapshotAsync(types.RequestOfferSnapshot) *ReqRes LoadSnapshotChunkAsync(types.RequestLoadSnapshotChunk) *ReqRes ApplySnapshotChunkAsync(types.RequestApplySnapshotChunk) *ReqRes + PreprocessTxsAsync(types.RequestPreprocessTxs) *ReqRes FlushSync() error EchoSync(msg string) (*types.ResponseEcho, error) @@ -56,6 +57,7 @@ type Client interface { OfferSnapshotSync(types.RequestOfferSnapshot) (*types.ResponseOfferSnapshot, error) LoadSnapshotChunkSync(types.RequestLoadSnapshotChunk) (*types.ResponseLoadSnapshotChunk, error) ApplySnapshotChunkSync(types.RequestApplySnapshotChunk) (*types.ResponseApplySnapshotChunk, error) + PreprocessTxsSync(types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) } //---------------------------------------- diff --git a/abci/client/grpc_client.go b/abci/client/grpc_client.go index bb38bf1581..56e50d9adb 100644 --- a/abci/client/grpc_client.go +++ b/abci/client/grpc_client.go @@ -259,6 +259,15 @@ func (cli *grpcClient) ApplySnapshotChunkAsync(params types.RequestApplySnapshot return cli.finishAsyncCall(req, &types.Response{Value: &types.Response_ApplySnapshotChunk{ApplySnapshotChunk: res}}) } +func (cli *grpcClient) PreprocessTxsAsync(params types.RequestPreprocessTxs) *ReqRes { + req := types.ToRequestPreprocessTxs(params) + res, err := cli.client.PreprocessTxs(context.Background(), req.GetPreprocessTxs(), grpc.WaitForReady(true)) + if err != nil { + cli.StopForError(err) + } + return cli.finishAsyncCall(req, &types.Response{Value: &types.Response_PreprocessTxs{PreprocessTxs: res}}) +} + func (cli *grpcClient) finishAsyncCall(req *types.Request, res *types.Response) *ReqRes { reqres := NewReqRes(req) reqres.Response = res // Set response @@ -362,3 +371,9 @@ func (cli *grpcClient) ApplySnapshotChunkSync( reqres := cli.ApplySnapshotChunkAsync(params) return reqres.Response.GetApplySnapshotChunk(), cli.Error() } + +func (cli *grpcClient) PreprocessTxsSync( + params types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) { + reqres := cli.PreprocessTxsAsync(params) + return reqres.Response.GetPreprocessTxs(), cli.Error() +} diff --git a/abci/client/local_client.go b/abci/client/local_client.go index b3bdc451dc..a8cc046941 100644 --- a/abci/client/local_client.go +++ b/abci/client/local_client.go @@ -201,6 +201,17 @@ func (app *localClient) ApplySnapshotChunkAsync(req types.RequestApplySnapshotCh ) } +func (app *localClient) PreprocessTxsAsync(req types.RequestPreprocessTxs) *ReqRes { + app.mtx.Lock() + defer app.mtx.Unlock() + + res := app.Application.PreprocessTxs(req) + return app.callback( + types.ToRequestPreprocessTxs(req), + types.ToResponsePreprocessTx(res), + ) +} + //------------------------------------------------------- func (app *localClient) FlushSync() error { @@ -317,6 +328,15 @@ func (app *localClient) ApplySnapshotChunkSync( return &res, nil } +func (app *localClient) PreprocessTxsSync( + req types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) { + app.mtx.Lock() + defer app.mtx.Unlock() + + res := app.Application.PreprocessTxs(req) + return &res, nil +} + //------------------------------------------------------- func (app *localClient) callback(req *types.Request, res *types.Response) *ReqRes { diff --git a/abci/client/socket_client.go b/abci/client/socket_client.go index 18ee003d9d..db7aea0f52 100644 --- a/abci/client/socket_client.go +++ b/abci/client/socket_client.go @@ -282,6 +282,10 @@ func (cli *socketClient) ApplySnapshotChunkAsync(req types.RequestApplySnapshotC return cli.queueRequest(types.ToRequestApplySnapshotChunk(req)) } +func (cli *socketClient) PreprocessTxsAsync(req types.RequestPreprocessTxs) *ReqRes { + return cli.queueRequest(types.ToRequestPreprocessTxs(req)) +} + //---------------------------------------- func (cli *socketClient) FlushSync() error { @@ -418,6 +422,13 @@ func (cli *socketClient) ApplySnapshotChunkSync( return reqres.Response.GetApplySnapshotChunk(), cli.Error() } +func (cli *socketClient) PreprocessTxsSync( + req types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) { + reqres := cli.queueRequest(types.ToRequestPreprocessTxs(req)) + cli.FlushSync() + return reqres.Response.GetPreprocessTxs(), cli.Error() +} + //---------------------------------------- func (cli *socketClient) queueRequest(req *types.Request) *ReqRes { diff --git a/abci/example/kvstore/persistent_kvstore.go b/abci/example/kvstore/persistent_kvstore.go index bc2980122a..f6f960048d 100644 --- a/abci/example/kvstore/persistent_kvstore.go +++ b/abci/example/kvstore/persistent_kvstore.go @@ -171,6 +171,11 @@ func (app *PersistentKVStoreApplication) ApplySnapshotChunk( return types.ResponseApplySnapshotChunk{Result: types.ResponseApplySnapshotChunk_ABORT} } +func (app *PersistentKVStoreApplication) PreprocessTxs( + req types.RequestPreprocessTxs) types.ResponsePreprocessTxs { + return types.ResponsePreprocessTxs{} +} + //--------------------------------------------- // update validators diff --git a/abci/types/application.go b/abci/types/application.go index de94890f99..9954907ce3 100644 --- a/abci/types/application.go +++ b/abci/types/application.go @@ -15,7 +15,8 @@ type Application interface { Query(RequestQuery) ResponseQuery // Query for state // Mempool Connection - CheckTx(RequestCheckTx) ResponseCheckTx // Validate a tx for the mempool + CheckTx(RequestCheckTx) ResponseCheckTx // Validate a tx for the mempool + PreprocessTxs(RequestPreprocessTxs) ResponsePreprocessTxs // State machine preprocessing of txs // Consensus Connection InitChain(RequestInitChain) ResponseInitChain // Initialize blockchain w validators/other info from TendermintCore @@ -31,7 +32,6 @@ type Application interface { ApplySnapshotChunk(RequestApplySnapshotChunk) ResponseApplySnapshotChunk // Apply a shapshot chunk // PreProcess Txs - PreprocessTxs(RequestPreprocessTxs) ResponsePreprocessTxs // State machine preprocessing of txs } //------------------------------------------------------- diff --git a/abci/types/messages.go b/abci/types/messages.go index 531f75fed7..06754be814 100644 --- a/abci/types/messages.go +++ b/abci/types/messages.go @@ -159,6 +159,12 @@ func ToRequestApplySnapshotChunk(req RequestApplySnapshotChunk) *Request { } } +func ToRequestPreprocessTxs(res RequestPreprocessTxs) *Request { + return &Request{ + Value: &Request_PreprocessTxs{&res}, + } +} + //---------------------------------------- func ToResponseException(errStr string) *Response { @@ -256,3 +262,9 @@ func ToResponseApplySnapshotChunk(res ResponseApplySnapshotChunk) *Response { Value: &Response_ApplySnapshotChunk{&res}, } } + +func ToResponsePreprocessTx(res ResponsePreprocessTxs) *Response { + return &Response{ + Value: &Response_PreprocessTxs{&res}, + } +} diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index a17db950db..1b6735adce 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -3286,179 +3286,180 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 2742 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcd, 0x77, 0xdb, 0xc6, - 0x11, 0xe7, 0x37, 0x89, 0xa1, 0xf8, 0xa1, 0xb5, 0xe2, 0x30, 0x8c, 0x23, 0x29, 0xc8, 0x73, 0x6a, - 0x3b, 0x89, 0xd4, 0xca, 0xcf, 0xae, 0xdd, 0xa4, 0x4d, 0x44, 0x86, 0x2e, 0x15, 0x3b, 0xa2, 0x0a, - 0xc9, 0x4e, 0xbf, 0x62, 0x04, 0x24, 0x56, 0x24, 0x62, 0x12, 0x40, 0x80, 0xa5, 0x2c, 0xe5, 0xd8, - 0xb4, 0x17, 0xf7, 0x92, 0x63, 0x2f, 0xf9, 0x37, 0xfa, 0x7a, 0xea, 0xa5, 0x97, 0xbc, 0xd7, 0x4b, - 0x8e, 0x3d, 0xb9, 0xad, 0x7d, 0xeb, 0x3f, 0xd0, 0x63, 0xfb, 0xf6, 0x03, 0x5f, 0x24, 0x41, 0x52, - 0x49, 0x6f, 0xbd, 0xed, 0x0e, 0x66, 0x06, 0xdc, 0xc1, 0xee, 0x6f, 0x7e, 0x33, 0x4b, 0x78, 0x99, - 0x60, 0x53, 0xc7, 0xce, 0xc8, 0x30, 0xc9, 0xb6, 0xd6, 0xed, 0x19, 0xdb, 0xe4, 0xcc, 0xc6, 0xee, - 0x96, 0xed, 0x58, 0xc4, 0x42, 0x95, 0xe0, 0xe1, 0x16, 0x7d, 0x58, 0x7f, 0x25, 0xa4, 0xdd, 0x73, - 0xce, 0x6c, 0x62, 0x6d, 0xdb, 0x8e, 0x65, 0x1d, 0x73, 0xfd, 0xfa, 0xa5, 0xd0, 0x63, 0xe6, 0x27, - 0xec, 0x2d, 0xf2, 0x54, 0x18, 0x3f, 0xc2, 0x67, 0xde, 0xd3, 0x57, 0xa6, 0x6c, 0x6d, 0xcd, 0xd1, - 0x46, 0xde, 0xe3, 0x8d, 0xbe, 0x65, 0xf5, 0x87, 0x78, 0x9b, 0xcd, 0xba, 0xe3, 0xe3, 0x6d, 0x62, - 0x8c, 0xb0, 0x4b, 0xb4, 0x91, 0x2d, 0x14, 0xd6, 0xfa, 0x56, 0xdf, 0x62, 0xc3, 0x6d, 0x3a, 0xe2, - 0x52, 0xf9, 0x9f, 0x05, 0xc8, 0x2b, 0xf8, 0xb3, 0x31, 0x76, 0x09, 0xda, 0x81, 0x0c, 0xee, 0x0d, - 0xac, 0x5a, 0x72, 0x33, 0x79, 0xa5, 0xb8, 0x73, 0x69, 0x6b, 0x62, 0x71, 0x5b, 0x42, 0xaf, 0xd5, - 0x1b, 0x58, 0xed, 0x84, 0xc2, 0x74, 0xd1, 0x0d, 0xc8, 0x1e, 0x0f, 0xc7, 0xee, 0xa0, 0x96, 0x62, - 0x46, 0xaf, 0xc4, 0x19, 0xdd, 0xa1, 0x4a, 0xed, 0x84, 0xc2, 0xb5, 0xe9, 0xab, 0x0c, 0xf3, 0xd8, - 0xaa, 0xa5, 0xe7, 0xbf, 0x6a, 0xcf, 0x3c, 0x66, 0xaf, 0xa2, 0xba, 0xa8, 0x01, 0xe0, 0x62, 0xa2, - 0x5a, 0x36, 0x31, 0x2c, 0xb3, 0x96, 0x61, 0x96, 0xaf, 0xc6, 0x59, 0x1e, 0x62, 0xd2, 0x61, 0x8a, - 0xed, 0x84, 0x22, 0xb9, 0xde, 0x84, 0xfa, 0x30, 0x4c, 0x83, 0xa8, 0xbd, 0x81, 0x66, 0x98, 0xb5, - 0xec, 0x7c, 0x1f, 0x7b, 0xa6, 0x41, 0x9a, 0x54, 0x91, 0xfa, 0x30, 0xbc, 0x09, 0x5d, 0xf2, 0x67, - 0x63, 0xec, 0x9c, 0xd5, 0x72, 0xf3, 0x97, 0xfc, 0x33, 0xaa, 0x44, 0x97, 0xcc, 0xb4, 0x51, 0x0b, - 0x8a, 0x5d, 0xdc, 0x37, 0x4c, 0xb5, 0x3b, 0xb4, 0x7a, 0x8f, 0x6a, 0x79, 0x66, 0x2c, 0xc7, 0x19, - 0x37, 0xa8, 0x6a, 0x83, 0x6a, 0xb6, 0x13, 0x0a, 0x74, 0xfd, 0x19, 0x7a, 0x07, 0x0a, 0xbd, 0x01, - 0xee, 0x3d, 0x52, 0xc9, 0x69, 0xad, 0xc0, 0x7c, 0x6c, 0xc4, 0xf9, 0x68, 0x52, 0xbd, 0xa3, 0xd3, - 0x76, 0x42, 0xc9, 0xf7, 0xf8, 0x90, 0xae, 0x5f, 0xc7, 0x43, 0xe3, 0x04, 0x3b, 0xd4, 0x5e, 0x9a, - 0xbf, 0xfe, 0xf7, 0xb9, 0x26, 0xf3, 0x20, 0xe9, 0xde, 0x04, 0xbd, 0x0b, 0x12, 0x36, 0x75, 0xb1, - 0x0c, 0x60, 0x2e, 0x36, 0x63, 0xf7, 0x8a, 0xa9, 0x7b, 0x8b, 0x28, 0x60, 0x31, 0x46, 0xb7, 0x20, - 0xd7, 0xb3, 0x46, 0x23, 0x83, 0xd4, 0x8a, 0xcc, 0x7a, 0x3d, 0x76, 0x01, 0x4c, 0xab, 0x9d, 0x50, - 0x84, 0x3e, 0xda, 0x87, 0xf2, 0xd0, 0x70, 0x89, 0xea, 0x9a, 0x9a, 0xed, 0x0e, 0x2c, 0xe2, 0xd6, - 0x56, 0x98, 0x87, 0xcb, 0x71, 0x1e, 0xee, 0x19, 0x2e, 0x39, 0xf4, 0x94, 0xdb, 0x09, 0xa5, 0x34, - 0x0c, 0x0b, 0xa8, 0x3f, 0xeb, 0xf8, 0x18, 0x3b, 0xbe, 0xc3, 0x5a, 0x69, 0xbe, 0xbf, 0x0e, 0xd5, - 0xf6, 0xec, 0xa9, 0x3f, 0x2b, 0x2c, 0x40, 0xbf, 0x82, 0x0b, 0x43, 0x4b, 0xd3, 0x7d, 0x77, 0x6a, - 0x6f, 0x30, 0x36, 0x1f, 0xd5, 0xca, 0xcc, 0xe9, 0xd5, 0xd8, 0x1f, 0x69, 0x69, 0xba, 0xe7, 0xa2, - 0x49, 0x0d, 0xda, 0x09, 0x65, 0x75, 0x38, 0x29, 0x44, 0x0f, 0x61, 0x4d, 0xb3, 0xed, 0xe1, 0xd9, - 0xa4, 0xf7, 0x0a, 0xf3, 0x7e, 0x2d, 0xce, 0xfb, 0x2e, 0xb5, 0x99, 0x74, 0x8f, 0xb4, 0x29, 0x29, - 0x0d, 0x86, 0xed, 0x60, 0xdb, 0xb1, 0x7a, 0xd8, 0x75, 0x55, 0x72, 0xea, 0xd6, 0x56, 0xe7, 0x07, - 0xe3, 0xc0, 0xd7, 0x3e, 0x3a, 0x65, 0xc1, 0xb5, 0xc3, 0x82, 0x46, 0x1e, 0xb2, 0x27, 0xda, 0x70, - 0x8c, 0xe5, 0xef, 0x41, 0x31, 0x04, 0x1d, 0xa8, 0x06, 0xf9, 0x11, 0x76, 0x5d, 0xad, 0x8f, 0x19, - 0xd2, 0x48, 0x8a, 0x37, 0x95, 0xcb, 0xb0, 0x12, 0x86, 0x0b, 0x79, 0xe4, 0x1b, 0x52, 0x20, 0xa0, - 0x86, 0x27, 0xd8, 0x71, 0xe9, 0xe9, 0x17, 0x86, 0x62, 0x8a, 0x5e, 0x83, 0x12, 0xdb, 0x8e, 0xaa, - 0xf7, 0x9c, 0xa2, 0x51, 0x46, 0x59, 0x61, 0xc2, 0x07, 0x42, 0x69, 0x03, 0x8a, 0xf6, 0x8e, 0xed, - 0xab, 0xa4, 0x99, 0x0a, 0xd8, 0x3b, 0xb6, 0x50, 0x90, 0x7f, 0x04, 0xd5, 0x49, 0xf4, 0x40, 0x55, - 0x48, 0x3f, 0xc2, 0x67, 0xe2, 0x7d, 0x74, 0x88, 0xd6, 0xc4, 0xb2, 0xd8, 0x3b, 0x24, 0x45, 0xac, - 0xf1, 0xaf, 0x29, 0xdf, 0xd8, 0x87, 0x0d, 0x74, 0x0b, 0x32, 0x14, 0x85, 0x05, 0xa0, 0xd6, 0xb7, - 0x38, 0x44, 0x6f, 0x79, 0x10, 0xbd, 0x75, 0xe4, 0x41, 0x74, 0xa3, 0xf0, 0xf5, 0xd3, 0x8d, 0xc4, - 0x97, 0x7f, 0xdf, 0x48, 0x2a, 0xcc, 0x02, 0xbd, 0x44, 0x4f, 0xb9, 0x66, 0x98, 0xaa, 0xa1, 0x8b, - 0xf7, 0xe4, 0xd9, 0x7c, 0x4f, 0x47, 0x77, 0xa1, 0xda, 0xb3, 0x4c, 0x17, 0x9b, 0xee, 0xd8, 0x55, - 0x79, 0x0a, 0x10, 0x30, 0x3a, 0x7d, 0x0a, 0x9b, 0x9e, 0xe2, 0x01, 0xd3, 0x53, 0x2a, 0xbd, 0xa8, - 0x00, 0xdd, 0x01, 0x38, 0xd1, 0x86, 0x86, 0xae, 0x11, 0xcb, 0x71, 0x6b, 0x99, 0xcd, 0xf4, 0x4c, - 0x37, 0x0f, 0x3c, 0x95, 0xfb, 0xb6, 0xae, 0x11, 0xdc, 0xc8, 0xd0, 0x5f, 0xab, 0x84, 0x2c, 0xd1, - 0xeb, 0x50, 0xd1, 0x6c, 0x5b, 0x75, 0x89, 0x46, 0xb0, 0xda, 0x3d, 0x23, 0xd8, 0x65, 0xe0, 0xba, - 0xa2, 0x94, 0x34, 0xdb, 0x3e, 0xa4, 0xd2, 0x06, 0x15, 0xa2, 0xcb, 0x50, 0xa6, 0x40, 0x6a, 0x68, - 0x43, 0x75, 0x80, 0x8d, 0xfe, 0x80, 0x30, 0x10, 0x4d, 0x2b, 0x25, 0x21, 0x6d, 0x33, 0xa1, 0xac, - 0xfb, 0x1b, 0x81, 0x81, 0x28, 0x42, 0x90, 0xd1, 0x35, 0xa2, 0xb1, 0x40, 0xae, 0x28, 0x6c, 0x4c, - 0x65, 0xb6, 0x46, 0x06, 0x22, 0x3c, 0x6c, 0x8c, 0x2e, 0x42, 0x4e, 0xb8, 0x4d, 0x33, 0xb7, 0x62, - 0x46, 0xbf, 0x99, 0xed, 0x58, 0x27, 0x98, 0x65, 0x8d, 0x82, 0xc2, 0x27, 0xf2, 0x6f, 0x53, 0xb0, - 0x3a, 0x05, 0xb7, 0xd4, 0xef, 0x40, 0x73, 0x07, 0xde, 0xbb, 0xe8, 0x18, 0xdd, 0xa4, 0x7e, 0x35, - 0x1d, 0x3b, 0x22, 0xcd, 0xd5, 0xc2, 0x21, 0xe2, 0x29, 0xbc, 0xcd, 0x9e, 0x8b, 0xd0, 0x08, 0x6d, - 0xd4, 0x81, 0xea, 0x50, 0x73, 0x89, 0xca, 0xe1, 0x4b, 0x0d, 0xa5, 0xbc, 0x69, 0xd0, 0xbe, 0xa7, - 0x79, 0x80, 0x47, 0x37, 0xbb, 0x70, 0x54, 0x1e, 0x46, 0xa4, 0x48, 0x81, 0xb5, 0xee, 0xd9, 0xe7, - 0x9a, 0x49, 0x0c, 0x13, 0xab, 0x53, 0x5f, 0xee, 0xa5, 0x29, 0xa7, 0xad, 0x13, 0x43, 0xc7, 0x66, - 0xcf, 0xfb, 0x64, 0x17, 0x7c, 0x63, 0xff, 0x93, 0xba, 0xb2, 0x02, 0xe5, 0x68, 0xc2, 0x40, 0x65, - 0x48, 0x91, 0x53, 0x11, 0x80, 0x14, 0x39, 0x45, 0xdf, 0x87, 0x0c, 0x5d, 0x24, 0x5b, 0x7c, 0x79, - 0x46, 0xb6, 0x16, 0x76, 0x47, 0x67, 0x36, 0x56, 0x98, 0xa6, 0x2c, 0xfb, 0xa7, 0xc1, 0x4f, 0x22, - 0x93, 0x5e, 0xe5, 0xab, 0x50, 0x99, 0xc8, 0x12, 0xa1, 0xef, 0x97, 0x0c, 0x7f, 0x3f, 0xb9, 0x02, - 0xa5, 0x48, 0x4a, 0x90, 0x2f, 0xc2, 0xda, 0x2c, 0x84, 0x97, 0x07, 0xbe, 0x3c, 0x82, 0xd4, 0xe8, - 0x06, 0x14, 0x7c, 0x88, 0xe7, 0xa7, 0x71, 0x3a, 0x56, 0x9e, 0xb2, 0xe2, 0xab, 0xd2, 0x63, 0x48, - 0xb7, 0x35, 0xdb, 0x0f, 0x29, 0xf6, 0xc3, 0xf3, 0x9a, 0x6d, 0xb7, 0x35, 0x77, 0x20, 0x7f, 0x02, - 0xb5, 0x38, 0xf8, 0x9e, 0x58, 0x46, 0xc6, 0xdf, 0x86, 0x17, 0x21, 0x77, 0x6c, 0x39, 0x23, 0x8d, - 0x30, 0x67, 0x25, 0x45, 0xcc, 0xe8, 0xf6, 0xe4, 0x50, 0x9e, 0x66, 0x62, 0x3e, 0x91, 0x55, 0x78, - 0x29, 0x16, 0xc2, 0xa9, 0x89, 0x61, 0xea, 0x98, 0xc7, 0xb3, 0xa4, 0xf0, 0x49, 0xe0, 0x88, 0xff, - 0x58, 0x3e, 0xa1, 0xaf, 0x75, 0xd9, 0x5a, 0x99, 0x7f, 0x49, 0x11, 0x33, 0xf9, 0x8a, 0x1f, 0xac, - 0x08, 0x92, 0x53, 0xcc, 0xa3, 0xe8, 0x9f, 0xdc, 0x4c, 0x5f, 0x59, 0x51, 0xe8, 0x50, 0xfe, 0xa3, - 0x04, 0x05, 0x05, 0xbb, 0x36, 0x45, 0x0f, 0xd4, 0x00, 0x09, 0x9f, 0xf6, 0x30, 0xa7, 0x61, 0xc9, - 0x58, 0x1a, 0xc3, 0xb5, 0x5b, 0x9e, 0x26, 0xe5, 0x10, 0xbe, 0x19, 0xba, 0x2e, 0xa8, 0x66, 0x3c, - 0x6b, 0x14, 0xe6, 0x61, 0xae, 0x79, 0xd3, 0xe3, 0x9a, 0xe9, 0x58, 0xda, 0xc0, 0xad, 0x26, 0xc8, - 0xe6, 0x75, 0x41, 0x36, 0x33, 0x0b, 0x5e, 0x16, 0x61, 0x9b, 0xcd, 0x08, 0xdb, 0xcc, 0x2e, 0x58, - 0x66, 0x0c, 0xdd, 0x6c, 0x46, 0xe8, 0x66, 0x6e, 0x81, 0x93, 0x18, 0xbe, 0x79, 0xd3, 0xe3, 0x9b, - 0xf9, 0x05, 0xcb, 0x9e, 0x20, 0x9c, 0x77, 0xa2, 0x84, 0x93, 0x93, 0xc5, 0xd7, 0x62, 0xad, 0x63, - 0x19, 0xe7, 0x8f, 0x43, 0x8c, 0x53, 0x8a, 0xa5, 0x7b, 0xdc, 0xc9, 0x0c, 0xca, 0xd9, 0x8c, 0x50, - 0x4e, 0x58, 0x10, 0x83, 0x18, 0xce, 0xf9, 0x5e, 0x98, 0x73, 0x16, 0x63, 0x69, 0xab, 0xd8, 0x34, - 0xb3, 0x48, 0xe7, 0x6d, 0x9f, 0x74, 0xae, 0xc4, 0xb2, 0x66, 0xb1, 0x86, 0x49, 0xd6, 0xd9, 0x99, - 0x62, 0x9d, 0x9c, 0x25, 0xbe, 0x1e, 0xeb, 0x62, 0x01, 0xed, 0xec, 0x4c, 0xd1, 0xce, 0xf2, 0x02, - 0x87, 0x0b, 0x78, 0xe7, 0xaf, 0x67, 0xf3, 0xce, 0x78, 0x66, 0x28, 0x7e, 0xe6, 0x72, 0xc4, 0x53, - 0x8d, 0x21, 0x9e, 0x55, 0xe6, 0xfe, 0x8d, 0x58, 0xf7, 0x4b, 0x33, 0xcf, 0x4e, 0x0c, 0xf3, 0x8c, - 0x8f, 0xc7, 0xb2, 0xd4, 0xf3, 0x2a, 0xcd, 0xf0, 0x13, 0x48, 0x44, 0x51, 0x12, 0x3b, 0x8e, 0xe5, - 0x08, 0x56, 0xc7, 0x27, 0xf2, 0x15, 0xca, 0x39, 0x02, 0xd4, 0x99, 0x43, 0x53, 0x59, 0x36, 0x0a, - 0x21, 0x8d, 0xfc, 0xa7, 0x64, 0x60, 0xcb, 0xd2, 0x74, 0x98, 0xaf, 0x48, 0x82, 0xaf, 0x84, 0xd8, - 0x6b, 0x2a, 0xca, 0x5e, 0x37, 0xa0, 0x48, 0xb3, 0xcc, 0x04, 0x31, 0xd5, 0x6c, 0x8f, 0x98, 0xa2, - 0x6b, 0xb0, 0xca, 0x68, 0x04, 0xe7, 0xb8, 0x22, 0xb5, 0x64, 0x58, 0x86, 0xac, 0xd0, 0x07, 0x7c, - 0xb7, 0xf3, 0x1c, 0xf3, 0x16, 0x5c, 0x08, 0xe9, 0xfa, 0xd9, 0x8b, 0xb3, 0xb1, 0xaa, 0xaf, 0xbd, - 0x2b, 0xd2, 0xd8, 0x87, 0x41, 0x80, 0x02, 0xd2, 0x8b, 0x20, 0xd3, 0xb3, 0x74, 0x2c, 0x72, 0x0b, - 0x1b, 0xd3, 0xa4, 0x30, 0xb4, 0xfa, 0x22, 0x83, 0xd0, 0x21, 0xd5, 0xf2, 0x61, 0x55, 0xe2, 0xa8, - 0x29, 0xff, 0x25, 0x19, 0xf8, 0x0b, 0x78, 0xf0, 0x2c, 0xca, 0x9a, 0xfc, 0xdf, 0x50, 0xd6, 0xd4, - 0xb7, 0xa6, 0xac, 0xe1, 0xdc, 0x9e, 0x8e, 0xe6, 0xf6, 0x7f, 0x27, 0x83, 0x2f, 0xec, 0x13, 0xd0, - 0x6f, 0x17, 0x91, 0x20, 0x51, 0x67, 0xd9, 0xf7, 0x12, 0x89, 0x5a, 0x94, 0x15, 0x39, 0xf6, 0xde, - 0x68, 0x59, 0x91, 0xe7, 0xa9, 0x9b, 0x4d, 0xd0, 0x2d, 0x90, 0x58, 0xff, 0x48, 0xb5, 0x6c, 0x57, - 0x20, 0xf8, 0xcb, 0xe1, 0xb5, 0xf2, 0x36, 0xd1, 0xd6, 0x01, 0xd5, 0xe9, 0xd8, 0xae, 0x52, 0xb0, - 0xc5, 0x28, 0xc4, 0x41, 0xa4, 0x08, 0x15, 0xbe, 0x04, 0x12, 0xfd, 0xf5, 0xae, 0xad, 0xf5, 0x30, - 0x43, 0x63, 0x49, 0x09, 0x04, 0xf2, 0x43, 0x40, 0xd3, 0xf9, 0x00, 0xb5, 0x21, 0x87, 0x4f, 0xb0, - 0x49, 0x38, 0x27, 0x28, 0xee, 0x5c, 0x9c, 0xc1, 0x33, 0xb1, 0x49, 0x1a, 0x35, 0x1a, 0xe4, 0x7f, - 0x3d, 0xdd, 0xa8, 0x72, 0xed, 0x37, 0xad, 0x91, 0x41, 0xf0, 0xc8, 0x26, 0x67, 0x8a, 0xb0, 0x97, - 0xbf, 0x48, 0x51, 0xd2, 0x17, 0xc9, 0x15, 0x33, 0x63, 0xeb, 0x1d, 0xa0, 0x54, 0x88, 0xf0, 0x2f, - 0x17, 0xef, 0x75, 0x80, 0xbe, 0xe6, 0xaa, 0x8f, 0x35, 0x93, 0x60, 0x5d, 0x04, 0x3d, 0x24, 0x41, - 0x75, 0x28, 0xd0, 0xd9, 0xd8, 0xc5, 0xba, 0xa8, 0x3d, 0xfc, 0x79, 0x68, 0x9d, 0xf9, 0xef, 0xb6, - 0xce, 0x68, 0x94, 0x0b, 0x93, 0x51, 0xfe, 0x5d, 0x2a, 0x38, 0x25, 0x01, 0x3f, 0xfe, 0xff, 0x8b, - 0xc3, 0xef, 0x59, 0xd1, 0x1c, 0x4d, 0xda, 0xe8, 0x10, 0x56, 0xfd, 0x53, 0xaa, 0x8e, 0xd9, 0xe9, - 0xf5, 0xf6, 0xdd, 0xb2, 0xc7, 0xbc, 0x7a, 0x12, 0x15, 0xbb, 0xe8, 0xe7, 0xf0, 0xe2, 0x04, 0x02, - 0xf9, 0xae, 0x53, 0x4b, 0x02, 0xd1, 0x0b, 0x51, 0x20, 0xf2, 0x3c, 0x07, 0xb1, 0x4a, 0x7f, 0xc7, - 0xb3, 0xb1, 0x47, 0xeb, 0xb0, 0x30, 0x05, 0x99, 0xf9, 0xf5, 0x5f, 0x83, 0x92, 0x83, 0x89, 0x66, - 0x98, 0x6a, 0xa4, 0xd2, 0x5d, 0xe1, 0x42, 0x51, 0x3f, 0x1f, 0xc0, 0x0b, 0x33, 0xa9, 0x08, 0xfa, - 0x21, 0x48, 0x01, 0x8b, 0x49, 0xc6, 0x14, 0x8d, 0x7e, 0x21, 0x14, 0xe8, 0xca, 0x7f, 0x4e, 0x06, - 0x2e, 0xa3, 0xa5, 0x55, 0x0b, 0x72, 0x0e, 0x76, 0xc7, 0x43, 0x5e, 0xec, 0x94, 0x77, 0xde, 0x5a, - 0x8e, 0xc4, 0x50, 0xe9, 0x78, 0x48, 0x14, 0x61, 0x2c, 0x3f, 0x84, 0x1c, 0x97, 0xa0, 0x22, 0xe4, - 0xef, 0xef, 0xdf, 0xdd, 0xef, 0x7c, 0xb4, 0x5f, 0x4d, 0x20, 0x80, 0xdc, 0x6e, 0xb3, 0xd9, 0x3a, - 0x38, 0xaa, 0x26, 0x91, 0x04, 0xd9, 0xdd, 0x46, 0x47, 0x39, 0xaa, 0xa6, 0xa8, 0x58, 0x69, 0x7d, - 0xd0, 0x6a, 0x1e, 0x55, 0xd3, 0x68, 0x15, 0x4a, 0x7c, 0xac, 0xde, 0xe9, 0x28, 0x1f, 0xee, 0x1e, - 0x55, 0x33, 0x21, 0xd1, 0x61, 0x6b, 0xff, 0xfd, 0x96, 0x52, 0xcd, 0xca, 0x3f, 0xa0, 0xd5, 0x54, - 0x0c, 0xed, 0x09, 0xea, 0xa6, 0x64, 0xa8, 0x6e, 0x92, 0xff, 0x90, 0x82, 0x7a, 0x3c, 0x97, 0x41, - 0x1f, 0x4c, 0x2c, 0x7c, 0xe7, 0x1c, 0x44, 0x68, 0x62, 0xf5, 0xe8, 0x32, 0x94, 0x1d, 0x7c, 0x8c, - 0x49, 0x6f, 0xc0, 0xb9, 0x15, 0x4f, 0x6c, 0x25, 0xa5, 0x24, 0xa4, 0xcc, 0xc8, 0xe5, 0x6a, 0x9f, - 0xe2, 0x1e, 0x51, 0x79, 0x09, 0xc7, 0x37, 0x9d, 0x44, 0xd5, 0xa8, 0xf4, 0x90, 0x0b, 0xe5, 0x4f, - 0xce, 0x15, 0x4b, 0x09, 0xb2, 0x4a, 0xeb, 0x48, 0xf9, 0x45, 0x35, 0x8d, 0x10, 0x94, 0xd9, 0x50, - 0x3d, 0xdc, 0xdf, 0x3d, 0x38, 0x6c, 0x77, 0x68, 0x2c, 0x2f, 0x40, 0xc5, 0x8b, 0xa5, 0x27, 0xcc, - 0xca, 0x57, 0x83, 0xdd, 0xb0, 0xa8, 0x76, 0xfc, 0x4f, 0x12, 0x2a, 0x13, 0x67, 0x09, 0xed, 0x40, - 0x96, 0x53, 0xf9, 0xb8, 0xab, 0x06, 0x06, 0x05, 0xe2, 0xe0, 0x71, 0x55, 0xf4, 0x0e, 0x14, 0xb0, - 0xe8, 0x66, 0xcc, 0x3a, 0xb3, 0xbc, 0x0b, 0xe3, 0xf5, 0x3b, 0x84, 0xa9, 0x6f, 0x81, 0xde, 0x05, - 0xc9, 0x07, 0x05, 0x51, 0x3f, 0xbe, 0x3a, 0x6d, 0xee, 0xc3, 0x89, 0xb0, 0x0f, 0x6c, 0xd0, 0xed, - 0x80, 0xbe, 0x65, 0xa6, 0x0b, 0x08, 0x61, 0xce, 0x15, 0x84, 0xb1, 0xa7, 0x2f, 0x37, 0xa1, 0x18, - 0x5a, 0x0f, 0x7a, 0x19, 0xa4, 0x91, 0x76, 0x2a, 0xba, 0x64, 0xbc, 0xcf, 0x51, 0x18, 0x69, 0xa7, - 0xbc, 0x41, 0xf6, 0x22, 0xe4, 0xe9, 0xc3, 0xbe, 0xc6, 0x81, 0x29, 0xad, 0xe4, 0x46, 0xda, 0xe9, - 0x4f, 0x35, 0x57, 0xfe, 0x18, 0xca, 0xd1, 0x0e, 0x11, 0xdd, 0xb4, 0x8e, 0x35, 0x36, 0x75, 0xe6, - 0x23, 0xab, 0xf0, 0x09, 0xba, 0x01, 0xd9, 0x13, 0x8b, 0xe3, 0xda, 0xec, 0xd3, 0xfd, 0xc0, 0x22, - 0x38, 0xd4, 0x61, 0xe2, 0xda, 0xf2, 0xe7, 0x90, 0x65, 0x38, 0x45, 0x31, 0x87, 0xf5, 0x7a, 0x04, - 0x75, 0xa5, 0x63, 0xf4, 0x31, 0x80, 0x46, 0x88, 0x63, 0x74, 0xc7, 0x81, 0xe3, 0x8d, 0xd9, 0x38, - 0xb7, 0xeb, 0xe9, 0x35, 0x2e, 0x09, 0xc0, 0x5b, 0x0b, 0x4c, 0x43, 0xa0, 0x17, 0x72, 0x28, 0xef, - 0x43, 0x39, 0x6a, 0x1b, 0xee, 0xba, 0xae, 0xcc, 0xe8, 0xba, 0xfa, 0xf4, 0xc8, 0x27, 0x57, 0x69, - 0xde, 0xd7, 0x63, 0x13, 0xf9, 0x49, 0x12, 0x0a, 0x47, 0xa7, 0xe2, 0x04, 0xc4, 0xb4, 0x94, 0x02, - 0xd3, 0x54, 0xb8, 0x81, 0xc2, 0x7b, 0x54, 0x69, 0xbf, 0xf3, 0xf5, 0x9e, 0x7f, 0xc6, 0x33, 0xcb, - 0x16, 0xae, 0x5e, 0x0b, 0x50, 0xe0, 0xda, 0xdb, 0x20, 0xf9, 0xbb, 0x8a, 0xd6, 0x00, 0x9a, 0xae, - 0x3b, 0xd8, 0x75, 0xc5, 0xda, 0xbc, 0x29, 0xeb, 0x50, 0x5a, 0x8f, 0x45, 0x8b, 0x26, 0xad, 0xf0, - 0x89, 0xac, 0x43, 0x65, 0x22, 0xc3, 0xa1, 0xb7, 0x21, 0x6f, 0x8f, 0xbb, 0xaa, 0x17, 0x9e, 0x89, - 0xc3, 0xe3, 0xf1, 0xc1, 0x71, 0x77, 0x68, 0xf4, 0xee, 0xe2, 0x33, 0xef, 0xc7, 0xd8, 0xe3, 0xee, - 0x5d, 0x1e, 0x45, 0xfe, 0x96, 0x54, 0xf8, 0x2d, 0x27, 0x50, 0xf0, 0x36, 0x05, 0xfa, 0x49, 0xf8, - 0x9c, 0x78, 0x7d, 0xeb, 0xd8, 0xac, 0x2b, 0xdc, 0x87, 0x8e, 0xc9, 0x35, 0x58, 0x75, 0x8d, 0xbe, - 0x89, 0x75, 0x35, 0xa8, 0x42, 0xd8, 0xdb, 0x0a, 0x4a, 0x85, 0x3f, 0xb8, 0xe7, 0x95, 0x20, 0xf2, - 0xd3, 0x24, 0x14, 0xbc, 0x03, 0x3b, 0x73, 0xdf, 0x45, 0x7e, 0x4c, 0xea, 0xfc, 0x3f, 0x26, 0xae, - 0x1d, 0xec, 0xf5, 0xe5, 0x33, 0xe7, 0xee, 0xcb, 0xbf, 0x09, 0x88, 0x58, 0x44, 0x1b, 0xaa, 0x27, - 0x16, 0x31, 0xcc, 0xbe, 0xca, 0xa3, 0xc9, 0xd9, 0x55, 0x95, 0x3d, 0x79, 0xc0, 0x1e, 0x1c, 0xb0, - 0xc0, 0xfe, 0x26, 0x09, 0x05, 0x3f, 0x4f, 0x9e, 0xb7, 0x29, 0x78, 0x11, 0x72, 0x22, 0x15, 0xf0, - 0xae, 0xa0, 0x98, 0xf9, 0xfd, 0xe9, 0x4c, 0xa8, 0x3f, 0x5d, 0x87, 0xc2, 0x08, 0x13, 0x8d, 0x91, - 0x05, 0x5e, 0xe9, 0xf9, 0xf3, 0x6b, 0xb7, 0xa1, 0x18, 0xea, 0xcf, 0xd2, 0xa3, 0xb5, 0xdf, 0xfa, - 0xa8, 0x9a, 0xa8, 0xe7, 0x9f, 0x7c, 0xb5, 0x99, 0xde, 0xc7, 0x8f, 0xe9, 0xa6, 0x54, 0x5a, 0xcd, - 0x76, 0xab, 0x79, 0xb7, 0x9a, 0xac, 0x17, 0x9f, 0x7c, 0xb5, 0x99, 0x57, 0x30, 0x6b, 0xde, 0xec, - 0x7c, 0x01, 0x50, 0xd9, 0x6d, 0x34, 0xf7, 0x68, 0xfe, 0x32, 0x7a, 0x9a, 0x68, 0x69, 0x65, 0x58, - 0x79, 0x3c, 0xf7, 0x7a, 0xb8, 0x3e, 0xbf, 0xa3, 0x87, 0xee, 0x40, 0x96, 0x55, 0xce, 0x68, 0xfe, - 0x7d, 0x71, 0x7d, 0x41, 0x8b, 0x8f, 0xfe, 0x18, 0xb6, 0x6b, 0xe7, 0x5e, 0x20, 0xd7, 0xe7, 0x77, - 0xfc, 0x90, 0x02, 0x52, 0x50, 0xfa, 0x2e, 0xbe, 0x50, 0xae, 0x2f, 0xd1, 0x05, 0xa4, 0x3e, 0x03, - 0x62, 0xbf, 0xf8, 0x82, 0xb5, 0xbe, 0x04, 0xae, 0xa0, 0x7b, 0x90, 0xf7, 0x4a, 0xa6, 0x45, 0x57, - 0xbe, 0xf5, 0x85, 0x1d, 0x3a, 0xfa, 0x09, 0x78, 0x69, 0x3b, 0xff, 0xfe, 0xba, 0xbe, 0xa0, 0xdd, - 0x88, 0xf6, 0x20, 0x27, 0xd8, 0xea, 0x82, 0x6b, 0xdc, 0xfa, 0xa2, 0x8e, 0x1b, 0x0d, 0x5a, 0xd0, - 0x33, 0x58, 0x7c, 0x2b, 0x5f, 0x5f, 0xa2, 0x93, 0x8a, 0xee, 0x03, 0x84, 0x0a, 0xd9, 0x25, 0xae, - 0xdb, 0xeb, 0xcb, 0x74, 0x48, 0x51, 0x07, 0x0a, 0x7e, 0xc1, 0xb2, 0xf0, 0xf2, 0xbb, 0xbe, 0xb8, - 0x55, 0x89, 0x1e, 0x42, 0x29, 0xca, 0xd4, 0x97, 0xbb, 0xd2, 0xae, 0x2f, 0xd9, 0x83, 0xa4, 0xfe, - 0xa3, 0xb4, 0x7d, 0xb9, 0x2b, 0xee, 0xfa, 0x92, 0x2d, 0x49, 0xf4, 0x29, 0xac, 0x4e, 0xd3, 0xea, - 0xe5, 0x6f, 0xbc, 0xeb, 0xe7, 0x68, 0x52, 0xa2, 0x11, 0xa0, 0x19, 0x74, 0xfc, 0x1c, 0x17, 0xe0, - 0xf5, 0xf3, 0xf4, 0x2c, 0x1b, 0xad, 0xaf, 0x9f, 0xad, 0x27, 0xbf, 0x79, 0xb6, 0x9e, 0xfc, 0xc7, - 0xb3, 0xf5, 0xe4, 0x97, 0xcf, 0xd7, 0x13, 0xdf, 0x3c, 0x5f, 0x4f, 0xfc, 0xed, 0xf9, 0x7a, 0xe2, - 0x97, 0x6f, 0xf4, 0x0d, 0x32, 0x18, 0x77, 0xb7, 0x7a, 0xd6, 0x68, 0x3b, 0xfc, 0xef, 0x9c, 0x59, - 0xff, 0x18, 0xea, 0xe6, 0x58, 0x7a, 0xb9, 0xfe, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x6a, - 0x71, 0x16, 0x51, 0x24, 0x00, 0x00, + // 2754 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x4b, 0x77, 0x23, 0xc5, + 0xf5, 0xd7, 0x5b, 0xea, 0x2b, 0xeb, 0xe1, 0x1a, 0x33, 0x88, 0x66, 0xb0, 0x4d, 0x73, 0xe0, 0x3f, + 0x33, 0x80, 0xfd, 0x8f, 0x39, 0x10, 0x08, 0x24, 0x60, 0x09, 0x4d, 0x64, 0x66, 0xb0, 0x9c, 0xb6, + 0x19, 0xf2, 0x62, 0x9a, 0x96, 0xba, 0x2c, 0x35, 0x23, 0x75, 0x37, 0xdd, 0x25, 0x8f, 0xcd, 0x32, + 0x8f, 0xcd, 0x64, 0xc3, 0x32, 0x1b, 0xbe, 0x46, 0x4e, 0x56, 0xd9, 0x64, 0xc3, 0x39, 0xd9, 0xb0, + 0xcc, 0x6a, 0x92, 0xcc, 0xec, 0xf2, 0x05, 0xb2, 0x4c, 0x4e, 0x3d, 0xfa, 0x25, 0xa9, 0x25, 0x19, + 0xb2, 0xcb, 0xae, 0xea, 0xf6, 0xbd, 0xb7, 0x55, 0xb7, 0xab, 0x7e, 0xf7, 0x77, 0x6f, 0x09, 0x9e, + 0x25, 0xd8, 0x32, 0xb0, 0x3b, 0x36, 0x2d, 0xb2, 0xab, 0xf7, 0xfa, 0xe6, 0x2e, 0xb9, 0x70, 0xb0, + 0xb7, 0xe3, 0xb8, 0x36, 0xb1, 0x51, 0x2d, 0x7c, 0xb8, 0x43, 0x1f, 0xca, 0xcf, 0x45, 0xb4, 0xfb, + 0xee, 0x85, 0x43, 0xec, 0x5d, 0xc7, 0xb5, 0xed, 0x53, 0xae, 0x2f, 0x5f, 0x8b, 0x3c, 0x66, 0x7e, + 0xa2, 0xde, 0x62, 0x4f, 0x85, 0xf1, 0x7d, 0x7c, 0xe1, 0x3f, 0x7d, 0x6e, 0xc6, 0xd6, 0xd1, 0x5d, + 0x7d, 0xec, 0x3f, 0xde, 0x1a, 0xd8, 0xf6, 0x60, 0x84, 0x77, 0xd9, 0xac, 0x37, 0x39, 0xdd, 0x25, + 0xe6, 0x18, 0x7b, 0x44, 0x1f, 0x3b, 0x42, 0x61, 0x63, 0x60, 0x0f, 0x6c, 0x36, 0xdc, 0xa5, 0x23, + 0x2e, 0x55, 0xfe, 0x51, 0x82, 0xa2, 0x8a, 0x3f, 0x9f, 0x60, 0x8f, 0xa0, 0x3d, 0xc8, 0xe1, 0xfe, + 0xd0, 0x6e, 0xa4, 0xb7, 0xd3, 0xd7, 0xcb, 0x7b, 0xd7, 0x76, 0xa6, 0x16, 0xb7, 0x23, 0xf4, 0xda, + 0xfd, 0xa1, 0xdd, 0x49, 0xa9, 0x4c, 0x17, 0xbd, 0x0e, 0xf9, 0xd3, 0xd1, 0xc4, 0x1b, 0x36, 0x32, + 0xcc, 0xe8, 0xb9, 0x24, 0xa3, 0x5b, 0x54, 0xa9, 0x93, 0x52, 0xb9, 0x36, 0x7d, 0x95, 0x69, 0x9d, + 0xda, 0x8d, 0xec, 0xe2, 0x57, 0x1d, 0x58, 0xa7, 0xec, 0x55, 0x54, 0x17, 0x35, 0x01, 0x3c, 0x4c, + 0x34, 0xdb, 0x21, 0xa6, 0x6d, 0x35, 0x72, 0xcc, 0xf2, 0xf9, 0x24, 0xcb, 0x63, 0x4c, 0xba, 0x4c, + 0xb1, 0x93, 0x52, 0x25, 0xcf, 0x9f, 0x50, 0x1f, 0xa6, 0x65, 0x12, 0xad, 0x3f, 0xd4, 0x4d, 0xab, + 0x91, 0x5f, 0xec, 0xe3, 0xc0, 0x32, 0x49, 0x8b, 0x2a, 0x52, 0x1f, 0xa6, 0x3f, 0xa1, 0x4b, 0xfe, + 0x7c, 0x82, 0xdd, 0x8b, 0x46, 0x61, 0xf1, 0x92, 0x7f, 0x42, 0x95, 0xe8, 0x92, 0x99, 0x36, 0x6a, + 0x43, 0xb9, 0x87, 0x07, 0xa6, 0xa5, 0xf5, 0x46, 0x76, 0xff, 0x7e, 0xa3, 0xc8, 0x8c, 0x95, 0x24, + 0xe3, 0x26, 0x55, 0x6d, 0x52, 0xcd, 0x4e, 0x4a, 0x85, 0x5e, 0x30, 0x43, 0xef, 0x40, 0xa9, 0x3f, + 0xc4, 0xfd, 0xfb, 0x1a, 0x39, 0x6f, 0x94, 0x98, 0x8f, 0xad, 0x24, 0x1f, 0x2d, 0xaa, 0x77, 0x72, + 0xde, 0x49, 0xa9, 0xc5, 0x3e, 0x1f, 0xd2, 0xf5, 0x1b, 0x78, 0x64, 0x9e, 0x61, 0x97, 0xda, 0x4b, + 0x8b, 0xd7, 0xff, 0x3e, 0xd7, 0x64, 0x1e, 0x24, 0xc3, 0x9f, 0xa0, 0x77, 0x41, 0xc2, 0x96, 0x21, + 0x96, 0x01, 0xcc, 0xc5, 0x76, 0xe2, 0x5e, 0xb1, 0x0c, 0x7f, 0x11, 0x25, 0x2c, 0xc6, 0xe8, 0x4d, + 0x28, 0xf4, 0xed, 0xf1, 0xd8, 0x24, 0x8d, 0x32, 0xb3, 0xde, 0x4c, 0x5c, 0x00, 0xd3, 0xea, 0xa4, + 0x54, 0xa1, 0x8f, 0x0e, 0xa1, 0x3a, 0x32, 0x3d, 0xa2, 0x79, 0x96, 0xee, 0x78, 0x43, 0x9b, 0x78, + 0x8d, 0x35, 0xe6, 0xe1, 0xc5, 0x24, 0x0f, 0x77, 0x4c, 0x8f, 0x1c, 0xfb, 0xca, 0x9d, 0x94, 0x5a, + 0x19, 0x45, 0x05, 0xd4, 0x9f, 0x7d, 0x7a, 0x8a, 0xdd, 0xc0, 0x61, 0xa3, 0xb2, 0xd8, 0x5f, 0x97, + 0x6a, 0xfb, 0xf6, 0xd4, 0x9f, 0x1d, 0x15, 0xa0, 0x5f, 0xc0, 0x95, 0x91, 0xad, 0x1b, 0x81, 0x3b, + 0xad, 0x3f, 0x9c, 0x58, 0xf7, 0x1b, 0x55, 0xe6, 0xf4, 0x46, 0xe2, 0x8f, 0xb4, 0x75, 0xc3, 0x77, + 0xd1, 0xa2, 0x06, 0x9d, 0x94, 0xba, 0x3e, 0x9a, 0x16, 0xa2, 0x7b, 0xb0, 0xa1, 0x3b, 0xce, 0xe8, + 0x62, 0xda, 0x7b, 0x8d, 0x79, 0xbf, 0x99, 0xe4, 0x7d, 0x9f, 0xda, 0x4c, 0xbb, 0x47, 0xfa, 0x8c, + 0x94, 0x06, 0xc3, 0x71, 0xb1, 0xe3, 0xda, 0x7d, 0xec, 0x79, 0x1a, 0x39, 0xf7, 0x1a, 0xeb, 0x8b, + 0x83, 0x71, 0x14, 0x68, 0x9f, 0x9c, 0xb3, 0xe0, 0x3a, 0x51, 0x41, 0xb3, 0x08, 0xf9, 0x33, 0x7d, + 0x34, 0xc1, 0xca, 0xff, 0x41, 0x39, 0x02, 0x1d, 0xa8, 0x01, 0xc5, 0x31, 0xf6, 0x3c, 0x7d, 0x80, + 0x19, 0xd2, 0x48, 0xaa, 0x3f, 0x55, 0xaa, 0xb0, 0x16, 0x85, 0x0b, 0x65, 0x1c, 0x18, 0x52, 0x20, + 0xa0, 0x86, 0x67, 0xd8, 0xf5, 0xe8, 0xe9, 0x17, 0x86, 0x62, 0x8a, 0x5e, 0x80, 0x0a, 0xdb, 0x8e, + 0x9a, 0xff, 0x9c, 0xa2, 0x51, 0x4e, 0x5d, 0x63, 0xc2, 0xbb, 0x42, 0x69, 0x0b, 0xca, 0xce, 0x9e, + 0x13, 0xa8, 0x64, 0x99, 0x0a, 0x38, 0x7b, 0x8e, 0x50, 0x50, 0x7e, 0x00, 0xf5, 0x69, 0xf4, 0x40, + 0x75, 0xc8, 0xde, 0xc7, 0x17, 0xe2, 0x7d, 0x74, 0x88, 0x36, 0xc4, 0xb2, 0xd8, 0x3b, 0x24, 0x55, + 0xac, 0xf1, 0x2f, 0x99, 0xc0, 0x38, 0x80, 0x0d, 0xf4, 0x26, 0xe4, 0x28, 0x0a, 0x0b, 0x40, 0x95, + 0x77, 0x38, 0x44, 0xef, 0xf8, 0x10, 0xbd, 0x73, 0xe2, 0x43, 0x74, 0xb3, 0xf4, 0xf5, 0xa3, 0xad, + 0xd4, 0x97, 0x7f, 0xdb, 0x4a, 0xab, 0xcc, 0x02, 0x3d, 0x43, 0x4f, 0xb9, 0x6e, 0x5a, 0x9a, 0x69, + 0x88, 0xf7, 0x14, 0xd9, 0xfc, 0xc0, 0x40, 0xb7, 0xa1, 0xde, 0xb7, 0x2d, 0x0f, 0x5b, 0xde, 0xc4, + 0xd3, 0x78, 0x0a, 0x10, 0x30, 0x3a, 0x7b, 0x0a, 0x5b, 0xbe, 0xe2, 0x11, 0xd3, 0x53, 0x6b, 0xfd, + 0xb8, 0x00, 0xdd, 0x02, 0x38, 0xd3, 0x47, 0xa6, 0xa1, 0x13, 0xdb, 0xf5, 0x1a, 0xb9, 0xed, 0xec, + 0x5c, 0x37, 0x77, 0x7d, 0x95, 0x8f, 0x1c, 0x43, 0x27, 0xb8, 0x99, 0xa3, 0xbf, 0x56, 0x8d, 0x58, + 0xa2, 0x97, 0xa0, 0xa6, 0x3b, 0x8e, 0xe6, 0x11, 0x9d, 0x60, 0xad, 0x77, 0x41, 0xb0, 0xc7, 0xc0, + 0x75, 0x4d, 0xad, 0xe8, 0x8e, 0x73, 0x4c, 0xa5, 0x4d, 0x2a, 0x44, 0x2f, 0x42, 0x95, 0x02, 0xa9, + 0xa9, 0x8f, 0xb4, 0x21, 0x36, 0x07, 0x43, 0xc2, 0x40, 0x34, 0xab, 0x56, 0x84, 0xb4, 0xc3, 0x84, + 0x8a, 0x11, 0x6c, 0x04, 0x06, 0xa2, 0x08, 0x41, 0xce, 0xd0, 0x89, 0xce, 0x02, 0xb9, 0xa6, 0xb2, + 0x31, 0x95, 0x39, 0x3a, 0x19, 0x8a, 0xf0, 0xb0, 0x31, 0xba, 0x0a, 0x05, 0xe1, 0x36, 0xcb, 0xdc, + 0x8a, 0x19, 0xfd, 0x66, 0x8e, 0x6b, 0x9f, 0x61, 0x96, 0x35, 0x4a, 0x2a, 0x9f, 0x28, 0xbf, 0xc9, + 0xc0, 0xfa, 0x0c, 0xdc, 0x52, 0xbf, 0x43, 0xdd, 0x1b, 0xfa, 0xef, 0xa2, 0x63, 0xf4, 0x06, 0xf5, + 0xab, 0x1b, 0xd8, 0x15, 0x69, 0xae, 0x11, 0x0d, 0x11, 0x4f, 0xe1, 0x1d, 0xf6, 0x5c, 0x84, 0x46, + 0x68, 0xa3, 0x2e, 0xd4, 0x47, 0xba, 0x47, 0x34, 0x0e, 0x5f, 0x5a, 0x24, 0xe5, 0xcd, 0x82, 0xf6, + 0x1d, 0xdd, 0x07, 0x3c, 0xba, 0xd9, 0x85, 0xa3, 0xea, 0x28, 0x26, 0x45, 0x2a, 0x6c, 0xf4, 0x2e, + 0xbe, 0xd0, 0x2d, 0x62, 0x5a, 0x58, 0x9b, 0xf9, 0x72, 0xcf, 0xcc, 0x38, 0x6d, 0x9f, 0x99, 0x06, + 0xb6, 0xfa, 0xfe, 0x27, 0xbb, 0x12, 0x18, 0x07, 0x9f, 0xd4, 0x53, 0x54, 0xa8, 0xc6, 0x13, 0x06, + 0xaa, 0x42, 0x86, 0x9c, 0x8b, 0x00, 0x64, 0xc8, 0x39, 0xfa, 0x7f, 0xc8, 0xd1, 0x45, 0xb2, 0xc5, + 0x57, 0xe7, 0x64, 0x6b, 0x61, 0x77, 0x72, 0xe1, 0x60, 0x95, 0x69, 0x2a, 0x4a, 0x70, 0x1a, 0x82, + 0x24, 0x32, 0xed, 0x55, 0xb9, 0x01, 0xb5, 0xa9, 0x2c, 0x11, 0xf9, 0x7e, 0xe9, 0xe8, 0xf7, 0x53, + 0x6a, 0x50, 0x89, 0xa5, 0x04, 0xe5, 0x2a, 0x6c, 0xcc, 0x43, 0x78, 0x65, 0x18, 0xc8, 0x63, 0x48, + 0x8d, 0x5e, 0x87, 0x52, 0x00, 0xf1, 0xfc, 0x34, 0xce, 0xc6, 0xca, 0x57, 0x56, 0x03, 0x55, 0x7a, + 0x0c, 0xe9, 0xb6, 0x66, 0xfb, 0x21, 0xc3, 0x7e, 0x78, 0x51, 0x77, 0x9c, 0x8e, 0xee, 0x0d, 0x95, + 0x4f, 0xa1, 0x91, 0x04, 0xdf, 0x53, 0xcb, 0xc8, 0x05, 0xdb, 0xf0, 0x2a, 0x14, 0x4e, 0x6d, 0x77, + 0xac, 0x13, 0xe6, 0xac, 0xa2, 0x8a, 0x19, 0xdd, 0x9e, 0x1c, 0xca, 0xb3, 0x4c, 0xcc, 0x27, 0x8a, + 0x06, 0xcf, 0x24, 0x42, 0x38, 0x35, 0x31, 0x2d, 0x03, 0xf3, 0x78, 0x56, 0x54, 0x3e, 0x09, 0x1d, + 0xf1, 0x1f, 0xcb, 0x27, 0xf4, 0xb5, 0x1e, 0x5b, 0x2b, 0xf3, 0x2f, 0xa9, 0x62, 0xa6, 0x5c, 0x0f, + 0x82, 0x15, 0x43, 0x72, 0x8a, 0x79, 0x14, 0xfd, 0xd3, 0xdb, 0xd9, 0xeb, 0x6b, 0x2a, 0x1d, 0x2a, + 0x7f, 0x90, 0xa0, 0xa4, 0x62, 0xcf, 0xa1, 0xe8, 0x81, 0x9a, 0x20, 0xe1, 0xf3, 0x3e, 0xe6, 0x34, + 0x2c, 0x9d, 0x48, 0x63, 0xb8, 0x76, 0xdb, 0xd7, 0xa4, 0x1c, 0x22, 0x30, 0x43, 0xaf, 0x09, 0xaa, + 0x99, 0xcc, 0x1a, 0x85, 0x79, 0x94, 0x6b, 0xbe, 0xe1, 0x73, 0xcd, 0x6c, 0x22, 0x6d, 0xe0, 0x56, + 0x53, 0x64, 0xf3, 0x35, 0x41, 0x36, 0x73, 0x4b, 0x5e, 0x16, 0x63, 0x9b, 0xad, 0x18, 0xdb, 0xcc, + 0x2f, 0x59, 0x66, 0x02, 0xdd, 0x6c, 0xc5, 0xe8, 0x66, 0x61, 0x89, 0x93, 0x04, 0xbe, 0xf9, 0x86, + 0xcf, 0x37, 0x8b, 0x4b, 0x96, 0x3d, 0x45, 0x38, 0x6f, 0xc5, 0x09, 0x27, 0x27, 0x8b, 0x2f, 0x24, + 0x5a, 0x27, 0x32, 0xce, 0x1f, 0x46, 0x18, 0xa7, 0x94, 0x48, 0xf7, 0xb8, 0x93, 0x39, 0x94, 0xb3, + 0x15, 0xa3, 0x9c, 0xb0, 0x24, 0x06, 0x09, 0x9c, 0xf3, 0xbd, 0x28, 0xe7, 0x2c, 0x27, 0xd2, 0x56, + 0xb1, 0x69, 0xe6, 0x91, 0xce, 0xb7, 0x02, 0xd2, 0xb9, 0x96, 0xc8, 0x9a, 0xc5, 0x1a, 0xa6, 0x59, + 0x67, 0x77, 0x86, 0x75, 0x72, 0x96, 0xf8, 0x52, 0xa2, 0x8b, 0x25, 0xb4, 0xb3, 0x3b, 0x43, 0x3b, + 0xab, 0x4b, 0x1c, 0x2e, 0xe1, 0x9d, 0xbf, 0x9c, 0xcf, 0x3b, 0x93, 0x99, 0xa1, 0xf8, 0x99, 0xab, + 0x11, 0x4f, 0x2d, 0x81, 0x78, 0xd6, 0x99, 0xfb, 0x97, 0x13, 0xdd, 0xaf, 0xcc, 0x3c, 0xbb, 0x09, + 0xcc, 0x33, 0x39, 0x1e, 0xab, 0x52, 0xcf, 0x1b, 0x34, 0xc3, 0x4f, 0x21, 0x11, 0x45, 0x49, 0xec, + 0xba, 0xb6, 0x2b, 0x58, 0x1d, 0x9f, 0x28, 0xd7, 0x29, 0xe7, 0x08, 0x51, 0x67, 0x01, 0x4d, 0x65, + 0xd9, 0x28, 0x82, 0x34, 0xca, 0x1f, 0xd3, 0xa1, 0x2d, 0x4b, 0xd3, 0x51, 0xbe, 0x22, 0x09, 0xbe, + 0x12, 0x61, 0xaf, 0x99, 0x38, 0x7b, 0xdd, 0x82, 0x32, 0xcd, 0x32, 0x53, 0xc4, 0x54, 0x77, 0x7c, + 0x62, 0x8a, 0x6e, 0xc2, 0x3a, 0xa3, 0x11, 0x9c, 0xe3, 0x8a, 0xd4, 0x92, 0x63, 0x19, 0xb2, 0x46, + 0x1f, 0xf0, 0xdd, 0xce, 0x73, 0xcc, 0xab, 0x70, 0x25, 0xa2, 0x1b, 0x64, 0x2f, 0xce, 0xc6, 0xea, + 0x81, 0xf6, 0xbe, 0x48, 0x63, 0x1f, 0x86, 0x01, 0x0a, 0x49, 0x2f, 0x82, 0x5c, 0xdf, 0x36, 0xb0, + 0xc8, 0x2d, 0x6c, 0x4c, 0x93, 0xc2, 0xc8, 0x1e, 0x88, 0x0c, 0x42, 0x87, 0x54, 0x2b, 0x80, 0x55, + 0x89, 0xa3, 0xa6, 0xf2, 0xe7, 0x74, 0xe8, 0x2f, 0xe4, 0xc1, 0xf3, 0x28, 0x6b, 0xfa, 0xbf, 0x43, + 0x59, 0x33, 0xdf, 0x9a, 0xb2, 0x46, 0x73, 0x7b, 0x36, 0x9e, 0xdb, 0xff, 0x95, 0x0e, 0xbf, 0x70, + 0x40, 0x40, 0xbf, 0x5d, 0x44, 0xc2, 0x44, 0x9d, 0x67, 0xdf, 0x4b, 0x24, 0x6a, 0x51, 0x56, 0x14, + 0xd8, 0x7b, 0xe3, 0x65, 0x45, 0x91, 0xa7, 0x6e, 0x36, 0x41, 0x6f, 0x82, 0xc4, 0xfa, 0x47, 0x9a, + 0xed, 0x78, 0x02, 0xc1, 0x9f, 0x8d, 0xae, 0x95, 0xb7, 0x89, 0x76, 0x8e, 0xa8, 0x4e, 0xd7, 0xf1, + 0xd4, 0x92, 0x23, 0x46, 0x11, 0x0e, 0x22, 0xc5, 0xa8, 0xf0, 0x35, 0x90, 0xe8, 0xaf, 0xf7, 0x1c, + 0xbd, 0x8f, 0x19, 0x1a, 0x4b, 0x6a, 0x28, 0x50, 0xee, 0x01, 0x9a, 0xcd, 0x07, 0xa8, 0x03, 0x05, + 0x7c, 0x86, 0x2d, 0xc2, 0x39, 0x41, 0x79, 0xef, 0xea, 0x1c, 0x9e, 0x89, 0x2d, 0xd2, 0x6c, 0xd0, + 0x20, 0xff, 0xf3, 0xd1, 0x56, 0x9d, 0x6b, 0xbf, 0x62, 0x8f, 0x4d, 0x82, 0xc7, 0x0e, 0xb9, 0x50, + 0x85, 0xbd, 0xf2, 0xeb, 0x0c, 0x25, 0x7d, 0xb1, 0x5c, 0x31, 0x37, 0xb6, 0xfe, 0x01, 0xca, 0x44, + 0x08, 0xff, 0x6a, 0xf1, 0xde, 0x04, 0x18, 0xe8, 0x9e, 0xf6, 0x40, 0xb7, 0x08, 0x36, 0x44, 0xd0, + 0x23, 0x12, 0x24, 0x43, 0x89, 0xce, 0x26, 0x1e, 0x36, 0x44, 0xed, 0x11, 0xcc, 0x23, 0xeb, 0x2c, + 0x7e, 0xb7, 0x75, 0xc6, 0xa3, 0x5c, 0x9a, 0x8e, 0xf2, 0x6f, 0x33, 0xe1, 0x29, 0x09, 0xf9, 0xf1, + 0xff, 0x5e, 0x1c, 0x7e, 0xc7, 0x8a, 0xe6, 0x78, 0xd2, 0x46, 0xc7, 0xb0, 0x1e, 0x9c, 0x52, 0x6d, + 0xc2, 0x4e, 0xaf, 0xbf, 0xef, 0x56, 0x3d, 0xe6, 0xf5, 0xb3, 0xb8, 0xd8, 0x43, 0x3f, 0x85, 0xa7, + 0xa7, 0x10, 0x28, 0x70, 0x9d, 0x59, 0x11, 0x88, 0x9e, 0x8a, 0x03, 0x91, 0xef, 0x39, 0x8c, 0x55, + 0xf6, 0x3b, 0x9e, 0x8d, 0x03, 0x5a, 0x87, 0x45, 0x29, 0xc8, 0xdc, 0xaf, 0xff, 0x02, 0x54, 0x5c, + 0x4c, 0x74, 0xd3, 0xd2, 0x62, 0x95, 0xee, 0x1a, 0x17, 0x8a, 0xfa, 0xf9, 0x08, 0x9e, 0x9a, 0x4b, + 0x45, 0xd0, 0xf7, 0x41, 0x0a, 0x59, 0x4c, 0x3a, 0xa1, 0x68, 0x0c, 0x0a, 0xa1, 0x50, 0x57, 0xf9, + 0x53, 0x3a, 0x74, 0x19, 0x2f, 0xad, 0xda, 0x50, 0x70, 0xb1, 0x37, 0x19, 0xf1, 0x62, 0xa7, 0xba, + 0xf7, 0xea, 0x6a, 0x24, 0x86, 0x4a, 0x27, 0x23, 0xa2, 0x0a, 0x63, 0xe5, 0x1e, 0x14, 0xb8, 0x04, + 0x95, 0xa1, 0xf8, 0xd1, 0xe1, 0xed, 0xc3, 0xee, 0xc7, 0x87, 0xf5, 0x14, 0x02, 0x28, 0xec, 0xb7, + 0x5a, 0xed, 0xa3, 0x93, 0x7a, 0x1a, 0x49, 0x90, 0xdf, 0x6f, 0x76, 0xd5, 0x93, 0x7a, 0x86, 0x8a, + 0xd5, 0xf6, 0x07, 0xed, 0xd6, 0x49, 0x3d, 0x8b, 0xd6, 0xa1, 0xc2, 0xc7, 0xda, 0xad, 0xae, 0xfa, + 0xe1, 0xfe, 0x49, 0x3d, 0x17, 0x11, 0x1d, 0xb7, 0x0f, 0xdf, 0x6f, 0xab, 0xf5, 0xbc, 0xf2, 0x3d, + 0x5a, 0x4d, 0x25, 0xd0, 0x9e, 0xb0, 0x6e, 0x4a, 0x47, 0xea, 0x26, 0xe5, 0xf7, 0x19, 0x90, 0x93, + 0xb9, 0x0c, 0xfa, 0x60, 0x6a, 0xe1, 0x7b, 0x97, 0x20, 0x42, 0x53, 0xab, 0x47, 0x2f, 0x42, 0xd5, + 0xc5, 0xa7, 0x98, 0xf4, 0x87, 0x9c, 0x5b, 0xf1, 0xc4, 0x56, 0x51, 0x2b, 0x42, 0xca, 0x8c, 0x3c, + 0xae, 0xf6, 0x19, 0xee, 0x13, 0x8d, 0x97, 0x70, 0x7c, 0xd3, 0x49, 0x54, 0x8d, 0x4a, 0x8f, 0xb9, + 0x50, 0xf9, 0xf4, 0x52, 0xb1, 0x94, 0x20, 0xaf, 0xb6, 0x4f, 0xd4, 0x9f, 0xd5, 0xb3, 0x08, 0x41, + 0x95, 0x0d, 0xb5, 0xe3, 0xc3, 0xfd, 0xa3, 0xe3, 0x4e, 0x97, 0xc6, 0xf2, 0x0a, 0xd4, 0xfc, 0x58, + 0xfa, 0xc2, 0xbc, 0x72, 0x23, 0xdc, 0x0d, 0xcb, 0x6a, 0xc7, 0x7f, 0xa7, 0xa1, 0x36, 0x75, 0x96, + 0xd0, 0x1e, 0xe4, 0x39, 0x95, 0x4f, 0xba, 0x6a, 0x60, 0x50, 0x20, 0x0e, 0x1e, 0x57, 0x45, 0xef, + 0x40, 0x09, 0x8b, 0x6e, 0xc6, 0xbc, 0x33, 0xcb, 0xbb, 0x30, 0x7e, 0xbf, 0x43, 0x98, 0x06, 0x16, + 0xe8, 0x5d, 0x90, 0x02, 0x50, 0x10, 0xf5, 0xe3, 0xf3, 0xb3, 0xe6, 0x01, 0x9c, 0x08, 0xfb, 0xd0, + 0x06, 0xbd, 0x15, 0xd2, 0xb7, 0xdc, 0x6c, 0x01, 0x21, 0xcc, 0xb9, 0x82, 0x30, 0xf6, 0xf5, 0x95, + 0x16, 0x94, 0x23, 0xeb, 0x41, 0xcf, 0x82, 0x34, 0xd6, 0xcf, 0x45, 0x97, 0x8c, 0xf7, 0x39, 0x4a, + 0x63, 0xfd, 0x9c, 0x37, 0xc8, 0x9e, 0x86, 0x22, 0x7d, 0x38, 0xd0, 0x39, 0x30, 0x65, 0xd5, 0xc2, + 0x58, 0x3f, 0xff, 0xb1, 0xee, 0x29, 0x9f, 0x40, 0x35, 0xde, 0x21, 0xa2, 0x9b, 0xd6, 0xb5, 0x27, + 0x96, 0xc1, 0x7c, 0xe4, 0x55, 0x3e, 0x41, 0xaf, 0x43, 0xfe, 0xcc, 0xe6, 0xb8, 0x36, 0xff, 0x74, + 0xdf, 0xb5, 0x09, 0x8e, 0x74, 0x98, 0xb8, 0xb6, 0xf2, 0x05, 0xe4, 0x19, 0x4e, 0x51, 0xcc, 0x61, + 0xbd, 0x1e, 0x41, 0x5d, 0xe9, 0x18, 0x7d, 0x02, 0xa0, 0x13, 0xe2, 0x9a, 0xbd, 0x49, 0xe8, 0x78, + 0x6b, 0x3e, 0xce, 0xed, 0xfb, 0x7a, 0xcd, 0x6b, 0x02, 0xf0, 0x36, 0x42, 0xd3, 0x08, 0xe8, 0x45, + 0x1c, 0x2a, 0x87, 0x50, 0x8d, 0xdb, 0x46, 0xbb, 0xae, 0x6b, 0x73, 0xba, 0xae, 0x01, 0x3d, 0x0a, + 0xc8, 0x55, 0x96, 0xf7, 0xf5, 0xd8, 0x44, 0x79, 0x98, 0x86, 0xd2, 0xc9, 0xb9, 0x38, 0x01, 0x09, + 0x2d, 0xa5, 0xd0, 0x34, 0x13, 0x6d, 0xa0, 0xf0, 0x1e, 0x55, 0x36, 0xe8, 0x7c, 0xbd, 0x17, 0x9c, + 0xf1, 0xdc, 0xaa, 0x85, 0xab, 0xdf, 0x02, 0x14, 0xb8, 0xf6, 0x36, 0x48, 0xc1, 0xae, 0xa2, 0x35, + 0x80, 0x6e, 0x18, 0x2e, 0xf6, 0x3c, 0xb1, 0x36, 0x7f, 0xca, 0x3a, 0x94, 0xf6, 0x03, 0xd1, 0xa2, + 0xc9, 0xaa, 0x7c, 0xa2, 0x18, 0x50, 0x9b, 0xca, 0x70, 0xe8, 0x6d, 0x28, 0x3a, 0x93, 0x9e, 0xe6, + 0x87, 0x67, 0xea, 0xf0, 0xf8, 0x7c, 0x70, 0xd2, 0x1b, 0x99, 0xfd, 0xdb, 0xf8, 0xc2, 0xff, 0x31, + 0xce, 0xa4, 0x77, 0x9b, 0x47, 0x91, 0xbf, 0x25, 0x13, 0x7d, 0xcb, 0x19, 0x94, 0xfc, 0x4d, 0x81, + 0x7e, 0x14, 0x3d, 0x27, 0x7e, 0xdf, 0x3a, 0x31, 0xeb, 0x0a, 0xf7, 0x91, 0x63, 0x72, 0x13, 0xd6, + 0x3d, 0x73, 0x60, 0x61, 0x43, 0x0b, 0xab, 0x10, 0xf6, 0xb6, 0x92, 0x5a, 0xe3, 0x0f, 0xee, 0xf8, + 0x25, 0x88, 0xf2, 0x28, 0x0d, 0x25, 0xff, 0xc0, 0xce, 0xdd, 0x77, 0xb1, 0x1f, 0x93, 0xb9, 0xfc, + 0x8f, 0x49, 0x6a, 0x07, 0xfb, 0x7d, 0xf9, 0xdc, 0xa5, 0xfb, 0xf2, 0xaf, 0x00, 0x22, 0x36, 0xd1, + 0x47, 0xda, 0x99, 0x4d, 0x4c, 0x6b, 0xa0, 0xf1, 0x68, 0x72, 0x76, 0x55, 0x67, 0x4f, 0xee, 0xb2, + 0x07, 0x47, 0x2c, 0xb0, 0xbf, 0x4a, 0x43, 0x29, 0xc8, 0x93, 0x97, 0x6d, 0x0a, 0x5e, 0x85, 0x82, + 0x48, 0x05, 0xbc, 0x2b, 0x28, 0x66, 0x41, 0x7f, 0x3a, 0x17, 0xe9, 0x4f, 0xcb, 0x50, 0x1a, 0x63, + 0xa2, 0x33, 0xb2, 0xc0, 0x2b, 0xbd, 0x60, 0x7e, 0xf3, 0x2d, 0x28, 0x47, 0xfa, 0xb3, 0xf4, 0x68, + 0x1d, 0xb6, 0x3f, 0xae, 0xa7, 0xe4, 0xe2, 0xc3, 0xaf, 0xb6, 0xb3, 0x87, 0xf8, 0x01, 0xdd, 0x94, + 0x6a, 0xbb, 0xd5, 0x69, 0xb7, 0x6e, 0xd7, 0xd3, 0x72, 0xf9, 0xe1, 0x57, 0xdb, 0x45, 0x15, 0xb3, + 0xe6, 0xcd, 0xde, 0x13, 0x80, 0xda, 0x7e, 0xb3, 0x75, 0x40, 0xf3, 0x97, 0xd9, 0xd7, 0x45, 0x4b, + 0x2b, 0xc7, 0xca, 0xe3, 0x85, 0xd7, 0xc3, 0xf2, 0xe2, 0x8e, 0x1e, 0xba, 0x05, 0x79, 0x56, 0x39, + 0xa3, 0xc5, 0xf7, 0xc5, 0xf2, 0x92, 0x16, 0x1f, 0xfd, 0x31, 0x6c, 0xd7, 0x2e, 0xbc, 0x40, 0x96, + 0x17, 0x77, 0xfc, 0x90, 0x0a, 0x52, 0x58, 0xfa, 0x2e, 0xbf, 0x50, 0x96, 0x57, 0xe8, 0x02, 0x52, + 0x9f, 0x21, 0xb1, 0x5f, 0x7e, 0xc1, 0x2a, 0xaf, 0x80, 0x2b, 0xe8, 0x0e, 0x14, 0xfd, 0x92, 0x69, + 0xd9, 0x95, 0xaf, 0xbc, 0xb4, 0x43, 0x47, 0x3f, 0x01, 0x2f, 0x6d, 0x17, 0xdf, 0x5f, 0xcb, 0x4b, + 0xda, 0x8d, 0xe8, 0x00, 0x0a, 0x82, 0xad, 0x2e, 0xb9, 0xc6, 0x95, 0x97, 0x75, 0xdc, 0x68, 0xd0, + 0xc2, 0x9e, 0xc1, 0xf2, 0x5b, 0x79, 0x79, 0x85, 0x4e, 0x2a, 0xfa, 0x08, 0x20, 0x52, 0xc8, 0xae, + 0x70, 0xdd, 0x2e, 0xaf, 0xd2, 0x21, 0x45, 0x5d, 0x28, 0x05, 0x05, 0xcb, 0xd2, 0xcb, 0x6f, 0x79, + 0x79, 0xab, 0x12, 0xdd, 0x83, 0x4a, 0x9c, 0xa9, 0xaf, 0x76, 0xa5, 0x2d, 0xaf, 0xd8, 0x83, 0xa4, + 0xfe, 0xe3, 0xb4, 0x7d, 0xb5, 0x2b, 0x6e, 0x79, 0xc5, 0x96, 0x24, 0xfa, 0x0c, 0xd6, 0x67, 0x69, + 0xf5, 0xea, 0x37, 0xde, 0xf2, 0x25, 0x9a, 0x94, 0x68, 0x0c, 0x68, 0x0e, 0x1d, 0xbf, 0xc4, 0x05, + 0xb8, 0x7c, 0x99, 0x9e, 0x25, 0x0d, 0x5d, 0x9c, 0xe3, 0xae, 0x76, 0x21, 0x2e, 0xaf, 0xd8, 0xbd, + 0x6c, 0xb6, 0xbf, 0x7e, 0xbc, 0x99, 0xfe, 0xe6, 0xf1, 0x66, 0xfa, 0xef, 0x8f, 0x37, 0xd3, 0x5f, + 0x3e, 0xd9, 0x4c, 0x7d, 0xf3, 0x64, 0x33, 0xf5, 0xd7, 0x27, 0x9b, 0xa9, 0x9f, 0xbf, 0x3c, 0x30, + 0xc9, 0x70, 0xd2, 0xdb, 0xe9, 0xdb, 0xe3, 0xdd, 0xe8, 0xbf, 0x7f, 0xe6, 0xfd, 0x23, 0xa9, 0x57, + 0x60, 0xe9, 0xeb, 0xb5, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xf6, 0x16, 0xad, 0xb1, 0x24, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3488,6 +3489,7 @@ type ABCIApplicationClient interface { OfferSnapshot(ctx context.Context, in *RequestOfferSnapshot, opts ...grpc.CallOption) (*ResponseOfferSnapshot, error) LoadSnapshotChunk(ctx context.Context, in *RequestLoadSnapshotChunk, opts ...grpc.CallOption) (*ResponseLoadSnapshotChunk, error) ApplySnapshotChunk(ctx context.Context, in *RequestApplySnapshotChunk, opts ...grpc.CallOption) (*ResponseApplySnapshotChunk, error) + PreprocessTxs(ctx context.Context, in *RequestPreprocessTxs, opts ...grpc.CallOption) (*ResponsePreprocessTxs, error) } type aBCIApplicationClient struct { @@ -3633,6 +3635,15 @@ func (c *aBCIApplicationClient) ApplySnapshotChunk(ctx context.Context, in *Requ return out, nil } +func (c *aBCIApplicationClient) PreprocessTxs(ctx context.Context, in *RequestPreprocessTxs, opts ...grpc.CallOption) (*ResponsePreprocessTxs, error) { + out := new(ResponsePreprocessTxs) + err := c.cc.Invoke(ctx, "/tendermint.abci.ABCIApplication/PreprocessTxs", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ABCIApplicationServer is the server API for ABCIApplication service. type ABCIApplicationServer interface { Echo(context.Context, *RequestEcho) (*ResponseEcho, error) @@ -3650,6 +3661,7 @@ type ABCIApplicationServer interface { OfferSnapshot(context.Context, *RequestOfferSnapshot) (*ResponseOfferSnapshot, error) LoadSnapshotChunk(context.Context, *RequestLoadSnapshotChunk) (*ResponseLoadSnapshotChunk, error) ApplySnapshotChunk(context.Context, *RequestApplySnapshotChunk) (*ResponseApplySnapshotChunk, error) + PreprocessTxs(context.Context, *RequestPreprocessTxs) (*ResponsePreprocessTxs, error) } // UnimplementedABCIApplicationServer can be embedded to have forward compatible implementations. @@ -3701,6 +3713,9 @@ func (*UnimplementedABCIApplicationServer) LoadSnapshotChunk(ctx context.Context func (*UnimplementedABCIApplicationServer) ApplySnapshotChunk(ctx context.Context, req *RequestApplySnapshotChunk) (*ResponseApplySnapshotChunk, error) { return nil, status.Errorf(codes.Unimplemented, "method ApplySnapshotChunk not implemented") } +func (*UnimplementedABCIApplicationServer) PreprocessTxs(ctx context.Context, req *RequestPreprocessTxs) (*ResponsePreprocessTxs, error) { + return nil, status.Errorf(codes.Unimplemented, "method PreprocessTxs not implemented") +} func RegisterABCIApplicationServer(s *grpc.Server, srv ABCIApplicationServer) { s.RegisterService(&_ABCIApplication_serviceDesc, srv) @@ -3976,6 +3991,24 @@ func _ABCIApplication_ApplySnapshotChunk_Handler(srv interface{}, ctx context.Co return interceptor(ctx, in, info, handler) } +func _ABCIApplication_PreprocessTxs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequestPreprocessTxs) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABCIApplicationServer).PreprocessTxs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/tendermint.abci.ABCIApplication/PreprocessTxs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABCIApplicationServer).PreprocessTxs(ctx, req.(*RequestPreprocessTxs)) + } + return interceptor(ctx, in, info, handler) +} + var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ ServiceName: "tendermint.abci.ABCIApplication", HandlerType: (*ABCIApplicationServer)(nil), @@ -4040,6 +4073,10 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{ MethodName: "ApplySnapshotChunk", Handler: _ABCIApplication_ApplySnapshotChunk_Handler, }, + { + MethodName: "PreprocessTxs", + Handler: _ABCIApplication_PreprocessTxs_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "tendermint/abci/types.proto", diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index ba24f347ae..6d7fa3c98c 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -408,4 +408,5 @@ service ABCIApplication { rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) returns (ResponseLoadSnapshotChunk); rpc ApplySnapshotChunk(RequestApplySnapshotChunk) returns (ResponseApplySnapshotChunk); + rpc PreprocessTxs(RequestPreprocessTxs) returns (ResponsePreprocessTxs); } diff --git a/proxy/app_conn.go b/proxy/app_conn.go index 376c19342f..7b50959156 100644 --- a/proxy/app_conn.go +++ b/proxy/app_conn.go @@ -28,6 +28,7 @@ type AppConnMempool interface { CheckTxAsync(types.RequestCheckTx) *abcicli.ReqRes CheckTxSync(types.RequestCheckTx) (*types.ResponseCheckTx, error) + PreprocessTxs(types.RequestPreprocessTxs) types.ResponsePreprocessTxs FlushAsync() *abcicli.ReqRes FlushSync() error @@ -130,6 +131,10 @@ func (app *appConnMempool) CheckTxSync(req types.RequestCheckTx) (*types.Respons return app.appConn.CheckTxSync(req) } +func (app *appConnMempool) PreprocessTxs(req types.RequestPreprocessTxs) (*types.RequestPreprocessTxs, error) { + return app.appConn.PreprocessTxs(req) +} + //------------------------------------------------ // Implements AppConnQuery (subset of abcicli.Client) From 35ca92b09e92fcfeac1e0ff10e9011303717cf5b Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 21 Aug 2020 17:05:40 +0200 Subject: [PATCH 11/32] fix build errors --- abci/client/client.go | 1 + evidence/mocks/block_store.go | 2 +- proxy/app_conn.go | 11 ++++++++--- state/mocks/evidence_pool.go | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/abci/client/client.go b/abci/client/client.go index 36ee8161d8..0fbcb3a59d 100644 --- a/abci/client/client.go +++ b/abci/client/client.go @@ -19,6 +19,7 @@ const ( // All `Sync` methods return the appropriate protobuf ResponseXxx struct and an error. // Note these are client errors, eg. ABCI socket connectivity issues. // Application-related errors are reflected in response via ABCI error codes and logs. +//go:generate mockery -case underscore -name Client type Client interface { service.Service diff --git a/evidence/mocks/block_store.go b/evidence/mocks/block_store.go index 0b1fa334f1..84c695844c 100644 --- a/evidence/mocks/block_store.go +++ b/evidence/mocks/block_store.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.1.0. DO NOT EDIT. +// Code generated by mockery v2.2.1. DO NOT EDIT. package mocks diff --git a/proxy/app_conn.go b/proxy/app_conn.go index 7b50959156..a974b265e6 100644 --- a/proxy/app_conn.go +++ b/proxy/app_conn.go @@ -28,7 +28,8 @@ type AppConnMempool interface { CheckTxAsync(types.RequestCheckTx) *abcicli.ReqRes CheckTxSync(types.RequestCheckTx) (*types.ResponseCheckTx, error) - PreprocessTxs(types.RequestPreprocessTxs) types.ResponsePreprocessTxs + PreprocessTxsSync(types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) + PreprocessTxsAsync(types.RequestPreprocessTxs) *abcicli.ReqRes FlushAsync() *abcicli.ReqRes FlushSync() error @@ -131,8 +132,12 @@ func (app *appConnMempool) CheckTxSync(req types.RequestCheckTx) (*types.Respons return app.appConn.CheckTxSync(req) } -func (app *appConnMempool) PreprocessTxs(req types.RequestPreprocessTxs) (*types.RequestPreprocessTxs, error) { - return app.appConn.PreprocessTxs(req) +func (app *appConnMempool) PreprocessTxsAsync(req types.RequestPreprocessTxs) *abcicli.ReqRes { + return app.appConn.PreprocessTxsAsync(req) +} + +func (app *appConnMempool) PreprocessTxsSync(req types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) { + return app.appConn.PreprocessTxsSync(req) } //------------------------------------------------ diff --git a/state/mocks/evidence_pool.go b/state/mocks/evidence_pool.go index fe271c0f00..fc7d140e02 100644 --- a/state/mocks/evidence_pool.go +++ b/state/mocks/evidence_pool.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.1.0. DO NOT EDIT. +// Code generated by mockery v2.2.1. DO NOT EDIT. package mocks From 6a8161d7badff9ee1d51218182396d29c5e96faa Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 21 Aug 2020 17:34:43 +0200 Subject: [PATCH 12/32] move to consensus connection --- proxy/app_conn.go | 16 ++++++---------- state/execution.go | 7 ++++++- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/proxy/app_conn.go b/proxy/app_conn.go index a974b265e6..80c1bfa99e 100644 --- a/proxy/app_conn.go +++ b/proxy/app_conn.go @@ -20,6 +20,8 @@ type AppConnConsensus interface { DeliverTxAsync(types.RequestDeliverTx) *abcicli.ReqRes EndBlockSync(types.RequestEndBlock) (*types.ResponseEndBlock, error) CommitSync() (*types.ResponseCommit, error) + + PreprocessTxs(types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) } type AppConnMempool interface { @@ -28,8 +30,6 @@ type AppConnMempool interface { CheckTxAsync(types.RequestCheckTx) *abcicli.ReqRes CheckTxSync(types.RequestCheckTx) (*types.ResponseCheckTx, error) - PreprocessTxsSync(types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) - PreprocessTxsAsync(types.RequestPreprocessTxs) *abcicli.ReqRes FlushAsync() *abcicli.ReqRes FlushSync() error @@ -95,6 +95,10 @@ func (app *appConnConsensus) CommitSync() (*types.ResponseCommit, error) { return app.appConn.CommitSync() } +func (app *appConnConsensus) PreprocessTxs(req types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) { + return app.appConn.PreprocessTxsSync(req) +} + //------------------------------------------------ // Implements AppConnMempool (subset of abcicli.Client) @@ -132,14 +136,6 @@ func (app *appConnMempool) CheckTxSync(req types.RequestCheckTx) (*types.Respons return app.appConn.CheckTxSync(req) } -func (app *appConnMempool) PreprocessTxsAsync(req types.RequestPreprocessTxs) *abcicli.ReqRes { - return app.appConn.PreprocessTxsAsync(req) -} - -func (app *appConnMempool) PreprocessTxsSync(req types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) { - return app.appConn.PreprocessTxsSync(req) -} - //------------------------------------------------ // Implements AppConnQuery (subset of abcicli.Client) diff --git a/state/execution.go b/state/execution.go index cf601aabc9..6f8a963d47 100644 --- a/state/execution.go +++ b/state/execution.go @@ -107,7 +107,12 @@ func (blockExec *BlockExecutor) CreateProposalBlock( // Fetch a limited amount of valid txs maxDataBytes := types.MaxDataBytes(maxBytes, state.Validators.Size(), len(evidence)) txs := blockExec.mempool.ReapMaxBytesMaxGas(maxDataBytes, maxGas) - // processedBlockTxs = PreProcess(txs) //TODO: create preprocess func + processedBlockTxs, err := blockExec.proxyApp.PreprocessTxs(abci.RequestPreprocessTxs{Txs: txs}) //TODO txs != [][]byte + if err != nil { + // TODO: what to do?? + } + + processedBlockTxs.GetTxs() return state.MakeBlock(height, txs, commit, evidence, proposerAddr) } From 6ea48d004f3cffd83ae4d5091d35ada27b3d51f8 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 21 Aug 2020 17:47:13 +0200 Subject: [PATCH 13/32] add process --- abci/example/kvstore/persistent_kvstore.go | 1 + proxy/app_conn.go | 4 ++-- state/execution.go | 20 ++++++++++++++++---- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/abci/example/kvstore/persistent_kvstore.go b/abci/example/kvstore/persistent_kvstore.go index f6f960048d..61a1e73a0e 100644 --- a/abci/example/kvstore/persistent_kvstore.go +++ b/abci/example/kvstore/persistent_kvstore.go @@ -171,6 +171,7 @@ func (app *PersistentKVStoreApplication) ApplySnapshotChunk( return types.ResponseApplySnapshotChunk{Result: types.ResponseApplySnapshotChunk_ABORT} } +// TODO: add some funcality to test this func (app *PersistentKVStoreApplication) PreprocessTxs( req types.RequestPreprocessTxs) types.ResponsePreprocessTxs { return types.ResponsePreprocessTxs{} diff --git a/proxy/app_conn.go b/proxy/app_conn.go index 80c1bfa99e..7177e66d9b 100644 --- a/proxy/app_conn.go +++ b/proxy/app_conn.go @@ -21,7 +21,7 @@ type AppConnConsensus interface { EndBlockSync(types.RequestEndBlock) (*types.ResponseEndBlock, error) CommitSync() (*types.ResponseCommit, error) - PreprocessTxs(types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) + PreprocessTxsSync(types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) } type AppConnMempool interface { @@ -95,7 +95,7 @@ func (app *appConnConsensus) CommitSync() (*types.ResponseCommit, error) { return app.appConn.CommitSync() } -func (app *appConnConsensus) PreprocessTxs(req types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) { +func (app *appConnConsensus) PreprocessTxsSync(req types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) { return app.appConn.PreprocessTxsSync(req) } diff --git a/state/execution.go b/state/execution.go index 6f8a963d47..1a17ea2835 100644 --- a/state/execution.go +++ b/state/execution.go @@ -107,14 +107,26 @@ func (blockExec *BlockExecutor) CreateProposalBlock( // Fetch a limited amount of valid txs maxDataBytes := types.MaxDataBytes(maxBytes, state.Validators.Size(), len(evidence)) txs := blockExec.mempool.ReapMaxBytesMaxGas(maxDataBytes, maxGas) - processedBlockTxs, err := blockExec.proxyApp.PreprocessTxs(abci.RequestPreprocessTxs{Txs: txs}) //TODO txs != [][]byte + l := len(txs) + bzs := make([][]byte, l) + for i := 0; i < l; i++ { + bzs[i] = txs[i] + } + + processedBlockTxs, err := blockExec.proxyApp.PreprocessTxsSync(abci.RequestPreprocessTxs{Txs: bzs}) if err != nil { - // TODO: what to do?? + panic(err) // TODO: what to do?? } - processedBlockTxs.GetTxs() + ppt := processedBlockTxs.GetTxs() + + lp := len(ppt) + processedTxs := make(types.Txs, lp) + for i := 0; i < l; i++ { + processedTxs[i] = ppt[i] + } - return state.MakeBlock(height, txs, commit, evidence, proposerAddr) + return state.MakeBlock(height, processedTxs, commit, evidence, proposerAddr) } // ValidateBlock validates the given block against the given state. From 0caedd26b9072312a39e486201d711ecc0257afa Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 10 Sep 2020 16:21:35 +0200 Subject: [PATCH 14/32] add proof to block --- abci/types/types.pb.go | 327 +++++++++++++++++------------- blockchain/msgs_test.go | 2 +- blockchain/v0/reactor_test.go | 2 +- blockchain/v1/peer_test.go | 2 +- blockchain/v1/pool_test.go | 12 +- blockchain/v1/reactor_fsm_test.go | 4 +- blockchain/v1/reactor_test.go | 3 +- blockchain/v2/reactor_test.go | 2 +- consensus/replay_test.go | 2 +- evidence/pool_test.go | 8 +- proto/tendermint/abci/types.proto | 3 +- state/execution.go | 4 +- state/execution_test.go | 4 +- state/helpers_test.go | 3 +- state/state.go | 3 +- state/validation_test.go | 8 +- store/store_test.go | 2 +- types/block.go | 4 + types/block_test.go | 22 +- types/event_bus_test.go | 4 +- types/test_util.go | 5 +- 21 files changed, 245 insertions(+), 181 deletions(-) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index 1b6735adce..159f324019 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -2506,7 +2506,8 @@ func (m *ResponseApplySnapshotChunk) GetRejectSenders() []string { } type ResponsePreprocessTxs struct { - Txs [][]byte `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"` + Txs [][]byte `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"` + Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` } func (m *ResponsePreprocessTxs) Reset() { *m = ResponsePreprocessTxs{} } @@ -2549,6 +2550,13 @@ func (m *ResponsePreprocessTxs) GetTxs() [][]byte { return nil } +func (m *ResponsePreprocessTxs) GetProof() []byte { + if m != nil { + return m.Proof + } + return nil +} + // ConsensusParams contains all consensus-relevant parameters // that can be adjusted by the abci app type ConsensusParams struct { @@ -3286,10 +3294,10 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 2754 bytes of a gzipped FileDescriptorProto + // 2763 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x4b, 0x77, 0x23, 0xc5, 0xf5, 0xd7, 0x5b, 0xea, 0x2b, 0xeb, 0xe1, 0x1a, 0x33, 0x88, 0x66, 0xb0, 0x4d, 0x73, 0xe0, 0x3f, - 0x33, 0x80, 0xfd, 0x8f, 0x39, 0x10, 0x08, 0x24, 0x60, 0x09, 0x4d, 0x64, 0x66, 0xb0, 0x9c, 0xb6, + 0x0c, 0x60, 0xff, 0x63, 0x0e, 0x04, 0x02, 0x09, 0x58, 0x42, 0x13, 0x99, 0x19, 0x2c, 0xa7, 0xed, 0x19, 0xf2, 0x62, 0x9a, 0x96, 0xba, 0x2c, 0x35, 0x23, 0x75, 0x37, 0xdd, 0x25, 0x8f, 0xcd, 0x32, 0x8f, 0xcd, 0x64, 0xc3, 0x32, 0x1b, 0xbe, 0x46, 0x4e, 0x56, 0xd9, 0x64, 0xc3, 0x39, 0xd9, 0xb0, 0xcc, 0x6a, 0x92, 0xcc, 0xec, 0xf2, 0x05, 0xb2, 0x4c, 0x4e, 0x3d, 0xfa, 0x25, 0xa9, 0x25, 0x19, @@ -3302,164 +3310,164 @@ var fileDescriptor_252557cfdd89a31a = []byte{ 0xe6, 0x18, 0x7b, 0x44, 0x1f, 0x3b, 0x42, 0x61, 0x63, 0x60, 0x0f, 0x6c, 0x36, 0xdc, 0xa5, 0x23, 0x2e, 0x55, 0xfe, 0x51, 0x82, 0xa2, 0x8a, 0x3f, 0x9f, 0x60, 0x8f, 0xa0, 0x3d, 0xc8, 0xe1, 0xfe, 0xd0, 0x6e, 0xa4, 0xb7, 0xd3, 0xd7, 0xcb, 0x7b, 0xd7, 0x76, 0xa6, 0x16, 0xb7, 0x23, 0xf4, 0xda, - 0xfd, 0xa1, 0xdd, 0x49, 0xa9, 0x4c, 0x17, 0xbd, 0x0e, 0xf9, 0xd3, 0xd1, 0xc4, 0x1b, 0x36, 0x32, - 0xcc, 0xe8, 0xb9, 0x24, 0xa3, 0x5b, 0x54, 0xa9, 0x93, 0x52, 0xb9, 0x36, 0x7d, 0x95, 0x69, 0x9d, + 0xfd, 0xa1, 0xdd, 0x49, 0xa9, 0x4c, 0x17, 0xbd, 0x01, 0xf9, 0xd3, 0xd1, 0xc4, 0x1b, 0x36, 0x32, + 0xcc, 0xe8, 0xb9, 0x24, 0xa3, 0x9b, 0x54, 0xa9, 0x93, 0x52, 0xb9, 0x36, 0x7d, 0x95, 0x69, 0x9d, 0xda, 0x8d, 0xec, 0xe2, 0x57, 0x1d, 0x58, 0xa7, 0xec, 0x55, 0x54, 0x17, 0x35, 0x01, 0x3c, 0x4c, 0x34, 0xdb, 0x21, 0xa6, 0x6d, 0x35, 0x72, 0xcc, 0xf2, 0xf9, 0x24, 0xcb, 0x63, 0x4c, 0xba, 0x4c, 0xb1, 0x93, 0x52, 0x25, 0xcf, 0x9f, 0x50, 0x1f, 0xa6, 0x65, 0x12, 0xad, 0x3f, 0xd4, 0x4d, 0xab, 0x91, 0x5f, 0xec, 0xe3, 0xc0, 0x32, 0x49, 0x8b, 0x2a, 0x52, 0x1f, 0xa6, 0x3f, 0xa1, 0x4b, 0xfe, 0x7c, 0x82, 0xdd, 0x8b, 0x46, 0x61, 0xf1, 0x92, 0x7f, 0x42, 0x95, 0xe8, 0x92, 0x99, 0x36, 0x6a, 0x43, 0xb9, 0x87, 0x07, 0xa6, 0xa5, 0xf5, 0x46, 0x76, 0xff, 0x7e, 0xa3, 0xc8, 0x8c, 0x95, 0x24, - 0xe3, 0x26, 0x55, 0x6d, 0x52, 0xcd, 0x4e, 0x4a, 0x85, 0x5e, 0x30, 0x43, 0xef, 0x40, 0xa9, 0x3f, + 0xe3, 0x26, 0x55, 0x6d, 0x52, 0xcd, 0x4e, 0x4a, 0x85, 0x5e, 0x30, 0x43, 0xef, 0x42, 0xa9, 0x3f, 0xc4, 0xfd, 0xfb, 0x1a, 0x39, 0x6f, 0x94, 0x98, 0x8f, 0xad, 0x24, 0x1f, 0x2d, 0xaa, 0x77, 0x72, 0xde, 0x49, 0xa9, 0xc5, 0x3e, 0x1f, 0xd2, 0xf5, 0x1b, 0x78, 0x64, 0x9e, 0x61, 0x97, 0xda, 0x4b, - 0x8b, 0xd7, 0xff, 0x3e, 0xd7, 0x64, 0x1e, 0x24, 0xc3, 0x9f, 0xa0, 0x77, 0x41, 0xc2, 0x96, 0x21, - 0x96, 0x01, 0xcc, 0xc5, 0x76, 0xe2, 0x5e, 0xb1, 0x0c, 0x7f, 0x11, 0x25, 0x2c, 0xc6, 0xe8, 0x4d, + 0x8b, 0xd7, 0xff, 0x01, 0xd7, 0x64, 0x1e, 0x24, 0xc3, 0x9f, 0xa0, 0xf7, 0x40, 0xc2, 0x96, 0x21, + 0x96, 0x01, 0xcc, 0xc5, 0x76, 0xe2, 0x5e, 0xb1, 0x0c, 0x7f, 0x11, 0x25, 0x2c, 0xc6, 0xe8, 0x2d, 0x28, 0xf4, 0xed, 0xf1, 0xd8, 0x24, 0x8d, 0x32, 0xb3, 0xde, 0x4c, 0x5c, 0x00, 0xd3, 0xea, 0xa4, 0x54, 0xa1, 0x8f, 0x0e, 0xa1, 0x3a, 0x32, 0x3d, 0xa2, 0x79, 0x96, 0xee, 0x78, 0x43, 0x9b, 0x78, - 0x8d, 0x35, 0xe6, 0xe1, 0xc5, 0x24, 0x0f, 0x77, 0x4c, 0x8f, 0x1c, 0xfb, 0xca, 0x9d, 0x94, 0x5a, + 0x8d, 0x35, 0xe6, 0xe1, 0xc5, 0x24, 0x0f, 0xb7, 0x4d, 0x8f, 0x1c, 0xfb, 0xca, 0x9d, 0x94, 0x5a, 0x19, 0x45, 0x05, 0xd4, 0x9f, 0x7d, 0x7a, 0x8a, 0xdd, 0xc0, 0x61, 0xa3, 0xb2, 0xd8, 0x5f, 0x97, 0x6a, 0xfb, 0xf6, 0xd4, 0x9f, 0x1d, 0x15, 0xa0, 0x5f, 0xc0, 0x95, 0x91, 0xad, 0x1b, 0x81, 0x3b, - 0xad, 0x3f, 0x9c, 0x58, 0xf7, 0x1b, 0x55, 0xe6, 0xf4, 0x46, 0xe2, 0x8f, 0xb4, 0x75, 0xc3, 0x77, - 0xd1, 0xa2, 0x06, 0x9d, 0x94, 0xba, 0x3e, 0x9a, 0x16, 0xa2, 0x7b, 0xb0, 0xa1, 0x3b, 0xce, 0xe8, - 0x62, 0xda, 0x7b, 0x8d, 0x79, 0xbf, 0x99, 0xe4, 0x7d, 0x9f, 0xda, 0x4c, 0xbb, 0x47, 0xfa, 0x8c, - 0x94, 0x06, 0xc3, 0x71, 0xb1, 0xe3, 0xda, 0x7d, 0xec, 0x79, 0x1a, 0x39, 0xf7, 0x1a, 0xeb, 0x8b, - 0x83, 0x71, 0x14, 0x68, 0x9f, 0x9c, 0xb3, 0xe0, 0x3a, 0x51, 0x41, 0xb3, 0x08, 0xf9, 0x33, 0x7d, - 0x34, 0xc1, 0xca, 0xff, 0x41, 0x39, 0x02, 0x1d, 0xa8, 0x01, 0xc5, 0x31, 0xf6, 0x3c, 0x7d, 0x80, - 0x19, 0xd2, 0x48, 0xaa, 0x3f, 0x55, 0xaa, 0xb0, 0x16, 0x85, 0x0b, 0x65, 0x1c, 0x18, 0x52, 0x20, - 0xa0, 0x86, 0x67, 0xd8, 0xf5, 0xe8, 0xe9, 0x17, 0x86, 0x62, 0x8a, 0x5e, 0x80, 0x0a, 0xdb, 0x8e, - 0x9a, 0xff, 0x9c, 0xa2, 0x51, 0x4e, 0x5d, 0x63, 0xc2, 0xbb, 0x42, 0x69, 0x0b, 0xca, 0xce, 0x9e, - 0x13, 0xa8, 0x64, 0x99, 0x0a, 0x38, 0x7b, 0x8e, 0x50, 0x50, 0x7e, 0x00, 0xf5, 0x69, 0xf4, 0x40, - 0x75, 0xc8, 0xde, 0xc7, 0x17, 0xe2, 0x7d, 0x74, 0x88, 0x36, 0xc4, 0xb2, 0xd8, 0x3b, 0x24, 0x55, - 0xac, 0xf1, 0x2f, 0x99, 0xc0, 0x38, 0x80, 0x0d, 0xf4, 0x26, 0xe4, 0x28, 0x0a, 0x0b, 0x40, 0x95, - 0x77, 0x38, 0x44, 0xef, 0xf8, 0x10, 0xbd, 0x73, 0xe2, 0x43, 0x74, 0xb3, 0xf4, 0xf5, 0xa3, 0xad, - 0xd4, 0x97, 0x7f, 0xdb, 0x4a, 0xab, 0xcc, 0x02, 0x3d, 0x43, 0x4f, 0xb9, 0x6e, 0x5a, 0x9a, 0x69, - 0x88, 0xf7, 0x14, 0xd9, 0xfc, 0xc0, 0x40, 0xb7, 0xa1, 0xde, 0xb7, 0x2d, 0x0f, 0x5b, 0xde, 0xc4, - 0xd3, 0x78, 0x0a, 0x10, 0x30, 0x3a, 0x7b, 0x0a, 0x5b, 0xbe, 0xe2, 0x11, 0xd3, 0x53, 0x6b, 0xfd, - 0xb8, 0x00, 0xdd, 0x02, 0x38, 0xd3, 0x47, 0xa6, 0xa1, 0x13, 0xdb, 0xf5, 0x1a, 0xb9, 0xed, 0xec, - 0x5c, 0x37, 0x77, 0x7d, 0x95, 0x8f, 0x1c, 0x43, 0x27, 0xb8, 0x99, 0xa3, 0xbf, 0x56, 0x8d, 0x58, + 0xad, 0x3f, 0x9c, 0x58, 0xf7, 0x1b, 0x55, 0xe6, 0xf4, 0xe5, 0xc4, 0x1f, 0x69, 0xeb, 0x86, 0xef, + 0xa2, 0x45, 0x0d, 0x3a, 0x29, 0x75, 0x7d, 0x34, 0x2d, 0x44, 0xf7, 0x60, 0x43, 0x77, 0x9c, 0xd1, + 0xc5, 0xb4, 0xf7, 0x1a, 0xf3, 0x7e, 0x23, 0xc9, 0xfb, 0x3e, 0xb5, 0x99, 0x76, 0x8f, 0xf4, 0x19, + 0x29, 0x0d, 0x86, 0xe3, 0x62, 0xc7, 0xb5, 0xfb, 0xd8, 0xf3, 0x34, 0x72, 0xee, 0x35, 0xd6, 0x17, + 0x07, 0xe3, 0x28, 0xd0, 0x3e, 0x39, 0x67, 0xc1, 0x75, 0xa2, 0x82, 0x66, 0x11, 0xf2, 0x67, 0xfa, + 0x68, 0x82, 0x95, 0xff, 0x83, 0x72, 0x04, 0x3a, 0x50, 0x03, 0x8a, 0x63, 0xec, 0x79, 0xfa, 0x00, + 0x33, 0xa4, 0x91, 0x54, 0x7f, 0xaa, 0x54, 0x61, 0x2d, 0x0a, 0x17, 0xca, 0x38, 0x30, 0xa4, 0x40, + 0x40, 0x0d, 0xcf, 0xb0, 0xeb, 0xd1, 0xd3, 0x2f, 0x0c, 0xc5, 0x14, 0xbd, 0x00, 0x15, 0xb6, 0x1d, + 0x35, 0xff, 0x39, 0x45, 0xa3, 0x9c, 0xba, 0xc6, 0x84, 0x77, 0x85, 0xd2, 0x16, 0x94, 0x9d, 0x3d, + 0x27, 0x50, 0xc9, 0x32, 0x15, 0x70, 0xf6, 0x1c, 0xa1, 0xa0, 0xfc, 0x00, 0xea, 0xd3, 0xe8, 0x81, + 0xea, 0x90, 0xbd, 0x8f, 0x2f, 0xc4, 0xfb, 0xe8, 0x10, 0x6d, 0x88, 0x65, 0xb1, 0x77, 0x48, 0xaa, + 0x58, 0xe3, 0x5f, 0x32, 0x81, 0x71, 0x00, 0x1b, 0xe8, 0x2d, 0xc8, 0x51, 0x14, 0x16, 0x80, 0x2a, + 0xef, 0x70, 0x88, 0xde, 0xf1, 0x21, 0x7a, 0xe7, 0xc4, 0x87, 0xe8, 0x66, 0xe9, 0xeb, 0x47, 0x5b, + 0xa9, 0x2f, 0xff, 0xb6, 0x95, 0x56, 0x99, 0x05, 0x7a, 0x86, 0x9e, 0x72, 0xdd, 0xb4, 0x34, 0xd3, + 0x10, 0xef, 0x29, 0xb2, 0xf9, 0x81, 0x81, 0x6e, 0x41, 0xbd, 0x6f, 0x5b, 0x1e, 0xb6, 0xbc, 0x89, + 0xa7, 0xf1, 0x14, 0x20, 0x60, 0x74, 0xf6, 0x14, 0xb6, 0x7c, 0xc5, 0x23, 0xa6, 0xa7, 0xd6, 0xfa, + 0x71, 0x01, 0xba, 0x09, 0x70, 0xa6, 0x8f, 0x4c, 0x43, 0x27, 0xb6, 0xeb, 0x35, 0x72, 0xdb, 0xd9, + 0xb9, 0x6e, 0xee, 0xfa, 0x2a, 0x77, 0x1c, 0x43, 0x27, 0xb8, 0x99, 0xa3, 0xbf, 0x56, 0x8d, 0x58, 0xa2, 0x97, 0xa0, 0xa6, 0x3b, 0x8e, 0xe6, 0x11, 0x9d, 0x60, 0xad, 0x77, 0x41, 0xb0, 0xc7, 0xc0, 0x75, 0x4d, 0xad, 0xe8, 0x8e, 0x73, 0x4c, 0xa5, 0x4d, 0x2a, 0x44, 0x2f, 0x42, 0x95, 0x02, 0xa9, 0xa9, 0x8f, 0xb4, 0x21, 0x36, 0x07, 0x43, 0xc2, 0x40, 0x34, 0xab, 0x56, 0x84, 0xb4, 0xc3, 0x84, 0x8a, 0x11, 0x6c, 0x04, 0x06, 0xa2, 0x08, 0x41, 0xce, 0xd0, 0x89, 0xce, 0x02, 0xb9, 0xa6, 0xb2, 0x31, 0x95, 0x39, 0x3a, 0x19, 0x8a, 0xf0, 0xb0, 0x31, 0xba, 0x0a, 0x05, 0xe1, 0x36, 0xcb, 0xdc, 0x8a, 0x19, 0xfd, 0x66, 0x8e, 0x6b, 0x9f, 0x61, 0x96, 0x35, 0x4a, 0x2a, 0x9f, 0x28, 0xbf, 0xc9, - 0xc0, 0xfa, 0x0c, 0xdc, 0x52, 0xbf, 0x43, 0xdd, 0x1b, 0xfa, 0xef, 0xa2, 0x63, 0xf4, 0x06, 0xf5, + 0xc0, 0xfa, 0x0c, 0xdc, 0x52, 0xbf, 0x43, 0xdd, 0x1b, 0xfa, 0xef, 0xa2, 0x63, 0xf4, 0x26, 0xf5, 0xab, 0x1b, 0xd8, 0x15, 0x69, 0xae, 0x11, 0x0d, 0x11, 0x4f, 0xe1, 0x1d, 0xf6, 0x5c, 0x84, 0x46, 0x68, 0xa3, 0x2e, 0xd4, 0x47, 0xba, 0x47, 0x34, 0x0e, 0x5f, 0x5a, 0x24, 0xe5, 0xcd, 0x82, 0xf6, - 0x1d, 0xdd, 0x07, 0x3c, 0xba, 0xd9, 0x85, 0xa3, 0xea, 0x28, 0x26, 0x45, 0x2a, 0x6c, 0xf4, 0x2e, + 0x6d, 0xdd, 0x07, 0x3c, 0xba, 0xd9, 0x85, 0xa3, 0xea, 0x28, 0x26, 0x45, 0x2a, 0x6c, 0xf4, 0x2e, 0xbe, 0xd0, 0x2d, 0x62, 0x5a, 0x58, 0x9b, 0xf9, 0x72, 0xcf, 0xcc, 0x38, 0x6d, 0x9f, 0x99, 0x06, 0xb6, 0xfa, 0xfe, 0x27, 0xbb, 0x12, 0x18, 0x07, 0x9f, 0xd4, 0x53, 0x54, 0xa8, 0xc6, 0x13, 0x06, 0xaa, 0x42, 0x86, 0x9c, 0x8b, 0x00, 0x64, 0xc8, 0x39, 0xfa, 0x7f, 0xc8, 0xd1, 0x45, 0xb2, 0xc5, 0x57, 0xe7, 0x64, 0x6b, 0x61, 0x77, 0x72, 0xe1, 0x60, 0x95, 0x69, 0x2a, 0x4a, 0x70, 0x1a, 0x82, - 0x24, 0x32, 0xed, 0x55, 0xb9, 0x01, 0xb5, 0xa9, 0x2c, 0x11, 0xf9, 0x7e, 0xe9, 0xe8, 0xf7, 0x53, - 0x6a, 0x50, 0x89, 0xa5, 0x04, 0xe5, 0x2a, 0x6c, 0xcc, 0x43, 0x78, 0x65, 0x18, 0xc8, 0x63, 0x48, - 0x8d, 0x5e, 0x87, 0x52, 0x00, 0xf1, 0xfc, 0x34, 0xce, 0xc6, 0xca, 0x57, 0x56, 0x03, 0x55, 0x7a, - 0x0c, 0xe9, 0xb6, 0x66, 0xfb, 0x21, 0xc3, 0x7e, 0x78, 0x51, 0x77, 0x9c, 0x8e, 0xee, 0x0d, 0x95, - 0x4f, 0xa1, 0x91, 0x04, 0xdf, 0x53, 0xcb, 0xc8, 0x05, 0xdb, 0xf0, 0x2a, 0x14, 0x4e, 0x6d, 0x77, - 0xac, 0x13, 0xe6, 0xac, 0xa2, 0x8a, 0x19, 0xdd, 0x9e, 0x1c, 0xca, 0xb3, 0x4c, 0xcc, 0x27, 0x8a, - 0x06, 0xcf, 0x24, 0x42, 0x38, 0x35, 0x31, 0x2d, 0x03, 0xf3, 0x78, 0x56, 0x54, 0x3e, 0x09, 0x1d, - 0xf1, 0x1f, 0xcb, 0x27, 0xf4, 0xb5, 0x1e, 0x5b, 0x2b, 0xf3, 0x2f, 0xa9, 0x62, 0xa6, 0x5c, 0x0f, - 0x82, 0x15, 0x43, 0x72, 0x8a, 0x79, 0x14, 0xfd, 0xd3, 0xdb, 0xd9, 0xeb, 0x6b, 0x2a, 0x1d, 0x2a, - 0x7f, 0x90, 0xa0, 0xa4, 0x62, 0xcf, 0xa1, 0xe8, 0x81, 0x9a, 0x20, 0xe1, 0xf3, 0x3e, 0xe6, 0x34, - 0x2c, 0x9d, 0x48, 0x63, 0xb8, 0x76, 0xdb, 0xd7, 0xa4, 0x1c, 0x22, 0x30, 0x43, 0xaf, 0x09, 0xaa, - 0x99, 0xcc, 0x1a, 0x85, 0x79, 0x94, 0x6b, 0xbe, 0xe1, 0x73, 0xcd, 0x6c, 0x22, 0x6d, 0xe0, 0x56, - 0x53, 0x64, 0xf3, 0x35, 0x41, 0x36, 0x73, 0x4b, 0x5e, 0x16, 0x63, 0x9b, 0xad, 0x18, 0xdb, 0xcc, - 0x2f, 0x59, 0x66, 0x02, 0xdd, 0x6c, 0xc5, 0xe8, 0x66, 0x61, 0x89, 0x93, 0x04, 0xbe, 0xf9, 0x86, - 0xcf, 0x37, 0x8b, 0x4b, 0x96, 0x3d, 0x45, 0x38, 0x6f, 0xc5, 0x09, 0x27, 0x27, 0x8b, 0x2f, 0x24, - 0x5a, 0x27, 0x32, 0xce, 0x1f, 0x46, 0x18, 0xa7, 0x94, 0x48, 0xf7, 0xb8, 0x93, 0x39, 0x94, 0xb3, - 0x15, 0xa3, 0x9c, 0xb0, 0x24, 0x06, 0x09, 0x9c, 0xf3, 0xbd, 0x28, 0xe7, 0x2c, 0x27, 0xd2, 0x56, - 0xb1, 0x69, 0xe6, 0x91, 0xce, 0xb7, 0x02, 0xd2, 0xb9, 0x96, 0xc8, 0x9a, 0xc5, 0x1a, 0xa6, 0x59, - 0x67, 0x77, 0x86, 0x75, 0x72, 0x96, 0xf8, 0x52, 0xa2, 0x8b, 0x25, 0xb4, 0xb3, 0x3b, 0x43, 0x3b, - 0xab, 0x4b, 0x1c, 0x2e, 0xe1, 0x9d, 0xbf, 0x9c, 0xcf, 0x3b, 0x93, 0x99, 0xa1, 0xf8, 0x99, 0xab, - 0x11, 0x4f, 0x2d, 0x81, 0x78, 0xd6, 0x99, 0xfb, 0x97, 0x13, 0xdd, 0xaf, 0xcc, 0x3c, 0xbb, 0x09, - 0xcc, 0x33, 0x39, 0x1e, 0xab, 0x52, 0xcf, 0x1b, 0x34, 0xc3, 0x4f, 0x21, 0x11, 0x45, 0x49, 0xec, - 0xba, 0xb6, 0x2b, 0x58, 0x1d, 0x9f, 0x28, 0xd7, 0x29, 0xe7, 0x08, 0x51, 0x67, 0x01, 0x4d, 0x65, - 0xd9, 0x28, 0x82, 0x34, 0xca, 0x1f, 0xd3, 0xa1, 0x2d, 0x4b, 0xd3, 0x51, 0xbe, 0x22, 0x09, 0xbe, - 0x12, 0x61, 0xaf, 0x99, 0x38, 0x7b, 0xdd, 0x82, 0x32, 0xcd, 0x32, 0x53, 0xc4, 0x54, 0x77, 0x7c, - 0x62, 0x8a, 0x6e, 0xc2, 0x3a, 0xa3, 0x11, 0x9c, 0xe3, 0x8a, 0xd4, 0x92, 0x63, 0x19, 0xb2, 0x46, - 0x1f, 0xf0, 0xdd, 0xce, 0x73, 0xcc, 0xab, 0x70, 0x25, 0xa2, 0x1b, 0x64, 0x2f, 0xce, 0xc6, 0xea, - 0x81, 0xf6, 0xbe, 0x48, 0x63, 0x1f, 0x86, 0x01, 0x0a, 0x49, 0x2f, 0x82, 0x5c, 0xdf, 0x36, 0xb0, - 0xc8, 0x2d, 0x6c, 0x4c, 0x93, 0xc2, 0xc8, 0x1e, 0x88, 0x0c, 0x42, 0x87, 0x54, 0x2b, 0x80, 0x55, - 0x89, 0xa3, 0xa6, 0xf2, 0xe7, 0x74, 0xe8, 0x2f, 0xe4, 0xc1, 0xf3, 0x28, 0x6b, 0xfa, 0xbf, 0x43, - 0x59, 0x33, 0xdf, 0x9a, 0xb2, 0x46, 0x73, 0x7b, 0x36, 0x9e, 0xdb, 0xff, 0x95, 0x0e, 0xbf, 0x70, - 0x40, 0x40, 0xbf, 0x5d, 0x44, 0xc2, 0x44, 0x9d, 0x67, 0xdf, 0x4b, 0x24, 0x6a, 0x51, 0x56, 0x14, - 0xd8, 0x7b, 0xe3, 0x65, 0x45, 0x91, 0xa7, 0x6e, 0x36, 0x41, 0x6f, 0x82, 0xc4, 0xfa, 0x47, 0x9a, - 0xed, 0x78, 0x02, 0xc1, 0x9f, 0x8d, 0xae, 0x95, 0xb7, 0x89, 0x76, 0x8e, 0xa8, 0x4e, 0xd7, 0xf1, - 0xd4, 0x92, 0x23, 0x46, 0x11, 0x0e, 0x22, 0xc5, 0xa8, 0xf0, 0x35, 0x90, 0xe8, 0xaf, 0xf7, 0x1c, - 0xbd, 0x8f, 0x19, 0x1a, 0x4b, 0x6a, 0x28, 0x50, 0xee, 0x01, 0x9a, 0xcd, 0x07, 0xa8, 0x03, 0x05, - 0x7c, 0x86, 0x2d, 0xc2, 0x39, 0x41, 0x79, 0xef, 0xea, 0x1c, 0x9e, 0x89, 0x2d, 0xd2, 0x6c, 0xd0, - 0x20, 0xff, 0xf3, 0xd1, 0x56, 0x9d, 0x6b, 0xbf, 0x62, 0x8f, 0x4d, 0x82, 0xc7, 0x0e, 0xb9, 0x50, - 0x85, 0xbd, 0xf2, 0xeb, 0x0c, 0x25, 0x7d, 0xb1, 0x5c, 0x31, 0x37, 0xb6, 0xfe, 0x01, 0xca, 0x44, - 0x08, 0xff, 0x6a, 0xf1, 0xde, 0x04, 0x18, 0xe8, 0x9e, 0xf6, 0x40, 0xb7, 0x08, 0x36, 0x44, 0xd0, - 0x23, 0x12, 0x24, 0x43, 0x89, 0xce, 0x26, 0x1e, 0x36, 0x44, 0xed, 0x11, 0xcc, 0x23, 0xeb, 0x2c, - 0x7e, 0xb7, 0x75, 0xc6, 0xa3, 0x5c, 0x9a, 0x8e, 0xf2, 0x6f, 0x33, 0xe1, 0x29, 0x09, 0xf9, 0xf1, - 0xff, 0x5e, 0x1c, 0x7e, 0xc7, 0x8a, 0xe6, 0x78, 0xd2, 0x46, 0xc7, 0xb0, 0x1e, 0x9c, 0x52, 0x6d, - 0xc2, 0x4e, 0xaf, 0xbf, 0xef, 0x56, 0x3d, 0xe6, 0xf5, 0xb3, 0xb8, 0xd8, 0x43, 0x3f, 0x85, 0xa7, - 0xa7, 0x10, 0x28, 0x70, 0x9d, 0x59, 0x11, 0x88, 0x9e, 0x8a, 0x03, 0x91, 0xef, 0x39, 0x8c, 0x55, - 0xf6, 0x3b, 0x9e, 0x8d, 0x03, 0x5a, 0x87, 0x45, 0x29, 0xc8, 0xdc, 0xaf, 0xff, 0x02, 0x54, 0x5c, - 0x4c, 0x74, 0xd3, 0xd2, 0x62, 0x95, 0xee, 0x1a, 0x17, 0x8a, 0xfa, 0xf9, 0x08, 0x9e, 0x9a, 0x4b, - 0x45, 0xd0, 0xf7, 0x41, 0x0a, 0x59, 0x4c, 0x3a, 0xa1, 0x68, 0x0c, 0x0a, 0xa1, 0x50, 0x57, 0xf9, - 0x53, 0x3a, 0x74, 0x19, 0x2f, 0xad, 0xda, 0x50, 0x70, 0xb1, 0x37, 0x19, 0xf1, 0x62, 0xa7, 0xba, - 0xf7, 0xea, 0x6a, 0x24, 0x86, 0x4a, 0x27, 0x23, 0xa2, 0x0a, 0x63, 0xe5, 0x1e, 0x14, 0xb8, 0x04, - 0x95, 0xa1, 0xf8, 0xd1, 0xe1, 0xed, 0xc3, 0xee, 0xc7, 0x87, 0xf5, 0x14, 0x02, 0x28, 0xec, 0xb7, - 0x5a, 0xed, 0xa3, 0x93, 0x7a, 0x1a, 0x49, 0x90, 0xdf, 0x6f, 0x76, 0xd5, 0x93, 0x7a, 0x86, 0x8a, - 0xd5, 0xf6, 0x07, 0xed, 0xd6, 0x49, 0x3d, 0x8b, 0xd6, 0xa1, 0xc2, 0xc7, 0xda, 0xad, 0xae, 0xfa, - 0xe1, 0xfe, 0x49, 0x3d, 0x17, 0x11, 0x1d, 0xb7, 0x0f, 0xdf, 0x6f, 0xab, 0xf5, 0xbc, 0xf2, 0x3d, - 0x5a, 0x4d, 0x25, 0xd0, 0x9e, 0xb0, 0x6e, 0x4a, 0x47, 0xea, 0x26, 0xe5, 0xf7, 0x19, 0x90, 0x93, - 0xb9, 0x0c, 0xfa, 0x60, 0x6a, 0xe1, 0x7b, 0x97, 0x20, 0x42, 0x53, 0xab, 0x47, 0x2f, 0x42, 0xd5, - 0xc5, 0xa7, 0x98, 0xf4, 0x87, 0x9c, 0x5b, 0xf1, 0xc4, 0x56, 0x51, 0x2b, 0x42, 0xca, 0x8c, 0x3c, - 0xae, 0xf6, 0x19, 0xee, 0x13, 0x8d, 0x97, 0x70, 0x7c, 0xd3, 0x49, 0x54, 0x8d, 0x4a, 0x8f, 0xb9, - 0x50, 0xf9, 0xf4, 0x52, 0xb1, 0x94, 0x20, 0xaf, 0xb6, 0x4f, 0xd4, 0x9f, 0xd5, 0xb3, 0x08, 0x41, - 0x95, 0x0d, 0xb5, 0xe3, 0xc3, 0xfd, 0xa3, 0xe3, 0x4e, 0x97, 0xc6, 0xf2, 0x0a, 0xd4, 0xfc, 0x58, - 0xfa, 0xc2, 0xbc, 0x72, 0x23, 0xdc, 0x0d, 0xcb, 0x6a, 0xc7, 0x7f, 0xa7, 0xa1, 0x36, 0x75, 0x96, - 0xd0, 0x1e, 0xe4, 0x39, 0x95, 0x4f, 0xba, 0x6a, 0x60, 0x50, 0x20, 0x0e, 0x1e, 0x57, 0x45, 0xef, - 0x40, 0x09, 0x8b, 0x6e, 0xc6, 0xbc, 0x33, 0xcb, 0xbb, 0x30, 0x7e, 0xbf, 0x43, 0x98, 0x06, 0x16, - 0xe8, 0x5d, 0x90, 0x02, 0x50, 0x10, 0xf5, 0xe3, 0xf3, 0xb3, 0xe6, 0x01, 0x9c, 0x08, 0xfb, 0xd0, - 0x06, 0xbd, 0x15, 0xd2, 0xb7, 0xdc, 0x6c, 0x01, 0x21, 0xcc, 0xb9, 0x82, 0x30, 0xf6, 0xf5, 0x95, - 0x16, 0x94, 0x23, 0xeb, 0x41, 0xcf, 0x82, 0x34, 0xd6, 0xcf, 0x45, 0x97, 0x8c, 0xf7, 0x39, 0x4a, - 0x63, 0xfd, 0x9c, 0x37, 0xc8, 0x9e, 0x86, 0x22, 0x7d, 0x38, 0xd0, 0x39, 0x30, 0x65, 0xd5, 0xc2, - 0x58, 0x3f, 0xff, 0xb1, 0xee, 0x29, 0x9f, 0x40, 0x35, 0xde, 0x21, 0xa2, 0x9b, 0xd6, 0xb5, 0x27, - 0x96, 0xc1, 0x7c, 0xe4, 0x55, 0x3e, 0x41, 0xaf, 0x43, 0xfe, 0xcc, 0xe6, 0xb8, 0x36, 0xff, 0x74, - 0xdf, 0xb5, 0x09, 0x8e, 0x74, 0x98, 0xb8, 0xb6, 0xf2, 0x05, 0xe4, 0x19, 0x4e, 0x51, 0xcc, 0x61, - 0xbd, 0x1e, 0x41, 0x5d, 0xe9, 0x18, 0x7d, 0x02, 0xa0, 0x13, 0xe2, 0x9a, 0xbd, 0x49, 0xe8, 0x78, - 0x6b, 0x3e, 0xce, 0xed, 0xfb, 0x7a, 0xcd, 0x6b, 0x02, 0xf0, 0x36, 0x42, 0xd3, 0x08, 0xe8, 0x45, - 0x1c, 0x2a, 0x87, 0x50, 0x8d, 0xdb, 0x46, 0xbb, 0xae, 0x6b, 0x73, 0xba, 0xae, 0x01, 0x3d, 0x0a, - 0xc8, 0x55, 0x96, 0xf7, 0xf5, 0xd8, 0x44, 0x79, 0x98, 0x86, 0xd2, 0xc9, 0xb9, 0x38, 0x01, 0x09, - 0x2d, 0xa5, 0xd0, 0x34, 0x13, 0x6d, 0xa0, 0xf0, 0x1e, 0x55, 0x36, 0xe8, 0x7c, 0xbd, 0x17, 0x9c, - 0xf1, 0xdc, 0xaa, 0x85, 0xab, 0xdf, 0x02, 0x14, 0xb8, 0xf6, 0x36, 0x48, 0xc1, 0xae, 0xa2, 0x35, - 0x80, 0x6e, 0x18, 0x2e, 0xf6, 0x3c, 0xb1, 0x36, 0x7f, 0xca, 0x3a, 0x94, 0xf6, 0x03, 0xd1, 0xa2, - 0xc9, 0xaa, 0x7c, 0xa2, 0x18, 0x50, 0x9b, 0xca, 0x70, 0xe8, 0x6d, 0x28, 0x3a, 0x93, 0x9e, 0xe6, - 0x87, 0x67, 0xea, 0xf0, 0xf8, 0x7c, 0x70, 0xd2, 0x1b, 0x99, 0xfd, 0xdb, 0xf8, 0xc2, 0xff, 0x31, - 0xce, 0xa4, 0x77, 0x9b, 0x47, 0x91, 0xbf, 0x25, 0x13, 0x7d, 0xcb, 0x19, 0x94, 0xfc, 0x4d, 0x81, - 0x7e, 0x14, 0x3d, 0x27, 0x7e, 0xdf, 0x3a, 0x31, 0xeb, 0x0a, 0xf7, 0x91, 0x63, 0x72, 0x13, 0xd6, - 0x3d, 0x73, 0x60, 0x61, 0x43, 0x0b, 0xab, 0x10, 0xf6, 0xb6, 0x92, 0x5a, 0xe3, 0x0f, 0xee, 0xf8, - 0x25, 0x88, 0xf2, 0x28, 0x0d, 0x25, 0xff, 0xc0, 0xce, 0xdd, 0x77, 0xb1, 0x1f, 0x93, 0xb9, 0xfc, - 0x8f, 0x49, 0x6a, 0x07, 0xfb, 0x7d, 0xf9, 0xdc, 0xa5, 0xfb, 0xf2, 0xaf, 0x00, 0x22, 0x36, 0xd1, - 0x47, 0xda, 0x99, 0x4d, 0x4c, 0x6b, 0xa0, 0xf1, 0x68, 0x72, 0x76, 0x55, 0x67, 0x4f, 0xee, 0xb2, - 0x07, 0x47, 0x2c, 0xb0, 0xbf, 0x4a, 0x43, 0x29, 0xc8, 0x93, 0x97, 0x6d, 0x0a, 0x5e, 0x85, 0x82, - 0x48, 0x05, 0xbc, 0x2b, 0x28, 0x66, 0x41, 0x7f, 0x3a, 0x17, 0xe9, 0x4f, 0xcb, 0x50, 0x1a, 0x63, - 0xa2, 0x33, 0xb2, 0xc0, 0x2b, 0xbd, 0x60, 0x7e, 0xf3, 0x2d, 0x28, 0x47, 0xfa, 0xb3, 0xf4, 0x68, - 0x1d, 0xb6, 0x3f, 0xae, 0xa7, 0xe4, 0xe2, 0xc3, 0xaf, 0xb6, 0xb3, 0x87, 0xf8, 0x01, 0xdd, 0x94, - 0x6a, 0xbb, 0xd5, 0x69, 0xb7, 0x6e, 0xd7, 0xd3, 0x72, 0xf9, 0xe1, 0x57, 0xdb, 0x45, 0x15, 0xb3, - 0xe6, 0xcd, 0xde, 0x13, 0x80, 0xda, 0x7e, 0xb3, 0x75, 0x40, 0xf3, 0x97, 0xd9, 0xd7, 0x45, 0x4b, - 0x2b, 0xc7, 0xca, 0xe3, 0x85, 0xd7, 0xc3, 0xf2, 0xe2, 0x8e, 0x1e, 0xba, 0x05, 0x79, 0x56, 0x39, - 0xa3, 0xc5, 0xf7, 0xc5, 0xf2, 0x92, 0x16, 0x1f, 0xfd, 0x31, 0x6c, 0xd7, 0x2e, 0xbc, 0x40, 0x96, - 0x17, 0x77, 0xfc, 0x90, 0x0a, 0x52, 0x58, 0xfa, 0x2e, 0xbf, 0x50, 0x96, 0x57, 0xe8, 0x02, 0x52, - 0x9f, 0x21, 0xb1, 0x5f, 0x7e, 0xc1, 0x2a, 0xaf, 0x80, 0x2b, 0xe8, 0x0e, 0x14, 0xfd, 0x92, 0x69, - 0xd9, 0x95, 0xaf, 0xbc, 0xb4, 0x43, 0x47, 0x3f, 0x01, 0x2f, 0x6d, 0x17, 0xdf, 0x5f, 0xcb, 0x4b, - 0xda, 0x8d, 0xe8, 0x00, 0x0a, 0x82, 0xad, 0x2e, 0xb9, 0xc6, 0x95, 0x97, 0x75, 0xdc, 0x68, 0xd0, - 0xc2, 0x9e, 0xc1, 0xf2, 0x5b, 0x79, 0x79, 0x85, 0x4e, 0x2a, 0xfa, 0x08, 0x20, 0x52, 0xc8, 0xae, - 0x70, 0xdd, 0x2e, 0xaf, 0xd2, 0x21, 0x45, 0x5d, 0x28, 0x05, 0x05, 0xcb, 0xd2, 0xcb, 0x6f, 0x79, - 0x79, 0xab, 0x12, 0xdd, 0x83, 0x4a, 0x9c, 0xa9, 0xaf, 0x76, 0xa5, 0x2d, 0xaf, 0xd8, 0x83, 0xa4, - 0xfe, 0xe3, 0xb4, 0x7d, 0xb5, 0x2b, 0x6e, 0x79, 0xc5, 0x96, 0x24, 0xfa, 0x0c, 0xd6, 0x67, 0x69, - 0xf5, 0xea, 0x37, 0xde, 0xf2, 0x25, 0x9a, 0x94, 0x68, 0x0c, 0x68, 0x0e, 0x1d, 0xbf, 0xc4, 0x05, - 0xb8, 0x7c, 0x99, 0x9e, 0x25, 0x0d, 0x5d, 0x9c, 0xe3, 0xae, 0x76, 0x21, 0x2e, 0xaf, 0xd8, 0xbd, - 0x6c, 0xb6, 0xbf, 0x7e, 0xbc, 0x99, 0xfe, 0xe6, 0xf1, 0x66, 0xfa, 0xef, 0x8f, 0x37, 0xd3, 0x5f, - 0x3e, 0xd9, 0x4c, 0x7d, 0xf3, 0x64, 0x33, 0xf5, 0xd7, 0x27, 0x9b, 0xa9, 0x9f, 0xbf, 0x3c, 0x30, - 0xc9, 0x70, 0xd2, 0xdb, 0xe9, 0xdb, 0xe3, 0xdd, 0xe8, 0xbf, 0x7f, 0xe6, 0xfd, 0x23, 0xa9, 0x57, - 0x60, 0xe9, 0xeb, 0xb5, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xf6, 0x16, 0xad, 0xb1, 0x24, - 0x00, 0x00, + 0x24, 0x32, 0xed, 0x55, 0x79, 0x19, 0x6a, 0x53, 0x59, 0x22, 0xf2, 0xfd, 0xd2, 0xd1, 0xef, 0xa7, + 0xd4, 0xa0, 0x12, 0x4b, 0x09, 0xca, 0x55, 0xd8, 0x98, 0x87, 0xf0, 0xca, 0x30, 0x90, 0xc7, 0x90, + 0x1a, 0xbd, 0x01, 0xa5, 0x00, 0xe2, 0xf9, 0x69, 0x9c, 0x8d, 0x95, 0xaf, 0xac, 0x06, 0xaa, 0xf4, + 0x18, 0xd2, 0x6d, 0xcd, 0xf6, 0x43, 0x86, 0xfd, 0xf0, 0xa2, 0xee, 0x38, 0x1d, 0xdd, 0x1b, 0x2a, + 0x9f, 0x42, 0x23, 0x09, 0xbe, 0xa7, 0x96, 0x91, 0x0b, 0xb6, 0xe1, 0x55, 0x28, 0x9c, 0xda, 0xee, + 0x58, 0x27, 0xcc, 0x59, 0x45, 0x15, 0x33, 0xba, 0x3d, 0x39, 0x94, 0x67, 0x99, 0x98, 0x4f, 0x14, + 0x0d, 0x9e, 0x49, 0x84, 0x70, 0x6a, 0x62, 0x5a, 0x06, 0xe6, 0xf1, 0xac, 0xa8, 0x7c, 0x12, 0x3a, + 0xe2, 0x3f, 0x96, 0x4f, 0xe8, 0x6b, 0x3d, 0xb6, 0x56, 0xe6, 0x5f, 0x52, 0xc5, 0x4c, 0xb9, 0x1e, + 0x04, 0x2b, 0x86, 0xe4, 0x14, 0xf3, 0x28, 0xfa, 0xa7, 0xb7, 0xb3, 0xd7, 0xd7, 0x54, 0x3a, 0x54, + 0xfe, 0x20, 0x41, 0x49, 0xc5, 0x9e, 0x43, 0xd1, 0x03, 0x35, 0x41, 0xc2, 0xe7, 0x7d, 0xcc, 0x69, + 0x58, 0x3a, 0x91, 0xc6, 0x70, 0xed, 0xb6, 0xaf, 0x49, 0x39, 0x44, 0x60, 0x86, 0x5e, 0x17, 0x54, + 0x33, 0x99, 0x35, 0x0a, 0xf3, 0x28, 0xd7, 0x7c, 0xd3, 0xe7, 0x9a, 0xd9, 0x44, 0xda, 0xc0, 0xad, + 0xa6, 0xc8, 0xe6, 0xeb, 0x82, 0x6c, 0xe6, 0x96, 0xbc, 0x2c, 0xc6, 0x36, 0x5b, 0x31, 0xb6, 0x99, + 0x5f, 0xb2, 0xcc, 0x04, 0xba, 0xd9, 0x8a, 0xd1, 0xcd, 0xc2, 0x12, 0x27, 0x09, 0x7c, 0xf3, 0x4d, + 0x9f, 0x6f, 0x16, 0x97, 0x2c, 0x7b, 0x8a, 0x70, 0xde, 0x8c, 0x13, 0x4e, 0x4e, 0x16, 0x5f, 0x48, + 0xb4, 0x4e, 0x64, 0x9c, 0x3f, 0x8c, 0x30, 0x4e, 0x29, 0x91, 0xee, 0x71, 0x27, 0x73, 0x28, 0x67, + 0x2b, 0x46, 0x39, 0x61, 0x49, 0x0c, 0x12, 0x38, 0xe7, 0xfb, 0x51, 0xce, 0x59, 0x4e, 0xa4, 0xad, + 0x62, 0xd3, 0xcc, 0x23, 0x9d, 0x6f, 0x07, 0xa4, 0x73, 0x2d, 0x91, 0x35, 0x8b, 0x35, 0x4c, 0xb3, + 0xce, 0xee, 0x0c, 0xeb, 0xe4, 0x2c, 0xf1, 0xa5, 0x44, 0x17, 0x4b, 0x68, 0x67, 0x77, 0x86, 0x76, + 0x56, 0x97, 0x38, 0x5c, 0xc2, 0x3b, 0x7f, 0x39, 0x9f, 0x77, 0x26, 0x33, 0x43, 0xf1, 0x33, 0x57, + 0x23, 0x9e, 0x5a, 0x02, 0xf1, 0xac, 0x33, 0xf7, 0xaf, 0x24, 0xba, 0x5f, 0x99, 0x79, 0x76, 0x13, + 0x98, 0x67, 0x72, 0x3c, 0x56, 0xa5, 0x9e, 0x2f, 0xd3, 0x0c, 0x3f, 0x85, 0x44, 0x14, 0x25, 0xb1, + 0xeb, 0xda, 0xae, 0x60, 0x75, 0x7c, 0xa2, 0x5c, 0xa7, 0x9c, 0x23, 0x44, 0x9d, 0x05, 0x34, 0x95, + 0x65, 0xa3, 0x08, 0xd2, 0x28, 0x7f, 0x4c, 0x87, 0xb6, 0x2c, 0x4d, 0x47, 0xf9, 0x8a, 0x24, 0xf8, + 0x4a, 0x84, 0xbd, 0x66, 0xe2, 0xec, 0x75, 0x0b, 0xca, 0x34, 0xcb, 0x4c, 0x11, 0x53, 0xdd, 0xf1, + 0x89, 0x29, 0xba, 0x01, 0xeb, 0x8c, 0x46, 0x70, 0x8e, 0x2b, 0x52, 0x4b, 0x8e, 0x65, 0xc8, 0x1a, + 0x7d, 0xc0, 0x77, 0x3b, 0xcf, 0x31, 0xaf, 0xc1, 0x95, 0x88, 0x6e, 0x90, 0xbd, 0x38, 0x1b, 0xab, + 0x07, 0xda, 0xfb, 0x22, 0x8d, 0x7d, 0x14, 0x06, 0x28, 0x24, 0xbd, 0x08, 0x72, 0x7d, 0xdb, 0xc0, + 0x22, 0xb7, 0xb0, 0x31, 0x4d, 0x0a, 0x23, 0x7b, 0x20, 0x32, 0x08, 0x1d, 0x52, 0xad, 0x00, 0x56, + 0x25, 0x8e, 0x9a, 0xca, 0x9f, 0xd3, 0xa1, 0xbf, 0x90, 0x07, 0xcf, 0xa3, 0xac, 0xe9, 0xff, 0x0e, + 0x65, 0xcd, 0x7c, 0x6b, 0xca, 0x1a, 0xcd, 0xed, 0xd9, 0x78, 0x6e, 0xff, 0x57, 0x3a, 0xfc, 0xc2, + 0x01, 0x01, 0xfd, 0x76, 0x11, 0x09, 0x13, 0x75, 0x9e, 0x7d, 0x2f, 0x91, 0xa8, 0x45, 0x59, 0x51, + 0x60, 0xef, 0x8d, 0x97, 0x15, 0x45, 0x9e, 0xba, 0xd9, 0x04, 0xbd, 0x05, 0x12, 0xeb, 0x1f, 0x69, + 0xb6, 0xe3, 0x09, 0x04, 0x7f, 0x36, 0xba, 0x56, 0xde, 0x26, 0xda, 0x39, 0xa2, 0x3a, 0x5d, 0xc7, + 0x53, 0x4b, 0x8e, 0x18, 0x45, 0x38, 0x88, 0x14, 0xa3, 0xc2, 0xd7, 0x40, 0xa2, 0xbf, 0xde, 0x73, + 0xf4, 0x3e, 0x66, 0x68, 0x2c, 0xa9, 0xa1, 0x40, 0xb9, 0x07, 0x68, 0x36, 0x1f, 0xa0, 0x0e, 0x14, + 0xf0, 0x19, 0xb6, 0x08, 0xe7, 0x04, 0xe5, 0xbd, 0xab, 0x73, 0x78, 0x26, 0xb6, 0x48, 0xb3, 0x41, + 0x83, 0xfc, 0xcf, 0x47, 0x5b, 0x75, 0xae, 0xfd, 0xaa, 0x3d, 0x36, 0x09, 0x1e, 0x3b, 0xe4, 0x42, + 0x15, 0xf6, 0xca, 0xaf, 0x33, 0x94, 0xf4, 0xc5, 0x72, 0xc5, 0xdc, 0xd8, 0xfa, 0x07, 0x28, 0x13, + 0x21, 0xfc, 0xab, 0xc5, 0x7b, 0x13, 0x60, 0xa0, 0x7b, 0xda, 0x03, 0xdd, 0x22, 0xd8, 0x10, 0x41, + 0x8f, 0x48, 0x90, 0x0c, 0x25, 0x3a, 0x9b, 0x78, 0xd8, 0x10, 0xb5, 0x47, 0x30, 0x8f, 0xac, 0xb3, + 0xf8, 0xdd, 0xd6, 0x19, 0x8f, 0x72, 0x69, 0x3a, 0xca, 0xbf, 0xcd, 0x84, 0xa7, 0x24, 0xe4, 0xc7, + 0xff, 0x7b, 0x71, 0xf8, 0x1d, 0x2b, 0x9a, 0xe3, 0x49, 0x1b, 0x1d, 0xc3, 0x7a, 0x70, 0x4a, 0xb5, + 0x09, 0x3b, 0xbd, 0xfe, 0xbe, 0x5b, 0xf5, 0x98, 0xd7, 0xcf, 0xe2, 0x62, 0x0f, 0xfd, 0x14, 0x9e, + 0x9e, 0x42, 0xa0, 0xc0, 0x75, 0x66, 0x45, 0x20, 0x7a, 0x2a, 0x0e, 0x44, 0xbe, 0xe7, 0x30, 0x56, + 0xd9, 0xef, 0x78, 0x36, 0x0e, 0x68, 0x1d, 0x16, 0xa5, 0x20, 0x73, 0xbf, 0xfe, 0x0b, 0x50, 0x71, + 0x31, 0xd1, 0x4d, 0x4b, 0x8b, 0x55, 0xba, 0x6b, 0x5c, 0x28, 0xea, 0xe7, 0x23, 0x78, 0x6a, 0x2e, + 0x15, 0x41, 0xdf, 0x07, 0x29, 0x64, 0x31, 0xe9, 0x84, 0xa2, 0x31, 0x28, 0x84, 0x42, 0x5d, 0xe5, + 0x4f, 0xe9, 0xd0, 0x65, 0xbc, 0xb4, 0x6a, 0x43, 0xc1, 0xc5, 0xde, 0x64, 0xc4, 0x8b, 0x9d, 0xea, + 0xde, 0x6b, 0xab, 0x91, 0x18, 0x2a, 0x9d, 0x8c, 0x88, 0x2a, 0x8c, 0x95, 0x7b, 0x50, 0xe0, 0x12, + 0x54, 0x86, 0xe2, 0x9d, 0xc3, 0x5b, 0x87, 0xdd, 0x8f, 0x0f, 0xeb, 0x29, 0x04, 0x50, 0xd8, 0x6f, + 0xb5, 0xda, 0x47, 0x27, 0xf5, 0x34, 0x92, 0x20, 0xbf, 0xdf, 0xec, 0xaa, 0x27, 0xf5, 0x0c, 0x15, + 0xab, 0xed, 0x0f, 0xdb, 0xad, 0x93, 0x7a, 0x16, 0xad, 0x43, 0x85, 0x8f, 0xb5, 0x9b, 0x5d, 0xf5, + 0xa3, 0xfd, 0x93, 0x7a, 0x2e, 0x22, 0x3a, 0x6e, 0x1f, 0x7e, 0xd0, 0x56, 0xeb, 0x79, 0xe5, 0x7b, + 0xb4, 0x9a, 0x4a, 0xa0, 0x3d, 0x61, 0xdd, 0x94, 0x8e, 0xd4, 0x4d, 0xca, 0xef, 0x33, 0x20, 0x27, + 0x73, 0x19, 0xf4, 0xe1, 0xd4, 0xc2, 0xf7, 0x2e, 0x41, 0x84, 0xa6, 0x56, 0x8f, 0x5e, 0x84, 0xaa, + 0x8b, 0x4f, 0x31, 0xe9, 0x0f, 0x39, 0xb7, 0xe2, 0x89, 0xad, 0xa2, 0x56, 0x84, 0x94, 0x19, 0x79, + 0x5c, 0xed, 0x33, 0xdc, 0x27, 0x1a, 0x2f, 0xe1, 0xf8, 0xa6, 0x93, 0xa8, 0x1a, 0x95, 0x1e, 0x73, + 0xa1, 0xf2, 0xe9, 0xa5, 0x62, 0x29, 0x41, 0x5e, 0x6d, 0x9f, 0xa8, 0x3f, 0xab, 0x67, 0x11, 0x82, + 0x2a, 0x1b, 0x6a, 0xc7, 0x87, 0xfb, 0x47, 0xc7, 0x9d, 0x2e, 0x8d, 0xe5, 0x15, 0xa8, 0xf9, 0xb1, + 0xf4, 0x85, 0x79, 0xe5, 0xbd, 0x70, 0x37, 0x2c, 0xa9, 0x1d, 0x45, 0xef, 0xc5, 0x3e, 0xf5, 0x6b, + 0x52, 0x36, 0x51, 0xfe, 0x9d, 0x86, 0xda, 0xd4, 0x09, 0x43, 0x7b, 0x90, 0xe7, 0x04, 0x3f, 0xe9, + 0x02, 0x82, 0x01, 0x84, 0x38, 0x8e, 0x5c, 0x15, 0xbd, 0x0b, 0x25, 0x2c, 0x7a, 0x1c, 0xf3, 0x4e, + 0x32, 0xef, 0xcd, 0xf8, 0x5d, 0x10, 0x61, 0x1a, 0x58, 0xa0, 0xf7, 0x40, 0x0a, 0xa0, 0x42, 0x54, + 0x95, 0xcf, 0xcf, 0x9a, 0x07, 0x20, 0x23, 0xec, 0x43, 0x1b, 0xf4, 0x76, 0x48, 0xea, 0x72, 0xb3, + 0x65, 0x85, 0x30, 0xe7, 0x0a, 0xc2, 0xd8, 0xd7, 0x57, 0x5a, 0x50, 0x8e, 0xac, 0x07, 0x3d, 0x0b, + 0xd2, 0x58, 0x3f, 0x17, 0xbd, 0x33, 0xde, 0xfd, 0x28, 0x8d, 0xf5, 0x73, 0xde, 0x36, 0x7b, 0x1a, + 0x8a, 0xf4, 0xe1, 0x40, 0xe7, 0x70, 0x95, 0x55, 0x0b, 0x63, 0xfd, 0xfc, 0xc7, 0xba, 0xa7, 0x7c, + 0x02, 0xd5, 0x78, 0xdf, 0x88, 0x86, 0xdb, 0xb5, 0x27, 0x96, 0xc1, 0x7c, 0xe4, 0x55, 0x3e, 0x41, + 0x6f, 0x40, 0xfe, 0xcc, 0xe6, 0x68, 0x37, 0xff, 0xcc, 0xdf, 0xb5, 0x09, 0x8e, 0xf4, 0x9d, 0xb8, + 0xb6, 0xf2, 0x05, 0xe4, 0x19, 0x7a, 0x51, 0x24, 0x62, 0x1d, 0x20, 0x41, 0x68, 0xe9, 0x18, 0x7d, + 0x02, 0xa0, 0x13, 0xe2, 0x9a, 0xbd, 0x49, 0xe8, 0x78, 0x6b, 0x3e, 0xfa, 0xed, 0xfb, 0x7a, 0xcd, + 0x6b, 0x02, 0x06, 0x37, 0x42, 0xd3, 0x08, 0x14, 0x46, 0x1c, 0x2a, 0x87, 0x50, 0x8d, 0xdb, 0x46, + 0x7b, 0xb1, 0x6b, 0x73, 0x7a, 0xb1, 0x01, 0x69, 0x0a, 0x28, 0x57, 0x96, 0x77, 0xfb, 0xd8, 0x44, + 0x79, 0x98, 0x86, 0xd2, 0xc9, 0xb9, 0x38, 0x17, 0x09, 0x8d, 0xa6, 0xd0, 0x34, 0x13, 0x6d, 0xab, + 0xf0, 0xce, 0x55, 0x36, 0xe8, 0x87, 0xbd, 0x1f, 0x9c, 0xfc, 0xdc, 0xaa, 0xe5, 0xac, 0xdf, 0x18, + 0x14, 0x68, 0xf7, 0x0e, 0x48, 0xc1, 0xae, 0xa2, 0x95, 0x81, 0x6e, 0x18, 0x2e, 0xf6, 0x3c, 0xb1, + 0x36, 0x7f, 0xca, 0xce, 0x8e, 0xfd, 0x40, 0x34, 0x6e, 0xb2, 0x2a, 0x9f, 0x28, 0x06, 0xd4, 0xa6, + 0xf2, 0x1e, 0x7a, 0x07, 0x8a, 0xce, 0xa4, 0xa7, 0xf9, 0xe1, 0x99, 0x3a, 0x3c, 0x3e, 0x4b, 0x9c, + 0xf4, 0x46, 0x66, 0xff, 0x16, 0xbe, 0xf0, 0x7f, 0x8c, 0x33, 0xe9, 0xdd, 0xe2, 0x51, 0xe4, 0x6f, + 0xc9, 0x44, 0xdf, 0x72, 0x06, 0x25, 0x7f, 0x53, 0xa0, 0x1f, 0x45, 0xcf, 0x89, 0xdf, 0xcd, 0x4e, + 0xcc, 0xc5, 0xc2, 0x7d, 0xe4, 0x98, 0xdc, 0x80, 0x75, 0xcf, 0x1c, 0x58, 0xd8, 0xd0, 0xc2, 0xda, + 0x84, 0xbd, 0xad, 0xa4, 0xd6, 0xf8, 0x83, 0xdb, 0x7e, 0x61, 0xa2, 0x3c, 0x4a, 0x43, 0xc9, 0x3f, + 0xb0, 0x73, 0xf7, 0x5d, 0xec, 0xc7, 0x64, 0x2e, 0xff, 0x63, 0x92, 0x9a, 0xc4, 0x7e, 0xb7, 0x3e, + 0x77, 0xe9, 0x6e, 0xfd, 0xab, 0x80, 0x88, 0x4d, 0xf4, 0x91, 0x76, 0x66, 0x13, 0xd3, 0x1a, 0x68, + 0x3c, 0x9a, 0x9c, 0x73, 0xd5, 0xd9, 0x93, 0xbb, 0xec, 0xc1, 0x11, 0x0b, 0xec, 0xaf, 0xd2, 0x50, + 0x0a, 0xb2, 0xe7, 0x65, 0x5b, 0x85, 0x57, 0xa1, 0x20, 0x12, 0x04, 0xef, 0x15, 0x8a, 0x59, 0xd0, + 0xb5, 0xce, 0x45, 0xba, 0xd6, 0x32, 0x94, 0xc6, 0x98, 0xe8, 0x8c, 0x42, 0xf0, 0xfa, 0x2f, 0x98, + 0xdf, 0x78, 0x1b, 0xca, 0x91, 0xae, 0x2d, 0x3d, 0x5a, 0x87, 0xed, 0x8f, 0xeb, 0x29, 0xb9, 0xf8, + 0xf0, 0xab, 0xed, 0xec, 0x21, 0x7e, 0x40, 0x37, 0xa5, 0xda, 0x6e, 0x75, 0xda, 0xad, 0x5b, 0xf5, + 0xb4, 0x5c, 0x7e, 0xf8, 0xd5, 0x76, 0x51, 0xc5, 0xac, 0xa5, 0xb3, 0xf7, 0x04, 0xa0, 0xb6, 0xdf, + 0x6c, 0x1d, 0xd0, 0xac, 0x66, 0xf6, 0x75, 0xd1, 0xe8, 0xca, 0xb1, 0xa2, 0x79, 0xe1, 0xa5, 0xb1, + 0xbc, 0xb8, 0xcf, 0x87, 0x6e, 0x42, 0x9e, 0xd5, 0xd3, 0x68, 0xf1, 0x2d, 0xb2, 0xbc, 0xa4, 0xf1, + 0x47, 0x7f, 0x0c, 0xdb, 0xb5, 0x0b, 0xaf, 0x95, 0xe5, 0xc5, 0x7d, 0x40, 0xa4, 0x82, 0x14, 0x16, + 0xc4, 0xcb, 0xaf, 0x99, 0xe5, 0x15, 0x7a, 0x83, 0xd4, 0x67, 0x48, 0xf7, 0x97, 0x5f, 0xbb, 0xca, + 0x2b, 0xe0, 0x0a, 0xba, 0x0d, 0x45, 0xbf, 0x90, 0x5a, 0x76, 0x11, 0x2c, 0x2f, 0xed, 0xdb, 0xd1, + 0x4f, 0xc0, 0x0b, 0xde, 0xc5, 0xb7, 0xda, 0xf2, 0x92, 0x26, 0x24, 0x3a, 0x80, 0x82, 0xe0, 0xb0, + 0x4b, 0x2e, 0x77, 0xe5, 0x65, 0x7d, 0x38, 0x1a, 0xb4, 0xb0, 0x93, 0xb0, 0xfc, 0xae, 0x5e, 0x5e, + 0xa1, 0xbf, 0x8a, 0xee, 0x00, 0x44, 0xca, 0xdb, 0x15, 0x2e, 0xe1, 0xe5, 0x55, 0xfa, 0xa6, 0xa8, + 0x0b, 0xa5, 0xa0, 0x8c, 0x59, 0x7a, 0x25, 0x2e, 0x2f, 0x6f, 0x60, 0xa2, 0x7b, 0x50, 0x89, 0xf3, + 0xf7, 0xd5, 0x2e, 0xba, 0xe5, 0x15, 0x3b, 0x93, 0xd4, 0x7f, 0x9c, 0xcc, 0xaf, 0x76, 0xf1, 0x2d, + 0xaf, 0xd8, 0xa8, 0x44, 0x9f, 0xc1, 0xfa, 0x2c, 0xd9, 0x5e, 0xfd, 0x1e, 0x5c, 0xbe, 0x44, 0xeb, + 0x12, 0x8d, 0x01, 0xcd, 0x21, 0xe9, 0x97, 0xb8, 0x16, 0x97, 0x2f, 0xd3, 0xc9, 0xa4, 0xa1, 0x8b, + 0x33, 0xdf, 0xd5, 0xae, 0xc9, 0xe5, 0x15, 0x7b, 0x9a, 0xcd, 0xf6, 0xd7, 0x8f, 0x37, 0xd3, 0xdf, + 0x3c, 0xde, 0x4c, 0xff, 0xfd, 0xf1, 0x66, 0xfa, 0xcb, 0x27, 0x9b, 0xa9, 0x6f, 0x9e, 0x6c, 0xa6, + 0xfe, 0xfa, 0x64, 0x33, 0xf5, 0xf3, 0x57, 0x06, 0x26, 0x19, 0x4e, 0x7a, 0x3b, 0x7d, 0x7b, 0xbc, + 0x1b, 0xfd, 0x4f, 0xd0, 0xbc, 0xff, 0x29, 0xf5, 0x0a, 0x2c, 0x7d, 0xbd, 0xfe, 0x9f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x46, 0x2c, 0x6f, 0x45, 0xc7, 0x24, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -6245,6 +6253,13 @@ func (m *ResponsePreprocessTxs) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.Proof) > 0 { + i -= len(m.Proof) + copy(dAtA[i:], m.Proof) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Proof))) + i-- + dAtA[i] = 0x12 + } if len(m.Txs) > 0 { for iNdEx := len(m.Txs) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.Txs[iNdEx]) @@ -7826,6 +7841,10 @@ func (m *ResponsePreprocessTxs) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } + l = len(m.Proof) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -13498,6 +13517,40 @@ func (m *ResponsePreprocessTxs) Unmarshal(dAtA []byte) error { m.Txs = append(m.Txs, make([]byte, postIndex-iNdEx)) copy(m.Txs[len(m.Txs)-1], dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Proof", 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.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) + if m.Proof == nil { + m.Proof = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/blockchain/msgs_test.go b/blockchain/msgs_test.go index 784ef8065c..946d59180c 100644 --- a/blockchain/msgs_test.go +++ b/blockchain/msgs_test.go @@ -80,7 +80,7 @@ func TestBcStatusResponseMessageValidateBasic(t *testing.T) { // nolint:lll // ignore line length in tests func TestBlockchainMessageVectors(t *testing.T) { - block := types.MakeBlock(int64(3), []types.Tx{types.Tx("Hello World")}, nil, nil) + block := types.MakeBlock(int64(3), []types.Tx{types.Tx("Hello World")}, []byte("proof"), nil, nil) bpb, err := block.ToProto() require.NoError(t, err) diff --git a/blockchain/v0/reactor_test.go b/blockchain/v0/reactor_test.go index 9dd18189b7..54969647e6 100644 --- a/blockchain/v0/reactor_test.go +++ b/blockchain/v0/reactor_test.go @@ -285,7 +285,7 @@ func makeTxs(height int64) (txs []types.Tx) { } func makeBlock(height int64, state sm.State, lastCommit *types.Commit) *types.Block { - block, _ := state.MakeBlock(height, makeTxs(height), lastCommit, nil, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(height, makeTxs(height), []byte("proof"), lastCommit, nil, state.Validators.GetProposer().Address) return block } diff --git a/blockchain/v1/peer_test.go b/blockchain/v1/peer_test.go index fd9e9f14b0..d3ecf2fe3b 100644 --- a/blockchain/v1/peer_test.go +++ b/blockchain/v1/peer_test.go @@ -276,5 +276,5 @@ func checkByStoppingPeerTimer(t *testing.T, peer *BpPeer, running bool) { } func makeSmallBlock(height int) *types.Block { - return types.MakeBlock(int64(height), []types.Tx{types.Tx("foo")}, nil, nil) + return types.MakeBlock(int64(height), []types.Tx{types.Tx("foo")}, []byte("proof"), nil, nil) } diff --git a/blockchain/v1/pool_test.go b/blockchain/v1/pool_test.go index 31b9d09f7d..e5beae42bb 100644 --- a/blockchain/v1/pool_test.go +++ b/blockchain/v1/pool_test.go @@ -81,7 +81,7 @@ func makeBlockPool(bcr *testBcR, height int64, peers []BpPeer, blocks map[int64] bPool.peers[p.id].RequestSent(h) if p.create { // simulate that a block at height h has been received - _ = bPool.peers[p.id].AddBlock(types.MakeBlock(h, txs, nil, nil), 100) + _ = bPool.peers[p.id].AddBlock(types.MakeBlock(h, txs, []byte("proof"), nil, nil), 100) } } return bPool @@ -392,7 +392,7 @@ func TestBlockPoolAddBlock(t *testing.T) { pool: makeBlockPool(testBcR, 10, []BpPeer{{ID: "P1", Height: 100}}, map[int64]tPBlocks{}), args: args{ peerID: "P2", - block: types.MakeBlock(int64(10), txs, nil, nil), + block: types.MakeBlock(int64(10), txs, []byte("proof"), nil, nil), blockSize: 100, }, poolWanted: makeBlockPool(testBcR, 10, []BpPeer{{ID: "P1", Height: 100}}, map[int64]tPBlocks{}), @@ -404,7 +404,7 @@ func TestBlockPoolAddBlock(t *testing.T) { map[int64]tPBlocks{10: {"P1", false}}), args: args{ peerID: "P1", - block: types.MakeBlock(int64(11), txs, nil, nil), + block: types.MakeBlock(int64(11), txs, []byte("proof"), nil, nil), blockSize: 100, }, poolWanted: makeBlockPool(testBcR, 10, @@ -418,7 +418,7 @@ func TestBlockPoolAddBlock(t *testing.T) { map[int64]tPBlocks{10: {"P1", true}, 11: {"P1", false}}), args: args{ peerID: "P1", - block: types.MakeBlock(int64(10), txs, nil, nil), + block: types.MakeBlock(int64(10), txs, []byte("proof"), nil, nil), blockSize: 100, }, poolWanted: makeBlockPool(testBcR, 10, @@ -432,7 +432,7 @@ func TestBlockPoolAddBlock(t *testing.T) { map[int64]tPBlocks{10: {"P1", false}}), args: args{ peerID: "P2", - block: types.MakeBlock(int64(10), txs, nil, nil), + block: types.MakeBlock(int64(10), txs, []byte("proof"), nil, nil), blockSize: 100, }, poolWanted: makeBlockPool(testBcR, 10, @@ -446,7 +446,7 @@ func TestBlockPoolAddBlock(t *testing.T) { map[int64]tPBlocks{10: {"P1", false}}), args: args{ peerID: "P1", - block: types.MakeBlock(int64(10), txs, nil, nil), + block: types.MakeBlock(int64(10), txs, []byte("proof"), nil, nil), blockSize: 100, }, poolWanted: makeBlockPool(testBcR, 10, diff --git a/blockchain/v1/reactor_fsm_test.go b/blockchain/v1/reactor_fsm_test.go index 5980ceb086..826c343cf7 100644 --- a/blockchain/v1/reactor_fsm_test.go +++ b/blockchain/v1/reactor_fsm_test.go @@ -142,7 +142,7 @@ func sBlockRespEv(current, expected string, peerID p2p.ID, height int64, prevBlo data: bReactorEventData{ peerID: peerID, height: height, - block: types.MakeBlock(height, txs, nil, nil), + block: types.MakeBlock(height, txs, []byte("proof"), nil, nil), length: 100}, wantState: expected, wantNewBlocks: append(prevBlocks, height), @@ -159,7 +159,7 @@ func sBlockRespEvErrored(current, expected string, data: bReactorEventData{ peerID: peerID, height: height, - block: types.MakeBlock(height, txs, nil, nil), + block: types.MakeBlock(height, txs, []byte("proof"), nil, nil), length: 100}, wantState: expected, wantErr: wantErr, diff --git a/blockchain/v1/reactor_test.go b/blockchain/v1/reactor_test.go index 620b6ad2ad..fd19148e73 100644 --- a/blockchain/v1/reactor_test.go +++ b/blockchain/v1/reactor_test.go @@ -352,7 +352,8 @@ func makeTxs(height int64) (txs []types.Tx) { } func makeBlock(height int64, state sm.State, lastCommit *types.Commit) *types.Block { - block, _ := state.MakeBlock(height, makeTxs(height), lastCommit, nil, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(height, + makeTxs(height), []byte("proof"), lastCommit, nil, state.Validators.GetProposer().Address) return block } diff --git a/blockchain/v2/reactor_test.go b/blockchain/v2/reactor_test.go index 756af6eea8..ebdad0b432 100644 --- a/blockchain/v2/reactor_test.go +++ b/blockchain/v2/reactor_test.go @@ -450,7 +450,7 @@ func makeTxs(height int64) (txs []types.Tx) { } func makeBlock(height int64, state sm.State, lastCommit *types.Commit) *types.Block { - block, _ := state.MakeBlock(height, makeTxs(height), lastCommit, nil, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(height, makeTxs(height), []byte("proof"), lastCommit, nil, state.Validators.GetProposer().Address) return block } diff --git a/consensus/replay_test.go b/consensus/replay_test.go index 3afe330f72..0fb970b6ee 100644 --- a/consensus/replay_test.go +++ b/consensus/replay_test.go @@ -970,7 +970,7 @@ func makeBlock(state sm.State, lastBlock *types.Block, lastBlockMeta *types.Bloc lastBlockMeta.BlockID, []types.CommitSig{vote.CommitSig()}) } - return state.MakeBlock(height, []types.Tx{}, lastCommit, nil, state.Validators.GetProposer().Address) + return state.MakeBlock(height, []types.Tx{}, []byte("proof"), lastCommit, nil, state.Validators.GetProposer().Address) } type badApp struct { diff --git a/evidence/pool_test.go b/evidence/pool_test.go index 9419133fac..34686319a1 100644 --- a/evidence/pool_test.go +++ b/evidence/pool_test.go @@ -151,7 +151,7 @@ func TestEvidencePoolUpdate(t *testing.T) { // create new block (no need to save it to blockStore) evidence := types.NewMockDuplicateVoteEvidence(height, time.Now(), evidenceChainID) lastCommit := makeCommit(height, val.PrivKey.PubKey().Address()) - block := types.MakeBlock(height+1, []types.Tx{}, lastCommit, []types.Evidence{evidence}) + block := types.MakeBlock(height+1, []types.Tx{}, []byte("proof"), lastCommit, []types.Evidence{evidence}) // update state (partially) state.LastBlockHeight = height + 1 @@ -213,7 +213,7 @@ func TestAddingAndPruningPOLC(t *testing.T) { assert.Nil(t, emptyPolc) lastCommit := makeCommit(height-1, val.PrivKey.PubKey().Address()) - block := types.MakeBlock(height, []types.Tx{}, lastCommit, []types.Evidence{}) + block := types.MakeBlock(height, []types.Tx{}, []byte("proof"), lastCommit, []types.Evidence{}) // update state (partially) state.LastBlockHeight = height pool.state.LastBlockHeight = height @@ -419,7 +419,7 @@ func TestAmnesiaEvidence(t *testing.T) { // now evidence is ready to be upgraded to amnesia evidence -> we expect -1 to be the next height as their is // no more pending potential amnesia evidence left lastCommit := makeCommit(height+1, pubKey.Address()) - block := types.MakeBlock(height+2, []types.Tx{}, lastCommit, []types.Evidence{}) + block := types.MakeBlock(height+2, []types.Tx{}, []byte("proof"), lastCommit, []types.Evidence{}) state.LastBlockHeight = height + 2 pool.Update(block, state) @@ -552,7 +552,7 @@ func initializeBlockStore(db dbm.DB, state sm.State, valAddr []byte) *store.Bloc for i := int64(1); i <= state.LastBlockHeight; i++ { lastCommit := makeCommit(i-1, valAddr) - block, _ := state.MakeBlock(i, []types.Tx{}, lastCommit, nil, + block, _ := state.MakeBlock(i, []types.Tx{}, []byte("proof"), lastCommit, nil, state.Validators.GetProposer().Address) const parts = 1 diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index 6d7fa3c98c..a7adabe749 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -283,7 +283,8 @@ message ResponseApplySnapshotChunk { } message ResponsePreprocessTxs { - repeated bytes txs = 1; + repeated bytes txs = 1; + bytes proof = 2; } //---------------------------------------- diff --git a/state/execution.go b/state/execution.go index 1a17ea2835..bdf4316252 100644 --- a/state/execution.go +++ b/state/execution.go @@ -120,13 +120,15 @@ func (blockExec *BlockExecutor) CreateProposalBlock( ppt := processedBlockTxs.GetTxs() + dataProof := processedBlockTxs.GetProof() + lp := len(ppt) processedTxs := make(types.Txs, lp) for i := 0; i < l; i++ { processedTxs[i] = ppt[i] } - return state.MakeBlock(height, processedTxs, commit, evidence, proposerAddr) + return state.MakeBlock(height, processedTxs, dataProof, commit, evidence, proposerAddr) } // ValidateBlock validates the given block against the given state. diff --git a/state/execution_test.go b/state/execution_test.go index 679e9526dd..82f74be3ee 100644 --- a/state/execution_test.go +++ b/state/execution_test.go @@ -92,7 +92,7 @@ func TestBeginBlockValidators(t *testing.T) { lastCommit := types.NewCommit(1, 0, prevBlockID, tc.lastCommitSigs) // block for height 2 - block, _ := state.MakeBlock(2, makeTxs(2), lastCommit, nil, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(2, makeTxs(2), []byte("proof"), lastCommit, nil, state.Validators.GetProposer().Address) _, err = sm.ExecCommitBlock(proxyApp.Consensus(), block, log.TestingLogger(), stateDB, 1) require.Nil(t, err, tc.desc) @@ -160,7 +160,7 @@ func TestBeginBlockByzantineValidators(t *testing.T) { lastCommit := types.NewCommit(9, 0, prevBlockID, commitSigs) for _, tc := range testCases { - block, _ := state.MakeBlock(10, makeTxs(2), lastCommit, nil, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(10, makeTxs(2), []byte("proof"), lastCommit, nil, state.Validators.GetProposer().Address) block.Time = now block.Evidence.Evidence = tc.evidence _, err = sm.ExecCommitBlock(proxyApp.Consensus(), block, log.TestingLogger(), stateDB, 1) diff --git a/state/helpers_test.go b/state/helpers_test.go index ffd2a8ac5f..03072e9637 100644 --- a/state/helpers_test.go +++ b/state/helpers_test.go @@ -54,7 +54,7 @@ func makeAndCommitGoodBlock( func makeAndApplyGoodBlock(state sm.State, height int64, lastCommit *types.Commit, proposerAddr []byte, blockExec *sm.BlockExecutor, evidence []types.Evidence) (sm.State, types.BlockID, error) { - block, _ := state.MakeBlock(height, makeTxs(height), lastCommit, evidence, proposerAddr) + block, _ := state.MakeBlock(height, makeTxs(height), []byte("proof"), lastCommit, evidence, proposerAddr) if err := blockExec.ValidateBlock(state, block); err != nil { return state, types.BlockID{}, err } @@ -130,6 +130,7 @@ func makeBlock(state sm.State, height int64) *types.Block { block, _ := state.MakeBlock( height, makeTxs(state.LastBlockHeight), + []byte("proof"), new(types.Commit), nil, state.Validators.GetProposer().Address, diff --git a/state/state.go b/state/state.go index 9c9bb6f98e..635de1e58c 100644 --- a/state/state.go +++ b/state/state.go @@ -235,13 +235,14 @@ func StateFromProto(pb *tmstate.State) (*State, error) { //nolint:golint func (state State) MakeBlock( height int64, txs []types.Tx, + proof []byte, commit *types.Commit, evidence []types.Evidence, proposerAddress []byte, ) (*types.Block, *types.PartSet) { // Build base block with block data. - block := types.MakeBlock(height, txs, commit, evidence) + block := types.MakeBlock(height, txs, proof, commit, evidence) // Set time. var timestamp time.Time diff --git a/state/validation_test.go b/state/validation_test.go index bfb1d7dc0f..5b04712cda 100644 --- a/state/validation_test.go +++ b/state/validation_test.go @@ -78,7 +78,7 @@ func TestValidateBlockHeader(t *testing.T) { Invalid blocks don't pass */ for _, tc := range testCases { - block, _ := state.MakeBlock(height, makeTxs(height), lastCommit, nil, proposerAddr) + block, _ := state.MakeBlock(height, makeTxs(height), []byte("proof"), lastCommit, nil, proposerAddr) tc.malleateBlock(block) err := blockExec.ValidateBlock(state, block) require.Error(t, err, tc.name) @@ -132,7 +132,7 @@ func TestValidateBlockCommit(t *testing.T) { state.LastBlockID, []types.CommitSig{wrongHeightVote.CommitSig()}, ) - block, _ := state.MakeBlock(height, makeTxs(height), wrongHeightCommit, nil, proposerAddr) + block, _ := state.MakeBlock(height, makeTxs(height), []byte("proof"), wrongHeightCommit, nil, proposerAddr) err = blockExec.ValidateBlock(state, block) _, isErrInvalidCommitHeight := err.(types.ErrInvalidCommitHeight) require.True(t, isErrInvalidCommitHeight, "expected ErrInvalidCommitHeight at height %d but got: %v", height, err) @@ -140,7 +140,7 @@ func TestValidateBlockCommit(t *testing.T) { /* #2589: test len(block.LastCommit.Signatures) == state.LastValidators.Size() */ - block, _ = state.MakeBlock(height, makeTxs(height), wrongSigsCommit, nil, proposerAddr) + block, _ = state.MakeBlock(height, makeTxs(height), []byte("proof"), wrongSigsCommit, nil, proposerAddr) err = blockExec.ValidateBlock(state, block) _, isErrInvalidCommitSignatures := err.(types.ErrInvalidCommitSignatures) require.True(t, isErrInvalidCommitSignatures, @@ -242,7 +242,7 @@ func TestValidateBlockEvidence(t *testing.T) { evidence = append(evidence, types.NewMockDuplicateVoteEvidenceWithValidator(height, time.Now(), privVals[proposerAddr.String()], chainID)) } - block, _ := state.MakeBlock(height, makeTxs(height), lastCommit, evidence, proposerAddr) + block, _ := state.MakeBlock(height, makeTxs(height), []byte("proof"), lastCommit, evidence, proposerAddr) err := blockExec.ValidateBlock(state, block) if assert.Error(t, err) { _, ok := err.(*types.ErrEvidenceOverflow) diff --git a/store/store_test.go b/store/store_test.go index ce73aecf3e..7b2d2e741d 100644 --- a/store/store_test.go +++ b/store/store_test.go @@ -48,7 +48,7 @@ func makeTxs(height int64) (txs []types.Tx) { } func makeBlock(height int64, state sm.State, lastCommit *types.Commit) *types.Block { - block, _ := state.MakeBlock(height, makeTxs(height), lastCommit, nil, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(height, makeTxs(height), []byte("proof"), lastCommit, nil, state.Validators.GetProposer().Address) return block } diff --git a/types/block.go b/types/block.go index 2959ee1233..87870c5197 100644 --- a/types/block.go +++ b/types/block.go @@ -1105,6 +1105,10 @@ type Data struct { // This means that block.AppHash does not include these txs. Txs Txs `json:"txs"` + // Proof is a arbitrary byte slice. This field will vary on the use case of the application + // NOTE: can be empty or populated. + Proof []byte `json:"proof"` + // Volatile hash tmbytes.HexBytes } diff --git a/types/block_test.go b/types/block_test.go index f6c5a03b8e..5a02615076 100644 --- a/types/block_test.go +++ b/types/block_test.go @@ -43,7 +43,7 @@ func TestBlockAddEvidence(t *testing.T) { ev := NewMockDuplicateVoteEvidenceWithValidator(h, time.Now(), vals[0], "block-test-chain") evList := []Evidence{ev} - block := MakeBlock(h, txs, commit, evList) + block := MakeBlock(h, txs, []byte("proof"), commit, evList) require.NotNil(t, block) require.Equal(t, 1, len(block.Evidence.Evidence)) require.NotNil(t, block.EvidenceHash) @@ -97,7 +97,7 @@ func TestBlockValidateBasic(t *testing.T) { tc := tc i := i t.Run(tc.testName, func(t *testing.T) { - block := MakeBlock(h, txs, commit, evList) + block := MakeBlock(h, txs, []byte("proof"), commit, evList) block.ProposerAddress = valSet.GetProposer().Address tc.malleateBlock(block) err = block.ValidateBasic() @@ -108,13 +108,13 @@ func TestBlockValidateBasic(t *testing.T) { func TestBlockHash(t *testing.T) { assert.Nil(t, (*Block)(nil).Hash()) - assert.Nil(t, MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil).Hash()) + assert.Nil(t, MakeBlock(int64(3), []Tx{Tx("Hello World")}, []byte("proof"), nil, nil).Hash()) } func TestBlockMakePartSet(t *testing.T) { assert.Nil(t, (*Block)(nil).MakePartSet(2)) - partSet := MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil).MakePartSet(1024) + partSet := MakeBlock(int64(3), []Tx{Tx("Hello World")}, []byte("proof"), nil, nil).MakePartSet(1024) assert.NotNil(t, partSet) assert.EqualValues(t, 1, partSet.Total()) } @@ -132,7 +132,7 @@ func TestBlockMakePartSetWithEvidence(t *testing.T) { ev := NewMockDuplicateVoteEvidenceWithValidator(h, time.Now(), vals[0], "block-test-chain") evList := []Evidence{ev} - partSet := MakeBlock(h, []Tx{Tx("Hello World")}, commit, evList).MakePartSet(512) + partSet := MakeBlock(h, []Tx{Tx("Hello World")}, []byte("proof"), commit, evList).MakePartSet(512) assert.NotNil(t, partSet) assert.EqualValues(t, 4, partSet.Total()) } @@ -149,7 +149,7 @@ func TestBlockHashesTo(t *testing.T) { ev := NewMockDuplicateVoteEvidenceWithValidator(h, time.Now(), vals[0], "block-test-chain") evList := []Evidence{ev} - block := MakeBlock(h, []Tx{Tx("Hello World")}, commit, evList) + block := MakeBlock(h, []Tx{Tx("Hello World")}, []byte("proof"), commit, evList) block.ValidatorsHash = valSet.Hash() assert.False(t, block.HashesTo([]byte{})) assert.False(t, block.HashesTo([]byte("something else"))) @@ -157,7 +157,7 @@ func TestBlockHashesTo(t *testing.T) { } func TestBlockSize(t *testing.T) { - size := MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil).Size() + size := MakeBlock(int64(3), []Tx{Tx("Hello World")}, []byte("proof"), nil, nil).Size() if size <= 0 { t.Fatal("Size of the block is zero or negative") } @@ -168,7 +168,7 @@ func TestBlockString(t *testing.T) { assert.Equal(t, "nil-Block", (*Block)(nil).StringIndented("")) assert.Equal(t, "nil-Block", (*Block)(nil).StringShort()) - block := MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil) + block := MakeBlock(int64(3), []Tx{Tx("Hello World")}, []byte("proof"), nil, nil) assert.NotEqual(t, "nil-Block", block.String()) assert.NotEqual(t, "nil-Block", block.StringIndented("")) assert.NotEqual(t, "nil-Block", block.StringShort()) @@ -639,17 +639,17 @@ func TestBlockIDValidateBasic(t *testing.T) { func TestBlockProtoBuf(t *testing.T) { h := tmrand.Int63() c1 := randCommit(time.Now()) - b1 := MakeBlock(h, []Tx{Tx([]byte{1})}, &Commit{Signatures: []CommitSig{}}, []Evidence{}) + b1 := MakeBlock(h, []Tx{Tx([]byte{1})}, []byte("proof"), &Commit{Signatures: []CommitSig{}}, []Evidence{}) b1.ProposerAddress = tmrand.Bytes(crypto.AddressSize) - b2 := MakeBlock(h, []Tx{Tx([]byte{1})}, c1, []Evidence{}) + b2 := MakeBlock(h, []Tx{Tx([]byte{1})}, []byte("proof"), c1, []Evidence{}) b2.ProposerAddress = tmrand.Bytes(crypto.AddressSize) evidenceTime := time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC) evi := NewMockDuplicateVoteEvidence(h, evidenceTime, "block-test-chain") b2.Evidence = EvidenceData{Evidence: EvidenceList{evi}} b2.EvidenceHash = b2.Evidence.Hash() - b3 := MakeBlock(h, []Tx{}, c1, []Evidence{}) + b3 := MakeBlock(h, []Tx{}, []byte("proof"), c1, []Evidence{}) b3.ProposerAddress = tmrand.Bytes(crypto.AddressSize) testCases := []struct { msg string diff --git a/types/event_bus_test.go b/types/event_bus_test.go index ca53fa6b89..79a63849a4 100644 --- a/types/event_bus_test.go +++ b/types/event_bus_test.go @@ -67,7 +67,7 @@ func TestEventBusPublishEventNewBlock(t *testing.T) { require.NoError(t, err) defer eventBus.Stop() - block := MakeBlock(0, []Tx{}, nil, []Evidence{}) + block := MakeBlock(0, []Tx{}, []byte("proof"), nil, []Evidence{}) resultBeginBlock := abci.ResponseBeginBlock{ Events: []abci.Event{ {Type: "testType", Attributes: []abci.EventAttribute{{Key: []byte("baz"), Value: []byte("1")}}}, @@ -218,7 +218,7 @@ func TestEventBusPublishEventNewBlockHeader(t *testing.T) { require.NoError(t, err) defer eventBus.Stop() - block := MakeBlock(0, []Tx{}, nil, []Evidence{}) + block := MakeBlock(0, []Tx{}, []byte("proof"), nil, []Evidence{}) resultBeginBlock := abci.ResponseBeginBlock{ Events: []abci.Event{ {Type: "testType", Attributes: []abci.EventAttribute{{Key: []byte("baz"), Value: []byte("1")}}}, diff --git a/types/test_util.go b/types/test_util.go index 9ae263fb26..fdaf2db8c7 100644 --- a/types/test_util.go +++ b/types/test_util.go @@ -82,13 +82,14 @@ func MakeVote( // MakeBlock returns a new block with an empty header, except what can be // computed from itself. // It populates the same set of fields validated by ValidateBasic. -func MakeBlock(height int64, txs []Tx, lastCommit *Commit, evidence []Evidence) *Block { +func MakeBlock(height int64, txs []Tx, proof []byte, lastCommit *Commit, evidence []Evidence) *Block { block := &Block{ Header: Header{ Height: height, }, Data: Data{ - Txs: txs, + Txs: txs, + Proof: proof, }, Evidence: EvidenceData{Evidence: evidence}, LastCommit: lastCommit, From cb770d6c0ad8b28cedcf40ae417dabee523d436c Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 10 Sep 2020 16:27:16 +0200 Subject: [PATCH 15/32] undo changes --- Makefile | 1 - docs/.vuepress/config.js | 118 +++++++++++++++++++-------------------- docs/versions | 2 - 3 files changed, 59 insertions(+), 62 deletions(-) diff --git a/Makefile b/Makefile index 0c29fdc340..d24b4acc28 100644 --- a/Makefile +++ b/Makefile @@ -170,7 +170,6 @@ build-docs: cd docs && \ while read p; do \ (git checkout $${p} && npm install && VUEPRESS_BASE="/$${p}/" npm run build) ; \ - git stash ; \ mkdir -p ~/output/$${p} ; \ cp -r .vuepress/dist/* ~/output/$${p}/ ; \ cp ~/output/$${p}/index.html ~/output ; \ diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index d09787489b..492c7a6db8 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -1,6 +1,6 @@ module.exports = { - theme: 'cosmos', - title: 'Tendermint Core', + theme: "cosmos", + title: "Tendermint Core", // locales: { // "/": { // lang: "en-US" @@ -11,11 +11,11 @@ module.exports = { // }, base: process.env.VUEPRESS_BASE, themeConfig: { - repo: 'tendermint/tendermint', - docsRepo: 'tendermint/tendermint', - docsDir: 'docs', + repo: "tendermint/tendermint", + docsRepo: "tendermint/tendermint", + docsDir: "docs", editLinks: true, - label: 'core', + label: "core", topbar: { banner: false, }, @@ -23,26 +23,26 @@ module.exports = { auto: true, nav: [ { - title: 'Resources', + title: "Resources", children: [ { - title: 'Developer Sessions', - path: '/DEV_SESSIONS.html' + title: "Developer Sessions", + path: "/DEV_SESSIONS.html" }, { - title: 'RPC', - path: 'https://docs.tendermint.com/master/rpc/', + title: "RPC", + path: "https://docs.tendermint.com/master/rpc/", static: true }, // TODO: remove once https://github.com/cosmos/vuepress-theme-cosmos/issues/91 is closed { - title: 'Version 0.32', - path: '/v0.32', + title: "Version 0.32", + path: "/v0.32", static: true }, { - title: 'Version 0.33', - path: '/v0.33', + title: "Version 0.33", + path: "/v0.33", static: true }, ] @@ -50,98 +50,98 @@ module.exports = { ] }, gutter: { - title: 'Help & Support', + title: "Help & Support", editLink: true, forum: { - title: 'Tendermint Forum', - text: 'Join the Tendermint forum to learn more', - url: 'https://forum.cosmos.network/c/tendermint', - bg: '#0B7E0B', - logo: 'tendermint' + title: "Tendermint Forum", + text: "Join the Tendermint forum to learn more", + url: "https://forum.cosmos.network/c/tendermint", + bg: "#0B7E0B", + logo: "tendermint" }, github: { - title: 'Found an Issue?', - text: 'Help us improve this page by suggesting edits on GitHub.' + title: "Found an Issue?", + text: "Help us improve this page by suggesting edits on GitHub." } }, footer: { question: { - text: 'Chat with Tendermint developers in Discord or reach out on the Tendermint Forum to learn more.' + text: "Chat with Tendermint developers in Discord or reach out on the Tendermint Forum to learn more." }, - logo: '/logo-bw.svg', + logo: "/logo-bw.svg", textLink: { - text: 'tendermint.com', - url: 'https://tendermint.com' + text: "tendermint.com", + url: "https://tendermint.com" }, services: [ { - service: 'medium', - url: 'https://medium.com/@tendermint' + service: "medium", + url: "https://medium.com/@tendermint" }, { - service: 'twitter', - url: 'https://twitter.com/tendermint_team' + service: "twitter", + url: "https://twitter.com/tendermint_team" }, { - service: 'linkedin', - url: 'https://www.linkedin.com/company/tendermint/' + service: "linkedin", + url: "https://www.linkedin.com/company/tendermint/" }, { - service: 'reddit', - url: 'https://reddit.com/r/cosmosnetwork' + service: "reddit", + url: "https://reddit.com/r/cosmosnetwork" }, { - service: 'telegram', - url: 'https://t.me/cosmosproject' + service: "telegram", + url: "https://t.me/cosmosproject" }, { - service: 'youtube', - url: 'https://www.youtube.com/c/CosmosProject' + service: "youtube", + url: "https://www.youtube.com/c/CosmosProject" } ], smallprint: - 'The development of the Tendermint project is led primarily by Tendermint Inc., the for-profit entity which also maintains this website. Funding for this development comes primarily from the Interchain Foundation, a Swiss non-profit.', + "The development of the Tendermint project is led primarily by Tendermint Inc., the for-profit entity which also maintains this website. Funding for this development comes primarily from the Interchain Foundation, a Swiss non-profit.", links: [ { - title: 'Documentation', + title: "Documentation", children: [ { - title: 'Cosmos SDK', - url: 'https://docs.cosmos.network' + title: "Cosmos SDK", + url: "https://docs.cosmos.network" }, { - title: 'Cosmos Hub', - url: 'https://hub.cosmos.network' + title: "Cosmos Hub", + url: "https://hub.cosmos.network" } ] }, { - title: 'Community', + title: "Community", children: [ { - title: 'Tendermint blog', - url: 'https://medium.com/@tendermint' + title: "Tendermint blog", + url: "https://medium.com/@tendermint" }, { - title: 'Forum', - url: 'https://forum.cosmos.network/c/tendermint' + title: "Forum", + url: "https://forum.cosmos.network/c/tendermint" } ] }, { - title: 'Contributing', + title: "Contributing", children: [ { - title: 'Contributing to the docs', - url: 'https://github.com/tendermint/tendermint' + title: "Contributing to the docs", + url: "https://github.com/tendermint/tendermint" }, { - title: 'Source code on GitHub', - url: 'https://github.com/tendermint/tendermint' + title: "Source code on GitHub", + url: "https://github.com/tendermint/tendermint" }, { - title: 'Careers at Tendermint', - url: 'https://tendermint.com/careers' + title: "Careers at Tendermint", + url: "https://tendermint.com/careers" } ] } @@ -150,9 +150,9 @@ module.exports = { }, plugins: [ [ - '@vuepress/google-analytics', + "@vuepress/google-analytics", { - ga: 'UA-51029217-11' + ga: "UA-51029217-11" } ] ], diff --git a/docs/versions b/docs/versions index 1e6a129281..1f7391f92b 100644 --- a/docs/versions +++ b/docs/versions @@ -1,3 +1 @@ -v0.32 -v0.33 master From 4677f69ebc987de3cf38ac6993de20b6ec1a3ab6 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Tue, 22 Sep 2020 16:10:36 +0200 Subject: [PATCH 16/32] add block metadata in beginBlcok --- abci/types/types.pb.go | 426 +++++++++++++++++------------- proto/tendermint/abci/types.proto | 5 +- state/execution.go | 5 +- types/block.go | 4 +- types/test_util.go | 6 +- 5 files changed, 251 insertions(+), 195 deletions(-) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index 159f324019..ce062889a2 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -749,6 +749,7 @@ type RequestBeginBlock struct { Header types1.Header `protobuf:"bytes,2,opt,name=header,proto3" json:"header"` LastCommitInfo LastCommitInfo `protobuf:"bytes,3,opt,name=last_commit_info,json=lastCommitInfo,proto3" json:"last_commit_info"` ByzantineValidators []Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators,proto3" json:"byzantine_validators"` + MetaData []byte `protobuf:"bytes,5,opt,name=meta_data,json=metaData,proto3" json:"meta_data,omitempty"` } func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} } @@ -812,6 +813,13 @@ func (m *RequestBeginBlock) GetByzantineValidators() []Evidence { return nil } +func (m *RequestBeginBlock) GetMetaData() []byte { + if m != nil { + return m.MetaData + } + return nil +} + type RequestCheckTx struct { Tx []byte `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"` Type CheckTxType `protobuf:"varint,2,opt,name=type,proto3,enum=tendermint.abci.CheckTxType" json:"type,omitempty"` @@ -2506,8 +2514,8 @@ func (m *ResponseApplySnapshotChunk) GetRejectSenders() []string { } type ResponsePreprocessTxs struct { - Txs [][]byte `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"` - Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` + Txs [][]byte `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"` + MetaData []byte `protobuf:"bytes,2,opt,name=meta_data,json=metaData,proto3" json:"meta_data,omitempty"` } func (m *ResponsePreprocessTxs) Reset() { *m = ResponsePreprocessTxs{} } @@ -2550,9 +2558,9 @@ func (m *ResponsePreprocessTxs) GetTxs() [][]byte { return nil } -func (m *ResponsePreprocessTxs) GetProof() []byte { +func (m *ResponsePreprocessTxs) GetMetaData() []byte { if m != nil { - return m.Proof + return m.MetaData } return nil } @@ -3294,180 +3302,181 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 2763 bytes of a gzipped FileDescriptorProto + // 2773 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x4b, 0x77, 0x23, 0xc5, - 0xf5, 0xd7, 0x5b, 0xea, 0x2b, 0xeb, 0xe1, 0x1a, 0x33, 0x88, 0x66, 0xb0, 0x4d, 0x73, 0xe0, 0x3f, - 0x0c, 0x60, 0xff, 0x63, 0x0e, 0x04, 0x02, 0x09, 0x58, 0x42, 0x13, 0x99, 0x19, 0x2c, 0xa7, 0xed, - 0x19, 0xf2, 0x62, 0x9a, 0x96, 0xba, 0x2c, 0x35, 0x23, 0x75, 0x37, 0xdd, 0x25, 0x8f, 0xcd, 0x32, - 0x8f, 0xcd, 0x64, 0xc3, 0x32, 0x1b, 0xbe, 0x46, 0x4e, 0x56, 0xd9, 0x64, 0xc3, 0x39, 0xd9, 0xb0, - 0xcc, 0x6a, 0x92, 0xcc, 0xec, 0xf2, 0x05, 0xb2, 0x4c, 0x4e, 0x3d, 0xfa, 0x25, 0xa9, 0x25, 0x19, - 0xb2, 0xcb, 0xae, 0xea, 0xf6, 0xbd, 0xb7, 0x55, 0xb7, 0xab, 0x7e, 0xf7, 0x77, 0x6f, 0x09, 0x9e, - 0x25, 0xd8, 0x32, 0xb0, 0x3b, 0x36, 0x2d, 0xb2, 0xab, 0xf7, 0xfa, 0xe6, 0x2e, 0xb9, 0x70, 0xb0, - 0xb7, 0xe3, 0xb8, 0x36, 0xb1, 0x51, 0x2d, 0x7c, 0xb8, 0x43, 0x1f, 0xca, 0xcf, 0x45, 0xb4, 0xfb, - 0xee, 0x85, 0x43, 0xec, 0x5d, 0xc7, 0xb5, 0xed, 0x53, 0xae, 0x2f, 0x5f, 0x8b, 0x3c, 0x66, 0x7e, - 0xa2, 0xde, 0x62, 0x4f, 0x85, 0xf1, 0x7d, 0x7c, 0xe1, 0x3f, 0x7d, 0x6e, 0xc6, 0xd6, 0xd1, 0x5d, - 0x7d, 0xec, 0x3f, 0xde, 0x1a, 0xd8, 0xf6, 0x60, 0x84, 0x77, 0xd9, 0xac, 0x37, 0x39, 0xdd, 0x25, - 0xe6, 0x18, 0x7b, 0x44, 0x1f, 0x3b, 0x42, 0x61, 0x63, 0x60, 0x0f, 0x6c, 0x36, 0xdc, 0xa5, 0x23, - 0x2e, 0x55, 0xfe, 0x51, 0x82, 0xa2, 0x8a, 0x3f, 0x9f, 0x60, 0x8f, 0xa0, 0x3d, 0xc8, 0xe1, 0xfe, - 0xd0, 0x6e, 0xa4, 0xb7, 0xd3, 0xd7, 0xcb, 0x7b, 0xd7, 0x76, 0xa6, 0x16, 0xb7, 0x23, 0xf4, 0xda, - 0xfd, 0xa1, 0xdd, 0x49, 0xa9, 0x4c, 0x17, 0xbd, 0x01, 0xf9, 0xd3, 0xd1, 0xc4, 0x1b, 0x36, 0x32, - 0xcc, 0xe8, 0xb9, 0x24, 0xa3, 0x9b, 0x54, 0xa9, 0x93, 0x52, 0xb9, 0x36, 0x7d, 0x95, 0x69, 0x9d, - 0xda, 0x8d, 0xec, 0xe2, 0x57, 0x1d, 0x58, 0xa7, 0xec, 0x55, 0x54, 0x17, 0x35, 0x01, 0x3c, 0x4c, - 0x34, 0xdb, 0x21, 0xa6, 0x6d, 0x35, 0x72, 0xcc, 0xf2, 0xf9, 0x24, 0xcb, 0x63, 0x4c, 0xba, 0x4c, - 0xb1, 0x93, 0x52, 0x25, 0xcf, 0x9f, 0x50, 0x1f, 0xa6, 0x65, 0x12, 0xad, 0x3f, 0xd4, 0x4d, 0xab, - 0x91, 0x5f, 0xec, 0xe3, 0xc0, 0x32, 0x49, 0x8b, 0x2a, 0x52, 0x1f, 0xa6, 0x3f, 0xa1, 0x4b, 0xfe, - 0x7c, 0x82, 0xdd, 0x8b, 0x46, 0x61, 0xf1, 0x92, 0x7f, 0x42, 0x95, 0xe8, 0x92, 0x99, 0x36, 0x6a, - 0x43, 0xb9, 0x87, 0x07, 0xa6, 0xa5, 0xf5, 0x46, 0x76, 0xff, 0x7e, 0xa3, 0xc8, 0x8c, 0x95, 0x24, - 0xe3, 0x26, 0x55, 0x6d, 0x52, 0xcd, 0x4e, 0x4a, 0x85, 0x5e, 0x30, 0x43, 0xef, 0x42, 0xa9, 0x3f, - 0xc4, 0xfd, 0xfb, 0x1a, 0x39, 0x6f, 0x94, 0x98, 0x8f, 0xad, 0x24, 0x1f, 0x2d, 0xaa, 0x77, 0x72, - 0xde, 0x49, 0xa9, 0xc5, 0x3e, 0x1f, 0xd2, 0xf5, 0x1b, 0x78, 0x64, 0x9e, 0x61, 0x97, 0xda, 0x4b, - 0x8b, 0xd7, 0xff, 0x01, 0xd7, 0x64, 0x1e, 0x24, 0xc3, 0x9f, 0xa0, 0xf7, 0x40, 0xc2, 0x96, 0x21, - 0x96, 0x01, 0xcc, 0xc5, 0x76, 0xe2, 0x5e, 0xb1, 0x0c, 0x7f, 0x11, 0x25, 0x2c, 0xc6, 0xe8, 0x2d, - 0x28, 0xf4, 0xed, 0xf1, 0xd8, 0x24, 0x8d, 0x32, 0xb3, 0xde, 0x4c, 0x5c, 0x00, 0xd3, 0xea, 0xa4, - 0x54, 0xa1, 0x8f, 0x0e, 0xa1, 0x3a, 0x32, 0x3d, 0xa2, 0x79, 0x96, 0xee, 0x78, 0x43, 0x9b, 0x78, - 0x8d, 0x35, 0xe6, 0xe1, 0xc5, 0x24, 0x0f, 0xb7, 0x4d, 0x8f, 0x1c, 0xfb, 0xca, 0x9d, 0x94, 0x5a, - 0x19, 0x45, 0x05, 0xd4, 0x9f, 0x7d, 0x7a, 0x8a, 0xdd, 0xc0, 0x61, 0xa3, 0xb2, 0xd8, 0x5f, 0x97, - 0x6a, 0xfb, 0xf6, 0xd4, 0x9f, 0x1d, 0x15, 0xa0, 0x5f, 0xc0, 0x95, 0x91, 0xad, 0x1b, 0x81, 0x3b, - 0xad, 0x3f, 0x9c, 0x58, 0xf7, 0x1b, 0x55, 0xe6, 0xf4, 0xe5, 0xc4, 0x1f, 0x69, 0xeb, 0x86, 0xef, - 0xa2, 0x45, 0x0d, 0x3a, 0x29, 0x75, 0x7d, 0x34, 0x2d, 0x44, 0xf7, 0x60, 0x43, 0x77, 0x9c, 0xd1, - 0xc5, 0xb4, 0xf7, 0x1a, 0xf3, 0x7e, 0x23, 0xc9, 0xfb, 0x3e, 0xb5, 0x99, 0x76, 0x8f, 0xf4, 0x19, - 0x29, 0x0d, 0x86, 0xe3, 0x62, 0xc7, 0xb5, 0xfb, 0xd8, 0xf3, 0x34, 0x72, 0xee, 0x35, 0xd6, 0x17, - 0x07, 0xe3, 0x28, 0xd0, 0x3e, 0x39, 0x67, 0xc1, 0x75, 0xa2, 0x82, 0x66, 0x11, 0xf2, 0x67, 0xfa, - 0x68, 0x82, 0x95, 0xff, 0x83, 0x72, 0x04, 0x3a, 0x50, 0x03, 0x8a, 0x63, 0xec, 0x79, 0xfa, 0x00, - 0x33, 0xa4, 0x91, 0x54, 0x7f, 0xaa, 0x54, 0x61, 0x2d, 0x0a, 0x17, 0xca, 0x38, 0x30, 0xa4, 0x40, - 0x40, 0x0d, 0xcf, 0xb0, 0xeb, 0xd1, 0xd3, 0x2f, 0x0c, 0xc5, 0x14, 0xbd, 0x00, 0x15, 0xb6, 0x1d, - 0x35, 0xff, 0x39, 0x45, 0xa3, 0x9c, 0xba, 0xc6, 0x84, 0x77, 0x85, 0xd2, 0x16, 0x94, 0x9d, 0x3d, - 0x27, 0x50, 0xc9, 0x32, 0x15, 0x70, 0xf6, 0x1c, 0xa1, 0xa0, 0xfc, 0x00, 0xea, 0xd3, 0xe8, 0x81, - 0xea, 0x90, 0xbd, 0x8f, 0x2f, 0xc4, 0xfb, 0xe8, 0x10, 0x6d, 0x88, 0x65, 0xb1, 0x77, 0x48, 0xaa, - 0x58, 0xe3, 0x5f, 0x32, 0x81, 0x71, 0x00, 0x1b, 0xe8, 0x2d, 0xc8, 0x51, 0x14, 0x16, 0x80, 0x2a, - 0xef, 0x70, 0x88, 0xde, 0xf1, 0x21, 0x7a, 0xe7, 0xc4, 0x87, 0xe8, 0x66, 0xe9, 0xeb, 0x47, 0x5b, - 0xa9, 0x2f, 0xff, 0xb6, 0x95, 0x56, 0x99, 0x05, 0x7a, 0x86, 0x9e, 0x72, 0xdd, 0xb4, 0x34, 0xd3, - 0x10, 0xef, 0x29, 0xb2, 0xf9, 0x81, 0x81, 0x6e, 0x41, 0xbd, 0x6f, 0x5b, 0x1e, 0xb6, 0xbc, 0x89, - 0xa7, 0xf1, 0x14, 0x20, 0x60, 0x74, 0xf6, 0x14, 0xb6, 0x7c, 0xc5, 0x23, 0xa6, 0xa7, 0xd6, 0xfa, - 0x71, 0x01, 0xba, 0x09, 0x70, 0xa6, 0x8f, 0x4c, 0x43, 0x27, 0xb6, 0xeb, 0x35, 0x72, 0xdb, 0xd9, - 0xb9, 0x6e, 0xee, 0xfa, 0x2a, 0x77, 0x1c, 0x43, 0x27, 0xb8, 0x99, 0xa3, 0xbf, 0x56, 0x8d, 0x58, - 0xa2, 0x97, 0xa0, 0xa6, 0x3b, 0x8e, 0xe6, 0x11, 0x9d, 0x60, 0xad, 0x77, 0x41, 0xb0, 0xc7, 0xc0, - 0x75, 0x4d, 0xad, 0xe8, 0x8e, 0x73, 0x4c, 0xa5, 0x4d, 0x2a, 0x44, 0x2f, 0x42, 0x95, 0x02, 0xa9, - 0xa9, 0x8f, 0xb4, 0x21, 0x36, 0x07, 0x43, 0xc2, 0x40, 0x34, 0xab, 0x56, 0x84, 0xb4, 0xc3, 0x84, - 0x8a, 0x11, 0x6c, 0x04, 0x06, 0xa2, 0x08, 0x41, 0xce, 0xd0, 0x89, 0xce, 0x02, 0xb9, 0xa6, 0xb2, - 0x31, 0x95, 0x39, 0x3a, 0x19, 0x8a, 0xf0, 0xb0, 0x31, 0xba, 0x0a, 0x05, 0xe1, 0x36, 0xcb, 0xdc, - 0x8a, 0x19, 0xfd, 0x66, 0x8e, 0x6b, 0x9f, 0x61, 0x96, 0x35, 0x4a, 0x2a, 0x9f, 0x28, 0xbf, 0xc9, - 0xc0, 0xfa, 0x0c, 0xdc, 0x52, 0xbf, 0x43, 0xdd, 0x1b, 0xfa, 0xef, 0xa2, 0x63, 0xf4, 0x26, 0xf5, - 0xab, 0x1b, 0xd8, 0x15, 0x69, 0xae, 0x11, 0x0d, 0x11, 0x4f, 0xe1, 0x1d, 0xf6, 0x5c, 0x84, 0x46, - 0x68, 0xa3, 0x2e, 0xd4, 0x47, 0xba, 0x47, 0x34, 0x0e, 0x5f, 0x5a, 0x24, 0xe5, 0xcd, 0x82, 0xf6, - 0x6d, 0xdd, 0x07, 0x3c, 0xba, 0xd9, 0x85, 0xa3, 0xea, 0x28, 0x26, 0x45, 0x2a, 0x6c, 0xf4, 0x2e, - 0xbe, 0xd0, 0x2d, 0x62, 0x5a, 0x58, 0x9b, 0xf9, 0x72, 0xcf, 0xcc, 0x38, 0x6d, 0x9f, 0x99, 0x06, - 0xb6, 0xfa, 0xfe, 0x27, 0xbb, 0x12, 0x18, 0x07, 0x9f, 0xd4, 0x53, 0x54, 0xa8, 0xc6, 0x13, 0x06, - 0xaa, 0x42, 0x86, 0x9c, 0x8b, 0x00, 0x64, 0xc8, 0x39, 0xfa, 0x7f, 0xc8, 0xd1, 0x45, 0xb2, 0xc5, - 0x57, 0xe7, 0x64, 0x6b, 0x61, 0x77, 0x72, 0xe1, 0x60, 0x95, 0x69, 0x2a, 0x4a, 0x70, 0x1a, 0x82, - 0x24, 0x32, 0xed, 0x55, 0x79, 0x19, 0x6a, 0x53, 0x59, 0x22, 0xf2, 0xfd, 0xd2, 0xd1, 0xef, 0xa7, - 0xd4, 0xa0, 0x12, 0x4b, 0x09, 0xca, 0x55, 0xd8, 0x98, 0x87, 0xf0, 0xca, 0x30, 0x90, 0xc7, 0x90, - 0x1a, 0xbd, 0x01, 0xa5, 0x00, 0xe2, 0xf9, 0x69, 0x9c, 0x8d, 0x95, 0xaf, 0xac, 0x06, 0xaa, 0xf4, - 0x18, 0xd2, 0x6d, 0xcd, 0xf6, 0x43, 0x86, 0xfd, 0xf0, 0xa2, 0xee, 0x38, 0x1d, 0xdd, 0x1b, 0x2a, - 0x9f, 0x42, 0x23, 0x09, 0xbe, 0xa7, 0x96, 0x91, 0x0b, 0xb6, 0xe1, 0x55, 0x28, 0x9c, 0xda, 0xee, - 0x58, 0x27, 0xcc, 0x59, 0x45, 0x15, 0x33, 0xba, 0x3d, 0x39, 0x94, 0x67, 0x99, 0x98, 0x4f, 0x14, - 0x0d, 0x9e, 0x49, 0x84, 0x70, 0x6a, 0x62, 0x5a, 0x06, 0xe6, 0xf1, 0xac, 0xa8, 0x7c, 0x12, 0x3a, - 0xe2, 0x3f, 0x96, 0x4f, 0xe8, 0x6b, 0x3d, 0xb6, 0x56, 0xe6, 0x5f, 0x52, 0xc5, 0x4c, 0xb9, 0x1e, - 0x04, 0x2b, 0x86, 0xe4, 0x14, 0xf3, 0x28, 0xfa, 0xa7, 0xb7, 0xb3, 0xd7, 0xd7, 0x54, 0x3a, 0x54, - 0xfe, 0x20, 0x41, 0x49, 0xc5, 0x9e, 0x43, 0xd1, 0x03, 0x35, 0x41, 0xc2, 0xe7, 0x7d, 0xcc, 0x69, - 0x58, 0x3a, 0x91, 0xc6, 0x70, 0xed, 0xb6, 0xaf, 0x49, 0x39, 0x44, 0x60, 0x86, 0x5e, 0x17, 0x54, - 0x33, 0x99, 0x35, 0x0a, 0xf3, 0x28, 0xd7, 0x7c, 0xd3, 0xe7, 0x9a, 0xd9, 0x44, 0xda, 0xc0, 0xad, - 0xa6, 0xc8, 0xe6, 0xeb, 0x82, 0x6c, 0xe6, 0x96, 0xbc, 0x2c, 0xc6, 0x36, 0x5b, 0x31, 0xb6, 0x99, - 0x5f, 0xb2, 0xcc, 0x04, 0xba, 0xd9, 0x8a, 0xd1, 0xcd, 0xc2, 0x12, 0x27, 0x09, 0x7c, 0xf3, 0x4d, - 0x9f, 0x6f, 0x16, 0x97, 0x2c, 0x7b, 0x8a, 0x70, 0xde, 0x8c, 0x13, 0x4e, 0x4e, 0x16, 0x5f, 0x48, - 0xb4, 0x4e, 0x64, 0x9c, 0x3f, 0x8c, 0x30, 0x4e, 0x29, 0x91, 0xee, 0x71, 0x27, 0x73, 0x28, 0x67, - 0x2b, 0x46, 0x39, 0x61, 0x49, 0x0c, 0x12, 0x38, 0xe7, 0xfb, 0x51, 0xce, 0x59, 0x4e, 0xa4, 0xad, - 0x62, 0xd3, 0xcc, 0x23, 0x9d, 0x6f, 0x07, 0xa4, 0x73, 0x2d, 0x91, 0x35, 0x8b, 0x35, 0x4c, 0xb3, - 0xce, 0xee, 0x0c, 0xeb, 0xe4, 0x2c, 0xf1, 0xa5, 0x44, 0x17, 0x4b, 0x68, 0x67, 0x77, 0x86, 0x76, - 0x56, 0x97, 0x38, 0x5c, 0xc2, 0x3b, 0x7f, 0x39, 0x9f, 0x77, 0x26, 0x33, 0x43, 0xf1, 0x33, 0x57, - 0x23, 0x9e, 0x5a, 0x02, 0xf1, 0xac, 0x33, 0xf7, 0xaf, 0x24, 0xba, 0x5f, 0x99, 0x79, 0x76, 0x13, - 0x98, 0x67, 0x72, 0x3c, 0x56, 0xa5, 0x9e, 0x2f, 0xd3, 0x0c, 0x3f, 0x85, 0x44, 0x14, 0x25, 0xb1, - 0xeb, 0xda, 0xae, 0x60, 0x75, 0x7c, 0xa2, 0x5c, 0xa7, 0x9c, 0x23, 0x44, 0x9d, 0x05, 0x34, 0x95, - 0x65, 0xa3, 0x08, 0xd2, 0x28, 0x7f, 0x4c, 0x87, 0xb6, 0x2c, 0x4d, 0x47, 0xf9, 0x8a, 0x24, 0xf8, - 0x4a, 0x84, 0xbd, 0x66, 0xe2, 0xec, 0x75, 0x0b, 0xca, 0x34, 0xcb, 0x4c, 0x11, 0x53, 0xdd, 0xf1, - 0x89, 0x29, 0xba, 0x01, 0xeb, 0x8c, 0x46, 0x70, 0x8e, 0x2b, 0x52, 0x4b, 0x8e, 0x65, 0xc8, 0x1a, - 0x7d, 0xc0, 0x77, 0x3b, 0xcf, 0x31, 0xaf, 0xc1, 0x95, 0x88, 0x6e, 0x90, 0xbd, 0x38, 0x1b, 0xab, - 0x07, 0xda, 0xfb, 0x22, 0x8d, 0x7d, 0x14, 0x06, 0x28, 0x24, 0xbd, 0x08, 0x72, 0x7d, 0xdb, 0xc0, - 0x22, 0xb7, 0xb0, 0x31, 0x4d, 0x0a, 0x23, 0x7b, 0x20, 0x32, 0x08, 0x1d, 0x52, 0xad, 0x00, 0x56, - 0x25, 0x8e, 0x9a, 0xca, 0x9f, 0xd3, 0xa1, 0xbf, 0x90, 0x07, 0xcf, 0xa3, 0xac, 0xe9, 0xff, 0x0e, - 0x65, 0xcd, 0x7c, 0x6b, 0xca, 0x1a, 0xcd, 0xed, 0xd9, 0x78, 0x6e, 0xff, 0x57, 0x3a, 0xfc, 0xc2, - 0x01, 0x01, 0xfd, 0x76, 0x11, 0x09, 0x13, 0x75, 0x9e, 0x7d, 0x2f, 0x91, 0xa8, 0x45, 0x59, 0x51, - 0x60, 0xef, 0x8d, 0x97, 0x15, 0x45, 0x9e, 0xba, 0xd9, 0x04, 0xbd, 0x05, 0x12, 0xeb, 0x1f, 0x69, - 0xb6, 0xe3, 0x09, 0x04, 0x7f, 0x36, 0xba, 0x56, 0xde, 0x26, 0xda, 0x39, 0xa2, 0x3a, 0x5d, 0xc7, - 0x53, 0x4b, 0x8e, 0x18, 0x45, 0x38, 0x88, 0x14, 0xa3, 0xc2, 0xd7, 0x40, 0xa2, 0xbf, 0xde, 0x73, - 0xf4, 0x3e, 0x66, 0x68, 0x2c, 0xa9, 0xa1, 0x40, 0xb9, 0x07, 0x68, 0x36, 0x1f, 0xa0, 0x0e, 0x14, - 0xf0, 0x19, 0xb6, 0x08, 0xe7, 0x04, 0xe5, 0xbd, 0xab, 0x73, 0x78, 0x26, 0xb6, 0x48, 0xb3, 0x41, - 0x83, 0xfc, 0xcf, 0x47, 0x5b, 0x75, 0xae, 0xfd, 0xaa, 0x3d, 0x36, 0x09, 0x1e, 0x3b, 0xe4, 0x42, - 0x15, 0xf6, 0xca, 0xaf, 0x33, 0x94, 0xf4, 0xc5, 0x72, 0xc5, 0xdc, 0xd8, 0xfa, 0x07, 0x28, 0x13, - 0x21, 0xfc, 0xab, 0xc5, 0x7b, 0x13, 0x60, 0xa0, 0x7b, 0xda, 0x03, 0xdd, 0x22, 0xd8, 0x10, 0x41, - 0x8f, 0x48, 0x90, 0x0c, 0x25, 0x3a, 0x9b, 0x78, 0xd8, 0x10, 0xb5, 0x47, 0x30, 0x8f, 0xac, 0xb3, - 0xf8, 0xdd, 0xd6, 0x19, 0x8f, 0x72, 0x69, 0x3a, 0xca, 0xbf, 0xcd, 0x84, 0xa7, 0x24, 0xe4, 0xc7, - 0xff, 0x7b, 0x71, 0xf8, 0x1d, 0x2b, 0x9a, 0xe3, 0x49, 0x1b, 0x1d, 0xc3, 0x7a, 0x70, 0x4a, 0xb5, - 0x09, 0x3b, 0xbd, 0xfe, 0xbe, 0x5b, 0xf5, 0x98, 0xd7, 0xcf, 0xe2, 0x62, 0x0f, 0xfd, 0x14, 0x9e, - 0x9e, 0x42, 0xa0, 0xc0, 0x75, 0x66, 0x45, 0x20, 0x7a, 0x2a, 0x0e, 0x44, 0xbe, 0xe7, 0x30, 0x56, - 0xd9, 0xef, 0x78, 0x36, 0x0e, 0x68, 0x1d, 0x16, 0xa5, 0x20, 0x73, 0xbf, 0xfe, 0x0b, 0x50, 0x71, - 0x31, 0xd1, 0x4d, 0x4b, 0x8b, 0x55, 0xba, 0x6b, 0x5c, 0x28, 0xea, 0xe7, 0x23, 0x78, 0x6a, 0x2e, - 0x15, 0x41, 0xdf, 0x07, 0x29, 0x64, 0x31, 0xe9, 0x84, 0xa2, 0x31, 0x28, 0x84, 0x42, 0x5d, 0xe5, - 0x4f, 0xe9, 0xd0, 0x65, 0xbc, 0xb4, 0x6a, 0x43, 0xc1, 0xc5, 0xde, 0x64, 0xc4, 0x8b, 0x9d, 0xea, - 0xde, 0x6b, 0xab, 0x91, 0x18, 0x2a, 0x9d, 0x8c, 0x88, 0x2a, 0x8c, 0x95, 0x7b, 0x50, 0xe0, 0x12, - 0x54, 0x86, 0xe2, 0x9d, 0xc3, 0x5b, 0x87, 0xdd, 0x8f, 0x0f, 0xeb, 0x29, 0x04, 0x50, 0xd8, 0x6f, - 0xb5, 0xda, 0x47, 0x27, 0xf5, 0x34, 0x92, 0x20, 0xbf, 0xdf, 0xec, 0xaa, 0x27, 0xf5, 0x0c, 0x15, - 0xab, 0xed, 0x0f, 0xdb, 0xad, 0x93, 0x7a, 0x16, 0xad, 0x43, 0x85, 0x8f, 0xb5, 0x9b, 0x5d, 0xf5, - 0xa3, 0xfd, 0x93, 0x7a, 0x2e, 0x22, 0x3a, 0x6e, 0x1f, 0x7e, 0xd0, 0x56, 0xeb, 0x79, 0xe5, 0x7b, - 0xb4, 0x9a, 0x4a, 0xa0, 0x3d, 0x61, 0xdd, 0x94, 0x8e, 0xd4, 0x4d, 0xca, 0xef, 0x33, 0x20, 0x27, - 0x73, 0x19, 0xf4, 0xe1, 0xd4, 0xc2, 0xf7, 0x2e, 0x41, 0x84, 0xa6, 0x56, 0x8f, 0x5e, 0x84, 0xaa, - 0x8b, 0x4f, 0x31, 0xe9, 0x0f, 0x39, 0xb7, 0xe2, 0x89, 0xad, 0xa2, 0x56, 0x84, 0x94, 0x19, 0x79, - 0x5c, 0xed, 0x33, 0xdc, 0x27, 0x1a, 0x2f, 0xe1, 0xf8, 0xa6, 0x93, 0xa8, 0x1a, 0x95, 0x1e, 0x73, - 0xa1, 0xf2, 0xe9, 0xa5, 0x62, 0x29, 0x41, 0x5e, 0x6d, 0x9f, 0xa8, 0x3f, 0xab, 0x67, 0x11, 0x82, - 0x2a, 0x1b, 0x6a, 0xc7, 0x87, 0xfb, 0x47, 0xc7, 0x9d, 0x2e, 0x8d, 0xe5, 0x15, 0xa8, 0xf9, 0xb1, - 0xf4, 0x85, 0x79, 0xe5, 0xbd, 0x70, 0x37, 0x2c, 0xa9, 0x1d, 0x45, 0xef, 0xc5, 0x3e, 0xf5, 0x6b, - 0x52, 0x36, 0x51, 0xfe, 0x9d, 0x86, 0xda, 0xd4, 0x09, 0x43, 0x7b, 0x90, 0xe7, 0x04, 0x3f, 0xe9, - 0x02, 0x82, 0x01, 0x84, 0x38, 0x8e, 0x5c, 0x15, 0xbd, 0x0b, 0x25, 0x2c, 0x7a, 0x1c, 0xf3, 0x4e, - 0x32, 0xef, 0xcd, 0xf8, 0x5d, 0x10, 0x61, 0x1a, 0x58, 0xa0, 0xf7, 0x40, 0x0a, 0xa0, 0x42, 0x54, - 0x95, 0xcf, 0xcf, 0x9a, 0x07, 0x20, 0x23, 0xec, 0x43, 0x1b, 0xf4, 0x76, 0x48, 0xea, 0x72, 0xb3, - 0x65, 0x85, 0x30, 0xe7, 0x0a, 0xc2, 0xd8, 0xd7, 0x57, 0x5a, 0x50, 0x8e, 0xac, 0x07, 0x3d, 0x0b, - 0xd2, 0x58, 0x3f, 0x17, 0xbd, 0x33, 0xde, 0xfd, 0x28, 0x8d, 0xf5, 0x73, 0xde, 0x36, 0x7b, 0x1a, - 0x8a, 0xf4, 0xe1, 0x40, 0xe7, 0x70, 0x95, 0x55, 0x0b, 0x63, 0xfd, 0xfc, 0xc7, 0xba, 0xa7, 0x7c, - 0x02, 0xd5, 0x78, 0xdf, 0x88, 0x86, 0xdb, 0xb5, 0x27, 0x96, 0xc1, 0x7c, 0xe4, 0x55, 0x3e, 0x41, - 0x6f, 0x40, 0xfe, 0xcc, 0xe6, 0x68, 0x37, 0xff, 0xcc, 0xdf, 0xb5, 0x09, 0x8e, 0xf4, 0x9d, 0xb8, - 0xb6, 0xf2, 0x05, 0xe4, 0x19, 0x7a, 0x51, 0x24, 0x62, 0x1d, 0x20, 0x41, 0x68, 0xe9, 0x18, 0x7d, - 0x02, 0xa0, 0x13, 0xe2, 0x9a, 0xbd, 0x49, 0xe8, 0x78, 0x6b, 0x3e, 0xfa, 0xed, 0xfb, 0x7a, 0xcd, - 0x6b, 0x02, 0x06, 0x37, 0x42, 0xd3, 0x08, 0x14, 0x46, 0x1c, 0x2a, 0x87, 0x50, 0x8d, 0xdb, 0x46, - 0x7b, 0xb1, 0x6b, 0x73, 0x7a, 0xb1, 0x01, 0x69, 0x0a, 0x28, 0x57, 0x96, 0x77, 0xfb, 0xd8, 0x44, - 0x79, 0x98, 0x86, 0xd2, 0xc9, 0xb9, 0x38, 0x17, 0x09, 0x8d, 0xa6, 0xd0, 0x34, 0x13, 0x6d, 0xab, - 0xf0, 0xce, 0x55, 0x36, 0xe8, 0x87, 0xbd, 0x1f, 0x9c, 0xfc, 0xdc, 0xaa, 0xe5, 0xac, 0xdf, 0x18, - 0x14, 0x68, 0xf7, 0x0e, 0x48, 0xc1, 0xae, 0xa2, 0x95, 0x81, 0x6e, 0x18, 0x2e, 0xf6, 0x3c, 0xb1, - 0x36, 0x7f, 0xca, 0xce, 0x8e, 0xfd, 0x40, 0x34, 0x6e, 0xb2, 0x2a, 0x9f, 0x28, 0x06, 0xd4, 0xa6, - 0xf2, 0x1e, 0x7a, 0x07, 0x8a, 0xce, 0xa4, 0xa7, 0xf9, 0xe1, 0x99, 0x3a, 0x3c, 0x3e, 0x4b, 0x9c, - 0xf4, 0x46, 0x66, 0xff, 0x16, 0xbe, 0xf0, 0x7f, 0x8c, 0x33, 0xe9, 0xdd, 0xe2, 0x51, 0xe4, 0x6f, - 0xc9, 0x44, 0xdf, 0x72, 0x06, 0x25, 0x7f, 0x53, 0xa0, 0x1f, 0x45, 0xcf, 0x89, 0xdf, 0xcd, 0x4e, - 0xcc, 0xc5, 0xc2, 0x7d, 0xe4, 0x98, 0xdc, 0x80, 0x75, 0xcf, 0x1c, 0x58, 0xd8, 0xd0, 0xc2, 0xda, - 0x84, 0xbd, 0xad, 0xa4, 0xd6, 0xf8, 0x83, 0xdb, 0x7e, 0x61, 0xa2, 0x3c, 0x4a, 0x43, 0xc9, 0x3f, - 0xb0, 0x73, 0xf7, 0x5d, 0xec, 0xc7, 0x64, 0x2e, 0xff, 0x63, 0x92, 0x9a, 0xc4, 0x7e, 0xb7, 0x3e, - 0x77, 0xe9, 0x6e, 0xfd, 0xab, 0x80, 0x88, 0x4d, 0xf4, 0x91, 0x76, 0x66, 0x13, 0xd3, 0x1a, 0x68, - 0x3c, 0x9a, 0x9c, 0x73, 0xd5, 0xd9, 0x93, 0xbb, 0xec, 0xc1, 0x11, 0x0b, 0xec, 0xaf, 0xd2, 0x50, - 0x0a, 0xb2, 0xe7, 0x65, 0x5b, 0x85, 0x57, 0xa1, 0x20, 0x12, 0x04, 0xef, 0x15, 0x8a, 0x59, 0xd0, - 0xb5, 0xce, 0x45, 0xba, 0xd6, 0x32, 0x94, 0xc6, 0x98, 0xe8, 0x8c, 0x42, 0xf0, 0xfa, 0x2f, 0x98, - 0xdf, 0x78, 0x1b, 0xca, 0x91, 0xae, 0x2d, 0x3d, 0x5a, 0x87, 0xed, 0x8f, 0xeb, 0x29, 0xb9, 0xf8, - 0xf0, 0xab, 0xed, 0xec, 0x21, 0x7e, 0x40, 0x37, 0xa5, 0xda, 0x6e, 0x75, 0xda, 0xad, 0x5b, 0xf5, - 0xb4, 0x5c, 0x7e, 0xf8, 0xd5, 0x76, 0x51, 0xc5, 0xac, 0xa5, 0xb3, 0xf7, 0x04, 0xa0, 0xb6, 0xdf, - 0x6c, 0x1d, 0xd0, 0xac, 0x66, 0xf6, 0x75, 0xd1, 0xe8, 0xca, 0xb1, 0xa2, 0x79, 0xe1, 0xa5, 0xb1, - 0xbc, 0xb8, 0xcf, 0x87, 0x6e, 0x42, 0x9e, 0xd5, 0xd3, 0x68, 0xf1, 0x2d, 0xb2, 0xbc, 0xa4, 0xf1, - 0x47, 0x7f, 0x0c, 0xdb, 0xb5, 0x0b, 0xaf, 0x95, 0xe5, 0xc5, 0x7d, 0x40, 0xa4, 0x82, 0x14, 0x16, - 0xc4, 0xcb, 0xaf, 0x99, 0xe5, 0x15, 0x7a, 0x83, 0xd4, 0x67, 0x48, 0xf7, 0x97, 0x5f, 0xbb, 0xca, - 0x2b, 0xe0, 0x0a, 0xba, 0x0d, 0x45, 0xbf, 0x90, 0x5a, 0x76, 0x11, 0x2c, 0x2f, 0xed, 0xdb, 0xd1, - 0x4f, 0xc0, 0x0b, 0xde, 0xc5, 0xb7, 0xda, 0xf2, 0x92, 0x26, 0x24, 0x3a, 0x80, 0x82, 0xe0, 0xb0, - 0x4b, 0x2e, 0x77, 0xe5, 0x65, 0x7d, 0x38, 0x1a, 0xb4, 0xb0, 0x93, 0xb0, 0xfc, 0xae, 0x5e, 0x5e, - 0xa1, 0xbf, 0x8a, 0xee, 0x00, 0x44, 0xca, 0xdb, 0x15, 0x2e, 0xe1, 0xe5, 0x55, 0xfa, 0xa6, 0xa8, - 0x0b, 0xa5, 0xa0, 0x8c, 0x59, 0x7a, 0x25, 0x2e, 0x2f, 0x6f, 0x60, 0xa2, 0x7b, 0x50, 0x89, 0xf3, - 0xf7, 0xd5, 0x2e, 0xba, 0xe5, 0x15, 0x3b, 0x93, 0xd4, 0x7f, 0x9c, 0xcc, 0xaf, 0x76, 0xf1, 0x2d, - 0xaf, 0xd8, 0xa8, 0x44, 0x9f, 0xc1, 0xfa, 0x2c, 0xd9, 0x5e, 0xfd, 0x1e, 0x5c, 0xbe, 0x44, 0xeb, - 0x12, 0x8d, 0x01, 0xcd, 0x21, 0xe9, 0x97, 0xb8, 0x16, 0x97, 0x2f, 0xd3, 0xc9, 0xa4, 0xa1, 0x8b, - 0x33, 0xdf, 0xd5, 0xae, 0xc9, 0xe5, 0x15, 0x7b, 0x9a, 0xcd, 0xf6, 0xd7, 0x8f, 0x37, 0xd3, 0xdf, - 0x3c, 0xde, 0x4c, 0xff, 0xfd, 0xf1, 0x66, 0xfa, 0xcb, 0x27, 0x9b, 0xa9, 0x6f, 0x9e, 0x6c, 0xa6, - 0xfe, 0xfa, 0x64, 0x33, 0xf5, 0xf3, 0x57, 0x06, 0x26, 0x19, 0x4e, 0x7a, 0x3b, 0x7d, 0x7b, 0xbc, - 0x1b, 0xfd, 0x4f, 0xd0, 0xbc, 0xff, 0x29, 0xf5, 0x0a, 0x2c, 0x7d, 0xbd, 0xfe, 0x9f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x46, 0x2c, 0x6f, 0x45, 0xc7, 0x24, 0x00, 0x00, + 0xf5, 0xd7, 0x5b, 0xea, 0x6b, 0x4b, 0x96, 0x6b, 0x86, 0x41, 0x34, 0x83, 0x3d, 0x34, 0x07, 0xfe, + 0xc3, 0x00, 0xf6, 0x3f, 0xe6, 0x40, 0x20, 0x90, 0x80, 0x25, 0x34, 0x91, 0x99, 0xc1, 0x72, 0xda, + 0x66, 0xc8, 0x8b, 0x69, 0x4a, 0xea, 0xb2, 0xd4, 0x8c, 0xd4, 0xdd, 0x74, 0x97, 0x8c, 0xcd, 0x32, + 0x39, 0xd9, 0x90, 0x0d, 0xcb, 0x6c, 0x58, 0xe4, 0x4b, 0xe4, 0x64, 0x95, 0x4d, 0x36, 0x9c, 0x93, + 0x0d, 0xcb, 0xac, 0x48, 0x32, 0xb3, 0xcb, 0x17, 0xc8, 0x32, 0x39, 0xf5, 0xe8, 0x97, 0xa4, 0x96, + 0x64, 0xc8, 0x2e, 0xbb, 0xaa, 0xdb, 0xf7, 0xde, 0x56, 0xdd, 0xae, 0xfa, 0xdd, 0xdf, 0xbd, 0x25, + 0x78, 0x92, 0x12, 0xdb, 0x24, 0xde, 0xd8, 0xb2, 0xe9, 0x2e, 0xee, 0xf5, 0xad, 0x5d, 0x7a, 0xe1, + 0x12, 0x7f, 0xc7, 0xf5, 0x1c, 0xea, 0xa0, 0x8d, 0xe8, 0xe1, 0x0e, 0x7b, 0xa8, 0x3e, 0x15, 0xd3, + 0xee, 0x7b, 0x17, 0x2e, 0x75, 0x76, 0x5d, 0xcf, 0x71, 0x4e, 0x85, 0xbe, 0x7a, 0x3d, 0xf6, 0x98, + 0xfb, 0x89, 0x7b, 0x4b, 0x3c, 0x95, 0xc6, 0x0f, 0xc8, 0x45, 0xf0, 0xf4, 0xa9, 0x19, 0x5b, 0x17, + 0x7b, 0x78, 0x1c, 0x3c, 0xde, 0x1e, 0x38, 0xce, 0x60, 0x44, 0x76, 0xf9, 0xac, 0x37, 0x39, 0xdd, + 0xa5, 0xd6, 0x98, 0xf8, 0x14, 0x8f, 0x5d, 0xa9, 0x70, 0x75, 0xe0, 0x0c, 0x1c, 0x3e, 0xdc, 0x65, + 0x23, 0x21, 0xd5, 0xfe, 0x51, 0x81, 0xb2, 0x4e, 0x3e, 0x99, 0x10, 0x9f, 0xa2, 0x3d, 0x28, 0x90, + 0xfe, 0xd0, 0x69, 0x64, 0x6f, 0x64, 0x6f, 0xae, 0xed, 0x5d, 0xdf, 0x99, 0x5a, 0xdc, 0x8e, 0xd4, + 0x6b, 0xf7, 0x87, 0x4e, 0x27, 0xa3, 0x73, 0x5d, 0xf4, 0x0a, 0x14, 0x4f, 0x47, 0x13, 0x7f, 0xd8, + 0xc8, 0x71, 0xa3, 0xa7, 0xd2, 0x8c, 0x6e, 0x33, 0xa5, 0x4e, 0x46, 0x17, 0xda, 0xec, 0x55, 0x96, + 0x7d, 0xea, 0x34, 0xf2, 0x8b, 0x5f, 0x75, 0x60, 0x9f, 0xf2, 0x57, 0x31, 0x5d, 0xd4, 0x04, 0xf0, + 0x09, 0x35, 0x1c, 0x97, 0x5a, 0x8e, 0xdd, 0x28, 0x70, 0xcb, 0xa7, 0xd3, 0x2c, 0x8f, 0x09, 0xed, + 0x72, 0xc5, 0x4e, 0x46, 0x57, 0xfc, 0x60, 0xc2, 0x7c, 0x58, 0xb6, 0x45, 0x8d, 0xfe, 0x10, 0x5b, + 0x76, 0xa3, 0xb8, 0xd8, 0xc7, 0x81, 0x6d, 0xd1, 0x16, 0x53, 0x64, 0x3e, 0xac, 0x60, 0xc2, 0x96, + 0xfc, 0xc9, 0x84, 0x78, 0x17, 0x8d, 0xd2, 0xe2, 0x25, 0xff, 0x84, 0x29, 0xb1, 0x25, 0x73, 0x6d, + 0xd4, 0x86, 0xb5, 0x1e, 0x19, 0x58, 0xb6, 0xd1, 0x1b, 0x39, 0xfd, 0x07, 0x8d, 0x32, 0x37, 0xd6, + 0xd2, 0x8c, 0x9b, 0x4c, 0xb5, 0xc9, 0x34, 0x3b, 0x19, 0x1d, 0x7a, 0xe1, 0x0c, 0xbd, 0x09, 0x95, + 0xfe, 0x90, 0xf4, 0x1f, 0x18, 0xf4, 0xbc, 0x51, 0xe1, 0x3e, 0xb6, 0xd3, 0x7c, 0xb4, 0x98, 0xde, + 0xc9, 0x79, 0x27, 0xa3, 0x97, 0xfb, 0x62, 0xc8, 0xd6, 0x6f, 0x92, 0x91, 0x75, 0x46, 0x3c, 0x66, + 0xaf, 0x2c, 0x5e, 0xff, 0x3b, 0x42, 0x93, 0x7b, 0x50, 0xcc, 0x60, 0x82, 0xde, 0x02, 0x85, 0xd8, + 0xa6, 0x5c, 0x06, 0x70, 0x17, 0x37, 0x52, 0xf7, 0x8a, 0x6d, 0x06, 0x8b, 0xa8, 0x10, 0x39, 0x46, + 0xaf, 0x41, 0xa9, 0xef, 0x8c, 0xc7, 0x16, 0x6d, 0xac, 0x71, 0xeb, 0xad, 0xd4, 0x05, 0x70, 0xad, + 0x4e, 0x46, 0x97, 0xfa, 0xe8, 0x10, 0x6a, 0x23, 0xcb, 0xa7, 0x86, 0x6f, 0x63, 0xd7, 0x1f, 0x3a, + 0xd4, 0x6f, 0xac, 0x73, 0x0f, 0xcf, 0xa6, 0x79, 0xb8, 0x6b, 0xf9, 0xf4, 0x38, 0x50, 0xee, 0x64, + 0xf4, 0xea, 0x28, 0x2e, 0x60, 0xfe, 0x9c, 0xd3, 0x53, 0xe2, 0x85, 0x0e, 0x1b, 0xd5, 0xc5, 0xfe, + 0xba, 0x4c, 0x3b, 0xb0, 0x67, 0xfe, 0x9c, 0xb8, 0x00, 0xfd, 0x02, 0xae, 0x8c, 0x1c, 0x6c, 0x86, + 0xee, 0x8c, 0xfe, 0x70, 0x62, 0x3f, 0x68, 0xd4, 0xb8, 0xd3, 0xe7, 0x53, 0x7f, 0xa4, 0x83, 0xcd, + 0xc0, 0x45, 0x8b, 0x19, 0x74, 0x32, 0xfa, 0xe6, 0x68, 0x5a, 0x88, 0xee, 0xc3, 0x55, 0xec, 0xba, + 0xa3, 0x8b, 0x69, 0xef, 0x1b, 0xdc, 0xfb, 0xad, 0x34, 0xef, 0xfb, 0xcc, 0x66, 0xda, 0x3d, 0xc2, + 0x33, 0x52, 0x16, 0x0c, 0xd7, 0x23, 0xae, 0xe7, 0xf4, 0x89, 0xef, 0x1b, 0xf4, 0xdc, 0x6f, 0x6c, + 0x2e, 0x0e, 0xc6, 0x51, 0xa8, 0x7d, 0x72, 0xce, 0x83, 0xeb, 0xc6, 0x05, 0xcd, 0x32, 0x14, 0xcf, + 0xf0, 0x68, 0x42, 0xb4, 0xff, 0x83, 0xb5, 0x18, 0x74, 0xa0, 0x06, 0x94, 0xc7, 0xc4, 0xf7, 0xf1, + 0x80, 0x70, 0xa4, 0x51, 0xf4, 0x60, 0xaa, 0xd5, 0x60, 0x3d, 0x0e, 0x17, 0xda, 0x38, 0x34, 0x64, + 0x40, 0xc0, 0x0c, 0xcf, 0x88, 0xe7, 0xb3, 0xd3, 0x2f, 0x0d, 0xe5, 0x14, 0x3d, 0x03, 0x55, 0xbe, + 0x1d, 0x8d, 0xe0, 0x39, 0x43, 0xa3, 0x82, 0xbe, 0xce, 0x85, 0xf7, 0xa4, 0xd2, 0x36, 0xac, 0xb9, + 0x7b, 0x6e, 0xa8, 0x92, 0xe7, 0x2a, 0xe0, 0xee, 0xb9, 0x52, 0x41, 0xfb, 0x01, 0xd4, 0xa7, 0xd1, + 0x03, 0xd5, 0x21, 0xff, 0x80, 0x5c, 0xc8, 0xf7, 0xb1, 0x21, 0xba, 0x2a, 0x97, 0xc5, 0xdf, 0xa1, + 0xe8, 0x72, 0x8d, 0x7f, 0xc9, 0x85, 0xc6, 0x21, 0x6c, 0xa0, 0xd7, 0xa0, 0xc0, 0x50, 0x58, 0x02, + 0xaa, 0xba, 0x23, 0x20, 0x7a, 0x27, 0x80, 0xe8, 0x9d, 0x93, 0x00, 0xa2, 0x9b, 0x95, 0xaf, 0xbe, + 0xd9, 0xce, 0x7c, 0xf1, 0xb7, 0xed, 0xac, 0xce, 0x2d, 0xd0, 0x13, 0xec, 0x94, 0x63, 0xcb, 0x36, + 0x2c, 0x53, 0xbe, 0xa7, 0xcc, 0xe7, 0x07, 0x26, 0xba, 0x03, 0xf5, 0xbe, 0x63, 0xfb, 0xc4, 0xf6, + 0x27, 0xbe, 0x21, 0x52, 0x80, 0x84, 0xd1, 0xd9, 0x53, 0xd8, 0x0a, 0x14, 0x8f, 0xb8, 0x9e, 0xbe, + 0xd1, 0x4f, 0x0a, 0xd0, 0x6d, 0x80, 0x33, 0x3c, 0xb2, 0x4c, 0x4c, 0x1d, 0xcf, 0x6f, 0x14, 0x6e, + 0xe4, 0xe7, 0xba, 0xb9, 0x17, 0xa8, 0xbc, 0xef, 0x9a, 0x98, 0x92, 0x66, 0x81, 0xfd, 0x5a, 0x3d, + 0x66, 0x89, 0x9e, 0x83, 0x0d, 0xec, 0xba, 0x86, 0x4f, 0x31, 0x25, 0x46, 0xef, 0x82, 0x12, 0x9f, + 0x83, 0xeb, 0xba, 0x5e, 0xc5, 0xae, 0x7b, 0xcc, 0xa4, 0x4d, 0x26, 0x44, 0xcf, 0x42, 0x8d, 0x01, + 0xa9, 0x85, 0x47, 0xc6, 0x90, 0x58, 0x83, 0x21, 0xe5, 0x20, 0x9a, 0xd7, 0xab, 0x52, 0xda, 0xe1, + 0x42, 0xcd, 0x0c, 0x37, 0x02, 0x07, 0x51, 0x84, 0xa0, 0x60, 0x62, 0x8a, 0x79, 0x20, 0xd7, 0x75, + 0x3e, 0x66, 0x32, 0x17, 0xd3, 0xa1, 0x0c, 0x0f, 0x1f, 0xa3, 0x6b, 0x50, 0x92, 0x6e, 0xf3, 0xdc, + 0xad, 0x9c, 0xb1, 0x6f, 0xe6, 0x7a, 0xce, 0x19, 0xe1, 0x59, 0xa3, 0xa2, 0x8b, 0x89, 0xf6, 0xfb, + 0x1c, 0x6c, 0xce, 0xc0, 0x2d, 0xf3, 0x3b, 0xc4, 0xfe, 0x30, 0x78, 0x17, 0x1b, 0xa3, 0x57, 0x99, + 0x5f, 0x6c, 0x12, 0x4f, 0xa6, 0xb9, 0x46, 0x3c, 0x44, 0x22, 0x85, 0x77, 0xf8, 0x73, 0x19, 0x1a, + 0xa9, 0x8d, 0xba, 0x50, 0x1f, 0x61, 0x9f, 0x1a, 0x02, 0xbe, 0x8c, 0x58, 0xca, 0x9b, 0x05, 0xed, + 0xbb, 0x38, 0x00, 0x3c, 0xb6, 0xd9, 0xa5, 0xa3, 0xda, 0x28, 0x21, 0x45, 0x3a, 0x5c, 0xed, 0x5d, + 0x7c, 0x86, 0x6d, 0x6a, 0xd9, 0xc4, 0x98, 0xf9, 0x72, 0x4f, 0xcc, 0x38, 0x6d, 0x9f, 0x59, 0x26, + 0xb1, 0xfb, 0xc1, 0x27, 0xbb, 0x12, 0x1a, 0xdf, 0x8b, 0xbe, 0xdd, 0x93, 0xa0, 0x8c, 0x09, 0xc5, + 0x06, 0x8f, 0xb0, 0xf8, 0x6a, 0x15, 0x26, 0x78, 0x07, 0x53, 0xac, 0xe9, 0x50, 0x4b, 0x66, 0x13, + 0x54, 0x83, 0x1c, 0x3d, 0x97, 0xd1, 0xc9, 0xd1, 0x73, 0xf4, 0xff, 0x50, 0x60, 0x11, 0xe0, 0x91, + 0xa9, 0xcd, 0x49, 0xe5, 0xd2, 0xee, 0xe4, 0xc2, 0x25, 0x3a, 0xd7, 0xd4, 0xb4, 0xf0, 0xa8, 0x84, + 0x19, 0x66, 0xda, 0xab, 0xf6, 0x3c, 0x6c, 0x4c, 0xa5, 0x90, 0xd8, 0xc7, 0xcd, 0xc6, 0x3f, 0xae, + 0xb6, 0x01, 0xd5, 0x44, 0xbe, 0xd0, 0xae, 0xc1, 0xd5, 0x79, 0xf0, 0xaf, 0x0d, 0x43, 0x79, 0x02, + 0xc6, 0xd1, 0x2b, 0x50, 0x09, 0xf1, 0x5f, 0x1c, 0xd5, 0xd9, 0x40, 0x06, 0xca, 0x7a, 0xa8, 0xca, + 0xce, 0x28, 0xdb, 0xf3, 0x7c, 0xb3, 0xe4, 0xf8, 0x0f, 0x2f, 0x63, 0xd7, 0xed, 0x60, 0x7f, 0xa8, + 0x7d, 0x04, 0x8d, 0x34, 0x6c, 0x9f, 0x5a, 0x46, 0x21, 0xdc, 0xa3, 0xd7, 0xa0, 0x74, 0xea, 0x78, + 0x63, 0x4c, 0xb9, 0xb3, 0xaa, 0x2e, 0x67, 0x6c, 0xef, 0x0a, 0x9c, 0xcf, 0x73, 0xb1, 0x98, 0x68, + 0x06, 0x3c, 0x91, 0x8a, 0xef, 0xcc, 0xc4, 0xb2, 0x4d, 0x22, 0xe2, 0x59, 0xd5, 0xc5, 0x24, 0x72, + 0x24, 0x7e, 0xac, 0x98, 0xb0, 0xd7, 0xfa, 0x7c, 0xad, 0xdc, 0xbf, 0xa2, 0xcb, 0x99, 0x76, 0x33, + 0x0c, 0x56, 0x02, 0xe6, 0x19, 0x20, 0xb2, 0xd4, 0x90, 0xbd, 0x91, 0xbf, 0xb9, 0xae, 0xb3, 0xa1, + 0xf6, 0x07, 0x05, 0x2a, 0x3a, 0xf1, 0x5d, 0x06, 0x2d, 0xa8, 0x09, 0x0a, 0x39, 0xef, 0x13, 0xc1, + 0xd1, 0xb2, 0xa9, 0x1c, 0x47, 0x68, 0xb7, 0x03, 0x4d, 0x46, 0x30, 0x42, 0x33, 0xf4, 0xb2, 0xe4, + 0xa1, 0xe9, 0x94, 0x52, 0x9a, 0xc7, 0x89, 0xe8, 0xab, 0x01, 0x11, 0xcd, 0xa7, 0x72, 0x0a, 0x61, + 0x35, 0xc5, 0x44, 0x5f, 0x96, 0x4c, 0xb4, 0xb0, 0xe4, 0x65, 0x09, 0x2a, 0xda, 0x4a, 0x50, 0xd1, + 0xe2, 0x92, 0x65, 0xa6, 0x70, 0xd1, 0x56, 0x82, 0x8b, 0x96, 0x96, 0x38, 0x49, 0x21, 0xa3, 0xaf, + 0x06, 0x64, 0xb4, 0xbc, 0x64, 0xd9, 0x53, 0x6c, 0xf4, 0x76, 0x92, 0x8d, 0x0a, 0x26, 0xf9, 0x4c, + 0xaa, 0x75, 0x2a, 0x1d, 0xfd, 0x61, 0x8c, 0x8e, 0x2a, 0xa9, 0x5c, 0x50, 0x38, 0x99, 0xc3, 0x47, + 0x5b, 0x09, 0x3e, 0x0a, 0x4b, 0x62, 0x90, 0x42, 0x48, 0xdf, 0x8e, 0x13, 0xd2, 0xb5, 0x54, 0x4e, + 0x2b, 0x37, 0xcd, 0x3c, 0x46, 0xfa, 0x7a, 0xc8, 0x48, 0xd7, 0x53, 0x29, 0xb5, 0x5c, 0xc3, 0x34, + 0x25, 0xed, 0xce, 0x50, 0x52, 0x41, 0x21, 0x9f, 0x4b, 0x75, 0xb1, 0x84, 0x93, 0x76, 0x67, 0x38, + 0x69, 0x6d, 0x89, 0xc3, 0x25, 0xa4, 0xf4, 0x97, 0xf3, 0x49, 0x69, 0x3a, 0x6d, 0x94, 0x3f, 0x73, + 0x35, 0x56, 0x6a, 0xa4, 0xb0, 0xd2, 0x3a, 0x77, 0xff, 0x42, 0xaa, 0xfb, 0x95, 0x69, 0x69, 0x37, + 0x85, 0x96, 0xa6, 0xc7, 0x63, 0x55, 0x5e, 0xfa, 0x3c, 0x4b, 0xff, 0x53, 0x48, 0xc4, 0x50, 0x92, + 0x78, 0x9e, 0xe3, 0x49, 0xca, 0x27, 0x26, 0xda, 0x4d, 0x46, 0x48, 0x22, 0xd4, 0x59, 0xc0, 0x61, + 0x79, 0x36, 0x8a, 0x21, 0x8d, 0xf6, 0xc7, 0x6c, 0x64, 0xcb, 0x73, 0x78, 0x9c, 0xcc, 0x28, 0x92, + 0xcc, 0xc4, 0xa8, 0x6d, 0x2e, 0x49, 0x6d, 0xb7, 0x61, 0x8d, 0x65, 0x99, 0x29, 0xd6, 0x8a, 0xdd, + 0x80, 0xb5, 0xa2, 0x5b, 0xb0, 0xc9, 0x39, 0x86, 0x20, 0xc0, 0x32, 0xb5, 0x14, 0x78, 0x86, 0xdc, + 0x60, 0x0f, 0xc4, 0x6e, 0x17, 0x39, 0xe6, 0x25, 0xb8, 0x12, 0xd3, 0x0d, 0xb3, 0x97, 0x48, 0xfa, + 0xf5, 0x50, 0x7b, 0x5f, 0xa6, 0xb1, 0xf7, 0xa2, 0x00, 0x45, 0x8c, 0x18, 0x41, 0xa1, 0xef, 0x98, + 0x44, 0xe6, 0x16, 0x3e, 0x66, 0x49, 0x61, 0xe4, 0x0c, 0x64, 0x06, 0x61, 0x43, 0xa6, 0x15, 0xc2, + 0xaa, 0x22, 0x50, 0x53, 0xfb, 0x73, 0x36, 0xf2, 0x17, 0x91, 0xe4, 0x79, 0x7c, 0x36, 0xfb, 0xdf, + 0xe1, 0xb3, 0xb9, 0x6f, 0xcd, 0x67, 0xe3, 0xb9, 0x3d, 0x9f, 0xcc, 0xed, 0xff, 0xca, 0x46, 0x5f, + 0x38, 0x64, 0xa7, 0xdf, 0x2e, 0x22, 0x51, 0xa2, 0x2e, 0xf2, 0xef, 0x25, 0x13, 0xb5, 0xac, 0x39, + 0x4a, 0xfc, 0xbd, 0xc9, 0x9a, 0xa3, 0x2c, 0x52, 0x37, 0x9f, 0xa0, 0xd7, 0x40, 0xe1, 0xcd, 0x25, + 0xc3, 0x71, 0x7d, 0x89, 0xe0, 0x4f, 0xc6, 0xd7, 0x2a, 0x7a, 0x48, 0x3b, 0x47, 0x4c, 0xa7, 0xeb, + 0xfa, 0x7a, 0xc5, 0x95, 0xa3, 0x18, 0x07, 0x51, 0x12, 0x3c, 0xf9, 0x3a, 0x28, 0xec, 0xd7, 0xfb, + 0x2e, 0xee, 0x13, 0x8e, 0xc6, 0x8a, 0x1e, 0x09, 0xb4, 0xfb, 0x80, 0x66, 0xf3, 0x01, 0xea, 0x40, + 0x89, 0x9c, 0x11, 0x9b, 0x0a, 0x4e, 0xb0, 0xb6, 0x77, 0x6d, 0x0e, 0x09, 0x25, 0x36, 0x6d, 0x36, + 0x58, 0x90, 0xff, 0xf9, 0xcd, 0x76, 0x5d, 0x68, 0xbf, 0xe8, 0x8c, 0x2d, 0x4a, 0xc6, 0x2e, 0xbd, + 0xd0, 0xa5, 0xbd, 0xf6, 0xeb, 0x1c, 0x23, 0x7d, 0x89, 0x5c, 0x31, 0x37, 0xb6, 0xc1, 0x01, 0xca, + 0xc5, 0xaa, 0x81, 0xd5, 0xe2, 0xbd, 0x05, 0x30, 0xc0, 0xbe, 0xf1, 0x29, 0xb6, 0x29, 0x31, 0x65, + 0xd0, 0x63, 0x12, 0xa4, 0x42, 0x85, 0xcd, 0x26, 0x3e, 0x31, 0x65, 0x61, 0x12, 0xce, 0x63, 0xeb, + 0x2c, 0x7f, 0xb7, 0x75, 0x26, 0xa3, 0x5c, 0x99, 0x8e, 0xf2, 0x6f, 0x72, 0xd1, 0x29, 0x89, 0xf8, + 0xf1, 0xff, 0x5e, 0x1c, 0x7e, 0xcb, 0x2b, 0xea, 0x64, 0xd2, 0x46, 0xc7, 0xb0, 0x19, 0x9e, 0x52, + 0x63, 0xc2, 0x4f, 0x6f, 0xb0, 0xef, 0x56, 0x3d, 0xe6, 0xf5, 0xb3, 0xa4, 0xd8, 0x47, 0x3f, 0x85, + 0xc7, 0xa7, 0x10, 0x28, 0x74, 0x9d, 0x5b, 0x11, 0x88, 0x1e, 0x4b, 0x02, 0x51, 0xe0, 0x39, 0x8a, + 0x55, 0xfe, 0x3b, 0x9e, 0x8d, 0x03, 0x56, 0x87, 0xc5, 0x29, 0xc8, 0xdc, 0xaf, 0xff, 0x0c, 0x54, + 0x3d, 0x42, 0xb1, 0x65, 0x1b, 0x89, 0x32, 0x78, 0x5d, 0x08, 0x65, 0x71, 0x7d, 0x04, 0x8f, 0xcd, + 0xa5, 0x22, 0xe8, 0xfb, 0xa0, 0x44, 0x2c, 0x26, 0x9b, 0x52, 0x51, 0x86, 0x85, 0x50, 0xa4, 0xab, + 0xfd, 0x29, 0x1b, 0xb9, 0x4c, 0x96, 0x56, 0x6d, 0x28, 0x79, 0xc4, 0x9f, 0x8c, 0x44, 0xb1, 0x53, + 0xdb, 0x7b, 0x69, 0x35, 0x12, 0xc3, 0xa4, 0x93, 0x11, 0xd5, 0xa5, 0xb1, 0x76, 0x1f, 0x4a, 0x42, + 0x82, 0xd6, 0xa0, 0xfc, 0xfe, 0xe1, 0x9d, 0xc3, 0xee, 0x07, 0x87, 0xf5, 0x0c, 0x02, 0x28, 0xed, + 0xb7, 0x5a, 0xed, 0xa3, 0x93, 0x7a, 0x16, 0x29, 0x50, 0xdc, 0x6f, 0x76, 0xf5, 0x93, 0x7a, 0x8e, + 0x89, 0xf5, 0xf6, 0xbb, 0xed, 0xd6, 0x49, 0x3d, 0x8f, 0x36, 0xa1, 0x2a, 0xc6, 0xc6, 0xed, 0xae, + 0xfe, 0xde, 0xfe, 0x49, 0xbd, 0x10, 0x13, 0x1d, 0xb7, 0x0f, 0xdf, 0x69, 0xeb, 0xf5, 0xa2, 0xf6, + 0x3d, 0x56, 0x4d, 0xa5, 0xd0, 0x9e, 0xa8, 0x6e, 0xca, 0xc6, 0xea, 0x26, 0xed, 0x77, 0x39, 0x50, + 0xd3, 0xb9, 0x0c, 0x7a, 0x77, 0x6a, 0xe1, 0x7b, 0x97, 0x20, 0x42, 0x53, 0xab, 0x47, 0xcf, 0x42, + 0xcd, 0x23, 0xa7, 0x84, 0xf6, 0x87, 0x82, 0x5b, 0x89, 0xc4, 0x56, 0xd5, 0xab, 0x52, 0xca, 0x8d, + 0x7c, 0xa1, 0xf6, 0x31, 0xe9, 0x53, 0x43, 0x94, 0x70, 0x62, 0xd3, 0x29, 0x4c, 0x8d, 0x49, 0x8f, + 0x85, 0x50, 0xfb, 0xe8, 0x52, 0xb1, 0x54, 0xa0, 0xa8, 0xb7, 0x4f, 0xf4, 0x9f, 0xd5, 0xf3, 0x08, + 0x41, 0x8d, 0x0f, 0x8d, 0xe3, 0xc3, 0xfd, 0xa3, 0xe3, 0x4e, 0x97, 0xc5, 0xf2, 0x0a, 0x6c, 0x04, + 0xb1, 0x0c, 0x84, 0x45, 0xed, 0x76, 0xb4, 0x1b, 0x96, 0xd4, 0x8e, 0xc9, 0xde, 0x43, 0x6e, 0xaa, + 0xf7, 0xf0, 0xef, 0x2c, 0x6c, 0x4c, 0x1d, 0x34, 0xb4, 0x07, 0x45, 0xc1, 0xf3, 0xd3, 0x2e, 0x29, + 0x38, 0x4e, 0xc8, 0x53, 0x29, 0x54, 0xd1, 0x9b, 0x50, 0x21, 0xb2, 0x0f, 0x32, 0xef, 0x40, 0x8b, + 0xfe, 0x4d, 0xd0, 0x29, 0x91, 0xa6, 0xa1, 0x05, 0x7a, 0x0b, 0x94, 0x10, 0x31, 0x64, 0x71, 0xf9, + 0xf4, 0xac, 0x79, 0x88, 0x35, 0xd2, 0x3e, 0xb2, 0x41, 0xaf, 0x47, 0xdc, 0xae, 0x30, 0x5b, 0x5d, + 0x48, 0x73, 0xa1, 0x20, 0x8d, 0x03, 0x7d, 0xad, 0x05, 0x6b, 0xb1, 0xf5, 0xf0, 0x68, 0xe1, 0x73, + 0xd9, 0x5f, 0x13, 0x4d, 0x90, 0xca, 0x18, 0x9f, 0x8b, 0xd6, 0xda, 0xe3, 0x50, 0x66, 0x0f, 0x07, + 0x58, 0xa0, 0x56, 0x5e, 0x2f, 0x8d, 0xf1, 0xf9, 0x8f, 0xb1, 0xaf, 0x7d, 0x08, 0xb5, 0x64, 0x6f, + 0x89, 0xed, 0x68, 0xcf, 0x99, 0xd8, 0x26, 0xf7, 0x51, 0xd4, 0xc5, 0x04, 0xbd, 0x02, 0xc5, 0x33, + 0x47, 0x80, 0xde, 0xfc, 0xa3, 0x7f, 0xcf, 0xa1, 0x24, 0xd6, 0x9b, 0x12, 0xda, 0xda, 0x67, 0x50, + 0xe4, 0x20, 0xc6, 0x00, 0x89, 0x37, 0x82, 0x24, 0xaf, 0x65, 0x63, 0xf4, 0x21, 0x00, 0xa6, 0xd4, + 0xb3, 0x7a, 0x93, 0xc8, 0xf1, 0xf6, 0x7c, 0x10, 0xdc, 0x0f, 0xf4, 0x9a, 0xd7, 0x25, 0x1a, 0x5e, + 0x8d, 0x4c, 0x63, 0x88, 0x18, 0x73, 0xa8, 0x1d, 0x42, 0x2d, 0x69, 0x1b, 0xef, 0xd7, 0xae, 0xcf, + 0xe9, 0xd7, 0x86, 0xdc, 0x29, 0x64, 0x5e, 0x79, 0xd1, 0x11, 0xe4, 0x13, 0xed, 0xf3, 0x2c, 0x54, + 0x4e, 0xce, 0xe5, 0xf1, 0x48, 0xe9, 0x37, 0x45, 0xa6, 0xb9, 0x78, 0x77, 0x45, 0x34, 0xb0, 0xf2, + 0x61, 0x5b, 0xec, 0xed, 0x10, 0x00, 0x0a, 0xab, 0x56, 0xb5, 0x41, 0xf3, 0x50, 0x82, 0xde, 0x1b, + 0xa0, 0x84, 0xbb, 0x8a, 0x15, 0x08, 0xd8, 0x34, 0x3d, 0xe2, 0xfb, 0x72, 0x6d, 0xc1, 0x94, 0xf7, + 0x36, 0x9d, 0x4f, 0x65, 0xff, 0x26, 0xaf, 0x8b, 0x89, 0x66, 0xc2, 0xc6, 0x54, 0xfa, 0x43, 0x6f, + 0x40, 0xd9, 0x9d, 0xf4, 0x8c, 0x20, 0x3c, 0x53, 0x87, 0x27, 0x20, 0x8b, 0x93, 0xde, 0xc8, 0xea, + 0xdf, 0x21, 0x17, 0xc1, 0x8f, 0x71, 0x27, 0xbd, 0x3b, 0x22, 0x8a, 0xe2, 0x2d, 0xb9, 0xf8, 0x5b, + 0xce, 0xa0, 0x12, 0x6c, 0x0a, 0xf4, 0xa3, 0xf8, 0x39, 0x09, 0x3a, 0xde, 0xa9, 0x29, 0x59, 0xba, + 0x8f, 0x1d, 0x93, 0x5b, 0xb0, 0xe9, 0x5b, 0x03, 0x9b, 0x98, 0x46, 0x54, 0xa2, 0xf0, 0xb7, 0x55, + 0xf4, 0x0d, 0xf1, 0xe0, 0x6e, 0x50, 0x9f, 0x68, 0xdf, 0x64, 0xa1, 0x12, 0x1c, 0xd8, 0xb9, 0xfb, + 0x2e, 0xf1, 0x63, 0x72, 0x97, 0xff, 0x31, 0x69, 0x8d, 0xe4, 0xa0, 0xa3, 0x5f, 0xb8, 0x74, 0x47, + 0xff, 0x45, 0x40, 0xd4, 0xa1, 0x78, 0x64, 0x9c, 0x39, 0xd4, 0xb2, 0x07, 0x86, 0x88, 0xa6, 0xa0, + 0x5e, 0x75, 0xfe, 0xe4, 0x1e, 0x7f, 0x70, 0xc4, 0x03, 0xfb, 0xab, 0x2c, 0x54, 0xc2, 0x24, 0x7a, + 0xd9, 0x8e, 0xe1, 0x35, 0x28, 0xc9, 0x3c, 0x21, 0x5a, 0x86, 0x72, 0x16, 0x76, 0xb6, 0x0b, 0xb1, + 0xce, 0xb6, 0x0a, 0x1c, 0x6f, 0xa7, 0x7b, 0xbf, 0x6c, 0x7e, 0xeb, 0x75, 0x58, 0x8b, 0x35, 0x6f, + 0xd9, 0xd1, 0x3a, 0x6c, 0x7f, 0x50, 0xcf, 0xa8, 0xe5, 0xcf, 0xbf, 0xbc, 0x91, 0x3f, 0x24, 0x9f, + 0xb2, 0x4d, 0xa9, 0xb7, 0x5b, 0x9d, 0x76, 0xeb, 0x4e, 0x3d, 0xab, 0xae, 0x7d, 0xfe, 0xe5, 0x8d, + 0xb2, 0x4e, 0x78, 0x67, 0x67, 0xef, 0x11, 0xc0, 0xc6, 0x7e, 0xb3, 0x75, 0xc0, 0x92, 0x9b, 0xd5, + 0xc7, 0xb2, 0xdf, 0x55, 0xe0, 0xb5, 0xf3, 0xc2, 0x8b, 0x65, 0x75, 0x71, 0xbb, 0x0f, 0xdd, 0x86, + 0x22, 0x2f, 0xab, 0xd1, 0xe2, 0x9b, 0x66, 0x75, 0x49, 0xff, 0x8f, 0xfd, 0x18, 0xbe, 0x6b, 0x17, + 0x5e, 0x3d, 0xab, 0x8b, 0xdb, 0x81, 0x48, 0x07, 0x25, 0xaa, 0x8b, 0x97, 0x5f, 0x45, 0xab, 0x2b, + 0xb4, 0x08, 0x99, 0xcf, 0x88, 0xf5, 0x2f, 0xbf, 0x9a, 0x55, 0x57, 0xc0, 0x15, 0x74, 0x17, 0xca, + 0x41, 0x3d, 0xb5, 0xec, 0xb2, 0x58, 0x5d, 0xda, 0xbe, 0x63, 0x9f, 0x40, 0xd4, 0xbd, 0x8b, 0x6f, + 0xbe, 0xd5, 0x25, 0xbd, 0x48, 0x74, 0x00, 0x25, 0x49, 0x65, 0x97, 0x5c, 0x00, 0xab, 0xcb, 0xda, + 0x71, 0x2c, 0x68, 0x51, 0x43, 0x61, 0xf9, 0x7d, 0xbe, 0xba, 0x42, 0x9b, 0x15, 0xbd, 0x0f, 0x10, + 0xab, 0x72, 0x57, 0xb8, 0xa8, 0x57, 0x57, 0x69, 0x9f, 0xa2, 0x2e, 0x54, 0xc2, 0x6a, 0x66, 0xe9, + 0xb5, 0xb9, 0xba, 0xbc, 0x8f, 0x89, 0xee, 0x43, 0x35, 0x49, 0xe3, 0x57, 0xbb, 0x0c, 0x57, 0x57, + 0x6c, 0x50, 0x32, 0xff, 0x49, 0x4e, 0xbf, 0xda, 0xe5, 0xb8, 0xba, 0x62, 0xbf, 0x12, 0x7d, 0x0c, + 0x9b, 0xb3, 0x9c, 0x7b, 0xf5, 0xbb, 0x72, 0xf5, 0x12, 0x1d, 0x4c, 0x34, 0x06, 0x34, 0x87, 0xab, + 0x5f, 0xe2, 0xea, 0x5c, 0xbd, 0x4c, 0x43, 0x93, 0x85, 0x2e, 0x49, 0x80, 0x57, 0xbb, 0x4a, 0x57, + 0x57, 0x6c, 0x6d, 0x36, 0xdb, 0x5f, 0x3d, 0xdc, 0xca, 0x7e, 0xfd, 0x70, 0x2b, 0xfb, 0xf7, 0x87, + 0x5b, 0xd9, 0x2f, 0x1e, 0x6d, 0x65, 0xbe, 0x7e, 0xb4, 0x95, 0xf9, 0xeb, 0xa3, 0xad, 0xcc, 0xcf, + 0x5f, 0x18, 0x58, 0x74, 0x38, 0xe9, 0xed, 0xf4, 0x9d, 0xf1, 0x6e, 0xfc, 0x7f, 0x43, 0xf3, 0xfe, + 0xcb, 0xd4, 0x2b, 0xf1, 0xf4, 0xf5, 0xf2, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x64, 0x01, 0xdc, + 0xdf, 0xeb, 0x24, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4738,6 +4747,13 @@ func (m *RequestBeginBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.MetaData) > 0 { + i -= len(m.MetaData) + copy(dAtA[i:], m.MetaData) + i = encodeVarintTypes(dAtA, i, uint64(len(m.MetaData))) + i-- + dAtA[i] = 0x2a + } if len(m.ByzantineValidators) > 0 { for iNdEx := len(m.ByzantineValidators) - 1; iNdEx >= 0; iNdEx-- { { @@ -6253,10 +6269,10 @@ func (m *ResponsePreprocessTxs) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Proof) > 0 { - i -= len(m.Proof) - copy(dAtA[i:], m.Proof) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Proof))) + if len(m.MetaData) > 0 { + i -= len(m.MetaData) + copy(dAtA[i:], m.MetaData) + i = encodeVarintTypes(dAtA, i, uint64(len(m.MetaData))) i-- dAtA[i] = 0x12 } @@ -7133,6 +7149,10 @@ func (m *RequestBeginBlock) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } + l = len(m.MetaData) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -7841,7 +7861,7 @@ func (m *ResponsePreprocessTxs) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } - l = len(m.Proof) + l = len(m.MetaData) if l > 0 { n += 1 + l + sovTypes(uint64(l)) } @@ -9618,6 +9638,40 @@ func (m *RequestBeginBlock) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetaData", 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.MetaData = append(m.MetaData[:0], dAtA[iNdEx:postIndex]...) + if m.MetaData == nil { + m.MetaData = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -13519,7 +13573,7 @@ func (m *ResponsePreprocessTxs) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MetaData", wireType) } var byteLen int for shift := uint(0); ; shift += 7 { @@ -13546,9 +13600,9 @@ func (m *ResponsePreprocessTxs) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) - if m.Proof == nil { - m.Proof = []byte{} + m.MetaData = append(m.MetaData[:0], dAtA[iNdEx:postIndex]...) + if m.MetaData == nil { + m.MetaData = []byte{} } iNdEx = postIndex default: diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index a7adabe749..913c73b97b 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -80,6 +80,7 @@ message RequestBeginBlock { tendermint.types.Header header = 2 [(gogoproto.nullable) = false]; LastCommitInfo last_commit_info = 3 [(gogoproto.nullable) = false]; repeated Evidence byzantine_validators = 4 [(gogoproto.nullable) = false]; + bytes meta_data = 5; } enum CheckTxType { @@ -283,8 +284,8 @@ message ResponseApplySnapshotChunk { } message ResponsePreprocessTxs { - repeated bytes txs = 1; - bytes proof = 2; + repeated bytes txs = 1; + bytes meta_data = 2; } //---------------------------------------- diff --git a/state/execution.go b/state/execution.go index bdf4316252..7b1d9e1fcd 100644 --- a/state/execution.go +++ b/state/execution.go @@ -120,7 +120,7 @@ func (blockExec *BlockExecutor) CreateProposalBlock( ppt := processedBlockTxs.GetTxs() - dataProof := processedBlockTxs.GetProof() + metaData := processedBlockTxs.GetMetaData() lp := len(ppt) processedTxs := make(types.Txs, lp) @@ -128,7 +128,7 @@ func (blockExec *BlockExecutor) CreateProposalBlock( processedTxs[i] = ppt[i] } - return state.MakeBlock(height, processedTxs, dataProof, commit, evidence, proposerAddr) + return state.MakeBlock(height, processedTxs, metaData, commit, evidence, proposerAddr) } // ValidateBlock validates the given block against the given state. @@ -316,6 +316,7 @@ func execBlockOnProxyApp( Header: *pbh, LastCommitInfo: commitInfo, ByzantineValidators: byzVals, + MetaData: block.MetaData, }) if err != nil { logger.Error("Error in proxyAppConn.BeginBlock", "err", err) diff --git a/types/block.go b/types/block.go index 87870c5197..3c2429679c 100644 --- a/types/block.go +++ b/types/block.go @@ -1105,9 +1105,9 @@ type Data struct { // This means that block.AppHash does not include these txs. Txs Txs `json:"txs"` - // Proof is a arbitrary byte slice. This field will vary on the use case of the application + // MetaData is a arbitrary byte slice. This field will vary on the use case of the application // NOTE: can be empty or populated. - Proof []byte `json:"proof"` + MetaData []byte `json:"meta_data"` // Volatile hash tmbytes.HexBytes diff --git a/types/test_util.go b/types/test_util.go index fdaf2db8c7..4172b73668 100644 --- a/types/test_util.go +++ b/types/test_util.go @@ -82,14 +82,14 @@ func MakeVote( // MakeBlock returns a new block with an empty header, except what can be // computed from itself. // It populates the same set of fields validated by ValidateBasic. -func MakeBlock(height int64, txs []Tx, proof []byte, lastCommit *Commit, evidence []Evidence) *Block { +func MakeBlock(height int64, txs []Tx, metaData []byte, lastCommit *Commit, evidence []Evidence) *Block { block := &Block{ Header: Header{ Height: height, }, Data: Data{ - Txs: txs, - Proof: proof, + Txs: txs, + MetaData: metaData, }, Evidence: EvidenceData{Evidence: evidence}, LastCommit: lastCommit, From eec2c9695782d5c4f58c929e1e87fd5cfcb6f194 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Tue, 22 Sep 2020 16:23:45 +0200 Subject: [PATCH 17/32] fix testing --- evidence/pool_test.go | 267 ------------------------------------------ 1 file changed, 267 deletions(-) diff --git a/evidence/pool_test.go b/evidence/pool_test.go index bcbee4d759..954ce0e50f 100644 --- a/evidence/pool_test.go +++ b/evidence/pool_test.go @@ -157,75 +157,6 @@ func TestEvidencePoolUpdate(t *testing.T) { assert.True(t, pool.IsCommitted(evidence)) } -<<<<<<< HEAD -func TestAddingAndPruningPOLC(t *testing.T) { - var ( - val = types.NewMockPV() - expiredHeight = int64(1) - firstBlockID = types.BlockID{ - Hash: tmrand.Bytes(tmhash.Size), - PartSetHeader: types.PartSetHeader{ - Total: 1, - Hash: tmrand.Bytes(tmhash.Size), - }, - } - stateStore = initializeValidatorState(val, expiredHeight) - blockStore = &mocks.BlockStore{} - expiredEvidenceTime = time.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC) - ) - - pool, err := NewPool(dbm.NewMemDB(), stateStore, blockStore) - require.NoError(t, err) - pool.SetLogger(log.TestingLogger()) - state := pool.State() - height := state.ConsensusParams.Evidence.MaxAgeNumBlocks * 2 - - blockStore.On("LoadBlockMeta", mock.AnythingOfType("int64")).Return( - &types.BlockMeta{Header: types.Header{Time: expiredEvidenceTime}}, - ) - - voteA := makeVote(1, 1, 0, val.PrivKey.PubKey().Address(), firstBlockID, expiredEvidenceTime) - vA := voteA.ToProto() - err = val.SignVote(evidenceChainID, vA) - require.NoError(t, err) - voteA.Signature = vA.Signature - - pubKey, _ := types.NewMockPV().GetPubKey() - polc := &types.ProofOfLockChange{ - Votes: []*types.Vote{voteA}, - PubKey: pubKey, - } - - err = pool.AddPOLC(polc) - assert.NoError(t, err) - - // should be able to retrieve polc - newPolc, err := pool.RetrievePOLC(1, 1) - assert.NoError(t, err) - assert.True(t, polc.Equal(newPolc)) - - // should not be able to retrieve because it doesn't exist - emptyPolc, err := pool.RetrievePOLC(2, 1) - assert.NoError(t, err) - assert.Nil(t, emptyPolc) - - lastCommit := makeCommit(height-1, val.PrivKey.PubKey().Address()) - block := types.MakeBlock(height, []types.Tx{}, []byte("proof"), lastCommit, []types.Evidence{}) - // update state (partially) - state.LastBlockHeight = height - pool.state.LastBlockHeight = height - - // update should prune the polc - pool.Update(block, state) - - emptyPolc, err = pool.RetrievePOLC(1, 1) - assert.NoError(t, err) - assert.Nil(t, emptyPolc) - -} - -======= ->>>>>>> master func TestVerifyEvidenceCommittedEvidenceFails(t *testing.T) { height := int64(1) pool, _ := defaultTestPool(height) @@ -301,204 +232,6 @@ func TestRecoverPendingEvidence(t *testing.T) { assert.False(t, pool.Has(expiredEvidence)) } -<<<<<<< HEAD -// Comprehensive set of test cases relating to the adding, upgrading and overall -// processing of PotentialAmnesiaEvidence and AmnesiaEvidence -func TestAmnesiaEvidence(t *testing.T) { - var ( - val = types.NewMockPV() - val2 = types.NewMockPV() - pubKey = val.PrivKey.PubKey() - pubKey2 = val2.PrivKey.PubKey() - valSet = &types.ValidatorSet{ - Validators: []*types.Validator{ - val.ExtractIntoValidator(1), - val2.ExtractIntoValidator(3), - }, - Proposer: val.ExtractIntoValidator(1), - } - height = int64(30) - stateStore = initializeStateFromValidatorSet(valSet, height) - evidenceDB = dbm.NewMemDB() - state = stateStore.LoadState() - blockStore = &mocks.BlockStore{} - //evidenceTime = time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC) - firstBlockID = types.BlockID{ - Hash: tmrand.Bytes(tmhash.Size), - PartSetHeader: types.PartSetHeader{ - Total: 1, - Hash: tmrand.Bytes(tmhash.Size), - }, - } - secondBlockID = types.BlockID{ - Hash: tmrand.Bytes(tmhash.Size), - PartSetHeader: types.PartSetHeader{ - Total: 1, - Hash: tmrand.Bytes(tmhash.Size), - }, - } - evidenceTime = time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC) - ) - - blockStore.On("LoadBlockMeta", mock.AnythingOfType("int64")).Return( - &types.BlockMeta{Header: types.Header{Time: evidenceTime}}, - ) - - // TEST SETUP - pool, err := NewPool(evidenceDB, stateStore, blockStore) - require.NoError(t, err) - - pool.SetLogger(log.TestingLogger()) - - voteA := makeVote(height, 0, 0, pubKey.Address(), firstBlockID, evidenceTime) - vA := voteA.ToProto() - err = val.SignVote(evidenceChainID, vA) - voteA.Signature = vA.Signature - require.NoError(t, err) - voteB := makeVote(height, 1, 0, pubKey.Address(), secondBlockID, evidenceTime.Add(3*time.Second)) - vB := voteB.ToProto() - err = val.SignVote(evidenceChainID, vB) - voteB.Signature = vB.Signature - require.NoError(t, err) - voteC := makeVote(height, 2, 0, pubKey.Address(), firstBlockID, evidenceTime.Add(2*time.Second)) - vC := voteC.ToProto() - err = val.SignVote(evidenceChainID, vC) - voteC.Signature = vC.Signature - require.NoError(t, err) - ev := &types.PotentialAmnesiaEvidence{ - VoteA: voteA, - VoteB: voteB, - Timestamp: evidenceTime, - } - - polc := &types.ProofOfLockChange{ - Votes: []*types.Vote{voteB}, - PubKey: pubKey2, - } - err = pool.AddPOLC(polc) - require.NoError(t, err) - - polc, err = pool.RetrievePOLC(height, 1) - require.NoError(t, err) - require.NotEmpty(t, polc) - - secondValVote := makeVote(height, 1, 0, pubKey2.Address(), secondBlockID, evidenceTime.Add(1*time.Second)) - vv2 := secondValVote.ToProto() - err = val2.SignVote(evidenceChainID, vv2) - require.NoError(t, err) - secondValVote.Signature = vv2.Signature - - validPolc := &types.ProofOfLockChange{ - Votes: []*types.Vote{secondValVote}, - PubKey: pubKey, - } - - // CASE A - pool.logger.Info("CASE A") - // we expect the evidence pool to find the polc but log an error as the polc is not valid -> vote was - // not from a validator in this set. However, an error isn't thrown because the evidence pool - // should still be able to save the regular potential amnesia evidence. - err = pool.AddEvidence(ev) - assert.NoError(t, err) - - // evidence requires trial period until it is available -> we expect no evidence to be returned - assert.Equal(t, 0, len(pool.PendingEvidence(1))) - assert.True(t, pool.IsOnTrial(ev)) - - nextHeight := pool.nextEvidenceTrialEndedHeight - assert.Greater(t, nextHeight, int64(0)) - - // CASE B - pool.logger.Info("CASE B") - // evidence is not ready to be upgraded so we return the height we expect the evidence to be. - nextHeight = pool.upgradePotentialAmnesiaEvidence() - assert.Equal(t, height+pool.state.ConsensusParams.Evidence.ProofTrialPeriod, nextHeight) - - // CASE C - pool.logger.Info("CASE C") - // now evidence is ready to be upgraded to amnesia evidence -> we expect -1 to be the next height as their is - // no more pending potential amnesia evidence left - lastCommit := makeCommit(height+1, pubKey.Address()) - block := types.MakeBlock(height+2, []types.Tx{}, []byte("proof"), lastCommit, []types.Evidence{}) - state.LastBlockHeight = height + 2 - - pool.Update(block, state) - assert.Equal(t, int64(-1), pool.nextEvidenceTrialEndedHeight) - - assert.Equal(t, 1, len(pool.PendingEvidence(1))) - - // CASE D - pool.logger.Info("CASE D") - // evidence of voting back in the past which is instantly punishable -> amnesia evidence is made directly - ev2 := &types.PotentialAmnesiaEvidence{ - VoteA: voteC, - VoteB: voteB, - Timestamp: evidenceTime, - } - err = pool.AddEvidence(ev2) - assert.NoError(t, err) - expectedAe := &types.AmnesiaEvidence{ - PotentialAmnesiaEvidence: ev2, - Polc: types.NewEmptyPOLC(), - } - - assert.True(t, pool.IsPending(expectedAe)) - assert.Equal(t, 2, len(pool.AllPendingEvidence())) - - // CASE E - pool.logger.Info("CASE E") - // test for receiving amnesia evidence - ae := types.NewAmnesiaEvidence(ev, types.NewEmptyPOLC()) - // we need to run the trial period ourselves so amnesia evidence should not be added, instead - // we should extract out the potential amnesia evidence and trying to add that before realising - // that we already have it -> no error - err = pool.AddEvidence(ae) - assert.NoError(t, err) - assert.Equal(t, 2, len(pool.AllPendingEvidence())) - - voteD := makeVote(height, 2, 0, pubKey.Address(), firstBlockID, evidenceTime.Add(4*time.Second)) - vD := voteD.ToProto() - err = val.SignVote(evidenceChainID, vD) - require.NoError(t, err) - voteD.Signature = vD.Signature - - // CASE F - pool.logger.Info("CASE F") - // a new amnesia evidence is seen. It has an empty polc so we should extract the potential amnesia evidence - // and start our own trial - newPe := &types.PotentialAmnesiaEvidence{ - VoteA: voteB, - VoteB: voteD, - Timestamp: evidenceTime, - } - newAe := &types.AmnesiaEvidence{ - PotentialAmnesiaEvidence: newPe, - Polc: types.NewEmptyPOLC(), - } - err = pool.AddEvidence(newAe) - assert.NoError(t, err) - assert.Equal(t, 2, len(pool.AllPendingEvidence())) - assert.True(t, pool.IsOnTrial(newPe)) - - // CASE G - pool.logger.Info("CASE G") - // Finally, we receive an amnesia evidence containing a valid polc for an earlier potential amnesia evidence - // that we have already upgraded to. We should ad this new amnesia evidence in replace of the prior - // amnesia evidence with an empty polc that we have - aeWithPolc := &types.AmnesiaEvidence{ - PotentialAmnesiaEvidence: ev, - Polc: validPolc, - } - err = pool.AddEvidence(aeWithPolc) - assert.NoError(t, err) - assert.True(t, pool.IsPending(aeWithPolc)) - assert.Equal(t, 2, len(pool.AllPendingEvidence())) - t.Log(pool.AllPendingEvidence()) - -} - -======= ->>>>>>> master func initializeStateFromValidatorSet(valSet *types.ValidatorSet, height int64) StateStore { stateDB := dbm.NewMemDB() state := sm.State{ From 7078389b2eb93ae32acf818d04aaf21babdad7df Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Tue, 22 Sep 2020 16:35:08 +0200 Subject: [PATCH 18/32] regenerate mocks --- proxy/mocks/app_conn_consensus.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/proxy/mocks/app_conn_consensus.go b/proxy/mocks/app_conn_consensus.go index 636e45be89..3973d63cc0 100644 --- a/proxy/mocks/app_conn_consensus.go +++ b/proxy/mocks/app_conn_consensus.go @@ -136,6 +136,29 @@ func (_m *AppConnConsensus) InitChainSync(_a0 types.RequestInitChain) (*types.Re return r0, r1 } +// PreprocessTxsSync provides a mock function with given fields: _a0 +func (_m *AppConnConsensus) PreprocessTxsSync(_a0 types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) { + ret := _m.Called(_a0) + + var r0 *types.ResponsePreprocessTxs + if rf, ok := ret.Get(0).(func(types.RequestPreprocessTxs) *types.ResponsePreprocessTxs); ok { + r0 = rf(_a0) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*types.ResponsePreprocessTxs) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(types.RequestPreprocessTxs) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // SetResponseCallback provides a mock function with given fields: _a0 func (_m *AppConnConsensus) SetResponseCallback(_a0 abcicli.Callback) { _m.Called(_a0) From 60fa00d0ec54da748a0f4f70c8652cf74ff86f62 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Sun, 18 Oct 2020 15:10:33 +0200 Subject: [PATCH 19/32] add in needed proto changes --- abci/types/types.pb.go | 353 +++++++++++++++-------------- proto/tendermint/types/types.pb.go | 202 ++++++++--------- proto/tendermint/types/types.proto | 4 +- types/block.go | 4 +- 4 files changed, 283 insertions(+), 280 deletions(-) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index 99ff4578ab..df1a48cbbd 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -3331,180 +3331,185 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 2754 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x4b, 0x73, 0x1b, 0xc7, - 0xf1, 0xc7, 0xfb, 0xd1, 0x24, 0x1e, 0x1c, 0xd1, 0x32, 0x0c, 0xcb, 0xa4, 0xbc, 0x2e, 0xfb, 0x6f, - 0xe9, 0x6f, 0x91, 0x36, 0x55, 0x52, 0xa4, 0xd8, 0x89, 0x4d, 0x40, 0x90, 0x41, 0x91, 0x26, 0x98, - 0x25, 0x24, 0xe7, 0x65, 0xad, 0x17, 0xd8, 0x21, 0xb0, 0x16, 0xb0, 0xbb, 0xde, 0x1d, 0x50, 0x84, - 0x8e, 0x71, 0x72, 0x51, 0x2e, 0xce, 0x2d, 0x17, 0x7f, 0x8f, 0x9c, 0x72, 0xc9, 0xc5, 0x55, 0xb9, - 0xf8, 0x98, 0x93, 0x93, 0x92, 0x2a, 0x97, 0x7c, 0x81, 0x9c, 0x52, 0x49, 0xcd, 0x63, 0x5f, 0x00, - 0x16, 0x00, 0xed, 0xdc, 0x72, 0x9b, 0x99, 0xed, 0xee, 0xc5, 0xf4, 0x4e, 0xff, 0xfa, 0xd7, 0x3d, - 0x80, 0x97, 0x09, 0x36, 0x34, 0x6c, 0x0f, 0x75, 0x83, 0x6c, 0xab, 0x9d, 0xae, 0xbe, 0x4d, 0xc6, - 0x16, 0x76, 0xb6, 0x2c, 0xdb, 0x24, 0x26, 0x2a, 0xf9, 0x0f, 0xb7, 0xe8, 0xc3, 0xea, 0x2b, 0x01, - 0xe9, 0xae, 0x3d, 0xb6, 0x88, 0xb9, 0x6d, 0xd9, 0xa6, 0x79, 0xc2, 0xe5, 0xab, 0x97, 0x02, 0x8f, - 0x99, 0x9d, 0xa0, 0xb5, 0xd0, 0x53, 0xa1, 0xfc, 0x08, 0x8f, 0xdd, 0xa7, 0xaf, 0x4c, 0xe9, 0x5a, - 0xaa, 0xad, 0x0e, 0xdd, 0xc7, 0x9b, 0x3d, 0xd3, 0xec, 0x0d, 0xf0, 0x36, 0x9b, 0x75, 0x46, 0x27, - 0xdb, 0x44, 0x1f, 0x62, 0x87, 0xa8, 0x43, 0x4b, 0x08, 0xac, 0xf7, 0xcc, 0x9e, 0xc9, 0x86, 0xdb, - 0x74, 0xc4, 0x57, 0xa5, 0xdf, 0xe5, 0x20, 0x2b, 0xe3, 0xcf, 0x47, 0xd8, 0x21, 0x68, 0x07, 0x52, - 0xb8, 0xdb, 0x37, 0x2b, 0xf1, 0xcb, 0xf1, 0x37, 0x57, 0x76, 0x2e, 0x6d, 0x4d, 0x6c, 0x6e, 0x4b, - 0xc8, 0x35, 0xba, 0x7d, 0xb3, 0x19, 0x93, 0x99, 0x2c, 0xba, 0x01, 0xe9, 0x93, 0xc1, 0xc8, 0xe9, - 0x57, 0x12, 0x4c, 0xe9, 0x95, 0x28, 0xa5, 0xbb, 0x54, 0xa8, 0x19, 0x93, 0xb9, 0x34, 0x7d, 0x95, - 0x6e, 0x9c, 0x98, 0x95, 0xe4, 0xfc, 0x57, 0xed, 0x19, 0x27, 0xec, 0x55, 0x54, 0x16, 0xd5, 0x00, - 0x1c, 0x4c, 0x14, 0xd3, 0x22, 0xba, 0x69, 0x54, 0x52, 0x4c, 0xf3, 0xd5, 0x28, 0xcd, 0x63, 0x4c, - 0x5a, 0x4c, 0xb0, 0x19, 0x93, 0xf3, 0x8e, 0x3b, 0xa1, 0x36, 0x74, 0x43, 0x27, 0x4a, 0xb7, 0xaf, - 0xea, 0x46, 0x25, 0x3d, 0xdf, 0xc6, 0x9e, 0xa1, 0x93, 0x3a, 0x15, 0xa4, 0x36, 0x74, 0x77, 0x42, - 0xb7, 0xfc, 0xf9, 0x08, 0xdb, 0xe3, 0x4a, 0x66, 0xfe, 0x96, 0x7f, 0x42, 0x85, 0xe8, 0x96, 0x99, - 0x34, 0x6a, 0xc0, 0x4a, 0x07, 0xf7, 0x74, 0x43, 0xe9, 0x0c, 0xcc, 0xee, 0xa3, 0x4a, 0x96, 0x29, - 0x4b, 0x51, 0xca, 0x35, 0x2a, 0x5a, 0xa3, 0x92, 0xcd, 0x98, 0x0c, 0x1d, 0x6f, 0x86, 0xde, 0x83, - 0x5c, 0xb7, 0x8f, 0xbb, 0x8f, 0x14, 0x72, 0x56, 0xc9, 0x31, 0x1b, 0x9b, 0x51, 0x36, 0xea, 0x54, - 0xae, 0x7d, 0xd6, 0x8c, 0xc9, 0xd9, 0x2e, 0x1f, 0xd2, 0xfd, 0x6b, 0x78, 0xa0, 0x9f, 0x62, 0x9b, - 0xea, 0xe7, 0xe7, 0xef, 0xff, 0x0e, 0x97, 0x64, 0x16, 0xf2, 0x9a, 0x3b, 0x41, 0xef, 0x43, 0x1e, - 0x1b, 0x9a, 0xd8, 0x06, 0x30, 0x13, 0x97, 0x23, 0xcf, 0x8a, 0xa1, 0xb9, 0x9b, 0xc8, 0x61, 0x31, - 0x46, 0xb7, 0x20, 0xd3, 0x35, 0x87, 0x43, 0x9d, 0x54, 0x56, 0x98, 0xf6, 0x46, 0xe4, 0x06, 0x98, - 0x54, 0x33, 0x26, 0x0b, 0x79, 0x74, 0x08, 0xc5, 0x81, 0xee, 0x10, 0xc5, 0x31, 0x54, 0xcb, 0xe9, - 0x9b, 0xc4, 0xa9, 0xac, 0x32, 0x0b, 0xaf, 0x47, 0x59, 0x38, 0xd0, 0x1d, 0x72, 0xec, 0x0a, 0x37, - 0x63, 0x72, 0x61, 0x10, 0x5c, 0xa0, 0xf6, 0xcc, 0x93, 0x13, 0x6c, 0x7b, 0x06, 0x2b, 0x85, 0xf9, - 0xf6, 0x5a, 0x54, 0xda, 0xd5, 0xa7, 0xf6, 0xcc, 0xe0, 0x02, 0xfa, 0x05, 0x5c, 0x18, 0x98, 0xaa, - 0xe6, 0x99, 0x53, 0xba, 0xfd, 0x91, 0xf1, 0xa8, 0x52, 0x64, 0x46, 0xaf, 0x44, 0xfe, 0x48, 0x53, - 0xd5, 0x5c, 0x13, 0x75, 0xaa, 0xd0, 0x8c, 0xc9, 0x6b, 0x83, 0xc9, 0x45, 0xf4, 0x10, 0xd6, 0x55, - 0xcb, 0x1a, 0x8c, 0x27, 0xad, 0x97, 0x98, 0xf5, 0xab, 0x51, 0xd6, 0x77, 0xa9, 0xce, 0xa4, 0x79, - 0xa4, 0x4e, 0xad, 0xd6, 0xb2, 0x90, 0x3e, 0x55, 0x07, 0x23, 0x2c, 0xfd, 0x1f, 0xac, 0x04, 0x42, - 0x1d, 0x55, 0x20, 0x3b, 0xc4, 0x8e, 0xa3, 0xf6, 0x30, 0x43, 0x86, 0xbc, 0xec, 0x4e, 0xa5, 0x22, - 0xac, 0x06, 0xc3, 0x5b, 0x1a, 0x7a, 0x8a, 0x34, 0x70, 0xa9, 0xe2, 0x29, 0xb6, 0x1d, 0x1a, 0xad, - 0x42, 0x51, 0x4c, 0xd1, 0x6b, 0x50, 0x60, 0xc7, 0x47, 0x71, 0x9f, 0x53, 0xf4, 0x48, 0xc9, 0xab, - 0x6c, 0xf1, 0x81, 0x10, 0xda, 0x84, 0x15, 0x6b, 0xc7, 0xf2, 0x44, 0x92, 0x4c, 0x04, 0xac, 0x1d, - 0x4b, 0x08, 0x48, 0x3f, 0x84, 0xf2, 0x64, 0xb4, 0xa3, 0x32, 0x24, 0x1f, 0xe1, 0xb1, 0x78, 0x1f, - 0x1d, 0xa2, 0x75, 0xb1, 0x2d, 0xf6, 0x8e, 0xbc, 0x2c, 0xf6, 0xf8, 0xe7, 0x84, 0xa7, 0xec, 0x85, - 0x39, 0xba, 0x05, 0x29, 0x8a, 0x9a, 0x02, 0x00, 0xab, 0x5b, 0x1c, 0x52, 0xb7, 0x5c, 0x48, 0xdd, - 0x6a, 0xbb, 0x90, 0x5a, 0xcb, 0x7d, 0xfd, 0xed, 0x66, 0xec, 0xcb, 0xbf, 0x6e, 0xc6, 0x65, 0xa6, - 0x81, 0x5e, 0xa2, 0x51, 0xa9, 0xea, 0x86, 0xa2, 0x6b, 0xe2, 0x3d, 0x59, 0x36, 0xdf, 0xd3, 0xd0, - 0x3e, 0x94, 0xbb, 0xa6, 0xe1, 0x60, 0xc3, 0x19, 0x39, 0x0a, 0x87, 0x6c, 0x01, 0x7b, 0xd3, 0x51, - 0x53, 0x77, 0x05, 0x8f, 0x98, 0x9c, 0x5c, 0xea, 0x86, 0x17, 0xd0, 0x5d, 0x80, 0x53, 0x75, 0xa0, - 0x6b, 0x2a, 0x31, 0x6d, 0xa7, 0x92, 0xba, 0x9c, 0x9c, 0x69, 0xe6, 0x81, 0x2b, 0x72, 0xdf, 0xd2, - 0x54, 0x82, 0x6b, 0x29, 0xfa, 0x6b, 0xe5, 0x80, 0x26, 0x7a, 0x03, 0x4a, 0xaa, 0x65, 0x29, 0x0e, - 0x51, 0x09, 0x56, 0x3a, 0x63, 0x82, 0x1d, 0x06, 0x86, 0xab, 0x72, 0x41, 0xb5, 0xac, 0x63, 0xba, - 0x5a, 0xa3, 0x8b, 0xe8, 0x75, 0x28, 0x52, 0xe0, 0xd3, 0xd5, 0x81, 0xd2, 0xc7, 0x7a, 0xaf, 0x4f, - 0x18, 0xe8, 0x25, 0xe5, 0x82, 0x58, 0x6d, 0xb2, 0x45, 0x49, 0xf3, 0x0e, 0x02, 0x03, 0x3d, 0x84, - 0x20, 0xa5, 0xa9, 0x44, 0x65, 0x8e, 0x5c, 0x95, 0xd9, 0x98, 0xae, 0x59, 0x2a, 0xe9, 0x0b, 0xf7, - 0xb0, 0x31, 0xba, 0x08, 0x19, 0x61, 0x36, 0xc9, 0xcc, 0x8a, 0x19, 0xfd, 0x66, 0x96, 0x6d, 0x9e, - 0x62, 0x86, 0xf2, 0x39, 0x99, 0x4f, 0xa4, 0x5f, 0x27, 0x60, 0x6d, 0x0a, 0x1e, 0xa9, 0xdd, 0xbe, - 0xea, 0xf4, 0xdd, 0x77, 0xd1, 0x31, 0xba, 0x49, 0xed, 0xaa, 0x1a, 0xb6, 0x45, 0x5a, 0xaa, 0x04, - 0x5d, 0xc4, 0x53, 0x6e, 0x93, 0x3d, 0x17, 0xae, 0x11, 0xd2, 0xa8, 0x05, 0xe5, 0x81, 0xea, 0x10, - 0x85, 0xc3, 0x8d, 0x12, 0x48, 0x51, 0xd3, 0x20, 0x7b, 0xa0, 0xba, 0x00, 0x45, 0x0f, 0xbb, 0x30, - 0x54, 0x1c, 0x84, 0x56, 0x91, 0x0c, 0xeb, 0x9d, 0xf1, 0x13, 0xd5, 0x20, 0xba, 0x81, 0x95, 0xa9, - 0x2f, 0xf7, 0xd2, 0x94, 0xd1, 0xc6, 0xa9, 0xae, 0x61, 0xa3, 0xeb, 0x7e, 0xb2, 0x0b, 0x9e, 0xb2, - 0xf7, 0x49, 0x1d, 0x49, 0x86, 0x62, 0x18, 0xe0, 0x51, 0x11, 0x12, 0xe4, 0x4c, 0x38, 0x20, 0x41, - 0xce, 0xd0, 0xdb, 0x90, 0xa2, 0x9b, 0x64, 0x9b, 0x2f, 0xce, 0xc8, 0xae, 0x42, 0xaf, 0x3d, 0xb6, - 0xb0, 0xcc, 0x24, 0x25, 0xc9, 0x8b, 0x06, 0x0f, 0xf4, 0x27, 0xad, 0x4a, 0x57, 0xa0, 0x34, 0x81, - 0xea, 0x81, 0xef, 0x17, 0x0f, 0x7e, 0x3f, 0xa9, 0x04, 0x85, 0x10, 0x84, 0x4b, 0x17, 0x61, 0x7d, - 0x16, 0x22, 0x4b, 0x7d, 0x6f, 0x3d, 0x84, 0xac, 0xe8, 0x06, 0xe4, 0x3c, 0x48, 0xe6, 0xd1, 0x38, - 0xed, 0x2b, 0x57, 0x58, 0xf6, 0x44, 0x69, 0x18, 0xd2, 0x63, 0xcd, 0xce, 0x43, 0x82, 0xfd, 0xf0, - 0xac, 0x6a, 0x59, 0x4d, 0xd5, 0xe9, 0x4b, 0x9f, 0x42, 0x25, 0x0a, 0x6e, 0x27, 0xb6, 0x91, 0xf2, - 0x8e, 0xe1, 0x45, 0xc8, 0x9c, 0x98, 0xf6, 0x50, 0x25, 0xcc, 0x58, 0x41, 0x16, 0x33, 0x7a, 0x3c, - 0x39, 0xf4, 0x26, 0xd9, 0x32, 0x9f, 0x48, 0x0a, 0xbc, 0x14, 0x09, 0xb9, 0x54, 0x45, 0x37, 0x34, - 0xcc, 0xfd, 0x59, 0x90, 0xf9, 0xc4, 0x37, 0xc4, 0x7f, 0x2c, 0x9f, 0xd0, 0xd7, 0x3a, 0x6c, 0xaf, - 0xcc, 0x7e, 0x5e, 0x16, 0x33, 0xe9, 0xef, 0x39, 0xc8, 0xc9, 0xd8, 0xb1, 0x28, 0x26, 0xa0, 0x1a, - 0xe4, 0xf1, 0x59, 0x17, 0x73, 0x32, 0x14, 0x8f, 0x24, 0x13, 0x5c, 0xba, 0xe1, 0x4a, 0xd2, 0x4c, - 0xee, 0xa9, 0xa1, 0xeb, 0x82, 0xf0, 0x45, 0x73, 0x37, 0xa1, 0x1e, 0x64, 0x7c, 0x37, 0x5d, 0xc6, - 0x97, 0x8c, 0x4c, 0xde, 0x5c, 0x6b, 0x82, 0xf2, 0x5d, 0x17, 0x94, 0x2f, 0xb5, 0xe0, 0x65, 0x21, - 0xce, 0x57, 0x0f, 0x71, 0xbe, 0xf4, 0x82, 0x6d, 0x46, 0x90, 0xbe, 0x7a, 0x88, 0xf4, 0x65, 0x16, - 0x18, 0x89, 0x60, 0x7d, 0x37, 0x5d, 0xd6, 0x97, 0x5d, 0xb0, 0xed, 0x09, 0xda, 0x77, 0x37, 0x4c, - 0xfb, 0x38, 0x65, 0x7b, 0x2d, 0x52, 0x3b, 0x92, 0xf7, 0xfd, 0x28, 0xc0, 0xfb, 0xf2, 0x91, 0xa4, - 0x8b, 0x1b, 0x99, 0x41, 0xfc, 0xea, 0x21, 0xe2, 0x07, 0x0b, 0x7c, 0x10, 0xc1, 0xfc, 0x3e, 0x08, - 0x32, 0xbf, 0x95, 0x48, 0xf2, 0x28, 0x0e, 0xcd, 0x2c, 0xea, 0x77, 0xdb, 0xa3, 0x7e, 0xab, 0x91, - 0xdc, 0x55, 0xec, 0x61, 0x92, 0xfb, 0xb5, 0xa6, 0xb8, 0x1f, 0xe7, 0x6a, 0x6f, 0x44, 0x9a, 0x58, - 0x40, 0xfe, 0x5a, 0x53, 0xe4, 0xaf, 0xb8, 0xc0, 0xe0, 0x02, 0xf6, 0xf7, 0xcb, 0xd9, 0xec, 0x2f, - 0x9a, 0x9f, 0x89, 0x9f, 0xb9, 0x1c, 0xfd, 0x53, 0x22, 0xe8, 0x5f, 0x99, 0x99, 0xff, 0xff, 0x48, - 0xf3, 0xe7, 0xe7, 0x7f, 0x57, 0x68, 0x9a, 0x9d, 0x00, 0x0e, 0x0a, 0x55, 0xd8, 0xb6, 0x4d, 0x5b, - 0x50, 0x2b, 0x3e, 0x91, 0xde, 0xa4, 0x89, 0xdf, 0x07, 0x89, 0x39, 0x5c, 0x91, 0xa5, 0x84, 0x00, - 0x30, 0x48, 0x7f, 0x88, 0xfb, 0xba, 0x2c, 0x57, 0x06, 0x49, 0x43, 0x5e, 0x90, 0x86, 0x00, 0x85, - 0x4c, 0x84, 0x29, 0xe4, 0x26, 0xac, 0x50, 0xa8, 0x9f, 0x60, 0x87, 0xaa, 0xe5, 0xb2, 0x43, 0x74, - 0x15, 0xd6, 0x58, 0x2e, 0xe7, 0x44, 0x53, 0xe0, 0x7b, 0x8a, 0xa5, 0xa9, 0x12, 0x7d, 0xc0, 0x0f, - 0x27, 0x07, 0xfa, 0x6b, 0x70, 0x21, 0x20, 0xeb, 0xa5, 0x10, 0x4e, 0x89, 0xca, 0x9e, 0xf4, 0xae, - 0xc8, 0x25, 0x1f, 0xf9, 0x0e, 0xf2, 0x99, 0x27, 0x82, 0x54, 0xd7, 0xd4, 0xb0, 0x00, 0x78, 0x36, - 0xa6, 0x6c, 0x74, 0x60, 0xf6, 0x04, 0x8c, 0xd3, 0x21, 0x95, 0xf2, 0x50, 0x30, 0xcf, 0x41, 0x4e, - 0xfa, 0x53, 0xdc, 0xb7, 0xe7, 0x93, 0xd1, 0x59, 0xbc, 0x31, 0xfe, 0xdf, 0xe1, 0x8d, 0x89, 0xef, - 0xcc, 0x1b, 0x83, 0x09, 0x36, 0x19, 0x4e, 0xb0, 0xff, 0x8c, 0xfb, 0x5f, 0xd8, 0x63, 0x81, 0xdf, - 0xcd, 0x23, 0x7e, 0xb6, 0x4c, 0xb3, 0xef, 0x25, 0xb2, 0xa5, 0xe0, 0xf6, 0x19, 0xf6, 0xde, 0x30, - 0xb7, 0xcf, 0xf2, 0xfc, 0xc9, 0x26, 0xe8, 0x16, 0xe4, 0x59, 0xd3, 0x45, 0x31, 0x2d, 0x47, 0x00, - 0xee, 0xcb, 0xc1, 0xbd, 0xf2, 0xde, 0xca, 0xd6, 0x11, 0x95, 0x69, 0x59, 0x8e, 0x9c, 0xb3, 0xc4, - 0x28, 0x40, 0x04, 0xf2, 0x21, 0x3e, 0x7a, 0x09, 0xf2, 0xf4, 0xd7, 0x3b, 0x96, 0xda, 0xc5, 0x0c, - 0x3c, 0xf3, 0xb2, 0xbf, 0x20, 0x3d, 0x04, 0x34, 0x0d, 0xdf, 0xa8, 0x09, 0x19, 0x7c, 0x8a, 0x0d, - 0x42, 0xbf, 0x1a, 0x75, 0xf7, 0xc5, 0x19, 0x64, 0x0f, 0x1b, 0xa4, 0x56, 0xa1, 0x4e, 0xfe, 0xc7, - 0xb7, 0x9b, 0x65, 0x2e, 0xfd, 0x96, 0x39, 0xd4, 0x09, 0x1e, 0x5a, 0x64, 0x2c, 0x0b, 0x7d, 0xe9, - 0x8b, 0x04, 0x65, 0x5e, 0x21, 0x68, 0x9f, 0xe9, 0x5b, 0x37, 0x80, 0x12, 0x01, 0xd6, 0xbd, 0x9c, - 0xbf, 0x37, 0x00, 0x7a, 0xaa, 0xa3, 0x3c, 0x56, 0x0d, 0x82, 0x35, 0xe1, 0xf4, 0xc0, 0x0a, 0xaa, - 0x42, 0x8e, 0xce, 0x46, 0x0e, 0xd6, 0x44, 0x01, 0xe0, 0xcd, 0x03, 0xfb, 0xcc, 0x7e, 0xbf, 0x7d, - 0x86, 0xbd, 0x9c, 0x9b, 0xf4, 0xf2, 0x6f, 0x12, 0x7e, 0x94, 0xf8, 0x24, 0xf5, 0x7f, 0xcf, 0x0f, - 0xbf, 0x65, 0x95, 0x6b, 0x38, 0xc7, 0xa2, 0x63, 0x58, 0xf3, 0xa2, 0x54, 0x19, 0xb1, 0xe8, 0x75, - 0xcf, 0xdd, 0xb2, 0x61, 0x5e, 0x3e, 0x0d, 0x2f, 0x3b, 0xe8, 0xa7, 0xf0, 0xe2, 0x04, 0x02, 0x79, - 0xa6, 0x13, 0x4b, 0x02, 0xd1, 0x0b, 0x61, 0x20, 0x72, 0x2d, 0xfb, 0xbe, 0x4a, 0x7e, 0xcf, 0xd8, - 0xd8, 0xa3, 0xc5, 0x50, 0x90, 0x31, 0xcc, 0xfc, 0xfa, 0xaf, 0x41, 0xc1, 0xc6, 0x84, 0xd6, 0xe7, - 0xa1, 0x72, 0x73, 0x95, 0x2f, 0x8a, 0x22, 0xf6, 0x08, 0x5e, 0x98, 0xc9, 0x1c, 0xd0, 0x0f, 0x20, - 0xef, 0x93, 0x8e, 0x78, 0x44, 0xe5, 0xe6, 0x55, 0x23, 0xbe, 0xac, 0xf4, 0xc7, 0xb8, 0x6f, 0x32, - 0x5c, 0xdf, 0x34, 0x20, 0x63, 0x63, 0x67, 0x34, 0xe0, 0x15, 0x47, 0x71, 0xe7, 0xda, 0x72, 0x9c, - 0x83, 0xae, 0x8e, 0x06, 0x44, 0x16, 0xca, 0xd2, 0x43, 0xc8, 0xf0, 0x15, 0xb4, 0x02, 0xd9, 0xfb, - 0x87, 0xfb, 0x87, 0xad, 0x8f, 0x0f, 0xcb, 0x31, 0x04, 0x90, 0xd9, 0xad, 0xd7, 0x1b, 0x47, 0xed, - 0x72, 0x1c, 0xe5, 0x21, 0xbd, 0x5b, 0x6b, 0xc9, 0xed, 0x72, 0x82, 0x2e, 0xcb, 0x8d, 0x7b, 0x8d, - 0x7a, 0xbb, 0x9c, 0x44, 0x6b, 0x50, 0xe0, 0x63, 0xe5, 0x6e, 0x4b, 0xfe, 0x68, 0xb7, 0x5d, 0x4e, - 0x05, 0x96, 0x8e, 0x1b, 0x87, 0x77, 0x1a, 0x72, 0x39, 0x2d, 0xbd, 0x43, 0x4b, 0x9a, 0x08, 0x96, - 0xe2, 0x17, 0x2f, 0xf1, 0x40, 0xf1, 0x22, 0xfd, 0x3e, 0x01, 0xd5, 0x68, 0xea, 0x81, 0xee, 0x4d, - 0x6c, 0x7c, 0xe7, 0x1c, 0xbc, 0x65, 0x62, 0xf7, 0xe8, 0x75, 0x28, 0xda, 0xf8, 0x04, 0x93, 0x6e, - 0x9f, 0x53, 0x21, 0x9e, 0xd8, 0x0a, 0x72, 0x41, 0xac, 0x32, 0x25, 0x87, 0x8b, 0x7d, 0x86, 0xbb, - 0x44, 0xe1, 0x75, 0x14, 0x3f, 0x74, 0x79, 0x2a, 0x46, 0x57, 0x8f, 0xf9, 0xa2, 0xf4, 0xe9, 0xb9, - 0x7c, 0x99, 0x87, 0xb4, 0xdc, 0x68, 0xcb, 0x3f, 0x2b, 0x27, 0x11, 0x82, 0x22, 0x1b, 0x2a, 0xc7, - 0x87, 0xbb, 0x47, 0xc7, 0xcd, 0x16, 0xf5, 0xe5, 0x05, 0x28, 0xb9, 0xbe, 0x74, 0x17, 0xd3, 0xd2, - 0xbf, 0xe3, 0x50, 0x9a, 0x08, 0x10, 0xb4, 0x03, 0x69, 0x4e, 0xa7, 0xa3, 0x9a, 0xee, 0x2c, 0xbe, - 0x45, 0x34, 0x71, 0x51, 0xf4, 0x1e, 0xe4, 0xb0, 0xe8, 0x13, 0xcc, 0x0a, 0x44, 0xde, 0xdf, 0x70, - 0x3b, 0x09, 0x42, 0xd5, 0xd3, 0x40, 0xef, 0x43, 0xde, 0x8b, 0x74, 0x51, 0xc3, 0xbd, 0x3a, 0xad, - 0xee, 0x61, 0x84, 0xd0, 0xf7, 0x75, 0xd0, 0x6d, 0x9f, 0x93, 0xa5, 0xa6, 0x49, 0xbc, 0x50, 0xe7, - 0x02, 0x42, 0xd9, 0x95, 0x97, 0xea, 0xb0, 0x12, 0xd8, 0x0f, 0x7a, 0x19, 0xf2, 0x43, 0xf5, 0x4c, - 0xf4, 0x9f, 0x78, 0x07, 0x21, 0x37, 0x54, 0xcf, 0x78, 0xeb, 0xe9, 0x45, 0xc8, 0xd2, 0x87, 0x3d, - 0x95, 0xa3, 0x4d, 0x52, 0xce, 0x0c, 0xd5, 0xb3, 0x0f, 0x55, 0x47, 0xfa, 0x04, 0x8a, 0xe1, 0xde, - 0x0b, 0x3d, 0x89, 0xb6, 0x39, 0x32, 0x34, 0x66, 0x23, 0x2d, 0xf3, 0x09, 0xba, 0x01, 0xe9, 0x53, - 0x93, 0x83, 0xd5, 0xec, 0x90, 0x7d, 0x60, 0x12, 0x1c, 0xe8, 0xdd, 0x70, 0x69, 0xe9, 0x09, 0xa4, - 0x19, 0xf8, 0x50, 0x20, 0x61, 0x5d, 0x14, 0xc1, 0x47, 0xe9, 0x18, 0x7d, 0x02, 0xa0, 0x12, 0x62, - 0xeb, 0x9d, 0x91, 0x6f, 0x78, 0x73, 0x36, 0x78, 0xed, 0xba, 0x72, 0xb5, 0x4b, 0x02, 0xc5, 0xd6, - 0x7d, 0xd5, 0x00, 0x92, 0x05, 0x0c, 0x4a, 0x87, 0x50, 0x0c, 0xeb, 0x06, 0xfb, 0x99, 0xab, 0x33, - 0xfa, 0x99, 0x1e, 0xe7, 0xf1, 0x18, 0x53, 0x92, 0x77, 0xcc, 0xd8, 0x44, 0x7a, 0x1a, 0x87, 0x5c, - 0xfb, 0x4c, 0x1c, 0xeb, 0x88, 0x66, 0x8d, 0xaf, 0x9a, 0x08, 0xb6, 0x26, 0x78, 0xf7, 0x27, 0xe9, - 0xf5, 0x94, 0x3e, 0xf0, 0x02, 0x37, 0xb5, 0x6c, 0xf1, 0xe8, 0x36, 0xd7, 0x04, 0x58, 0xbd, 0x0b, - 0x79, 0xef, 0x54, 0x51, 0x62, 0xaf, 0x6a, 0x9a, 0x8d, 0x1d, 0x47, 0xec, 0xcd, 0x9d, 0xb2, 0xde, - 0x9f, 0xf9, 0x58, 0x34, 0x3f, 0x92, 0x32, 0x9f, 0x48, 0x1a, 0x94, 0x26, 0xd2, 0x16, 0x7a, 0x17, - 0xb2, 0xd6, 0xa8, 0xa3, 0xb8, 0xee, 0x99, 0x08, 0x1e, 0x97, 0xe4, 0x8d, 0x3a, 0x03, 0xbd, 0xbb, - 0x8f, 0xc7, 0xee, 0x8f, 0xb1, 0x46, 0x9d, 0x7d, 0xee, 0x45, 0xfe, 0x96, 0x44, 0xf0, 0x2d, 0xa7, - 0x90, 0x73, 0x0f, 0x05, 0xfa, 0x71, 0x30, 0x4e, 0xdc, 0x8e, 0x70, 0x64, 0x2a, 0x15, 0xe6, 0x03, - 0x61, 0x72, 0x15, 0xd6, 0x1c, 0xbd, 0x67, 0x60, 0x4d, 0xf1, 0x4b, 0x0b, 0xf6, 0xb6, 0x9c, 0x5c, - 0xe2, 0x0f, 0x0e, 0xdc, 0xba, 0x42, 0xfa, 0x57, 0x1c, 0x72, 0x6e, 0xc0, 0xa2, 0x77, 0x02, 0xe7, - 0xae, 0x38, 0xa3, 0x51, 0xe2, 0x0a, 0xfa, 0xed, 0xbb, 0xf0, 0x6f, 0x4d, 0x9c, 0xff, 0xb7, 0x46, - 0xf5, 0x61, 0xdd, 0x86, 0x78, 0xea, 0xdc, 0x0d, 0xf1, 0xb7, 0x00, 0x11, 0x93, 0xa8, 0x03, 0xe5, - 0xd4, 0x24, 0xba, 0xd1, 0x53, 0xb8, 0xb3, 0x39, 0xa3, 0x2a, 0xb3, 0x27, 0x0f, 0xd8, 0x83, 0x23, - 0xe6, 0xf7, 0x5f, 0xc5, 0x21, 0xe7, 0xe5, 0xc6, 0xf3, 0x76, 0xe3, 0x2e, 0x42, 0x46, 0xc0, 0x3f, - 0x6f, 0xc7, 0x89, 0x99, 0xd7, 0x18, 0x4e, 0x05, 0x1a, 0xc3, 0x55, 0xc8, 0x0d, 0x31, 0x51, 0x19, - 0x41, 0xe0, 0xd5, 0x9d, 0x37, 0xbf, 0x7a, 0x1b, 0x56, 0x02, 0x8d, 0x51, 0x1a, 0x79, 0x87, 0x8d, - 0x8f, 0xcb, 0xb1, 0x6a, 0xf6, 0xe9, 0x57, 0x97, 0x93, 0x87, 0xf8, 0x31, 0x3d, 0xb3, 0x72, 0xa3, - 0xde, 0x6c, 0xd4, 0xf7, 0xcb, 0xf1, 0xea, 0xca, 0xd3, 0xaf, 0x2e, 0x67, 0x65, 0xcc, 0xfa, 0x2b, - 0x57, 0x9b, 0xb0, 0x1a, 0xfc, 0x2a, 0xe1, 0x0c, 0x82, 0xa0, 0x78, 0xe7, 0xfe, 0xd1, 0xc1, 0x5e, - 0x7d, 0xb7, 0xdd, 0x50, 0x1e, 0xb4, 0xda, 0x8d, 0x72, 0x1c, 0xbd, 0x08, 0x17, 0x0e, 0xf6, 0x3e, - 0x6c, 0xb6, 0x95, 0xfa, 0xc1, 0x5e, 0xe3, 0xb0, 0xad, 0xec, 0xb6, 0xdb, 0xbb, 0xf5, 0xfd, 0x72, - 0x62, 0xe7, 0x0b, 0x80, 0xd2, 0x6e, 0xad, 0xbe, 0x47, 0xb3, 0x9f, 0xde, 0x55, 0x45, 0xff, 0x2a, - 0xc5, 0x8a, 0xeb, 0xb9, 0x37, 0xb2, 0xd5, 0xf9, 0xed, 0x3b, 0x74, 0x17, 0xd2, 0xac, 0xee, 0x46, - 0xf3, 0xaf, 0x68, 0xab, 0x0b, 0xfa, 0x79, 0xf4, 0xc7, 0xb0, 0xf0, 0x98, 0x7b, 0x67, 0x5b, 0x9d, - 0xdf, 0xde, 0x43, 0x32, 0xe4, 0xfd, 0xc2, 0x79, 0xf1, 0x1d, 0x6e, 0x75, 0x89, 0x96, 0x1f, 0xb5, - 0xe9, 0x97, 0x05, 0x8b, 0xef, 0x34, 0xab, 0x4b, 0x00, 0x18, 0x3a, 0x80, 0xac, 0x5b, 0x70, 0x2d, - 0xba, 0x65, 0xad, 0x2e, 0x6c, 0xc7, 0xd1, 0x4f, 0xc0, 0x0b, 0xe3, 0xf9, 0x57, 0xc6, 0xd5, 0x05, - 0xbd, 0x45, 0xb4, 0x07, 0x19, 0xc1, 0x75, 0x17, 0xdc, 0x9c, 0x56, 0x17, 0xb5, 0xd7, 0xa8, 0xd3, - 0xfc, 0x8e, 0xc3, 0xe2, 0x8b, 0xf0, 0xea, 0x12, 0x6d, 0x53, 0x74, 0x1f, 0x20, 0x50, 0x06, 0x2f, - 0x71, 0xc3, 0x5d, 0x5d, 0xa6, 0x1d, 0x8a, 0x5a, 0x90, 0xf3, 0xca, 0x9d, 0x85, 0xf7, 0xcd, 0xd5, - 0xc5, 0x7d, 0x49, 0xf4, 0x10, 0x0a, 0x61, 0x9e, 0xbf, 0xdc, 0x2d, 0x72, 0x75, 0xc9, 0x86, 0x23, - 0xb5, 0x1f, 0x26, 0xfd, 0xcb, 0xdd, 0x2a, 0x57, 0x97, 0xec, 0x3f, 0xa2, 0xcf, 0x60, 0x6d, 0x9a, - 0x94, 0x2f, 0x7f, 0xc9, 0x5c, 0x3d, 0x47, 0x47, 0x12, 0x0d, 0x01, 0xcd, 0x20, 0xf3, 0xe7, 0xb8, - 0x73, 0xae, 0x9e, 0xa7, 0x41, 0x59, 0xbb, 0xf7, 0xf5, 0xb3, 0x8d, 0xf8, 0x37, 0xcf, 0x36, 0xe2, - 0x7f, 0x7b, 0xb6, 0x11, 0xff, 0xf2, 0xf9, 0x46, 0xec, 0x9b, 0xe7, 0x1b, 0xb1, 0xbf, 0x3c, 0xdf, - 0x88, 0xfd, 0xfc, 0xed, 0x9e, 0x4e, 0xfa, 0xa3, 0xce, 0x56, 0xd7, 0x1c, 0x6e, 0x0f, 0xd4, 0x27, - 0xe3, 0x01, 0xd6, 0x7a, 0xd8, 0x0e, 0x0c, 0xaf, 0x75, 0x4d, 0x1b, 0x07, 0xfe, 0xa9, 0xd3, 0xc9, - 0xb0, 0x6c, 0x75, 0xfd, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x57, 0xe6, 0x18, 0xbc, 0xc9, 0x23, - 0x00, 0x00, + // 2844 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcd, 0x77, 0x23, 0xc5, + 0x11, 0xd7, 0xf7, 0x47, 0xd9, 0x92, 0xe5, 0xde, 0x65, 0x11, 0x62, 0xb1, 0x97, 0xe1, 0x41, 0x96, + 0x0d, 0xd8, 0x60, 0x1e, 0x04, 0x02, 0x09, 0x58, 0x5a, 0x2d, 0x32, 0x6b, 0x2c, 0x67, 0xac, 0x35, + 0xf9, 0x62, 0x87, 0x96, 0xa6, 0x2d, 0x0d, 0x2b, 0xcd, 0x0c, 0x33, 0x2d, 0x63, 0x71, 0x4c, 0x5e, + 0x2e, 0xe4, 0xc2, 0x31, 0x17, 0x0e, 0xf9, 0x27, 0xf2, 0x72, 0xca, 0x25, 0x17, 0xde, 0xcb, 0x85, + 0x63, 0x4e, 0x24, 0xd9, 0xbd, 0xe5, 0x1f, 0xc8, 0x29, 0x2f, 0x79, 0xfd, 0x31, 0x5f, 0x92, 0x46, + 0x92, 0x21, 0xb7, 0xdc, 0xba, 0x6b, 0xaa, 0x6a, 0xd4, 0x35, 0xdd, 0xbf, 0xfa, 0x55, 0xb5, 0xe0, + 0x49, 0x4a, 0x4c, 0x9d, 0x38, 0x23, 0xc3, 0xa4, 0xbb, 0xb8, 0xdb, 0x33, 0x76, 0xe9, 0xc4, 0x26, + 0xee, 0x8e, 0xed, 0x58, 0xd4, 0x42, 0x1b, 0xc1, 0xc3, 0x1d, 0xf6, 0xb0, 0xf6, 0x54, 0x48, 0xbb, + 0xe7, 0x4c, 0x6c, 0x6a, 0xed, 0xda, 0x8e, 0x65, 0x9d, 0x09, 0xfd, 0xda, 0xf5, 0xd0, 0x63, 0xee, + 0x27, 0xec, 0x2d, 0xf2, 0x54, 0x1a, 0x3f, 0x20, 0x13, 0xef, 0xe9, 0x53, 0x33, 0xb6, 0x36, 0x76, + 0xf0, 0xc8, 0x7b, 0xbc, 0xdd, 0xb7, 0xac, 0xfe, 0x90, 0xec, 0xf2, 0x59, 0x77, 0x7c, 0xb6, 0x4b, + 0x8d, 0x11, 0x71, 0x29, 0x1e, 0xd9, 0x52, 0xe1, 0x6a, 0xdf, 0xea, 0x5b, 0x7c, 0xb8, 0xcb, 0x46, + 0x42, 0xaa, 0xfc, 0xa3, 0x00, 0x79, 0x95, 0x7c, 0x32, 0x26, 0x2e, 0x45, 0x7b, 0x90, 0x21, 0xbd, + 0x81, 0x55, 0x4d, 0xde, 0x48, 0xde, 0x5c, 0xdb, 0xbb, 0xbe, 0x33, 0xb5, 0xb8, 0x1d, 0xa9, 0xd7, + 0xec, 0x0d, 0xac, 0x56, 0x42, 0xe5, 0xba, 0xe8, 0x55, 0xc8, 0x9e, 0x0d, 0xc7, 0xee, 0xa0, 0x9a, + 0xe2, 0x46, 0x4f, 0xc5, 0x19, 0xdd, 0x61, 0x4a, 0xad, 0x84, 0x2a, 0xb4, 0xd9, 0xab, 0x0c, 0xf3, + 0xcc, 0xaa, 0xa6, 0x17, 0xbf, 0xea, 0xc0, 0x3c, 0xe3, 0xaf, 0x62, 0xba, 0xa8, 0x0e, 0xe0, 0x12, + 0xaa, 0x59, 0x36, 0x35, 0x2c, 0xb3, 0x9a, 0xe1, 0x96, 0x4f, 0xc7, 0x59, 0x9e, 0x10, 0xda, 0xe6, + 0x8a, 0xad, 0x84, 0x5a, 0x74, 0xbd, 0x09, 0xf3, 0x61, 0x98, 0x06, 0xd5, 0x7a, 0x03, 0x6c, 0x98, + 0xd5, 0xec, 0x62, 0x1f, 0x07, 0xa6, 0x41, 0x1b, 0x4c, 0x91, 0xf9, 0x30, 0xbc, 0x09, 0x5b, 0xf2, + 0x27, 0x63, 0xe2, 0x4c, 0xaa, 0xb9, 0xc5, 0x4b, 0xfe, 0x09, 0x53, 0x62, 0x4b, 0xe6, 0xda, 0xa8, + 0x09, 0x6b, 0x5d, 0xd2, 0x37, 0x4c, 0xad, 0x3b, 0xb4, 0x7a, 0x0f, 0xaa, 0x79, 0x6e, 0xac, 0xc4, + 0x19, 0xd7, 0x99, 0x6a, 0x9d, 0x69, 0xb6, 0x12, 0x2a, 0x74, 0xfd, 0x19, 0x7a, 0x0b, 0x0a, 0xbd, + 0x01, 0xe9, 0x3d, 0xd0, 0xe8, 0x45, 0xb5, 0xc0, 0x7d, 0x6c, 0xc7, 0xf9, 0x68, 0x30, 0xbd, 0xce, + 0x45, 0x2b, 0xa1, 0xe6, 0x7b, 0x62, 0xc8, 0xd6, 0xaf, 0x93, 0xa1, 0x71, 0x4e, 0x1c, 0x66, 0x5f, + 0x5c, 0xbc, 0xfe, 0xdb, 0x42, 0x93, 0x7b, 0x28, 0xea, 0xde, 0x04, 0xbd, 0x0d, 0x45, 0x62, 0xea, + 0x72, 0x19, 0xc0, 0x5d, 0xdc, 0x88, 0xdd, 0x2b, 0xa6, 0xee, 0x2d, 0xa2, 0x40, 0xe4, 0x18, 0xbd, + 0x0e, 0xb9, 0x9e, 0x35, 0x1a, 0x19, 0xb4, 0xba, 0xc6, 0xad, 0xb7, 0x62, 0x17, 0xc0, 0xb5, 0x5a, + 0x09, 0x55, 0xea, 0xa3, 0x23, 0x28, 0x0f, 0x0d, 0x97, 0x6a, 0xae, 0x89, 0x6d, 0x77, 0x60, 0x51, + 0xb7, 0xba, 0xce, 0x3d, 0x3c, 0x1b, 0xe7, 0xe1, 0xd0, 0x70, 0xe9, 0x89, 0xa7, 0xdc, 0x4a, 0xa8, + 0xa5, 0x61, 0x58, 0xc0, 0xfc, 0x59, 0x67, 0x67, 0xc4, 0xf1, 0x1d, 0x56, 0x4b, 0x8b, 0xfd, 0xb5, + 0x99, 0xb6, 0x67, 0xcf, 0xfc, 0x59, 0x61, 0x01, 0xfa, 0x05, 0x5c, 0x19, 0x5a, 0x58, 0xf7, 0xdd, + 0x69, 0xbd, 0xc1, 0xd8, 0x7c, 0x50, 0x2d, 0x73, 0xa7, 0xcf, 0xc7, 0xfe, 0x48, 0x0b, 0xeb, 0x9e, + 0x8b, 0x06, 0x33, 0x68, 0x25, 0xd4, 0xcd, 0xe1, 0xb4, 0x10, 0xdd, 0x87, 0xab, 0xd8, 0xb6, 0x87, + 0x93, 0x69, 0xef, 0x1b, 0xdc, 0xfb, 0xad, 0x38, 0xef, 0xfb, 0xcc, 0x66, 0xda, 0x3d, 0xc2, 0x33, + 0x52, 0x16, 0x0c, 0xdb, 0x21, 0xb6, 0x63, 0xf5, 0x88, 0xeb, 0x6a, 0xf4, 0xc2, 0xad, 0x6e, 0x2e, + 0x0e, 0xc6, 0xb1, 0xaf, 0xdd, 0xb9, 0xe0, 0xc1, 0xb5, 0xc3, 0x82, 0x7a, 0x1e, 0xb2, 0xe7, 0x78, + 0x38, 0x26, 0xca, 0xf7, 0x60, 0x2d, 0x04, 0x1d, 0xa8, 0x0a, 0xf9, 0x11, 0x71, 0x5d, 0xdc, 0x27, + 0x1c, 0x69, 0x8a, 0xaa, 0x37, 0x55, 0xca, 0xb0, 0x1e, 0x86, 0x0b, 0x65, 0xe4, 0x1b, 0x32, 0x20, + 0x60, 0x86, 0xe7, 0xc4, 0x71, 0xd9, 0xe9, 0x97, 0x86, 0x72, 0x8a, 0x9e, 0x81, 0x12, 0xdf, 0x8e, + 0x9a, 0xf7, 0x9c, 0xa1, 0x51, 0x46, 0x5d, 0xe7, 0xc2, 0x53, 0xa9, 0xb4, 0x0d, 0x6b, 0xf6, 0x9e, + 0xed, 0xab, 0xa4, 0xb9, 0x0a, 0xd8, 0x7b, 0xb6, 0x54, 0x50, 0x7e, 0x08, 0x95, 0x69, 0xf4, 0x40, + 0x15, 0x48, 0x3f, 0x20, 0x13, 0xf9, 0x3e, 0x36, 0x44, 0x57, 0xe5, 0xb2, 0xf8, 0x3b, 0x8a, 0xaa, + 0x5c, 0xe3, 0x5f, 0x52, 0xbe, 0xb1, 0x0f, 0x1b, 0xe8, 0x75, 0xc8, 0x30, 0x14, 0x96, 0x80, 0x5a, + 0xdb, 0x11, 0x10, 0xbd, 0xe3, 0x41, 0xf4, 0x4e, 0xc7, 0x83, 0xe8, 0x7a, 0xe1, 0xab, 0x6f, 0xb6, + 0x13, 0x5f, 0xfc, 0x6d, 0x3b, 0xa9, 0x72, 0x0b, 0xf4, 0x04, 0x3b, 0xe5, 0xd8, 0x30, 0x35, 0x43, + 0x97, 0xef, 0xc9, 0xf3, 0xf9, 0x81, 0x8e, 0xee, 0x42, 0xa5, 0x67, 0x99, 0x2e, 0x31, 0xdd, 0xb1, + 0xab, 0x89, 0x14, 0x20, 0x61, 0x74, 0xf6, 0x14, 0x36, 0x3c, 0xc5, 0x63, 0xae, 0xa7, 0x6e, 0xf4, + 0xa2, 0x02, 0x74, 0x07, 0xe0, 0x1c, 0x0f, 0x0d, 0x1d, 0x53, 0xcb, 0x71, 0xab, 0x99, 0x1b, 0xe9, + 0xb9, 0x6e, 0x4e, 0x3d, 0x95, 0x7b, 0xb6, 0x8e, 0x29, 0xa9, 0x67, 0xd8, 0xaf, 0x55, 0x43, 0x96, + 0xe8, 0x39, 0xd8, 0xc0, 0xb6, 0xad, 0xb9, 0x14, 0x53, 0xa2, 0x75, 0x27, 0x94, 0xb8, 0x1c, 0x5c, + 0xd7, 0xd5, 0x12, 0xb6, 0xed, 0x13, 0x26, 0xad, 0x33, 0x21, 0x7a, 0x16, 0xca, 0x0c, 0x48, 0x0d, + 0x3c, 0xd4, 0x06, 0xc4, 0xe8, 0x0f, 0x28, 0x07, 0xd1, 0xb4, 0x5a, 0x92, 0xd2, 0x16, 0x17, 0x2a, + 0xba, 0xbf, 0x11, 0x38, 0x88, 0x22, 0x04, 0x19, 0x1d, 0x53, 0xcc, 0x03, 0xb9, 0xae, 0xf2, 0x31, + 0x93, 0xd9, 0x98, 0x0e, 0x64, 0x78, 0xf8, 0x18, 0x5d, 0x83, 0x9c, 0x74, 0x9b, 0xe6, 0x6e, 0xe5, + 0x8c, 0x7d, 0x33, 0xdb, 0xb1, 0xce, 0x09, 0xcf, 0x1a, 0x05, 0x55, 0x4c, 0x94, 0xdf, 0xa7, 0x60, + 0x73, 0x06, 0x6e, 0x99, 0xdf, 0x01, 0x76, 0x07, 0xde, 0xbb, 0xd8, 0x18, 0xbd, 0xc6, 0xfc, 0x62, + 0x9d, 0x38, 0x32, 0xcd, 0x55, 0xc3, 0x21, 0x12, 0x29, 0xbc, 0xc5, 0x9f, 0xcb, 0xd0, 0x48, 0x6d, + 0xd4, 0x86, 0xca, 0x10, 0xbb, 0x54, 0x13, 0xf0, 0xa5, 0x85, 0x52, 0xde, 0x2c, 0x68, 0x1f, 0x62, + 0x0f, 0xf0, 0xd8, 0x66, 0x97, 0x8e, 0xca, 0xc3, 0x88, 0x14, 0xa9, 0x70, 0xb5, 0x3b, 0xf9, 0x0c, + 0x9b, 0xd4, 0x30, 0x89, 0x36, 0xf3, 0xe5, 0x9e, 0x98, 0x71, 0xda, 0x3c, 0x37, 0x74, 0x62, 0xf6, + 0xbc, 0x4f, 0x76, 0xc5, 0x37, 0x3e, 0x0d, 0xbe, 0xdd, 0x93, 0x50, 0x1c, 0x11, 0x8a, 0x35, 0x1e, + 0x61, 0xf1, 0xd5, 0x0a, 0x4c, 0x70, 0x1b, 0x53, 0xac, 0xa8, 0x50, 0x8e, 0x66, 0x13, 0x54, 0x86, + 0x14, 0xbd, 0x90, 0xd1, 0x49, 0xd1, 0x0b, 0xf4, 0x12, 0x64, 0x58, 0x04, 0x78, 0x64, 0xca, 0x73, + 0x52, 0xb9, 0xb4, 0xeb, 0x4c, 0x6c, 0xa2, 0x72, 0x4d, 0x45, 0xf1, 0x8f, 0x8a, 0x9f, 0x61, 0xa6, + 0xbd, 0x2a, 0xcf, 0xc3, 0xc6, 0x54, 0x0a, 0x09, 0x7d, 0xdc, 0x64, 0xf8, 0xe3, 0x2a, 0x1b, 0x50, + 0x8a, 0xe4, 0x0b, 0xe5, 0x1a, 0x5c, 0x9d, 0x07, 0xff, 0xca, 0xc0, 0x97, 0x47, 0x60, 0x1c, 0xbd, + 0x0a, 0x05, 0x1f, 0xff, 0xc5, 0x51, 0x9d, 0x0d, 0xa4, 0xa7, 0xac, 0xfa, 0xaa, 0xec, 0x8c, 0xb2, + 0x3d, 0xcf, 0x37, 0x4b, 0x8a, 0xff, 0xf0, 0x3c, 0xb6, 0xed, 0x16, 0x76, 0x07, 0xca, 0x47, 0x50, + 0x8d, 0xc3, 0xf6, 0xa9, 0x65, 0x64, 0xfc, 0x3d, 0x7a, 0x0d, 0x72, 0x67, 0x96, 0x33, 0xc2, 0x94, + 0x3b, 0x2b, 0xa9, 0x72, 0xc6, 0xf6, 0xae, 0xc0, 0xf9, 0x34, 0x17, 0x8b, 0x89, 0xa2, 0xc1, 0x13, + 0xb1, 0xf8, 0xce, 0x4c, 0x0c, 0x53, 0x27, 0x22, 0x9e, 0x25, 0x55, 0x4c, 0x02, 0x47, 0xe2, 0xc7, + 0x8a, 0x09, 0x7b, 0xad, 0xcb, 0xd7, 0xca, 0xfd, 0x17, 0x55, 0x39, 0x53, 0x6e, 0xfa, 0xc1, 0x8a, + 0xc0, 0x3c, 0x03, 0x44, 0x96, 0x1a, 0x92, 0x37, 0xd2, 0x37, 0xd7, 0x55, 0x36, 0x54, 0xfe, 0x50, + 0x84, 0x82, 0x4a, 0x5c, 0x9b, 0x41, 0x0b, 0xaa, 0x43, 0x91, 0x5c, 0xf4, 0x88, 0xe0, 0x68, 0xc9, + 0x58, 0x8e, 0x23, 0xb4, 0x9b, 0x9e, 0x26, 0x23, 0x18, 0xbe, 0x19, 0x7a, 0x45, 0xf2, 0xd0, 0x78, + 0x4a, 0x29, 0xcd, 0xc3, 0x44, 0xf4, 0x35, 0x8f, 0x88, 0xa6, 0x63, 0x39, 0x85, 0xb0, 0x9a, 0x62, + 0xa2, 0xaf, 0x48, 0x26, 0x9a, 0x59, 0xf2, 0xb2, 0x08, 0x15, 0x6d, 0x44, 0xa8, 0x68, 0x76, 0xc9, + 0x32, 0x63, 0xb8, 0x68, 0x23, 0xc2, 0x45, 0x73, 0x4b, 0x9c, 0xc4, 0x90, 0xd1, 0xd7, 0x3c, 0x32, + 0x9a, 0x5f, 0xb2, 0xec, 0x29, 0x36, 0x7a, 0x27, 0xca, 0x46, 0x05, 0x93, 0x7c, 0x26, 0xd6, 0x3a, + 0x96, 0x8e, 0xfe, 0x28, 0x44, 0x47, 0x8b, 0xb1, 0x5c, 0x50, 0x38, 0x99, 0xc3, 0x47, 0x1b, 0x11, + 0x3e, 0x0a, 0x4b, 0x62, 0x10, 0x43, 0x48, 0xdf, 0x09, 0x13, 0xd2, 0xb5, 0x58, 0x4e, 0x2b, 0x37, + 0xcd, 0x3c, 0x46, 0xfa, 0x86, 0xcf, 0x48, 0xd7, 0x63, 0x29, 0xb5, 0x5c, 0xc3, 0x34, 0x25, 0x6d, + 0xcf, 0x50, 0x52, 0x41, 0x21, 0x9f, 0x8b, 0x75, 0xb1, 0x84, 0x93, 0xb6, 0x67, 0x38, 0x69, 0x79, + 0x89, 0xc3, 0x25, 0xa4, 0xf4, 0x97, 0xf3, 0x49, 0x69, 0x3c, 0x6d, 0x94, 0x3f, 0x73, 0x35, 0x56, + 0xaa, 0xc5, 0xb0, 0xd2, 0x0a, 0x77, 0xff, 0xfd, 0x58, 0xf7, 0x2b, 0xd3, 0xd2, 0x76, 0x0c, 0x2d, + 0x8d, 0x8f, 0xc7, 0xaa, 0xbc, 0xf4, 0x79, 0x96, 0xfe, 0xa7, 0x90, 0x88, 0xa1, 0x24, 0x71, 0x1c, + 0xcb, 0x91, 0x94, 0x4f, 0x4c, 0x94, 0x9b, 0x8c, 0x90, 0x04, 0xa8, 0xb3, 0x80, 0xc3, 0xf2, 0x6c, + 0x14, 0x42, 0x1a, 0xe5, 0x8f, 0xc9, 0xc0, 0x96, 0xe7, 0xf0, 0x30, 0x99, 0x29, 0x4a, 0x32, 0x13, + 0xa2, 0xb6, 0xa9, 0x28, 0xb5, 0xdd, 0x86, 0x35, 0x96, 0x65, 0xa6, 0x58, 0x2b, 0xb6, 0x3d, 0xd6, + 0x8a, 0x6e, 0xc1, 0x26, 0xe7, 0x18, 0x82, 0x00, 0xcb, 0xd4, 0x92, 0xe1, 0x19, 0x72, 0x83, 0x3d, + 0x10, 0xbb, 0x5d, 0xe4, 0x98, 0x17, 0xe1, 0x4a, 0x48, 0xd7, 0xcf, 0x5e, 0x22, 0xe9, 0x57, 0x7c, + 0xed, 0x7d, 0x99, 0xc6, 0xde, 0x0f, 0x02, 0x14, 0x30, 0x62, 0x04, 0x99, 0x9e, 0xa5, 0x13, 0x99, + 0x5b, 0xf8, 0x98, 0x25, 0x85, 0xa1, 0xd5, 0x97, 0x19, 0x84, 0x0d, 0x99, 0x96, 0x0f, 0xab, 0x45, + 0x81, 0x9a, 0xca, 0x9f, 0x93, 0x81, 0xbf, 0x80, 0x24, 0xcf, 0xe3, 0xb3, 0xc9, 0xff, 0x0d, 0x9f, + 0x4d, 0x7d, 0x6b, 0x3e, 0x1b, 0xce, 0xed, 0xe9, 0x68, 0x6e, 0xff, 0x57, 0x32, 0xf8, 0xc2, 0x3e, + 0x3b, 0xfd, 0x76, 0x11, 0x09, 0x12, 0x75, 0x96, 0x7f, 0x2f, 0x99, 0xa8, 0x65, 0xcd, 0x91, 0xe3, + 0xef, 0x8d, 0xd6, 0x1c, 0x79, 0x91, 0xba, 0xf9, 0x04, 0xbd, 0x0e, 0x45, 0xde, 0x5c, 0xd2, 0x2c, + 0xdb, 0x95, 0x08, 0xfe, 0x64, 0x78, 0xad, 0xa2, 0x87, 0xb4, 0x73, 0xcc, 0x74, 0xda, 0xb6, 0xab, + 0x16, 0x6c, 0x39, 0x0a, 0x71, 0x90, 0x62, 0x84, 0x27, 0x5f, 0x87, 0x22, 0xfb, 0xf5, 0xae, 0x8d, + 0x7b, 0x84, 0xa3, 0x71, 0x51, 0x0d, 0x04, 0xca, 0x7d, 0x40, 0xb3, 0xf9, 0x00, 0xb5, 0x20, 0x47, + 0xce, 0x89, 0x49, 0x05, 0x27, 0x58, 0xdb, 0xbb, 0x36, 0x87, 0x84, 0x12, 0x93, 0xd6, 0xab, 0x2c, + 0xc8, 0xff, 0xfc, 0x66, 0xbb, 0x22, 0xb4, 0x5f, 0xb0, 0x46, 0x06, 0x25, 0x23, 0x9b, 0x4e, 0x54, + 0x69, 0xaf, 0xfc, 0x3a, 0xc5, 0x48, 0x5f, 0x24, 0x57, 0xcc, 0x8d, 0xad, 0x77, 0x80, 0x52, 0xa1, + 0x6a, 0x60, 0xb5, 0x78, 0x6f, 0x01, 0xf4, 0xb1, 0xab, 0x7d, 0x8a, 0x4d, 0x4a, 0x74, 0x19, 0xf4, + 0x90, 0x04, 0xd5, 0xa0, 0xc0, 0x66, 0x63, 0x97, 0xe8, 0xb2, 0x30, 0xf1, 0xe7, 0xa1, 0x75, 0xe6, + 0xbf, 0xdb, 0x3a, 0xa3, 0x51, 0x2e, 0x4c, 0x47, 0xf9, 0x37, 0xa9, 0xe0, 0x94, 0x04, 0xfc, 0xf8, + 0xff, 0x2f, 0x0e, 0xbf, 0xe5, 0x15, 0x75, 0x34, 0x69, 0xa3, 0x13, 0xd8, 0xf4, 0x4f, 0xa9, 0x36, + 0xe6, 0xa7, 0xd7, 0xdb, 0x77, 0xab, 0x1e, 0xf3, 0xca, 0x79, 0x54, 0xec, 0xa2, 0x9f, 0xc2, 0xe3, + 0x53, 0x08, 0xe4, 0xbb, 0x4e, 0xad, 0x08, 0x44, 0x8f, 0x45, 0x81, 0xc8, 0xf3, 0x1c, 0xc4, 0x2a, + 0xfd, 0x1d, 0xcf, 0xc6, 0x01, 0xab, 0xc3, 0xc2, 0x14, 0x64, 0xee, 0xd7, 0x7f, 0x06, 0x4a, 0x0e, + 0xa1, 0xd8, 0x30, 0xb5, 0x48, 0x19, 0xbc, 0x2e, 0x84, 0xb2, 0xb8, 0x3e, 0x86, 0xc7, 0xe6, 0x52, + 0x11, 0xf4, 0x03, 0x28, 0x06, 0x2c, 0x26, 0x19, 0x53, 0x51, 0xfa, 0x85, 0x50, 0xa0, 0xab, 0xfc, + 0x29, 0x19, 0xb8, 0x8c, 0x96, 0x56, 0x4d, 0xc8, 0x39, 0xc4, 0x1d, 0x0f, 0x45, 0xb1, 0x53, 0xde, + 0x7b, 0x71, 0x35, 0x12, 0xc3, 0xa4, 0xe3, 0x21, 0x55, 0xa5, 0xb1, 0x72, 0x1f, 0x72, 0x42, 0x82, + 0xd6, 0x20, 0x7f, 0xef, 0xe8, 0xee, 0x51, 0xfb, 0x83, 0xa3, 0x4a, 0x02, 0x01, 0xe4, 0xf6, 0x1b, + 0x8d, 0xe6, 0x71, 0xa7, 0x92, 0x44, 0x45, 0xc8, 0xee, 0xd7, 0xdb, 0x6a, 0xa7, 0x92, 0x62, 0x62, + 0xb5, 0xf9, 0x5e, 0xb3, 0xd1, 0xa9, 0xa4, 0xd1, 0x26, 0x94, 0xc4, 0x58, 0xbb, 0xd3, 0x56, 0xdf, + 0xdf, 0xef, 0x54, 0x32, 0x21, 0xd1, 0x49, 0xf3, 0xe8, 0x76, 0x53, 0xad, 0x64, 0x95, 0x97, 0x59, + 0x35, 0x15, 0x43, 0x7b, 0x82, 0xba, 0x29, 0x19, 0xaa, 0x9b, 0x94, 0xdf, 0xa5, 0xa0, 0x16, 0xcf, + 0x65, 0xd0, 0x7b, 0x53, 0x0b, 0xdf, 0xbb, 0x04, 0x11, 0x9a, 0x5a, 0x3d, 0x7a, 0x16, 0xca, 0x0e, + 0x39, 0x23, 0xb4, 0x37, 0x10, 0xdc, 0x4a, 0x24, 0xb6, 0x92, 0x5a, 0x92, 0x52, 0x6e, 0xe4, 0x0a, + 0xb5, 0x8f, 0x49, 0x8f, 0x6a, 0xa2, 0x84, 0x13, 0x9b, 0xae, 0xc8, 0xd4, 0x98, 0xf4, 0x44, 0x08, + 0x95, 0x8f, 0x2e, 0x15, 0xcb, 0x22, 0x64, 0xd5, 0x66, 0x47, 0xfd, 0x59, 0x25, 0x8d, 0x10, 0x94, + 0xf9, 0x50, 0x3b, 0x39, 0xda, 0x3f, 0x3e, 0x69, 0xb5, 0x59, 0x2c, 0xaf, 0xc0, 0x86, 0x17, 0x4b, + 0x4f, 0x98, 0x55, 0xee, 0x04, 0xbb, 0x61, 0x49, 0xed, 0x18, 0xed, 0x3d, 0xa4, 0xa6, 0x7a, 0x0f, + 0xff, 0x49, 0xc2, 0xc6, 0xd4, 0x41, 0x43, 0x7b, 0x90, 0x15, 0x3c, 0x3f, 0xee, 0x92, 0x82, 0xe3, + 0x84, 0x3c, 0x95, 0x42, 0x15, 0xbd, 0x05, 0x05, 0x22, 0xfb, 0x20, 0xf3, 0x0e, 0xb4, 0xe8, 0xdf, + 0x78, 0x9d, 0x12, 0x69, 0xea, 0x5b, 0xa0, 0xb7, 0xa1, 0xe8, 0x23, 0x86, 0x2c, 0x2e, 0x9f, 0x9e, + 0x35, 0xf7, 0xb1, 0x46, 0xda, 0x07, 0x36, 0xe8, 0x8d, 0x80, 0xdb, 0x65, 0x66, 0xab, 0x0b, 0x69, + 0x2e, 0x14, 0xa4, 0xb1, 0xa7, 0xaf, 0x34, 0x60, 0x2d, 0xb4, 0x1e, 0x1e, 0x2d, 0x7c, 0x21, 0xfb, + 0x6b, 0xa2, 0x09, 0x52, 0x18, 0xe1, 0x0b, 0xd1, 0x5a, 0x7b, 0x1c, 0xf2, 0xec, 0x61, 0x1f, 0x0b, + 0xd4, 0x4a, 0xab, 0xb9, 0x11, 0xbe, 0x78, 0x17, 0xbb, 0xca, 0x87, 0x50, 0x8e, 0xf6, 0x96, 0xd8, + 0x8e, 0x76, 0xac, 0xb1, 0xa9, 0x73, 0x1f, 0x59, 0x55, 0x4c, 0xd0, 0xab, 0x90, 0x3d, 0xb7, 0x04, + 0xe8, 0xcd, 0x3f, 0xfa, 0xa7, 0x16, 0x25, 0xa1, 0xde, 0x94, 0xd0, 0x56, 0x3e, 0x83, 0x2c, 0x07, + 0x31, 0x06, 0x48, 0xbc, 0x11, 0x24, 0x79, 0x2d, 0x1b, 0xa3, 0x0f, 0x01, 0x30, 0xa5, 0x8e, 0xd1, + 0x1d, 0x07, 0x8e, 0xb7, 0xe7, 0x83, 0xe0, 0xbe, 0xa7, 0x57, 0xbf, 0x2e, 0xd1, 0xf0, 0x6a, 0x60, + 0x1a, 0x42, 0xc4, 0x90, 0x43, 0xe5, 0x08, 0xca, 0x51, 0xdb, 0x70, 0xbf, 0x76, 0x7d, 0x4e, 0xbf, + 0xd6, 0xe7, 0x4e, 0x3e, 0xf3, 0x4a, 0x8b, 0x8e, 0x20, 0x9f, 0x28, 0x9f, 0x27, 0xa1, 0xd0, 0xb9, + 0x90, 0xc7, 0x23, 0xa6, 0xdf, 0x14, 0x98, 0xa6, 0xc2, 0xdd, 0x15, 0xd1, 0xc0, 0x4a, 0xfb, 0x6d, + 0xb1, 0x77, 0x7c, 0x00, 0xc8, 0xac, 0x5a, 0xd5, 0x7a, 0xcd, 0x43, 0x09, 0x7a, 0x6f, 0x42, 0xd1, + 0xdf, 0x55, 0xac, 0x40, 0xc0, 0xba, 0xee, 0x10, 0xd7, 0x95, 0x6b, 0xf3, 0xa6, 0xbc, 0xb7, 0x69, + 0x7d, 0x2a, 0xfb, 0x37, 0x69, 0x55, 0x4c, 0x14, 0x1d, 0x36, 0xa6, 0xd2, 0x1f, 0x7a, 0x13, 0xf2, + 0xf6, 0xb8, 0xab, 0x79, 0xe1, 0x99, 0x3a, 0x3c, 0x1e, 0x59, 0x1c, 0x77, 0x87, 0x46, 0xef, 0x2e, + 0x99, 0x78, 0x3f, 0xc6, 0x1e, 0x77, 0xef, 0x8a, 0x28, 0x8a, 0xb7, 0xa4, 0xc2, 0x6f, 0x39, 0x87, + 0x82, 0xb7, 0x29, 0xd0, 0x8f, 0xc3, 0xe7, 0xc4, 0xeb, 0x78, 0xc7, 0xa6, 0x64, 0xe9, 0x3e, 0x74, + 0x4c, 0x6e, 0xc1, 0xa6, 0x6b, 0xf4, 0x4d, 0xa2, 0x6b, 0x41, 0x89, 0xc2, 0xdf, 0x56, 0x50, 0x37, + 0xc4, 0x83, 0x43, 0xaf, 0x3e, 0x51, 0xfe, 0x9d, 0x84, 0x82, 0x77, 0x60, 0xd1, 0xcb, 0xa1, 0x7d, + 0x57, 0x9e, 0xd3, 0xc1, 0xf1, 0x14, 0x83, 0x0e, 0x64, 0xf4, 0xb7, 0xa6, 0x2e, 0xff, 0x5b, 0xe3, + 0xfa, 0xcc, 0x5e, 0xc3, 0x3f, 0x73, 0xe9, 0x86, 0xff, 0x0b, 0x80, 0xa8, 0x45, 0xf1, 0x50, 0x3b, + 0xb7, 0xa8, 0x61, 0xf6, 0x35, 0x11, 0x6c, 0xc1, 0xcc, 0x2a, 0xfc, 0xc9, 0x29, 0x7f, 0x70, 0xcc, + 0xe3, 0xfe, 0xab, 0x24, 0x14, 0xfc, 0x1c, 0x7b, 0xd9, 0x86, 0xe2, 0x35, 0xc8, 0xc9, 0x34, 0x22, + 0x3a, 0x8a, 0x72, 0xe6, 0x37, 0xbe, 0x33, 0xa1, 0xc6, 0x77, 0x0d, 0x38, 0x1c, 0x4f, 0xb7, 0x86, + 0xd9, 0xfc, 0xd6, 0x1b, 0xb0, 0x16, 0xea, 0xed, 0xb2, 0x93, 0x77, 0xd4, 0xfc, 0xa0, 0x92, 0xa8, + 0xe5, 0x3f, 0xff, 0xf2, 0x46, 0xfa, 0x88, 0x7c, 0xca, 0xf6, 0xac, 0xda, 0x6c, 0xb4, 0x9a, 0x8d, + 0xbb, 0x95, 0x64, 0x6d, 0xed, 0xf3, 0x2f, 0x6f, 0xe4, 0x55, 0xc2, 0x1b, 0x3f, 0xb7, 0x5a, 0xb0, + 0x1e, 0xfe, 0x2a, 0xd1, 0x4c, 0x84, 0xa0, 0x7c, 0xfb, 0xde, 0xf1, 0xe1, 0x41, 0x63, 0xbf, 0xd3, + 0xd4, 0x4e, 0xdb, 0x9d, 0x66, 0x25, 0x89, 0x1e, 0x87, 0x2b, 0x87, 0x07, 0xef, 0xb6, 0x3a, 0x5a, + 0xe3, 0xf0, 0xa0, 0x79, 0xd4, 0xd1, 0xf6, 0x3b, 0x9d, 0xfd, 0xc6, 0xdd, 0x4a, 0x6a, 0xef, 0x11, + 0xc0, 0xc6, 0x7e, 0xbd, 0x71, 0xc0, 0xb2, 0xa8, 0xd1, 0xc3, 0xb2, 0xb1, 0x96, 0xe1, 0x45, 0xfa, + 0xc2, 0x1b, 0xec, 0xda, 0xe2, 0xbe, 0x22, 0xba, 0x03, 0x59, 0x5e, 0xbf, 0xa3, 0xc5, 0x57, 0xda, + 0xb5, 0x25, 0x8d, 0x46, 0xf6, 0x63, 0xf8, 0xf1, 0x58, 0x78, 0xc7, 0x5d, 0x5b, 0xdc, 0x77, 0x44, + 0x2a, 0x14, 0x83, 0x02, 0x7c, 0xf9, 0x9d, 0x77, 0x6d, 0x85, 0x5e, 0x24, 0xf3, 0x19, 0x94, 0x17, + 0xcb, 0xef, 0x80, 0x6b, 0x2b, 0x00, 0x18, 0x3a, 0x84, 0xbc, 0x57, 0xb8, 0x2d, 0xbb, 0x95, 0xae, + 0x2d, 0xed, 0x13, 0xb2, 0x4f, 0x20, 0x0a, 0xec, 0xc5, 0x57, 0xec, 0xb5, 0x25, 0x4d, 0x4f, 0x74, + 0x00, 0x39, 0xc9, 0x99, 0x97, 0xdc, 0x34, 0xd7, 0x96, 0xf5, 0xfd, 0x58, 0xd0, 0x82, 0xce, 0xc5, + 0xf2, 0x3f, 0x0e, 0xd4, 0x56, 0xe8, 0xe7, 0xa2, 0x7b, 0x00, 0xa1, 0x72, 0x7a, 0x85, 0x7f, 0x04, + 0xd4, 0x56, 0xe9, 0xd3, 0xa2, 0x36, 0x14, 0xfc, 0xb2, 0x69, 0xe9, 0xfd, 0x7c, 0x6d, 0x79, 0xc3, + 0x14, 0xdd, 0x87, 0x52, 0xb4, 0x5e, 0x58, 0xed, 0xd6, 0xbd, 0xb6, 0x62, 0x27, 0x94, 0xf9, 0x8f, + 0x16, 0x0f, 0xab, 0xdd, 0xc2, 0xd7, 0x56, 0x6c, 0x8c, 0xa2, 0x8f, 0x61, 0x73, 0x96, 0xdc, 0xaf, + 0x7e, 0x29, 0x5f, 0xbb, 0x44, 0xab, 0x14, 0x8d, 0x00, 0xcd, 0x29, 0x0a, 0x2e, 0x71, 0x47, 0x5f, + 0xbb, 0x4c, 0xe7, 0x94, 0x85, 0x2e, 0xca, 0xb4, 0x57, 0xbb, 0xb3, 0xaf, 0xad, 0xd8, 0x43, 0xad, + 0xbf, 0xf7, 0xd5, 0xc3, 0xad, 0xe4, 0xd7, 0x0f, 0xb7, 0x92, 0x7f, 0x7f, 0xb8, 0x95, 0xfc, 0xe2, + 0xd1, 0x56, 0xe2, 0xeb, 0x47, 0x5b, 0x89, 0xbf, 0x3e, 0xda, 0x4a, 0xfc, 0xfc, 0xa5, 0xbe, 0x41, + 0x07, 0xe3, 0xee, 0x4e, 0xcf, 0x1a, 0xed, 0x0e, 0xf1, 0x67, 0x93, 0x21, 0xd1, 0xfb, 0xc4, 0x09, + 0x0d, 0x5f, 0xec, 0x59, 0x0e, 0x09, 0xfd, 0x73, 0xaa, 0x9b, 0xe3, 0xd9, 0xf0, 0x95, 0xff, 0x06, + 0x00, 0x00, 0xff, 0xff, 0xc5, 0x2c, 0x95, 0x01, 0x59, 0x25, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/proto/tendermint/types/types.pb.go b/proto/tendermint/types/types.pb.go index da79f699b1..f00fee6630 100644 --- a/proto/tendermint/types/types.pb.go +++ b/proto/tendermint/types/types.pb.go @@ -421,9 +421,8 @@ type Data struct { // Txs that will be applied by state @ block.Height+1. // NOTE: not all txs here are valid. We're just agreeing on the order first. // This means that block.AppHash does not include these txs. - Txs [][]byte `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"` - // Volatile - Hash []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` + Txs [][]byte `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"` + MetaData []byte `protobuf:"bytes,2,opt,name=meta_data,json=metaData,proto3" json:"meta_data,omitempty"` } func (m *Data) Reset() { *m = Data{} } @@ -466,9 +465,9 @@ func (m *Data) GetTxs() [][]byte { return nil } -func (m *Data) GetHash() []byte { +func (m *Data) GetMetaData() []byte { if m != nil { - return m.Hash + return m.MetaData } return nil } @@ -1075,93 +1074,94 @@ func init() { func init() { proto.RegisterFile("tendermint/types/types.proto", fileDescriptor_d3a6e55e2345de56) } var fileDescriptor_d3a6e55e2345de56 = []byte{ - // 1373 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x5f, 0x6f, 0xdb, 0x54, - 0x14, 0xaf, 0x13, 0xa7, 0x49, 0x4e, 0x92, 0x36, 0xb5, 0xba, 0x2d, 0xcb, 0xd6, 0xd4, 0x0a, 0x02, - 0xba, 0x31, 0x9c, 0xd1, 0x21, 0x04, 0x02, 0x1e, 0x92, 0xb4, 0xdb, 0xa2, 0xb5, 0x69, 0xe4, 0x64, - 0x45, 0xf0, 0x62, 0x39, 0xf1, 0x5d, 0x62, 0xe6, 0xd8, 0x96, 0xef, 0x4d, 0x69, 0xf7, 0x09, 0x50, - 0x9f, 0xc6, 0x0b, 0x6f, 0x7d, 0x82, 0x07, 0xde, 0xf9, 0x06, 0x3c, 0xed, 0x71, 0x6f, 0xf0, 0xc2, - 0x40, 0x9d, 0x84, 0xf8, 0x18, 0xe8, 0xfe, 0x89, 0x63, 0x37, 0x2d, 0x4c, 0xd3, 0xc4, 0x4b, 0xe4, - 0x7b, 0xce, 0xef, 0x9c, 0x7b, 0xce, 0xef, 0xfe, 0x7c, 0x8f, 0x03, 0xd7, 0x09, 0x72, 0x2d, 0x14, - 0x8c, 0x6d, 0x97, 0xd4, 0xc8, 0x91, 0x8f, 0x30, 0xff, 0xd5, 0xfc, 0xc0, 0x23, 0x9e, 0x52, 0x9c, - 0x79, 0x35, 0x66, 0x2f, 0xaf, 0x0e, 0xbd, 0xa1, 0xc7, 0x9c, 0x35, 0xfa, 0xc4, 0x71, 0xe5, 0xf5, - 0xa1, 0xe7, 0x0d, 0x1d, 0x54, 0x63, 0xab, 0xfe, 0xe4, 0x51, 0x8d, 0xd8, 0x63, 0x84, 0x89, 0x39, - 0xf6, 0x05, 0x40, 0x8d, 0x6c, 0xe3, 0xd8, 0x7d, 0x5c, 0xeb, 0xdb, 0x24, 0xb6, 0x55, 0x79, 0x2d, - 0x82, 0x18, 0x04, 0x47, 0x3e, 0xf1, 0x68, 0x36, 0xef, 0x91, 0x70, 0x57, 0x22, 0xee, 0x03, 0x14, - 0x60, 0xdb, 0x73, 0x63, 0xe1, 0xea, 0x5c, 0x1f, 0x07, 0xa6, 0x63, 0x5b, 0x26, 0xf1, 0x02, 0x8e, - 0xa8, 0x7e, 0x02, 0x85, 0x8e, 0x19, 0x90, 0x2e, 0x22, 0xf7, 0x91, 0x69, 0xa1, 0x40, 0x59, 0x85, - 0x14, 0xf1, 0x88, 0xe9, 0x94, 0x24, 0x55, 0xda, 0x28, 0xe8, 0x7c, 0xa1, 0x28, 0x20, 0x8f, 0x4c, - 0x3c, 0x2a, 0x25, 0x54, 0x69, 0x23, 0xaf, 0xb3, 0xe7, 0xea, 0x08, 0x64, 0x1a, 0x4a, 0x23, 0x6c, - 0xd7, 0x42, 0x87, 0xd3, 0x08, 0xb6, 0xa0, 0xd6, 0xfe, 0x11, 0x41, 0x58, 0x84, 0xf0, 0x85, 0xf2, - 0x21, 0xa4, 0x58, 0xfd, 0xa5, 0xa4, 0x2a, 0x6d, 0xe4, 0x36, 0x4b, 0x5a, 0x84, 0x4a, 0xde, 0x9f, - 0xd6, 0xa1, 0xfe, 0x86, 0xfc, 0xec, 0xc5, 0xfa, 0x82, 0xce, 0xc1, 0x55, 0x07, 0xd2, 0x0d, 0xc7, - 0x1b, 0x3c, 0x6e, 0x6d, 0x85, 0x85, 0x48, 0xb3, 0x42, 0x94, 0x5d, 0x58, 0xf6, 0xcd, 0x80, 0x18, - 0x18, 0x11, 0x63, 0xc4, 0xba, 0x60, 0x9b, 0xe6, 0x36, 0xd7, 0xb5, 0xb3, 0x27, 0xa5, 0xc5, 0x9a, - 0x15, 0xbb, 0x14, 0xfc, 0xa8, 0xb1, 0xfa, 0x97, 0x0c, 0x8b, 0x82, 0x8c, 0xcf, 0x21, 0x2d, 0x68, - 0x65, 0x1b, 0xe6, 0x36, 0xd7, 0xa2, 0x19, 0x85, 0x4b, 0x6b, 0x7a, 0x2e, 0x46, 0x2e, 0x9e, 0x60, - 0x91, 0x6f, 0x1a, 0xa3, 0xbc, 0x03, 0x99, 0xc1, 0xc8, 0xb4, 0x5d, 0xc3, 0xb6, 0x58, 0x45, 0xd9, - 0x46, 0xee, 0xf4, 0xc5, 0x7a, 0xba, 0x49, 0x6d, 0xad, 0x2d, 0x3d, 0xcd, 0x9c, 0x2d, 0x4b, 0xb9, - 0x0c, 0x8b, 0x23, 0x64, 0x0f, 0x47, 0x84, 0xd1, 0x92, 0xd4, 0xc5, 0x4a, 0xf9, 0x18, 0x64, 0x2a, - 0x99, 0x92, 0xcc, 0xf6, 0x2e, 0x6b, 0x5c, 0x4f, 0xda, 0x54, 0x4f, 0x5a, 0x6f, 0xaa, 0xa7, 0x46, - 0x86, 0x6e, 0xfc, 0xf4, 0x8f, 0x75, 0x49, 0x67, 0x11, 0x4a, 0x13, 0x0a, 0x8e, 0x89, 0x89, 0xd1, - 0xa7, 0xb4, 0xd1, 0xed, 0x53, 0x2c, 0xc5, 0xd5, 0x79, 0x42, 0x04, 0xb1, 0xa2, 0xf4, 0x1c, 0x8d, - 0xe2, 0x26, 0x4b, 0xd9, 0x80, 0x22, 0x4b, 0x32, 0xf0, 0xc6, 0x63, 0x9b, 0x18, 0x8c, 0xf7, 0x45, - 0xc6, 0xfb, 0x12, 0xb5, 0x37, 0x99, 0xf9, 0x3e, 0x3d, 0x81, 0x6b, 0x90, 0xb5, 0x4c, 0x62, 0x72, - 0x48, 0x9a, 0x41, 0x32, 0xd4, 0xc0, 0x9c, 0xef, 0xc2, 0x72, 0xa8, 0x3a, 0xcc, 0x21, 0x19, 0x9e, - 0x65, 0x66, 0x66, 0xc0, 0xdb, 0xb0, 0xea, 0xa2, 0x43, 0x62, 0x9c, 0x45, 0x67, 0x19, 0x5a, 0xa1, - 0xbe, 0xfd, 0x78, 0xc4, 0xdb, 0xb0, 0x34, 0x98, 0x92, 0xcf, 0xb1, 0xc0, 0xb0, 0x85, 0xd0, 0xca, - 0x60, 0x57, 0x21, 0x63, 0xfa, 0x3e, 0x07, 0xe4, 0x18, 0x20, 0x6d, 0xfa, 0x3e, 0x73, 0xdd, 0x84, - 0x15, 0xd6, 0x63, 0x80, 0xf0, 0xc4, 0x21, 0x22, 0x49, 0x9e, 0x61, 0x96, 0xa9, 0x43, 0xe7, 0x76, - 0x86, 0x7d, 0x0b, 0x0a, 0xe8, 0xc0, 0xb6, 0x90, 0x3b, 0x40, 0x1c, 0x57, 0x60, 0xb8, 0xfc, 0xd4, - 0xc8, 0x40, 0x37, 0xa0, 0xe8, 0x07, 0x9e, 0xef, 0x61, 0x14, 0x18, 0xa6, 0x65, 0x05, 0x08, 0xe3, - 0xd2, 0x12, 0xcf, 0x37, 0xb5, 0xd7, 0xb9, 0xb9, 0x7a, 0x0b, 0xe4, 0x2d, 0x93, 0x98, 0x4a, 0x11, - 0x92, 0xe4, 0x10, 0x97, 0x24, 0x35, 0xb9, 0x91, 0xd7, 0xe9, 0xe3, 0xb9, 0xaf, 0xdb, 0xdf, 0x09, - 0x90, 0xf7, 0x3d, 0x82, 0x94, 0x3b, 0x20, 0xd3, 0xa3, 0x63, 0x8a, 0x5c, 0x3a, 0x4f, 0xe3, 0x5d, - 0x7b, 0xe8, 0x22, 0x6b, 0x17, 0x0f, 0x7b, 0x47, 0x3e, 0xd2, 0x19, 0x38, 0x22, 0xb1, 0x44, 0x4c, - 0x62, 0xab, 0x90, 0x0a, 0xbc, 0x89, 0x6b, 0x31, 0xe5, 0xa5, 0x74, 0xbe, 0x50, 0xb6, 0x21, 0x13, - 0x2a, 0x47, 0xfe, 0x2f, 0xe5, 0x2c, 0x53, 0xe5, 0x50, 0x5d, 0x0b, 0x83, 0x9e, 0xee, 0x0b, 0x01, - 0x35, 0x20, 0x1b, 0x5e, 0x79, 0x42, 0x81, 0xaf, 0x26, 0xe2, 0x59, 0x98, 0xf2, 0x1e, 0xac, 0x84, - 0x7a, 0x08, 0x09, 0xe5, 0x2a, 0x2c, 0x86, 0x0e, 0xc1, 0x68, 0x4c, 0x6a, 0x06, 0xbf, 0x94, 0xd2, - 0xac, 0xaf, 0x99, 0xd4, 0x5a, 0xec, 0x76, 0xba, 0x0e, 0x59, 0x6c, 0x0f, 0x5d, 0x93, 0x4c, 0x02, - 0x24, 0xd4, 0x38, 0x33, 0x54, 0xbf, 0x4b, 0xc0, 0x22, 0x57, 0x77, 0x84, 0x37, 0xe9, 0x7c, 0xde, - 0x12, 0x17, 0xf1, 0x96, 0x7c, 0x7d, 0xde, 0xea, 0x00, 0x61, 0x31, 0xb8, 0x24, 0xab, 0xc9, 0x8d, - 0xdc, 0xe6, 0xb5, 0xf9, 0x44, 0xbc, 0xc4, 0xae, 0x3d, 0x14, 0x2f, 0x6f, 0x24, 0x28, 0x54, 0x50, - 0x2a, 0x72, 0x4f, 0x7e, 0x0a, 0xd9, 0xbe, 0x4d, 0x0c, 0x33, 0x08, 0xcc, 0x23, 0x46, 0x61, 0x6e, - 0xb3, 0x12, 0xcd, 0x4a, 0x47, 0x90, 0x46, 0x47, 0x90, 0xd6, 0xb0, 0x49, 0x9d, 0xa2, 0xf4, 0x4c, - 0x5f, 0x3c, 0x55, 0x7f, 0x97, 0x20, 0x1b, 0x6e, 0xa8, 0xd4, 0xa1, 0x30, 0x6d, 0xd4, 0x78, 0xe4, - 0x98, 0x43, 0x21, 0xc6, 0xb5, 0x0b, 0xbb, 0xbd, 0xeb, 0x98, 0x43, 0x3d, 0x27, 0x1a, 0xa4, 0x8b, - 0xf3, 0x0f, 0x36, 0x71, 0xc1, 0xc1, 0xc6, 0x94, 0x94, 0x7c, 0x3d, 0x25, 0xc5, 0xce, 0x5c, 0x3e, - 0x7b, 0xe6, 0x3f, 0x27, 0x20, 0xd3, 0x61, 0x2f, 0xa8, 0xe9, 0xfc, 0x1f, 0xaf, 0xd8, 0x35, 0xc8, - 0xfa, 0x9e, 0x63, 0x70, 0x8f, 0xcc, 0x3c, 0x19, 0xdf, 0x73, 0xf4, 0x39, 0x1d, 0xa5, 0xde, 0xd0, - 0xfb, 0xb7, 0xf8, 0x06, 0x58, 0x4b, 0x9f, 0x65, 0x2d, 0x80, 0x3c, 0xa7, 0x42, 0x0c, 0xcc, 0xdb, - 0x94, 0x03, 0x36, 0x81, 0xa5, 0xf9, 0x01, 0xcf, 0xcb, 0xe6, 0x48, 0x5d, 0xe0, 0x68, 0x04, 0x9f, - 0x2f, 0x62, 0x66, 0x97, 0x2e, 0xd2, 0xb9, 0x2e, 0x70, 0xd5, 0xef, 0x25, 0x80, 0x1d, 0xca, 0x2c, - 0xeb, 0x97, 0x8e, 0x3a, 0xcc, 0x4a, 0x30, 0x62, 0x3b, 0x57, 0x2e, 0x3a, 0x34, 0xb1, 0x7f, 0x1e, - 0x47, 0xeb, 0x6e, 0x42, 0x61, 0x26, 0x46, 0x8c, 0xa6, 0xc5, 0x9c, 0x93, 0x24, 0x9c, 0x40, 0x5d, - 0x44, 0xf4, 0xfc, 0x41, 0x64, 0x55, 0xfd, 0x45, 0x82, 0x2c, 0xab, 0x69, 0x17, 0x11, 0x33, 0x76, - 0x86, 0xd2, 0xeb, 0x9f, 0xe1, 0x1a, 0x00, 0x4f, 0x83, 0xed, 0x27, 0x48, 0x28, 0x2b, 0xcb, 0x2c, - 0x5d, 0xfb, 0x09, 0x52, 0x3e, 0x0a, 0x09, 0x4f, 0xfe, 0x3b, 0xe1, 0xe2, 0x8e, 0x98, 0xd2, 0x7e, - 0x05, 0xd2, 0xee, 0x64, 0x6c, 0xd0, 0xb9, 0x23, 0x73, 0xb5, 0xba, 0x93, 0x71, 0xef, 0x10, 0x57, - 0xbf, 0x86, 0x74, 0xef, 0x90, 0x7d, 0x83, 0x51, 0x89, 0x06, 0x9e, 0x27, 0x06, 0x3f, 0xff, 0xe0, - 0xca, 0x50, 0x03, 0x9b, 0x73, 0x0a, 0xc8, 0x74, 0xc2, 0x4f, 0x47, 0x14, 0x7d, 0x56, 0xb4, 0x57, - 0xfc, 0xba, 0x13, 0xdf, 0x75, 0x37, 0x7f, 0x95, 0x20, 0x17, 0xb9, 0x1f, 0x94, 0x0f, 0xe0, 0x52, - 0x63, 0x67, 0xaf, 0xf9, 0xc0, 0x68, 0x6d, 0x19, 0x77, 0x77, 0xea, 0xf7, 0x8c, 0x87, 0xed, 0x07, - 0xed, 0xbd, 0x2f, 0xda, 0xc5, 0x85, 0xf2, 0xe5, 0xe3, 0x13, 0x55, 0x89, 0x60, 0x1f, 0xba, 0x8f, - 0x5d, 0xef, 0x1b, 0x57, 0xa9, 0xc1, 0x6a, 0x3c, 0xa4, 0xde, 0xe8, 0x6e, 0xb7, 0x7b, 0x45, 0xa9, - 0x7c, 0xe9, 0xf8, 0x44, 0x5d, 0x89, 0x44, 0xd4, 0xfb, 0x18, 0xb9, 0x64, 0x3e, 0xa0, 0xb9, 0xb7, - 0xbb, 0xdb, 0xea, 0x15, 0x13, 0x73, 0x01, 0x62, 0x02, 0xdc, 0x80, 0x95, 0x78, 0x40, 0xbb, 0xb5, - 0x53, 0x4c, 0x96, 0x95, 0xe3, 0x13, 0x75, 0x29, 0x82, 0x6e, 0xdb, 0x4e, 0x39, 0xf3, 0xed, 0x0f, - 0x95, 0x85, 0x9f, 0x7e, 0xac, 0x48, 0xb4, 0xb3, 0x42, 0xec, 0x8e, 0x50, 0x6e, 0xc1, 0x95, 0x6e, - 0xeb, 0x5e, 0x7b, 0x7b, 0xcb, 0xd8, 0xed, 0xde, 0x33, 0x7a, 0x5f, 0x76, 0xb6, 0x23, 0xdd, 0x2d, - 0x1f, 0x9f, 0xa8, 0x39, 0xd1, 0xd2, 0x45, 0xe8, 0x8e, 0xbe, 0xbd, 0xbf, 0xd7, 0xdb, 0x2e, 0x4a, - 0x1c, 0xdd, 0x09, 0xd0, 0x81, 0x47, 0x10, 0x43, 0xdf, 0x86, 0xab, 0xe7, 0xa0, 0xc3, 0xc6, 0x56, - 0x8e, 0x4f, 0xd4, 0x42, 0x27, 0x40, 0xfc, 0xfd, 0x61, 0x11, 0x1a, 0x94, 0xe6, 0x23, 0xf6, 0x3a, - 0x7b, 0xdd, 0xfa, 0x4e, 0x51, 0x2d, 0x17, 0x8f, 0x4f, 0xd4, 0xfc, 0xf4, 0x32, 0xa4, 0xf8, 0x59, - 0x67, 0x8d, 0xfd, 0x67, 0xa7, 0x15, 0xe9, 0xf9, 0x69, 0x45, 0xfa, 0xf3, 0xb4, 0x22, 0x3d, 0x7d, - 0x59, 0x59, 0x78, 0xfe, 0xb2, 0xb2, 0xf0, 0xdb, 0xcb, 0xca, 0xc2, 0x57, 0x9f, 0x0d, 0x6d, 0x32, - 0x9a, 0xf4, 0xb5, 0x81, 0x37, 0xae, 0x39, 0xe6, 0x93, 0x23, 0x07, 0x59, 0x43, 0x14, 0x44, 0x1e, - 0xdf, 0x1f, 0x78, 0x81, 0xf8, 0x37, 0x54, 0x3b, 0xfb, 0xc7, 0xa4, 0xbf, 0xc8, 0xec, 0x77, 0xfe, - 0x09, 0x00, 0x00, 0xff, 0xff, 0xac, 0x17, 0xba, 0x04, 0x7b, 0x0d, 0x00, 0x00, + // 1383 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x4f, 0x73, 0xdb, 0x44, + 0x14, 0x8f, 0x6c, 0x39, 0xb6, 0x9f, 0xed, 0xc4, 0xd1, 0xa4, 0xad, 0xeb, 0x36, 0x8e, 0xc6, 0x0c, + 0x90, 0x16, 0x90, 0x4b, 0x0a, 0x0c, 0x0c, 0x70, 0xb0, 0x9d, 0xb4, 0xf5, 0x34, 0x71, 0x3c, 0xb2, + 0x1b, 0x06, 0x2e, 0x1a, 0xd9, 0xda, 0xda, 0xa2, 0xb2, 0xa4, 0xd1, 0xae, 0x43, 0xd2, 0x4f, 0xc0, + 0xe4, 0x54, 0x2e, 0xdc, 0x72, 0x82, 0x03, 0x77, 0xbe, 0x01, 0xa7, 0x1e, 0x7b, 0x83, 0x0b, 0x85, + 0x49, 0x67, 0x18, 0x3e, 0x06, 0xb3, 0x7f, 0x2c, 0x4b, 0x71, 0x02, 0x9d, 0x4e, 0x87, 0x8b, 0x47, + 0xfb, 0xde, 0xef, 0xbd, 0x7d, 0xef, 0xb7, 0x3f, 0xed, 0x93, 0xe1, 0x3a, 0x41, 0xae, 0x85, 0x82, + 0xb1, 0xed, 0x92, 0x1a, 0x39, 0xf2, 0x11, 0xe6, 0xbf, 0x9a, 0x1f, 0x78, 0xc4, 0x53, 0x8a, 0x33, + 0xaf, 0xc6, 0xec, 0xe5, 0xd5, 0xa1, 0x37, 0xf4, 0x98, 0xb3, 0x46, 0x9f, 0x38, 0xae, 0xbc, 0x3e, + 0xf4, 0xbc, 0xa1, 0x83, 0x6a, 0x6c, 0xd5, 0x9f, 0x3c, 0xac, 0x11, 0x7b, 0x8c, 0x30, 0x31, 0xc7, + 0xbe, 0x00, 0xa8, 0x91, 0x6d, 0x1c, 0xbb, 0x8f, 0x6b, 0x7d, 0x9b, 0xc4, 0xb6, 0x2a, 0xaf, 0x45, + 0x10, 0x83, 0xe0, 0xc8, 0x27, 0x1e, 0xcd, 0xe6, 0x3d, 0x14, 0xee, 0x4a, 0xc4, 0x7d, 0x80, 0x02, + 0x6c, 0x7b, 0x6e, 0x2c, 0x5c, 0x9d, 0xeb, 0xe3, 0xc0, 0x74, 0x6c, 0xcb, 0x24, 0x5e, 0xc0, 0x11, + 0xd5, 0x4f, 0xa0, 0xd0, 0x31, 0x03, 0xd2, 0x45, 0xe4, 0x1e, 0x32, 0x2d, 0x14, 0x28, 0xab, 0x90, + 0x22, 0x1e, 0x31, 0x9d, 0x92, 0xa4, 0x4a, 0x1b, 0x05, 0x9d, 0x2f, 0x14, 0x05, 0xe4, 0x91, 0x89, + 0x47, 0xa5, 0x84, 0x2a, 0x6d, 0xe4, 0x75, 0xf6, 0x5c, 0x1d, 0x81, 0x4c, 0x43, 0x69, 0x84, 0xed, + 0x5a, 0xe8, 0x70, 0x1a, 0xc1, 0x16, 0xd4, 0xda, 0x3f, 0x22, 0x08, 0x8b, 0x10, 0xbe, 0x50, 0x3e, + 0x80, 0x14, 0xab, 0xbf, 0x94, 0x54, 0xa5, 0x8d, 0xdc, 0x66, 0x49, 0x8b, 0x50, 0xc9, 0xfb, 0xd3, + 0x3a, 0xd4, 0xdf, 0x90, 0x9f, 0x3e, 0x5f, 0x5f, 0xd0, 0x39, 0xb8, 0xea, 0x40, 0xba, 0xe1, 0x78, + 0x83, 0x47, 0xad, 0xad, 0xb0, 0x10, 0x69, 0x56, 0x88, 0xb2, 0x0b, 0xcb, 0xbe, 0x19, 0x10, 0x03, + 0x23, 0x62, 0x8c, 0x58, 0x17, 0x6c, 0xd3, 0xdc, 0xe6, 0xba, 0x76, 0xf6, 0xa4, 0xb4, 0x58, 0xb3, + 0x62, 0x97, 0x82, 0x1f, 0x35, 0x56, 0xff, 0x92, 0x61, 0x51, 0x90, 0xf1, 0x39, 0xa4, 0x05, 0xad, + 0x6c, 0xc3, 0xdc, 0xe6, 0x5a, 0x34, 0xa3, 0x70, 0x69, 0x4d, 0xcf, 0xc5, 0xc8, 0xc5, 0x13, 0x2c, + 0xf2, 0x4d, 0x63, 0x94, 0xb7, 0x20, 0x33, 0x18, 0x99, 0xb6, 0x6b, 0xd8, 0x16, 0xab, 0x28, 0xdb, + 0xc8, 0x9d, 0x3e, 0x5f, 0x4f, 0x37, 0xa9, 0xad, 0xb5, 0xa5, 0xa7, 0x99, 0xb3, 0x65, 0x29, 0x97, + 0x61, 0x71, 0x84, 0xec, 0xe1, 0x88, 0x30, 0x5a, 0x92, 0xba, 0x58, 0x29, 0x1f, 0x83, 0x4c, 0x25, + 0x53, 0x92, 0xd9, 0xde, 0x65, 0x8d, 0xeb, 0x49, 0x9b, 0xea, 0x49, 0xeb, 0x4d, 0xf5, 0xd4, 0xc8, + 0xd0, 0x8d, 0x9f, 0xfc, 0xb1, 0x2e, 0xe9, 0x2c, 0x42, 0x69, 0x42, 0xc1, 0x31, 0x31, 0x31, 0xfa, + 0x94, 0x36, 0xba, 0x7d, 0x8a, 0xa5, 0xb8, 0x3a, 0x4f, 0x88, 0x20, 0x56, 0x94, 0x9e, 0xa3, 0x51, + 0xdc, 0x64, 0x29, 0x1b, 0x50, 0x64, 0x49, 0x06, 0xde, 0x78, 0x6c, 0x13, 0x83, 0xf1, 0xbe, 0xc8, + 0x78, 0x5f, 0xa2, 0xf6, 0x26, 0x33, 0xdf, 0xa3, 0x27, 0x70, 0x0d, 0xb2, 0x96, 0x49, 0x4c, 0x0e, + 0x49, 0x33, 0x48, 0x86, 0x1a, 0x98, 0xf3, 0x6d, 0x58, 0x0e, 0x55, 0x87, 0x39, 0x24, 0xc3, 0xb3, + 0xcc, 0xcc, 0x0c, 0x78, 0x0b, 0x56, 0x5d, 0x74, 0x48, 0x8c, 0xb3, 0xe8, 0x2c, 0x43, 0x2b, 0xd4, + 0xb7, 0x1f, 0x8f, 0x78, 0x13, 0x96, 0x06, 0x53, 0xf2, 0x39, 0x16, 0x18, 0xb6, 0x10, 0x5a, 0x19, + 0xec, 0x2a, 0x64, 0x4c, 0xdf, 0xe7, 0x80, 0x1c, 0x03, 0xa4, 0x4d, 0xdf, 0x67, 0xae, 0x9b, 0xb0, + 0xc2, 0x7a, 0x0c, 0x10, 0x9e, 0x38, 0x44, 0x24, 0xc9, 0x33, 0xcc, 0x32, 0x75, 0xe8, 0xdc, 0xce, + 0xb0, 0x6f, 0x40, 0x01, 0x1d, 0xd8, 0x16, 0x72, 0x07, 0x88, 0xe3, 0x0a, 0x0c, 0x97, 0x9f, 0x1a, + 0x19, 0xe8, 0x06, 0x14, 0xfd, 0xc0, 0xf3, 0x3d, 0x8c, 0x02, 0xc3, 0xb4, 0xac, 0x00, 0x61, 0x5c, + 0x5a, 0xe2, 0xf9, 0xa6, 0xf6, 0x3a, 0x37, 0x57, 0x3f, 0x04, 0x79, 0xcb, 0x24, 0xa6, 0x52, 0x84, + 0x24, 0x39, 0xc4, 0x25, 0x49, 0x4d, 0x6e, 0xe4, 0x75, 0xfa, 0x48, 0xf9, 0x1c, 0x23, 0x62, 0x1a, + 0x94, 0x43, 0xf1, 0x02, 0x65, 0xa8, 0x81, 0xc2, 0xab, 0x7f, 0x27, 0x40, 0xde, 0xf7, 0x08, 0x52, + 0x6e, 0x83, 0x4c, 0xcf, 0x90, 0x49, 0x73, 0xe9, 0x3c, 0xb1, 0x77, 0xed, 0xa1, 0x8b, 0xac, 0x5d, + 0x3c, 0xec, 0x1d, 0xf9, 0x48, 0x67, 0xe0, 0x88, 0xd6, 0x12, 0x31, 0xad, 0xad, 0x42, 0x2a, 0xf0, + 0x26, 0xae, 0xc5, 0x24, 0x98, 0xd2, 0xf9, 0x42, 0xd9, 0x86, 0x4c, 0x28, 0x21, 0xf9, 0xbf, 0x24, + 0xb4, 0x4c, 0x25, 0x44, 0x05, 0x2e, 0x0c, 0x7a, 0xba, 0x2f, 0x94, 0xd4, 0x80, 0x6c, 0x78, 0xf7, + 0x09, 0x29, 0xbe, 0x9c, 0x9a, 0x67, 0x61, 0xca, 0x3b, 0xb0, 0x12, 0x0a, 0x23, 0x64, 0x96, 0xcb, + 0xb1, 0x18, 0x3a, 0x04, 0xb5, 0x31, 0xcd, 0x19, 0xfc, 0x76, 0x4a, 0xb3, 0xbe, 0x66, 0x9a, 0x6b, + 0xb1, 0x6b, 0xea, 0x3a, 0x64, 0xb1, 0x3d, 0x74, 0x4d, 0x32, 0x09, 0x90, 0x90, 0xe5, 0xcc, 0x50, + 0xfd, 0x2e, 0x01, 0x8b, 0x5c, 0xe6, 0x11, 0xde, 0xa4, 0xf3, 0x79, 0x4b, 0x5c, 0xc4, 0x5b, 0xf2, + 0xd5, 0x79, 0xab, 0x03, 0x84, 0xc5, 0xe0, 0x92, 0xac, 0x26, 0x37, 0x72, 0x9b, 0xd7, 0xe6, 0x13, + 0xf1, 0x12, 0xbb, 0xf6, 0x50, 0xbc, 0xc5, 0x91, 0xa0, 0xf0, 0xc2, 0x4c, 0x45, 0x2e, 0xcc, 0x4f, + 0x21, 0xdb, 0xb7, 0x89, 0x61, 0x06, 0x81, 0x79, 0xc4, 0x28, 0xcc, 0x6d, 0x56, 0xa2, 0x59, 0xe9, + 0x2c, 0xd2, 0xe8, 0x2c, 0xd2, 0x1a, 0x36, 0xa9, 0x53, 0x94, 0x9e, 0xe9, 0x8b, 0xa7, 0xea, 0xef, + 0x12, 0x64, 0xc3, 0x0d, 0x95, 0x3a, 0x14, 0xa6, 0x8d, 0x1a, 0x0f, 0x1d, 0x73, 0x28, 0xc4, 0xb8, + 0x76, 0x61, 0xb7, 0x77, 0x1c, 0x73, 0xa8, 0xe7, 0x44, 0x83, 0x74, 0x71, 0xfe, 0xc1, 0x26, 0x2e, + 0x38, 0xd8, 0x98, 0x92, 0x92, 0xaf, 0xa6, 0xa4, 0xd8, 0x99, 0xcb, 0x67, 0xcf, 0xfc, 0xe7, 0x04, + 0x64, 0x3a, 0xec, 0x4d, 0x35, 0x9d, 0xff, 0xe3, 0x15, 0xbb, 0x06, 0x59, 0xdf, 0x73, 0x0c, 0xee, + 0x91, 0x99, 0x27, 0xe3, 0x7b, 0x8e, 0x3e, 0xa7, 0xa3, 0xd4, 0x6b, 0x7a, 0xff, 0x16, 0x5f, 0x03, + 0x6b, 0xe9, 0xb3, 0xac, 0x05, 0x90, 0xe7, 0x54, 0x88, 0xc9, 0x79, 0x8b, 0x72, 0xc0, 0x46, 0xb1, + 0x34, 0x3f, 0xe9, 0x79, 0xd9, 0x1c, 0xa9, 0x0b, 0x1c, 0x8d, 0xe0, 0x83, 0x46, 0x0c, 0xef, 0xd2, + 0x45, 0x3a, 0xd7, 0x05, 0xae, 0xfa, 0xbd, 0x04, 0xb0, 0x43, 0x99, 0x65, 0xfd, 0xd2, 0x99, 0x87, + 0x59, 0x09, 0x46, 0x6c, 0xe7, 0xca, 0x45, 0x87, 0x26, 0xf6, 0xcf, 0xe3, 0x68, 0xdd, 0x4d, 0x28, + 0xcc, 0xc4, 0x88, 0xd1, 0xb4, 0x98, 0x73, 0x92, 0x84, 0xa3, 0xa8, 0x8b, 0x88, 0x9e, 0x3f, 0x88, + 0xac, 0xaa, 0xbf, 0x48, 0x90, 0x65, 0x35, 0xed, 0x22, 0x62, 0xc6, 0xce, 0x50, 0x7a, 0xf5, 0x33, + 0x5c, 0x03, 0xe0, 0x69, 0xb0, 0xfd, 0x18, 0x09, 0x65, 0x65, 0x99, 0xa5, 0x6b, 0x3f, 0x46, 0xca, + 0x47, 0x21, 0xe1, 0xc9, 0x7f, 0x27, 0x5c, 0xdc, 0x11, 0x53, 0xda, 0xaf, 0x40, 0xda, 0x9d, 0x8c, + 0x0d, 0x3a, 0x80, 0x64, 0xae, 0x56, 0x77, 0x32, 0xee, 0x1d, 0xe2, 0xea, 0xd7, 0x90, 0xee, 0x1d, + 0xb2, 0x8f, 0x31, 0x2a, 0xd1, 0xc0, 0xf3, 0xc4, 0x17, 0x00, 0xff, 0xf2, 0xca, 0x50, 0x03, 0x1b, + 0x78, 0x0a, 0xc8, 0x91, 0x31, 0xc5, 0x9e, 0x15, 0xed, 0x25, 0x3f, 0xf3, 0xc4, 0x07, 0xde, 0xcd, + 0x5f, 0x25, 0xc8, 0x45, 0xee, 0x07, 0xe5, 0x7d, 0xb8, 0xd4, 0xd8, 0xd9, 0x6b, 0xde, 0x37, 0x5a, + 0x5b, 0xc6, 0x9d, 0x9d, 0xfa, 0x5d, 0xe3, 0x41, 0xfb, 0x7e, 0x7b, 0xef, 0x8b, 0x76, 0x71, 0xa1, + 0x7c, 0xf9, 0xf8, 0x44, 0x55, 0x22, 0xd8, 0x07, 0xee, 0x23, 0xd7, 0xfb, 0xc6, 0x55, 0x6a, 0xb0, + 0x1a, 0x0f, 0xa9, 0x37, 0xba, 0xdb, 0xed, 0x5e, 0x51, 0x2a, 0x5f, 0x3a, 0x3e, 0x51, 0x57, 0x22, + 0x11, 0xf5, 0x3e, 0x46, 0x2e, 0x99, 0x0f, 0x68, 0xee, 0xed, 0xee, 0xb6, 0x7a, 0xc5, 0xc4, 0x5c, + 0x80, 0x98, 0x00, 0x37, 0x60, 0x25, 0x1e, 0xd0, 0x6e, 0xed, 0x14, 0x93, 0x65, 0xe5, 0xf8, 0x44, + 0x5d, 0x8a, 0xa0, 0xdb, 0xb6, 0x53, 0xce, 0x7c, 0xfb, 0x43, 0x65, 0xe1, 0xa7, 0x1f, 0x2b, 0x12, + 0xed, 0xac, 0x10, 0xbb, 0x23, 0x94, 0x77, 0xe1, 0x4a, 0xb7, 0x75, 0xb7, 0xbd, 0xbd, 0x65, 0xec, + 0x76, 0xef, 0x1a, 0xbd, 0x2f, 0x3b, 0xdb, 0x91, 0xee, 0x96, 0x8f, 0x4f, 0xd4, 0x9c, 0x68, 0xe9, + 0x22, 0x74, 0x47, 0xdf, 0xde, 0xdf, 0xeb, 0x6d, 0x17, 0x25, 0x8e, 0xee, 0x04, 0xe8, 0xc0, 0x23, + 0x88, 0xa1, 0x6f, 0xc1, 0xd5, 0x73, 0xd0, 0x61, 0x63, 0x2b, 0xc7, 0x27, 0x6a, 0xa1, 0x13, 0x20, + 0xfe, 0xfe, 0xb0, 0x08, 0x0d, 0x4a, 0xf3, 0x11, 0x7b, 0x9d, 0xbd, 0x6e, 0x7d, 0xa7, 0xa8, 0x96, + 0x8b, 0xc7, 0x27, 0x6a, 0x7e, 0x7a, 0x19, 0x52, 0xfc, 0xac, 0xb3, 0xc6, 0xfe, 0xd3, 0xd3, 0x8a, + 0xf4, 0xec, 0xb4, 0x22, 0xfd, 0x79, 0x5a, 0x91, 0x9e, 0xbc, 0xa8, 0x2c, 0x3c, 0x7b, 0x51, 0x59, + 0xf8, 0xed, 0x45, 0x65, 0xe1, 0xab, 0xcf, 0x86, 0x36, 0x19, 0x4d, 0xfa, 0xda, 0xc0, 0x1b, 0xd7, + 0x1c, 0xf3, 0xf1, 0x91, 0x83, 0xac, 0x21, 0x0a, 0x22, 0x8f, 0xef, 0x0d, 0xbc, 0x40, 0xfc, 0x2d, + 0xaa, 0x9d, 0xfd, 0x87, 0xd2, 0x5f, 0x64, 0xf6, 0xdb, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x36, + 0x6d, 0x28, 0x87, 0x84, 0x0d, 0x00, 0x00, } func (m *PartSetHeader) Marshal() (dAtA []byte, err error) { @@ -1430,10 +1430,10 @@ func (m *Data) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Hash) > 0 { - i -= len(m.Hash) - copy(dAtA[i:], m.Hash) - i = encodeVarintTypes(dAtA, i, uint64(len(m.Hash))) + if len(m.MetaData) > 0 { + i -= len(m.MetaData) + copy(dAtA[i:], m.MetaData) + i = encodeVarintTypes(dAtA, i, uint64(len(m.MetaData))) i-- dAtA[i] = 0x12 } @@ -2044,7 +2044,7 @@ func (m *Data) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } - l = len(m.Hash) + l = len(m.MetaData) if l > 0 { n += 1 + l + sovTypes(uint64(l)) } @@ -3183,7 +3183,7 @@ func (m *Data) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Hash", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MetaData", wireType) } var byteLen int for shift := uint(0); ; shift += 7 { @@ -3210,9 +3210,9 @@ func (m *Data) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Hash = append(m.Hash[:0], dAtA[iNdEx:postIndex]...) - if m.Hash == nil { - m.Hash = []byte{} + m.MetaData = append(m.MetaData[:0], dAtA[iNdEx:postIndex]...) + if m.MetaData == nil { + m.MetaData = []byte{} } iNdEx = postIndex default: diff --git a/proto/tendermint/types/types.proto b/proto/tendermint/types/types.proto index 50fc72d62a..6ecd69aab9 100644 --- a/proto/tendermint/types/types.proto +++ b/proto/tendermint/types/types.proto @@ -88,8 +88,8 @@ message Data { // NOTE: not all txs here are valid. We're just agreeing on the order first. // This means that block.AppHash does not include these txs. repeated bytes txs = 1; - // Volatile - bytes hash = 2; + + bytes meta_data = 2; } // Vote represents a prevote, precommit, or commit vote from validators for diff --git a/types/block.go b/types/block.go index e58932fb30..a4da385827 100644 --- a/types/block.go +++ b/types/block.go @@ -1083,9 +1083,7 @@ func (data *Data) ToProto() tmproto.Data { tp.Txs = txBzs } - if data.hash != nil { - tp.Hash = data.hash - } + tp.MetaData = data.MetaData return *tp } From c5271589968140e8a8186b82f8f67f9042532665 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Mon, 19 Oct 2020 18:29:09 +0200 Subject: [PATCH 20/32] regenerate mocks --- abci/client/client.go | 2 +- abci/client/mocks/client.go | 41 ++++++++++++++++++++++++++++++- blockchain/msgs_test.go | 2 +- evidence/mocks/block_store.go | 2 +- p2p/mocks/peer.go | 2 +- proxy/mocks/app_conn_consensus.go | 2 +- proxy/mocks/app_conn_mempool.go | 2 +- proxy/mocks/app_conn_query.go | 2 +- proxy/mocks/app_conn_snapshot.go | 2 +- state/execution.go | 6 +++-- state/mocks/evidence_pool.go | 2 +- statesync/mocks/state_provider.go | 2 +- types/block.go | 2 +- types/block_test.go | 2 -- 14 files changed, 55 insertions(+), 16 deletions(-) diff --git a/abci/client/client.go b/abci/client/client.go index 5f1b215581..fc9856de29 100644 --- a/abci/client/client.go +++ b/abci/client/client.go @@ -19,7 +19,7 @@ const ( // All `Sync` methods return the appropriate protobuf ResponseXxx struct and an error. // Note these are client errors, eg. ABCI socket connectivity issues. // Application-related errors are reflected in response via ABCI error codes and logs. -//go:generate mockery -case underscore -name Client +//go:generate mockery --case underscore --name Client type Client interface { service.Service diff --git a/abci/client/mocks/client.go b/abci/client/mocks/client.go index 6baded732f..4894217c0a 100644 --- a/abci/client/mocks/client.go +++ b/abci/client/mocks/client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v1.1.1. DO NOT EDIT. +// Code generated by mockery v2.3.0. DO NOT EDIT. package mocks @@ -575,6 +575,45 @@ func (_m *Client) OnStop() { _m.Called() } +// PreprocessTxsAsync provides a mock function with given fields: _a0 +func (_m *Client) PreprocessTxsAsync(_a0 types.RequestPreprocessTxs) *abcicli.ReqRes { + ret := _m.Called(_a0) + + var r0 *abcicli.ReqRes + if rf, ok := ret.Get(0).(func(types.RequestPreprocessTxs) *abcicli.ReqRes); ok { + r0 = rf(_a0) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*abcicli.ReqRes) + } + } + + return r0 +} + +// PreprocessTxsSync provides a mock function with given fields: _a0 +func (_m *Client) PreprocessTxsSync(_a0 types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) { + ret := _m.Called(_a0) + + var r0 *types.ResponsePreprocessTxs + if rf, ok := ret.Get(0).(func(types.RequestPreprocessTxs) *types.ResponsePreprocessTxs); ok { + r0 = rf(_a0) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*types.ResponsePreprocessTxs) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(types.RequestPreprocessTxs) error); ok { + r1 = rf(_a0) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // QueryAsync provides a mock function with given fields: _a0 func (_m *Client) QueryAsync(_a0 types.RequestQuery) *abcicli.ReqRes { ret := _m.Called(_a0) diff --git a/blockchain/msgs_test.go b/blockchain/msgs_test.go index df25f49323..d8041634e7 100644 --- a/blockchain/msgs_test.go +++ b/blockchain/msgs_test.go @@ -96,7 +96,7 @@ func TestBlockchainMessageVectors(t *testing.T) { BlockRequest: &bcproto.BlockRequest{Height: math.MaxInt64}}}, "0a0a08ffffffffffffffff7f"}, {"BlockResponseMessage", &bcproto.Message{Sum: &bcproto.Message_BlockResponse{ - BlockResponse: &bcproto.BlockResponse{Block: bpb}}}, "1ab3010ab0010a590a001803220b088092b8c398feffffff012a0212003a20c4da88e876062aa1543400d50d0eaa0dac88096057949cfb7bca7f3a48c04bf96a20e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855122f0a0b48656c6c6f20576f726c641220c4da88e876062aa1543400d50d0eaa0dac88096057949cfb7bca7f3a48c04bf91a221220e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}, + BlockResponse: &bcproto.BlockResponse{Block: bpb}}}, "1a98010a95010a590a001803220b088092b8c398feffffff012a0212003a20c4da88e876062aa1543400d50d0eaa0dac88096057949cfb7bca7f3a48c04bf96a20e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85512140a0b48656c6c6f20576f726c64120570726f6f661a221220e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}, {"NoBlockResponseMessage", &bcproto.Message{Sum: &bcproto.Message_NoBlockResponse{ NoBlockResponse: &bcproto.NoBlockResponse{Height: 1}}}, "12020801"}, {"NoBlockResponseMessage", &bcproto.Message{Sum: &bcproto.Message_NoBlockResponse{ diff --git a/evidence/mocks/block_store.go b/evidence/mocks/block_store.go index 568a5a2403..0c41f03500 100644 --- a/evidence/mocks/block_store.go +++ b/evidence/mocks/block_store.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.2.1. DO NOT EDIT. +// Code generated by mockery v2.3.0. DO NOT EDIT. package mocks diff --git a/p2p/mocks/peer.go b/p2p/mocks/peer.go index 2dc1b2184b..ae6bb3eddf 100644 --- a/p2p/mocks/peer.go +++ b/p2p/mocks/peer.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.2.1. DO NOT EDIT. +// Code generated by mockery v2.3.0. DO NOT EDIT. package mocks diff --git a/proxy/mocks/app_conn_consensus.go b/proxy/mocks/app_conn_consensus.go index 3973d63cc0..bc293344b8 100644 --- a/proxy/mocks/app_conn_consensus.go +++ b/proxy/mocks/app_conn_consensus.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.2.1. DO NOT EDIT. +// Code generated by mockery v2.3.0. DO NOT EDIT. package mocks diff --git a/proxy/mocks/app_conn_mempool.go b/proxy/mocks/app_conn_mempool.go index d799bc9c2a..1e208d18c1 100644 --- a/proxy/mocks/app_conn_mempool.go +++ b/proxy/mocks/app_conn_mempool.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.2.1. DO NOT EDIT. +// Code generated by mockery v2.3.0. DO NOT EDIT. package mocks diff --git a/proxy/mocks/app_conn_query.go b/proxy/mocks/app_conn_query.go index 78bd0bfb49..ac1044a1f4 100644 --- a/proxy/mocks/app_conn_query.go +++ b/proxy/mocks/app_conn_query.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.2.1. DO NOT EDIT. +// Code generated by mockery v2.3.0. DO NOT EDIT. package mocks diff --git a/proxy/mocks/app_conn_snapshot.go b/proxy/mocks/app_conn_snapshot.go index 95b321c090..329b0145b3 100644 --- a/proxy/mocks/app_conn_snapshot.go +++ b/proxy/mocks/app_conn_snapshot.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.2.1. DO NOT EDIT. +// Code generated by mockery v2.3.0. DO NOT EDIT. package mocks diff --git a/state/execution.go b/state/execution.go index 61e6419f44..ac1e0f923c 100644 --- a/state/execution.go +++ b/state/execution.go @@ -124,8 +124,10 @@ func (blockExec *BlockExecutor) CreateProposalBlock( lp := len(ppt) processedTxs := make(types.Txs, lp) - for i := 0; i < l; i++ { - processedTxs[i] = ppt[i] + if lp > 0 { + for i := 0; i < l; i++ { + processedTxs[i] = ppt[i] + } } return state.MakeBlock(height, processedTxs, metaData, commit, evidence, proposerAddr) diff --git a/state/mocks/evidence_pool.go b/state/mocks/evidence_pool.go index 5b3d7c4909..bbfa1bf24d 100644 --- a/state/mocks/evidence_pool.go +++ b/state/mocks/evidence_pool.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.2.1. DO NOT EDIT. +// Code generated by mockery v2.3.0. DO NOT EDIT. package mocks diff --git a/statesync/mocks/state_provider.go b/statesync/mocks/state_provider.go index 5e96e39b98..a03c821a90 100644 --- a/statesync/mocks/state_provider.go +++ b/statesync/mocks/state_provider.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.2.1. DO NOT EDIT. +// Code generated by mockery v2.3.0. DO NOT EDIT. package mocks diff --git a/types/block.go b/types/block.go index a4da385827..8979a8566e 100644 --- a/types/block.go +++ b/types/block.go @@ -1106,7 +1106,7 @@ func DataFromProto(dp *tmproto.Data) (Data, error) { data.Txs = Txs{} } - data.hash = dp.Hash + data.MetaData = dp.MetaData return *data, nil } diff --git a/types/block_test.go b/types/block_test.go index 8da45c5ef9..bf94cd3c78 100644 --- a/types/block_test.go +++ b/types/block_test.go @@ -626,9 +626,7 @@ func TestBlockProtoBuf(t *testing.T) { func TestDataProtoBuf(t *testing.T) { data := &Data{Txs: Txs{Tx([]byte{1}), Tx([]byte{2}), Tx([]byte{3})}} - _ = data.Hash() data2 := &Data{Txs: Txs{}} - _ = data2.Hash() testCases := []struct { msg string data1 *Data From ff4be69eef764a372028358e812595373a02dd60 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Mon, 16 Nov 2020 18:35:44 +0100 Subject: [PATCH 21/32] fix makeblock calls --- blockchain/msgs_test.go | 2 +- evidence/verify_test.go | 8 ++++---- state/helpers_test.go | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/blockchain/msgs_test.go b/blockchain/msgs_test.go index 96dca197af..073c1ba3ad 100644 --- a/blockchain/msgs_test.go +++ b/blockchain/msgs_test.go @@ -97,7 +97,7 @@ func TestBlockchainMessageVectors(t *testing.T) { BlockRequest: &bcproto.BlockRequest{Height: math.MaxInt64}}}, "0a0a08ffffffffffffffff7f"}, {"BlockResponseMessage", &bcproto.Message{Sum: &bcproto.Message_BlockResponse{ - BlockResponse: &bcproto.BlockResponse{Block: bpb}}}, "1ac0020abd020a5b0a02080b1803220b088092b8c398feffffff012a0212003a20ba28ef83fed712be8a128587469a4effda9f4f4895bd5638dab1f10775c9bed66a20e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85512130a0b48656c6c6f20576f726c6412001a0022001ac8010a300000000000000001000000000000000119251d276ad8a1831db7b86ead3f42c4e03093d50ecf026da7ecc3b0da8ec87d0a30ffffffffffffffffffffffffffffffff12d55aea72367d0d6a7899103a437c913ee5a6f9e86f42e0fe8743b0d8d3a1e812300000000000000001000000000000000119251d276ad8a1831db7b86ead3f42c4e03093d50ecf026da7ecc3b0da8ec87d1230ffffffffffffffffffffffffffffffff12d55aea72367d0d6a7899103a437c913ee5a6f9e86f42e0fe8743b0d8d3a1e8"}, + BlockResponse: &bcproto.BlockResponse{Block: bpb}}}, "1ac0020abd020a5b0a02080b1803220b088092b8c398feffffff012a0212003a20ba28ef83fed712be8a128587469a4effda9f4f4895bd5638dab1f10775c9bed66a20e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85512130a0b48656c6c6f20576f726c641a0022002a001ac8010a300000000000000001000000000000000119251d276ad8a1831db7b86ead3f42c4e03093d50ecf026da7ecc3b0da8ec87d0a30ffffffffffffffffffffffffffffffff12d55aea72367d0d6a7899103a437c913ee5a6f9e86f42e0fe8743b0d8d3a1e812300000000000000001000000000000000119251d276ad8a1831db7b86ead3f42c4e03093d50ecf026da7ecc3b0da8ec87d1230ffffffffffffffffffffffffffffffff12d55aea72367d0d6a7899103a437c913ee5a6f9e86f42e0fe8743b0d8d3a1e8"}, {"NoBlockResponseMessage", &bcproto.Message{Sum: &bcproto.Message_NoBlockResponse{ NoBlockResponse: &bcproto.NoBlockResponse{Height: 1}}}, "12020801"}, {"NoBlockResponseMessage", &bcproto.Message{Sum: &bcproto.Message_NoBlockResponse{ diff --git a/evidence/verify_test.go b/evidence/verify_test.go index 1731111012..e6c50d2217 100644 --- a/evidence/verify_test.go +++ b/evidence/verify_test.go @@ -108,7 +108,7 @@ func TestVerifyLightClientAttack_Lunatic(t *testing.T) { pubKey, err := newPrivVal.GetPubKey() require.NoError(t, err) lastCommit := makeCommit(state.LastBlockHeight, pubKey.Address()) - block := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, []types.Evidence{ev}, nil, nil, lastCommit) + block := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, nil, []types.Evidence{ev}, nil, nil, lastCommit) abciEv := pool.ABCIEvidence(block.Height, block.Evidence.Evidence) expectedAbciEv := make([]abci.Evidence, len(commonVals.Validators)) @@ -212,7 +212,7 @@ func TestVerifyLightClientAttack_Equivocation(t *testing.T) { pubKey, err := conflictingPrivVals[0].GetPubKey() require.NoError(t, err) lastCommit := makeCommit(state.LastBlockHeight, pubKey.Address()) - block := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, []types.Evidence{ev}, nil, nil, lastCommit) + block := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, nil, []types.Evidence{ev}, nil, nil, lastCommit) abciEv := pool.ABCIEvidence(block.Height, block.Evidence.Evidence) expectedAbciEv := make([]abci.Evidence, len(conflictingVals.Validators)-1) @@ -309,12 +309,12 @@ func TestVerifyLightClientAttack_Amnesia(t *testing.T) { pubKey, err := conflictingPrivVals[0].GetPubKey() require.NoError(t, err) lastCommit := makeCommit(state.LastBlockHeight, pubKey.Address()) - block := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, []types.Evidence{ev}, nil, nil, lastCommit) + block := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, nil, []types.Evidence{ev}, nil, nil, lastCommit) abciEv := pool.ABCIEvidence(block.Height, block.Evidence.Evidence) // as we are unable to find out which subset of validators in the commit were malicious, no information // is sent to the application. We expect the array to be empty - emptyEvidenceBlock := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, []types.Evidence{}, nil, nil, lastCommit) + emptyEvidenceBlock := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, nil, []types.Evidence{}, nil, nil, lastCommit) expectedAbciEv := pool.ABCIEvidence(emptyEvidenceBlock.Height, emptyEvidenceBlock.Evidence.Evidence) assert.Equal(t, expectedAbciEv, abciEv) diff --git a/state/helpers_test.go b/state/helpers_test.go index e2bc27d040..27b0a3b519 100644 --- a/state/helpers_test.go +++ b/state/helpers_test.go @@ -57,8 +57,8 @@ func makeAndApplyGoodBlock(state sm.State, height int64, lastCommit *types.Commi block, _ := state.MakeBlock( height, makeTxs(height), - evidence, nil, + evidence, nil, nil, lastCommit, From 91bf95314fa9fffce0ef3704f58fcd3a274380bf Mon Sep 17 00:00:00 2001 From: Marko Date: Fri, 11 Dec 2020 14:22:24 +0100 Subject: [PATCH 22/32] Apply suggestions from code review --- state/execution.go | 9 ++++++++- state/validation_test.go | 2 +- store/store_test.go | 2 +- types/block_test.go | 18 +++++++++--------- types/event_bus_test.go | 4 ++-- 5 files changed, 21 insertions(+), 14 deletions(-) diff --git a/state/execution.go b/state/execution.go index f7c7f0b0cd..338b905c9b 100644 --- a/state/execution.go +++ b/state/execution.go @@ -117,7 +117,14 @@ func (blockExec *BlockExecutor) CreateProposalBlock( for i := 0; i < l; i++ { bzs[i] = txs[i] } - +// TODO(ismail): + // 1. get those intermediate state roots & messages either from the + // mempool or from the abci-app + // 1.1 at this point we should now the square / block size: + // https://github.com/lazyledger/lazyledger-specs/blob/53e5f350838f1e0785ad670704bf91dac2f4f5a3/specs/block_proposer.md#deciding-on-a-block-size + // Here, we instead assume a fixed (max) square size instead. + // 2. feed them into MakeBlock below: + processedBlockTxs, err := blockExec.proxyApp.PreprocessTxsSync(abci.RequestPreprocessTxs{Txs: bzs}) if err != nil { panic(err) // TODO: what to do?? diff --git a/state/validation_test.go b/state/validation_test.go index a12ce9d401..b7e352068e 100644 --- a/state/validation_test.go +++ b/state/validation_test.go @@ -84,7 +84,7 @@ func TestValidateBlockHeader(t *testing.T) { Invalid blocks don't pass */ for _, tc := range testCases { - block, _ := state.MakeBlock(height, makeTxs(height), []byte("proof"), nil, nil, nil, lastCommit, proposerAddr) + block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, nil, nil, lastCommit, proposerAddr) tc.malleateBlock(block) err := blockExec.ValidateBlock(state, block) t.Logf("%s: %v", tc.name, err) diff --git a/store/store_test.go b/store/store_test.go index 3f71ffbd40..056b4163ac 100644 --- a/store/store_test.go +++ b/store/store_test.go @@ -50,7 +50,7 @@ func makeTxs(height int64) (txs []types.Tx) { } func makeBlock(height int64, state sm.State, lastCommit *types.Commit) *types.Block { - block, _ := state.MakeBlock(height, makeTxs(height), []byte("meta_data"), nil, nil, nil, lastCommit, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, nil, nil, lastCommit, state.Validators.GetProposer().Address) return block } diff --git a/types/block_test.go b/types/block_test.go index be2e30f299..ccbdaf8116 100644 --- a/types/block_test.go +++ b/types/block_test.go @@ -117,13 +117,13 @@ func TestBlockValidateBasic(t *testing.T) { func TestBlockHash(t *testing.T) { assert.Nil(t, (*Block)(nil).Hash()) - assert.Nil(t, MakeBlock(int64(3), []Tx{Tx("Hello World")}, []byte("proof"), nil, nil, nil, nil).Hash()) + assert.Nil(t, MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil, nil, nil, nil).Hash()) } func TestBlockMakePartSet(t *testing.T) { assert.Nil(t, (*Block)(nil).MakePartSet(2)) - partSet := MakeBlock(int64(3), []Tx{Tx("Hello World")}, []byte("proof"), nil, nil, nil, nil).MakePartSet(1024) + partSet := MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil, nil, nil, nil).MakePartSet(1024) assert.NotNil(t, partSet) assert.EqualValues(t, 1, partSet.Total()) } @@ -141,7 +141,7 @@ func TestBlockMakePartSetWithEvidence(t *testing.T) { ev := NewMockDuplicateVoteEvidenceWithValidator(h, time.Now(), vals[0], "block-test-chain") evList := []Evidence{ev} - partSet := MakeBlock(h, []Tx{Tx("Hello World")}, []byte("proof"), evList, nil, nil, commit).MakePartSet(512) + partSet := MakeBlock(h, []Tx{Tx("Hello World")}, nil, evList, nil, nil, commit).MakePartSet(512) assert.NotNil(t, partSet) assert.EqualValues(t, 5, partSet.Total()) } @@ -158,7 +158,7 @@ func TestBlockHashesTo(t *testing.T) { ev := NewMockDuplicateVoteEvidenceWithValidator(h, time.Now(), vals[0], "block-test-chain") evList := []Evidence{ev} - block := MakeBlock(h, []Tx{Tx("Hello World")}, []byte("proof"), evList, nil, nil, commit) + block := MakeBlock(h, []Tx{Tx("Hello World")}, nil, evList, nil, nil, commit) block.ValidatorsHash = valSet.Hash() assert.False(t, block.HashesTo([]byte{})) assert.False(t, block.HashesTo([]byte("something else"))) @@ -166,7 +166,7 @@ func TestBlockHashesTo(t *testing.T) { } func TestBlockSize(t *testing.T) { - size := MakeBlock(int64(3), []Tx{Tx("Hello World")}, []byte("proof"), nil, nil, nil, nil).Size() + size := MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil, nil, nil, nil).Size() if size <= 0 { t.Fatal("Size of the block is zero or negative") } @@ -177,7 +177,7 @@ func TestBlockString(t *testing.T) { assert.Equal(t, "nil-Block", (*Block)(nil).StringIndented("")) assert.Equal(t, "nil-Block", (*Block)(nil).StringShort()) - block := MakeBlock(int64(3), []Tx{Tx("Hello World")}, []byte("proof"), nil, nil, nil, nil) + block := MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil, nil, nil, nil) assert.NotEqual(t, "nil-Block", block.String()) assert.NotEqual(t, "nil-Block", block.StringIndented("")) assert.NotEqual(t, "nil-Block", block.StringShort()) @@ -649,17 +649,17 @@ func TestBlockIDValidateBasic(t *testing.T) { func TestBlockProtoBuf(t *testing.T) { h := tmrand.Int63() c1 := randCommit(time.Now()) - b1 := MakeBlock(h, []Tx{Tx([]byte{1})}, []byte("proof"), []Evidence{}, nil, nil, &Commit{Signatures: []CommitSig{}}) + b1 := MakeBlock(h, []Tx{Tx([]byte{1})}, nil, []Evidence{}, nil, nil, &Commit{Signatures: []CommitSig{}}) b1.ProposerAddress = tmrand.Bytes(crypto.AddressSize) - b2 := MakeBlock(h, []Tx{Tx([]byte{1})}, []byte("proof"), []Evidence{}, nil, nil, c1) + b2 := MakeBlock(h, []Tx{Tx([]byte{1})}, nil, []Evidence{}, nil, nil, c1) b2.ProposerAddress = tmrand.Bytes(crypto.AddressSize) evidenceTime := time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC) evi := NewMockDuplicateVoteEvidence(h, evidenceTime, "block-test-chain") b2.Evidence = EvidenceData{Evidence: EvidenceList{evi}} b2.EvidenceHash = b2.Evidence.Hash() - b3 := MakeBlock(h, []Tx{}, []byte("proof"), []Evidence{}, nil, nil, c1) + b3 := MakeBlock(h, []Tx{}, nil, []Evidence{}, nil, nil, c1) b3.ProposerAddress = tmrand.Bytes(crypto.AddressSize) testCases := []struct { msg string diff --git a/types/event_bus_test.go b/types/event_bus_test.go index 6126c530cd..cf5a30d011 100644 --- a/types/event_bus_test.go +++ b/types/event_bus_test.go @@ -75,7 +75,7 @@ func TestEventBusPublishEventNewBlock(t *testing.T) { } }) - block := MakeBlock(0, []Tx{}, []byte("proof"), []Evidence{}, nil, nil, nil) + block := MakeBlock(0, []Tx{}, nil, []Evidence{}, nil, nil, nil) resultBeginBlock := abci.ResponseBeginBlock{ Events: []abci.Event{ {Type: "testType", Attributes: []abci.EventAttribute{{Key: []byte("baz"), Value: []byte("1")}}}, @@ -234,7 +234,7 @@ func TestEventBusPublishEventNewBlockHeader(t *testing.T) { } }) - block := MakeBlock(0, []Tx{}, []byte("proof"), []Evidence{}, nil, nil, nil) + block := MakeBlock(0, []Tx{}, nil, []Evidence{}, nil, nil, nil) resultBeginBlock := abci.ResponseBeginBlock{ Events: []abci.Event{ {Type: "testType", Attributes: []abci.EventAttribute{{Key: []byte("baz"), Value: []byte("1")}}}, From a0deb45ff1d543c5f668b62d3920cb44822dbdcf Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 11 Dec 2020 15:41:15 +0100 Subject: [PATCH 23/32] fix rpc tests --- abci/example/kvstore/kvstore.go | 5 +++++ abci/example/kvstore/persistent_kvstore.go | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/abci/example/kvstore/kvstore.go b/abci/example/kvstore/kvstore.go index e23d41dc7c..80f11f6e6f 100644 --- a/abci/example/kvstore/kvstore.go +++ b/abci/example/kvstore/kvstore.go @@ -170,3 +170,8 @@ func (app *Application) Query(reqQuery types.RequestQuery) (resQuery types.Respo return resQuery } + +func (app *Application) PreprocessTxs( + req types.RequestPreprocessTxs) types.ResponsePreprocessTxs { + return types.ResponsePreprocessTxs{Txs: req.Txs} +} diff --git a/abci/example/kvstore/persistent_kvstore.go b/abci/example/kvstore/persistent_kvstore.go index b0952d0868..e06efb4c37 100644 --- a/abci/example/kvstore/persistent_kvstore.go +++ b/abci/example/kvstore/persistent_kvstore.go @@ -166,10 +166,9 @@ func (app *PersistentKVStoreApplication) ApplySnapshotChunk( return types.ResponseApplySnapshotChunk{Result: types.ResponseApplySnapshotChunk_ABORT} } -// TODO: add some funcality to test this func (app *PersistentKVStoreApplication) PreprocessTxs( req types.RequestPreprocessTxs) types.ResponsePreprocessTxs { - return types.ResponsePreprocessTxs{} + return types.ResponsePreprocessTxs{Txs: req.Txs} } //--------------------------------------------- From 2df2ba517e5a72766ef911dd03cecd86a5799ec6 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 11 Dec 2020 16:10:54 +0100 Subject: [PATCH 24/32] fix linting and ci errors --- .github/workflows/tests.yml | 46 +++++++++++++++++------------------ abci/client/socket_client.go | 4 ++- blockchain/v0/reactor_test.go | 3 ++- blockchain/v2/reactor_test.go | 3 ++- evidence/verify_test.go | 3 ++- state/execution.go | 5 ++-- store/store_test.go | 3 ++- 7 files changed, 37 insertions(+), 30 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5e5e75e256..fba5a9913d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -23,6 +23,9 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 5 steps: + - uses: actions/setup-go@v2 + with: + go-version: "1.15" - uses: actions/checkout@v2 - uses: technote-space/get-diff-action@v4 with: @@ -30,13 +33,10 @@ jobs: **/**.go go.mod go.sum - - name: Set GOBIN - run: | - echo "::add-path::$(go env GOPATH)/bin" - name: install run: make install install_abci if: "env.GIT_DIFF != ''" - - uses: actions/cache@v2.1.2 + - uses: actions/cache@v2.1.3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} @@ -44,7 +44,7 @@ jobs: ${{ runner.os }}-go- if: env.GIT_DIFF # Cache binaries for use by other jobs - - uses: actions/cache@v2.1.2 + - uses: actions/cache@v2.1.3 with: path: ~/go/bin key: ${{ runner.os }}-${{ github.sha }}-tm-binary @@ -52,9 +52,12 @@ jobs: test_abci_apps: runs-on: ubuntu-latest - needs: Build + needs: build timeout-minutes: 5 steps: + - uses: actions/setup-go@v2 + with: + go-version: "1.15" - uses: actions/checkout@v2 - uses: technote-space/get-diff-action@v4 with: @@ -62,17 +65,14 @@ jobs: **/**.go go.mod go.sum - - name: Set GOBIN - run: | - echo "::add-path::$(go env GOPATH)/bin" - - uses: actions/cache@v2.1.2 + - uses: actions/cache@v2.1.3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- if: env.GIT_DIFF - - uses: actions/cache@v2.1.2 + - uses: actions/cache@v2.1.3 with: path: ~/go/bin key: ${{ runner.os }}-${{ github.sha }}-tm-binary @@ -84,9 +84,12 @@ jobs: test_abci_cli: runs-on: ubuntu-latest - needs: Build + needs: build timeout-minutes: 5 steps: + - uses: actions/setup-go@v2 + with: + go-version: "1.15" - uses: actions/checkout@v2 - uses: technote-space/get-diff-action@v4 with: @@ -94,17 +97,14 @@ jobs: **/**.go go.mod go.sum - - name: Set GOBIN - run: | - echo "::add-path::$(go env GOPATH)/bin" - - uses: actions/cache@v2.1.2 + - uses: actions/cache@v2.1.3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- if: env.GIT_DIFF - - uses: actions/cache@v2.1.2 + - uses: actions/cache@v2.1.3 with: path: ~/go/bin key: ${{ runner.os }}-${{ github.sha }}-tm-binary @@ -115,9 +115,12 @@ jobs: test_apps: runs-on: ubuntu-latest - needs: Build + needs: build timeout-minutes: 5 steps: + - uses: actions/setup-go@v2 + with: + go-version: "1.15" - uses: actions/checkout@v2 - uses: technote-space/get-diff-action@v4 with: @@ -125,17 +128,14 @@ jobs: **/**.go go.mod go.sum - - name: Set GOBIN - run: | - echo "::add-path::$(go env GOPATH)/bin" - - uses: actions/cache@v2.1.2 + - uses: actions/cache@v2.1.3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- if: env.GIT_DIFF - - uses: actions/cache@v2.1.2 + - uses: actions/cache@v2.1.3 with: path: ~/go/bin key: ${{ runner.os }}-${{ github.sha }}-tm-binary diff --git a/abci/client/socket_client.go b/abci/client/socket_client.go index 0d1ce644ec..97dd7978a6 100644 --- a/abci/client/socket_client.go +++ b/abci/client/socket_client.go @@ -413,7 +413,9 @@ func (cli *socketClient) ApplySnapshotChunkSync( func (cli *socketClient) PreprocessTxsSync( req types.RequestPreprocessTxs) (*types.ResponsePreprocessTxs, error) { reqres := cli.queueRequest(types.ToRequestPreprocessTxs(req)) - cli.FlushSync() + if err := cli.FlushSync(); err != nil { + return nil, err + } return reqres.Response.GetPreprocessTxs(), cli.Error() } diff --git a/blockchain/v0/reactor_test.go b/blockchain/v0/reactor_test.go index 047deedb28..66d53aa313 100644 --- a/blockchain/v0/reactor_test.go +++ b/blockchain/v0/reactor_test.go @@ -289,7 +289,8 @@ func makeTxs(height int64) (txs []types.Tx) { } func makeBlock(height int64, state sm.State, lastCommit *types.Commit) *types.Block { - block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, nil, nil, lastCommit, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, + nil, nil, lastCommit, state.Validators.GetProposer().Address) return block } diff --git a/blockchain/v2/reactor_test.go b/blockchain/v2/reactor_test.go index 3fb32b156b..ca4847c23a 100644 --- a/blockchain/v2/reactor_test.go +++ b/blockchain/v2/reactor_test.go @@ -453,7 +453,8 @@ func makeTxs(height int64) (txs []types.Tx) { } func makeBlock(height int64, state sm.State, lastCommit *types.Commit) *types.Block { - block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, nil, nil, lastCommit, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, + nil, nil, lastCommit, state.Validators.GetProposer().Address) return block } diff --git a/evidence/verify_test.go b/evidence/verify_test.go index e6c50d2217..28ce17fcf0 100644 --- a/evidence/verify_test.go +++ b/evidence/verify_test.go @@ -314,7 +314,8 @@ func TestVerifyLightClientAttack_Amnesia(t *testing.T) { abciEv := pool.ABCIEvidence(block.Height, block.Evidence.Evidence) // as we are unable to find out which subset of validators in the commit were malicious, no information // is sent to the application. We expect the array to be empty - emptyEvidenceBlock := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, nil, []types.Evidence{}, nil, nil, lastCommit) + emptyEvidenceBlock := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, nil, + []types.Evidence{}, nil, nil, lastCommit) expectedAbciEv := pool.ABCIEvidence(emptyEvidenceBlock.Height, emptyEvidenceBlock.Evidence.Evidence) assert.Equal(t, expectedAbciEv, abciEv) diff --git a/state/execution.go b/state/execution.go index 338b905c9b..fc13a8fa16 100644 --- a/state/execution.go +++ b/state/execution.go @@ -117,14 +117,15 @@ func (blockExec *BlockExecutor) CreateProposalBlock( for i := 0; i < l; i++ { bzs[i] = txs[i] } -// TODO(ismail): + + // TODO(ismail): // 1. get those intermediate state roots & messages either from the // mempool or from the abci-app // 1.1 at this point we should now the square / block size: // https://github.com/lazyledger/lazyledger-specs/blob/53e5f350838f1e0785ad670704bf91dac2f4f5a3/specs/block_proposer.md#deciding-on-a-block-size // Here, we instead assume a fixed (max) square size instead. // 2. feed them into MakeBlock below: - + processedBlockTxs, err := blockExec.proxyApp.PreprocessTxsSync(abci.RequestPreprocessTxs{Txs: bzs}) if err != nil { panic(err) // TODO: what to do?? diff --git a/store/store_test.go b/store/store_test.go index 056b4163ac..fa2b90dc0c 100644 --- a/store/store_test.go +++ b/store/store_test.go @@ -50,7 +50,8 @@ func makeTxs(height int64) (txs []types.Tx) { } func makeBlock(height int64, state sm.State, lastCommit *types.Commit) *types.Block { - block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, nil, nil, lastCommit, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, + nil, nil, lastCommit, state.Validators.GetProposer().Address) return block } From c4ac11540e21d677e4c9d940df617aa40400e45f Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 11 Dec 2020 16:31:44 +0100 Subject: [PATCH 25/32] fix consensus tests --- consensus/mempool_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/consensus/mempool_test.go b/consensus/mempool_test.go index 439552d598..9785a71ae4 100644 --- a/consensus/mempool_test.go +++ b/consensus/mempool_test.go @@ -256,3 +256,8 @@ func (app *CounterApplication) Commit() abci.ResponseCommit { binary.BigEndian.PutUint64(hash, uint64(app.txCount)) return abci.ResponseCommit{Data: hash} } + +func (app *CounterApplication) PreprocessTxs( + req abci.RequestPreprocessTxs) abci.ResponsePreprocessTxs { + return abci.ResponsePreprocessTxs{Txs: req.Txs} +} From 4bb6af4aa173ec3f2fa8bb17b6f6430276d02f95 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 11 Dec 2020 16:35:18 +0100 Subject: [PATCH 26/32] add preprocess to e2e --- test/e2e/app/app.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/e2e/app/app.go b/test/e2e/app/app.go index e37cdc31c3..8ae3e13487 100644 --- a/test/e2e/app/app.go +++ b/test/e2e/app/app.go @@ -187,6 +187,12 @@ func (app *Application) ApplySnapshotChunk(req abci.RequestApplySnapshotChunk) a return abci.ResponseApplySnapshotChunk{Result: abci.ResponseApplySnapshotChunk_ACCEPT} } +// PreprocessTxs implements ABCI +func (app *Application) PreprocessTxs( + req abci.RequestPreprocessTxs) abci.ResponsePreprocessTxs { + return abci.ResponsePreprocessTxs{Txs: req.Txs} +} + // validatorUpdates generates a validator set update. func (app *Application) validatorUpdates(height uint64) (abci.ValidatorUpdates, error) { updates := app.cfg.ValidatorUpdates[fmt.Sprintf("%v", height)] From 4e3abfd38a8d261c9eb6795173751fe188fa25fe Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 11 Dec 2020 16:40:39 +0100 Subject: [PATCH 27/32] add preprocess to counter app --- abci/example/counter/counter.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/abci/example/counter/counter.go b/abci/example/counter/counter.go index c212a990d6..a3a03c075b 100644 --- a/abci/example/counter/counter.go +++ b/abci/example/counter/counter.go @@ -84,3 +84,8 @@ func (app *Application) Query(reqQuery types.RequestQuery) types.ResponseQuery { return types.ResponseQuery{Log: fmt.Sprintf("Invalid query path. Expected hash or tx, got %v", reqQuery.Path)} } } + +func (app *Application) PreprocessTxs( + req types.RequestPreprocessTxs) types.ResponsePreprocessTxs { + return types.ResponsePreprocessTxs{Txs: req.Txs} +} From 68429508a3b4b30f562fb966c5723c93479ab691 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Mon, 14 Dec 2020 14:55:27 +0100 Subject: [PATCH 28/32] replace meta_data with messages --- abci/types/application.go | 2 - abci/types/types.pb.go | 456 +++++++++++++---------------- blockchain/msgs_test.go | 4 +- blockchain/v0/reactor_test.go | 4 +- blockchain/v2/reactor_test.go | 4 +- consensus/replay_test.go | 3 +- evidence/pool_test.go | 4 +- evidence/verify_test.go | 10 +- proto/tendermint/abci/types.proto | 7 +- proto/tendermint/types/types.pb.go | 286 ++++++++---------- proto/tendermint/types/types.proto | 17 +- state/execution.go | 7 +- state/execution_test.go | 2 +- state/helpers_test.go | 6 +- state/state.go | 5 +- state/validation_test.go | 10 +- store/store_test.go | 4 +- types/block.go | 33 ++- types/block_test.go | 22 +- types/event_bus_test.go | 4 +- types/test_util.go | 5 +- 21 files changed, 405 insertions(+), 490 deletions(-) diff --git a/abci/types/application.go b/abci/types/application.go index e12ffdd81a..e2a7e88801 100644 --- a/abci/types/application.go +++ b/abci/types/application.go @@ -29,8 +29,6 @@ type Application interface { OfferSnapshot(RequestOfferSnapshot) ResponseOfferSnapshot // Offer a snapshot to the application LoadSnapshotChunk(RequestLoadSnapshotChunk) ResponseLoadSnapshotChunk // Load a snapshot chunk ApplySnapshotChunk(RequestApplySnapshotChunk) ResponseApplySnapshotChunk // Apply a shapshot chunk - - // PreProcess Txs } //------------------------------------------------------- diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index 149dd40fb5..4a48f1ca6a 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -711,7 +711,6 @@ type RequestBeginBlock struct { Header types1.Header `protobuf:"bytes,2,opt,name=header,proto3" json:"header"` LastCommitInfo LastCommitInfo `protobuf:"bytes,3,opt,name=last_commit_info,json=lastCommitInfo,proto3" json:"last_commit_info"` ByzantineValidators []Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators,proto3" json:"byzantine_validators"` - MetaData []byte `protobuf:"bytes,5,opt,name=meta_data,json=metaData,proto3" json:"meta_data,omitempty"` } func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} } @@ -775,13 +774,6 @@ func (m *RequestBeginBlock) GetByzantineValidators() []Evidence { return nil } -func (m *RequestBeginBlock) GetMetaData() []byte { - if m != nil { - return m.MetaData - } - return nil -} - type RequestCheckTx struct { Tx []byte `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"` Type CheckTxType `protobuf:"varint,2,opt,name=type,proto3,enum=tendermint.abci.CheckTxType" json:"type,omitempty"` @@ -2401,8 +2393,8 @@ func (m *ResponseApplySnapshotChunk) GetRejectSenders() []string { } type ResponsePreprocessTxs struct { - Txs [][]byte `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"` - MetaData []byte `protobuf:"bytes,2,opt,name=meta_data,json=metaData,proto3" json:"meta_data,omitempty"` + Txs [][]byte `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"` + Messages *types1.Messages `protobuf:"bytes,2,opt,name=messages,proto3" json:"messages,omitempty"` } func (m *ResponsePreprocessTxs) Reset() { *m = ResponsePreprocessTxs{} } @@ -2445,9 +2437,9 @@ func (m *ResponsePreprocessTxs) GetTxs() [][]byte { return nil } -func (m *ResponsePreprocessTxs) GetMetaData() []byte { +func (m *ResponsePreprocessTxs) GetMessages() *types1.Messages { if m != nil { - return m.MetaData + return m.Messages } return nil } @@ -3188,181 +3180,181 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 2777 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcb, 0x77, 0x23, 0xc5, - 0xd5, 0xd7, 0xfb, 0x71, 0x6d, 0xc9, 0x72, 0xcd, 0x30, 0x08, 0x31, 0xd8, 0x43, 0x73, 0xe0, 0x1b, - 0xe6, 0x03, 0x1b, 0xcc, 0x81, 0xc0, 0x81, 0x04, 0x2c, 0x8d, 0x06, 0x99, 0x71, 0x2c, 0xa7, 0xad, - 0x31, 0x79, 0x31, 0x4d, 0xa9, 0xbb, 0x2c, 0x35, 0x23, 0x75, 0x37, 0xdd, 0x25, 0x63, 0xb3, 0x4c, - 0x4e, 0x36, 0x64, 0x11, 0x96, 0xd9, 0xb0, 0xc8, 0x7f, 0x91, 0x55, 0x36, 0xd9, 0x70, 0x4e, 0x36, - 0x2c, 0xb3, 0x22, 0x39, 0xb0, 0xcb, 0x2e, 0xab, 0xac, 0x72, 0x92, 0x53, 0x8f, 0x7e, 0x49, 0x6a, - 0x49, 0x0e, 0xd9, 0x65, 0x57, 0x75, 0xfb, 0xde, 0xab, 0xae, 0xdb, 0x55, 0xbf, 0xfb, 0xbb, 0xb7, - 0x04, 0x4f, 0x52, 0x62, 0x19, 0xc4, 0x1d, 0x9b, 0x16, 0xdd, 0xc5, 0x7d, 0xdd, 0xdc, 0xa5, 0x97, - 0x0e, 0xf1, 0x76, 0x1c, 0xd7, 0xa6, 0x36, 0xda, 0x08, 0x1f, 0xee, 0xb0, 0x87, 0x8d, 0xa7, 0x22, - 0xda, 0xba, 0x7b, 0xe9, 0x50, 0x7b, 0xd7, 0x71, 0x6d, 0xfb, 0x4c, 0xe8, 0x37, 0x6e, 0x46, 0x1e, - 0x73, 0x3f, 0x51, 0x6f, 0xb1, 0xa7, 0xd2, 0xf8, 0x11, 0xb9, 0xf4, 0x9f, 0x3e, 0x35, 0x63, 0xeb, - 0x60, 0x17, 0x8f, 0xfd, 0xc7, 0xdb, 0x03, 0xdb, 0x1e, 0x8c, 0xc8, 0x2e, 0x9f, 0xf5, 0x27, 0x67, - 0xbb, 0xd4, 0x1c, 0x13, 0x8f, 0xe2, 0xb1, 0x23, 0x15, 0xae, 0x0f, 0xec, 0x81, 0xcd, 0x87, 0xbb, - 0x6c, 0x24, 0xa4, 0xca, 0x17, 0x25, 0x28, 0xaa, 0xe4, 0xe3, 0x09, 0xf1, 0x28, 0xda, 0x83, 0x1c, - 0xd1, 0x87, 0x76, 0x3d, 0x7d, 0x2b, 0x7d, 0x7b, 0x6d, 0xef, 0xe6, 0xce, 0xd4, 0xe2, 0x76, 0xa4, - 0x5e, 0x5b, 0x1f, 0xda, 0x9d, 0x94, 0xca, 0x75, 0xd1, 0xab, 0x90, 0x3f, 0x1b, 0x4d, 0xbc, 0x61, - 0x3d, 0xc3, 0x8d, 0x9e, 0x4a, 0x32, 0xba, 0xc7, 0x94, 0x3a, 0x29, 0x55, 0x68, 0xb3, 0x9f, 0x32, - 0xad, 0x33, 0xbb, 0x9e, 0x5d, 0xfc, 0x53, 0x07, 0xd6, 0x19, 0xff, 0x29, 0xa6, 0x8b, 0x9a, 0x00, - 0xa6, 0x65, 0x52, 0x4d, 0x1f, 0x62, 0xd3, 0xaa, 0xe7, 0xb8, 0xe5, 0xd3, 0xc9, 0x96, 0x26, 0x6d, - 0x31, 0xc5, 0x4e, 0x4a, 0x2d, 0x9b, 0xfe, 0x84, 0xbd, 0xee, 0xc7, 0x13, 0xe2, 0x5e, 0xd6, 0xf3, - 0x8b, 0x5f, 0xf7, 0x47, 0x4c, 0x89, 0xbd, 0x2e, 0xd7, 0x46, 0x6d, 0x58, 0xeb, 0x93, 0x81, 0x69, - 0x69, 0xfd, 0x91, 0xad, 0x3f, 0xaa, 0x17, 0xb8, 0xb1, 0x92, 0x64, 0xdc, 0x64, 0xaa, 0x4d, 0xa6, - 0xd9, 0x49, 0xa9, 0xd0, 0x0f, 0x66, 0xe8, 0x2d, 0x28, 0xe9, 0x43, 0xa2, 0x3f, 0xd2, 0xe8, 0x45, - 0xbd, 0xc8, 0x7d, 0x6c, 0x27, 0xf9, 0x68, 0x31, 0xbd, 0xde, 0x45, 0x27, 0xa5, 0x16, 0x75, 0x31, - 0x64, 0xeb, 0x37, 0xc8, 0xc8, 0x3c, 0x27, 0x2e, 0xb3, 0x2f, 0x2d, 0x5e, 0xff, 0x5d, 0xa1, 0xc9, - 0x3d, 0x94, 0x0d, 0x7f, 0x82, 0xde, 0x86, 0x32, 0xb1, 0x0c, 0xb9, 0x8c, 0x32, 0x77, 0x71, 0x2b, - 0xf1, 0x3b, 0x5b, 0x86, 0xbf, 0x88, 0x12, 0x91, 0x63, 0xf4, 0x3a, 0x14, 0x74, 0x7b, 0x3c, 0x36, - 0x69, 0x1d, 0xb8, 0xf5, 0x56, 0xe2, 0x02, 0xb8, 0x56, 0x27, 0xa5, 0x4a, 0x7d, 0x74, 0x04, 0xd5, - 0x91, 0xe9, 0x51, 0xcd, 0xb3, 0xb0, 0xe3, 0x0d, 0x6d, 0xea, 0xd5, 0xd7, 0xb8, 0x87, 0x67, 0x93, - 0x3c, 0x1c, 0x9a, 0x1e, 0x3d, 0xf1, 0x95, 0x3b, 0x29, 0xb5, 0x32, 0x8a, 0x0a, 0x98, 0x3f, 0xfb, - 0xec, 0x8c, 0xb8, 0x81, 0xc3, 0xfa, 0xfa, 0x62, 0x7f, 0x5d, 0xa6, 0xed, 0xdb, 0x33, 0x7f, 0x76, - 0x54, 0x80, 0x7e, 0x06, 0xd7, 0x46, 0x36, 0x36, 0x02, 0x77, 0x9a, 0x3e, 0x9c, 0x58, 0x8f, 0xea, - 0x15, 0xee, 0xf4, 0xf9, 0xc4, 0x97, 0xb4, 0xb1, 0xe1, 0xbb, 0x68, 0x31, 0x83, 0x4e, 0x4a, 0xdd, - 0x1c, 0x4d, 0x0b, 0xd1, 0x43, 0xb8, 0x8e, 0x1d, 0x67, 0x74, 0x39, 0xed, 0xbd, 0xca, 0xbd, 0xdf, - 0x49, 0xf2, 0xbe, 0xcf, 0x6c, 0xa6, 0xdd, 0x23, 0x3c, 0x23, 0x65, 0xc1, 0x70, 0x5c, 0xe2, 0xb8, - 0xb6, 0x4e, 0x3c, 0x4f, 0xa3, 0x17, 0x5e, 0x7d, 0x63, 0x71, 0x30, 0x8e, 0x03, 0xed, 0xde, 0x05, - 0x0f, 0xae, 0x13, 0x15, 0x34, 0x8b, 0x90, 0x3f, 0xc7, 0xa3, 0x09, 0x51, 0xfe, 0x0f, 0xd6, 0x22, - 0xc7, 0x1e, 0xd5, 0xa1, 0x38, 0x26, 0x9e, 0x87, 0x07, 0x84, 0xa3, 0x44, 0x59, 0xf5, 0xa7, 0x4a, - 0x15, 0xd6, 0xa3, 0x47, 0x5d, 0x19, 0x07, 0x86, 0xec, 0x10, 0x33, 0xc3, 0x73, 0xe2, 0x7a, 0xa6, - 0x6d, 0xf9, 0x86, 0x72, 0x8a, 0x9e, 0x81, 0x0a, 0xdf, 0x8e, 0x9a, 0xff, 0x9c, 0x21, 0x49, 0x4e, - 0x5d, 0xe7, 0xc2, 0x53, 0xa9, 0xb4, 0x0d, 0x6b, 0xce, 0x9e, 0x13, 0xa8, 0x64, 0xb9, 0x0a, 0x38, - 0x7b, 0x8e, 0x54, 0x50, 0xfe, 0x94, 0x81, 0xda, 0xf4, 0xd1, 0x47, 0xaf, 0x43, 0x8e, 0xa1, 0xa0, - 0x04, 0xb4, 0xc6, 0x8e, 0x80, 0xc8, 0x1d, 0x1f, 0x22, 0x77, 0x7a, 0x3e, 0x44, 0x36, 0x4b, 0x5f, - 0x7e, 0xbd, 0x9d, 0xfa, 0xfc, 0x2f, 0xdb, 0x69, 0x95, 0x5b, 0xa0, 0x27, 0xd8, 0x49, 0xc5, 0xa6, - 0xa5, 0x99, 0x06, 0x7f, 0x9f, 0x32, 0x3b, 0x86, 0xd8, 0xb4, 0x0e, 0x0c, 0x74, 0x1f, 0x6a, 0xba, - 0x6d, 0x79, 0xc4, 0xf2, 0x26, 0x9e, 0x26, 0x20, 0x58, 0xc2, 0xd8, 0xec, 0x49, 0x6a, 0xf9, 0x8a, - 0xc7, 0x5c, 0x4f, 0xdd, 0xd0, 0xe3, 0x02, 0x74, 0x0f, 0xe0, 0x1c, 0x8f, 0x4c, 0x03, 0x53, 0xdb, - 0xf5, 0xea, 0xb9, 0x5b, 0xd9, 0xb9, 0x6e, 0x4e, 0x7d, 0x95, 0x07, 0x8e, 0x81, 0x29, 0x69, 0xe6, - 0xd8, 0xdb, 0xaa, 0x11, 0x4b, 0xf4, 0x1c, 0x6c, 0x60, 0xc7, 0xd1, 0x3c, 0x8a, 0x29, 0xd1, 0xfa, - 0x97, 0x94, 0x78, 0x1c, 0xe1, 0xd6, 0xd5, 0x0a, 0x76, 0x9c, 0x13, 0x26, 0x6d, 0x32, 0x21, 0x7a, - 0x16, 0xaa, 0x0c, 0x0c, 0x4d, 0x3c, 0xd2, 0x86, 0xc4, 0x1c, 0x0c, 0x29, 0xc7, 0xb2, 0xac, 0x5a, - 0x91, 0xd2, 0x0e, 0x17, 0x2a, 0x46, 0xf0, 0x31, 0x39, 0x10, 0x22, 0x04, 0x39, 0x03, 0x53, 0xcc, - 0x03, 0xb9, 0xae, 0xf2, 0x31, 0x93, 0x39, 0x98, 0x0e, 0x65, 0x78, 0xf8, 0x18, 0xdd, 0x80, 0x82, - 0x74, 0x9b, 0xe5, 0x6e, 0xe5, 0x0c, 0x5d, 0x87, 0xbc, 0xe3, 0xda, 0xe7, 0x84, 0xa3, 0x76, 0x49, - 0x15, 0x13, 0xe5, 0x77, 0x19, 0xd8, 0x9c, 0x81, 0x4c, 0xe6, 0x77, 0x88, 0xbd, 0xa1, 0xff, 0x5b, - 0x6c, 0x8c, 0x5e, 0x63, 0x7e, 0xb1, 0x41, 0x5c, 0x99, 0x66, 0xea, 0xd1, 0x10, 0x89, 0x14, 0xda, - 0xe1, 0xcf, 0x65, 0x68, 0xa4, 0x36, 0xea, 0x42, 0x6d, 0x84, 0x3d, 0xaa, 0x09, 0x08, 0xd2, 0x22, - 0x29, 0x67, 0x16, 0x78, 0x0f, 0xb1, 0x0f, 0x5a, 0x6c, 0xc3, 0x4a, 0x47, 0xd5, 0x51, 0x4c, 0x8a, - 0x54, 0xb8, 0xde, 0xbf, 0xfc, 0x14, 0x5b, 0xd4, 0xb4, 0x88, 0x36, 0xf3, 0xe5, 0x9e, 0x98, 0x71, - 0xda, 0x3e, 0x37, 0x0d, 0x62, 0xe9, 0xfe, 0x27, 0xbb, 0x16, 0x18, 0x9f, 0x86, 0xdf, 0xee, 0x49, - 0x28, 0x8f, 0x09, 0xc5, 0x1a, 0x8f, 0xb0, 0xf8, 0x6a, 0x25, 0x26, 0xb8, 0x8b, 0x29, 0x56, 0x54, - 0xa8, 0xc6, 0x33, 0x02, 0xaa, 0x42, 0x86, 0x5e, 0xc8, 0xe8, 0x64, 0xe8, 0x05, 0x7a, 0x09, 0x72, - 0x2c, 0x02, 0x3c, 0x32, 0xd5, 0x39, 0xa9, 0x54, 0xda, 0xf5, 0x2e, 0x1d, 0xa2, 0x72, 0x4d, 0x45, - 0x09, 0x8e, 0x4a, 0x90, 0x25, 0xa6, 0xbd, 0x2a, 0xcf, 0xc3, 0xc6, 0x54, 0x1a, 0x88, 0x7c, 0xdc, - 0x74, 0xf4, 0xe3, 0x2a, 0x1b, 0x50, 0x89, 0x61, 0xbe, 0x72, 0x03, 0xae, 0xcf, 0x83, 0x70, 0x65, - 0x18, 0xc8, 0x63, 0x50, 0x8c, 0x5e, 0x85, 0x52, 0x80, 0xe1, 0xe2, 0xa8, 0xce, 0x06, 0xd2, 0x57, - 0x56, 0x03, 0x55, 0x76, 0x46, 0xd9, 0x9e, 0xe7, 0x9b, 0x25, 0xc3, 0x5f, 0xbc, 0x88, 0x1d, 0xa7, - 0x83, 0xbd, 0xa1, 0xf2, 0x21, 0xd4, 0x93, 0xf0, 0x79, 0x6a, 0x19, 0xb9, 0x60, 0x8f, 0xde, 0x80, - 0xc2, 0x99, 0xed, 0x8e, 0x31, 0xe5, 0xce, 0x2a, 0xaa, 0x9c, 0xb1, 0xbd, 0x2b, 0xb0, 0x3a, 0xcb, - 0xc5, 0x62, 0xa2, 0x68, 0xf0, 0x44, 0x22, 0x46, 0x33, 0x13, 0xd3, 0x32, 0x88, 0x88, 0x67, 0x45, - 0x15, 0x93, 0xd0, 0x91, 0x78, 0x59, 0x31, 0x61, 0x3f, 0xeb, 0xf1, 0xb5, 0x72, 0xff, 0x65, 0x55, - 0xce, 0x94, 0xdb, 0x41, 0xb0, 0x62, 0x50, 0x8d, 0x6a, 0x90, 0x65, 0xf0, 0x9e, 0xbe, 0x95, 0xbd, - 0xbd, 0xae, 0xb2, 0xa1, 0xf2, 0xf7, 0x12, 0x94, 0x54, 0xe2, 0x39, 0x0c, 0x5a, 0x50, 0x13, 0xca, - 0xe4, 0x42, 0x27, 0x0e, 0xf5, 0x91, 0x76, 0x3e, 0x4f, 0x11, 0xda, 0x6d, 0x5f, 0x93, 0x91, 0x84, - 0xc0, 0x0c, 0xbd, 0x22, 0x79, 0x60, 0x32, 0xa5, 0x93, 0xe6, 0x51, 0x22, 0xf8, 0x9a, 0x4f, 0x04, - 0xb3, 0x89, 0xbc, 0x40, 0x58, 0x4d, 0x31, 0xc1, 0x57, 0x24, 0x13, 0xcc, 0x2d, 0xf9, 0xb1, 0x18, - 0x15, 0x6c, 0xc5, 0xa8, 0x60, 0x7e, 0xc9, 0x32, 0x13, 0xb8, 0xe0, 0x6b, 0x3e, 0x17, 0x2c, 0x2c, - 0x79, 0xe3, 0x29, 0x32, 0x78, 0x2f, 0x4e, 0x06, 0x05, 0x91, 0x7b, 0x26, 0xd1, 0x3a, 0x91, 0x0d, - 0x7e, 0x3f, 0xc2, 0x06, 0x4b, 0x89, 0x54, 0x4c, 0x38, 0x99, 0x43, 0x07, 0x5b, 0x31, 0x3a, 0x58, - 0x5e, 0x12, 0x83, 0x04, 0x3e, 0xf8, 0x4e, 0x94, 0x0f, 0x42, 0x22, 0xa5, 0x94, 0xdf, 0x7b, 0x1e, - 0x21, 0x7c, 0x23, 0x20, 0x84, 0x6b, 0x89, 0x8c, 0x56, 0xae, 0x61, 0x9a, 0x11, 0x76, 0x67, 0x18, - 0xa1, 0x60, 0x70, 0xcf, 0x25, 0xba, 0x58, 0x42, 0x09, 0xbb, 0x33, 0x94, 0xb0, 0xb2, 0xc4, 0xe1, - 0x12, 0x4e, 0xf8, 0xf3, 0xf9, 0x9c, 0x30, 0x99, 0xb5, 0xc9, 0xd7, 0x5c, 0x8d, 0x14, 0x6a, 0x09, - 0xa4, 0x50, 0x50, 0xb7, 0xff, 0x4f, 0x74, 0xbf, 0x32, 0x2b, 0xec, 0xce, 0xb0, 0xc2, 0xda, 0x92, - 0x78, 0xac, 0x4a, 0x0b, 0x9f, 0x67, 0x99, 0x7b, 0x0a, 0x44, 0x18, 0xc0, 0x11, 0xd7, 0xb5, 0x5d, - 0xc9, 0xf0, 0xc4, 0x44, 0xb9, 0xcd, 0xb8, 0x44, 0x08, 0x18, 0x0b, 0x28, 0x24, 0x4f, 0x24, 0x11, - 0x90, 0x50, 0x7e, 0x9f, 0x0e, 0x6d, 0x79, 0xfa, 0x8d, 0xf2, 0x90, 0xb2, 0xe4, 0x21, 0x11, 0x66, - 0x99, 0x89, 0x33, 0xcb, 0x6d, 0x58, 0x63, 0x09, 0x62, 0x8a, 0x34, 0x62, 0xc7, 0x27, 0x8d, 0xe8, - 0x0e, 0x6c, 0x72, 0x7a, 0x20, 0xf8, 0xa7, 0xcc, 0x0a, 0x39, 0x9e, 0xdc, 0x36, 0xd8, 0x03, 0xb1, - 0xdb, 0x45, 0x7a, 0x78, 0x11, 0xae, 0x45, 0x74, 0x83, 0xc4, 0x23, 0xf2, 0x75, 0x2d, 0xd0, 0xde, - 0x97, 0x19, 0xe8, 0x8f, 0xe9, 0x30, 0x42, 0x21, 0x21, 0x9d, 0xc7, 0x1d, 0xd3, 0xff, 0x1d, 0xee, - 0x98, 0xf9, 0x8f, 0xb9, 0x63, 0x34, 0x8f, 0x66, 0xe3, 0x79, 0xf4, 0x1f, 0xe9, 0xf0, 0x93, 0x04, - 0x4c, 0x50, 0xb7, 0x0d, 0x22, 0x33, 0x1b, 0x1f, 0xb3, 0x94, 0x34, 0xb2, 0x07, 0x32, 0x7f, 0xb1, - 0x21, 0xd3, 0x0a, 0x40, 0xbd, 0x2c, 0x31, 0x3b, 0x48, 0x8a, 0x79, 0x1e, 0x60, 0x99, 0x14, 0x6b, - 0x90, 0x7d, 0x44, 0x04, 0x04, 0xaf, 0xab, 0x6c, 0xc8, 0xf4, 0xf8, 0x1e, 0xe3, 0xc0, 0xba, 0xae, - 0x8a, 0x09, 0x7a, 0x1d, 0xca, 0xbc, 0x91, 0xa2, 0xd9, 0x8e, 0x27, 0xd1, 0xf2, 0xc9, 0xe8, 0x5a, - 0x45, 0xbf, 0x64, 0xe7, 0x98, 0xe9, 0x74, 0x1d, 0x4f, 0x2d, 0x39, 0x72, 0x14, 0xc9, 0xf7, 0xe5, - 0x18, 0x27, 0xbd, 0x09, 0x65, 0xf6, 0xf6, 0x9e, 0x83, 0x75, 0xc2, 0xa1, 0xaf, 0xac, 0x86, 0x02, - 0xe5, 0x21, 0xa0, 0x59, 0x00, 0x47, 0x1d, 0x28, 0x90, 0x73, 0x62, 0x51, 0x91, 0x7f, 0xd7, 0xf6, - 0x6e, 0xcc, 0x21, 0x7c, 0xc4, 0xa2, 0xcd, 0x3a, 0x0b, 0xf2, 0xdf, 0xbe, 0xde, 0xae, 0x09, 0xed, - 0x17, 0xec, 0xb1, 0x49, 0xc9, 0xd8, 0xa1, 0x97, 0xaa, 0xb4, 0x57, 0x7e, 0x99, 0x61, 0x04, 0x2b, - 0x06, 0xee, 0x73, 0x63, 0xeb, 0xef, 0xf8, 0x4c, 0x84, 0x79, 0xaf, 0x16, 0xef, 0x2d, 0x80, 0x01, - 0xf6, 0xb4, 0x4f, 0xb0, 0x45, 0x89, 0x21, 0x83, 0x1e, 0x91, 0xa0, 0x06, 0x94, 0xd8, 0x6c, 0xe2, - 0x11, 0x43, 0x16, 0x01, 0xc1, 0x3c, 0xb2, 0xce, 0xe2, 0x77, 0x5b, 0x67, 0x3c, 0xca, 0xa5, 0xe9, - 0x28, 0xff, 0x2a, 0x13, 0x9e, 0x92, 0x90, 0x8b, 0xfe, 0xef, 0xc5, 0xe1, 0xd7, 0xbc, 0x7a, 0x8d, - 0x67, 0x59, 0x74, 0x02, 0x9b, 0xc1, 0x29, 0xd5, 0x26, 0xfc, 0xf4, 0xfa, 0xfb, 0x6e, 0xd5, 0x63, - 0x5e, 0x3b, 0x8f, 0x8b, 0x3d, 0xf4, 0x63, 0x78, 0x7c, 0x0a, 0x81, 0x02, 0xd7, 0x99, 0x15, 0x81, - 0xe8, 0xb1, 0x38, 0x10, 0xf9, 0x9e, 0xc3, 0x58, 0x65, 0xbf, 0xe3, 0xd9, 0x38, 0x60, 0x35, 0x4f, - 0x94, 0x33, 0xcc, 0xfd, 0xfa, 0xcf, 0x40, 0xc5, 0x25, 0x94, 0xd5, 0xe8, 0xb1, 0x92, 0x73, 0x5d, - 0x08, 0x65, 0x21, 0x7b, 0x0c, 0x8f, 0xcd, 0xe5, 0x0e, 0xe8, 0x7b, 0x50, 0x0e, 0x69, 0x47, 0x3a, - 0xa1, 0x7a, 0x0b, 0x8a, 0x8e, 0x50, 0x57, 0xf9, 0x43, 0x3a, 0x74, 0x19, 0x2f, 0x63, 0xda, 0x50, - 0x70, 0x89, 0x37, 0x19, 0x89, 0xc2, 0xa2, 0xba, 0xf7, 0xe2, 0x6a, 0xac, 0x83, 0x49, 0x27, 0x23, - 0xaa, 0x4a, 0x63, 0xe5, 0x21, 0x14, 0x84, 0x04, 0xad, 0x41, 0xf1, 0xc1, 0xd1, 0xfd, 0xa3, 0xee, - 0xfb, 0x47, 0xb5, 0x14, 0x02, 0x28, 0xec, 0xb7, 0x5a, 0xed, 0xe3, 0x5e, 0x2d, 0x8d, 0xca, 0x90, - 0xdf, 0x6f, 0x76, 0xd5, 0x5e, 0x2d, 0xc3, 0xc4, 0x6a, 0xfb, 0xbd, 0x76, 0xab, 0x57, 0xcb, 0xa2, - 0x4d, 0xa8, 0x88, 0xb1, 0x76, 0xaf, 0xab, 0xfe, 0x70, 0xbf, 0x57, 0xcb, 0x45, 0x44, 0x27, 0xed, - 0xa3, 0xbb, 0x6d, 0xb5, 0x96, 0x57, 0x5e, 0x66, 0x95, 0x4b, 0x02, 0x4f, 0x09, 0x6b, 0x94, 0x74, - 0xa4, 0x46, 0x51, 0x7e, 0x9b, 0x81, 0x46, 0x32, 0xf9, 0x40, 0xef, 0x4d, 0x2d, 0x7c, 0xef, 0x0a, - 0xcc, 0x65, 0x6a, 0xf5, 0xe8, 0x59, 0xa8, 0xba, 0xe4, 0x8c, 0x50, 0x7d, 0x28, 0xc8, 0x90, 0x48, - 0x6c, 0x15, 0xb5, 0x22, 0xa5, 0xdc, 0xc8, 0x13, 0x6a, 0x1f, 0x11, 0x9d, 0x6a, 0xa2, 0x5c, 0x12, - 0x9b, 0xae, 0xcc, 0xd4, 0x98, 0xf4, 0x44, 0x08, 0x95, 0x0f, 0xaf, 0x14, 0xcb, 0x32, 0xe4, 0xd5, - 0x76, 0x4f, 0xfd, 0x49, 0x2d, 0x8b, 0x10, 0x54, 0xf9, 0x50, 0x3b, 0x39, 0xda, 0x3f, 0x3e, 0xe9, - 0x74, 0x59, 0x2c, 0xaf, 0xc1, 0x86, 0x1f, 0x4b, 0x5f, 0x98, 0x57, 0xee, 0x85, 0xbb, 0x61, 0x49, - 0x9d, 0x16, 0xaf, 0xf3, 0x33, 0x53, 0x75, 0xfe, 0xbf, 0xd2, 0xb0, 0x31, 0x75, 0xd0, 0xd0, 0x1e, - 0xe4, 0x05, 0x31, 0x4f, 0x6a, 0xc8, 0x73, 0x9c, 0x90, 0xa7, 0x52, 0xa8, 0xa2, 0xb7, 0xa0, 0x44, - 0x64, 0xcf, 0x61, 0xde, 0x81, 0x16, 0xbd, 0x12, 0xbf, 0x2b, 0x21, 0x4d, 0x03, 0x0b, 0xf4, 0x36, - 0x94, 0x03, 0xc4, 0x90, 0x85, 0xdc, 0xd3, 0xb3, 0xe6, 0x01, 0xd6, 0x48, 0xfb, 0xd0, 0x06, 0xbd, - 0x11, 0x92, 0xb1, 0xdc, 0x6c, 0x39, 0x20, 0xcd, 0x85, 0x82, 0x34, 0xf6, 0xf5, 0x95, 0x16, 0xac, - 0x45, 0xd6, 0xc3, 0xa3, 0x85, 0x2f, 0x64, 0x2f, 0x4b, 0x34, 0x1c, 0x4a, 0x63, 0x7c, 0x21, 0xda, - 0x58, 0x8f, 0x43, 0x91, 0x3d, 0x1c, 0x60, 0x81, 0x5a, 0x59, 0xb5, 0x30, 0xc6, 0x17, 0xef, 0x62, - 0x4f, 0xf9, 0x00, 0xaa, 0xf1, 0x3e, 0x0e, 0xdb, 0xd1, 0xae, 0x3d, 0xb1, 0x0c, 0xee, 0x23, 0xaf, - 0x8a, 0x09, 0x7a, 0x15, 0xf2, 0xe7, 0xb6, 0x00, 0xbd, 0xf9, 0x47, 0xff, 0xd4, 0xa6, 0x24, 0xd2, - 0x07, 0x12, 0xda, 0xca, 0xa7, 0x90, 0xe7, 0x20, 0xc6, 0x00, 0x89, 0x37, 0x5d, 0x24, 0x11, 0x65, - 0x63, 0xf4, 0x01, 0x00, 0xa6, 0xd4, 0x35, 0xfb, 0x93, 0xd0, 0xf1, 0xf6, 0x7c, 0x10, 0xdc, 0xf7, - 0xf5, 0x9a, 0x37, 0x25, 0x1a, 0x5e, 0x0f, 0x4d, 0x23, 0x88, 0x18, 0x71, 0xa8, 0x1c, 0x41, 0x35, - 0x6e, 0xeb, 0x73, 0xa7, 0xf4, 0x1c, 0xee, 0x94, 0x89, 0x72, 0xa7, 0x80, 0x79, 0x65, 0x45, 0xf7, - 0x8d, 0x4f, 0x94, 0xcf, 0xd2, 0x50, 0xea, 0x5d, 0xc8, 0xe3, 0x91, 0xd0, 0xdb, 0x09, 0x4d, 0x33, - 0xd1, 0x4e, 0x86, 0x68, 0x16, 0x65, 0x83, 0x16, 0xd4, 0x3b, 0x01, 0x00, 0xe4, 0x56, 0x2d, 0x43, - 0xfd, 0x46, 0x9d, 0x04, 0xbd, 0x37, 0xa1, 0x1c, 0xec, 0x2a, 0xc6, 0xe8, 0xb1, 0x61, 0xb8, 0xc4, - 0xf3, 0xe4, 0xda, 0xfc, 0x29, 0xef, 0x23, 0xda, 0x9f, 0xc8, 0x5e, 0x49, 0x56, 0x15, 0x13, 0xc5, - 0x80, 0x8d, 0xa9, 0xf4, 0x87, 0xde, 0x84, 0xa2, 0x33, 0xe9, 0x6b, 0x7e, 0x78, 0xa6, 0x0e, 0x8f, - 0x4f, 0x16, 0x27, 0xfd, 0x91, 0xa9, 0xdf, 0x27, 0x97, 0xfe, 0xcb, 0x38, 0x93, 0xfe, 0x7d, 0x11, - 0x45, 0xf1, 0x2b, 0x99, 0xe8, 0xaf, 0x9c, 0x43, 0xc9, 0xdf, 0x14, 0xe8, 0x07, 0xd1, 0x73, 0xe2, - 0x77, 0x97, 0x13, 0x53, 0xb2, 0x74, 0x1f, 0x39, 0x26, 0x77, 0x60, 0xd3, 0x33, 0x07, 0x16, 0x31, - 0xb4, 0xb0, 0xa6, 0xe0, 0xbf, 0x56, 0x52, 0x37, 0xc4, 0x83, 0x43, 0xbf, 0xa0, 0x50, 0xfe, 0x99, - 0x86, 0x92, 0x7f, 0x60, 0xd1, 0xcb, 0x91, 0x7d, 0x57, 0x9d, 0xd3, 0x2d, 0xf1, 0x15, 0xc3, 0x6e, - 0x5f, 0xfc, 0x5d, 0x33, 0x57, 0x7f, 0xd7, 0xa4, 0x9e, 0xae, 0xdf, 0x5c, 0xcf, 0x5d, 0xb9, 0xb9, - 0xfe, 0x02, 0x20, 0x6a, 0x53, 0x3c, 0xd2, 0xce, 0x6d, 0x6a, 0x5a, 0x03, 0x4d, 0x04, 0x5b, 0x30, - 0xb3, 0x1a, 0x7f, 0x72, 0xca, 0x1f, 0x1c, 0xf3, 0xb8, 0xff, 0x22, 0x0d, 0xa5, 0x20, 0xc7, 0x5e, - 0xb5, 0x79, 0x77, 0x03, 0x0a, 0x32, 0x8d, 0x88, 0xee, 0x9d, 0x9c, 0x05, 0x4d, 0xe6, 0x5c, 0xa4, - 0xc9, 0xdc, 0x00, 0x0e, 0xc7, 0xd3, 0x6d, 0x58, 0x36, 0xbf, 0xf3, 0x06, 0xac, 0x45, 0xfa, 0xa8, - 0xec, 0xe4, 0x1d, 0xb5, 0xdf, 0xaf, 0xa5, 0x1a, 0xc5, 0xcf, 0xbe, 0xb8, 0x95, 0x3d, 0x22, 0x9f, - 0xb0, 0x3d, 0xab, 0xb6, 0x5b, 0x9d, 0x76, 0xeb, 0x7e, 0x2d, 0xdd, 0x58, 0xfb, 0xec, 0x8b, 0x5b, - 0x45, 0x95, 0xf0, 0x4e, 0xcd, 0x9d, 0x0e, 0xac, 0x47, 0xbf, 0x4a, 0x3c, 0x13, 0x21, 0xa8, 0xde, - 0x7d, 0x70, 0x7c, 0x78, 0xd0, 0xda, 0xef, 0xb5, 0xb5, 0xd3, 0x6e, 0xaf, 0x5d, 0x4b, 0xa3, 0xc7, - 0xe1, 0xda, 0xe1, 0xc1, 0xbb, 0x9d, 0x9e, 0xd6, 0x3a, 0x3c, 0x68, 0x1f, 0xf5, 0xb4, 0xfd, 0x5e, - 0x6f, 0xbf, 0x75, 0xbf, 0x96, 0xd9, 0xfb, 0x0d, 0xc0, 0xc6, 0x7e, 0xb3, 0x75, 0xc0, 0xb2, 0xa8, - 0xa9, 0x63, 0x5e, 0x73, 0xb7, 0x20, 0xc7, 0xab, 0xea, 0x85, 0xb7, 0xb5, 0x8d, 0xc5, 0x3d, 0x3c, - 0x74, 0x0f, 0xf2, 0xbc, 0xe0, 0x46, 0x8b, 0xaf, 0x6f, 0x1b, 0x4b, 0x9a, 0x7a, 0xec, 0x65, 0xf8, - 0xf1, 0x58, 0x78, 0x9f, 0xdb, 0x58, 0xdc, 0xe3, 0x43, 0x2a, 0x94, 0xc3, 0x52, 0x60, 0xf9, 0xfd, - 0x66, 0x63, 0x05, 0xb0, 0x41, 0x87, 0x50, 0xf4, 0x8b, 0xac, 0x65, 0x37, 0xae, 0x8d, 0xa5, 0x4d, - 0x38, 0x16, 0x2e, 0x51, 0x0c, 0x2f, 0xbe, 0x3e, 0x6e, 0x2c, 0xe9, 0x28, 0xa2, 0x03, 0x28, 0x48, - 0x7e, 0xbb, 0xe4, 0x16, 0xb5, 0xb1, 0xac, 0xa9, 0xc6, 0x82, 0x16, 0x76, 0x19, 0x96, 0x5f, 0x8a, - 0x37, 0x56, 0x68, 0x96, 0xa2, 0x07, 0x00, 0x91, 0xd2, 0x77, 0x85, 0xdb, 0xee, 0xc6, 0x2a, 0x4d, - 0x50, 0xd4, 0x85, 0x52, 0x50, 0xe2, 0x2c, 0xbd, 0x7b, 0x6e, 0x2c, 0xef, 0x46, 0xa2, 0x87, 0x50, - 0x89, 0x73, 0xfb, 0xd5, 0x6e, 0x94, 0x1b, 0x2b, 0xb6, 0x19, 0x99, 0xff, 0x38, 0xd1, 0x5f, 0xed, - 0x86, 0xb9, 0xb1, 0x62, 0xd7, 0x11, 0x7d, 0x04, 0x9b, 0xb3, 0x44, 0x7c, 0xf5, 0x0b, 0xe7, 0xc6, - 0x15, 0xfa, 0x90, 0x68, 0x0c, 0x68, 0x0e, 0x81, 0xbf, 0xc2, 0xfd, 0x73, 0xe3, 0x2a, 0x6d, 0x49, - 0x16, 0xba, 0x38, 0x2b, 0x5e, 0xed, 0x3e, 0xba, 0xb1, 0x62, 0x83, 0xb2, 0xf9, 0xde, 0x97, 0xdf, - 0x6c, 0xa5, 0xbf, 0xfa, 0x66, 0x2b, 0xfd, 0xd7, 0x6f, 0xb6, 0xd2, 0x9f, 0x7f, 0xbb, 0x95, 0xfa, - 0xea, 0xdb, 0xad, 0xd4, 0x9f, 0xbf, 0xdd, 0x4a, 0xfd, 0xf4, 0xa5, 0x81, 0x49, 0x87, 0x93, 0xfe, - 0x8e, 0x6e, 0x8f, 0x77, 0x47, 0xf8, 0xd3, 0xcb, 0x11, 0x31, 0x06, 0xc4, 0x8d, 0x0c, 0x5f, 0xd4, - 0x6d, 0x97, 0x44, 0xfe, 0xd1, 0xd3, 0x2f, 0xf0, 0xcc, 0xf5, 0xca, 0xbf, 0x03, 0x00, 0x00, 0xff, - 0xff, 0x22, 0x7d, 0x2f, 0x9f, 0xf1, 0x23, 0x00, 0x00, + // 2774 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcd, 0x77, 0x23, 0xc5, + 0x11, 0xd7, 0xf7, 0x47, 0xd9, 0x92, 0xe5, 0xde, 0x65, 0x11, 0xc3, 0x62, 0x2f, 0xc3, 0x83, 0x2c, + 0x1b, 0xb0, 0xc1, 0x3c, 0x36, 0xf0, 0x20, 0x01, 0x4b, 0x68, 0x91, 0x59, 0x63, 0x3b, 0x6d, 0xed, + 0x92, 0x2f, 0x76, 0x68, 0xcd, 0xb4, 0xa5, 0x61, 0xa5, 0x99, 0x61, 0x66, 0x64, 0x6c, 0x8e, 0xf9, + 0xb8, 0x90, 0x43, 0x38, 0xe6, 0xc2, 0xff, 0x91, 0x53, 0x2e, 0xb9, 0xf0, 0x5e, 0x2e, 0x1c, 0x73, + 0x22, 0x79, 0xec, 0x2d, 0xb7, 0x9c, 0x72, 0xca, 0x4b, 0x5e, 0x7f, 0xcc, 0x97, 0xa4, 0xb1, 0xe4, + 0x90, 0x5b, 0x6e, 0xdd, 0x35, 0x55, 0xa5, 0xe9, 0x9a, 0xee, 0x5f, 0xfd, 0xaa, 0x5a, 0xf0, 0xa4, + 0x4f, 0x2d, 0x83, 0xba, 0x63, 0xd3, 0xf2, 0xb7, 0x49, 0x5f, 0x37, 0xb7, 0xfd, 0x73, 0x87, 0x7a, + 0x5b, 0x8e, 0x6b, 0xfb, 0x36, 0x5a, 0x8b, 0x1e, 0x6e, 0xb1, 0x87, 0xca, 0x53, 0x31, 0x6d, 0xdd, + 0x3d, 0x77, 0x7c, 0x7b, 0xdb, 0x71, 0x6d, 0xfb, 0x44, 0xe8, 0x2b, 0xd7, 0x63, 0x8f, 0xb9, 0x9f, + 0xb8, 0xb7, 0xc4, 0x53, 0x69, 0xfc, 0x90, 0x9e, 0x07, 0x4f, 0x9f, 0x9a, 0xb1, 0x75, 0x88, 0x4b, + 0xc6, 0xc1, 0xe3, 0xcd, 0x81, 0x6d, 0x0f, 0x46, 0x74, 0x9b, 0xcf, 0xfa, 0x93, 0x93, 0x6d, 0xdf, + 0x1c, 0x53, 0xcf, 0x27, 0x63, 0x47, 0x2a, 0x5c, 0x1d, 0xd8, 0x03, 0x9b, 0x0f, 0xb7, 0xd9, 0x48, + 0x48, 0xd5, 0x2f, 0x2b, 0x50, 0xc6, 0xf4, 0x93, 0x09, 0xf5, 0x7c, 0xb4, 0x03, 0x05, 0xaa, 0x0f, + 0xed, 0x66, 0xf6, 0x46, 0xf6, 0xe6, 0xca, 0xce, 0xf5, 0xad, 0xa9, 0xc5, 0x6d, 0x49, 0xbd, 0x8e, + 0x3e, 0xb4, 0xbb, 0x19, 0xcc, 0x75, 0xd1, 0xab, 0x50, 0x3c, 0x19, 0x4d, 0xbc, 0x61, 0x33, 0xc7, + 0x8d, 0x9e, 0x4a, 0x33, 0xba, 0xc3, 0x94, 0xba, 0x19, 0x2c, 0xb4, 0xd9, 0x4f, 0x99, 0xd6, 0x89, + 0xdd, 0xcc, 0x5f, 0xfc, 0x53, 0x7b, 0xd6, 0x09, 0xff, 0x29, 0xa6, 0x8b, 0x5a, 0x00, 0xa6, 0x65, + 0xfa, 0x9a, 0x3e, 0x24, 0xa6, 0xd5, 0x2c, 0x70, 0xcb, 0xa7, 0xd3, 0x2d, 0x4d, 0xbf, 0xcd, 0x14, + 0xbb, 0x19, 0x5c, 0x35, 0x83, 0x09, 0x7b, 0xdd, 0x4f, 0x26, 0xd4, 0x3d, 0x6f, 0x16, 0x2f, 0x7e, + 0xdd, 0x1f, 0x33, 0x25, 0xf6, 0xba, 0x5c, 0x1b, 0x75, 0x60, 0xa5, 0x4f, 0x07, 0xa6, 0xa5, 0xf5, + 0x47, 0xb6, 0xfe, 0xb0, 0x59, 0xe2, 0xc6, 0x6a, 0x9a, 0x71, 0x8b, 0xa9, 0xb6, 0x98, 0x66, 0x37, + 0x83, 0xa1, 0x1f, 0xce, 0xd0, 0x9b, 0x50, 0xd1, 0x87, 0x54, 0x7f, 0xa8, 0xf9, 0x67, 0xcd, 0x32, + 0xf7, 0xb1, 0x99, 0xe6, 0xa3, 0xcd, 0xf4, 0x7a, 0x67, 0xdd, 0x0c, 0x2e, 0xeb, 0x62, 0xc8, 0xd6, + 0x6f, 0xd0, 0x91, 0x79, 0x4a, 0x5d, 0x66, 0x5f, 0xb9, 0x78, 0xfd, 0xef, 0x08, 0x4d, 0xee, 0xa1, + 0x6a, 0x04, 0x13, 0xf4, 0x16, 0x54, 0xa9, 0x65, 0xc8, 0x65, 0x54, 0xb9, 0x8b, 0x1b, 0xa9, 0xdf, + 0xd9, 0x32, 0x82, 0x45, 0x54, 0xa8, 0x1c, 0xa3, 0xd7, 0xa0, 0xa4, 0xdb, 0xe3, 0xb1, 0xe9, 0x37, + 0x81, 0x5b, 0x6f, 0xa4, 0x2e, 0x80, 0x6b, 0x75, 0x33, 0x58, 0xea, 0xa3, 0x03, 0xa8, 0x8f, 0x4c, + 0xcf, 0xd7, 0x3c, 0x8b, 0x38, 0xde, 0xd0, 0xf6, 0xbd, 0xe6, 0x0a, 0xf7, 0xf0, 0x6c, 0x9a, 0x87, + 0x7d, 0xd3, 0xf3, 0x8f, 0x03, 0xe5, 0x6e, 0x06, 0xd7, 0x46, 0x71, 0x01, 0xf3, 0x67, 0x9f, 0x9c, + 0x50, 0x37, 0x74, 0xd8, 0x5c, 0xbd, 0xd8, 0xdf, 0x21, 0xd3, 0x0e, 0xec, 0x99, 0x3f, 0x3b, 0x2e, + 0x40, 0x3f, 0x87, 0x2b, 0x23, 0x9b, 0x18, 0xa1, 0x3b, 0x4d, 0x1f, 0x4e, 0xac, 0x87, 0xcd, 0x1a, + 0x77, 0xfa, 0x7c, 0xea, 0x4b, 0xda, 0xc4, 0x08, 0x5c, 0xb4, 0x99, 0x41, 0x37, 0x83, 0xd7, 0x47, + 0xd3, 0x42, 0xf4, 0x00, 0xae, 0x12, 0xc7, 0x19, 0x9d, 0x4f, 0x7b, 0xaf, 0x73, 0xef, 0xb7, 0xd2, + 0xbc, 0xef, 0x32, 0x9b, 0x69, 0xf7, 0x88, 0xcc, 0x48, 0x59, 0x30, 0x1c, 0x97, 0x3a, 0xae, 0xad, + 0x53, 0xcf, 0xd3, 0xfc, 0x33, 0xaf, 0xb9, 0x76, 0x71, 0x30, 0x8e, 0x42, 0xed, 0xde, 0x19, 0x0f, + 0xae, 0x13, 0x17, 0xb4, 0xca, 0x50, 0x3c, 0x25, 0xa3, 0x09, 0x55, 0xbf, 0x07, 0x2b, 0xb1, 0x63, + 0x8f, 0x9a, 0x50, 0x1e, 0x53, 0xcf, 0x23, 0x03, 0xca, 0x51, 0xa2, 0x8a, 0x83, 0xa9, 0x5a, 0x87, + 0xd5, 0xf8, 0x51, 0x57, 0xc7, 0xa1, 0x21, 0x3b, 0xc4, 0xcc, 0xf0, 0x94, 0xba, 0x9e, 0x69, 0x5b, + 0x81, 0xa1, 0x9c, 0xa2, 0x67, 0xa0, 0xc6, 0xb7, 0xa3, 0x16, 0x3c, 0x67, 0x48, 0x52, 0xc0, 0xab, + 0x5c, 0x78, 0x5f, 0x2a, 0x6d, 0xc2, 0x8a, 0xb3, 0xe3, 0x84, 0x2a, 0x79, 0xae, 0x02, 0xce, 0x8e, + 0x23, 0x15, 0xd4, 0x3f, 0xe7, 0xa0, 0x31, 0x7d, 0xf4, 0xd1, 0x6b, 0x50, 0x60, 0x28, 0x28, 0x01, + 0x4d, 0xd9, 0x12, 0x10, 0xb9, 0x15, 0x40, 0xe4, 0x56, 0x2f, 0x80, 0xc8, 0x56, 0xe5, 0xab, 0x6f, + 0x36, 0x33, 0x5f, 0xfc, 0x75, 0x33, 0x8b, 0xb9, 0x05, 0x7a, 0x82, 0x9d, 0x54, 0x62, 0x5a, 0x9a, + 0x69, 0xf0, 0xf7, 0xa9, 0xb2, 0x63, 0x48, 0x4c, 0x6b, 0xcf, 0x40, 0x77, 0xa1, 0xa1, 0xdb, 0x96, + 0x47, 0x2d, 0x6f, 0xe2, 0x69, 0x02, 0x82, 0x25, 0x8c, 0xcd, 0x9e, 0xa4, 0x76, 0xa0, 0x78, 0xc4, + 0xf5, 0xf0, 0x9a, 0x9e, 0x14, 0xa0, 0x3b, 0x00, 0xa7, 0x64, 0x64, 0x1a, 0xc4, 0xb7, 0x5d, 0xaf, + 0x59, 0xb8, 0x91, 0x9f, 0xeb, 0xe6, 0x7e, 0xa0, 0x72, 0xcf, 0x31, 0x88, 0x4f, 0x5b, 0x05, 0xf6, + 0xb6, 0x38, 0x66, 0x89, 0x9e, 0x83, 0x35, 0xe2, 0x38, 0x9a, 0xe7, 0x13, 0x9f, 0x6a, 0xfd, 0x73, + 0x9f, 0x7a, 0x1c, 0xe1, 0x56, 0x71, 0x8d, 0x38, 0xce, 0x31, 0x93, 0xb6, 0x98, 0x10, 0x3d, 0x0b, + 0x75, 0x06, 0x86, 0x26, 0x19, 0x69, 0x43, 0x6a, 0x0e, 0x86, 0x3e, 0xc7, 0xb2, 0x3c, 0xae, 0x49, + 0x69, 0x97, 0x0b, 0x55, 0x23, 0xfc, 0x98, 0x1c, 0x08, 0x11, 0x82, 0x82, 0x41, 0x7c, 0xc2, 0x03, + 0xb9, 0x8a, 0xf9, 0x98, 0xc9, 0x1c, 0xe2, 0x0f, 0x65, 0x78, 0xf8, 0x18, 0x5d, 0x83, 0x92, 0x74, + 0x9b, 0xe7, 0x6e, 0xe5, 0x0c, 0x5d, 0x85, 0xa2, 0xe3, 0xda, 0xa7, 0x94, 0xa3, 0x76, 0x05, 0x8b, + 0x89, 0xfa, 0xeb, 0x1c, 0xac, 0xcf, 0x40, 0x26, 0xf3, 0x3b, 0x24, 0xde, 0x30, 0xf8, 0x2d, 0x36, + 0x46, 0xb7, 0x99, 0x5f, 0x62, 0x50, 0x57, 0xa6, 0x99, 0x66, 0x3c, 0x44, 0x22, 0x85, 0x76, 0xf9, + 0x73, 0x19, 0x1a, 0xa9, 0x8d, 0x0e, 0xa1, 0x31, 0x22, 0x9e, 0xaf, 0x09, 0x08, 0xd2, 0x62, 0x29, + 0x67, 0x16, 0x78, 0xf7, 0x49, 0x00, 0x5a, 0x6c, 0xc3, 0x4a, 0x47, 0xf5, 0x51, 0x42, 0x8a, 0x30, + 0x5c, 0xed, 0x9f, 0x7f, 0x46, 0x2c, 0xdf, 0xb4, 0xa8, 0x36, 0xf3, 0xe5, 0x9e, 0x98, 0x71, 0xda, + 0x39, 0x35, 0x0d, 0x6a, 0xe9, 0xc1, 0x27, 0xbb, 0x12, 0x1a, 0x87, 0x9f, 0xd4, 0x53, 0x31, 0xd4, + 0x93, 0xa0, 0x8f, 0xea, 0x90, 0xf3, 0xcf, 0x64, 0x00, 0x72, 0xfe, 0x19, 0x7a, 0x09, 0x0a, 0x6c, + 0x91, 0x7c, 0xf1, 0xf5, 0x39, 0xd9, 0x52, 0xda, 0xf5, 0xce, 0x1d, 0x8a, 0xb9, 0xa6, 0xaa, 0x86, + 0xa7, 0x21, 0x4c, 0x04, 0xd3, 0x5e, 0xd5, 0xe7, 0x61, 0x6d, 0x0a, 0xe9, 0x63, 0xdf, 0x2f, 0x1b, + 0xff, 0x7e, 0xea, 0x1a, 0xd4, 0x12, 0xb0, 0xae, 0x5e, 0x83, 0xab, 0xf3, 0x50, 0x5a, 0x1d, 0x86, + 0xf2, 0x04, 0xda, 0xa2, 0x57, 0xa1, 0x12, 0xc2, 0xb4, 0x38, 0x8d, 0xb3, 0xb1, 0x0a, 0x94, 0x71, + 0xa8, 0xca, 0x8e, 0x21, 0xdb, 0xd6, 0x7c, 0x3f, 0xe4, 0xf8, 0x8b, 0x97, 0x89, 0xe3, 0x74, 0x89, + 0x37, 0x54, 0x3f, 0x82, 0x66, 0x1a, 0x04, 0x4f, 0x2d, 0xa3, 0x10, 0x6e, 0xc3, 0x6b, 0x50, 0x3a, + 0xb1, 0xdd, 0x31, 0xf1, 0xb9, 0xb3, 0x1a, 0x96, 0x33, 0xb6, 0x3d, 0x05, 0x1c, 0xe7, 0xb9, 0x58, + 0x4c, 0x54, 0x0d, 0x9e, 0x48, 0x85, 0x61, 0x66, 0x62, 0x5a, 0x06, 0x15, 0xf1, 0xac, 0x61, 0x31, + 0x89, 0x1c, 0x89, 0x97, 0x15, 0x13, 0xf6, 0xb3, 0x1e, 0x5f, 0x2b, 0xf7, 0x5f, 0xc5, 0x72, 0xa6, + 0xde, 0x0c, 0x83, 0x95, 0x40, 0x63, 0xd4, 0x80, 0x3c, 0x43, 0xf0, 0xec, 0x8d, 0xfc, 0xcd, 0x55, + 0xcc, 0x86, 0xea, 0x3f, 0x2a, 0x50, 0xc1, 0xd4, 0x73, 0x18, 0x7a, 0xa0, 0x16, 0x54, 0xe9, 0x99, + 0x4e, 0x1d, 0x3f, 0x00, 0xd3, 0xf9, 0x54, 0x44, 0x68, 0x77, 0x02, 0x4d, 0xc6, 0x03, 0x42, 0x33, + 0xf4, 0x8a, 0xa4, 0x7a, 0xe9, 0xac, 0x4d, 0x9a, 0xc7, 0xb9, 0xde, 0xed, 0x80, 0xeb, 0xe5, 0x53, + 0x53, 0xbf, 0xb0, 0x9a, 0x22, 0x7b, 0xaf, 0x48, 0xb2, 0x57, 0x58, 0xf0, 0x63, 0x09, 0xb6, 0xd7, + 0x4e, 0xb0, 0xbd, 0xe2, 0x82, 0x65, 0xa6, 0xd0, 0xbd, 0xdb, 0x01, 0xdd, 0x2b, 0x2d, 0x78, 0xe3, + 0x29, 0xbe, 0x77, 0x27, 0xc9, 0xf7, 0x04, 0x57, 0x7b, 0x26, 0xd5, 0x3a, 0x95, 0xf0, 0xfd, 0x30, + 0x46, 0xf8, 0x2a, 0xa9, 0x6c, 0x4b, 0x38, 0x99, 0xc3, 0xf8, 0xda, 0x09, 0xc6, 0x57, 0x5d, 0x10, + 0x83, 0x14, 0xca, 0xf7, 0x76, 0x9c, 0xf2, 0x41, 0x2a, 0x6b, 0x94, 0xdf, 0x7b, 0x1e, 0xe7, 0x7b, + 0x3d, 0xe4, 0x7c, 0x2b, 0xa9, 0xa4, 0x55, 0xae, 0x61, 0x9a, 0xf4, 0x1d, 0xce, 0x90, 0x3e, 0x41, + 0xd2, 0x9e, 0x4b, 0x75, 0xb1, 0x80, 0xf5, 0x1d, 0xce, 0xb0, 0xbe, 0xda, 0x02, 0x87, 0x0b, 0x68, + 0xdf, 0x2f, 0xe6, 0xd3, 0xbe, 0x74, 0x62, 0x26, 0x5f, 0x73, 0x39, 0xde, 0xa7, 0xa5, 0xf0, 0x3e, + 0xc1, 0xce, 0xbe, 0x9f, 0xea, 0x7e, 0x69, 0xe2, 0x77, 0x38, 0x43, 0xfc, 0x1a, 0x0b, 0xe2, 0xb1, + 0x2c, 0xf3, 0x7b, 0x9e, 0x25, 0xe7, 0x29, 0x10, 0x61, 0x00, 0x47, 0x5d, 0xd7, 0x76, 0x25, 0x89, + 0x13, 0x13, 0xf5, 0x26, 0xa3, 0x0b, 0x11, 0x60, 0x5c, 0xc0, 0x12, 0x79, 0x22, 0x89, 0x81, 0x84, + 0xfa, 0x87, 0x6c, 0x64, 0xcb, 0x33, 0x6c, 0x9c, 0x6a, 0x54, 0x25, 0xd5, 0x88, 0x91, 0xc7, 0x5c, + 0x92, 0x3c, 0x6e, 0xc2, 0x0a, 0x4b, 0x10, 0x53, 0xbc, 0x90, 0x38, 0x01, 0x2f, 0x44, 0xb7, 0x60, + 0x9d, 0x33, 0x00, 0x41, 0x31, 0x65, 0x56, 0x28, 0xf0, 0xe4, 0xb6, 0xc6, 0x1e, 0x88, 0xdd, 0x2e, + 0xd2, 0xc3, 0x8b, 0x70, 0x25, 0xa6, 0x1b, 0x26, 0x1e, 0x41, 0xa4, 0x1a, 0xa1, 0xf6, 0xae, 0xcc, + 0x40, 0x7f, 0xca, 0x46, 0x11, 0x8a, 0x38, 0xe7, 0x3c, 0x7a, 0x98, 0xfd, 0xdf, 0xd0, 0xc3, 0xdc, + 0x7f, 0x4d, 0x0f, 0xe3, 0x79, 0x34, 0x9f, 0xcc, 0xa3, 0xff, 0xcc, 0x46, 0x9f, 0x24, 0x24, 0x7b, + 0xba, 0x6d, 0x50, 0x99, 0xd9, 0xf8, 0x98, 0xa5, 0xa4, 0x91, 0x3d, 0x90, 0xf9, 0x8b, 0x0d, 0x99, + 0x56, 0x08, 0xea, 0x55, 0x89, 0xd9, 0x61, 0x52, 0x2c, 0xf2, 0x00, 0xcb, 0xa4, 0xd8, 0x80, 0xfc, + 0x43, 0x2a, 0x20, 0x78, 0x15, 0xb3, 0x21, 0xd3, 0xe3, 0x7b, 0x8c, 0x03, 0xeb, 0x2a, 0x16, 0x13, + 0xf4, 0x1a, 0x54, 0x79, 0xaf, 0x44, 0xb3, 0x1d, 0x4f, 0xa2, 0xe5, 0x93, 0xf1, 0xb5, 0x8a, 0x96, + 0xc8, 0xd6, 0x11, 0xd3, 0x39, 0x74, 0x3c, 0x5c, 0x71, 0xe4, 0x28, 0x96, 0xef, 0xab, 0x09, 0xda, + 0x79, 0x1d, 0xaa, 0xec, 0xed, 0x3d, 0x87, 0xe8, 0x94, 0x43, 0x5f, 0x15, 0x47, 0x02, 0xf5, 0x01, + 0xa0, 0x59, 0x00, 0x47, 0x5d, 0x28, 0xd1, 0x53, 0x6a, 0xf9, 0x22, 0xff, 0xae, 0xec, 0x5c, 0x9b, + 0xc3, 0xe9, 0xa8, 0xe5, 0xb7, 0x9a, 0x2c, 0xc8, 0x7f, 0xff, 0x66, 0xb3, 0x21, 0xb4, 0x5f, 0xb0, + 0xc7, 0xa6, 0x4f, 0xc7, 0x8e, 0x7f, 0x8e, 0xa5, 0xbd, 0xfa, 0xab, 0x1c, 0x23, 0x58, 0x09, 0x70, + 0x9f, 0x1b, 0xdb, 0x60, 0xc7, 0xe7, 0x62, 0xe4, 0x7a, 0xb9, 0x78, 0x6f, 0x00, 0x0c, 0x88, 0xa7, + 0x7d, 0x4a, 0x2c, 0x9f, 0x1a, 0x32, 0xe8, 0x31, 0x09, 0x52, 0xa0, 0xc2, 0x66, 0x13, 0x8f, 0x1a, + 0x92, 0xe7, 0x87, 0xf3, 0xd8, 0x3a, 0xcb, 0xdf, 0x6d, 0x9d, 0xc9, 0x28, 0x57, 0xa6, 0xa3, 0xfc, + 0x9b, 0x5c, 0x74, 0x4a, 0x22, 0x2e, 0xfa, 0xff, 0x17, 0x87, 0xdf, 0xf2, 0x02, 0x35, 0x99, 0x65, + 0xd1, 0x31, 0xac, 0x87, 0xa7, 0x54, 0x9b, 0xf0, 0xd3, 0x1b, 0xec, 0xbb, 0x65, 0x8f, 0x79, 0xe3, + 0x34, 0x29, 0xf6, 0xd0, 0x4f, 0xe0, 0xf1, 0x29, 0x04, 0x0a, 0x5d, 0xe7, 0x96, 0x04, 0xa2, 0xc7, + 0x92, 0x40, 0x14, 0x78, 0x8e, 0x62, 0x95, 0xff, 0x8e, 0x67, 0x63, 0x8f, 0xd5, 0x3c, 0x71, 0xce, + 0x30, 0xf7, 0xeb, 0x3f, 0x03, 0x35, 0x97, 0xfa, 0xac, 0x0c, 0x4f, 0x54, 0x95, 0xab, 0x42, 0x28, + 0x6b, 0xd5, 0x23, 0x78, 0x6c, 0x2e, 0x77, 0x40, 0x3f, 0x80, 0x6a, 0x44, 0x3b, 0xb2, 0x29, 0x05, + 0x5a, 0x58, 0x74, 0x44, 0xba, 0xea, 0x1f, 0xb3, 0x91, 0xcb, 0x64, 0x19, 0xd3, 0x81, 0x92, 0x4b, + 0xbd, 0xc9, 0x48, 0x14, 0x16, 0xf5, 0x9d, 0x17, 0x97, 0x63, 0x1d, 0x4c, 0x3a, 0x19, 0xf9, 0x58, + 0x1a, 0xab, 0x0f, 0xa0, 0x24, 0x24, 0x68, 0x05, 0xca, 0xf7, 0x0e, 0xee, 0x1e, 0x1c, 0x7e, 0x70, + 0xd0, 0xc8, 0x20, 0x80, 0xd2, 0x6e, 0xbb, 0xdd, 0x39, 0xea, 0x35, 0xb2, 0xa8, 0x0a, 0xc5, 0xdd, + 0xd6, 0x21, 0xee, 0x35, 0x72, 0x4c, 0x8c, 0x3b, 0xef, 0x75, 0xda, 0xbd, 0x46, 0x1e, 0xad, 0x43, + 0x4d, 0x8c, 0xb5, 0x3b, 0x87, 0xf8, 0xfd, 0xdd, 0x5e, 0xa3, 0x10, 0x13, 0x1d, 0x77, 0x0e, 0xde, + 0xe9, 0xe0, 0x46, 0x51, 0x7d, 0x99, 0x55, 0x2e, 0x29, 0x3c, 0x25, 0xaa, 0x51, 0xb2, 0xb1, 0x1a, + 0x45, 0xfd, 0x7d, 0x0e, 0x94, 0x74, 0xf2, 0x81, 0xde, 0x9b, 0x5a, 0xf8, 0xce, 0x25, 0x98, 0xcb, + 0xd4, 0xea, 0xd1, 0xb3, 0x50, 0x77, 0xe9, 0x09, 0xf5, 0xf5, 0xa1, 0x20, 0x43, 0x22, 0xb1, 0xd5, + 0x70, 0x4d, 0x4a, 0xb9, 0x91, 0x27, 0xd4, 0x3e, 0xa6, 0xba, 0xaf, 0x89, 0x72, 0x49, 0x6c, 0xba, + 0x2a, 0x53, 0x63, 0xd2, 0x63, 0x21, 0x54, 0x3f, 0xba, 0x54, 0x2c, 0xab, 0x50, 0xc4, 0x9d, 0x1e, + 0xfe, 0x69, 0x23, 0x8f, 0x10, 0xd4, 0xf9, 0x50, 0x3b, 0x3e, 0xd8, 0x3d, 0x3a, 0xee, 0x1e, 0xb2, + 0x58, 0x5e, 0x81, 0xb5, 0x20, 0x96, 0x81, 0xb0, 0xa8, 0x92, 0x68, 0x37, 0x2c, 0xa8, 0xd3, 0xd0, + 0x6d, 0xa8, 0x48, 0xa6, 0x13, 0x9c, 0x35, 0x65, 0xb6, 0x53, 0xf1, 0xbe, 0xd4, 0xc0, 0xa1, 0xae, + 0xfa, 0xef, 0x2c, 0xac, 0x4d, 0x9d, 0x41, 0xb4, 0x03, 0x45, 0xc1, 0xd9, 0xd3, 0xda, 0xf1, 0x1c, + 0x42, 0xe4, 0x81, 0x15, 0xaa, 0xe8, 0x4d, 0xa8, 0x50, 0xd9, 0x71, 0x98, 0x77, 0xd6, 0xc5, 0xef, + 0x07, 0x3d, 0x09, 0x69, 0x1a, 0x5a, 0xa0, 0xb7, 0xa0, 0x1a, 0x82, 0x89, 0xac, 0xf1, 0x9e, 0x9e, + 0x35, 0x0f, 0x61, 0x48, 0xda, 0x47, 0x36, 0xe8, 0xf5, 0x88, 0xa7, 0x15, 0x66, 0x2b, 0x05, 0x69, + 0x2e, 0x14, 0xa4, 0x71, 0xa0, 0xaf, 0xb6, 0x61, 0x25, 0xb6, 0x1e, 0xf4, 0x24, 0x54, 0xc7, 0xe4, + 0x4c, 0x76, 0xb2, 0x44, 0x2f, 0xa2, 0x32, 0x26, 0x67, 0xa2, 0x89, 0xf5, 0x38, 0x94, 0xd9, 0xc3, + 0x01, 0x11, 0x41, 0xce, 0xe3, 0xd2, 0x98, 0x9c, 0xbd, 0x4b, 0x3c, 0xf5, 0x43, 0xa8, 0x27, 0xbb, + 0x38, 0x6c, 0xb3, 0xbb, 0xf6, 0xc4, 0x32, 0xb8, 0x8f, 0x22, 0x16, 0x13, 0xf4, 0x2a, 0x14, 0x4f, + 0x6d, 0x81, 0x87, 0xf3, 0x51, 0xe1, 0xbe, 0xed, 0xd3, 0x58, 0x17, 0x48, 0x68, 0xab, 0x9f, 0x41, + 0x91, 0xe3, 0x1b, 0xc3, 0x2a, 0xde, 0x8f, 0x91, 0x1c, 0x95, 0x8d, 0xd1, 0x87, 0x00, 0xc4, 0xf7, + 0x5d, 0xb3, 0x3f, 0x89, 0x1c, 0x6f, 0xce, 0xc7, 0xc7, 0xdd, 0x40, 0xaf, 0x75, 0x5d, 0x02, 0xe5, + 0xd5, 0xc8, 0x34, 0x06, 0x96, 0x31, 0x87, 0xea, 0x01, 0xd4, 0x93, 0xb6, 0x01, 0xad, 0xca, 0xce, + 0xa1, 0x55, 0xb9, 0x38, 0xad, 0x0a, 0x49, 0x59, 0x5e, 0xf4, 0xde, 0xf8, 0x44, 0xfd, 0x3c, 0x0b, + 0x95, 0xde, 0x99, 0x3c, 0x39, 0x29, 0x6d, 0x9f, 0xc8, 0x34, 0x17, 0x6f, 0x72, 0x88, 0x3e, 0x52, + 0x3e, 0xec, 0x4e, 0xbd, 0x1d, 0x62, 0x43, 0x61, 0xd9, 0x0a, 0x35, 0x68, 0xd3, 0x49, 0x3c, 0x7c, + 0x03, 0xaa, 0xe1, 0xae, 0x62, 0x64, 0x9f, 0x18, 0x86, 0x4b, 0x3d, 0x4f, 0xae, 0x2d, 0x98, 0xf2, + 0x2e, 0xa2, 0xfd, 0xa9, 0x6c, 0xa3, 0xe4, 0xb1, 0x98, 0xa8, 0x06, 0xac, 0x4d, 0x65, 0x46, 0xf4, + 0x06, 0x94, 0x9d, 0x49, 0x5f, 0x0b, 0xc2, 0x33, 0x75, 0x78, 0x02, 0x1e, 0x39, 0xe9, 0x8f, 0x4c, + 0xfd, 0x2e, 0x3d, 0x0f, 0x5e, 0xc6, 0x99, 0xf4, 0xef, 0x8a, 0x28, 0x8a, 0x5f, 0xc9, 0xc5, 0x7f, + 0xe5, 0x14, 0x2a, 0xc1, 0xa6, 0x40, 0x3f, 0x8a, 0x9f, 0x93, 0xec, 0xec, 0x31, 0x4f, 0x66, 0x6b, + 0xe9, 0x3e, 0x76, 0x4c, 0x6e, 0xc1, 0xba, 0x67, 0x0e, 0x2c, 0x6a, 0x68, 0x51, 0xb9, 0xc1, 0x7f, + 0xad, 0x82, 0xd7, 0xc4, 0x83, 0xfd, 0xa0, 0xd6, 0x50, 0xff, 0x95, 0x85, 0x4a, 0x70, 0x60, 0xd1, + 0xcb, 0xb1, 0x7d, 0x57, 0x9f, 0xd3, 0x48, 0x09, 0x14, 0xa3, 0x46, 0x60, 0xf2, 0x5d, 0x73, 0x97, + 0x7f, 0xd7, 0xb4, 0x8e, 0x6e, 0xd0, 0x5a, 0x2f, 0x5c, 0xba, 0xb5, 0xfe, 0x02, 0x20, 0xdf, 0xf6, + 0xc9, 0x48, 0x3b, 0xb5, 0x7d, 0xd3, 0x1a, 0x68, 0x22, 0xd8, 0x82, 0xb4, 0x35, 0xf8, 0x93, 0xfb, + 0xfc, 0xc1, 0x11, 0x8f, 0xfb, 0x2f, 0xb3, 0x50, 0x09, 0xd3, 0xef, 0x65, 0xfb, 0x7a, 0xd7, 0xa0, + 0x24, 0x33, 0x8c, 0x68, 0xec, 0xc9, 0x59, 0xd8, 0x62, 0x2e, 0xc4, 0x5a, 0xcc, 0x0a, 0x83, 0x6e, + 0x9f, 0x70, 0x0e, 0x22, 0x2a, 0xbe, 0x70, 0x7e, 0xeb, 0x75, 0x58, 0x89, 0xb5, 0x58, 0xd9, 0xc9, + 0x3b, 0xe8, 0x7c, 0xd0, 0xc8, 0x28, 0xe5, 0xcf, 0xbf, 0xbc, 0x91, 0x3f, 0xa0, 0x9f, 0xb2, 0x3d, + 0x8b, 0x3b, 0xed, 0x6e, 0xa7, 0x7d, 0xb7, 0x91, 0x55, 0x56, 0x3e, 0xff, 0xf2, 0x46, 0x19, 0x53, + 0xde, 0xc4, 0xb9, 0xd5, 0x85, 0xd5, 0xf8, 0x57, 0x49, 0x26, 0x29, 0x04, 0xf5, 0x77, 0xee, 0x1d, + 0xed, 0xef, 0xb5, 0x77, 0x7b, 0x1d, 0xed, 0xfe, 0x61, 0xaf, 0xd3, 0xc8, 0xa2, 0xc7, 0xe1, 0xca, + 0xfe, 0xde, 0xbb, 0xdd, 0x9e, 0xd6, 0xde, 0xdf, 0xeb, 0x1c, 0xf4, 0xb4, 0xdd, 0x5e, 0x6f, 0xb7, + 0x7d, 0xb7, 0x91, 0xdb, 0xf9, 0x1d, 0xc0, 0xda, 0x6e, 0xab, 0xbd, 0xc7, 0x12, 0xac, 0xa9, 0x13, + 0x5e, 0x8e, 0xb7, 0xa1, 0xc0, 0x0b, 0xee, 0x0b, 0xef, 0x6a, 0x95, 0x8b, 0xdb, 0x7b, 0xe8, 0x0e, + 0x14, 0x79, 0x2d, 0x8e, 0x2e, 0xbe, 0xbc, 0x55, 0x16, 0xf4, 0xfb, 0xd8, 0xcb, 0xf0, 0xe3, 0x71, + 0xe1, 0x6d, 0xae, 0x72, 0x71, 0xfb, 0x0f, 0x61, 0xa8, 0x46, 0x55, 0xc2, 0xe2, 0xdb, 0x4d, 0x65, + 0x09, 0xb0, 0x41, 0xfb, 0x50, 0x0e, 0xea, 0xaf, 0x45, 0xf7, 0xad, 0xca, 0xc2, 0xfe, 0x1c, 0x0b, + 0x97, 0xa8, 0x93, 0x2f, 0xbe, 0x3c, 0x56, 0x16, 0x34, 0x1b, 0xd1, 0x1e, 0x94, 0x24, 0xf5, 0x5d, + 0x70, 0x87, 0xaa, 0x2c, 0xea, 0xb7, 0xb1, 0xa0, 0x45, 0x0d, 0x88, 0xc5, 0x57, 0xe2, 0xca, 0x12, + 0x7d, 0x54, 0x74, 0x0f, 0x20, 0x56, 0x15, 0x2f, 0x71, 0xd7, 0xad, 0x2c, 0xd3, 0x1f, 0x45, 0x87, + 0x50, 0x09, 0xab, 0x9f, 0x85, 0x37, 0xcf, 0xca, 0xe2, 0x46, 0x25, 0x7a, 0x00, 0xb5, 0x24, 0xed, + 0x5f, 0xee, 0x3e, 0x59, 0x59, 0xb2, 0x03, 0xc9, 0xfc, 0x27, 0x6b, 0x80, 0xe5, 0xee, 0x97, 0x95, + 0x25, 0x1b, 0x92, 0xe8, 0x63, 0x58, 0x9f, 0xe5, 0xe8, 0xcb, 0x5f, 0x37, 0x2b, 0x97, 0x68, 0x51, + 0xa2, 0x31, 0xa0, 0x39, 0xdc, 0xfe, 0x12, 0xb7, 0xcf, 0xca, 0x65, 0x3a, 0x96, 0x2c, 0x74, 0x49, + 0xc2, 0xbc, 0xdc, 0x6d, 0xb4, 0xb2, 0x64, 0xef, 0xb2, 0xf5, 0xde, 0x57, 0xdf, 0x6e, 0x64, 0xbf, + 0xfe, 0x76, 0x23, 0xfb, 0xb7, 0x6f, 0x37, 0xb2, 0x5f, 0x3c, 0xda, 0xc8, 0x7c, 0xfd, 0x68, 0x23, + 0xf3, 0x97, 0x47, 0x1b, 0x99, 0x9f, 0xbd, 0x34, 0x30, 0xfd, 0xe1, 0xa4, 0xbf, 0xa5, 0xdb, 0xe3, + 0xed, 0x11, 0xf9, 0xec, 0x7c, 0x44, 0x8d, 0x01, 0x75, 0x63, 0xc3, 0x17, 0x75, 0xdb, 0xa5, 0xb1, + 0xff, 0xf3, 0xf4, 0x4b, 0x3c, 0x73, 0xbd, 0xf2, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x86, 0xa8, + 0x11, 0x6f, 0xef, 0x23, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4537,13 +4529,6 @@ func (m *RequestBeginBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.MetaData) > 0 { - i -= len(m.MetaData) - copy(dAtA[i:], m.MetaData) - i = encodeVarintTypes(dAtA, i, uint64(len(m.MetaData))) - i-- - dAtA[i] = 0x2a - } if len(m.ByzantineValidators) > 0 { for iNdEx := len(m.ByzantineValidators) - 1; iNdEx >= 0; iNdEx-- { { @@ -5994,10 +5979,15 @@ func (m *ResponsePreprocessTxs) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.MetaData) > 0 { - i -= len(m.MetaData) - copy(dAtA[i:], m.MetaData) - i = encodeVarintTypes(dAtA, i, uint64(len(m.MetaData))) + if m.Messages != nil { + { + size, err := m.Messages.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x12 } @@ -6441,12 +6431,12 @@ func (m *Evidence) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x28 } - n49, err49 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err49 != nil { - return 0, err49 + n50, err50 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err50 != nil { + return 0, err50 } - i -= n49 - i = encodeVarintTypes(dAtA, i, uint64(n49)) + i -= n50 + i = encodeVarintTypes(dAtA, i, uint64(n50)) i-- dAtA[i] = 0x22 if m.Height != 0 { @@ -6843,10 +6833,6 @@ func (m *RequestBeginBlock) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } - l = len(m.MetaData) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } return n } @@ -7523,8 +7509,8 @@ func (m *ResponsePreprocessTxs) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } - l = len(m.MetaData) - if l > 0 { + if m.Messages != nil { + l = m.Messages.Size() n += 1 + l + sovTypes(uint64(l)) } return n @@ -9147,40 +9133,6 @@ func (m *RequestBeginBlock) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MetaData", 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.MetaData = append(m.MetaData[:0], dAtA[iNdEx:postIndex]...) - if m.MetaData == nil { - m.MetaData = []byte{} - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -12911,9 +12863,9 @@ func (m *ResponsePreprocessTxs) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MetaData", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Messages", wireType) } - var byteLen int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -12923,24 +12875,26 @@ func (m *ResponsePreprocessTxs) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + if msglen < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + byteLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTypes } if postIndex > l { return io.ErrUnexpectedEOF } - m.MetaData = append(m.MetaData[:0], dAtA[iNdEx:postIndex]...) - if m.MetaData == nil { - m.MetaData = []byte{} + if m.Messages == nil { + m.Messages = &types1.Messages{} + } + if err := m.Messages.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } iNdEx = postIndex default: diff --git a/blockchain/msgs_test.go b/blockchain/msgs_test.go index 073c1ba3ad..ccac62c65b 100644 --- a/blockchain/msgs_test.go +++ b/blockchain/msgs_test.go @@ -80,7 +80,7 @@ func TestBcStatusResponseMessageValidateBasic(t *testing.T) { // nolint:lll // ignore line length in tests func TestBlockchainMessageVectors(t *testing.T) { - block := types.MakeBlock(int64(3), []types.Tx{types.Tx("Hello World")}, nil, nil, nil, nil, nil) + block := types.MakeBlock(int64(3), []types.Tx{types.Tx("Hello World")}, nil, nil, types.Messages{}, nil) block.Version.Block = 11 // overwrite updated protocol version bpb, err := block.ToProto() @@ -97,7 +97,7 @@ func TestBlockchainMessageVectors(t *testing.T) { BlockRequest: &bcproto.BlockRequest{Height: math.MaxInt64}}}, "0a0a08ffffffffffffffff7f"}, {"BlockResponseMessage", &bcproto.Message{Sum: &bcproto.Message_BlockResponse{ - BlockResponse: &bcproto.BlockResponse{Block: bpb}}}, "1ac0020abd020a5b0a02080b1803220b088092b8c398feffffff012a0212003a20ba28ef83fed712be8a128587469a4effda9f4f4895bd5638dab1f10775c9bed66a20e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85512130a0b48656c6c6f20576f726c641a0022002a001ac8010a300000000000000001000000000000000119251d276ad8a1831db7b86ead3f42c4e03093d50ecf026da7ecc3b0da8ec87d0a30ffffffffffffffffffffffffffffffff12d55aea72367d0d6a7899103a437c913ee5a6f9e86f42e0fe8743b0d8d3a1e812300000000000000001000000000000000119251d276ad8a1831db7b86ead3f42c4e03093d50ecf026da7ecc3b0da8ec87d1230ffffffffffffffffffffffffffffffff12d55aea72367d0d6a7899103a437c913ee5a6f9e86f42e0fe8743b0d8d3a1e8"}, + BlockResponse: &bcproto.BlockResponse{Block: bpb}}}, "1ac0020abd020a5b0a02080b1803220b088092b8c398feffffff012a0212003a20ba28ef83fed712be8a128587469a4effda9f4f4895bd5638dab1f10775c9bed66a20e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85512130a0b48656c6c6f20576f726c6412001a0022001ac8010a300000000000000001000000000000000119251d276ad8a1831db7b86ead3f42c4e03093d50ecf026da7ecc3b0da8ec87d0a30ffffffffffffffffffffffffffffffff12d55aea72367d0d6a7899103a437c913ee5a6f9e86f42e0fe8743b0d8d3a1e812300000000000000001000000000000000119251d276ad8a1831db7b86ead3f42c4e03093d50ecf026da7ecc3b0da8ec87d1230ffffffffffffffffffffffffffffffff12d55aea72367d0d6a7899103a437c913ee5a6f9e86f42e0fe8743b0d8d3a1e8"}, {"NoBlockResponseMessage", &bcproto.Message{Sum: &bcproto.Message_NoBlockResponse{ NoBlockResponse: &bcproto.NoBlockResponse{Height: 1}}}, "12020801"}, {"NoBlockResponseMessage", &bcproto.Message{Sum: &bcproto.Message_NoBlockResponse{ diff --git a/blockchain/v0/reactor_test.go b/blockchain/v0/reactor_test.go index 66d53aa313..7b7be044fd 100644 --- a/blockchain/v0/reactor_test.go +++ b/blockchain/v0/reactor_test.go @@ -289,8 +289,8 @@ func makeTxs(height int64) (txs []types.Tx) { } func makeBlock(height int64, state sm.State, lastCommit *types.Commit) *types.Block { - block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, - nil, nil, lastCommit, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(height, makeTxs(height), nil, + nil, types.Messages{}, lastCommit, state.Validators.GetProposer().Address) return block } diff --git a/blockchain/v2/reactor_test.go b/blockchain/v2/reactor_test.go index ca4847c23a..a1ce2c1416 100644 --- a/blockchain/v2/reactor_test.go +++ b/blockchain/v2/reactor_test.go @@ -453,8 +453,8 @@ func makeTxs(height int64) (txs []types.Tx) { } func makeBlock(height int64, state sm.State, lastCommit *types.Commit) *types.Block { - block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, - nil, nil, lastCommit, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(height, makeTxs(height), nil, + nil, types.Messages{}, lastCommit, state.Validators.GetProposer().Address) return block } diff --git a/consensus/replay_test.go b/consensus/replay_test.go index 78440ec953..db7a04f54b 100644 --- a/consensus/replay_test.go +++ b/consensus/replay_test.go @@ -995,8 +995,7 @@ func makeBlock(state sm.State, lastBlock *types.Block, lastBlockMeta *types.Bloc []types.Tx{}, nil, nil, - nil, - nil, + types.Messages{}, lastCommit, state.Validators.GetProposer().Address, ) diff --git a/evidence/pool_test.go b/evidence/pool_test.go index 8e1a057ebf..023cbfaaab 100644 --- a/evidence/pool_test.go +++ b/evidence/pool_test.go @@ -172,7 +172,7 @@ func TestEvidencePoolUpdate(t *testing.T) { require.NoError(t, err) ev := types.NewMockDuplicateVoteEvidenceWithValidator(height, defaultEvidenceTime, val, evidenceChainID) lastCommit := makeCommit(height, val.PrivKey.PubKey().Address()) - block := types.MakeBlock(height+1, []types.Tx{}, nil, []types.Evidence{ev}, nil, nil, lastCommit) + block := types.MakeBlock(height+1, []types.Tx{}, []types.Evidence{ev}, nil, types.Messages{}, lastCommit) // update state (partially) state.LastBlockHeight = height + 1 state.LastBlockTime = defaultEvidenceTime.Add(22 * time.Minute) @@ -406,7 +406,7 @@ func initializeBlockStore(db dbm.DB, state sm.State, valAddr []byte) *store.Bloc for i := int64(1); i <= state.LastBlockHeight; i++ { lastCommit := makeCommit(i-1, valAddr) - block, _ := state.MakeBlock(i, []types.Tx{}, nil, nil, nil, nil, lastCommit, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(i, []types.Tx{}, nil, nil, types.Messages{}, lastCommit, state.Validators.GetProposer().Address) block.Header.Time = defaultEvidenceTime.Add(time.Duration(i) * time.Minute) block.Header.Version = tmversion.Consensus{Block: version.BlockProtocol, App: 1} const parts = 1 diff --git a/evidence/verify_test.go b/evidence/verify_test.go index 28ce17fcf0..f9f1cd99ed 100644 --- a/evidence/verify_test.go +++ b/evidence/verify_test.go @@ -108,7 +108,7 @@ func TestVerifyLightClientAttack_Lunatic(t *testing.T) { pubKey, err := newPrivVal.GetPubKey() require.NoError(t, err) lastCommit := makeCommit(state.LastBlockHeight, pubKey.Address()) - block := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, nil, []types.Evidence{ev}, nil, nil, lastCommit) + block := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, []types.Evidence{ev}, nil, types.Messages{}, lastCommit) abciEv := pool.ABCIEvidence(block.Height, block.Evidence.Evidence) expectedAbciEv := make([]abci.Evidence, len(commonVals.Validators)) @@ -212,7 +212,7 @@ func TestVerifyLightClientAttack_Equivocation(t *testing.T) { pubKey, err := conflictingPrivVals[0].GetPubKey() require.NoError(t, err) lastCommit := makeCommit(state.LastBlockHeight, pubKey.Address()) - block := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, nil, []types.Evidence{ev}, nil, nil, lastCommit) + block := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, []types.Evidence{ev}, nil, types.Messages{}, lastCommit) abciEv := pool.ABCIEvidence(block.Height, block.Evidence.Evidence) expectedAbciEv := make([]abci.Evidence, len(conflictingVals.Validators)-1) @@ -309,13 +309,13 @@ func TestVerifyLightClientAttack_Amnesia(t *testing.T) { pubKey, err := conflictingPrivVals[0].GetPubKey() require.NoError(t, err) lastCommit := makeCommit(state.LastBlockHeight, pubKey.Address()) - block := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, nil, []types.Evidence{ev}, nil, nil, lastCommit) + block := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, []types.Evidence{ev}, nil, types.Messages{}, lastCommit) abciEv := pool.ABCIEvidence(block.Height, block.Evidence.Evidence) // as we are unable to find out which subset of validators in the commit were malicious, no information // is sent to the application. We expect the array to be empty - emptyEvidenceBlock := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, nil, - []types.Evidence{}, nil, nil, lastCommit) + emptyEvidenceBlock := types.MakeBlock(state.LastBlockHeight, []types.Tx{}, + []types.Evidence{}, nil, types.Messages{}, lastCommit) expectedAbciEv := pool.ABCIEvidence(emptyEvidenceBlock.Height, emptyEvidenceBlock.Evidence.Evidence) assert.Equal(t, expectedAbciEv, abciEv) diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index b04b71c0f2..277aa75521 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -73,7 +73,6 @@ message RequestBeginBlock { tendermint.types.Header header = 2 [(gogoproto.nullable) = false]; LastCommitInfo last_commit_info = 3 [(gogoproto.nullable) = false]; repeated Evidence byzantine_validators = 4 [(gogoproto.nullable) = false]; - bytes meta_data = 5; } enum CheckTxType { @@ -144,7 +143,7 @@ message Response { ResponseOfferSnapshot offer_snapshot = 13; ResponseLoadSnapshotChunk load_snapshot_chunk = 14; ResponseApplySnapshotChunk apply_snapshot_chunk = 15; - ResponsePreprocessTxs preprocess_txs = 16; + ResponsePreprocessTxs preprocess_txs = 16; } } @@ -268,8 +267,8 @@ message ResponseApplySnapshotChunk { } message ResponsePreprocessTxs { - repeated bytes txs = 1; - bytes meta_data = 2; + repeated bytes txs = 1; + tendermint.types.Messages messages = 2; } //---------------------------------------- diff --git a/proto/tendermint/types/types.pb.go b/proto/tendermint/types/types.pb.go index 0c0265ff57..41146dc7df 100644 --- a/proto/tendermint/types/types.pb.go +++ b/proto/tendermint/types/types.pb.go @@ -421,10 +421,9 @@ type Data struct { // NOTE: not all txs here are valid. We're just agreeing on the order first. // This means that block.AppHash does not include these txs. Txs [][]byte `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"` - MetaData []byte `protobuf:"bytes,2,opt,name=meta_data,json=metaData,proto3" json:"meta_data,omitempty"` - IntermediateStateRoots IntermediateStateRoots `protobuf:"bytes,3,opt,name=intermediate_state_roots,json=intermediateStateRoots,proto3" json:"intermediate_state_roots"` - Evidence EvidenceData `protobuf:"bytes,4,opt,name=evidence,proto3" json:"evidence"` - Messages Messages `protobuf:"bytes,5,opt,name=messages,proto3" json:"messages"` + IntermediateStateRoots IntermediateStateRoots `protobuf:"bytes,2,opt,name=intermediate_state_roots,json=intermediateStateRoots,proto3" json:"intermediate_state_roots"` + Evidence EvidenceData `protobuf:"bytes,3,opt,name=evidence,proto3" json:"evidence"` + Messages Messages `protobuf:"bytes,4,opt,name=messages,proto3" json:"messages"` } func (m *Data) Reset() { *m = Data{} } @@ -467,13 +466,6 @@ func (m *Data) GetTxs() [][]byte { return nil } -func (m *Data) GetMetaData() []byte { - if m != nil { - return m.MetaData - } - return nil -} - func (m *Data) GetIntermediateStateRoots() IntermediateStateRoots { if m != nil { return m.IntermediateStateRoots @@ -1529,115 +1521,114 @@ func init() { func init() { proto.RegisterFile("tendermint/types/types.proto", fileDescriptor_d3a6e55e2345de56) } var fileDescriptor_d3a6e55e2345de56 = []byte{ - // 1724 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4b, 0x6f, 0x1b, 0xd7, - 0x15, 0xd6, 0xf0, 0x21, 0x0e, 0x0f, 0x49, 0x89, 0x1a, 0xc8, 0x32, 0x45, 0xdb, 0x14, 0x3b, 0x7d, - 0x44, 0x49, 0x1a, 0xca, 0x75, 0x8a, 0xa2, 0x05, 0xd2, 0x20, 0x24, 0xa5, 0x58, 0x6c, 0xf4, 0x20, - 0x86, 0x8c, 0xfb, 0xd8, 0x0c, 0x2e, 0x39, 0xd7, 0xe4, 0xd4, 0xc3, 0xb9, 0x83, 0xb9, 0x97, 0xb2, - 0xe4, 0x5f, 0x50, 0xa8, 0x9b, 0xac, 0xba, 0x13, 0xba, 0x68, 0x17, 0xdd, 0xf7, 0x0f, 0x14, 0x5d, - 0x65, 0x99, 0x5d, 0xbb, 0x69, 0x5a, 0xd8, 0x45, 0xd1, 0x9f, 0x51, 0xdc, 0xc7, 0x0c, 0x87, 0x22, - 0x99, 0x06, 0x86, 0x91, 0x8d, 0x30, 0xf7, 0x9c, 0xef, 0xbc, 0xcf, 0xb9, 0xe7, 0x52, 0x70, 0x9f, - 0x61, 0xdf, 0xc1, 0xe1, 0xc4, 0xf5, 0xd9, 0x01, 0xbb, 0x0a, 0x30, 0x95, 0x7f, 0x1b, 0x41, 0x48, - 0x18, 0x31, 0xca, 0x33, 0x6e, 0x43, 0xd0, 0xab, 0xdb, 0x23, 0x32, 0x22, 0x82, 0x79, 0xc0, 0xbf, - 0x24, 0xae, 0xba, 0x37, 0x22, 0x64, 0xe4, 0xe1, 0x03, 0x71, 0x1a, 0x4c, 0x9f, 0x1e, 0x30, 0x77, - 0x82, 0x29, 0x43, 0x93, 0x40, 0x01, 0x1e, 0x24, 0xcc, 0x0c, 0xc3, 0xab, 0x80, 0x11, 0x8e, 0x25, - 0x4f, 0x15, 0xbb, 0x96, 0x60, 0x5f, 0xe0, 0x90, 0xba, 0xc4, 0x4f, 0xfa, 0x51, 0xad, 0x2f, 0x78, - 0x79, 0x81, 0x3c, 0xd7, 0x41, 0x8c, 0x84, 0x12, 0x61, 0xfe, 0x04, 0x4a, 0x5d, 0x14, 0xb2, 0x1e, - 0x66, 0xc7, 0x18, 0x39, 0x38, 0x34, 0xb6, 0x21, 0xcb, 0x08, 0x43, 0x5e, 0x45, 0xab, 0x6b, 0xfb, - 0x25, 0x4b, 0x1e, 0x0c, 0x03, 0x32, 0x63, 0x44, 0xc7, 0x95, 0x54, 0x5d, 0xdb, 0x2f, 0x5a, 0xe2, - 0xdb, 0x1c, 0x43, 0x86, 0x8b, 0x72, 0x09, 0xd7, 0x77, 0xf0, 0x65, 0x24, 0x21, 0x0e, 0x9c, 0x3a, - 0xb8, 0x62, 0x98, 0x2a, 0x11, 0x79, 0x30, 0x7e, 0x08, 0x59, 0xe1, 0x7f, 0x25, 0x5d, 0xd7, 0xf6, - 0x0b, 0x8f, 0x2a, 0x8d, 0x44, 0xa2, 0x64, 0x7c, 0x8d, 0x2e, 0xe7, 0xb7, 0x32, 0x9f, 0x7f, 0xb9, - 0xb7, 0x66, 0x49, 0xb0, 0xe9, 0x41, 0xae, 0xe5, 0x91, 0xe1, 0xb3, 0xce, 0x61, 0xec, 0x88, 0x36, - 0x73, 0xc4, 0x38, 0x85, 0xcd, 0x00, 0x85, 0xcc, 0xa6, 0x98, 0xd9, 0x63, 0x11, 0x85, 0x30, 0x5a, - 0x78, 0xb4, 0xd7, 0xb8, 0x5d, 0x87, 0xc6, 0x5c, 0xb0, 0xca, 0x4a, 0x29, 0x48, 0x12, 0xcd, 0xff, - 0x64, 0x60, 0x5d, 0x25, 0xe3, 0xa7, 0x90, 0x53, 0x69, 0x15, 0x06, 0x0b, 0x8f, 0x1e, 0x24, 0x35, - 0x2a, 0x56, 0xa3, 0x4d, 0x7c, 0x8a, 0x7d, 0x3a, 0xa5, 0x4a, 0x5f, 0x24, 0x63, 0x7c, 0x0f, 0xf4, - 0xe1, 0x18, 0xb9, 0xbe, 0xed, 0x3a, 0xc2, 0xa3, 0x7c, 0xab, 0xf0, 0xf2, 0xcb, 0xbd, 0x5c, 0x9b, - 0xd3, 0x3a, 0x87, 0x56, 0x4e, 0x30, 0x3b, 0x8e, 0xb1, 0x03, 0xeb, 0x63, 0xec, 0x8e, 0xc6, 0x4c, - 0xa4, 0x25, 0x6d, 0xa9, 0x93, 0xf1, 0x63, 0xc8, 0xf0, 0x86, 0xa8, 0x64, 0x84, 0xed, 0x6a, 0x43, - 0x76, 0x4b, 0x23, 0xea, 0x96, 0x46, 0x3f, 0xea, 0x96, 0x96, 0xce, 0x0d, 0x7f, 0xf6, 0xcf, 0x3d, - 0xcd, 0x12, 0x12, 0x46, 0x1b, 0x4a, 0x1e, 0xa2, 0xcc, 0x1e, 0xf0, 0xb4, 0x71, 0xf3, 0x59, 0xa1, - 0x62, 0x77, 0x31, 0x21, 0x2a, 0xb1, 0xca, 0xf5, 0x02, 0x97, 0x92, 0x24, 0xc7, 0xd8, 0x87, 0xb2, - 0x50, 0x32, 0x24, 0x93, 0x89, 0xcb, 0x6c, 0x91, 0xf7, 0x75, 0x91, 0xf7, 0x0d, 0x4e, 0x6f, 0x0b, - 0xf2, 0x31, 0xaf, 0xc0, 0x3d, 0xc8, 0x3b, 0x88, 0x21, 0x09, 0xc9, 0x09, 0x88, 0xce, 0x09, 0x82, - 0xf9, 0x16, 0x6c, 0xc6, 0x5d, 0x47, 0x25, 0x44, 0x97, 0x5a, 0x66, 0x64, 0x01, 0x7c, 0x08, 0xdb, - 0x3e, 0xbe, 0x64, 0xf6, 0x6d, 0x74, 0x5e, 0xa0, 0x0d, 0xce, 0x7b, 0x32, 0x2f, 0xf1, 0x5d, 0xd8, - 0x18, 0x46, 0xc9, 0x97, 0x58, 0x10, 0xd8, 0x52, 0x4c, 0x15, 0xb0, 0x5d, 0xd0, 0x51, 0x10, 0x48, - 0x40, 0x41, 0x00, 0x72, 0x28, 0x08, 0x04, 0xeb, 0x1d, 0xd8, 0x12, 0x31, 0x86, 0x98, 0x4e, 0x3d, - 0xa6, 0x94, 0x14, 0x05, 0x66, 0x93, 0x33, 0x2c, 0x49, 0x17, 0xd8, 0x6f, 0x43, 0x09, 0x5f, 0xb8, - 0x0e, 0xf6, 0x87, 0x58, 0xe2, 0x4a, 0x02, 0x57, 0x8c, 0x88, 0x02, 0xf4, 0x36, 0x94, 0x83, 0x90, - 0x04, 0x84, 0xe2, 0xd0, 0x46, 0x8e, 0x13, 0x62, 0x4a, 0x2b, 0x1b, 0x52, 0x5f, 0x44, 0x6f, 0x4a, - 0xb2, 0xf9, 0xfb, 0x14, 0x64, 0x0e, 0x11, 0x43, 0x46, 0x19, 0xd2, 0xec, 0x92, 0x56, 0xb4, 0x7a, - 0x7a, 0xbf, 0x68, 0xf1, 0x4f, 0x9e, 0xd0, 0x09, 0x66, 0xc8, 0xe6, 0x49, 0x54, 0x13, 0xa4, 0x73, - 0x82, 0x80, 0x8f, 0xa1, 0xe2, 0xfa, 0x0c, 0x87, 0x13, 0xec, 0xb8, 0x88, 0x61, 0x9b, 0x32, 0xfe, - 0x37, 0x24, 0x84, 0x51, 0x35, 0x57, 0xfb, 0x8b, 0x75, 0xee, 0x24, 0x24, 0x7a, 0x5c, 0xc0, 0xe2, - 0x78, 0x55, 0xf6, 0x1d, 0x77, 0x29, 0xd7, 0xf8, 0x08, 0xf4, 0x28, 0x38, 0xd5, 0x84, 0xb5, 0x45, - 0xcd, 0x47, 0x0a, 0xc1, 0x7d, 0x53, 0xfa, 0x62, 0x29, 0xe3, 0x03, 0xd0, 0x27, 0x98, 0x52, 0x34, - 0xc2, 0x54, 0xf5, 0x60, 0x75, 0x51, 0xc3, 0xa9, 0x42, 0x44, 0xd2, 0x91, 0x84, 0x39, 0x85, 0x3b, - 0x87, 0xd3, 0xc0, 0x73, 0x87, 0x88, 0xe1, 0x27, 0x84, 0xe1, 0xc8, 0x94, 0xf1, 0x1e, 0xac, 0x5f, - 0x10, 0x86, 0x6d, 0xa4, 0xe6, 0x72, 0x67, 0x51, 0x29, 0xc7, 0x5b, 0x59, 0x8e, 0x6a, 0xc6, 0xf0, - 0x81, 0xba, 0x18, 0xbe, 0x12, 0xde, 0x32, 0x7f, 0xab, 0xc1, 0xee, 0x09, 0x9f, 0xc0, 0xb6, 0xe7, - 0x62, 0x9f, 0x35, 0x19, 0x43, 0xc3, 0x67, 0xb1, 0xed, 0x0e, 0x6c, 0x0d, 0x89, 0xff, 0xd4, 0x73, - 0x87, 0xcc, 0xf5, 0x47, 0x72, 0xc4, 0x94, 0x1b, 0xf7, 0x17, 0xf5, 0x0a, 0x3d, 0x62, 0xa2, 0xac, - 0x72, 0x42, 0x4c, 0x50, 0x78, 0x47, 0xf1, 0xe1, 0x22, 0xbe, 0xad, 0xe6, 0x3f, 0x25, 0xe6, 0xbf, - 0x28, 0x89, 0xc7, 0x82, 0x66, 0xfe, 0x5b, 0x03, 0x3d, 0x36, 0x8e, 0xe0, 0xae, 0x13, 0x65, 0xc4, - 0x16, 0x31, 0xc5, 0x05, 0x92, 0x2e, 0xbc, 0xb5, 0xe8, 0xc2, 0xd2, 0x14, 0x1e, 0xaf, 0x59, 0x77, - 0x9c, 0xa5, 0xb9, 0xf5, 0xe1, 0xbe, 0xc7, 0x0d, 0xdb, 0x43, 0x11, 0xbd, 0x8d, 0x44, 0xf8, 0x33, - 0x3b, 0x32, 0x85, 0xef, 0xae, 0x08, 0x75, 0x59, 0xca, 0x8e, 0xd7, 0xac, 0x5d, 0x6f, 0x15, 0xb3, - 0x95, 0x85, 0x34, 0x9d, 0x4e, 0xcc, 0x13, 0x28, 0x26, 0x3b, 0x89, 0x77, 0x4e, 0x22, 0xb4, 0xf4, - 0xf2, 0xce, 0x89, 0x95, 0xdc, 0xea, 0x3b, 0xf3, 0x43, 0xd8, 0x59, 0xde, 0xf1, 0xc6, 0x77, 0x60, - 0x23, 0x44, 0xcf, 0xe5, 0xb8, 0xd8, 0x9e, 0x4b, 0x99, 0x9a, 0xbb, 0x62, 0x88, 0x9e, 0x0b, 0xc4, - 0x89, 0x4b, 0x99, 0xf9, 0x33, 0xd0, 0xa3, 0xae, 0x34, 0x3e, 0x84, 0x52, 0xd4, 0x91, 0x33, 0x81, - 0xa5, 0x97, 0xa9, 0x12, 0xb1, 0x8a, 0x11, 0x5e, 0xe8, 0xfa, 0x08, 0x72, 0x8a, 0x61, 0x7c, 0x0b, - 0x8a, 0x3e, 0x9a, 0x60, 0x1a, 0xa0, 0x21, 0xe6, 0xd7, 0xb2, 0x5c, 0x63, 0x85, 0x98, 0xd6, 0x71, - 0xf8, 0x86, 0x4b, 0x4c, 0xbd, 0xf8, 0x36, 0x7f, 0x01, 0x3b, 0x3c, 0x27, 0xcd, 0x0b, 0xe4, 0x7a, - 0x68, 0xe0, 0x7a, 0x2e, 0xbb, 0x52, 0x1b, 0xea, 0x1e, 0xe4, 0x43, 0xa2, 0xa2, 0x51, 0x81, 0xe8, - 0x21, 0x91, 0x81, 0x70, 0x6b, 0x43, 0xe2, 0x4d, 0x27, 0xbe, 0xe2, 0xa7, 0x04, 0xbf, 0x20, 0x69, - 0x02, 0x62, 0xfe, 0x37, 0x05, 0x19, 0x5e, 0x7d, 0xe3, 0x7d, 0xc8, 0xf0, 0x18, 0x84, 0x47, 0x1b, - 0xcb, 0x36, 0x67, 0xcf, 0x1d, 0xf9, 0xd8, 0x39, 0xa5, 0xa3, 0xfe, 0x55, 0x80, 0x2d, 0x01, 0x4e, - 0x2c, 0xae, 0xd4, 0xdc, 0xe2, 0xda, 0x86, 0x6c, 0x48, 0xa6, 0xbe, 0x23, 0xae, 0xa3, 0xac, 0x25, - 0x0f, 0xc6, 0x11, 0xe8, 0xf1, 0x3e, 0xca, 0xfc, 0xbf, 0x7d, 0xb4, 0xc9, 0x0b, 0xca, 0xb7, 0xa5, - 0x22, 0x58, 0xb9, 0x81, 0x5a, 0x4b, 0x2d, 0xc8, 0xc7, 0xcf, 0xa4, 0xf8, 0x4e, 0xf9, 0x3a, 0xab, - 0x71, 0x26, 0x66, 0xbc, 0x0b, 0x5b, 0xf1, 0x96, 0x89, 0xaf, 0x69, 0xb9, 0xdb, 0xca, 0x31, 0x43, - 0xdd, 0xd3, 0x73, 0x0b, 0xcc, 0x96, 0x4f, 0x9d, 0x9c, 0x88, 0x6b, 0xb6, 0xc0, 0x3a, 0xe2, 0xcd, - 0x73, 0x1f, 0xf2, 0xd4, 0x1d, 0xf9, 0x88, 0x4d, 0x43, 0xac, 0x76, 0xdc, 0x8c, 0x60, 0xfe, 0x45, - 0x83, 0x75, 0xb9, 0x33, 0x13, 0x79, 0xd3, 0x96, 0xe7, 0x2d, 0xb5, 0x2a, 0x6f, 0xe9, 0xd7, 0xcf, - 0x5b, 0x13, 0x20, 0x76, 0x86, 0x56, 0x32, 0xa2, 0x87, 0xef, 0x2d, 0x2a, 0x92, 0x2e, 0xf6, 0xdc, - 0x91, 0x9a, 0xa9, 0x84, 0x90, 0xf9, 0x0f, 0x0d, 0xf2, 0x31, 0xdf, 0x68, 0x42, 0x29, 0xf2, 0xcb, - 0x7e, 0xea, 0xa1, 0x91, 0xea, 0x9d, 0x07, 0x2b, 0x9d, 0xfb, 0xd8, 0x43, 0x23, 0xab, 0xa0, 0xfc, - 0xe1, 0x87, 0xe5, 0x75, 0x48, 0xad, 0xa8, 0xc3, 0x5c, 0xe1, 0xd3, 0xaf, 0x57, 0xf8, 0xb9, 0x12, - 0x65, 0x6e, 0x97, 0xe8, 0xcf, 0x29, 0xd0, 0xbb, 0x62, 0x4b, 0x23, 0xef, 0x9b, 0x98, 0x88, 0x7b, - 0x90, 0x0f, 0x88, 0x67, 0x4b, 0x4e, 0x46, 0x70, 0xf4, 0x80, 0x78, 0xd6, 0x42, 0xd9, 0xb3, 0x6f, - 0x68, 0x5c, 0xd6, 0xdf, 0x40, 0xd6, 0x72, 0xb7, 0xb3, 0x16, 0x42, 0x51, 0xa6, 0x42, 0xdd, 0x49, - 0x0f, 0x79, 0x0e, 0xc4, 0x33, 0x5c, 0x5b, 0x7c, 0xe5, 0x4b, 0xb7, 0x25, 0xd2, 0x52, 0x38, 0x2e, - 0x21, 0x1f, 0x99, 0x6a, 0xb9, 0x54, 0x56, 0xb5, 0xa5, 0xa5, 0x70, 0xe6, 0xef, 0x34, 0x80, 0xd9, - 0x6a, 0xe5, 0xef, 0x5d, 0x2a, 0x5c, 0xb0, 0xe7, 0x2c, 0xd7, 0x56, 0x15, 0x4d, 0xd9, 0x2f, 0xd2, - 0xa4, 0xdf, 0x6d, 0x28, 0xcd, 0x9a, 0x91, 0xe2, 0xc8, 0x99, 0x25, 0x4a, 0xe2, 0x67, 0x68, 0x0f, - 0x33, 0xab, 0x78, 0x91, 0x38, 0x99, 0x7f, 0xd5, 0x20, 0x2f, 0x7c, 0x3a, 0xc5, 0x0c, 0xcd, 0xd5, - 0x50, 0x7b, 0xfd, 0x1a, 0x3e, 0x00, 0x90, 0x6a, 0xa8, 0xfb, 0x02, 0xab, 0xce, 0xca, 0x0b, 0x4a, - 0xcf, 0x7d, 0x81, 0x8d, 0x1f, 0xc5, 0x09, 0x4f, 0x7f, 0x75, 0xc2, 0xd5, 0x48, 0x47, 0x69, 0xbf, - 0x0b, 0x39, 0x7f, 0x3a, 0xb1, 0xf9, 0xdb, 0x33, 0x23, 0xbb, 0xd5, 0x9f, 0x4e, 0xfa, 0x97, 0xd4, - 0xfc, 0x35, 0xe4, 0xfa, 0x97, 0xe2, 0x87, 0x98, 0x5c, 0x30, 0x44, 0xbd, 0xfe, 0xe5, 0xba, 0xd2, - 0x39, 0x41, 0x3c, 0x76, 0x97, 0xec, 0x2a, 0xa3, 0xf1, 0x35, 0x7f, 0xe2, 0xa9, 0x1f, 0x77, 0xef, - 0xfc, 0x4d, 0x83, 0x42, 0xe2, 0x7e, 0x30, 0x7e, 0x00, 0x77, 0x5a, 0x27, 0xe7, 0xed, 0x4f, 0xec, - 0xce, 0xa1, 0xfd, 0xf1, 0x49, 0xf3, 0xb1, 0xfd, 0xe9, 0xd9, 0x27, 0x67, 0xe7, 0x3f, 0x3f, 0x2b, - 0xaf, 0x55, 0x77, 0xae, 0x6f, 0xea, 0x46, 0x02, 0xfb, 0xa9, 0xff, 0xcc, 0x27, 0xcf, 0x7d, 0xe3, - 0x00, 0xb6, 0xe7, 0x45, 0x9a, 0xad, 0xde, 0xd1, 0x59, 0xbf, 0xac, 0x55, 0xef, 0x5c, 0xdf, 0xd4, - 0xb7, 0x12, 0x12, 0xcd, 0x01, 0xc5, 0x3e, 0x5b, 0x14, 0x68, 0x9f, 0x9f, 0x9e, 0x76, 0xfa, 0xe5, - 0xd4, 0x82, 0x80, 0xba, 0xb0, 0xdf, 0x86, 0xad, 0x79, 0x81, 0xb3, 0xce, 0x49, 0x39, 0x5d, 0x35, - 0xae, 0x6f, 0xea, 0x1b, 0x09, 0xf4, 0x99, 0xeb, 0x55, 0xf5, 0xdf, 0xfc, 0xa1, 0xb6, 0xf6, 0xa7, - 0x3f, 0xd6, 0x34, 0x1e, 0x59, 0x69, 0xee, 0x8e, 0x30, 0xbe, 0x0f, 0x77, 0x7b, 0x9d, 0xc7, 0x67, - 0x47, 0x87, 0xf6, 0x69, 0xef, 0xb1, 0xdd, 0xff, 0x65, 0xf7, 0x28, 0x11, 0xdd, 0xe6, 0xf5, 0x4d, - 0xbd, 0xa0, 0x42, 0x5a, 0x85, 0xee, 0x5a, 0x47, 0x4f, 0xce, 0xfb, 0x47, 0x65, 0x4d, 0xa2, 0xbb, - 0x21, 0xe6, 0x6f, 0x40, 0x81, 0x7e, 0x08, 0xbb, 0x4b, 0xd0, 0x71, 0x60, 0x5b, 0xd7, 0x37, 0xf5, - 0x52, 0x37, 0xc4, 0x72, 0x7e, 0x84, 0x44, 0x03, 0x2a, 0x8b, 0x12, 0xe7, 0xdd, 0xf3, 0x5e, 0xf3, - 0xa4, 0x5c, 0xaf, 0x96, 0xaf, 0x6f, 0xea, 0xc5, 0xe8, 0x32, 0xe4, 0xf8, 0x59, 0x64, 0xad, 0x27, - 0x9f, 0xbf, 0xac, 0x69, 0x5f, 0xbc, 0xac, 0x69, 0xff, 0x7a, 0x59, 0xd3, 0x3e, 0x7b, 0x55, 0x5b, - 0xfb, 0xe2, 0x55, 0x6d, 0xed, 0xef, 0xaf, 0x6a, 0x6b, 0xbf, 0xfa, 0x60, 0xe4, 0xb2, 0xf1, 0x74, - 0xd0, 0x18, 0x92, 0xc9, 0x81, 0x87, 0x5e, 0x5c, 0x79, 0xd8, 0x19, 0xe1, 0x30, 0xf1, 0xf9, 0xde, - 0x90, 0x84, 0xea, 0x1f, 0x1e, 0x07, 0xb7, 0xff, 0x3b, 0x31, 0x58, 0x17, 0xf4, 0xf7, 0xff, 0x17, - 0x00, 0x00, 0xff, 0xff, 0xcf, 0xc5, 0x40, 0xd7, 0x5e, 0x11, 0x00, 0x00, + // 1712 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4b, 0x6f, 0x23, 0xc7, + 0x11, 0xe6, 0xf0, 0x21, 0x92, 0x45, 0x52, 0xa2, 0x06, 0x5a, 0x2d, 0xc5, 0xdd, 0xa5, 0x98, 0xc9, + 0xc3, 0xb2, 0x1d, 0x53, 0x9b, 0x75, 0x10, 0x24, 0x80, 0x63, 0x98, 0xa4, 0xe4, 0x15, 0x63, 0x3d, + 0x88, 0x21, 0xbd, 0x79, 0x5c, 0x06, 0x4d, 0x4e, 0x8b, 0x9c, 0xec, 0x70, 0x7a, 0x30, 0xdd, 0xd4, + 0x4a, 0x7b, 0xcc, 0x29, 0x50, 0x2e, 0x3e, 0xe5, 0xa6, 0x53, 0x72, 0xc8, 0x3d, 0x7f, 0x20, 0xc8, + 0xc9, 0x47, 0xdf, 0x92, 0x4b, 0x9c, 0x40, 0x1b, 0x04, 0xf9, 0x19, 0x41, 0x3f, 0x66, 0x38, 0x14, + 0x49, 0xc7, 0x58, 0x2c, 0x7c, 0x11, 0xa6, 0xab, 0xbe, 0x7a, 0x57, 0x75, 0x35, 0x05, 0x0f, 0x19, + 0xf6, 0x6c, 0x1c, 0x4c, 0x1c, 0x8f, 0xed, 0xb3, 0x2b, 0x1f, 0x53, 0xf9, 0xb7, 0xe1, 0x07, 0x84, + 0x11, 0xbd, 0x3c, 0xe3, 0x36, 0x04, 0xbd, 0xba, 0x35, 0x22, 0x23, 0x22, 0x98, 0xfb, 0xfc, 0x4b, + 0xe2, 0xaa, 0xbb, 0x23, 0x42, 0x46, 0x2e, 0xde, 0x17, 0xa7, 0xc1, 0xf4, 0x7c, 0x9f, 0x39, 0x13, + 0x4c, 0x19, 0x9a, 0xf8, 0x0a, 0xf0, 0x28, 0x66, 0x66, 0x18, 0x5c, 0xf9, 0x8c, 0x70, 0x2c, 0x39, + 0x57, 0xec, 0x5a, 0x8c, 0x7d, 0x81, 0x03, 0xea, 0x10, 0x2f, 0xee, 0x47, 0xb5, 0xbe, 0xe0, 0xe5, + 0x05, 0x72, 0x1d, 0x1b, 0x31, 0x12, 0x48, 0x84, 0xf1, 0x13, 0x28, 0x75, 0x51, 0xc0, 0x7a, 0x98, + 0x1d, 0x61, 0x64, 0xe3, 0x40, 0xdf, 0x82, 0x0c, 0x23, 0x0c, 0xb9, 0x15, 0xad, 0xae, 0xed, 0x95, + 0x4c, 0x79, 0xd0, 0x75, 0x48, 0x8f, 0x11, 0x1d, 0x57, 0x92, 0x75, 0x6d, 0xaf, 0x68, 0x8a, 0x6f, + 0x63, 0x0c, 0x69, 0x2e, 0xca, 0x25, 0x1c, 0xcf, 0xc6, 0x97, 0xa1, 0x84, 0x38, 0x70, 0xea, 0xe0, + 0x8a, 0x61, 0xaa, 0x44, 0xe4, 0x41, 0xff, 0x21, 0x64, 0x84, 0xff, 0x95, 0x54, 0x5d, 0xdb, 0x2b, + 0x3c, 0xa9, 0x34, 0x62, 0x89, 0x92, 0xf1, 0x35, 0xba, 0x9c, 0xdf, 0x4a, 0x7f, 0xfe, 0xe5, 0x6e, + 0xc2, 0x94, 0x60, 0xc3, 0x85, 0x6c, 0xcb, 0x25, 0xc3, 0xe7, 0x9d, 0x83, 0xc8, 0x11, 0x6d, 0xe6, + 0x88, 0x7e, 0x02, 0x1b, 0x3e, 0x0a, 0x98, 0x45, 0x31, 0xb3, 0xc6, 0x22, 0x0a, 0x61, 0xb4, 0xf0, + 0x64, 0xb7, 0x71, 0xb7, 0x0e, 0x8d, 0xb9, 0x60, 0x95, 0x95, 0x92, 0x1f, 0x27, 0x1a, 0xff, 0x49, + 0xc3, 0x9a, 0x4a, 0xc6, 0x4f, 0x21, 0xab, 0xd2, 0x2a, 0x0c, 0x16, 0x9e, 0x3c, 0x8a, 0x6b, 0x54, + 0xac, 0x46, 0x9b, 0x78, 0x14, 0x7b, 0x74, 0x4a, 0x95, 0xbe, 0x50, 0x46, 0xff, 0x1e, 0xe4, 0x86, + 0x63, 0xe4, 0x78, 0x96, 0x63, 0x0b, 0x8f, 0xf2, 0xad, 0xc2, 0xed, 0x97, 0xbb, 0xd9, 0x36, 0xa7, + 0x75, 0x0e, 0xcc, 0xac, 0x60, 0x76, 0x6c, 0x7d, 0x1b, 0xd6, 0xc6, 0xd8, 0x19, 0x8d, 0x99, 0x48, + 0x4b, 0xca, 0x54, 0x27, 0xfd, 0xc7, 0x90, 0xe6, 0x0d, 0x51, 0x49, 0x0b, 0xdb, 0xd5, 0x86, 0xec, + 0x96, 0x46, 0xd8, 0x2d, 0x8d, 0x7e, 0xd8, 0x2d, 0xad, 0x1c, 0x37, 0xfc, 0xd9, 0x3f, 0x77, 0x35, + 0x53, 0x48, 0xe8, 0x6d, 0x28, 0xb9, 0x88, 0x32, 0x6b, 0xc0, 0xd3, 0xc6, 0xcd, 0x67, 0x84, 0x8a, + 0x9d, 0xc5, 0x84, 0xa8, 0xc4, 0x2a, 0xd7, 0x0b, 0x5c, 0x4a, 0x92, 0x6c, 0x7d, 0x0f, 0xca, 0x42, + 0xc9, 0x90, 0x4c, 0x26, 0x0e, 0xb3, 0x44, 0xde, 0xd7, 0x44, 0xde, 0xd7, 0x39, 0xbd, 0x2d, 0xc8, + 0x47, 0xbc, 0x02, 0x0f, 0x20, 0x6f, 0x23, 0x86, 0x24, 0x24, 0x2b, 0x20, 0x39, 0x4e, 0x10, 0xcc, + 0xb7, 0x60, 0x23, 0xea, 0x3a, 0x2a, 0x21, 0x39, 0xa9, 0x65, 0x46, 0x16, 0xc0, 0xc7, 0xb0, 0xe5, + 0xe1, 0x4b, 0x66, 0xdd, 0x45, 0xe7, 0x05, 0x5a, 0xe7, 0xbc, 0x67, 0xf3, 0x12, 0xdf, 0x85, 0xf5, + 0x61, 0x98, 0x7c, 0x89, 0x05, 0x81, 0x2d, 0x45, 0x54, 0x01, 0xdb, 0x81, 0x1c, 0xf2, 0x7d, 0x09, + 0x28, 0x08, 0x40, 0x16, 0xf9, 0xbe, 0x60, 0xbd, 0x03, 0x9b, 0x22, 0xc6, 0x00, 0xd3, 0xa9, 0xcb, + 0x94, 0x92, 0xa2, 0xc0, 0x6c, 0x70, 0x86, 0x29, 0xe9, 0x02, 0xfb, 0x6d, 0x28, 0xe1, 0x0b, 0xc7, + 0xc6, 0xde, 0x10, 0x4b, 0x5c, 0x49, 0xe0, 0x8a, 0x21, 0x51, 0x80, 0xde, 0x86, 0xb2, 0x1f, 0x10, + 0x9f, 0x50, 0x1c, 0x58, 0xc8, 0xb6, 0x03, 0x4c, 0x69, 0x65, 0x5d, 0xea, 0x0b, 0xe9, 0x4d, 0x49, + 0x36, 0x7e, 0x93, 0x84, 0xf4, 0x01, 0x62, 0x48, 0x2f, 0x43, 0x8a, 0x5d, 0xd2, 0x8a, 0x56, 0x4f, + 0xed, 0x15, 0x4d, 0xfe, 0xa9, 0x8f, 0xa1, 0xe2, 0x78, 0x0c, 0x07, 0x13, 0x6c, 0x3b, 0x88, 0x61, + 0x8b, 0x32, 0xfe, 0x37, 0x20, 0x84, 0x51, 0xd5, 0xdb, 0x7b, 0x8b, 0xa5, 0xec, 0xc4, 0x24, 0x7a, + 0x5c, 0xc0, 0xe4, 0x78, 0x55, 0xd9, 0x6d, 0x67, 0x29, 0x57, 0xff, 0x08, 0x72, 0xa1, 0xff, 0x6a, + 0x28, 0x6b, 0x8b, 0x9a, 0x0f, 0x15, 0x82, 0x7b, 0xab, 0xf4, 0x45, 0x52, 0xfa, 0x07, 0x90, 0x9b, + 0x60, 0x4a, 0xd1, 0x08, 0xd3, 0xa8, 0x53, 0x17, 0x34, 0x9c, 0x28, 0x44, 0x28, 0x1d, 0x4a, 0x18, + 0x53, 0xb8, 0x77, 0x30, 0xf5, 0x5d, 0x67, 0x88, 0x18, 0x7e, 0x46, 0x18, 0x0e, 0x4d, 0xe9, 0xef, + 0xc1, 0xda, 0x05, 0x61, 0xd8, 0x42, 0x6a, 0xf4, 0xb6, 0x17, 0x95, 0x72, 0xbc, 0x99, 0xe1, 0xa8, + 0x66, 0x04, 0x1f, 0xa8, 0xfc, 0x7c, 0x25, 0xbc, 0x65, 0xfc, 0x4e, 0x83, 0x9d, 0x63, 0x3e, 0x64, + 0x6d, 0xd7, 0xc1, 0x1e, 0x6b, 0x32, 0x86, 0x86, 0xcf, 0x23, 0xdb, 0x1d, 0xd8, 0x1c, 0x12, 0xef, + 0xdc, 0x75, 0x86, 0xcc, 0xf1, 0x46, 0x72, 0x8a, 0x94, 0x1b, 0x0f, 0x17, 0xf5, 0x0a, 0x3d, 0x62, + 0x68, 0xcc, 0x72, 0x4c, 0x4c, 0x50, 0x78, 0xd3, 0xf0, 0xf9, 0x21, 0x9e, 0xa5, 0x46, 0x3c, 0x29, + 0x46, 0xbc, 0x28, 0x89, 0x47, 0x82, 0x66, 0xfc, 0x5b, 0x83, 0x5c, 0x64, 0x1c, 0xc1, 0x7d, 0x3b, + 0xcc, 0x88, 0x25, 0x62, 0x8a, 0x0a, 0x24, 0x5d, 0x78, 0x6b, 0xd1, 0x85, 0xa5, 0x29, 0x3c, 0x4a, + 0x98, 0xf7, 0xec, 0xa5, 0xb9, 0xf5, 0xe0, 0xa1, 0xcb, 0x0d, 0x5b, 0x43, 0x11, 0xbd, 0x85, 0x44, + 0xf8, 0x33, 0x3b, 0x32, 0x85, 0xef, 0xae, 0x08, 0x75, 0x59, 0xca, 0x8e, 0x12, 0xe6, 0x8e, 0xbb, + 0x8a, 0xd9, 0xca, 0x40, 0x8a, 0x4e, 0x27, 0xc6, 0x31, 0x14, 0xe3, 0x9d, 0xc4, 0x3b, 0x27, 0x16, + 0x5a, 0x6a, 0x79, 0xe7, 0x44, 0x4a, 0xee, 0xf4, 0x9d, 0xf1, 0x21, 0x6c, 0x2f, 0xef, 0x78, 0xfd, + 0x3b, 0xb0, 0x1e, 0xa0, 0x17, 0x72, 0x5c, 0x2c, 0xd7, 0xa1, 0x4c, 0x8d, 0x56, 0x31, 0x40, 0x2f, + 0x04, 0xe2, 0xd8, 0xa1, 0xcc, 0xf8, 0x19, 0xe4, 0xc2, 0xae, 0xd4, 0x3f, 0x84, 0x52, 0xd8, 0x91, + 0x33, 0x81, 0xa5, 0xf7, 0xa5, 0x12, 0x31, 0x8b, 0x21, 0x5e, 0xe8, 0xfa, 0x08, 0xb2, 0x8a, 0xa1, + 0x7f, 0x0b, 0x8a, 0x1e, 0x9a, 0x60, 0xea, 0xa3, 0x21, 0xe6, 0x37, 0xaf, 0xdc, 0x54, 0x85, 0x88, + 0xd6, 0xb1, 0xf9, 0x12, 0xe3, 0xb7, 0x63, 0xb8, 0x4d, 0xf9, 0xb7, 0xf1, 0x0b, 0xd8, 0xe6, 0x39, + 0x69, 0x5e, 0x20, 0xc7, 0x45, 0x03, 0xc7, 0x75, 0xd8, 0x95, 0x5a, 0x42, 0x0f, 0x20, 0x1f, 0x10, + 0x15, 0x8d, 0x0a, 0x24, 0x17, 0x10, 0x19, 0x08, 0xb7, 0x36, 0x24, 0xee, 0x74, 0xe2, 0x45, 0x97, + 0x03, 0xe7, 0x17, 0x24, 0x4d, 0x40, 0x8c, 0xff, 0x26, 0x21, 0xcd, 0xab, 0xaf, 0xbf, 0x0f, 0x69, + 0x1e, 0x83, 0xf0, 0x68, 0x7d, 0xd9, 0x72, 0xec, 0x39, 0x23, 0x0f, 0xdb, 0x27, 0x74, 0xd4, 0xbf, + 0xf2, 0xb1, 0x29, 0xc0, 0xb1, 0xdd, 0x94, 0x9c, 0xdb, 0x4d, 0x5b, 0x90, 0x09, 0xc8, 0xd4, 0xb3, + 0xc5, 0xa5, 0x91, 0x31, 0xe5, 0x41, 0x3f, 0x84, 0x5c, 0xb4, 0x72, 0xd2, 0xff, 0x6f, 0xe5, 0x6c, + 0xf0, 0x82, 0xf2, 0x85, 0xa8, 0x08, 0x66, 0x76, 0xa0, 0x36, 0x4f, 0x0b, 0xf2, 0xd1, 0x4b, 0x48, + 0xad, 0xae, 0xaf, 0xb7, 0xfd, 0x66, 0x62, 0xfa, 0xbb, 0xb0, 0x19, 0x2d, 0x92, 0xe8, 0x26, 0x96, + 0xeb, 0xab, 0x1c, 0x31, 0xd4, 0x55, 0x3c, 0xb7, 0xa3, 0x2c, 0xf9, 0x9a, 0xc9, 0x8a, 0xb8, 0x66, + 0x3b, 0xaa, 0x23, 0x9e, 0x35, 0x0f, 0x21, 0x4f, 0x9d, 0x91, 0x87, 0xd8, 0x34, 0xc0, 0x6a, 0x8d, + 0xcd, 0x08, 0xc6, 0x5f, 0x34, 0x58, 0x93, 0x6b, 0x31, 0x96, 0x37, 0x6d, 0x79, 0xde, 0x92, 0xab, + 0xf2, 0x96, 0x7a, 0xfd, 0xbc, 0x35, 0x01, 0x22, 0x67, 0xf8, 0x65, 0xcc, 0x7b, 0xf8, 0xc1, 0xa2, + 0x22, 0xe9, 0x62, 0xcf, 0x19, 0xa9, 0x99, 0x8a, 0x09, 0x19, 0xff, 0xd0, 0x20, 0x1f, 0xf1, 0xf5, + 0x26, 0x94, 0x42, 0xbf, 0xac, 0x73, 0x17, 0x8d, 0x54, 0xef, 0x3c, 0x5a, 0xe9, 0xdc, 0xc7, 0x2e, + 0x1a, 0x99, 0x05, 0xe5, 0x0f, 0x3f, 0x2c, 0xaf, 0x43, 0x72, 0x45, 0x1d, 0xe6, 0x0a, 0x9f, 0x7a, + 0xbd, 0xc2, 0xcf, 0x95, 0x28, 0x7d, 0xb7, 0x44, 0x7f, 0x4e, 0x42, 0xae, 0x2b, 0x16, 0x31, 0x72, + 0xbf, 0x89, 0x89, 0x78, 0x00, 0x79, 0x9f, 0xb8, 0x96, 0xe4, 0xa4, 0x05, 0x27, 0xe7, 0x13, 0xd7, + 0x5c, 0x28, 0x7b, 0xe6, 0x0d, 0x8d, 0xcb, 0xda, 0x1b, 0xc8, 0x5a, 0xf6, 0x6e, 0xd6, 0x02, 0x28, + 0xca, 0x54, 0xa8, 0x3b, 0xe9, 0x31, 0xcf, 0x81, 0x78, 0x69, 0x6b, 0x8b, 0x0f, 0x79, 0xe9, 0xb6, + 0x44, 0x9a, 0x0a, 0xc7, 0x25, 0xe4, 0x3b, 0x52, 0x2d, 0x97, 0xca, 0xaa, 0xb6, 0x34, 0x15, 0xce, + 0xf8, 0xbd, 0x06, 0x30, 0x5b, 0xad, 0xfc, 0x49, 0x4b, 0x85, 0x0b, 0xd6, 0x9c, 0xe5, 0xda, 0xaa, + 0xa2, 0x29, 0xfb, 0x45, 0x1a, 0xf7, 0xbb, 0x0d, 0xa5, 0x59, 0x33, 0x52, 0x1c, 0x3a, 0xb3, 0x44, + 0x49, 0xf4, 0xd2, 0xec, 0x61, 0x66, 0x16, 0x2f, 0x62, 0x27, 0xe3, 0xaf, 0x1a, 0xe4, 0x85, 0x4f, + 0x27, 0x98, 0xa1, 0xb9, 0x1a, 0x6a, 0xaf, 0x5f, 0xc3, 0x47, 0x00, 0x52, 0x0d, 0x75, 0x5e, 0x62, + 0xd5, 0x59, 0x79, 0x41, 0xe9, 0x39, 0x2f, 0xb1, 0xfe, 0xa3, 0x28, 0xe1, 0xa9, 0xaf, 0x4e, 0xb8, + 0x1a, 0xe9, 0x30, 0xed, 0xf7, 0x21, 0xeb, 0x4d, 0x27, 0x16, 0x7f, 0x5e, 0xa6, 0x65, 0xb7, 0x7a, + 0xd3, 0x49, 0xff, 0x92, 0x1a, 0xbf, 0x86, 0x6c, 0xff, 0x52, 0xfc, 0xd6, 0x92, 0x0b, 0x86, 0xa8, + 0x07, 0xbe, 0x5c, 0x57, 0x39, 0x4e, 0x10, 0xef, 0xd9, 0x25, 0xbb, 0x4a, 0x6f, 0x7c, 0xcd, 0x5f, + 0x71, 0xea, 0xf7, 0xdb, 0x3b, 0x7f, 0xd3, 0xa0, 0x10, 0xbb, 0x1f, 0xf4, 0x1f, 0xc0, 0xbd, 0xd6, + 0xf1, 0x59, 0xfb, 0x13, 0xab, 0x73, 0x60, 0x7d, 0x7c, 0xdc, 0x7c, 0x6a, 0x7d, 0x7a, 0xfa, 0xc9, + 0xe9, 0xd9, 0xcf, 0x4f, 0xcb, 0x89, 0xea, 0xf6, 0xf5, 0x4d, 0x5d, 0x8f, 0x61, 0x3f, 0xf5, 0x9e, + 0x7b, 0xe4, 0x85, 0xa7, 0xef, 0xc3, 0xd6, 0xbc, 0x48, 0xb3, 0xd5, 0x3b, 0x3c, 0xed, 0x97, 0xb5, + 0xea, 0xbd, 0xeb, 0x9b, 0xfa, 0x66, 0x4c, 0xa2, 0x39, 0xa0, 0xd8, 0x63, 0x8b, 0x02, 0xed, 0xb3, + 0x93, 0x93, 0x4e, 0xbf, 0x9c, 0x5c, 0x10, 0x50, 0x17, 0xf6, 0xdb, 0xb0, 0x39, 0x2f, 0x70, 0xda, + 0x39, 0x2e, 0xa7, 0xaa, 0xfa, 0xf5, 0x4d, 0x7d, 0x3d, 0x86, 0x3e, 0x75, 0xdc, 0x6a, 0xee, 0xb7, + 0x7f, 0xa8, 0x25, 0xfe, 0xf4, 0xc7, 0x9a, 0xc6, 0x23, 0x2b, 0xcd, 0xdd, 0x11, 0xfa, 0xf7, 0xe1, + 0x7e, 0xaf, 0xf3, 0xf4, 0xf4, 0xf0, 0xc0, 0x3a, 0xe9, 0x3d, 0xb5, 0xfa, 0xbf, 0xec, 0x1e, 0xc6, + 0xa2, 0xdb, 0xb8, 0xbe, 0xa9, 0x17, 0x54, 0x48, 0xab, 0xd0, 0x5d, 0xf3, 0xf0, 0xd9, 0x59, 0xff, + 0xb0, 0xac, 0x49, 0x74, 0x37, 0xc0, 0xfc, 0x0d, 0x28, 0xd0, 0x8f, 0x61, 0x67, 0x09, 0x3a, 0x0a, + 0x6c, 0xf3, 0xfa, 0xa6, 0x5e, 0xea, 0x06, 0x58, 0xce, 0x8f, 0x90, 0x68, 0x40, 0x65, 0x51, 0xe2, + 0xac, 0x7b, 0xd6, 0x6b, 0x1e, 0x97, 0xeb, 0xd5, 0xf2, 0xf5, 0x4d, 0xbd, 0x18, 0x5e, 0x86, 0x1c, + 0x3f, 0x8b, 0xac, 0xf5, 0xec, 0xf3, 0xdb, 0x9a, 0xf6, 0xc5, 0x6d, 0x4d, 0xfb, 0xd7, 0x6d, 0x4d, + 0xfb, 0xec, 0x55, 0x2d, 0xf1, 0xc5, 0xab, 0x5a, 0xe2, 0xef, 0xaf, 0x6a, 0x89, 0x5f, 0x7d, 0x30, + 0x72, 0xd8, 0x78, 0x3a, 0x68, 0x0c, 0xc9, 0x64, 0xdf, 0x45, 0x2f, 0xaf, 0x5c, 0x6c, 0x8f, 0x70, + 0x10, 0xfb, 0x7c, 0x6f, 0x48, 0x02, 0xf5, 0x3f, 0x8d, 0xfd, 0xbb, 0xff, 0x80, 0x18, 0xac, 0x09, + 0xfa, 0xfb, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xd3, 0x01, 0xce, 0x2f, 0x41, 0x11, 0x00, 0x00, } func (m *PartSetHeader) Marshal() (dAtA []byte, err error) { @@ -1915,7 +1906,7 @@ func (m *Data) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintTypes(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x2a + dAtA[i] = 0x22 { size, err := m.Evidence.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -1925,7 +1916,7 @@ func (m *Data) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintTypes(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 + dAtA[i] = 0x1a { size, err := m.IntermediateStateRoots.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -1935,14 +1926,7 @@ func (m *Data) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintTypes(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a - if len(m.MetaData) > 0 { - i -= len(m.MetaData) - copy(dAtA[i:], m.MetaData) - i = encodeVarintTypes(dAtA, i, uint64(len(m.MetaData))) - i-- - dAtA[i] = 0x12 - } + dAtA[i] = 0x12 if len(m.Txs) > 0 { for iNdEx := len(m.Txs) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.Txs[iNdEx]) @@ -2876,10 +2860,6 @@ func (m *Data) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } - l = len(m.MetaData) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } l = m.IntermediateStateRoots.Size() n += 1 + l + sovTypes(uint64(l)) l = m.Evidence.Size() @@ -4164,40 +4144,6 @@ func (m *Data) Unmarshal(dAtA []byte) error { copy(m.Txs[len(m.Txs)-1], dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MetaData", 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.MetaData = append(m.MetaData[:0], dAtA[iNdEx:postIndex]...) - if m.MetaData == nil { - m.MetaData = []byte{} - } - iNdEx = postIndex - case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field IntermediateStateRoots", wireType) } @@ -4230,7 +4176,7 @@ func (m *Data) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 4: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Evidence", wireType) } @@ -4263,7 +4209,7 @@ func (m *Data) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 5: + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Messages", wireType) } diff --git a/proto/tendermint/types/types.proto b/proto/tendermint/types/types.proto index 3cffcc7a7a..96fd42a177 100644 --- a/proto/tendermint/types/types.proto +++ b/proto/tendermint/types/types.proto @@ -88,10 +88,9 @@ message Data { // This means that block.AppHash does not include these txs. repeated bytes txs = 1; - bytes meta_data = 2; - IntermediateStateRoots intermediate_state_roots = 3 [(gogoproto.nullable) = false]; - EvidenceData evidence = 4 [(gogoproto.nullable) = false]; - Messages messages = 5 [(gogoproto.nullable) = false]; + IntermediateStateRoots intermediate_state_roots = 2 [(gogoproto.nullable) = false]; + EvidenceData evidence = 3 [(gogoproto.nullable) = false]; + Messages messages = 4 [(gogoproto.nullable) = false]; } // DuplicateVoteEvidence contains evidence a validator signed two conflicting @@ -128,7 +127,7 @@ message Messages { message Message { bytes namespace_id = 1; - bytes data = 2; + bytes data = 2; } // DataAvailabilityHeader contains the row and column roots of the erasure @@ -165,10 +164,10 @@ message Vote { // Commit contains the evidence that a block was committed by a set of validators. message Commit { - int64 height = 1; - int32 round = 2; - BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; - repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; + int64 height = 1; + int32 round = 2; + BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; + repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; } // CommitSig is a part of the Vote included in a Commit. diff --git a/state/execution.go b/state/execution.go index fc13a8fa16..064d0ce485 100644 --- a/state/execution.go +++ b/state/execution.go @@ -133,7 +133,7 @@ func (blockExec *BlockExecutor) CreateProposalBlock( ppt := processedBlockTxs.GetTxs() - metaData := processedBlockTxs.GetMetaData() + pbmessages := processedBlockTxs.GetMessages() lp := len(ppt) processedTxs := make(types.Txs, lp) @@ -143,7 +143,9 @@ func (blockExec *BlockExecutor) CreateProposalBlock( } } - return state.MakeBlock(height, processedTxs, metaData, evidence, nil, nil, commit, proposerAddr) + messages := types.MessagesFromProto(pbmessages) + + return state.MakeBlock(height, processedTxs, evidence, nil, messages, commit, proposerAddr) } // ValidateBlock validates the given block against the given state. @@ -339,7 +341,6 @@ func execBlockOnProxyApp( Header: *pbh, LastCommitInfo: commitInfo, ByzantineValidators: byzVals, - MetaData: block.MetaData, }) if err != nil { logger.Error("Error in proxyAppConn.BeginBlock", "err", err) diff --git a/state/execution_test.go b/state/execution_test.go index 4af4acd28a..e3859205be 100644 --- a/state/execution_test.go +++ b/state/execution_test.go @@ -96,7 +96,7 @@ func TestBeginBlockValidators(t *testing.T) { lastCommit := types.NewCommit(1, 0, prevBlockID, tc.lastCommitSigs) // block for height 2 - block, _ := state.MakeBlock(2, makeTxs(2), nil, nil, nil, nil, lastCommit, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(2, makeTxs(2), nil, nil, types.Messages{}, lastCommit, state.Validators.GetProposer().Address) _, err = sm.ExecCommitBlock(proxyApp.Consensus(), block, log.TestingLogger(), stateStore, 1) require.Nil(t, err, tc.desc) diff --git a/state/helpers_test.go b/state/helpers_test.go index 27b0a3b519..4f8688122e 100644 --- a/state/helpers_test.go +++ b/state/helpers_test.go @@ -57,10 +57,9 @@ func makeAndApplyGoodBlock(state sm.State, height int64, lastCommit *types.Commi block, _ := state.MakeBlock( height, makeTxs(height), - nil, evidence, nil, - nil, + types.Messages{}, lastCommit, proposerAddr, ) @@ -146,8 +145,7 @@ func makeBlock(state sm.State, height int64) *types.Block { makeTxs(state.LastBlockHeight), nil, nil, - nil, - nil, + types.Messages{}, new(types.Commit), state.Validators.GetProposer().Address, ) diff --git a/state/state.go b/state/state.go index 9e9c805b14..b3c4858b05 100644 --- a/state/state.go +++ b/state/state.go @@ -236,16 +236,15 @@ func StateFromProto(pb *tmstate.State) (*State, error) { //nolint:golint func (state State) MakeBlock( height int64, txs []types.Tx, - metaData []byte, evidence []types.Evidence, intermediateStateRoots []tmbytes.HexBytes, - messages []types.Message, + messages types.Messages, commit *types.Commit, proposerAddress []byte, ) (*types.Block, *types.PartSet) { // Build base block with block data. - block := types.MakeBlock(height, txs, metaData, evidence, intermediateStateRoots, messages, commit) + block := types.MakeBlock(height, txs, evidence, intermediateStateRoots, messages, commit) // Set time. var timestamp time.Time diff --git a/state/validation_test.go b/state/validation_test.go index b7e352068e..42e3acdfb0 100644 --- a/state/validation_test.go +++ b/state/validation_test.go @@ -84,7 +84,7 @@ func TestValidateBlockHeader(t *testing.T) { Invalid blocks don't pass */ for _, tc := range testCases { - block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, nil, nil, lastCommit, proposerAddr) + block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, types.Messages{}, lastCommit, proposerAddr) tc.malleateBlock(block) err := blockExec.ValidateBlock(state, block) t.Logf("%s: %v", tc.name, err) @@ -102,7 +102,7 @@ func TestValidateBlockHeader(t *testing.T) { nextHeight := validationTestsStopHeight block, _ := state.MakeBlock( nextHeight, - makeTxs(nextHeight), nil, nil, nil, nil, + makeTxs(nextHeight), nil, nil, types.Messages{}, lastCommit, state.Validators.GetProposer().Address, ) @@ -152,7 +152,7 @@ func TestValidateBlockCommit(t *testing.T) { state.LastBlockID, []types.CommitSig{wrongHeightVote.CommitSig()}, ) - block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, nil, nil, wrongHeightCommit, proposerAddr) + block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, types.Messages{}, wrongHeightCommit, proposerAddr) err = blockExec.ValidateBlock(state, block) _, isErrInvalidCommitHeight := err.(types.ErrInvalidCommitHeight) require.True(t, isErrInvalidCommitHeight, "expected ErrInvalidCommitHeight at height %d but got: %v", height, err) @@ -160,7 +160,7 @@ func TestValidateBlockCommit(t *testing.T) { /* #2589: test len(block.LastCommit.Signatures) == state.LastValidators.Size() */ - block, _ = state.MakeBlock(height, makeTxs(height), nil, nil, nil, nil, wrongSigsCommit, proposerAddr) + block, _ = state.MakeBlock(height, makeTxs(height), nil, nil, types.Messages{}, wrongSigsCommit, proposerAddr) err = blockExec.ValidateBlock(state, block) _, isErrInvalidCommitSignatures := err.(types.ErrInvalidCommitSignatures) require.True(t, isErrInvalidCommitSignatures, @@ -267,7 +267,7 @@ func TestValidateBlockEvidence(t *testing.T) { evidence = append(evidence, newEv) currentBytes += int64(len(newEv.Bytes())) } - block, _ := state.MakeBlock(height, makeTxs(height), nil, evidence, nil, nil, lastCommit, proposerAddr) + block, _ := state.MakeBlock(height, makeTxs(height), evidence, nil, types.Messages{}, lastCommit, proposerAddr) err := blockExec.ValidateBlock(state, block) if assert.Error(t, err) { _, ok := err.(*types.ErrEvidenceOverflow) diff --git a/store/store_test.go b/store/store_test.go index fa2b90dc0c..24b8ccc47e 100644 --- a/store/store_test.go +++ b/store/store_test.go @@ -50,8 +50,8 @@ func makeTxs(height int64) (txs []types.Tx) { } func makeBlock(height int64, state sm.State, lastCommit *types.Commit) *types.Block { - block, _ := state.MakeBlock(height, makeTxs(height), nil, nil, - nil, nil, lastCommit, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(height, makeTxs(height), nil, + nil, types.Messages{}, lastCommit, state.Validators.GetProposer().Address) return block } diff --git a/types/block.go b/types/block.go index f4abaf9cc4..c515673bc7 100644 --- a/types/block.go +++ b/types/block.go @@ -1148,9 +1148,6 @@ type Data struct { // This means that block.AppHash does not include these txs. Txs Txs `json:"txs"` - // MetaData is a arbitrary byte slice. This field will vary on the use case of the application - // NOTE: can be empty or populated. - MetaData []byte `json:"meta_data"` // Intermediate state roots of the Txs included in block.Height // and executed by state state @ block.Height+1. // @@ -1246,6 +1243,34 @@ type Message struct { Data []byte } +var ( + MessageEmpty = Message{} + MessagesEmpty = Messages{} +) + +func MessageFromProto(p *tmproto.Message) Message { + if p == nil { + return MessageEmpty + } + return Message{ + NamespaceID: p.NamespaceId, + Data: p.Data, + } +} + +func MessagesFromProto(p *tmproto.Messages) Messages { + if p == nil { + return MessagesEmpty + } + + msgs := make([]Message, 0, len(p.MessagesList)) + + for i := 0; i < len(p.MessagesList); i++ { + msgs = append(msgs, MessageFromProto(p.MessagesList[i])) + } + return Messages{MessagesList: msgs} +} + // StringIndented returns an indented string representation of the transactions. func (data *Data) StringIndented(indent string) string { if data == nil { @@ -1277,7 +1302,6 @@ func (data *Data) ToProto() tmproto.Data { tp.Txs = txBzs } - tp.MetaData = data.MetaData rawRoots := data.IntermediateStateRoots.RawRootsList if len(rawRoots) > 0 { roots := make([][]byte, len(rawRoots)) @@ -1311,7 +1335,6 @@ func DataFromProto(dp *tmproto.Data) (Data, error) { data.Txs = Txs{} } - data.MetaData = dp.MetaData if len(dp.Messages.MessagesList) > 0 { msgs := make([]Message, len(dp.Messages.MessagesList)) for i, m := range dp.Messages.MessagesList { diff --git a/types/block_test.go b/types/block_test.go index ccbdaf8116..62526f0a7b 100644 --- a/types/block_test.go +++ b/types/block_test.go @@ -44,7 +44,7 @@ func TestBlockAddEvidence(t *testing.T) { ev := NewMockDuplicateVoteEvidenceWithValidator(h, time.Now(), vals[0], "block-test-chain") evList := []Evidence{ev} - block := MakeBlock(h, txs, nil, evList, nil, nil, commit) + block := MakeBlock(h, txs, evList, nil, Messages{}, commit) require.NotNil(t, block) require.Equal(t, 1, len(block.Evidence.Evidence)) require.NotNil(t, block.EvidenceHash) @@ -105,7 +105,7 @@ func TestBlockValidateBasic(t *testing.T) { tc := tc i := i t.Run(tc.testName, func(t *testing.T) { - block := MakeBlock(h, txs, nil, evList, nil, nil, commit) + block := MakeBlock(h, txs, evList, nil, Messages{}, commit) block.ProposerAddress = valSet.GetProposer().Address tc.malleateBlock(block) err = block.ValidateBasic() @@ -117,13 +117,13 @@ func TestBlockValidateBasic(t *testing.T) { func TestBlockHash(t *testing.T) { assert.Nil(t, (*Block)(nil).Hash()) - assert.Nil(t, MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil, nil, nil, nil).Hash()) + assert.Nil(t, MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil, Messages{}, nil).Hash()) } func TestBlockMakePartSet(t *testing.T) { assert.Nil(t, (*Block)(nil).MakePartSet(2)) - partSet := MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil, nil, nil, nil).MakePartSet(1024) + partSet := MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil, Messages{}, nil).MakePartSet(1024) assert.NotNil(t, partSet) assert.EqualValues(t, 1, partSet.Total()) } @@ -141,7 +141,7 @@ func TestBlockMakePartSetWithEvidence(t *testing.T) { ev := NewMockDuplicateVoteEvidenceWithValidator(h, time.Now(), vals[0], "block-test-chain") evList := []Evidence{ev} - partSet := MakeBlock(h, []Tx{Tx("Hello World")}, nil, evList, nil, nil, commit).MakePartSet(512) + partSet := MakeBlock(h, []Tx{Tx("Hello World")}, evList, nil, Messages{}, commit).MakePartSet(512) assert.NotNil(t, partSet) assert.EqualValues(t, 5, partSet.Total()) } @@ -158,7 +158,7 @@ func TestBlockHashesTo(t *testing.T) { ev := NewMockDuplicateVoteEvidenceWithValidator(h, time.Now(), vals[0], "block-test-chain") evList := []Evidence{ev} - block := MakeBlock(h, []Tx{Tx("Hello World")}, nil, evList, nil, nil, commit) + block := MakeBlock(h, []Tx{Tx("Hello World")}, evList, nil, Messages{}, commit) block.ValidatorsHash = valSet.Hash() assert.False(t, block.HashesTo([]byte{})) assert.False(t, block.HashesTo([]byte("something else"))) @@ -166,7 +166,7 @@ func TestBlockHashesTo(t *testing.T) { } func TestBlockSize(t *testing.T) { - size := MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil, nil, nil, nil).Size() + size := MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil, Messages{}, nil).Size() if size <= 0 { t.Fatal("Size of the block is zero or negative") } @@ -177,7 +177,7 @@ func TestBlockString(t *testing.T) { assert.Equal(t, "nil-Block", (*Block)(nil).StringIndented("")) assert.Equal(t, "nil-Block", (*Block)(nil).StringShort()) - block := MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil, nil, nil, nil) + block := MakeBlock(int64(3), []Tx{Tx("Hello World")}, nil, nil, Messages{}, nil) assert.NotEqual(t, "nil-Block", block.String()) assert.NotEqual(t, "nil-Block", block.StringIndented("")) assert.NotEqual(t, "nil-Block", block.StringShort()) @@ -649,17 +649,17 @@ func TestBlockIDValidateBasic(t *testing.T) { func TestBlockProtoBuf(t *testing.T) { h := tmrand.Int63() c1 := randCommit(time.Now()) - b1 := MakeBlock(h, []Tx{Tx([]byte{1})}, nil, []Evidence{}, nil, nil, &Commit{Signatures: []CommitSig{}}) + b1 := MakeBlock(h, []Tx{Tx([]byte{1})}, []Evidence{}, nil, Messages{}, &Commit{Signatures: []CommitSig{}}) b1.ProposerAddress = tmrand.Bytes(crypto.AddressSize) - b2 := MakeBlock(h, []Tx{Tx([]byte{1})}, nil, []Evidence{}, nil, nil, c1) + b2 := MakeBlock(h, []Tx{Tx([]byte{1})}, []Evidence{}, nil, Messages{}, c1) b2.ProposerAddress = tmrand.Bytes(crypto.AddressSize) evidenceTime := time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC) evi := NewMockDuplicateVoteEvidence(h, evidenceTime, "block-test-chain") b2.Evidence = EvidenceData{Evidence: EvidenceList{evi}} b2.EvidenceHash = b2.Evidence.Hash() - b3 := MakeBlock(h, []Tx{}, nil, []Evidence{}, nil, nil, c1) + b3 := MakeBlock(h, []Tx{}, []Evidence{}, nil, Messages{}, c1) b3.ProposerAddress = tmrand.Bytes(crypto.AddressSize) testCases := []struct { msg string diff --git a/types/event_bus_test.go b/types/event_bus_test.go index cf5a30d011..499f3e06e4 100644 --- a/types/event_bus_test.go +++ b/types/event_bus_test.go @@ -75,7 +75,7 @@ func TestEventBusPublishEventNewBlock(t *testing.T) { } }) - block := MakeBlock(0, []Tx{}, nil, []Evidence{}, nil, nil, nil) + block := MakeBlock(0, []Tx{}, []Evidence{}, nil, Messages{}, nil) resultBeginBlock := abci.ResponseBeginBlock{ Events: []abci.Event{ {Type: "testType", Attributes: []abci.EventAttribute{{Key: []byte("baz"), Value: []byte("1")}}}, @@ -234,7 +234,7 @@ func TestEventBusPublishEventNewBlockHeader(t *testing.T) { } }) - block := MakeBlock(0, []Tx{}, nil, []Evidence{}, nil, nil, nil) + block := MakeBlock(0, []Tx{}, []Evidence{}, nil, Messages{}, nil) resultBeginBlock := abci.ResponseBeginBlock{ Events: []abci.Event{ {Type: "testType", Attributes: []abci.EventAttribute{{Key: []byte("baz"), Value: []byte("1")}}}, diff --git a/types/test_util.go b/types/test_util.go index 309fddc619..d563730608 100644 --- a/types/test_util.go +++ b/types/test_util.go @@ -89,7 +89,7 @@ func MakeVote( // hence, test_util.go is quite misleading. func MakeBlock( height int64, - txs []Tx, metaData []byte, evidence []Evidence, intermediateStateRoots []tmbytes.HexBytes, messages []Message, + txs []Tx, evidence []Evidence, intermediateStateRoots []tmbytes.HexBytes, messages Messages, lastCommit *Commit) *Block { block := &Block{ Header: Header{ @@ -98,10 +98,9 @@ func MakeBlock( }, Data: Data{ Txs: txs, - MetaData: metaData, IntermediateStateRoots: IntermediateStateRoots{RawRootsList: intermediateStateRoots}, Evidence: EvidenceData{Evidence: evidence}, - Messages: Messages{MessagesList: messages}, + Messages: messages, }, LastCommit: lastCommit, } From acd911a1a121c7a43c382ad2f84d86751fb49dce Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Mon, 14 Dec 2020 18:09:29 +0100 Subject: [PATCH 29/32] fix linting --- evidence/pool_test.go | 3 ++- state/execution_test.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/evidence/pool_test.go b/evidence/pool_test.go index 023cbfaaab..1eea24d764 100644 --- a/evidence/pool_test.go +++ b/evidence/pool_test.go @@ -406,7 +406,8 @@ func initializeBlockStore(db dbm.DB, state sm.State, valAddr []byte) *store.Bloc for i := int64(1); i <= state.LastBlockHeight; i++ { lastCommit := makeCommit(i-1, valAddr) - block, _ := state.MakeBlock(i, []types.Tx{}, nil, nil, types.Messages{}, lastCommit, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(i, []types.Tx{}, nil, nil, + types.Messages{}, lastCommit, state.Validators.GetProposer().Address) block.Header.Time = defaultEvidenceTime.Add(time.Duration(i) * time.Minute) block.Header.Version = tmversion.Consensus{Block: version.BlockProtocol, App: 1} const parts = 1 diff --git a/state/execution_test.go b/state/execution_test.go index e3859205be..9af707d457 100644 --- a/state/execution_test.go +++ b/state/execution_test.go @@ -96,7 +96,8 @@ func TestBeginBlockValidators(t *testing.T) { lastCommit := types.NewCommit(1, 0, prevBlockID, tc.lastCommitSigs) // block for height 2 - block, _ := state.MakeBlock(2, makeTxs(2), nil, nil, types.Messages{}, lastCommit, state.Validators.GetProposer().Address) + block, _ := state.MakeBlock(2, makeTxs(2), nil, nil, + types.Messages{}, lastCommit, state.Validators.GetProposer().Address) _, err = sm.ExecCommitBlock(proxyApp.Consensus(), block, log.TestingLogger(), stateStore, 1) require.Nil(t, err, tc.desc) From 7d179d2fa1d9fe43d2add23bfc570c6cb5e5e76d Mon Sep 17 00:00:00 2001 From: Marko Date: Mon, 14 Dec 2020 18:09:54 +0100 Subject: [PATCH 30/32] Update state/execution.go Co-authored-by: Ismail Khoffi --- state/execution.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/state/execution.go b/state/execution.go index 064d0ce485..6ebc091fd6 100644 --- a/state/execution.go +++ b/state/execution.go @@ -128,7 +128,14 @@ func (blockExec *BlockExecutor) CreateProposalBlock( processedBlockTxs, err := blockExec.proxyApp.PreprocessTxsSync(abci.RequestPreprocessTxs{Txs: bzs}) if err != nil { - panic(err) // TODO: what to do?? + // The App MUST ensure that only valid (and hence 'processable') + // Tx enter the mempool. Hence, at this point, we can't have any non-processable + // transaction causing an error. Also, the App can simply skip any Tx that could cause any + // kind of trouble. + // Either way, we can not recover in a meaningful way, unless we skip proposing + // this block, repair what caused the error and try again. + // Hence we panic on purpose for now. + panic(err) } ppt := processedBlockTxs.GetTxs() From add6537fd6e7cdd0e4ab3a2944bab5ba56812b77 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Mon, 14 Dec 2020 18:12:59 +0100 Subject: [PATCH 31/32] fix comment --- abci/types/application.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/abci/types/application.go b/abci/types/application.go index e2a7e88801..29ee5fb04c 100644 --- a/abci/types/application.go +++ b/abci/types/application.go @@ -14,15 +14,15 @@ type Application interface { Query(RequestQuery) ResponseQuery // Query for state // Mempool Connection - CheckTx(RequestCheckTx) ResponseCheckTx // Validate a tx for the mempool - PreprocessTxs(RequestPreprocessTxs) ResponsePreprocessTxs // State machine preprocessing of txs + CheckTx(RequestCheckTx) ResponseCheckTx // Validate a tx for the mempool // Consensus Connection - InitChain(RequestInitChain) ResponseInitChain // Initialize blockchain w validators/other info from TendermintCore - BeginBlock(RequestBeginBlock) ResponseBeginBlock // Signals the beginning of a block - DeliverTx(RequestDeliverTx) ResponseDeliverTx // Deliver a tx for full processing - EndBlock(RequestEndBlock) ResponseEndBlock // Signals the end of a block, returns changes to the validator set - Commit() ResponseCommit // Commit the state and return the application Merkle root hash + InitChain(RequestInitChain) ResponseInitChain // Initialize blockchain w validators/other info from TendermintCore + BeginBlock(RequestBeginBlock) ResponseBeginBlock // Signals the beginning of a block + DeliverTx(RequestDeliverTx) ResponseDeliverTx // Deliver a tx for full processing + EndBlock(RequestEndBlock) ResponseEndBlock // Signals the end of a block, returns changes to the validator set + Commit() ResponseCommit // Commit the state and return the application Merkle root hash + PreprocessTxs(RequestPreprocessTxs) ResponsePreprocessTxs // State machine preprocessing of txs // State Sync Connection ListSnapshots(RequestListSnapshots) ResponseListSnapshots // List available snapshots From dd9208a6b99151f89a551373b79af713be662b6d Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Tue, 15 Dec 2020 13:10:00 +0100 Subject: [PATCH 32/32] fix e2e tests --- abci/client/socket_client.go | 2 ++ abci/server/socket_server.go | 3 +++ abci/types/application.go | 1 + state/execution.go | 13 ++++++------- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/abci/client/socket_client.go b/abci/client/socket_client.go index 97dd7978a6..364be0f1be 100644 --- a/abci/client/socket_client.go +++ b/abci/client/socket_client.go @@ -492,6 +492,8 @@ func resMatchesReq(req *types.Request, res *types.Response) (ok bool) { _, ok = res.Value.(*types.Response_ListSnapshots) case *types.Request_OfferSnapshot: _, ok = res.Value.(*types.Response_OfferSnapshot) + case *types.Request_PreprocessTxs: + _, ok = res.Value.(*types.Response_PreprocessTxs) } return ok } diff --git a/abci/server/socket_server.go b/abci/server/socket_server.go index 71548deffe..2272c4f191 100644 --- a/abci/server/socket_server.go +++ b/abci/server/socket_server.go @@ -233,6 +233,9 @@ func (s *SocketServer) handleRequest(req *types.Request, responses chan<- *types case *types.Request_ApplySnapshotChunk: res := s.app.ApplySnapshotChunk(*r.ApplySnapshotChunk) responses <- types.ToResponseApplySnapshotChunk(res) + case *types.Request_PreprocessTxs: + res := s.app.PreprocessTxs(*r.PreprocessTxs) + responses <- types.ToResponsePreprocessTx(res) default: responses <- types.ToResponseException("Unknown request") } diff --git a/abci/types/application.go b/abci/types/application.go index 29ee5fb04c..04dd5dd9b9 100644 --- a/abci/types/application.go +++ b/abci/types/application.go @@ -8,6 +8,7 @@ import ( // to be driven by a blockchain-based replication engine via the ABCI. // All methods take a RequestXxx argument and return a ResponseXxx argument, // except CheckTx/DeliverTx, which take `tx []byte`, and `Commit`, which takes nothing. +// nolint:lll // ignore for interface type Application interface { // Info/Query Connection Info(RequestInfo) ResponseInfo // Return application info diff --git a/state/execution.go b/state/execution.go index 6ebc091fd6..60a119acf3 100644 --- a/state/execution.go +++ b/state/execution.go @@ -125,17 +125,16 @@ func (blockExec *BlockExecutor) CreateProposalBlock( // https://github.com/lazyledger/lazyledger-specs/blob/53e5f350838f1e0785ad670704bf91dac2f4f5a3/specs/block_proposer.md#deciding-on-a-block-size // Here, we instead assume a fixed (max) square size instead. // 2. feed them into MakeBlock below: - processedBlockTxs, err := blockExec.proxyApp.PreprocessTxsSync(abci.RequestPreprocessTxs{Txs: bzs}) if err != nil { - // The App MUST ensure that only valid (and hence 'processable') - // Tx enter the mempool. Hence, at this point, we can't have any non-processable - // transaction causing an error. Also, the App can simply skip any Tx that could cause any + // The App MUST ensure that only valid (and hence 'processable') + // Tx enter the mempool. Hence, at this point, we can't have any non-processable + // transaction causing an error. Also, the App can simply skip any Tx that could cause any // kind of trouble. - // Either way, we can not recover in a meaningful way, unless we skip proposing - // this block, repair what caused the error and try again. + // Either way, we can not recover in a meaningful way, unless we skip proposing + // this block, repair what caused the error and try again. // Hence we panic on purpose for now. - panic(err) + panic(err) } ppt := processedBlockTxs.GetTxs()