From f2318952e31dc7ab53abcb2595d493e6f4c1ba6d Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 18 Sep 2024 13:10:59 -0700 Subject: [PATCH 01/87] extends ResponseEndBlock protobuf message with timeouts --- abci/types/types.pb.go | 516 +++++++++++++++++------------ proto/tendermint/abci/types.proto | 3 + proto/tendermint/store/types.proto | 8 +- 3 files changed, 320 insertions(+), 207 deletions(-) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index c4af564c5e..c9cf04ff7f 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -10,6 +10,7 @@ import ( proto "github.com/gogo/protobuf/proto" _ "github.com/gogo/protobuf/types" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + duration "github.com/golang/protobuf/ptypes/duration" crypto "github.com/tendermint/tendermint/proto/tendermint/crypto" types1 "github.com/tendermint/tendermint/proto/tendermint/types" grpc "google.golang.org/grpc" @@ -2406,6 +2407,8 @@ type ResponseEndBlock struct { ValidatorUpdates []ValidatorUpdate `protobuf:"bytes,1,rep,name=validator_updates,json=validatorUpdates,proto3" json:"validator_updates"` ConsensusParamUpdates *ConsensusParams `protobuf:"bytes,2,opt,name=consensus_param_updates,json=consensusParamUpdates,proto3" json:"consensus_param_updates,omitempty"` Events []Event `protobuf:"bytes,3,rep,name=events,proto3" json:"events,omitempty"` + TimeoutPropose duration.Duration `protobuf:"bytes,4,opt,name=timeout_propose,json=timeoutPropose,proto3" json:"timeout_propose"` + TimeoutCommit duration.Duration `protobuf:"bytes,5,opt,name=timeout_commit,json=timeoutCommit,proto3" json:"timeout_commit"` } func (m *ResponseEndBlock) Reset() { *m = ResponseEndBlock{} } @@ -2462,6 +2465,20 @@ func (m *ResponseEndBlock) GetEvents() []Event { return nil } +func (m *ResponseEndBlock) GetTimeoutPropose() duration.Duration { + if m != nil { + return m.TimeoutPropose + } + return duration.Duration{} +} + +func (m *ResponseEndBlock) GetTimeoutCommit() duration.Duration { + if m != nil { + return m.TimeoutCommit + } + return duration.Duration{} +} + type ResponseCommit struct { // reserve 1 Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` @@ -3544,196 +3561,199 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 3014 bytes of a gzipped FileDescriptorProto + // 3065 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x4b, 0x73, 0xe3, 0xc6, - 0xf1, 0xe7, 0x9b, 0x44, 0x53, 0x7c, 0x68, 0x76, 0xbd, 0x4b, 0xc3, 0x6b, 0x69, 0x8d, 0x2d, 0xbf, - 0xd6, 0xb6, 0xf4, 0xb7, 0x5c, 0xeb, 0xbf, 0x1d, 0x3b, 0xb1, 0x45, 0x2e, 0xd7, 0x94, 0x57, 0x96, - 0x14, 0x88, 0x5a, 0xe7, 0xe5, 0x85, 0x41, 0x72, 0x44, 0xc2, 0x4b, 0x02, 0x30, 0x30, 0x94, 0xa5, - 0x3d, 0xa6, 0x92, 0x4a, 0x95, 0x73, 0x71, 0x55, 0x2e, 0xb9, 0xf8, 0x23, 0xe4, 0x9e, 0x4b, 0x72, - 0xc9, 0xc5, 0x55, 0x39, 0xc4, 0xc7, 0x1c, 0x52, 0x4e, 0xca, 0xce, 0x29, 0x5f, 0x20, 0xa7, 0x54, - 0x52, 0xf3, 0xc0, 0x8b, 0x24, 0x44, 0x68, 0x9d, 0x5b, 0x6e, 0x98, 0x46, 0x77, 0x03, 0xd3, 0x98, - 0xf9, 0x75, 0xff, 0x1a, 0x03, 0x4f, 0x10, 0x6c, 0x0e, 0xb0, 0x33, 0x31, 0x4c, 0xb2, 0xa9, 0xf7, - 0xfa, 0xc6, 0x26, 0x39, 0xb3, 0xb1, 0xbb, 0x61, 0x3b, 0x16, 0xb1, 0x50, 0x2d, 0xb8, 0xb9, 0x41, - 0x6f, 0xca, 0x4f, 0x86, 0xb4, 0xfb, 0xce, 0x99, 0x4d, 0xac, 0x4d, 0xdb, 0xb1, 0xac, 0x63, 0xae, - 0x2f, 0x5f, 0x0b, 0xdd, 0x66, 0x7e, 0xc2, 0xde, 0x22, 0x77, 0x85, 0xf1, 0x03, 0x7c, 0xe6, 0xdd, - 0x7d, 0x72, 0xce, 0xd6, 0xd6, 0x1d, 0x7d, 0xe2, 0xdd, 0x5e, 0x1f, 0x5a, 0xd6, 0x70, 0x8c, 0x37, - 0xd9, 0xa8, 0x37, 0x3d, 0xde, 0x24, 0xc6, 0x04, 0xbb, 0x44, 0x9f, 0xd8, 0x42, 0xe1, 0xf2, 0xd0, - 0x1a, 0x5a, 0xec, 0x72, 0x93, 0x5e, 0x71, 0xa9, 0xf2, 0x3b, 0x09, 0x8a, 0x2a, 0xfe, 0x78, 0x8a, - 0x5d, 0x82, 0xb6, 0x20, 0x87, 0xfb, 0x23, 0xab, 0x91, 0xbe, 0x9e, 0x7e, 0xae, 0xbc, 0x75, 0x6d, - 0x63, 0x66, 0x72, 0x1b, 0x42, 0xaf, 0xdd, 0x1f, 0x59, 0x9d, 0x94, 0xca, 0x74, 0xd1, 0x2d, 0xc8, - 0x1f, 0x8f, 0xa7, 0xee, 0xa8, 0x91, 0x61, 0x46, 0x4f, 0xc6, 0x19, 0xdd, 0xa1, 0x4a, 0x9d, 0x94, - 0xca, 0xb5, 0xe9, 0xa3, 0x0c, 0xf3, 0xd8, 0x6a, 0x64, 0xcf, 0x7f, 0xd4, 0x8e, 0x79, 0xcc, 0x1e, - 0x45, 0x75, 0x51, 0x13, 0xc0, 0xc5, 0x44, 0xb3, 0x6c, 0x62, 0x58, 0x66, 0x23, 0xc7, 0x2c, 0x9f, - 0x8a, 0xb3, 0x3c, 0xc4, 0x64, 0x9f, 0x29, 0x76, 0x52, 0xaa, 0xe4, 0x7a, 0x03, 0xea, 0xc3, 0x30, - 0x0d, 0xa2, 0xf5, 0x47, 0xba, 0x61, 0x36, 0xf2, 0xe7, 0xfb, 0xd8, 0x31, 0x0d, 0xd2, 0xa2, 0x8a, - 0xd4, 0x87, 0xe1, 0x0d, 0xe8, 0x94, 0x3f, 0x9e, 0x62, 0xe7, 0xac, 0x51, 0x38, 0x7f, 0xca, 0xdf, - 0xa7, 0x4a, 0x74, 0xca, 0x4c, 0x1b, 0xb5, 0xa1, 0xdc, 0xc3, 0x43, 0xc3, 0xd4, 0x7a, 0x63, 0xab, - 0xff, 0xa0, 0x51, 0x64, 0xc6, 0x4a, 0x9c, 0x71, 0x93, 0xaa, 0x36, 0xa9, 0x66, 0x27, 0xa5, 0x42, - 0xcf, 0x1f, 0xa1, 0x37, 0xa1, 0xd4, 0x1f, 0xe1, 0xfe, 0x03, 0x8d, 0x9c, 0x36, 0x4a, 0xcc, 0xc7, - 0x7a, 0x9c, 0x8f, 0x16, 0xd5, 0xeb, 0x9e, 0x76, 0x52, 0x6a, 0xb1, 0xcf, 0x2f, 0xe9, 0xfc, 0x07, - 0x78, 0x6c, 0x9c, 0x60, 0x87, 0xda, 0x4b, 0xe7, 0xcf, 0xff, 0x36, 0xd7, 0x64, 0x1e, 0xa4, 0x81, - 0x37, 0x40, 0x6f, 0x81, 0x84, 0xcd, 0x81, 0x98, 0x06, 0x30, 0x17, 0xd7, 0x63, 0xd7, 0x8a, 0x39, - 0xf0, 0x26, 0x51, 0xc2, 0xe2, 0x1a, 0xbd, 0x06, 0x85, 0xbe, 0x35, 0x99, 0x18, 0xa4, 0x51, 0x66, - 0xd6, 0x6b, 0xb1, 0x13, 0x60, 0x5a, 0x9d, 0x94, 0x2a, 0xf4, 0xd1, 0x1e, 0x54, 0xc7, 0x86, 0x4b, - 0x34, 0xd7, 0xd4, 0x6d, 0x77, 0x64, 0x11, 0xb7, 0xb1, 0xc2, 0x3c, 0x3c, 0x1d, 0xe7, 0x61, 0xd7, - 0x70, 0xc9, 0xa1, 0xa7, 0xdc, 0x49, 0xa9, 0x95, 0x71, 0x58, 0x40, 0xfd, 0x59, 0xc7, 0xc7, 0xd8, - 0xf1, 0x1d, 0x36, 0x2a, 0xe7, 0xfb, 0xdb, 0xa7, 0xda, 0x9e, 0x3d, 0xf5, 0x67, 0x85, 0x05, 0xe8, - 0xc7, 0x70, 0x69, 0x6c, 0xe9, 0x03, 0xdf, 0x9d, 0xd6, 0x1f, 0x4d, 0xcd, 0x07, 0x8d, 0x2a, 0x73, - 0xfa, 0x7c, 0xec, 0x4b, 0x5a, 0xfa, 0xc0, 0x73, 0xd1, 0xa2, 0x06, 0x9d, 0x94, 0xba, 0x3a, 0x9e, - 0x15, 0xa2, 0xfb, 0x70, 0x59, 0xb7, 0xed, 0xf1, 0xd9, 0xac, 0xf7, 0x1a, 0xf3, 0x7e, 0x33, 0xce, - 0xfb, 0x36, 0xb5, 0x99, 0x75, 0x8f, 0xf4, 0x39, 0x29, 0xea, 0x42, 0xdd, 0x76, 0xb0, 0xad, 0x3b, - 0x58, 0xb3, 0x1d, 0xcb, 0xb6, 0x5c, 0x7d, 0xdc, 0xa8, 0x33, 0xdf, 0xcf, 0xc6, 0xf9, 0x3e, 0xe0, - 0xfa, 0x07, 0x42, 0xbd, 0x93, 0x52, 0x6b, 0x76, 0x54, 0xc4, 0xbd, 0x5a, 0x7d, 0xec, 0xba, 0x81, - 0xd7, 0xd5, 0x65, 0x5e, 0x99, 0x7e, 0xd4, 0x6b, 0x44, 0xd4, 0x2c, 0x42, 0xfe, 0x44, 0x1f, 0x4f, - 0xb1, 0xf2, 0x2c, 0x94, 0x43, 0xb0, 0x84, 0x1a, 0x50, 0x9c, 0x60, 0xd7, 0xd5, 0x87, 0x98, 0xa1, - 0x98, 0xa4, 0x7a, 0x43, 0xa5, 0x0a, 0x2b, 0x61, 0x28, 0x52, 0x26, 0xbe, 0x21, 0x05, 0x19, 0x6a, - 0x78, 0x82, 0x1d, 0x97, 0x22, 0x8b, 0x30, 0x14, 0x43, 0x74, 0x03, 0x2a, 0x6c, 0xa9, 0x6b, 0xde, - 0x7d, 0x8a, 0x74, 0x39, 0x75, 0x85, 0x09, 0xef, 0x09, 0xa5, 0x75, 0x28, 0xdb, 0x5b, 0xb6, 0xaf, - 0x92, 0x65, 0x2a, 0x60, 0x6f, 0xd9, 0x42, 0x41, 0xf9, 0x0e, 0xd4, 0x67, 0x91, 0x09, 0xd5, 0x21, - 0xfb, 0x00, 0x9f, 0x89, 0xe7, 0xd1, 0x4b, 0x74, 0x59, 0x4c, 0x8b, 0x3d, 0x43, 0x52, 0xc5, 0x1c, - 0xff, 0x98, 0xf1, 0x8d, 0x7d, 0x48, 0x42, 0xaf, 0x41, 0x8e, 0x22, 0xbc, 0x00, 0x6b, 0x79, 0x83, - 0xc3, 0xff, 0x86, 0x07, 0xff, 0x1b, 0x5d, 0x0f, 0xfe, 0x9b, 0xa5, 0x2f, 0xbe, 0x5a, 0x4f, 0x7d, - 0xf6, 0xd7, 0xf5, 0xb4, 0xca, 0x2c, 0xd0, 0xe3, 0x14, 0x41, 0x74, 0xc3, 0xd4, 0x8c, 0x81, 0x78, - 0x4e, 0x91, 0x8d, 0x77, 0x06, 0xe8, 0x2e, 0xd4, 0xfb, 0x96, 0xe9, 0x62, 0xd3, 0x9d, 0xba, 0x1a, - 0x4f, 0x2f, 0x02, 0xa2, 0xe7, 0x77, 0x78, 0xcb, 0x53, 0x3c, 0x60, 0x7a, 0x6a, 0xad, 0x1f, 0x15, - 0xa0, 0x3b, 0x00, 0x27, 0xfa, 0xd8, 0x18, 0xe8, 0xc4, 0x72, 0xdc, 0x46, 0xee, 0x7a, 0x76, 0xa1, - 0x9b, 0x7b, 0x9e, 0xca, 0x91, 0x3d, 0xd0, 0x09, 0x6e, 0xe6, 0xe8, 0xdb, 0xaa, 0x21, 0x4b, 0xf4, - 0x0c, 0xd4, 0x74, 0xdb, 0xd6, 0x5c, 0xa2, 0x13, 0xac, 0xf5, 0xce, 0x08, 0x76, 0x19, 0x70, 0xaf, - 0xa8, 0x15, 0xdd, 0xb6, 0x0f, 0xa9, 0xb4, 0x49, 0x85, 0xe8, 0x69, 0xa8, 0x52, 0x90, 0x36, 0xf4, - 0xb1, 0x36, 0xc2, 0xc6, 0x70, 0x44, 0x18, 0x40, 0x67, 0xd5, 0x8a, 0x90, 0x76, 0x98, 0x50, 0x19, - 0xf8, 0x0b, 0x81, 0x01, 0x34, 0x42, 0x90, 0x1b, 0xe8, 0x44, 0x67, 0x81, 0x5c, 0x51, 0xd9, 0x35, - 0x95, 0xd9, 0x3a, 0x19, 0x89, 0xf0, 0xb0, 0x6b, 0x74, 0x05, 0x0a, 0xc2, 0x6d, 0x96, 0xb9, 0x15, - 0x23, 0xfa, 0xcd, 0x6c, 0xc7, 0x3a, 0xc1, 0x2c, 0x23, 0x95, 0x54, 0x3e, 0x50, 0x7e, 0x96, 0x81, - 0xd5, 0x39, 0x28, 0xa7, 0x7e, 0x47, 0xba, 0x3b, 0xf2, 0x9e, 0x45, 0xaf, 0xd1, 0xab, 0xd4, 0xaf, - 0x3e, 0xc0, 0x8e, 0x48, 0xa1, 0x8d, 0x70, 0x88, 0x78, 0x79, 0xd0, 0x61, 0xf7, 0x45, 0x68, 0x84, - 0x36, 0xda, 0x87, 0xfa, 0x58, 0x77, 0x89, 0xc6, 0xa1, 0x51, 0x0b, 0xa5, 0xd3, 0xf9, 0x84, 0xb0, - 0xab, 0x7b, 0x60, 0x4a, 0x17, 0xbb, 0x70, 0x54, 0x1d, 0x47, 0xa4, 0x48, 0x85, 0xcb, 0xbd, 0xb3, - 0x87, 0xba, 0x49, 0x0c, 0x13, 0x6b, 0x73, 0x5f, 0xee, 0xf1, 0x39, 0xa7, 0xed, 0x13, 0x63, 0x80, - 0xcd, 0xbe, 0xf7, 0xc9, 0x2e, 0xf9, 0xc6, 0xfe, 0x27, 0x75, 0x15, 0x15, 0xaa, 0xd1, 0x64, 0x84, - 0xaa, 0x90, 0x21, 0xa7, 0x22, 0x00, 0x19, 0x72, 0x8a, 0xfe, 0x0f, 0x72, 0x74, 0x92, 0x6c, 0xf2, - 0xd5, 0x05, 0x95, 0x80, 0xb0, 0xeb, 0x9e, 0xd9, 0x58, 0x65, 0x9a, 0x8a, 0xe2, 0xef, 0x06, 0x3f, - 0x41, 0xcd, 0x7a, 0x55, 0x9e, 0x87, 0xda, 0x4c, 0x06, 0x0a, 0x7d, 0xbf, 0x74, 0xf8, 0xfb, 0x29, - 0x35, 0xa8, 0x44, 0xd2, 0x8d, 0x72, 0x05, 0x2e, 0x2f, 0xca, 0x1e, 0xca, 0xc8, 0x97, 0x47, 0xb2, - 0x00, 0xba, 0x05, 0x25, 0x3f, 0x7d, 0xf0, 0xdd, 0x38, 0x1f, 0x2b, 0x4f, 0x59, 0xf5, 0x55, 0xe9, - 0x36, 0xa4, 0xcb, 0x9a, 0xad, 0x87, 0x0c, 0x7b, 0xf1, 0xa2, 0x6e, 0xdb, 0x1d, 0xdd, 0x1d, 0x29, - 0x1f, 0x42, 0x23, 0x2e, 0x35, 0xcc, 0x4c, 0x23, 0xe7, 0x2f, 0xc3, 0x2b, 0x50, 0x38, 0xb6, 0x9c, - 0x89, 0x4e, 0x98, 0xb3, 0x8a, 0x2a, 0x46, 0x74, 0x79, 0xf2, 0x34, 0x91, 0x65, 0x62, 0x3e, 0x50, - 0x34, 0x78, 0x3c, 0x36, 0x3d, 0x50, 0x13, 0xc3, 0x1c, 0x60, 0x1e, 0xcf, 0x8a, 0xca, 0x07, 0x81, - 0x23, 0xfe, 0xb2, 0x7c, 0x40, 0x1f, 0xeb, 0xb2, 0xb9, 0x32, 0xff, 0x92, 0x2a, 0x46, 0xca, 0xdf, - 0xd3, 0x70, 0x65, 0x71, 0x92, 0x40, 0xb7, 0x00, 0x38, 0xa0, 0xfa, 0xdb, 0xae, 0xbc, 0x75, 0x65, - 0x7e, 0xd1, 0xdf, 0xd6, 0x89, 0xae, 0x4a, 0x4c, 0x93, 0x5e, 0x52, 0x18, 0x08, 0xcc, 0x34, 0xd7, - 0x78, 0xc8, 0xd7, 0x4c, 0x56, 0xad, 0xf8, 0x3a, 0x87, 0xc6, 0xc3, 0x28, 0xbc, 0x65, 0xa3, 0xf0, - 0x16, 0xc4, 0x2e, 0x17, 0xd9, 0xc2, 0x1e, 0x96, 0xe6, 0x2f, 0x8a, 0xa5, 0xca, 0x2f, 0xc2, 0xd3, - 0x8c, 0xa4, 0xa8, 0xd0, 0xbe, 0x4e, 0x5f, 0x68, 0x5f, 0x47, 0xc3, 0x93, 0x49, 0x18, 0x1e, 0xe5, - 0x57, 0x00, 0x25, 0x15, 0xbb, 0x36, 0x05, 0x61, 0xd4, 0x04, 0x09, 0x9f, 0xf6, 0x31, 0xaf, 0x94, - 0xd3, 0xb1, 0x95, 0x26, 0xd7, 0x6e, 0x7b, 0x9a, 0xb4, 0xcc, 0xf3, 0xcd, 0xd0, 0x2b, 0x82, 0x0d, - 0xc4, 0x17, 0xf6, 0xc2, 0x3c, 0x4c, 0x07, 0x5e, 0xf5, 0xe8, 0x40, 0x36, 0xb6, 0xb2, 0xe3, 0x56, - 0x33, 0x7c, 0xe0, 0x15, 0xc1, 0x07, 0x72, 0x4b, 0x1e, 0x16, 0x21, 0x04, 0xad, 0x08, 0x21, 0xc8, - 0x2f, 0x99, 0x66, 0x0c, 0x23, 0x68, 0x45, 0x18, 0x41, 0x61, 0x89, 0x93, 0x18, 0x4a, 0xf0, 0xaa, - 0x47, 0x09, 0x8a, 0x4b, 0xa6, 0x3d, 0xc3, 0x09, 0xee, 0x44, 0x39, 0x01, 0xaf, 0xe7, 0x6f, 0xc4, - 0x5a, 0xc7, 0x92, 0x82, 0xef, 0x86, 0x48, 0x81, 0x14, 0x5b, 0x91, 0x73, 0x27, 0x0b, 0x58, 0x41, - 0x2b, 0xc2, 0x0a, 0x60, 0x49, 0x0c, 0x62, 0x68, 0xc1, 0xdb, 0x61, 0x5a, 0x50, 0x8e, 0x65, 0x16, - 0x62, 0xd1, 0x2c, 0xe2, 0x05, 0xaf, 0xfb, 0xbc, 0x60, 0x25, 0x96, 0xd8, 0x88, 0x39, 0xcc, 0x12, - 0x83, 0xfd, 0x39, 0x62, 0xc0, 0x0b, 0xf9, 0x67, 0x62, 0x5d, 0x2c, 0x61, 0x06, 0xfb, 0x73, 0xcc, - 0xa0, 0xba, 0xc4, 0xe1, 0x12, 0x6a, 0xf0, 0x93, 0xc5, 0xd4, 0x20, 0xbe, 0x78, 0x17, 0xaf, 0x99, - 0x8c, 0x1b, 0x68, 0x31, 0xdc, 0x80, 0xd7, 0xef, 0x2f, 0xc4, 0xba, 0x4f, 0x4c, 0x0e, 0x8e, 0x16, - 0x90, 0x03, 0x5e, 0xc6, 0x3f, 0x17, 0xeb, 0x3c, 0x01, 0x3b, 0x38, 0x5a, 0xc0, 0x0e, 0xd0, 0x52, - 0xb7, 0xc9, 0xe9, 0xc1, 0xf3, 0xb4, 0x0a, 0x9b, 0x81, 0x39, 0x9a, 0xc9, 0xb0, 0xe3, 0x58, 0x8e, - 0xa8, 0xbc, 0xf9, 0x40, 0x79, 0x8e, 0xd6, 0x85, 0x01, 0xa4, 0x9d, 0x43, 0x25, 0x58, 0xc5, 0x10, - 0x82, 0x31, 0xe5, 0xb7, 0xe9, 0xc0, 0x96, 0x95, 0x52, 0xe1, 0x9a, 0x52, 0x12, 0x35, 0x65, 0x88, - 0x61, 0x64, 0xa2, 0x0c, 0x63, 0x1d, 0xca, 0xb4, 0x12, 0x98, 0x21, 0x0f, 0xba, 0xed, 0x91, 0x07, - 0x74, 0x13, 0x56, 0x59, 0xa9, 0xc7, 0xf3, 0x42, 0x24, 0x85, 0xd5, 0xe8, 0x0d, 0xbe, 0x95, 0x78, - 0x2e, 0x7b, 0x09, 0x2e, 0x85, 0x74, 0xfd, 0x0a, 0x83, 0x57, 0xcc, 0x75, 0x5f, 0x7b, 0x5b, 0x94, - 0x1a, 0xef, 0x05, 0x01, 0x0a, 0x88, 0x09, 0x82, 0x5c, 0xdf, 0x1a, 0x60, 0x91, 0xff, 0xd9, 0x35, - 0x25, 0x2b, 0x63, 0x6b, 0x28, 0x32, 0x2a, 0xbd, 0xa4, 0x5a, 0x3e, 0x66, 0x4b, 0x1c, 0x92, 0x95, - 0x3f, 0xa4, 0x03, 0x7f, 0x01, 0x57, 0x59, 0x44, 0x2b, 0xd2, 0xff, 0x1d, 0x5a, 0x91, 0x79, 0x64, - 0x5a, 0x11, 0xae, 0xbf, 0xb2, 0xd1, 0xfa, 0xeb, 0x9f, 0xe9, 0xe0, 0x0b, 0xfb, 0x24, 0xe1, 0xd1, - 0x22, 0x12, 0x14, 0x53, 0x79, 0xf6, 0xbd, 0x44, 0x31, 0x25, 0xa8, 0x5f, 0x81, 0x3d, 0x37, 0x4a, - 0xfd, 0x8a, 0xbc, 0xbc, 0x62, 0x03, 0xf4, 0x1a, 0x48, 0xac, 0x7f, 0xa8, 0x59, 0xb6, 0x2b, 0xd2, - 0xc3, 0x13, 0xe1, 0xb9, 0xf2, 0x36, 0xe1, 0xc6, 0x01, 0xd5, 0xd9, 0xb7, 0x5d, 0xb5, 0x64, 0x8b, - 0xab, 0x50, 0xad, 0x23, 0x45, 0x6a, 0x9d, 0x6b, 0x20, 0xd1, 0xb7, 0x77, 0x6d, 0xbd, 0x8f, 0x19, - 0xd4, 0x4b, 0x6a, 0x20, 0x50, 0xee, 0x03, 0x9a, 0x4f, 0x36, 0xa8, 0x03, 0x05, 0x7c, 0x82, 0x4d, - 0x42, 0xbf, 0x5a, 0x76, 0xb6, 0x1c, 0x11, 0x5c, 0x00, 0x9b, 0xa4, 0xd9, 0xa0, 0x41, 0xfe, 0xc7, - 0x57, 0xeb, 0x75, 0xae, 0xfd, 0xa2, 0x35, 0x31, 0x08, 0x9e, 0xd8, 0xe4, 0x4c, 0x15, 0xf6, 0xca, - 0x5f, 0x32, 0xb4, 0x30, 0x8f, 0x24, 0xa2, 0x85, 0xb1, 0xf5, 0x36, 0x50, 0x26, 0x44, 0xca, 0x92, - 0xc5, 0x7b, 0x0d, 0x60, 0xa8, 0xbb, 0xda, 0x27, 0xba, 0x49, 0xf0, 0x40, 0x04, 0x3d, 0x24, 0x41, - 0x32, 0x94, 0xe8, 0x68, 0xea, 0xe2, 0x81, 0xe0, 0x87, 0xfe, 0x38, 0x34, 0xcf, 0xe2, 0xb7, 0x9b, - 0x67, 0x34, 0xca, 0xa5, 0x99, 0x28, 0x87, 0x8a, 0x66, 0x29, 0x5c, 0x34, 0xd3, 0x77, 0xb3, 0x1d, - 0xc3, 0x72, 0x0c, 0x72, 0xc6, 0x3e, 0x4d, 0x56, 0xf5, 0xc7, 0xe8, 0x06, 0x54, 0x26, 0x78, 0x62, - 0x5b, 0xd6, 0x58, 0xe3, 0xe0, 0x55, 0x66, 0xa6, 0x2b, 0x42, 0xd8, 0x66, 0x18, 0xf6, 0xf3, 0x4c, - 0xb0, 0xfd, 0x02, 0x72, 0xf4, 0x3f, 0x17, 0x60, 0xe5, 0x97, 0xac, 0x63, 0x12, 0x2d, 0x35, 0xd0, - 0x21, 0xac, 0xfa, 0xdb, 0x5f, 0x9b, 0x32, 0x58, 0xf0, 0x16, 0x74, 0x52, 0xfc, 0xa8, 0x9f, 0x44, - 0xc5, 0x2e, 0xfa, 0x01, 0x5c, 0x9d, 0x81, 0x36, 0xdf, 0x75, 0x26, 0x21, 0xc2, 0x3d, 0x16, 0x45, - 0x38, 0xcf, 0x73, 0x10, 0xab, 0xec, 0xb7, 0xdc, 0x74, 0x3b, 0x94, 0x84, 0x87, 0x0b, 0xa7, 0x85, - 0x5f, 0xff, 0x06, 0x54, 0x1c, 0x4c, 0x28, 0x71, 0x8a, 0xb4, 0x39, 0x56, 0xb8, 0x50, 0x34, 0x4f, - 0x0e, 0xe0, 0xb1, 0x85, 0x05, 0x14, 0xfa, 0x7f, 0x90, 0x82, 0xda, 0x2b, 0x1d, 0xd3, 0x31, 0xf0, - 0x59, 0x70, 0xa0, 0xab, 0xfc, 0x3e, 0x1d, 0xb8, 0x8c, 0xf2, 0xea, 0x36, 0x14, 0x1c, 0xec, 0x4e, - 0xc7, 0x9c, 0xe9, 0x56, 0xb7, 0x5e, 0x4a, 0x56, 0x7a, 0x51, 0xe9, 0x74, 0x4c, 0x54, 0x61, 0xac, - 0xdc, 0x87, 0x02, 0x97, 0xa0, 0x32, 0x14, 0x8f, 0xf6, 0xee, 0xee, 0xed, 0xbf, 0xbf, 0x57, 0x4f, - 0x21, 0x80, 0xc2, 0x76, 0xab, 0xd5, 0x3e, 0xe8, 0xd6, 0xd3, 0x48, 0x82, 0xfc, 0x76, 0x73, 0x5f, - 0xed, 0xd6, 0x33, 0x54, 0xac, 0xb6, 0xdf, 0x6d, 0xb7, 0xba, 0xf5, 0x2c, 0x5a, 0x85, 0x0a, 0xbf, - 0xd6, 0xee, 0xec, 0xab, 0xef, 0x6d, 0x77, 0xeb, 0xb9, 0x90, 0xe8, 0xb0, 0xbd, 0x77, 0xbb, 0xad, - 0xd6, 0xf3, 0xca, 0xcb, 0x94, 0x4a, 0xc7, 0x14, 0x6b, 0x01, 0x69, 0x4e, 0x87, 0x48, 0xb3, 0xf2, - 0xeb, 0x0c, 0xc8, 0xf1, 0x15, 0x18, 0x7a, 0x77, 0x66, 0xe2, 0x5b, 0x17, 0x28, 0xdf, 0x66, 0x66, - 0x8f, 0x9e, 0x86, 0xaa, 0x83, 0x8f, 0x31, 0xe9, 0x8f, 0x78, 0x45, 0xc8, 0x33, 0x66, 0x45, 0xad, - 0x08, 0x29, 0x33, 0x72, 0xb9, 0xda, 0x47, 0xb8, 0x4f, 0x34, 0x0e, 0x45, 0x7c, 0xd1, 0x49, 0x54, - 0x8d, 0x4a, 0x0f, 0xb9, 0x50, 0xf9, 0xf0, 0x42, 0xb1, 0x94, 0x20, 0xaf, 0xb6, 0xbb, 0xea, 0x0f, - 0xeb, 0x59, 0x84, 0xa0, 0xca, 0x2e, 0xb5, 0xc3, 0xbd, 0xed, 0x83, 0xc3, 0xce, 0x3e, 0x8d, 0xe5, - 0x25, 0xa8, 0x79, 0xb1, 0xf4, 0x84, 0x79, 0xe5, 0x00, 0xae, 0xc6, 0x94, 0x8f, 0x8f, 0xd8, 0x37, - 0x50, 0x7e, 0x93, 0x0e, 0xbb, 0x8c, 0x72, 0xf4, 0x77, 0x66, 0x22, 0xbd, 0x99, 0xb4, 0xe8, 0x9c, - 0x0d, 0xb3, 0x0c, 0x25, 0x2c, 0xda, 0x61, 0x2c, 0xc0, 0x2b, 0xaa, 0x3f, 0x56, 0x5e, 0x5a, 0x1e, - 0xb4, 0x60, 0xd5, 0x65, 0x94, 0x7f, 0xa7, 0xa1, 0x36, 0x03, 0x11, 0x68, 0x0b, 0xf2, 0x9c, 0x57, - 0xc5, 0xfd, 0x9a, 0x63, 0x08, 0x27, 0xf0, 0x84, 0xab, 0xa2, 0x37, 0x23, 0xaf, 0x34, 0x07, 0x45, - 0x3c, 0x58, 0x5e, 0x0f, 0x4f, 0x98, 0xfa, 0x16, 0xe8, 0x2d, 0x90, 0x7c, 0xac, 0x13, 0x64, 0xfe, - 0xa9, 0x79, 0x73, 0x1f, 0x25, 0x85, 0x7d, 0x60, 0x83, 0x5e, 0x0f, 0xca, 0xdd, 0xdc, 0x3c, 0x9b, - 0x13, 0xe6, 0x5c, 0x41, 0x18, 0x7b, 0xfa, 0x4a, 0x0b, 0xca, 0xa1, 0xf9, 0xa0, 0x27, 0x40, 0x9a, - 0xe8, 0xa7, 0xa2, 0xf3, 0xcb, 0x7b, 0x77, 0xa5, 0x89, 0x7e, 0xca, 0x9b, 0xbe, 0x57, 0xa1, 0x48, - 0x6f, 0x0e, 0x75, 0x57, 0x74, 0x83, 0x0a, 0x13, 0xfd, 0xf4, 0x1d, 0xdd, 0x55, 0x3e, 0x80, 0x6a, - 0xb4, 0xeb, 0x49, 0xf7, 0xa2, 0x63, 0x4d, 0xcd, 0x01, 0xf3, 0x91, 0x57, 0xf9, 0x00, 0xdd, 0x82, - 0xfc, 0x89, 0xc5, 0xe1, 0x7a, 0x31, 0x68, 0xdd, 0xb3, 0x08, 0x0e, 0x75, 0x4d, 0xb9, 0xb6, 0xf2, - 0x10, 0xf2, 0x0c, 0x7e, 0x29, 0x94, 0xb2, 0xfe, 0xa5, 0x28, 0xf5, 0xe9, 0x35, 0xfa, 0x00, 0x40, - 0x27, 0xc4, 0x31, 0x7a, 0xd3, 0xc0, 0xf1, 0xfa, 0x62, 0xf8, 0xde, 0xf6, 0xf4, 0x9a, 0xd7, 0x04, - 0x8e, 0x5f, 0x0e, 0x4c, 0x43, 0x58, 0x1e, 0x72, 0xa8, 0xec, 0x41, 0x35, 0x6a, 0x1b, 0xfe, 0x93, - 0xb0, 0xb2, 0xe0, 0x4f, 0x82, 0x5f, 0x4e, 0xfa, 0xc5, 0x68, 0x96, 0xf7, 0xaa, 0xd9, 0x40, 0xf9, - 0x34, 0x0d, 0xa5, 0xee, 0xa9, 0x58, 0xa3, 0x31, 0x6d, 0xd2, 0xc0, 0x34, 0x13, 0x6e, 0x0a, 0xf2, - 0xbe, 0x6b, 0xd6, 0xef, 0xe6, 0xbe, 0xed, 0x6f, 0xa8, 0x5c, 0xd2, 0x2e, 0x82, 0xd7, 0xfe, 0x12, - 0x70, 0xfd, 0x06, 0x48, 0xfe, 0xaa, 0xa2, 0x9c, 0x49, 0x1f, 0x0c, 0x1c, 0xec, 0xba, 0x62, 0x6e, - 0xde, 0x90, 0x75, 0xdd, 0xad, 0x4f, 0x44, 0xdb, 0x31, 0xab, 0xf2, 0x81, 0x32, 0x80, 0xda, 0x4c, - 0xe2, 0x46, 0x6f, 0x40, 0xd1, 0x9e, 0xf6, 0x34, 0x2f, 0x3c, 0x33, 0x9b, 0xc7, 0xab, 0x9f, 0xa7, - 0xbd, 0xb1, 0xd1, 0xbf, 0x8b, 0xcf, 0xbc, 0x97, 0xb1, 0xa7, 0xbd, 0xbb, 0x3c, 0x8a, 0xfc, 0x29, - 0x99, 0xf0, 0x53, 0x4e, 0xa0, 0xe4, 0x2d, 0x0a, 0xf4, 0xbd, 0xf0, 0x3e, 0xf1, 0xfe, 0xc5, 0xc4, - 0x16, 0x13, 0xc2, 0x7d, 0x68, 0x9b, 0xdc, 0x84, 0x55, 0xd7, 0x18, 0x9a, 0x78, 0xa0, 0x05, 0xac, - 0x8d, 0x3d, 0xad, 0xa4, 0xd6, 0xf8, 0x8d, 0x5d, 0x8f, 0xb2, 0x29, 0xff, 0x4a, 0x43, 0xc9, 0xdb, - 0xb0, 0xe8, 0xe5, 0xd0, 0xba, 0xab, 0x2e, 0xe8, 0x98, 0x79, 0x8a, 0x41, 0xe3, 0x3c, 0xfa, 0xae, - 0x99, 0x8b, 0xbf, 0x6b, 0xdc, 0x1f, 0x10, 0xaf, 0x7d, 0x9a, 0xbb, 0xf0, 0xaf, 0xa8, 0x17, 0x01, - 0x11, 0x8b, 0xe8, 0x63, 0xed, 0xc4, 0x22, 0x86, 0x39, 0xd4, 0x78, 0xb0, 0x79, 0x4d, 0x59, 0x67, - 0x77, 0xee, 0xb1, 0x1b, 0x07, 0x2c, 0xee, 0x3f, 0x4d, 0x43, 0xc9, 0xaf, 0x0e, 0x2e, 0xda, 0x07, - 0xbf, 0x02, 0x05, 0x91, 0x00, 0x79, 0x23, 0x5c, 0x8c, 0xfc, 0x5f, 0x32, 0xb9, 0xd0, 0x2f, 0x19, - 0x19, 0x4a, 0x13, 0x4c, 0x74, 0x96, 0x67, 0x38, 0x71, 0xf6, 0xc7, 0x37, 0x5f, 0x87, 0x72, 0xe8, - 0x97, 0x04, 0xdd, 0x79, 0x7b, 0xed, 0xf7, 0xeb, 0x29, 0xb9, 0xf8, 0xe9, 0xe7, 0xd7, 0xb3, 0x7b, - 0xf8, 0x13, 0xba, 0x66, 0xd5, 0x76, 0xab, 0xd3, 0x6e, 0xdd, 0xad, 0xa7, 0xe5, 0xf2, 0xa7, 0x9f, - 0x5f, 0x2f, 0xaa, 0x98, 0x35, 0xda, 0x6e, 0x76, 0x60, 0x25, 0xfc, 0x55, 0xa2, 0xe9, 0x00, 0x41, - 0xf5, 0xf6, 0xd1, 0xc1, 0xee, 0x4e, 0x6b, 0xbb, 0xdb, 0xd6, 0xee, 0xed, 0x77, 0xdb, 0xf5, 0x34, - 0xba, 0x0a, 0x97, 0x76, 0x77, 0xde, 0xe9, 0x74, 0xb5, 0xd6, 0xee, 0x4e, 0x7b, 0xaf, 0xab, 0x6d, - 0x77, 0xbb, 0xdb, 0xad, 0xbb, 0xf5, 0xcc, 0xd6, 0x9f, 0xca, 0x50, 0xdb, 0x6e, 0xb6, 0x76, 0x68, - 0xfe, 0x37, 0xfa, 0xba, 0x68, 0x64, 0xe6, 0x58, 0xdf, 0xe2, 0xdc, 0x73, 0x1b, 0xf2, 0xf9, 0x7d, - 0x5c, 0x74, 0x07, 0xf2, 0xac, 0xa5, 0x81, 0xce, 0x3f, 0xc8, 0x21, 0x2f, 0x69, 0xec, 0xd2, 0x97, - 0x61, 0xdb, 0xe3, 0xdc, 0x93, 0x1d, 0xf2, 0xf9, 0x7d, 0x5e, 0xa4, 0x82, 0x14, 0xf4, 0x24, 0x96, - 0x9f, 0xf4, 0x90, 0x13, 0xf4, 0x7e, 0xa9, 0xcf, 0x80, 0x18, 0x2d, 0x3f, 0xf9, 0x20, 0x27, 0x00, - 0x30, 0xb4, 0x0b, 0x45, 0x8f, 0xcb, 0x2e, 0x3b, 0x8b, 0x21, 0x2f, 0xed, 0xcb, 0xd2, 0x4f, 0xc0, - 0x7b, 0x0e, 0xe7, 0x1f, 0x2c, 0x91, 0x97, 0x34, 0x99, 0xd1, 0x0e, 0x14, 0x44, 0xb5, 0xbf, 0xe4, - 0x7c, 0x85, 0xbc, 0xac, 0xcf, 0x4a, 0x83, 0x16, 0x34, 0x73, 0x96, 0x1f, 0x97, 0x91, 0x13, 0xf4, - 0xcf, 0xd1, 0x11, 0x40, 0xa8, 0xc3, 0x90, 0xe0, 0x1c, 0x8c, 0x9c, 0xa4, 0x2f, 0x8e, 0xf6, 0xa1, - 0xe4, 0x13, 0xbe, 0xa5, 0xa7, 0x52, 0xe4, 0xe5, 0x0d, 0x6a, 0x74, 0x1f, 0x2a, 0x51, 0xa6, 0x93, - 0xec, 0xac, 0x89, 0x9c, 0xb0, 0xf3, 0x4c, 0xfd, 0x47, 0x69, 0x4f, 0xb2, 0xb3, 0x27, 0x72, 0xc2, - 0x46, 0x34, 0xfa, 0x08, 0x56, 0xe7, 0x69, 0x49, 0xf2, 0xa3, 0x28, 0xf2, 0x05, 0x5a, 0xd3, 0x68, - 0x02, 0x68, 0x01, 0x9d, 0xb9, 0xc0, 0xc9, 0x14, 0xf9, 0x22, 0x9d, 0x6a, 0x34, 0x80, 0xda, 0x2c, - 0x47, 0x48, 0x7a, 0x52, 0x45, 0x4e, 0xdc, 0xb5, 0xe6, 0x4f, 0x89, 0xd2, 0x86, 0xa4, 0x27, 0x57, - 0xe4, 0xc4, 0x4d, 0xec, 0x66, 0xfb, 0x8b, 0xaf, 0xd7, 0xd2, 0x5f, 0x7e, 0xbd, 0x96, 0xfe, 0xdb, - 0xd7, 0x6b, 0xe9, 0xcf, 0xbe, 0x59, 0x4b, 0x7d, 0xf9, 0xcd, 0x5a, 0xea, 0xcf, 0xdf, 0xac, 0xa5, - 0x7e, 0xf4, 0xc2, 0xd0, 0x20, 0xa3, 0x69, 0x6f, 0xa3, 0x6f, 0x4d, 0x36, 0xc3, 0x47, 0x00, 0x17, - 0x1d, 0x4b, 0xec, 0x15, 0x58, 0xd2, 0x7d, 0xe5, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x48, 0xb2, - 0x05, 0xf3, 0xb6, 0x28, 0x00, 0x00, + 0x11, 0xe6, 0x9b, 0x44, 0x53, 0x7c, 0x68, 0x76, 0xbd, 0xcb, 0x85, 0xd7, 0xd2, 0x1a, 0x5b, 0x7e, + 0xad, 0x6d, 0x29, 0x96, 0x6b, 0x1d, 0x3b, 0x76, 0x62, 0x8b, 0x5c, 0xae, 0x29, 0xaf, 0x2c, 0x29, + 0x10, 0xb5, 0xce, 0xcb, 0x0b, 0x83, 0xc4, 0x88, 0x84, 0x97, 0x04, 0x60, 0x60, 0x28, 0x4b, 0x7b, + 0x4c, 0x25, 0x95, 0x2a, 0x9f, 0x5c, 0x95, 0x4b, 0x2e, 0xfe, 0x09, 0xb9, 0xe7, 0x92, 0x5c, 0x72, + 0x71, 0x55, 0x0e, 0xf1, 0x31, 0x87, 0x94, 0x93, 0xb2, 0x73, 0xca, 0x1f, 0xc8, 0x29, 0x95, 0xd4, + 0x3c, 0xf0, 0x22, 0x09, 0x91, 0xb2, 0x73, 0xcb, 0x0d, 0xd3, 0xe8, 0x6e, 0x60, 0x1a, 0x33, 0xdd, + 0xdf, 0xd7, 0x18, 0x78, 0x9c, 0x60, 0xcb, 0xc0, 0xee, 0xd8, 0xb4, 0xc8, 0xa6, 0xde, 0xeb, 0x9b, + 0x9b, 0xe4, 0xcc, 0xc1, 0xde, 0x86, 0xe3, 0xda, 0xc4, 0x46, 0xb5, 0xf0, 0xe6, 0x06, 0xbd, 0x29, + 0x3f, 0x11, 0xd1, 0xee, 0xbb, 0x67, 0x0e, 0xb1, 0x37, 0x1d, 0xd7, 0xb6, 0x8f, 0xb9, 0xbe, 0x7c, + 0x3d, 0x72, 0x9b, 0xf9, 0x89, 0x7a, 0x8b, 0xdd, 0x15, 0xc6, 0x0f, 0xf1, 0x99, 0x7f, 0xf7, 0x89, + 0x19, 0x5b, 0x47, 0x77, 0xf5, 0xb1, 0x7f, 0x7b, 0x7d, 0x60, 0xdb, 0x83, 0x11, 0xde, 0x64, 0xa3, + 0xde, 0xe4, 0x78, 0x93, 0x98, 0x63, 0xec, 0x11, 0x7d, 0xec, 0x08, 0x85, 0xcb, 0x03, 0x7b, 0x60, + 0xb3, 0xcb, 0x4d, 0x7a, 0x25, 0xa4, 0x6b, 0xd3, 0x66, 0xc6, 0xc4, 0xd5, 0x89, 0x69, 0x5b, 0xfc, + 0xbe, 0xf2, 0x7b, 0x09, 0x8a, 0x2a, 0xfe, 0x68, 0x82, 0x3d, 0x82, 0xb6, 0x20, 0x87, 0xfb, 0x43, + 0xbb, 0x91, 0xbe, 0x91, 0x7e, 0xb6, 0xbc, 0x75, 0x7d, 0x63, 0x6a, 0xf2, 0x1b, 0x42, 0xaf, 0xdd, + 0x1f, 0xda, 0x9d, 0x94, 0xca, 0x74, 0xd1, 0x6d, 0xc8, 0x1f, 0x8f, 0x26, 0xde, 0xb0, 0x91, 0x61, + 0x46, 0x4f, 0x24, 0x19, 0xdd, 0xa5, 0x4a, 0x9d, 0x94, 0xca, 0xb5, 0xe9, 0xa3, 0x4c, 0xeb, 0xd8, + 0x6e, 0x64, 0xcf, 0x7f, 0xd4, 0x8e, 0x75, 0xcc, 0x1e, 0x45, 0x75, 0x51, 0x13, 0xc0, 0xc3, 0x44, + 0xb3, 0x1d, 0xfa, 0xfa, 0x8d, 0x1c, 0xb3, 0x7c, 0x32, 0xc9, 0xf2, 0x10, 0x93, 0x7d, 0xa6, 0xd8, + 0x49, 0xa9, 0x92, 0xe7, 0x0f, 0xa8, 0x0f, 0xd3, 0x32, 0x89, 0xd6, 0x1f, 0xea, 0xa6, 0xd5, 0xc8, + 0x9f, 0xef, 0x63, 0xc7, 0x32, 0x49, 0x8b, 0x2a, 0x52, 0x1f, 0xa6, 0x3f, 0xa0, 0x53, 0xfe, 0x68, + 0x82, 0xdd, 0xb3, 0x46, 0xe1, 0xfc, 0x29, 0xff, 0x90, 0x2a, 0xd1, 0x29, 0x33, 0x6d, 0xd4, 0x86, + 0x72, 0x0f, 0x0f, 0x4c, 0x4b, 0xeb, 0x8d, 0xec, 0xfe, 0xc3, 0x46, 0x91, 0x19, 0x2b, 0x49, 0xc6, + 0x4d, 0xaa, 0xda, 0xa4, 0x9a, 0x9d, 0x94, 0x0a, 0xbd, 0x60, 0x84, 0xde, 0x80, 0x52, 0x7f, 0x88, + 0xfb, 0x0f, 0x35, 0x72, 0xda, 0x28, 0x31, 0x1f, 0xeb, 0x49, 0x3e, 0x5a, 0x54, 0xaf, 0x7b, 0xda, + 0x49, 0xa9, 0xc5, 0x3e, 0xbf, 0xa4, 0xf3, 0x37, 0xf0, 0xc8, 0x3c, 0xc1, 0x2e, 0xb5, 0x97, 0xce, + 0x9f, 0xff, 0x1d, 0xae, 0xc9, 0x3c, 0x48, 0x86, 0x3f, 0x40, 0x6f, 0x82, 0x84, 0x2d, 0x43, 0x4c, + 0x03, 0x98, 0x8b, 0x1b, 0x89, 0x6b, 0xc5, 0x32, 0xfc, 0x49, 0x94, 0xb0, 0xb8, 0x46, 0xaf, 0x42, + 0xa1, 0x6f, 0x8f, 0xc7, 0x26, 0x69, 0x94, 0x99, 0xf5, 0x5a, 0xe2, 0x04, 0x98, 0x56, 0x27, 0xa5, + 0x0a, 0x7d, 0xb4, 0x07, 0xd5, 0x91, 0xe9, 0x11, 0xcd, 0xb3, 0x74, 0xc7, 0x1b, 0xda, 0xc4, 0x6b, + 0xac, 0x30, 0x0f, 0x4f, 0x25, 0x79, 0xd8, 0x35, 0x3d, 0x72, 0xe8, 0x2b, 0x77, 0x52, 0x6a, 0x65, + 0x14, 0x15, 0x50, 0x7f, 0xf6, 0xf1, 0x31, 0x76, 0x03, 0x87, 0x8d, 0xca, 0xf9, 0xfe, 0xf6, 0xa9, + 0xb6, 0x6f, 0x4f, 0xfd, 0xd9, 0x51, 0x01, 0xfa, 0x29, 0x5c, 0x1a, 0xd9, 0xba, 0x11, 0xb8, 0xd3, + 0xfa, 0xc3, 0x89, 0xf5, 0xb0, 0x51, 0x65, 0x4e, 0x9f, 0x4b, 0x7c, 0x49, 0x5b, 0x37, 0x7c, 0x17, + 0x2d, 0x6a, 0xd0, 0x49, 0xa9, 0xab, 0xa3, 0x69, 0x21, 0x7a, 0x00, 0x97, 0x75, 0xc7, 0x19, 0x9d, + 0x4d, 0x7b, 0xaf, 0x31, 0xef, 0xb7, 0x92, 0xbc, 0x6f, 0x53, 0x9b, 0x69, 0xf7, 0x48, 0x9f, 0x91, + 0xa2, 0x2e, 0xd4, 0x1d, 0x17, 0x3b, 0xba, 0x8b, 0x35, 0xc7, 0xb5, 0x1d, 0xdb, 0xd3, 0x47, 0x8d, + 0x3a, 0xf3, 0xfd, 0x4c, 0x92, 0xef, 0x03, 0xae, 0x7f, 0x20, 0xd4, 0x3b, 0x29, 0xb5, 0xe6, 0xc4, + 0x45, 0xdc, 0xab, 0xdd, 0xc7, 0x9e, 0x17, 0x7a, 0x5d, 0x5d, 0xe4, 0x95, 0xe9, 0xc7, 0xbd, 0xc6, + 0x44, 0xcd, 0x22, 0xe4, 0x4f, 0xf4, 0xd1, 0x04, 0x2b, 0xcf, 0x40, 0x39, 0x92, 0x96, 0x50, 0x03, + 0x8a, 0x63, 0xec, 0x79, 0xfa, 0x00, 0xb3, 0x2c, 0x26, 0xa9, 0xfe, 0x50, 0xa9, 0xc2, 0x4a, 0x34, + 0x15, 0x29, 0xe3, 0xc0, 0x90, 0x26, 0x19, 0x6a, 0x78, 0x82, 0x5d, 0x8f, 0x66, 0x16, 0x61, 0x28, + 0x86, 0xe8, 0x26, 0x54, 0xd8, 0x52, 0xd7, 0xfc, 0xfb, 0x34, 0xd3, 0xe5, 0xd4, 0x15, 0x26, 0xbc, + 0x2f, 0x94, 0xd6, 0xa1, 0xec, 0x6c, 0x39, 0x81, 0x4a, 0x96, 0xa9, 0x80, 0xb3, 0xe5, 0x08, 0x05, + 0xe5, 0x7b, 0x50, 0x9f, 0xce, 0x4c, 0xa8, 0x0e, 0xd9, 0x87, 0xf8, 0x4c, 0x3c, 0x8f, 0x5e, 0xa2, + 0xcb, 0x62, 0x5a, 0xec, 0x19, 0x92, 0x2a, 0xe6, 0xf8, 0xa7, 0x4c, 0x60, 0x1c, 0xa4, 0x24, 0xf4, + 0x2a, 0xe4, 0x68, 0x05, 0x10, 0xc9, 0x5a, 0xde, 0xe0, 0x79, 0x7e, 0xc3, 0xcf, 0xf3, 0x1b, 0x5d, + 0xbf, 0x3c, 0x34, 0x4b, 0x9f, 0x7f, 0xb9, 0x9e, 0xfa, 0xf4, 0x6f, 0xeb, 0x69, 0x95, 0x59, 0xa0, + 0x6b, 0x34, 0x83, 0xe8, 0xa6, 0xa5, 0x99, 0x86, 0x78, 0x4e, 0x91, 0x8d, 0x77, 0x0c, 0x74, 0x0f, + 0xea, 0x7d, 0xdb, 0xf2, 0xb0, 0xe5, 0x4d, 0x3c, 0x8d, 0x97, 0x1f, 0x91, 0xa2, 0x67, 0x77, 0x78, + 0xcb, 0x57, 0x3c, 0x60, 0x7a, 0x6a, 0xad, 0x1f, 0x17, 0xa0, 0xbb, 0x00, 0x27, 0xfa, 0xc8, 0x34, + 0x74, 0x62, 0xbb, 0x5e, 0x23, 0x77, 0x23, 0x3b, 0xd7, 0xcd, 0x7d, 0x5f, 0xe5, 0xc8, 0x31, 0x74, + 0x82, 0x9b, 0x39, 0xfa, 0xb6, 0x6a, 0xc4, 0x12, 0x3d, 0x0d, 0x35, 0xdd, 0x71, 0x34, 0x8f, 0xe8, + 0x04, 0x6b, 0xbd, 0x33, 0x82, 0x3d, 0x96, 0xb8, 0x57, 0xd4, 0x8a, 0xee, 0x38, 0x87, 0x54, 0xda, + 0xa4, 0x42, 0xf4, 0x14, 0x54, 0x69, 0x92, 0x36, 0xf5, 0x91, 0x36, 0xc4, 0xe6, 0x60, 0x48, 0x58, + 0x82, 0xce, 0xaa, 0x15, 0x21, 0xed, 0x30, 0xa1, 0x62, 0x04, 0x0b, 0x81, 0x25, 0x68, 0x84, 0x20, + 0x67, 0xe8, 0x44, 0x67, 0x81, 0x5c, 0x51, 0xd9, 0x35, 0x95, 0x39, 0x3a, 0x19, 0x8a, 0xf0, 0xb0, + 0x6b, 0x74, 0x05, 0x0a, 0xc2, 0x6d, 0x96, 0xb9, 0x15, 0x23, 0xfa, 0xcd, 0x1c, 0xd7, 0x3e, 0xc1, + 0xac, 0x22, 0x95, 0x54, 0x3e, 0x50, 0x7e, 0x91, 0x81, 0xd5, 0x99, 0x54, 0x4e, 0xfd, 0x0e, 0x75, + 0x6f, 0xe8, 0x3f, 0x8b, 0x5e, 0xa3, 0x57, 0xa8, 0x5f, 0xdd, 0xc0, 0xae, 0x28, 0xa1, 0x8d, 0x68, + 0x88, 0x38, 0x7c, 0xe8, 0xb0, 0xfb, 0x22, 0x34, 0x42, 0x1b, 0xed, 0x43, 0x7d, 0xa4, 0x7b, 0x44, + 0xe3, 0xa9, 0x51, 0x8b, 0x94, 0xd3, 0xd9, 0x82, 0xb0, 0xab, 0xfb, 0xc9, 0x94, 0x2e, 0x76, 0xe1, + 0xa8, 0x3a, 0x8a, 0x49, 0x91, 0x0a, 0x97, 0x7b, 0x67, 0x8f, 0x74, 0x8b, 0x98, 0x16, 0xd6, 0x66, + 0xbe, 0xdc, 0xb5, 0x19, 0xa7, 0xed, 0x13, 0xd3, 0xc0, 0x56, 0xdf, 0xff, 0x64, 0x97, 0x02, 0xe3, + 0xe0, 0x93, 0x7a, 0x8a, 0x0a, 0xd5, 0x78, 0x31, 0x42, 0x55, 0xc8, 0x90, 0x53, 0x11, 0x80, 0x0c, + 0x39, 0x45, 0xdf, 0x81, 0x1c, 0x9d, 0x24, 0x9b, 0x7c, 0x75, 0x0e, 0x12, 0x10, 0x76, 0xdd, 0x33, + 0x07, 0xab, 0x4c, 0x53, 0x51, 0x82, 0xdd, 0x10, 0x14, 0xa8, 0x69, 0xaf, 0xca, 0x73, 0x50, 0x9b, + 0xaa, 0x40, 0x91, 0xef, 0x97, 0x8e, 0x7e, 0x3f, 0xa5, 0x06, 0x95, 0x58, 0xb9, 0x51, 0xae, 0xc0, + 0xe5, 0x79, 0xd5, 0x43, 0x19, 0x06, 0xf2, 0x58, 0x15, 0x40, 0xb7, 0xa1, 0x14, 0x94, 0x0f, 0xbe, + 0x1b, 0x67, 0x63, 0xe5, 0x2b, 0xab, 0x81, 0x2a, 0xdd, 0x86, 0x74, 0x59, 0xb3, 0xf5, 0x90, 0x61, + 0x2f, 0x5e, 0xd4, 0x1d, 0xa7, 0xa3, 0x7b, 0x43, 0xe5, 0x03, 0x68, 0x24, 0x95, 0x86, 0xa9, 0x69, + 0xe4, 0x82, 0x65, 0x78, 0x05, 0x0a, 0xc7, 0xb6, 0x3b, 0xd6, 0x09, 0x73, 0x56, 0x51, 0xc5, 0x88, + 0x2e, 0x4f, 0x5e, 0x26, 0xb2, 0x4c, 0xcc, 0x07, 0x8a, 0x06, 0xd7, 0x12, 0xcb, 0x03, 0x35, 0x31, + 0x2d, 0x03, 0xf3, 0x78, 0x56, 0x54, 0x3e, 0x08, 0x1d, 0xf1, 0x97, 0xe5, 0x03, 0xfa, 0x58, 0x8f, + 0xcd, 0x95, 0xf9, 0x97, 0x54, 0x31, 0x52, 0xfe, 0x91, 0x86, 0x2b, 0xf3, 0x8b, 0x04, 0xba, 0x0d, + 0xc0, 0x13, 0x6a, 0xb0, 0xed, 0xca, 0x5b, 0x57, 0x66, 0x17, 0xfd, 0x1d, 0x9d, 0xe8, 0xaa, 0xc4, + 0x34, 0xe9, 0x25, 0x4d, 0x03, 0xa1, 0x99, 0xe6, 0x99, 0x8f, 0xf8, 0x9a, 0xc9, 0xaa, 0x95, 0x40, + 0xe7, 0xd0, 0x7c, 0x14, 0x4f, 0x6f, 0xd9, 0x78, 0x7a, 0x0b, 0x63, 0x97, 0x8b, 0x6d, 0x61, 0x3f, + 0x97, 0xe6, 0x2f, 0x9a, 0x4b, 0x95, 0x5f, 0x45, 0xa7, 0x19, 0x2b, 0x51, 0x91, 0x7d, 0x9d, 0xbe, + 0xd0, 0xbe, 0x8e, 0x87, 0x27, 0xb3, 0x64, 0x78, 0x94, 0x5f, 0x03, 0x94, 0x54, 0xec, 0x39, 0x34, + 0x09, 0xa3, 0x26, 0x48, 0xf8, 0xb4, 0x8f, 0x39, 0x52, 0x4e, 0x27, 0x22, 0x4d, 0xae, 0xdd, 0xf6, + 0x35, 0x29, 0xcc, 0x0b, 0xcc, 0xd0, 0xcb, 0x82, 0x0d, 0x24, 0x03, 0x7b, 0x61, 0x1e, 0xa5, 0x03, + 0xaf, 0xf8, 0x74, 0x20, 0x9b, 0x88, 0xec, 0xb8, 0xd5, 0x14, 0x1f, 0x78, 0x59, 0xf0, 0x81, 0xdc, + 0x82, 0x87, 0xc5, 0x08, 0x41, 0x2b, 0x46, 0x08, 0xf2, 0x0b, 0xa6, 0x99, 0xc0, 0x08, 0x5a, 0x31, + 0x46, 0x50, 0x58, 0xe0, 0x24, 0x81, 0x12, 0xbc, 0xe2, 0x53, 0x82, 0xe2, 0x82, 0x69, 0x4f, 0x71, + 0x82, 0xbb, 0x71, 0x4e, 0xc0, 0xf1, 0xfc, 0xcd, 0x44, 0xeb, 0x44, 0x52, 0xf0, 0xfd, 0x08, 0x29, + 0x90, 0x12, 0x11, 0x39, 0x77, 0x32, 0x87, 0x15, 0xb4, 0x62, 0xac, 0x00, 0x16, 0xc4, 0x20, 0x81, + 0x16, 0xbc, 0x15, 0xa5, 0x05, 0xe5, 0x44, 0x66, 0x21, 0x16, 0xcd, 0x3c, 0x5e, 0xf0, 0x5a, 0xc0, + 0x0b, 0x56, 0x12, 0x89, 0x8d, 0x98, 0xc3, 0x34, 0x31, 0xd8, 0x9f, 0x21, 0x06, 0x1c, 0xc8, 0x3f, + 0x9d, 0xe8, 0x62, 0x01, 0x33, 0xd8, 0x9f, 0x61, 0x06, 0xd5, 0x05, 0x0e, 0x17, 0x50, 0x83, 0x9f, + 0xcd, 0xa7, 0x06, 0xc9, 0xe0, 0x5d, 0xbc, 0xe6, 0x72, 0xdc, 0x40, 0x4b, 0xe0, 0x06, 0x1c, 0xbf, + 0x3f, 0x9f, 0xe8, 0x7e, 0x69, 0x72, 0x70, 0x34, 0x87, 0x1c, 0x70, 0x18, 0xff, 0x6c, 0xa2, 0xf3, + 0x25, 0xd8, 0xc1, 0xd1, 0x1c, 0x76, 0x80, 0x16, 0xba, 0x5d, 0x9e, 0x1e, 0x3c, 0x47, 0x51, 0xd8, + 0x54, 0x9a, 0xa3, 0x95, 0x0c, 0xbb, 0xae, 0xed, 0x0a, 0xe4, 0xcd, 0x07, 0xca, 0xb3, 0x14, 0x17, + 0x86, 0x29, 0xed, 0x1c, 0x2a, 0xc1, 0x10, 0x43, 0x24, 0x8d, 0x29, 0xbf, 0x4b, 0x87, 0xb6, 0x0c, + 0x4a, 0x45, 0x31, 0xa5, 0x24, 0x30, 0x65, 0x84, 0x61, 0x64, 0xe2, 0x0c, 0x63, 0x1d, 0xca, 0x14, + 0x09, 0x4c, 0x91, 0x07, 0xdd, 0xf1, 0xc9, 0x03, 0xba, 0x05, 0xab, 0x0c, 0xea, 0xf1, 0xba, 0x10, + 0x2b, 0x61, 0x35, 0x7a, 0x83, 0x6f, 0x25, 0x5e, 0xcb, 0x5e, 0x84, 0x4b, 0x11, 0xdd, 0x00, 0x61, + 0x70, 0xc4, 0x5c, 0x0f, 0xb4, 0xb7, 0x05, 0xd4, 0x78, 0x37, 0x0c, 0x50, 0x48, 0x4c, 0x10, 0xe4, + 0xfa, 0xb6, 0x81, 0x45, 0xfd, 0x67, 0xd7, 0x94, 0xac, 0x8c, 0xec, 0x81, 0xa8, 0xa8, 0xf4, 0x92, + 0x6a, 0x05, 0x39, 0x5b, 0xe2, 0x29, 0x59, 0xf9, 0x63, 0x3a, 0xf4, 0x17, 0x72, 0x95, 0x79, 0xb4, + 0x22, 0xfd, 0xbf, 0xa1, 0x15, 0x99, 0x6f, 0x4c, 0x2b, 0xa2, 0xf8, 0x2b, 0x1b, 0xc7, 0x5f, 0xff, + 0x4a, 0x87, 0x5f, 0x38, 0x20, 0x09, 0xdf, 0x2c, 0x22, 0x21, 0x98, 0xca, 0xb3, 0xef, 0x25, 0xc0, + 0x94, 0xa0, 0x7e, 0x05, 0xf6, 0xdc, 0x38, 0xf5, 0x2b, 0x72, 0x78, 0xc5, 0x06, 0xe8, 0x55, 0x90, + 0x58, 0x7f, 0x51, 0xb3, 0x1d, 0x4f, 0x94, 0x87, 0xc7, 0xa3, 0x73, 0xe5, 0x6d, 0xc4, 0x8d, 0x03, + 0xaa, 0xb3, 0xef, 0x78, 0x6a, 0xc9, 0x11, 0x57, 0x11, 0xac, 0x23, 0xc5, 0xb0, 0xce, 0x75, 0x90, + 0xe8, 0xdb, 0x7b, 0x8e, 0xde, 0xc7, 0x2c, 0xd5, 0x4b, 0x6a, 0x28, 0x50, 0x1e, 0x00, 0x9a, 0x2d, + 0x36, 0xa8, 0x03, 0x05, 0x7c, 0x82, 0x2d, 0x42, 0xbf, 0x5a, 0x76, 0x1a, 0x8e, 0x08, 0x2e, 0x80, + 0x2d, 0xd2, 0x6c, 0xd0, 0x20, 0xff, 0xf3, 0xcb, 0xf5, 0x3a, 0xd7, 0x7e, 0xc1, 0x1e, 0x9b, 0x04, + 0x8f, 0x1d, 0x72, 0xa6, 0x0a, 0x7b, 0xe5, 0xaf, 0x19, 0x0a, 0xcc, 0x63, 0x85, 0x68, 0x6e, 0x6c, + 0xfd, 0x0d, 0x94, 0x89, 0x90, 0xb2, 0xe5, 0xe2, 0xbd, 0x06, 0x30, 0xd0, 0x3d, 0xed, 0x63, 0xdd, + 0x22, 0xd8, 0x10, 0x41, 0x8f, 0x48, 0x90, 0x0c, 0x25, 0x3a, 0x9a, 0x78, 0xd8, 0x10, 0xfc, 0x30, + 0x18, 0x47, 0xe6, 0x59, 0xfc, 0x76, 0xf3, 0x8c, 0x47, 0xb9, 0x34, 0x15, 0xe5, 0x08, 0x68, 0x96, + 0xa2, 0xa0, 0x99, 0xbe, 0x9b, 0xe3, 0x9a, 0xb6, 0x6b, 0x92, 0x33, 0xf6, 0x69, 0xb2, 0x6a, 0x30, + 0x46, 0x37, 0xa1, 0x32, 0xc6, 0x63, 0xc7, 0xb6, 0x47, 0x1a, 0x4f, 0x5e, 0x65, 0x66, 0xba, 0x22, + 0x84, 0x6d, 0x96, 0xc3, 0x7e, 0x99, 0x09, 0xb7, 0x5f, 0x48, 0x8e, 0xfe, 0xef, 0x02, 0xac, 0x7c, + 0x96, 0xa5, 0x1c, 0x31, 0x0e, 0x35, 0xd0, 0x21, 0xac, 0x06, 0xdb, 0x5f, 0x9b, 0xb0, 0xb4, 0xe0, + 0x2f, 0xe8, 0x65, 0xf3, 0x47, 0xfd, 0x24, 0x2e, 0xf6, 0xd0, 0x8f, 0xe0, 0xea, 0x54, 0x6a, 0x0b, + 0x5c, 0x67, 0x96, 0xcc, 0x70, 0x8f, 0xc5, 0x33, 0x9c, 0xef, 0x39, 0x8c, 0x55, 0xf6, 0x5b, 0xc6, + 0xaa, 0x03, 0x35, 0x4a, 0x56, 0xec, 0x09, 0x11, 0x45, 0x16, 0x0b, 0x9c, 0x7d, 0x6d, 0x86, 0xe9, + 0xdc, 0x11, 0x7f, 0x07, 0xfc, 0x16, 0x81, 0xb0, 0xe3, 0x85, 0x15, 0xa3, 0xbb, 0xe0, 0x4b, 0x44, + 0xdb, 0x41, 0xa0, 0xee, 0x85, 0x8e, 0x2a, 0xc2, 0x4c, 0x50, 0xec, 0x1d, 0xa8, 0xc6, 0xa1, 0xdc, + 0xdc, 0xf5, 0x78, 0x13, 0x2a, 0x2e, 0x26, 0x94, 0xca, 0xc5, 0x1a, 0x2f, 0x2b, 0x5c, 0x28, 0xda, + 0x39, 0x07, 0xf0, 0xd8, 0x5c, 0x48, 0x87, 0xbe, 0x0b, 0x52, 0x88, 0x06, 0xd3, 0x09, 0x3d, 0x8c, + 0x80, 0x97, 0x87, 0xba, 0xca, 0x1f, 0xd2, 0xa1, 0xcb, 0x38, 0xd3, 0x6f, 0x43, 0xc1, 0xc5, 0xde, + 0x64, 0xc4, 0xb9, 0x77, 0x75, 0xeb, 0xc5, 0xe5, 0xc0, 0x20, 0x95, 0x4e, 0x46, 0x44, 0x15, 0xc6, + 0xca, 0x03, 0x28, 0x70, 0x09, 0x2a, 0x43, 0xf1, 0x68, 0xef, 0xde, 0xde, 0xfe, 0x7b, 0x7b, 0xf5, + 0x14, 0x02, 0x28, 0x6c, 0xb7, 0x5a, 0xed, 0x83, 0x6e, 0x3d, 0x8d, 0x24, 0xc8, 0x6f, 0x37, 0xf7, + 0xd5, 0x6e, 0x3d, 0x43, 0xc5, 0x6a, 0xfb, 0x9d, 0x76, 0xab, 0x5b, 0xcf, 0xa2, 0x55, 0xa8, 0xf0, + 0x6b, 0xed, 0xee, 0xbe, 0xfa, 0xee, 0x76, 0xb7, 0x9e, 0x8b, 0x88, 0x0e, 0xdb, 0x7b, 0x77, 0xda, + 0x6a, 0x3d, 0xaf, 0xbc, 0x44, 0xc9, 0x7d, 0x02, 0x7c, 0x0c, 0x69, 0x7c, 0x3a, 0x42, 0xe3, 0x95, + 0xdf, 0x64, 0x40, 0x4e, 0xc6, 0x84, 0xe8, 0x9d, 0xa9, 0x89, 0x6f, 0x5d, 0x00, 0x50, 0x4e, 0xcd, + 0x1e, 0x3d, 0x05, 0x55, 0x17, 0x1f, 0x63, 0xd2, 0x1f, 0x72, 0x8c, 0xca, 0x6b, 0x78, 0x45, 0xad, + 0x08, 0x29, 0x33, 0xf2, 0xb8, 0xda, 0x87, 0xb8, 0x4f, 0x34, 0x9e, 0x1c, 0xf9, 0x36, 0x90, 0xa8, + 0x1a, 0x95, 0x1e, 0x72, 0xa1, 0xf2, 0xc1, 0x85, 0x62, 0x29, 0x41, 0x5e, 0x6d, 0x77, 0xd5, 0x1f, + 0xd7, 0xb3, 0x08, 0x41, 0x95, 0x5d, 0x6a, 0x87, 0x7b, 0xdb, 0x07, 0x87, 0x9d, 0x7d, 0x1a, 0xcb, + 0x4b, 0x50, 0xf3, 0x63, 0xe9, 0x0b, 0xf3, 0xca, 0x01, 0x5c, 0x4d, 0x00, 0xb4, 0xdf, 0xb0, 0x93, + 0xa1, 0xfc, 0x36, 0x1d, 0x75, 0x19, 0xef, 0x1a, 0xbc, 0x3d, 0x15, 0xe9, 0xcd, 0x65, 0x61, 0xf0, + 0x74, 0x98, 0x65, 0x28, 0x61, 0xd1, 0xa0, 0x63, 0x01, 0x5e, 0x51, 0x83, 0xb1, 0xf2, 0xe2, 0xe2, + 0xa0, 0x85, 0xab, 0x2e, 0xa3, 0xfc, 0x27, 0x0d, 0xb5, 0xa9, 0xa4, 0x85, 0xb6, 0x20, 0xcf, 0x99, + 0x5e, 0xd2, 0xcf, 0x42, 0x96, 0x73, 0x45, 0x86, 0xe3, 0xaa, 0xe8, 0x8d, 0xd8, 0x2b, 0xcd, 0x24, + 0x47, 0x1e, 0x2c, 0xbf, 0xab, 0x28, 0x4c, 0x03, 0x0b, 0xf4, 0x26, 0x48, 0x41, 0xf6, 0x15, 0xed, + 0x85, 0x27, 0x67, 0xcd, 0x83, 0xbc, 0x2d, 0xec, 0x43, 0x1b, 0xf4, 0x5a, 0x08, 0xc0, 0x73, 0xb3, + 0xfc, 0x52, 0x98, 0x73, 0x05, 0x61, 0xec, 0xeb, 0x2b, 0x2d, 0x28, 0x47, 0xe6, 0x83, 0x1e, 0x07, + 0x69, 0xac, 0x9f, 0x8a, 0x5e, 0x34, 0xef, 0x26, 0x96, 0xc6, 0xfa, 0x29, 0x6f, 0x43, 0x5f, 0x85, + 0x22, 0xbd, 0x39, 0xd0, 0x3d, 0xd1, 0x9f, 0x2a, 0x8c, 0xf5, 0xd3, 0xb7, 0x75, 0x4f, 0x79, 0x1f, + 0xaa, 0xf1, 0x3e, 0x2c, 0xdd, 0x8b, 0xae, 0x3d, 0xb1, 0x0c, 0xe6, 0x23, 0xaf, 0xf2, 0x01, 0xba, + 0x0d, 0xf9, 0x13, 0x9b, 0x17, 0x90, 0xf9, 0x49, 0xeb, 0xbe, 0x4d, 0x70, 0xa4, 0x8f, 0xcb, 0xb5, + 0x95, 0x47, 0x90, 0x67, 0x05, 0x81, 0xa6, 0x52, 0xd6, 0x51, 0x15, 0xe4, 0x83, 0x5e, 0xa3, 0xf7, + 0x01, 0x74, 0x42, 0x5c, 0xb3, 0x37, 0x09, 0x1d, 0xaf, 0xcf, 0x2f, 0x28, 0xdb, 0xbe, 0x5e, 0xf3, + 0xba, 0xa8, 0x2c, 0x97, 0x43, 0xd3, 0x48, 0x75, 0x89, 0x38, 0x54, 0xf6, 0xa0, 0x1a, 0xb7, 0x8d, + 0xfe, 0xdb, 0x58, 0x99, 0xf3, 0x6f, 0x23, 0x00, 0xb8, 0x01, 0x3c, 0xce, 0xf2, 0xee, 0x39, 0x1b, + 0x28, 0x9f, 0xa4, 0xa1, 0xd4, 0x3d, 0x15, 0x6b, 0x34, 0xa1, 0x71, 0x1b, 0x9a, 0x66, 0xa2, 0x6d, + 0x4a, 0xde, 0x09, 0xce, 0x06, 0xfd, 0xe5, 0xb7, 0x82, 0x0d, 0x95, 0x5b, 0xb6, 0xaf, 0xe1, 0x37, + 0xe4, 0x44, 0xba, 0x7e, 0x1d, 0xa4, 0x60, 0x55, 0x51, 0x16, 0xa7, 0x1b, 0x86, 0x8b, 0x3d, 0x4f, + 0xcc, 0xcd, 0x1f, 0xb2, 0xff, 0x00, 0xf6, 0xc7, 0xa2, 0x11, 0x9a, 0x55, 0xf9, 0x40, 0x31, 0xa0, + 0x36, 0x05, 0x25, 0xd0, 0xeb, 0x50, 0x74, 0x26, 0x3d, 0xcd, 0x0f, 0xcf, 0xd4, 0xe6, 0xf1, 0x11, + 0xfd, 0xa4, 0x37, 0x32, 0xfb, 0xf7, 0xf0, 0x99, 0xff, 0x32, 0xce, 0xa4, 0x77, 0x8f, 0x47, 0x91, + 0x3f, 0x25, 0x13, 0x7d, 0xca, 0x09, 0x94, 0xfc, 0x45, 0x81, 0x7e, 0x10, 0xdd, 0x27, 0xfe, 0xdf, + 0xa1, 0x44, 0x78, 0x23, 0xdc, 0x47, 0xb6, 0xc9, 0x2d, 0x58, 0xf5, 0xcc, 0x81, 0x85, 0x0d, 0x2d, + 0xe4, 0x91, 0xec, 0x69, 0x25, 0xb5, 0xc6, 0x6f, 0xec, 0xfa, 0x24, 0x52, 0xf9, 0x77, 0x1a, 0x4a, + 0xfe, 0x86, 0x45, 0x2f, 0x45, 0xd6, 0x5d, 0x75, 0x4e, 0x0f, 0xcf, 0x57, 0x0c, 0x5b, 0xf9, 0xf1, + 0x77, 0xcd, 0x5c, 0xfc, 0x5d, 0x93, 0xfe, 0xc9, 0xf8, 0x0d, 0xdd, 0xdc, 0x85, 0x7f, 0x8e, 0xbd, + 0x00, 0x88, 0xd8, 0x44, 0x1f, 0x69, 0x27, 0x36, 0x31, 0xad, 0x81, 0xc6, 0x83, 0xcd, 0x51, 0x6e, + 0x9d, 0xdd, 0xb9, 0xcf, 0x6e, 0x1c, 0xb0, 0xb8, 0xff, 0x3c, 0x0d, 0xa5, 0x00, 0x1d, 0x5c, 0xb4, + 0x33, 0x7f, 0x05, 0x0a, 0xa2, 0x00, 0xf2, 0xd6, 0xbc, 0x18, 0x05, 0x3f, 0x89, 0x72, 0x91, 0x9f, + 0x44, 0x32, 0x94, 0xc6, 0x98, 0xe8, 0xac, 0xce, 0x70, 0x2a, 0x1f, 0x8c, 0x6f, 0xbd, 0x06, 0xe5, + 0xc8, 0x4f, 0x12, 0xba, 0xf3, 0xf6, 0xda, 0xef, 0xd5, 0x53, 0x72, 0xf1, 0x93, 0xcf, 0x6e, 0x64, + 0xf7, 0xf0, 0xc7, 0x74, 0xcd, 0xaa, 0xed, 0x56, 0xa7, 0xdd, 0xba, 0x57, 0x4f, 0xcb, 0xe5, 0x4f, + 0x3e, 0xbb, 0x51, 0x54, 0x31, 0x6b, 0xfd, 0xdd, 0xea, 0xc0, 0x4a, 0xf4, 0xab, 0xc4, 0xcb, 0x01, + 0x82, 0xea, 0x9d, 0xa3, 0x83, 0xdd, 0x9d, 0xd6, 0x76, 0xb7, 0xad, 0xdd, 0xdf, 0xef, 0xb6, 0xeb, + 0x69, 0x74, 0x15, 0x2e, 0xed, 0xee, 0xbc, 0xdd, 0xe9, 0x6a, 0xad, 0xdd, 0x9d, 0xf6, 0x5e, 0x57, + 0xdb, 0xee, 0x76, 0xb7, 0x5b, 0xf7, 0xea, 0x99, 0xad, 0x3f, 0x97, 0xa1, 0xb6, 0xdd, 0x6c, 0xed, + 0xd0, 0xfa, 0x6f, 0xf6, 0x75, 0xd1, 0x5a, 0xcd, 0xb1, 0x4e, 0xca, 0xb9, 0x27, 0x49, 0xe4, 0xf3, + 0x3b, 0xcb, 0xe8, 0x2e, 0xe4, 0x59, 0x93, 0x05, 0x9d, 0x7f, 0xb4, 0x44, 0x5e, 0xd0, 0x6a, 0xa6, + 0x2f, 0xc3, 0xb6, 0xc7, 0xb9, 0x67, 0x4d, 0xe4, 0xf3, 0x3b, 0xcf, 0x48, 0x05, 0x29, 0xec, 0x92, + 0x2c, 0x3e, 0x7b, 0x22, 0x2f, 0xd1, 0x8d, 0xa6, 0x3e, 0x43, 0xaa, 0xb6, 0xf8, 0x2c, 0x86, 0xbc, + 0x44, 0x02, 0x43, 0xbb, 0x50, 0xf4, 0xd9, 0xf5, 0xa2, 0xd3, 0x21, 0xf2, 0xc2, 0x4e, 0x31, 0xfd, + 0x04, 0xbc, 0x0b, 0x72, 0xfe, 0x51, 0x17, 0x79, 0x41, 0xdb, 0x1b, 0xed, 0x40, 0x41, 0xa0, 0xfd, + 0x05, 0x27, 0x3e, 0xe4, 0x45, 0x9d, 0x5f, 0x1a, 0xb4, 0xb0, 0xbd, 0xb4, 0xf8, 0x00, 0x8f, 0xbc, + 0x44, 0x47, 0x1f, 0x1d, 0x01, 0x44, 0x7a, 0x1e, 0x4b, 0x9c, 0xcc, 0x91, 0x97, 0xe9, 0xd4, 0xa3, + 0x7d, 0x28, 0x05, 0x14, 0x74, 0xe1, 0x39, 0x19, 0x79, 0x71, 0xcb, 0x1c, 0x3d, 0x80, 0x4a, 0x9c, + 0xe9, 0x2c, 0x77, 0xfa, 0x45, 0x5e, 0xb2, 0x17, 0x4e, 0xfd, 0xc7, 0x69, 0xcf, 0x72, 0xa7, 0x61, + 0xe4, 0x25, 0x5b, 0xe3, 0xe8, 0x43, 0x58, 0x9d, 0xa5, 0x25, 0xcb, 0x1f, 0x8e, 0x91, 0x2f, 0xd0, + 0x2c, 0x47, 0x63, 0x40, 0x73, 0xe8, 0xcc, 0x05, 0xce, 0xca, 0xc8, 0x17, 0xe9, 0x9d, 0x23, 0x03, + 0x6a, 0xd3, 0x1c, 0x61, 0xd9, 0xb3, 0x33, 0xf2, 0xd2, 0x7d, 0x74, 0xfe, 0x94, 0x38, 0x6d, 0x58, + 0xf6, 0x2c, 0x8d, 0xbc, 0x74, 0x5b, 0xbd, 0xd9, 0xfe, 0xfc, 0xab, 0xb5, 0xf4, 0x17, 0x5f, 0xad, + 0xa5, 0xff, 0xfe, 0xd5, 0x5a, 0xfa, 0xd3, 0xaf, 0xd7, 0x52, 0x5f, 0x7c, 0xbd, 0x96, 0xfa, 0xcb, + 0xd7, 0x6b, 0xa9, 0x9f, 0x3c, 0x3f, 0x30, 0xc9, 0x70, 0xd2, 0xdb, 0xe8, 0xdb, 0xe3, 0xcd, 0xe8, + 0xa1, 0xc5, 0x79, 0x07, 0x29, 0x7b, 0x05, 0x56, 0x74, 0x5f, 0xfe, 0x6f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x00, 0x83, 0x15, 0xc9, 0x68, 0x29, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -6445,6 +6465,26 @@ func (m *ResponseEndBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + { + size, err := m.TimeoutCommit.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + { + size, err := m.TimeoutPropose.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 if len(m.Events) > 0 { for iNdEx := len(m.Events) - 1; iNdEx >= 0; iNdEx-- { { @@ -6648,20 +6688,20 @@ func (m *ResponseApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, err } } if len(m.RefetchChunks) > 0 { - dAtA49 := make([]byte, len(m.RefetchChunks)*10) - var j48 int + dAtA51 := make([]byte, len(m.RefetchChunks)*10) + var j50 int for _, num := range m.RefetchChunks { for num >= 1<<7 { - dAtA49[j48] = uint8(uint64(num)&0x7f | 0x80) + dAtA51[j50] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j48++ + j50++ } - dAtA49[j48] = uint8(num) - j48++ + dAtA51[j50] = uint8(num) + j50++ } - i -= j48 - copy(dAtA[i:], dAtA49[:j48]) - i = encodeVarintTypes(dAtA, i, uint64(j48)) + i -= j50 + copy(dAtA[i:], dAtA51[:j50]) + i = encodeVarintTypes(dAtA, i, uint64(j50)) i-- dAtA[i] = 0x12 } @@ -7173,12 +7213,12 @@ func (m *Evidence) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x28 } - n58, err58 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err58 != nil { - return 0, err58 + n60, err60 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err60 != nil { + return 0, err60 } - i -= n58 - i = encodeVarintTypes(dAtA, i, uint64(n58)) + i -= n60 + i = encodeVarintTypes(dAtA, i, uint64(n60)) i-- dAtA[i] = 0x22 if m.Height != 0 { @@ -8276,6 +8316,10 @@ func (m *ResponseEndBlock) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } + l = m.TimeoutPropose.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.TimeoutCommit.Size() + n += 1 + l + sovTypes(uint64(l)) return n } @@ -13737,6 +13781,72 @@ func (m *ResponseEndBlock) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutPropose", 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 + } + if err := m.TimeoutPropose.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutCommit", 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 + } + if err := m.TimeoutCommit.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index deb439745d..1028e2803e 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -11,6 +11,7 @@ import "tendermint/crypto/keys.proto"; import "tendermint/types/params.proto"; import "google/protobuf/timestamp.proto"; import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; // This file is copied from http://github.com/tendermint/abci // NOTE: When using custom types, mind the warnings. @@ -264,6 +265,8 @@ message ResponseEndBlock { ConsensusParams consensus_param_updates = 2; repeated Event events = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + google.protobuf.Duration timeout_propose = 4 [(gogoproto.nullable) = false]; + google.protobuf.Duration timeout_commit = 5 [(gogoproto.nullable) = false]; } message ResponseCommit { diff --git a/proto/tendermint/store/types.proto b/proto/tendermint/store/types.proto index e1d994b4b4..64a32d1f71 100644 --- a/proto/tendermint/store/types.proto +++ b/proto/tendermint/store/types.proto @@ -11,11 +11,11 @@ message BlockStoreState { // TxInfo describes the location of a tx inside a committed block // as well as the result of executing the transaction and the error log output. message TxInfo { - int64 height = 1; - uint32 index = 2; + int64 height = 1; + uint32 index = 2; // The response code of executing the tx. 0 means // successfully executed, all others are error codes. - uint32 code = 3; + uint32 code = 3; // The error log output generated if the transaction execution fails. - string error = 4; + string error = 4; } From 41a2cb0cb3b6c165dc2fd2776ef46e203aa017c6 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 18 Sep 2024 14:03:39 -0700 Subject: [PATCH 02/87] reads the timeouts and attempts to set them --- state/execution.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/state/execution.go b/state/execution.go index 1e71cadfe2..c4bec67339 100644 --- a/state/execution.go +++ b/state/execution.go @@ -548,12 +548,17 @@ func updateState( // Change results from this height but only applies to the next height. lastHeightParamsChanged = header.Height + 1 } + // change the timeouts if they are non-zero + if abciResponses.EndBlock.TimeoutPropose.AsDuration() != time.Duration(0) { + // change the timeout + + } nextVersion := state.Version // NOTE: the AppHash has not been populated. // It will be filled on state.Save. - return State{ + s := State{ Version: nextVersion, ChainID: state.ChainID, InitialHeight: state.InitialHeight, From 1fc1edf416bfd6a38fe3014e4982f0ebc8e4c472 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 18 Sep 2024 15:13:49 -0700 Subject: [PATCH 03/87] extends state struct with timeout fields --- state/state.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/state/state.go b/state/state.go index 451377079f..a7b32f5642 100644 --- a/state/state.go +++ b/state/state.go @@ -77,6 +77,17 @@ type State struct { // the latest AppHash we've received from calling abci.Commit() AppHash []byte + + // timeouts received from app, after abci EndBlock call, to be used in the next height + timeoutPropose time.Duration + timeoutCommit time.Duration +} + +func (state *State) GetTimeoutPropose() time.Duration { + return state.timeoutPropose +} +func (state *State) GetTimeoutCommit() time.Duration { + return state.timeoutCommit } // Copy makes a copy of the State for mutating. From 597f6673cc12143093c1339fc0a606f31abbd24e Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 18 Sep 2024 15:14:16 -0700 Subject: [PATCH 04/87] updates timeouts based on EndBlockResponse --- state/execution.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/state/execution.go b/state/execution.go index c4bec67339..93b3a3991f 100644 --- a/state/execution.go +++ b/state/execution.go @@ -525,7 +525,7 @@ func updateState( if err != nil { return state, fmt.Errorf("error changing validator set: %v", err) } - // Change results from this height but only applies to the next next height. + // Change results from this height but only applies to the next height. lastHeightValsChanged = header.Height + 1 + 1 } @@ -548,11 +548,6 @@ func updateState( // Change results from this height but only applies to the next height. lastHeightParamsChanged = header.Height + 1 } - // change the timeouts if they are non-zero - if abciResponses.EndBlock.TimeoutPropose.AsDuration() != time.Duration(0) { - // change the timeout - - } nextVersion := state.Version @@ -573,7 +568,11 @@ func updateState( LastHeightConsensusParamsChanged: lastHeightParamsChanged, LastResultsHash: ABCIResponsesResultsHash(abciResponses), AppHash: nil, - }, nil + timeoutCommit: abciResponses.EndBlock.TimeoutPropose.AsDuration(), + timeoutPropose: abciResponses.EndBlock.TimeoutCommit.AsDuration(), + } + + return s, nil } // Fire NewBlock, NewBlockHeader. From 2397315ebf271f72ce172086dc89bbecc323b21f Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 18 Sep 2024 15:14:51 -0700 Subject: [PATCH 05/87] updates consensus configs based on ApplyBlock's results --- consensus/state.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/consensus/state.go b/consensus/state.go index 57ae3ab1ef..8292e49eeb 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -692,6 +692,8 @@ func (cs *State) updateToState(state sm.State) { cs.CommitRound = -1 cs.LastValidators = state.LastValidators cs.TriggeredTimeoutPrecommit = false + cs.config.TimeoutPropose = state.GetTimeoutPropose() + cs.config.TimeoutCommit = state.GetTimeoutCommit() cs.state = state From 03fb2136769f00bd374c27344190c3f9ca2f0e6f Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 18 Sep 2024 15:24:26 -0700 Subject: [PATCH 06/87] changes the type of timeout fields in protobuf to uint64 --- abci/types/types.pb.go | 500 ++++++++++++++---------------- proto/tendermint/abci/types.proto | 5 +- state/execution.go | 4 +- 3 files changed, 235 insertions(+), 274 deletions(-) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index c9cf04ff7f..6218903729 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -10,7 +10,6 @@ import ( proto "github.com/gogo/protobuf/proto" _ "github.com/gogo/protobuf/types" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - duration "github.com/golang/protobuf/ptypes/duration" crypto "github.com/tendermint/tendermint/proto/tendermint/crypto" types1 "github.com/tendermint/tendermint/proto/tendermint/types" grpc "google.golang.org/grpc" @@ -2407,8 +2406,8 @@ type ResponseEndBlock struct { ValidatorUpdates []ValidatorUpdate `protobuf:"bytes,1,rep,name=validator_updates,json=validatorUpdates,proto3" json:"validator_updates"` ConsensusParamUpdates *ConsensusParams `protobuf:"bytes,2,opt,name=consensus_param_updates,json=consensusParamUpdates,proto3" json:"consensus_param_updates,omitempty"` Events []Event `protobuf:"bytes,3,rep,name=events,proto3" json:"events,omitempty"` - TimeoutPropose duration.Duration `protobuf:"bytes,4,opt,name=timeout_propose,json=timeoutPropose,proto3" json:"timeout_propose"` - TimeoutCommit duration.Duration `protobuf:"bytes,5,opt,name=timeout_commit,json=timeoutCommit,proto3" json:"timeout_commit"` + TimeoutPropose uint64 `protobuf:"varint,4,opt,name=timeout_propose,json=timeoutPropose,proto3" json:"timeout_propose,omitempty"` + TimeoutCommit uint64 `protobuf:"varint,5,opt,name=timeout_commit,json=timeoutCommit,proto3" json:"timeout_commit,omitempty"` } func (m *ResponseEndBlock) Reset() { *m = ResponseEndBlock{} } @@ -2465,18 +2464,18 @@ func (m *ResponseEndBlock) GetEvents() []Event { return nil } -func (m *ResponseEndBlock) GetTimeoutPropose() duration.Duration { +func (m *ResponseEndBlock) GetTimeoutPropose() uint64 { if m != nil { return m.TimeoutPropose } - return duration.Duration{} + return 0 } -func (m *ResponseEndBlock) GetTimeoutCommit() duration.Duration { +func (m *ResponseEndBlock) GetTimeoutCommit() uint64 { if m != nil { return m.TimeoutCommit } - return duration.Duration{} + return 0 } type ResponseCommit struct { @@ -3561,199 +3560,198 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 3065 bytes of a gzipped FileDescriptorProto + // 3048 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x4b, 0x73, 0xe3, 0xc6, - 0x11, 0xe6, 0x9b, 0x44, 0x53, 0x7c, 0x68, 0x76, 0xbd, 0xcb, 0x85, 0xd7, 0xd2, 0x1a, 0x5b, 0x7e, - 0xad, 0x6d, 0x29, 0x96, 0x6b, 0x1d, 0x3b, 0x76, 0x62, 0x8b, 0x5c, 0xae, 0x29, 0xaf, 0x2c, 0x29, - 0x10, 0xb5, 0xce, 0xcb, 0x0b, 0x83, 0xc4, 0x88, 0x84, 0x97, 0x04, 0x60, 0x60, 0x28, 0x4b, 0x7b, - 0x4c, 0x25, 0x95, 0x2a, 0x9f, 0x5c, 0x95, 0x4b, 0x2e, 0xfe, 0x09, 0xb9, 0xe7, 0x92, 0x5c, 0x72, - 0x71, 0x55, 0x0e, 0xf1, 0x31, 0x87, 0x94, 0x93, 0xb2, 0x73, 0xca, 0x1f, 0xc8, 0x29, 0x95, 0xd4, - 0x3c, 0xf0, 0x22, 0x09, 0x91, 0xb2, 0x73, 0xcb, 0x0d, 0xd3, 0xe8, 0x6e, 0x60, 0x1a, 0x33, 0xdd, - 0xdf, 0xd7, 0x18, 0x78, 0x9c, 0x60, 0xcb, 0xc0, 0xee, 0xd8, 0xb4, 0xc8, 0xa6, 0xde, 0xeb, 0x9b, - 0x9b, 0xe4, 0xcc, 0xc1, 0xde, 0x86, 0xe3, 0xda, 0xc4, 0x46, 0xb5, 0xf0, 0xe6, 0x06, 0xbd, 0x29, - 0x3f, 0x11, 0xd1, 0xee, 0xbb, 0x67, 0x0e, 0xb1, 0x37, 0x1d, 0xd7, 0xb6, 0x8f, 0xb9, 0xbe, 0x7c, - 0x3d, 0x72, 0x9b, 0xf9, 0x89, 0x7a, 0x8b, 0xdd, 0x15, 0xc6, 0x0f, 0xf1, 0x99, 0x7f, 0xf7, 0x89, - 0x19, 0x5b, 0x47, 0x77, 0xf5, 0xb1, 0x7f, 0x7b, 0x7d, 0x60, 0xdb, 0x83, 0x11, 0xde, 0x64, 0xa3, - 0xde, 0xe4, 0x78, 0x93, 0x98, 0x63, 0xec, 0x11, 0x7d, 0xec, 0x08, 0x85, 0xcb, 0x03, 0x7b, 0x60, - 0xb3, 0xcb, 0x4d, 0x7a, 0x25, 0xa4, 0x6b, 0xd3, 0x66, 0xc6, 0xc4, 0xd5, 0x89, 0x69, 0x5b, 0xfc, - 0xbe, 0xf2, 0x7b, 0x09, 0x8a, 0x2a, 0xfe, 0x68, 0x82, 0x3d, 0x82, 0xb6, 0x20, 0x87, 0xfb, 0x43, - 0xbb, 0x91, 0xbe, 0x91, 0x7e, 0xb6, 0xbc, 0x75, 0x7d, 0x63, 0x6a, 0xf2, 0x1b, 0x42, 0xaf, 0xdd, - 0x1f, 0xda, 0x9d, 0x94, 0xca, 0x74, 0xd1, 0x6d, 0xc8, 0x1f, 0x8f, 0x26, 0xde, 0xb0, 0x91, 0x61, - 0x46, 0x4f, 0x24, 0x19, 0xdd, 0xa5, 0x4a, 0x9d, 0x94, 0xca, 0xb5, 0xe9, 0xa3, 0x4c, 0xeb, 0xd8, - 0x6e, 0x64, 0xcf, 0x7f, 0xd4, 0x8e, 0x75, 0xcc, 0x1e, 0x45, 0x75, 0x51, 0x13, 0xc0, 0xc3, 0x44, - 0xb3, 0x1d, 0xfa, 0xfa, 0x8d, 0x1c, 0xb3, 0x7c, 0x32, 0xc9, 0xf2, 0x10, 0x93, 0x7d, 0xa6, 0xd8, - 0x49, 0xa9, 0x92, 0xe7, 0x0f, 0xa8, 0x0f, 0xd3, 0x32, 0x89, 0xd6, 0x1f, 0xea, 0xa6, 0xd5, 0xc8, - 0x9f, 0xef, 0x63, 0xc7, 0x32, 0x49, 0x8b, 0x2a, 0x52, 0x1f, 0xa6, 0x3f, 0xa0, 0x53, 0xfe, 0x68, - 0x82, 0xdd, 0xb3, 0x46, 0xe1, 0xfc, 0x29, 0xff, 0x90, 0x2a, 0xd1, 0x29, 0x33, 0x6d, 0xd4, 0x86, - 0x72, 0x0f, 0x0f, 0x4c, 0x4b, 0xeb, 0x8d, 0xec, 0xfe, 0xc3, 0x46, 0x91, 0x19, 0x2b, 0x49, 0xc6, - 0x4d, 0xaa, 0xda, 0xa4, 0x9a, 0x9d, 0x94, 0x0a, 0xbd, 0x60, 0x84, 0xde, 0x80, 0x52, 0x7f, 0x88, - 0xfb, 0x0f, 0x35, 0x72, 0xda, 0x28, 0x31, 0x1f, 0xeb, 0x49, 0x3e, 0x5a, 0x54, 0xaf, 0x7b, 0xda, - 0x49, 0xa9, 0xc5, 0x3e, 0xbf, 0xa4, 0xf3, 0x37, 0xf0, 0xc8, 0x3c, 0xc1, 0x2e, 0xb5, 0x97, 0xce, - 0x9f, 0xff, 0x1d, 0xae, 0xc9, 0x3c, 0x48, 0x86, 0x3f, 0x40, 0x6f, 0x82, 0x84, 0x2d, 0x43, 0x4c, - 0x03, 0x98, 0x8b, 0x1b, 0x89, 0x6b, 0xc5, 0x32, 0xfc, 0x49, 0x94, 0xb0, 0xb8, 0x46, 0xaf, 0x42, - 0xa1, 0x6f, 0x8f, 0xc7, 0x26, 0x69, 0x94, 0x99, 0xf5, 0x5a, 0xe2, 0x04, 0x98, 0x56, 0x27, 0xa5, - 0x0a, 0x7d, 0xb4, 0x07, 0xd5, 0x91, 0xe9, 0x11, 0xcd, 0xb3, 0x74, 0xc7, 0x1b, 0xda, 0xc4, 0x6b, - 0xac, 0x30, 0x0f, 0x4f, 0x25, 0x79, 0xd8, 0x35, 0x3d, 0x72, 0xe8, 0x2b, 0x77, 0x52, 0x6a, 0x65, - 0x14, 0x15, 0x50, 0x7f, 0xf6, 0xf1, 0x31, 0x76, 0x03, 0x87, 0x8d, 0xca, 0xf9, 0xfe, 0xf6, 0xa9, - 0xb6, 0x6f, 0x4f, 0xfd, 0xd9, 0x51, 0x01, 0xfa, 0x29, 0x5c, 0x1a, 0xd9, 0xba, 0x11, 0xb8, 0xd3, - 0xfa, 0xc3, 0x89, 0xf5, 0xb0, 0x51, 0x65, 0x4e, 0x9f, 0x4b, 0x7c, 0x49, 0x5b, 0x37, 0x7c, 0x17, - 0x2d, 0x6a, 0xd0, 0x49, 0xa9, 0xab, 0xa3, 0x69, 0x21, 0x7a, 0x00, 0x97, 0x75, 0xc7, 0x19, 0x9d, - 0x4d, 0x7b, 0xaf, 0x31, 0xef, 0xb7, 0x92, 0xbc, 0x6f, 0x53, 0x9b, 0x69, 0xf7, 0x48, 0x9f, 0x91, - 0xa2, 0x2e, 0xd4, 0x1d, 0x17, 0x3b, 0xba, 0x8b, 0x35, 0xc7, 0xb5, 0x1d, 0xdb, 0xd3, 0x47, 0x8d, - 0x3a, 0xf3, 0xfd, 0x4c, 0x92, 0xef, 0x03, 0xae, 0x7f, 0x20, 0xd4, 0x3b, 0x29, 0xb5, 0xe6, 0xc4, - 0x45, 0xdc, 0xab, 0xdd, 0xc7, 0x9e, 0x17, 0x7a, 0x5d, 0x5d, 0xe4, 0x95, 0xe9, 0xc7, 0xbd, 0xc6, - 0x44, 0xcd, 0x22, 0xe4, 0x4f, 0xf4, 0xd1, 0x04, 0x2b, 0xcf, 0x40, 0x39, 0x92, 0x96, 0x50, 0x03, - 0x8a, 0x63, 0xec, 0x79, 0xfa, 0x00, 0xb3, 0x2c, 0x26, 0xa9, 0xfe, 0x50, 0xa9, 0xc2, 0x4a, 0x34, - 0x15, 0x29, 0xe3, 0xc0, 0x90, 0x26, 0x19, 0x6a, 0x78, 0x82, 0x5d, 0x8f, 0x66, 0x16, 0x61, 0x28, - 0x86, 0xe8, 0x26, 0x54, 0xd8, 0x52, 0xd7, 0xfc, 0xfb, 0x34, 0xd3, 0xe5, 0xd4, 0x15, 0x26, 0xbc, - 0x2f, 0x94, 0xd6, 0xa1, 0xec, 0x6c, 0x39, 0x81, 0x4a, 0x96, 0xa9, 0x80, 0xb3, 0xe5, 0x08, 0x05, - 0xe5, 0x7b, 0x50, 0x9f, 0xce, 0x4c, 0xa8, 0x0e, 0xd9, 0x87, 0xf8, 0x4c, 0x3c, 0x8f, 0x5e, 0xa2, - 0xcb, 0x62, 0x5a, 0xec, 0x19, 0x92, 0x2a, 0xe6, 0xf8, 0xa7, 0x4c, 0x60, 0x1c, 0xa4, 0x24, 0xf4, - 0x2a, 0xe4, 0x68, 0x05, 0x10, 0xc9, 0x5a, 0xde, 0xe0, 0x79, 0x7e, 0xc3, 0xcf, 0xf3, 0x1b, 0x5d, - 0xbf, 0x3c, 0x34, 0x4b, 0x9f, 0x7f, 0xb9, 0x9e, 0xfa, 0xf4, 0x6f, 0xeb, 0x69, 0x95, 0x59, 0xa0, - 0x6b, 0x34, 0x83, 0xe8, 0xa6, 0xa5, 0x99, 0x86, 0x78, 0x4e, 0x91, 0x8d, 0x77, 0x0c, 0x74, 0x0f, - 0xea, 0x7d, 0xdb, 0xf2, 0xb0, 0xe5, 0x4d, 0x3c, 0x8d, 0x97, 0x1f, 0x91, 0xa2, 0x67, 0x77, 0x78, - 0xcb, 0x57, 0x3c, 0x60, 0x7a, 0x6a, 0xad, 0x1f, 0x17, 0xa0, 0xbb, 0x00, 0x27, 0xfa, 0xc8, 0x34, - 0x74, 0x62, 0xbb, 0x5e, 0x23, 0x77, 0x23, 0x3b, 0xd7, 0xcd, 0x7d, 0x5f, 0xe5, 0xc8, 0x31, 0x74, - 0x82, 0x9b, 0x39, 0xfa, 0xb6, 0x6a, 0xc4, 0x12, 0x3d, 0x0d, 0x35, 0xdd, 0x71, 0x34, 0x8f, 0xe8, - 0x04, 0x6b, 0xbd, 0x33, 0x82, 0x3d, 0x96, 0xb8, 0x57, 0xd4, 0x8a, 0xee, 0x38, 0x87, 0x54, 0xda, - 0xa4, 0x42, 0xf4, 0x14, 0x54, 0x69, 0x92, 0x36, 0xf5, 0x91, 0x36, 0xc4, 0xe6, 0x60, 0x48, 0x58, - 0x82, 0xce, 0xaa, 0x15, 0x21, 0xed, 0x30, 0xa1, 0x62, 0x04, 0x0b, 0x81, 0x25, 0x68, 0x84, 0x20, - 0x67, 0xe8, 0x44, 0x67, 0x81, 0x5c, 0x51, 0xd9, 0x35, 0x95, 0x39, 0x3a, 0x19, 0x8a, 0xf0, 0xb0, - 0x6b, 0x74, 0x05, 0x0a, 0xc2, 0x6d, 0x96, 0xb9, 0x15, 0x23, 0xfa, 0xcd, 0x1c, 0xd7, 0x3e, 0xc1, - 0xac, 0x22, 0x95, 0x54, 0x3e, 0x50, 0x7e, 0x91, 0x81, 0xd5, 0x99, 0x54, 0x4e, 0xfd, 0x0e, 0x75, - 0x6f, 0xe8, 0x3f, 0x8b, 0x5e, 0xa3, 0x57, 0xa8, 0x5f, 0xdd, 0xc0, 0xae, 0x28, 0xa1, 0x8d, 0x68, - 0x88, 0x38, 0x7c, 0xe8, 0xb0, 0xfb, 0x22, 0x34, 0x42, 0x1b, 0xed, 0x43, 0x7d, 0xa4, 0x7b, 0x44, - 0xe3, 0xa9, 0x51, 0x8b, 0x94, 0xd3, 0xd9, 0x82, 0xb0, 0xab, 0xfb, 0xc9, 0x94, 0x2e, 0x76, 0xe1, - 0xa8, 0x3a, 0x8a, 0x49, 0x91, 0x0a, 0x97, 0x7b, 0x67, 0x8f, 0x74, 0x8b, 0x98, 0x16, 0xd6, 0x66, - 0xbe, 0xdc, 0xb5, 0x19, 0xa7, 0xed, 0x13, 0xd3, 0xc0, 0x56, 0xdf, 0xff, 0x64, 0x97, 0x02, 0xe3, - 0xe0, 0x93, 0x7a, 0x8a, 0x0a, 0xd5, 0x78, 0x31, 0x42, 0x55, 0xc8, 0x90, 0x53, 0x11, 0x80, 0x0c, - 0x39, 0x45, 0xdf, 0x81, 0x1c, 0x9d, 0x24, 0x9b, 0x7c, 0x75, 0x0e, 0x12, 0x10, 0x76, 0xdd, 0x33, - 0x07, 0xab, 0x4c, 0x53, 0x51, 0x82, 0xdd, 0x10, 0x14, 0xa8, 0x69, 0xaf, 0xca, 0x73, 0x50, 0x9b, - 0xaa, 0x40, 0x91, 0xef, 0x97, 0x8e, 0x7e, 0x3f, 0xa5, 0x06, 0x95, 0x58, 0xb9, 0x51, 0xae, 0xc0, - 0xe5, 0x79, 0xd5, 0x43, 0x19, 0x06, 0xf2, 0x58, 0x15, 0x40, 0xb7, 0xa1, 0x14, 0x94, 0x0f, 0xbe, - 0x1b, 0x67, 0x63, 0xe5, 0x2b, 0xab, 0x81, 0x2a, 0xdd, 0x86, 0x74, 0x59, 0xb3, 0xf5, 0x90, 0x61, - 0x2f, 0x5e, 0xd4, 0x1d, 0xa7, 0xa3, 0x7b, 0x43, 0xe5, 0x03, 0x68, 0x24, 0x95, 0x86, 0xa9, 0x69, - 0xe4, 0x82, 0x65, 0x78, 0x05, 0x0a, 0xc7, 0xb6, 0x3b, 0xd6, 0x09, 0x73, 0x56, 0x51, 0xc5, 0x88, - 0x2e, 0x4f, 0x5e, 0x26, 0xb2, 0x4c, 0xcc, 0x07, 0x8a, 0x06, 0xd7, 0x12, 0xcb, 0x03, 0x35, 0x31, - 0x2d, 0x03, 0xf3, 0x78, 0x56, 0x54, 0x3e, 0x08, 0x1d, 0xf1, 0x97, 0xe5, 0x03, 0xfa, 0x58, 0x8f, - 0xcd, 0x95, 0xf9, 0x97, 0x54, 0x31, 0x52, 0xfe, 0x91, 0x86, 0x2b, 0xf3, 0x8b, 0x04, 0xba, 0x0d, - 0xc0, 0x13, 0x6a, 0xb0, 0xed, 0xca, 0x5b, 0x57, 0x66, 0x17, 0xfd, 0x1d, 0x9d, 0xe8, 0xaa, 0xc4, - 0x34, 0xe9, 0x25, 0x4d, 0x03, 0xa1, 0x99, 0xe6, 0x99, 0x8f, 0xf8, 0x9a, 0xc9, 0xaa, 0x95, 0x40, - 0xe7, 0xd0, 0x7c, 0x14, 0x4f, 0x6f, 0xd9, 0x78, 0x7a, 0x0b, 0x63, 0x97, 0x8b, 0x6d, 0x61, 0x3f, - 0x97, 0xe6, 0x2f, 0x9a, 0x4b, 0x95, 0x5f, 0x45, 0xa7, 0x19, 0x2b, 0x51, 0x91, 0x7d, 0x9d, 0xbe, - 0xd0, 0xbe, 0x8e, 0x87, 0x27, 0xb3, 0x64, 0x78, 0x94, 0x5f, 0x03, 0x94, 0x54, 0xec, 0x39, 0x34, - 0x09, 0xa3, 0x26, 0x48, 0xf8, 0xb4, 0x8f, 0x39, 0x52, 0x4e, 0x27, 0x22, 0x4d, 0xae, 0xdd, 0xf6, - 0x35, 0x29, 0xcc, 0x0b, 0xcc, 0xd0, 0xcb, 0x82, 0x0d, 0x24, 0x03, 0x7b, 0x61, 0x1e, 0xa5, 0x03, - 0xaf, 0xf8, 0x74, 0x20, 0x9b, 0x88, 0xec, 0xb8, 0xd5, 0x14, 0x1f, 0x78, 0x59, 0xf0, 0x81, 0xdc, - 0x82, 0x87, 0xc5, 0x08, 0x41, 0x2b, 0x46, 0x08, 0xf2, 0x0b, 0xa6, 0x99, 0xc0, 0x08, 0x5a, 0x31, - 0x46, 0x50, 0x58, 0xe0, 0x24, 0x81, 0x12, 0xbc, 0xe2, 0x53, 0x82, 0xe2, 0x82, 0x69, 0x4f, 0x71, - 0x82, 0xbb, 0x71, 0x4e, 0xc0, 0xf1, 0xfc, 0xcd, 0x44, 0xeb, 0x44, 0x52, 0xf0, 0xfd, 0x08, 0x29, - 0x90, 0x12, 0x11, 0x39, 0x77, 0x32, 0x87, 0x15, 0xb4, 0x62, 0xac, 0x00, 0x16, 0xc4, 0x20, 0x81, - 0x16, 0xbc, 0x15, 0xa5, 0x05, 0xe5, 0x44, 0x66, 0x21, 0x16, 0xcd, 0x3c, 0x5e, 0xf0, 0x5a, 0xc0, - 0x0b, 0x56, 0x12, 0x89, 0x8d, 0x98, 0xc3, 0x34, 0x31, 0xd8, 0x9f, 0x21, 0x06, 0x1c, 0xc8, 0x3f, - 0x9d, 0xe8, 0x62, 0x01, 0x33, 0xd8, 0x9f, 0x61, 0x06, 0xd5, 0x05, 0x0e, 0x17, 0x50, 0x83, 0x9f, - 0xcd, 0xa7, 0x06, 0xc9, 0xe0, 0x5d, 0xbc, 0xe6, 0x72, 0xdc, 0x40, 0x4b, 0xe0, 0x06, 0x1c, 0xbf, - 0x3f, 0x9f, 0xe8, 0x7e, 0x69, 0x72, 0x70, 0x34, 0x87, 0x1c, 0x70, 0x18, 0xff, 0x6c, 0xa2, 0xf3, - 0x25, 0xd8, 0xc1, 0xd1, 0x1c, 0x76, 0x80, 0x16, 0xba, 0x5d, 0x9e, 0x1e, 0x3c, 0x47, 0x51, 0xd8, - 0x54, 0x9a, 0xa3, 0x95, 0x0c, 0xbb, 0xae, 0xed, 0x0a, 0xe4, 0xcd, 0x07, 0xca, 0xb3, 0x14, 0x17, - 0x86, 0x29, 0xed, 0x1c, 0x2a, 0xc1, 0x10, 0x43, 0x24, 0x8d, 0x29, 0xbf, 0x4b, 0x87, 0xb6, 0x0c, - 0x4a, 0x45, 0x31, 0xa5, 0x24, 0x30, 0x65, 0x84, 0x61, 0x64, 0xe2, 0x0c, 0x63, 0x1d, 0xca, 0x14, - 0x09, 0x4c, 0x91, 0x07, 0xdd, 0xf1, 0xc9, 0x03, 0xba, 0x05, 0xab, 0x0c, 0xea, 0xf1, 0xba, 0x10, - 0x2b, 0x61, 0x35, 0x7a, 0x83, 0x6f, 0x25, 0x5e, 0xcb, 0x5e, 0x84, 0x4b, 0x11, 0xdd, 0x00, 0x61, - 0x70, 0xc4, 0x5c, 0x0f, 0xb4, 0xb7, 0x05, 0xd4, 0x78, 0x37, 0x0c, 0x50, 0x48, 0x4c, 0x10, 0xe4, - 0xfa, 0xb6, 0x81, 0x45, 0xfd, 0x67, 0xd7, 0x94, 0xac, 0x8c, 0xec, 0x81, 0xa8, 0xa8, 0xf4, 0x92, - 0x6a, 0x05, 0x39, 0x5b, 0xe2, 0x29, 0x59, 0xf9, 0x63, 0x3a, 0xf4, 0x17, 0x72, 0x95, 0x79, 0xb4, - 0x22, 0xfd, 0xbf, 0xa1, 0x15, 0x99, 0x6f, 0x4c, 0x2b, 0xa2, 0xf8, 0x2b, 0x1b, 0xc7, 0x5f, 0xff, - 0x4a, 0x87, 0x5f, 0x38, 0x20, 0x09, 0xdf, 0x2c, 0x22, 0x21, 0x98, 0xca, 0xb3, 0xef, 0x25, 0xc0, - 0x94, 0xa0, 0x7e, 0x05, 0xf6, 0xdc, 0x38, 0xf5, 0x2b, 0x72, 0x78, 0xc5, 0x06, 0xe8, 0x55, 0x90, - 0x58, 0x7f, 0x51, 0xb3, 0x1d, 0x4f, 0x94, 0x87, 0xc7, 0xa3, 0x73, 0xe5, 0x6d, 0xc4, 0x8d, 0x03, - 0xaa, 0xb3, 0xef, 0x78, 0x6a, 0xc9, 0x11, 0x57, 0x11, 0xac, 0x23, 0xc5, 0xb0, 0xce, 0x75, 0x90, - 0xe8, 0xdb, 0x7b, 0x8e, 0xde, 0xc7, 0x2c, 0xd5, 0x4b, 0x6a, 0x28, 0x50, 0x1e, 0x00, 0x9a, 0x2d, - 0x36, 0xa8, 0x03, 0x05, 0x7c, 0x82, 0x2d, 0x42, 0xbf, 0x5a, 0x76, 0x1a, 0x8e, 0x08, 0x2e, 0x80, - 0x2d, 0xd2, 0x6c, 0xd0, 0x20, 0xff, 0xf3, 0xcb, 0xf5, 0x3a, 0xd7, 0x7e, 0xc1, 0x1e, 0x9b, 0x04, - 0x8f, 0x1d, 0x72, 0xa6, 0x0a, 0x7b, 0xe5, 0xaf, 0x19, 0x0a, 0xcc, 0x63, 0x85, 0x68, 0x6e, 0x6c, - 0xfd, 0x0d, 0x94, 0x89, 0x90, 0xb2, 0xe5, 0xe2, 0xbd, 0x06, 0x30, 0xd0, 0x3d, 0xed, 0x63, 0xdd, - 0x22, 0xd8, 0x10, 0x41, 0x8f, 0x48, 0x90, 0x0c, 0x25, 0x3a, 0x9a, 0x78, 0xd8, 0x10, 0xfc, 0x30, - 0x18, 0x47, 0xe6, 0x59, 0xfc, 0x76, 0xf3, 0x8c, 0x47, 0xb9, 0x34, 0x15, 0xe5, 0x08, 0x68, 0x96, - 0xa2, 0xa0, 0x99, 0xbe, 0x9b, 0xe3, 0x9a, 0xb6, 0x6b, 0x92, 0x33, 0xf6, 0x69, 0xb2, 0x6a, 0x30, - 0x46, 0x37, 0xa1, 0x32, 0xc6, 0x63, 0xc7, 0xb6, 0x47, 0x1a, 0x4f, 0x5e, 0x65, 0x66, 0xba, 0x22, - 0x84, 0x6d, 0x96, 0xc3, 0x7e, 0x99, 0x09, 0xb7, 0x5f, 0x48, 0x8e, 0xfe, 0xef, 0x02, 0xac, 0x7c, - 0x96, 0xa5, 0x1c, 0x31, 0x0e, 0x35, 0xd0, 0x21, 0xac, 0x06, 0xdb, 0x5f, 0x9b, 0xb0, 0xb4, 0xe0, - 0x2f, 0xe8, 0x65, 0xf3, 0x47, 0xfd, 0x24, 0x2e, 0xf6, 0xd0, 0x8f, 0xe0, 0xea, 0x54, 0x6a, 0x0b, - 0x5c, 0x67, 0x96, 0xcc, 0x70, 0x8f, 0xc5, 0x33, 0x9c, 0xef, 0x39, 0x8c, 0x55, 0xf6, 0x5b, 0xc6, - 0xaa, 0x03, 0x35, 0x4a, 0x56, 0xec, 0x09, 0x11, 0x45, 0x16, 0x0b, 0x9c, 0x7d, 0x6d, 0x86, 0xe9, - 0xdc, 0x11, 0x7f, 0x07, 0xfc, 0x16, 0x81, 0xb0, 0xe3, 0x85, 0x15, 0xa3, 0xbb, 0xe0, 0x4b, 0x44, - 0xdb, 0x41, 0xa0, 0xee, 0x85, 0x8e, 0x2a, 0xc2, 0x4c, 0x50, 0xec, 0x1d, 0xa8, 0xc6, 0xa1, 0xdc, - 0xdc, 0xf5, 0x78, 0x13, 0x2a, 0x2e, 0x26, 0x94, 0xca, 0xc5, 0x1a, 0x2f, 0x2b, 0x5c, 0x28, 0xda, - 0x39, 0x07, 0xf0, 0xd8, 0x5c, 0x48, 0x87, 0xbe, 0x0b, 0x52, 0x88, 0x06, 0xd3, 0x09, 0x3d, 0x8c, - 0x80, 0x97, 0x87, 0xba, 0xca, 0x1f, 0xd2, 0xa1, 0xcb, 0x38, 0xd3, 0x6f, 0x43, 0xc1, 0xc5, 0xde, - 0x64, 0xc4, 0xb9, 0x77, 0x75, 0xeb, 0xc5, 0xe5, 0xc0, 0x20, 0x95, 0x4e, 0x46, 0x44, 0x15, 0xc6, - 0xca, 0x03, 0x28, 0x70, 0x09, 0x2a, 0x43, 0xf1, 0x68, 0xef, 0xde, 0xde, 0xfe, 0x7b, 0x7b, 0xf5, - 0x14, 0x02, 0x28, 0x6c, 0xb7, 0x5a, 0xed, 0x83, 0x6e, 0x3d, 0x8d, 0x24, 0xc8, 0x6f, 0x37, 0xf7, - 0xd5, 0x6e, 0x3d, 0x43, 0xc5, 0x6a, 0xfb, 0x9d, 0x76, 0xab, 0x5b, 0xcf, 0xa2, 0x55, 0xa8, 0xf0, - 0x6b, 0xed, 0xee, 0xbe, 0xfa, 0xee, 0x76, 0xb7, 0x9e, 0x8b, 0x88, 0x0e, 0xdb, 0x7b, 0x77, 0xda, - 0x6a, 0x3d, 0xaf, 0xbc, 0x44, 0xc9, 0x7d, 0x02, 0x7c, 0x0c, 0x69, 0x7c, 0x3a, 0x42, 0xe3, 0x95, - 0xdf, 0x64, 0x40, 0x4e, 0xc6, 0x84, 0xe8, 0x9d, 0xa9, 0x89, 0x6f, 0x5d, 0x00, 0x50, 0x4e, 0xcd, - 0x1e, 0x3d, 0x05, 0x55, 0x17, 0x1f, 0x63, 0xd2, 0x1f, 0x72, 0x8c, 0xca, 0x6b, 0x78, 0x45, 0xad, - 0x08, 0x29, 0x33, 0xf2, 0xb8, 0xda, 0x87, 0xb8, 0x4f, 0x34, 0x9e, 0x1c, 0xf9, 0x36, 0x90, 0xa8, - 0x1a, 0x95, 0x1e, 0x72, 0xa1, 0xf2, 0xc1, 0x85, 0x62, 0x29, 0x41, 0x5e, 0x6d, 0x77, 0xd5, 0x1f, - 0xd7, 0xb3, 0x08, 0x41, 0x95, 0x5d, 0x6a, 0x87, 0x7b, 0xdb, 0x07, 0x87, 0x9d, 0x7d, 0x1a, 0xcb, - 0x4b, 0x50, 0xf3, 0x63, 0xe9, 0x0b, 0xf3, 0xca, 0x01, 0x5c, 0x4d, 0x00, 0xb4, 0xdf, 0xb0, 0x93, - 0xa1, 0xfc, 0x36, 0x1d, 0x75, 0x19, 0xef, 0x1a, 0xbc, 0x3d, 0x15, 0xe9, 0xcd, 0x65, 0x61, 0xf0, - 0x74, 0x98, 0x65, 0x28, 0x61, 0xd1, 0xa0, 0x63, 0x01, 0x5e, 0x51, 0x83, 0xb1, 0xf2, 0xe2, 0xe2, - 0xa0, 0x85, 0xab, 0x2e, 0xa3, 0xfc, 0x27, 0x0d, 0xb5, 0xa9, 0xa4, 0x85, 0xb6, 0x20, 0xcf, 0x99, - 0x5e, 0xd2, 0xcf, 0x42, 0x96, 0x73, 0x45, 0x86, 0xe3, 0xaa, 0xe8, 0x8d, 0xd8, 0x2b, 0xcd, 0x24, - 0x47, 0x1e, 0x2c, 0xbf, 0xab, 0x28, 0x4c, 0x03, 0x0b, 0xf4, 0x26, 0x48, 0x41, 0xf6, 0x15, 0xed, - 0x85, 0x27, 0x67, 0xcd, 0x83, 0xbc, 0x2d, 0xec, 0x43, 0x1b, 0xf4, 0x5a, 0x08, 0xc0, 0x73, 0xb3, - 0xfc, 0x52, 0x98, 0x73, 0x05, 0x61, 0xec, 0xeb, 0x2b, 0x2d, 0x28, 0x47, 0xe6, 0x83, 0x1e, 0x07, - 0x69, 0xac, 0x9f, 0x8a, 0x5e, 0x34, 0xef, 0x26, 0x96, 0xc6, 0xfa, 0x29, 0x6f, 0x43, 0x5f, 0x85, - 0x22, 0xbd, 0x39, 0xd0, 0x3d, 0xd1, 0x9f, 0x2a, 0x8c, 0xf5, 0xd3, 0xb7, 0x75, 0x4f, 0x79, 0x1f, - 0xaa, 0xf1, 0x3e, 0x2c, 0xdd, 0x8b, 0xae, 0x3d, 0xb1, 0x0c, 0xe6, 0x23, 0xaf, 0xf2, 0x01, 0xba, - 0x0d, 0xf9, 0x13, 0x9b, 0x17, 0x90, 0xf9, 0x49, 0xeb, 0xbe, 0x4d, 0x70, 0xa4, 0x8f, 0xcb, 0xb5, - 0x95, 0x47, 0x90, 0x67, 0x05, 0x81, 0xa6, 0x52, 0xd6, 0x51, 0x15, 0xe4, 0x83, 0x5e, 0xa3, 0xf7, - 0x01, 0x74, 0x42, 0x5c, 0xb3, 0x37, 0x09, 0x1d, 0xaf, 0xcf, 0x2f, 0x28, 0xdb, 0xbe, 0x5e, 0xf3, - 0xba, 0xa8, 0x2c, 0x97, 0x43, 0xd3, 0x48, 0x75, 0x89, 0x38, 0x54, 0xf6, 0xa0, 0x1a, 0xb7, 0x8d, - 0xfe, 0xdb, 0x58, 0x99, 0xf3, 0x6f, 0x23, 0x00, 0xb8, 0x01, 0x3c, 0xce, 0xf2, 0xee, 0x39, 0x1b, - 0x28, 0x9f, 0xa4, 0xa1, 0xd4, 0x3d, 0x15, 0x6b, 0x34, 0xa1, 0x71, 0x1b, 0x9a, 0x66, 0xa2, 0x6d, - 0x4a, 0xde, 0x09, 0xce, 0x06, 0xfd, 0xe5, 0xb7, 0x82, 0x0d, 0x95, 0x5b, 0xb6, 0xaf, 0xe1, 0x37, - 0xe4, 0x44, 0xba, 0x7e, 0x1d, 0xa4, 0x60, 0x55, 0x51, 0x16, 0xa7, 0x1b, 0x86, 0x8b, 0x3d, 0x4f, - 0xcc, 0xcd, 0x1f, 0xb2, 0xff, 0x00, 0xf6, 0xc7, 0xa2, 0x11, 0x9a, 0x55, 0xf9, 0x40, 0x31, 0xa0, - 0x36, 0x05, 0x25, 0xd0, 0xeb, 0x50, 0x74, 0x26, 0x3d, 0xcd, 0x0f, 0xcf, 0xd4, 0xe6, 0xf1, 0x11, - 0xfd, 0xa4, 0x37, 0x32, 0xfb, 0xf7, 0xf0, 0x99, 0xff, 0x32, 0xce, 0xa4, 0x77, 0x8f, 0x47, 0x91, - 0x3f, 0x25, 0x13, 0x7d, 0xca, 0x09, 0x94, 0xfc, 0x45, 0x81, 0x7e, 0x10, 0xdd, 0x27, 0xfe, 0xdf, - 0xa1, 0x44, 0x78, 0x23, 0xdc, 0x47, 0xb6, 0xc9, 0x2d, 0x58, 0xf5, 0xcc, 0x81, 0x85, 0x0d, 0x2d, - 0xe4, 0x91, 0xec, 0x69, 0x25, 0xb5, 0xc6, 0x6f, 0xec, 0xfa, 0x24, 0x52, 0xf9, 0x77, 0x1a, 0x4a, - 0xfe, 0x86, 0x45, 0x2f, 0x45, 0xd6, 0x5d, 0x75, 0x4e, 0x0f, 0xcf, 0x57, 0x0c, 0x5b, 0xf9, 0xf1, - 0x77, 0xcd, 0x5c, 0xfc, 0x5d, 0x93, 0xfe, 0xc9, 0xf8, 0x0d, 0xdd, 0xdc, 0x85, 0x7f, 0x8e, 0xbd, - 0x00, 0x88, 0xd8, 0x44, 0x1f, 0x69, 0x27, 0x36, 0x31, 0xad, 0x81, 0xc6, 0x83, 0xcd, 0x51, 0x6e, - 0x9d, 0xdd, 0xb9, 0xcf, 0x6e, 0x1c, 0xb0, 0xb8, 0xff, 0x3c, 0x0d, 0xa5, 0x00, 0x1d, 0x5c, 0xb4, - 0x33, 0x7f, 0x05, 0x0a, 0xa2, 0x00, 0xf2, 0xd6, 0xbc, 0x18, 0x05, 0x3f, 0x89, 0x72, 0x91, 0x9f, - 0x44, 0x32, 0x94, 0xc6, 0x98, 0xe8, 0xac, 0xce, 0x70, 0x2a, 0x1f, 0x8c, 0x6f, 0xbd, 0x06, 0xe5, - 0xc8, 0x4f, 0x12, 0xba, 0xf3, 0xf6, 0xda, 0xef, 0xd5, 0x53, 0x72, 0xf1, 0x93, 0xcf, 0x6e, 0x64, - 0xf7, 0xf0, 0xc7, 0x74, 0xcd, 0xaa, 0xed, 0x56, 0xa7, 0xdd, 0xba, 0x57, 0x4f, 0xcb, 0xe5, 0x4f, - 0x3e, 0xbb, 0x51, 0x54, 0x31, 0x6b, 0xfd, 0xdd, 0xea, 0xc0, 0x4a, 0xf4, 0xab, 0xc4, 0xcb, 0x01, - 0x82, 0xea, 0x9d, 0xa3, 0x83, 0xdd, 0x9d, 0xd6, 0x76, 0xb7, 0xad, 0xdd, 0xdf, 0xef, 0xb6, 0xeb, - 0x69, 0x74, 0x15, 0x2e, 0xed, 0xee, 0xbc, 0xdd, 0xe9, 0x6a, 0xad, 0xdd, 0x9d, 0xf6, 0x5e, 0x57, - 0xdb, 0xee, 0x76, 0xb7, 0x5b, 0xf7, 0xea, 0x99, 0xad, 0x3f, 0x97, 0xa1, 0xb6, 0xdd, 0x6c, 0xed, - 0xd0, 0xfa, 0x6f, 0xf6, 0x75, 0xd1, 0x5a, 0xcd, 0xb1, 0x4e, 0xca, 0xb9, 0x27, 0x49, 0xe4, 0xf3, - 0x3b, 0xcb, 0xe8, 0x2e, 0xe4, 0x59, 0x93, 0x05, 0x9d, 0x7f, 0xb4, 0x44, 0x5e, 0xd0, 0x6a, 0xa6, - 0x2f, 0xc3, 0xb6, 0xc7, 0xb9, 0x67, 0x4d, 0xe4, 0xf3, 0x3b, 0xcf, 0x48, 0x05, 0x29, 0xec, 0x92, - 0x2c, 0x3e, 0x7b, 0x22, 0x2f, 0xd1, 0x8d, 0xa6, 0x3e, 0x43, 0xaa, 0xb6, 0xf8, 0x2c, 0x86, 0xbc, - 0x44, 0x02, 0x43, 0xbb, 0x50, 0xf4, 0xd9, 0xf5, 0xa2, 0xd3, 0x21, 0xf2, 0xc2, 0x4e, 0x31, 0xfd, - 0x04, 0xbc, 0x0b, 0x72, 0xfe, 0x51, 0x17, 0x79, 0x41, 0xdb, 0x1b, 0xed, 0x40, 0x41, 0xa0, 0xfd, - 0x05, 0x27, 0x3e, 0xe4, 0x45, 0x9d, 0x5f, 0x1a, 0xb4, 0xb0, 0xbd, 0xb4, 0xf8, 0x00, 0x8f, 0xbc, - 0x44, 0x47, 0x1f, 0x1d, 0x01, 0x44, 0x7a, 0x1e, 0x4b, 0x9c, 0xcc, 0x91, 0x97, 0xe9, 0xd4, 0xa3, - 0x7d, 0x28, 0x05, 0x14, 0x74, 0xe1, 0x39, 0x19, 0x79, 0x71, 0xcb, 0x1c, 0x3d, 0x80, 0x4a, 0x9c, - 0xe9, 0x2c, 0x77, 0xfa, 0x45, 0x5e, 0xb2, 0x17, 0x4e, 0xfd, 0xc7, 0x69, 0xcf, 0x72, 0xa7, 0x61, - 0xe4, 0x25, 0x5b, 0xe3, 0xe8, 0x43, 0x58, 0x9d, 0xa5, 0x25, 0xcb, 0x1f, 0x8e, 0x91, 0x2f, 0xd0, - 0x2c, 0x47, 0x63, 0x40, 0x73, 0xe8, 0xcc, 0x05, 0xce, 0xca, 0xc8, 0x17, 0xe9, 0x9d, 0x23, 0x03, - 0x6a, 0xd3, 0x1c, 0x61, 0xd9, 0xb3, 0x33, 0xf2, 0xd2, 0x7d, 0x74, 0xfe, 0x94, 0x38, 0x6d, 0x58, - 0xf6, 0x2c, 0x8d, 0xbc, 0x74, 0x5b, 0xbd, 0xd9, 0xfe, 0xfc, 0xab, 0xb5, 0xf4, 0x17, 0x5f, 0xad, - 0xa5, 0xff, 0xfe, 0xd5, 0x5a, 0xfa, 0xd3, 0xaf, 0xd7, 0x52, 0x5f, 0x7c, 0xbd, 0x96, 0xfa, 0xcb, - 0xd7, 0x6b, 0xa9, 0x9f, 0x3c, 0x3f, 0x30, 0xc9, 0x70, 0xd2, 0xdb, 0xe8, 0xdb, 0xe3, 0xcd, 0xe8, - 0xa1, 0xc5, 0x79, 0x07, 0x29, 0x7b, 0x05, 0x56, 0x74, 0x5f, 0xfe, 0x6f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x00, 0x83, 0x15, 0xc9, 0x68, 0x29, 0x00, 0x00, + 0xb5, 0xe6, 0x9b, 0xc4, 0xa1, 0xf8, 0x50, 0xcf, 0x78, 0x86, 0x86, 0xc7, 0xd2, 0x18, 0x53, 0x7e, + 0x8d, 0x6d, 0xe9, 0x5a, 0xae, 0xf1, 0xb5, 0xaf, 0x7d, 0xaf, 0x2d, 0x71, 0x38, 0xa6, 0x3c, 0xb2, + 0xa4, 0xdb, 0xe2, 0x8c, 0xf3, 0xf2, 0xc0, 0x20, 0xd9, 0x22, 0xe1, 0x21, 0x01, 0x18, 0x68, 0xca, + 0xd2, 0x2c, 0x53, 0x49, 0xa5, 0xca, 0x2b, 0x57, 0x65, 0x93, 0x8d, 0x7f, 0x42, 0xf6, 0xd9, 0x24, + 0x9b, 0x6c, 0x5c, 0x95, 0x45, 0xbc, 0x4c, 0x55, 0x52, 0x4e, 0xca, 0xce, 0x2a, 0x7f, 0x20, 0xab, + 0x54, 0x52, 0xfd, 0xc0, 0x8b, 0x24, 0x44, 0xca, 0xce, 0x2e, 0x3b, 0xf4, 0xc1, 0x39, 0x07, 0xe8, + 0x83, 0xee, 0x73, 0xce, 0xf7, 0xa1, 0xe1, 0x09, 0x4a, 0xac, 0x3e, 0x71, 0xc7, 0xa6, 0x45, 0x37, + 0x8d, 0x6e, 0xcf, 0xdc, 0xa4, 0x67, 0x0e, 0xf1, 0x36, 0x1c, 0xd7, 0xa6, 0x36, 0xaa, 0x85, 0x37, + 0x37, 0xd8, 0x4d, 0xf5, 0xc9, 0x88, 0x76, 0xcf, 0x3d, 0x73, 0xa8, 0xbd, 0xe9, 0xb8, 0xb6, 0x7d, + 0x2c, 0xf4, 0xd5, 0x6b, 0x91, 0xdb, 0xdc, 0x4f, 0xd4, 0x5b, 0xec, 0xae, 0x34, 0x7e, 0x48, 0xce, + 0xfc, 0xbb, 0x4f, 0xce, 0xd8, 0x3a, 0x86, 0x6b, 0x8c, 0xfd, 0xdb, 0xeb, 0x03, 0xdb, 0x1e, 0x8c, + 0xc8, 0x26, 0x1f, 0x75, 0x27, 0xc7, 0x9b, 0xd4, 0x1c, 0x13, 0x8f, 0x1a, 0x63, 0x47, 0x2a, 0x5c, + 0x1e, 0xd8, 0x03, 0x9b, 0x5f, 0x6e, 0xb2, 0x2b, 0x21, 0xd5, 0x7e, 0xad, 0x40, 0x11, 0x93, 0x8f, + 0x27, 0xc4, 0xa3, 0x68, 0x0b, 0x72, 0xa4, 0x37, 0xb4, 0x1b, 0xe9, 0xeb, 0xe9, 0xe7, 0xca, 0x5b, + 0xd7, 0x36, 0xa6, 0x26, 0xb7, 0x21, 0xf5, 0x5a, 0xbd, 0xa1, 0xdd, 0x4e, 0x61, 0xae, 0x8b, 0x6e, + 0x41, 0xfe, 0x78, 0x34, 0xf1, 0x86, 0x8d, 0x0c, 0x37, 0x7a, 0x32, 0xc9, 0xe8, 0x0e, 0x53, 0x6a, + 0xa7, 0xb0, 0xd0, 0x66, 0x8f, 0x32, 0xad, 0x63, 0xbb, 0x91, 0x3d, 0xff, 0x51, 0xbb, 0xd6, 0x31, + 0x7f, 0x14, 0xd3, 0x45, 0x3b, 0x00, 0x1e, 0xa1, 0xba, 0xed, 0x50, 0xd3, 0xb6, 0x1a, 0x39, 0x6e, + 0xf9, 0x54, 0x92, 0xe5, 0x11, 0xa1, 0x07, 0x5c, 0xb1, 0x9d, 0xc2, 0x8a, 0xe7, 0x0f, 0x98, 0x0f, + 0xd3, 0x32, 0xa9, 0xde, 0x1b, 0x1a, 0xa6, 0xd5, 0xc8, 0x9f, 0xef, 0x63, 0xd7, 0x32, 0x69, 0x93, + 0x29, 0x32, 0x1f, 0xa6, 0x3f, 0x60, 0x53, 0xfe, 0x78, 0x42, 0xdc, 0xb3, 0x46, 0xe1, 0xfc, 0x29, + 0xff, 0x3f, 0x53, 0x62, 0x53, 0xe6, 0xda, 0xa8, 0x05, 0xe5, 0x2e, 0x19, 0x98, 0x96, 0xde, 0x1d, + 0xd9, 0xbd, 0x87, 0x8d, 0x22, 0x37, 0xd6, 0x92, 0x8c, 0x77, 0x98, 0xea, 0x0e, 0xd3, 0x6c, 0xa7, + 0x30, 0x74, 0x83, 0x11, 0x7a, 0x13, 0x4a, 0xbd, 0x21, 0xe9, 0x3d, 0xd4, 0xe9, 0x69, 0xa3, 0xc4, + 0x7d, 0xac, 0x27, 0xf9, 0x68, 0x32, 0xbd, 0xce, 0x69, 0x3b, 0x85, 0x8b, 0x3d, 0x71, 0xc9, 0xe6, + 0xdf, 0x27, 0x23, 0xf3, 0x84, 0xb8, 0xcc, 0x5e, 0x39, 0x7f, 0xfe, 0xb7, 0x85, 0x26, 0xf7, 0xa0, + 0xf4, 0xfd, 0x01, 0x7a, 0x0b, 0x14, 0x62, 0xf5, 0xe5, 0x34, 0x80, 0xbb, 0xb8, 0x9e, 0xb8, 0x56, + 0xac, 0xbe, 0x3f, 0x89, 0x12, 0x91, 0xd7, 0xe8, 0x35, 0x28, 0xf4, 0xec, 0xf1, 0xd8, 0xa4, 0x8d, + 0x32, 0xb7, 0x5e, 0x4b, 0x9c, 0x00, 0xd7, 0x6a, 0xa7, 0xb0, 0xd4, 0x47, 0xfb, 0x50, 0x1d, 0x99, + 0x1e, 0xd5, 0x3d, 0xcb, 0x70, 0xbc, 0xa1, 0x4d, 0xbd, 0xc6, 0x0a, 0xf7, 0xf0, 0x74, 0x92, 0x87, + 0x3d, 0xd3, 0xa3, 0x47, 0xbe, 0x72, 0x3b, 0x85, 0x2b, 0xa3, 0xa8, 0x80, 0xf9, 0xb3, 0x8f, 0x8f, + 0x89, 0x1b, 0x38, 0x6c, 0x54, 0xce, 0xf7, 0x77, 0xc0, 0xb4, 0x7d, 0x7b, 0xe6, 0xcf, 0x8e, 0x0a, + 0xd0, 0x0f, 0xe1, 0xd2, 0xc8, 0x36, 0xfa, 0x81, 0x3b, 0xbd, 0x37, 0x9c, 0x58, 0x0f, 0x1b, 0x55, + 0xee, 0xf4, 0xf9, 0xc4, 0x97, 0xb4, 0x8d, 0xbe, 0xef, 0xa2, 0xc9, 0x0c, 0xda, 0x29, 0xbc, 0x3a, + 0x9a, 0x16, 0xa2, 0x07, 0x70, 0xd9, 0x70, 0x9c, 0xd1, 0xd9, 0xb4, 0xf7, 0x1a, 0xf7, 0x7e, 0x33, + 0xc9, 0xfb, 0x36, 0xb3, 0x99, 0x76, 0x8f, 0x8c, 0x19, 0x29, 0xea, 0x40, 0xdd, 0x71, 0x89, 0x63, + 0xb8, 0x44, 0x77, 0x5c, 0xdb, 0xb1, 0x3d, 0x63, 0xd4, 0xa8, 0x73, 0xdf, 0xcf, 0x26, 0xf9, 0x3e, + 0x14, 0xfa, 0x87, 0x52, 0xbd, 0x9d, 0xc2, 0x35, 0x27, 0x2e, 0x12, 0x5e, 0xed, 0x1e, 0xf1, 0xbc, + 0xd0, 0xeb, 0xea, 0x22, 0xaf, 0x5c, 0x3f, 0xee, 0x35, 0x26, 0xda, 0x29, 0x42, 0xfe, 0xc4, 0x18, + 0x4d, 0x88, 0xf6, 0x2c, 0x94, 0x23, 0x69, 0x09, 0x35, 0xa0, 0x38, 0x26, 0x9e, 0x67, 0x0c, 0x08, + 0xcf, 0x62, 0x0a, 0xf6, 0x87, 0x5a, 0x15, 0x56, 0xa2, 0xa9, 0x48, 0x1b, 0x07, 0x86, 0x2c, 0xc9, + 0x30, 0xc3, 0x13, 0xe2, 0x7a, 0x2c, 0xb3, 0x48, 0x43, 0x39, 0x44, 0x37, 0xa0, 0xc2, 0x97, 0xba, + 0xee, 0xdf, 0x67, 0x99, 0x2e, 0x87, 0x57, 0xb8, 0xf0, 0xbe, 0x54, 0x5a, 0x87, 0xb2, 0xb3, 0xe5, + 0x04, 0x2a, 0x59, 0xae, 0x02, 0xce, 0x96, 0x23, 0x15, 0xb4, 0xff, 0x81, 0xfa, 0x74, 0x66, 0x42, + 0x75, 0xc8, 0x3e, 0x24, 0x67, 0xf2, 0x79, 0xec, 0x12, 0x5d, 0x96, 0xd3, 0xe2, 0xcf, 0x50, 0xb0, + 0x9c, 0xe3, 0xef, 0x32, 0x81, 0x71, 0x90, 0x92, 0xd0, 0x6b, 0x90, 0x63, 0x19, 0x5e, 0x26, 0x6b, + 0x75, 0x43, 0xa4, 0xff, 0x0d, 0x3f, 0xfd, 0x6f, 0x74, 0xfc, 0xf4, 0xbf, 0x53, 0xfa, 0xe2, 0xab, + 0xf5, 0xd4, 0x67, 0x7f, 0x5e, 0x4f, 0x63, 0x6e, 0x81, 0x1e, 0x67, 0x19, 0xc4, 0x30, 0x2d, 0xdd, + 0xec, 0xcb, 0xe7, 0x14, 0xf9, 0x78, 0xb7, 0x8f, 0xee, 0x42, 0xbd, 0x67, 0x5b, 0x1e, 0xb1, 0xbc, + 0x89, 0xa7, 0x8b, 0xf2, 0x22, 0x53, 0xf4, 0xec, 0x0e, 0x6f, 0xfa, 0x8a, 0x87, 0x5c, 0x0f, 0xd7, + 0x7a, 0x71, 0x01, 0xba, 0x03, 0x70, 0x62, 0x8c, 0xcc, 0xbe, 0x41, 0x6d, 0xd7, 0x6b, 0xe4, 0xae, + 0x67, 0xe7, 0xba, 0xb9, 0xef, 0xab, 0xdc, 0x73, 0xfa, 0x06, 0x25, 0x3b, 0x39, 0xf6, 0xb6, 0x38, + 0x62, 0x89, 0x9e, 0x81, 0x9a, 0xe1, 0x38, 0xba, 0x47, 0x0d, 0x4a, 0xf4, 0xee, 0x19, 0x25, 0x1e, + 0x4f, 0xdc, 0x2b, 0xb8, 0x62, 0x38, 0xce, 0x11, 0x93, 0xee, 0x30, 0x21, 0x7a, 0x1a, 0xaa, 0x2c, + 0x49, 0x9b, 0xc6, 0x48, 0x1f, 0x12, 0x73, 0x30, 0xa4, 0x3c, 0x41, 0x67, 0x71, 0x45, 0x4a, 0xdb, + 0x5c, 0xa8, 0xf5, 0x83, 0x85, 0xc0, 0x13, 0x34, 0x42, 0x90, 0xeb, 0x1b, 0xd4, 0xe0, 0x81, 0x5c, + 0xc1, 0xfc, 0x9a, 0xc9, 0x1c, 0x83, 0x0e, 0x65, 0x78, 0xf8, 0x35, 0xba, 0x02, 0x05, 0xe9, 0x36, + 0xcb, 0xdd, 0xca, 0x11, 0xfb, 0x66, 0x8e, 0x6b, 0x9f, 0x10, 0x5e, 0x91, 0x4a, 0x58, 0x0c, 0xb4, + 0x9f, 0x64, 0x60, 0x75, 0x26, 0x95, 0x33, 0xbf, 0x43, 0xc3, 0x1b, 0xfa, 0xcf, 0x62, 0xd7, 0xe8, + 0x55, 0xe6, 0xd7, 0xe8, 0x13, 0x57, 0x96, 0xd0, 0x46, 0x34, 0x44, 0xa2, 0x3d, 0x68, 0xf3, 0xfb, + 0x32, 0x34, 0x52, 0x1b, 0x1d, 0x40, 0x7d, 0x64, 0x78, 0x54, 0x17, 0xa9, 0x51, 0x8f, 0x94, 0xd3, + 0xd9, 0x82, 0xb0, 0x67, 0xf8, 0xc9, 0x94, 0x2d, 0x76, 0xe9, 0xa8, 0x3a, 0x8a, 0x49, 0x11, 0x86, + 0xcb, 0xdd, 0xb3, 0x47, 0x86, 0x45, 0x4d, 0x8b, 0xe8, 0x33, 0x5f, 0xee, 0xf1, 0x19, 0xa7, 0xad, + 0x13, 0xb3, 0x4f, 0xac, 0x9e, 0xff, 0xc9, 0x2e, 0x05, 0xc6, 0xc1, 0x27, 0xf5, 0x34, 0x0c, 0xd5, + 0x78, 0x31, 0x42, 0x55, 0xc8, 0xd0, 0x53, 0x19, 0x80, 0x0c, 0x3d, 0x45, 0xff, 0x05, 0x39, 0x36, + 0x49, 0x3e, 0xf9, 0xea, 0x9c, 0x4e, 0x40, 0xda, 0x75, 0xce, 0x1c, 0x82, 0xb9, 0xa6, 0xa6, 0x05, + 0xbb, 0x21, 0x28, 0x50, 0xd3, 0x5e, 0xb5, 0xe7, 0xa1, 0x36, 0x55, 0x81, 0x22, 0xdf, 0x2f, 0x1d, + 0xfd, 0x7e, 0x5a, 0x0d, 0x2a, 0xb1, 0x72, 0xa3, 0x5d, 0x81, 0xcb, 0xf3, 0xaa, 0x87, 0x36, 0x0c, + 0xe4, 0xb1, 0x2a, 0x80, 0x6e, 0x41, 0x29, 0x28, 0x1f, 0x62, 0x37, 0xce, 0xc6, 0xca, 0x57, 0xc6, + 0x81, 0x2a, 0xdb, 0x86, 0x6c, 0x59, 0xf3, 0xf5, 0x90, 0xe1, 0x2f, 0x5e, 0x34, 0x1c, 0xa7, 0x6d, + 0x78, 0x43, 0xed, 0x43, 0x68, 0x24, 0x95, 0x86, 0xa9, 0x69, 0xe4, 0x82, 0x65, 0x78, 0x05, 0x0a, + 0xc7, 0xb6, 0x3b, 0x36, 0x28, 0x77, 0x56, 0xc1, 0x72, 0xc4, 0x96, 0xa7, 0x28, 0x13, 0x59, 0x2e, + 0x16, 0x03, 0x4d, 0x87, 0xc7, 0x13, 0xcb, 0x03, 0x33, 0x31, 0xad, 0x3e, 0x11, 0xf1, 0xac, 0x60, + 0x31, 0x08, 0x1d, 0x89, 0x97, 0x15, 0x03, 0xf6, 0x58, 0x8f, 0xcf, 0x95, 0xfb, 0x57, 0xb0, 0x1c, + 0x69, 0x7f, 0x4d, 0xc3, 0x95, 0xf9, 0x45, 0x02, 0xdd, 0x02, 0x10, 0x09, 0x35, 0xd8, 0x76, 0xe5, + 0xad, 0x2b, 0xb3, 0x8b, 0xfe, 0xb6, 0x41, 0x0d, 0xac, 0x70, 0x4d, 0x76, 0xc9, 0xd2, 0x40, 0x68, + 0xa6, 0x7b, 0xe6, 0x23, 0xb1, 0x66, 0xb2, 0xb8, 0x12, 0xe8, 0x1c, 0x99, 0x8f, 0xe2, 0xe9, 0x2d, + 0x1b, 0x4f, 0x6f, 0x61, 0xec, 0x72, 0xb1, 0x2d, 0xec, 0xe7, 0xd2, 0xfc, 0x45, 0x73, 0xa9, 0xf6, + 0xb3, 0xe8, 0x34, 0x63, 0x25, 0x2a, 0xb2, 0xaf, 0xd3, 0x17, 0xda, 0xd7, 0xf1, 0xf0, 0x64, 0x96, + 0x0c, 0x8f, 0xf6, 0x73, 0x80, 0x12, 0x26, 0x9e, 0xc3, 0x92, 0x30, 0xda, 0x01, 0x85, 0x9c, 0xf6, + 0x88, 0xe8, 0x94, 0xd3, 0x89, 0x9d, 0xa6, 0xd0, 0x6e, 0xf9, 0x9a, 0xac, 0xcd, 0x0b, 0xcc, 0xd0, + 0x2b, 0x12, 0x0d, 0x24, 0x37, 0xf6, 0xd2, 0x3c, 0x0a, 0x07, 0x5e, 0xf5, 0xe1, 0x40, 0x36, 0xb1, + 0xb3, 0x13, 0x56, 0x53, 0x78, 0xe0, 0x15, 0x89, 0x07, 0x72, 0x0b, 0x1e, 0x16, 0x03, 0x04, 0xcd, + 0x18, 0x20, 0xc8, 0x2f, 0x98, 0x66, 0x02, 0x22, 0x68, 0xc6, 0x10, 0x41, 0x61, 0x81, 0x93, 0x04, + 0x48, 0xf0, 0xaa, 0x0f, 0x09, 0x8a, 0x0b, 0xa6, 0x3d, 0x85, 0x09, 0xee, 0xc4, 0x31, 0x81, 0xe8, + 0xe7, 0x6f, 0x24, 0x5a, 0x27, 0x82, 0x82, 0xff, 0x8d, 0x80, 0x02, 0x25, 0xb1, 0x23, 0x17, 0x4e, + 0xe6, 0xa0, 0x82, 0x66, 0x0c, 0x15, 0xc0, 0x82, 0x18, 0x24, 0xc0, 0x82, 0xb7, 0xa3, 0xb0, 0xa0, + 0x9c, 0x88, 0x2c, 0xe4, 0xa2, 0x99, 0x87, 0x0b, 0x5e, 0x0f, 0x70, 0xc1, 0x4a, 0x22, 0xb0, 0x91, + 0x73, 0x98, 0x06, 0x06, 0x07, 0x33, 0xc0, 0x40, 0x34, 0xf2, 0xcf, 0x24, 0xba, 0x58, 0x80, 0x0c, + 0x0e, 0x66, 0x90, 0x41, 0x75, 0x81, 0xc3, 0x05, 0xd0, 0xe0, 0x47, 0xf3, 0xa1, 0x41, 0x72, 0xf3, + 0x2e, 0x5f, 0x73, 0x39, 0x6c, 0xa0, 0x27, 0x60, 0x03, 0xd1, 0xbf, 0xbf, 0x90, 0xe8, 0x7e, 0x69, + 0x70, 0x70, 0x6f, 0x0e, 0x38, 0x10, 0x6d, 0xfc, 0x73, 0x89, 0xce, 0x97, 0x40, 0x07, 0xf7, 0xe6, + 0xa0, 0x03, 0xb4, 0xd0, 0xed, 0xf2, 0xf0, 0xe0, 0x79, 0xd6, 0x85, 0x4d, 0xa5, 0x39, 0x56, 0xc9, + 0x88, 0xeb, 0xda, 0xae, 0xec, 0xbc, 0xc5, 0x40, 0x7b, 0x8e, 0xf5, 0x85, 0x61, 0x4a, 0x3b, 0x07, + 0x4a, 0xf0, 0x8e, 0x21, 0x92, 0xc6, 0xb4, 0x5f, 0xa5, 0x43, 0x5b, 0xde, 0x4a, 0x45, 0x7b, 0x4a, + 0x45, 0xf6, 0x94, 0x11, 0x84, 0x91, 0x89, 0x23, 0x8c, 0x75, 0x28, 0xb3, 0x4e, 0x60, 0x0a, 0x3c, + 0x18, 0x8e, 0x0f, 0x1e, 0xd0, 0x4d, 0x58, 0xe5, 0xad, 0x9e, 0xa8, 0x0b, 0xb1, 0x12, 0x56, 0x63, + 0x37, 0xc4, 0x56, 0x12, 0xb5, 0xec, 0x25, 0xb8, 0x14, 0xd1, 0x0d, 0x3a, 0x0c, 0xd1, 0x31, 0xd7, + 0x03, 0xed, 0x6d, 0xd9, 0x6a, 0xbc, 0x17, 0x06, 0x28, 0x04, 0x26, 0x08, 0x72, 0x3d, 0xbb, 0x4f, + 0x64, 0xfd, 0xe7, 0xd7, 0x0c, 0xac, 0x8c, 0xec, 0x81, 0xac, 0xa8, 0xec, 0x92, 0x69, 0x05, 0x39, + 0x5b, 0x11, 0x29, 0x59, 0xfb, 0x6d, 0x3a, 0xf4, 0x17, 0x62, 0x95, 0x79, 0xb0, 0x22, 0xfd, 0xef, + 0x81, 0x15, 0x99, 0x6f, 0x0d, 0x2b, 0xa2, 0xfd, 0x57, 0x36, 0xde, 0x7f, 0xfd, 0x3d, 0x1d, 0x7e, + 0xe1, 0x00, 0x24, 0x7c, 0xbb, 0x88, 0x84, 0xcd, 0x54, 0x9e, 0x7f, 0x2f, 0xd9, 0x4c, 0x49, 0xe8, + 0x57, 0xe0, 0xcf, 0x8d, 0x43, 0xbf, 0xa2, 0x68, 0xaf, 0xf8, 0x00, 0xbd, 0x06, 0x0a, 0xe7, 0x0f, + 0x75, 0xdb, 0xf1, 0x64, 0x79, 0x78, 0x22, 0x3a, 0x57, 0x41, 0x13, 0x6e, 0x1c, 0x32, 0x9d, 0x03, + 0xc7, 0xc3, 0x25, 0x47, 0x5e, 0x45, 0x7a, 0x1d, 0x25, 0xd6, 0xeb, 0x5c, 0x03, 0x85, 0xbd, 0xbd, + 0xe7, 0x18, 0x3d, 0xc2, 0x53, 0xbd, 0x82, 0x43, 0x81, 0xf6, 0x00, 0xd0, 0x6c, 0xb1, 0x41, 0x6d, + 0x28, 0x90, 0x13, 0x62, 0x51, 0xf6, 0xd5, 0xb2, 0xd3, 0xed, 0x88, 0xc4, 0x02, 0xc4, 0xa2, 0x3b, + 0x0d, 0x16, 0xe4, 0xbf, 0x7d, 0xb5, 0x5e, 0x17, 0xda, 0x2f, 0xda, 0x63, 0x93, 0x92, 0xb1, 0x43, + 0xcf, 0xb0, 0xb4, 0xd7, 0xfe, 0x94, 0x61, 0x8d, 0x79, 0xac, 0x10, 0xcd, 0x8d, 0xad, 0xbf, 0x81, + 0x32, 0x11, 0x50, 0xb6, 0x5c, 0xbc, 0xd7, 0x00, 0x06, 0x86, 0xa7, 0x7f, 0x62, 0x58, 0x94, 0xf4, + 0x65, 0xd0, 0x23, 0x12, 0xa4, 0x42, 0x89, 0x8d, 0x26, 0x1e, 0xe9, 0x4b, 0x7c, 0x18, 0x8c, 0x23, + 0xf3, 0x2c, 0x7e, 0xb7, 0x79, 0xc6, 0xa3, 0x5c, 0x9a, 0x8a, 0x72, 0xa4, 0x69, 0x56, 0xa2, 0x4d, + 0x33, 0x7b, 0x37, 0xc7, 0x35, 0x6d, 0xd7, 0xa4, 0x67, 0xfc, 0xd3, 0x64, 0x71, 0x30, 0x46, 0x37, + 0xa0, 0x32, 0x26, 0x63, 0xc7, 0xb6, 0x47, 0xba, 0x48, 0x5e, 0x65, 0x6e, 0xba, 0x22, 0x85, 0x2d, + 0x9e, 0xc3, 0x7e, 0x9a, 0x09, 0xb7, 0x5f, 0x08, 0x8e, 0xfe, 0xe3, 0x02, 0xac, 0xfd, 0x91, 0x33, + 0x26, 0xf1, 0x56, 0x03, 0x1d, 0xc1, 0x6a, 0xb0, 0xfd, 0xf5, 0x09, 0x4f, 0x0b, 0xfe, 0x82, 0x5e, + 0x36, 0x7f, 0xd4, 0x4f, 0xe2, 0x62, 0x0f, 0x7d, 0x0f, 0xae, 0x4e, 0xa5, 0xb6, 0xc0, 0x75, 0x66, + 0xc9, 0x0c, 0xf7, 0x58, 0x3c, 0xc3, 0xf9, 0x9e, 0xc3, 0x58, 0x65, 0xbf, 0x63, 0xac, 0x9e, 0x85, + 0x1a, 0x03, 0x2b, 0xf6, 0x84, 0xca, 0x22, 0x2b, 0xb8, 0x8a, 0x1c, 0xae, 0x4a, 0xb1, 0xa8, 0x9b, + 0x04, 0x3d, 0x0d, 0xbe, 0x44, 0xb2, 0x0a, 0xfc, 0xf3, 0xe6, 0x70, 0x45, 0x4a, 0x25, 0x40, 0xde, + 0x65, 0xa0, 0x3e, 0xda, 0x88, 0xcd, 0x5d, 0x4d, 0x37, 0xa0, 0xe2, 0x12, 0xca, 0x80, 0x58, 0x8c, + 0x36, 0x59, 0x11, 0x42, 0x49, 0xc6, 0x1c, 0xc2, 0x63, 0x73, 0x1b, 0x32, 0xf4, 0xdf, 0xa0, 0x84, + 0xbd, 0x5c, 0x3a, 0x81, 0x81, 0x08, 0x50, 0x75, 0xa8, 0xab, 0xfd, 0x26, 0x1d, 0xba, 0x8c, 0xe3, + 0xf4, 0x16, 0x14, 0x5c, 0xe2, 0x4d, 0x46, 0x02, 0x39, 0x57, 0xb7, 0x5e, 0x5a, 0xae, 0x95, 0x63, + 0xd2, 0xc9, 0x88, 0x62, 0x69, 0xac, 0x3d, 0x80, 0x82, 0x90, 0xa0, 0x32, 0x14, 0xef, 0xed, 0xdf, + 0xdd, 0x3f, 0x78, 0x7f, 0xbf, 0x9e, 0x42, 0x00, 0x85, 0xed, 0x66, 0xb3, 0x75, 0xd8, 0xa9, 0xa7, + 0x91, 0x02, 0xf9, 0xed, 0x9d, 0x03, 0xdc, 0xa9, 0x67, 0x98, 0x18, 0xb7, 0xde, 0x6d, 0x35, 0x3b, + 0xf5, 0x2c, 0x5a, 0x85, 0x8a, 0xb8, 0xd6, 0xef, 0x1c, 0xe0, 0xf7, 0xb6, 0x3b, 0xf5, 0x5c, 0x44, + 0x74, 0xd4, 0xda, 0xbf, 0xdd, 0xc2, 0xf5, 0xbc, 0xf6, 0x32, 0x83, 0xe6, 0x09, 0xcd, 0x5f, 0x08, + 0xc2, 0xd3, 0x11, 0x10, 0xae, 0xfd, 0x22, 0x03, 0x6a, 0x72, 0x47, 0x87, 0xde, 0x9d, 0x9a, 0xf8, + 0xd6, 0x05, 0xda, 0xc1, 0xa9, 0xd9, 0xb3, 0x25, 0xe2, 0x92, 0x63, 0x42, 0x7b, 0x43, 0xd1, 0x61, + 0x8a, 0x0a, 0x5c, 0xc1, 0x15, 0x29, 0xe5, 0x46, 0x9e, 0x50, 0xfb, 0x88, 0xf4, 0xa8, 0x2e, 0x52, + 0x9b, 0x58, 0xc4, 0x0a, 0x53, 0x63, 0xd2, 0x23, 0x21, 0xd4, 0x3e, 0xbc, 0x50, 0x2c, 0x15, 0xc8, + 0xe3, 0x56, 0x07, 0x7f, 0xbf, 0x9e, 0x45, 0x08, 0xaa, 0xfc, 0x52, 0x3f, 0xda, 0xdf, 0x3e, 0x3c, + 0x6a, 0x1f, 0xb0, 0x58, 0x5e, 0x82, 0x9a, 0x1f, 0x4b, 0x5f, 0x98, 0xd7, 0x0e, 0xe1, 0x6a, 0x42, + 0x3b, 0xfa, 0x2d, 0x79, 0x08, 0xed, 0x97, 0xe9, 0xa8, 0xcb, 0x38, 0xe6, 0x7f, 0x67, 0x2a, 0xd2, + 0x9b, 0xcb, 0x36, 0xb1, 0xd3, 0x61, 0x56, 0xa1, 0x44, 0x24, 0xbd, 0xc6, 0x03, 0xbc, 0x82, 0x83, + 0xb1, 0xf6, 0xd2, 0xe2, 0xa0, 0x85, 0xab, 0x2e, 0xa3, 0xfd, 0x33, 0x0d, 0xb5, 0xa9, 0x94, 0x83, + 0xb6, 0x20, 0x2f, 0x70, 0x5a, 0xd2, 0xaf, 0x3e, 0x9e, 0x31, 0x65, 0x7e, 0x12, 0xaa, 0xe8, 0xcd, + 0xd8, 0x2b, 0xcd, 0xa4, 0x36, 0x11, 0x2c, 0x9f, 0x13, 0x94, 0xa6, 0x81, 0x05, 0x7a, 0x0b, 0x94, + 0x20, 0x77, 0x4a, 0x72, 0xe0, 0xa9, 0x59, 0xf3, 0x20, 0xeb, 0x4a, 0xfb, 0xd0, 0x06, 0xbd, 0x1e, + 0xb6, 0xcf, 0xb9, 0x59, 0x74, 0x28, 0xcd, 0x85, 0x82, 0x34, 0xf6, 0xf5, 0xb5, 0x26, 0x94, 0x23, + 0xf3, 0x41, 0x4f, 0x80, 0x32, 0x36, 0x4e, 0x25, 0x93, 0x2c, 0xb8, 0xc0, 0xd2, 0xd8, 0x38, 0x15, + 0x24, 0xf2, 0x55, 0x28, 0xb2, 0x9b, 0x03, 0xc3, 0x93, 0xec, 0x52, 0x61, 0x6c, 0x9c, 0xbe, 0x63, + 0x78, 0xda, 0x07, 0x50, 0x8d, 0xb3, 0xa8, 0x6c, 0x2f, 0xba, 0xf6, 0xc4, 0xea, 0x73, 0x1f, 0x79, + 0x2c, 0x06, 0xe8, 0x16, 0xe4, 0x4f, 0x6c, 0x91, 0xfe, 0xe7, 0x27, 0xad, 0xfb, 0x36, 0x25, 0x11, + 0x16, 0x56, 0x68, 0x6b, 0x8f, 0x20, 0xcf, 0xd3, 0x39, 0x4b, 0xa5, 0x9c, 0x0f, 0x95, 0xd0, 0x81, + 0x5d, 0xa3, 0x0f, 0x00, 0x0c, 0x4a, 0x5d, 0xb3, 0x3b, 0x09, 0x1d, 0xaf, 0xcf, 0x2f, 0x07, 0xdb, + 0xbe, 0xde, 0xce, 0x35, 0x59, 0x17, 0x2e, 0x87, 0xa6, 0x91, 0xda, 0x10, 0x71, 0xa8, 0xed, 0x43, + 0x35, 0x6e, 0x1b, 0xfd, 0x33, 0xb1, 0x32, 0xe7, 0xcf, 0x44, 0xd0, 0x9e, 0x06, 0xcd, 0x6d, 0x56, + 0x70, 0xdf, 0x7c, 0xa0, 0x7d, 0x9a, 0x86, 0x52, 0xe7, 0x54, 0xae, 0xd1, 0x04, 0xda, 0x35, 0x34, + 0xcd, 0x44, 0x49, 0x46, 0xc1, 0xe3, 0x66, 0x03, 0x76, 0xf8, 0xed, 0x60, 0x43, 0xe5, 0x96, 0x65, + 0x25, 0x7c, 0x3a, 0x4d, 0xa6, 0xeb, 0x37, 0x40, 0x09, 0x56, 0x15, 0xc3, 0x60, 0x46, 0xbf, 0xef, + 0x12, 0xcf, 0x93, 0x73, 0xf3, 0x87, 0x9c, 0xc5, 0xb7, 0x3f, 0x91, 0x34, 0x66, 0x16, 0x8b, 0x81, + 0xd6, 0x87, 0xda, 0x54, 0x23, 0x80, 0xde, 0x80, 0xa2, 0x33, 0xe9, 0xea, 0x7e, 0x78, 0xa6, 0x36, + 0x8f, 0xdf, 0x8f, 0x4f, 0xba, 0x23, 0xb3, 0x77, 0x97, 0x9c, 0xf9, 0x2f, 0xe3, 0x4c, 0xba, 0x77, + 0x45, 0x14, 0xc5, 0x53, 0x32, 0xd1, 0xa7, 0x9c, 0x40, 0xc9, 0x5f, 0x14, 0xe8, 0xff, 0xa2, 0xfb, + 0xc4, 0xff, 0xb7, 0x93, 0xd8, 0x9c, 0x48, 0xf7, 0x91, 0x6d, 0x72, 0x13, 0x56, 0x3d, 0x73, 0x60, + 0x91, 0xbe, 0x1e, 0xa2, 0x40, 0xfe, 0xb4, 0x12, 0xae, 0x89, 0x1b, 0x7b, 0x3e, 0x04, 0xd4, 0xfe, + 0x91, 0x86, 0x92, 0xbf, 0x61, 0xd1, 0xcb, 0x91, 0x75, 0x57, 0x9d, 0xc3, 0xc0, 0xf9, 0x8a, 0x21, + 0x11, 0x1f, 0x7f, 0xd7, 0xcc, 0xc5, 0xdf, 0x35, 0xe9, 0x8f, 0x8a, 0x4f, 0xc7, 0xe6, 0x2e, 0xfc, + 0x6b, 0xeb, 0x45, 0x40, 0xd4, 0xa6, 0xc6, 0x48, 0x3f, 0xb1, 0xa9, 0x69, 0x0d, 0x74, 0x11, 0x6c, + 0xd1, 0xa3, 0xd6, 0xf9, 0x9d, 0xfb, 0xfc, 0xc6, 0x21, 0x8f, 0xfb, 0x8f, 0xd3, 0x50, 0x0a, 0xba, + 0x83, 0x8b, 0xf2, 0xea, 0x57, 0xa0, 0x20, 0x0b, 0xa0, 0x20, 0xd6, 0xe5, 0x28, 0xf8, 0xc5, 0x93, + 0x8b, 0xfc, 0xe2, 0x51, 0xa1, 0x34, 0x26, 0xd4, 0xe0, 0x75, 0x46, 0x00, 0xf1, 0x60, 0x7c, 0xf3, + 0x75, 0x28, 0x47, 0x7e, 0x71, 0xb0, 0x9d, 0xb7, 0xdf, 0x7a, 0xbf, 0x9e, 0x52, 0x8b, 0x9f, 0x7e, + 0x7e, 0x3d, 0xbb, 0x4f, 0x3e, 0x61, 0x6b, 0x16, 0xb7, 0x9a, 0xed, 0x56, 0xf3, 0x6e, 0x3d, 0xad, + 0x96, 0x3f, 0xfd, 0xfc, 0x7a, 0x11, 0x13, 0x4e, 0xdc, 0xdd, 0x6c, 0xc3, 0x4a, 0xf4, 0xab, 0xc4, + 0xcb, 0x01, 0x82, 0xea, 0xed, 0x7b, 0x87, 0x7b, 0xbb, 0xcd, 0xed, 0x4e, 0x4b, 0xbf, 0x7f, 0xd0, + 0x69, 0xd5, 0xd3, 0xe8, 0x2a, 0x5c, 0xda, 0xdb, 0x7d, 0xa7, 0xdd, 0xd1, 0x9b, 0x7b, 0xbb, 0xad, + 0xfd, 0x8e, 0xbe, 0xdd, 0xe9, 0x6c, 0x37, 0xef, 0xd6, 0x33, 0x5b, 0xbf, 0x2f, 0x43, 0x6d, 0x7b, + 0xa7, 0xb9, 0xcb, 0xea, 0xbf, 0xd9, 0x33, 0x24, 0x31, 0x9a, 0xe3, 0x3c, 0xc8, 0xb9, 0xe7, 0x40, + 0xd4, 0xf3, 0x79, 0x61, 0x74, 0x07, 0xf2, 0x9c, 0x22, 0x41, 0xe7, 0x1f, 0x0c, 0x51, 0x17, 0x10, + 0xc5, 0xec, 0x65, 0xf8, 0xf6, 0x38, 0xf7, 0xa4, 0x88, 0x7a, 0x3e, 0x6f, 0x8c, 0x30, 0x28, 0x21, + 0xc7, 0xb1, 0xf8, 0xe4, 0x88, 0xba, 0x04, 0x97, 0xcc, 0x7c, 0x86, 0x40, 0x6b, 0xf1, 0x49, 0x0a, + 0x75, 0x89, 0x04, 0x86, 0xf6, 0xa0, 0xe8, 0x63, 0xe3, 0x45, 0x67, 0x3b, 0xd4, 0x85, 0x3c, 0x2f, + 0xfb, 0x04, 0x82, 0xc3, 0x38, 0xff, 0xa0, 0x8a, 0xba, 0x80, 0xb4, 0x46, 0xbb, 0x50, 0x90, 0xdd, + 0xfe, 0x82, 0xf3, 0x1a, 0xea, 0x22, 0xde, 0x96, 0x05, 0x2d, 0x24, 0x87, 0x16, 0x1f, 0xbf, 0x51, + 0x97, 0xe0, 0xe3, 0xd1, 0x3d, 0x80, 0x08, 0x63, 0xb1, 0xc4, 0xb9, 0x1a, 0x75, 0x19, 0x9e, 0x1d, + 0x1d, 0x40, 0x29, 0x00, 0x90, 0x0b, 0x4f, 0xb9, 0xa8, 0x8b, 0x09, 0x6f, 0xf4, 0x00, 0x2a, 0x71, + 0xa4, 0xb3, 0xdc, 0xd9, 0x15, 0x75, 0x49, 0x26, 0x9b, 0xf9, 0x8f, 0xc3, 0x9e, 0xe5, 0xce, 0xb2, + 0xa8, 0x4b, 0x12, 0xdb, 0xe8, 0x23, 0x58, 0x9d, 0x85, 0x25, 0xcb, 0x1f, 0x6d, 0x51, 0x2f, 0x40, + 0x75, 0xa3, 0x31, 0xa0, 0x39, 0x70, 0xe6, 0x02, 0x27, 0x5d, 0xd4, 0x8b, 0x30, 0xdf, 0xa8, 0x0f, + 0xb5, 0x69, 0x8c, 0xb0, 0xec, 0xc9, 0x17, 0x75, 0x69, 0x16, 0x5c, 0x3c, 0x25, 0x0e, 0x1b, 0x96, + 0x3d, 0x09, 0xa3, 0x2e, 0x4d, 0x8a, 0xef, 0xb4, 0xbe, 0xf8, 0x7a, 0x2d, 0xfd, 0xe5, 0xd7, 0x6b, + 0xe9, 0xbf, 0x7c, 0xbd, 0x96, 0xfe, 0xec, 0x9b, 0xb5, 0xd4, 0x97, 0xdf, 0xac, 0xa5, 0xfe, 0xf0, + 0xcd, 0x5a, 0xea, 0x07, 0x2f, 0x0c, 0x4c, 0x3a, 0x9c, 0x74, 0x37, 0x7a, 0xf6, 0x78, 0x33, 0x7a, + 0xa4, 0x70, 0xde, 0x31, 0xc7, 0x6e, 0x81, 0x17, 0xdd, 0x57, 0xfe, 0x15, 0x00, 0x00, 0xff, 0xff, + 0xad, 0xcb, 0xd0, 0x34, 0x06, 0x29, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -6465,26 +6463,16 @@ func (m *ResponseEndBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.TimeoutCommit.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) + if m.TimeoutCommit != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.TimeoutCommit)) + i-- + dAtA[i] = 0x28 } - i-- - dAtA[i] = 0x2a - { - size, err := m.TimeoutPropose.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) + if m.TimeoutPropose != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.TimeoutPropose)) + i-- + dAtA[i] = 0x20 } - i-- - dAtA[i] = 0x22 if len(m.Events) > 0 { for iNdEx := len(m.Events) - 1; iNdEx >= 0; iNdEx-- { { @@ -6688,20 +6676,20 @@ func (m *ResponseApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, err } } if len(m.RefetchChunks) > 0 { - dAtA51 := make([]byte, len(m.RefetchChunks)*10) - var j50 int + dAtA49 := make([]byte, len(m.RefetchChunks)*10) + var j48 int for _, num := range m.RefetchChunks { for num >= 1<<7 { - dAtA51[j50] = uint8(uint64(num)&0x7f | 0x80) + dAtA49[j48] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j50++ + j48++ } - dAtA51[j50] = uint8(num) - j50++ + dAtA49[j48] = uint8(num) + j48++ } - i -= j50 - copy(dAtA[i:], dAtA51[:j50]) - i = encodeVarintTypes(dAtA, i, uint64(j50)) + i -= j48 + copy(dAtA[i:], dAtA49[:j48]) + i = encodeVarintTypes(dAtA, i, uint64(j48)) i-- dAtA[i] = 0x12 } @@ -7213,12 +7201,12 @@ func (m *Evidence) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x28 } - n60, err60 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err60 != nil { - return 0, err60 + n58, err58 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err58 != nil { + return 0, err58 } - i -= n60 - i = encodeVarintTypes(dAtA, i, uint64(n60)) + i -= n58 + i = encodeVarintTypes(dAtA, i, uint64(n58)) i-- dAtA[i] = 0x22 if m.Height != 0 { @@ -8316,10 +8304,12 @@ func (m *ResponseEndBlock) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } - l = m.TimeoutPropose.Size() - n += 1 + l + sovTypes(uint64(l)) - l = m.TimeoutCommit.Size() - n += 1 + l + sovTypes(uint64(l)) + if m.TimeoutPropose != 0 { + n += 1 + sovTypes(uint64(m.TimeoutPropose)) + } + if m.TimeoutCommit != 0 { + n += 1 + sovTypes(uint64(m.TimeoutCommit)) + } return n } @@ -13782,10 +13772,10 @@ func (m *ResponseEndBlock) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 4: - if wireType != 2 { + if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field TimeoutPropose", wireType) } - var msglen int + m.TimeoutPropose = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -13795,30 +13785,16 @@ func (m *ResponseEndBlock) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.TimeoutPropose |= uint64(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 - } - if err := m.TimeoutPropose.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex case 5: - if wireType != 2 { + if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field TimeoutCommit", wireType) } - var msglen int + m.TimeoutCommit = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -13828,25 +13804,11 @@ func (m *ResponseEndBlock) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.TimeoutCommit |= uint64(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 - } - if err := m.TimeoutCommit.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index 1028e2803e..5e73d4730d 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -11,7 +11,6 @@ import "tendermint/crypto/keys.proto"; import "tendermint/types/params.proto"; import "google/protobuf/timestamp.proto"; import "gogoproto/gogo.proto"; -import "google/protobuf/duration.proto"; // This file is copied from http://github.com/tendermint/abci // NOTE: When using custom types, mind the warnings. @@ -265,8 +264,8 @@ message ResponseEndBlock { ConsensusParams consensus_param_updates = 2; repeated Event events = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - google.protobuf.Duration timeout_propose = 4 [(gogoproto.nullable) = false]; - google.protobuf.Duration timeout_commit = 5 [(gogoproto.nullable) = false]; + uint64 timeout_propose = 4; + uint64 timeout_commit = 5; } message ResponseCommit { diff --git a/state/execution.go b/state/execution.go index 93b3a3991f..9a76f02e5b 100644 --- a/state/execution.go +++ b/state/execution.go @@ -568,8 +568,8 @@ func updateState( LastHeightConsensusParamsChanged: lastHeightParamsChanged, LastResultsHash: ABCIResponsesResultsHash(abciResponses), AppHash: nil, - timeoutCommit: abciResponses.EndBlock.TimeoutPropose.AsDuration(), - timeoutPropose: abciResponses.EndBlock.TimeoutCommit.AsDuration(), + timeoutCommit: time.Duration(abciResponses.EndBlock.TimeoutCommit) * time.Second, + timeoutPropose: time.Duration(abciResponses.EndBlock.TimeoutPropose) * time.Second, } return s, nil From a1045800d82f849932b923876a2bb32c33b8f82e Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 19 Sep 2024 14:27:57 -0700 Subject: [PATCH 07/87] uses time.Duration for protobuf fields --- abci/types/types.pb.go | 494 ++++++++++++++++-------------- proto/tendermint/abci/types.proto | 5 +- state/execution.go | 4 +- 3 files changed, 269 insertions(+), 234 deletions(-) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index 6218903729..2fce5f0f89 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -10,6 +10,7 @@ import ( proto "github.com/gogo/protobuf/proto" _ "github.com/gogo/protobuf/types" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "github.com/golang/protobuf/ptypes/duration" crypto "github.com/tendermint/tendermint/proto/tendermint/crypto" types1 "github.com/tendermint/tendermint/proto/tendermint/types" grpc "google.golang.org/grpc" @@ -2406,8 +2407,8 @@ type ResponseEndBlock struct { ValidatorUpdates []ValidatorUpdate `protobuf:"bytes,1,rep,name=validator_updates,json=validatorUpdates,proto3" json:"validator_updates"` ConsensusParamUpdates *ConsensusParams `protobuf:"bytes,2,opt,name=consensus_param_updates,json=consensusParamUpdates,proto3" json:"consensus_param_updates,omitempty"` Events []Event `protobuf:"bytes,3,rep,name=events,proto3" json:"events,omitempty"` - TimeoutPropose uint64 `protobuf:"varint,4,opt,name=timeout_propose,json=timeoutPropose,proto3" json:"timeout_propose,omitempty"` - TimeoutCommit uint64 `protobuf:"varint,5,opt,name=timeout_commit,json=timeoutCommit,proto3" json:"timeout_commit,omitempty"` + TimeoutPropose time.Duration `protobuf:"bytes,4,opt,name=timeout_propose,json=timeoutPropose,proto3,stdduration" json:"timeout_propose"` + TimeoutCommit time.Duration `protobuf:"bytes,5,opt,name=timeout_commit,json=timeoutCommit,proto3,stdduration" json:"timeout_commit"` } func (m *ResponseEndBlock) Reset() { *m = ResponseEndBlock{} } @@ -2464,14 +2465,14 @@ func (m *ResponseEndBlock) GetEvents() []Event { return nil } -func (m *ResponseEndBlock) GetTimeoutPropose() uint64 { +func (m *ResponseEndBlock) GetTimeoutPropose() time.Duration { if m != nil { return m.TimeoutPropose } return 0 } -func (m *ResponseEndBlock) GetTimeoutCommit() uint64 { +func (m *ResponseEndBlock) GetTimeoutCommit() time.Duration { if m != nil { return m.TimeoutCommit } @@ -3560,198 +3561,199 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 3048 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x4b, 0x73, 0xe3, 0xc6, - 0xb5, 0xe6, 0x9b, 0xc4, 0xa1, 0xf8, 0x50, 0xcf, 0x78, 0x86, 0x86, 0xc7, 0xd2, 0x18, 0x53, 0x7e, - 0x8d, 0x6d, 0xe9, 0x5a, 0xae, 0xf1, 0xb5, 0xaf, 0x7d, 0xaf, 0x2d, 0x71, 0x38, 0xa6, 0x3c, 0xb2, - 0xa4, 0xdb, 0xe2, 0x8c, 0xf3, 0xf2, 0xc0, 0x20, 0xd9, 0x22, 0xe1, 0x21, 0x01, 0x18, 0x68, 0xca, - 0xd2, 0x2c, 0x53, 0x49, 0xa5, 0xca, 0x2b, 0x57, 0x65, 0x93, 0x8d, 0x7f, 0x42, 0xf6, 0xd9, 0x24, - 0x9b, 0x6c, 0x5c, 0x95, 0x45, 0xbc, 0x4c, 0x55, 0x52, 0x4e, 0xca, 0xce, 0x2a, 0x7f, 0x20, 0xab, - 0x54, 0x52, 0xfd, 0xc0, 0x8b, 0x24, 0x44, 0xca, 0xce, 0x2e, 0x3b, 0xf4, 0xc1, 0x39, 0x07, 0xe8, - 0x83, 0xee, 0x73, 0xce, 0xf7, 0xa1, 0xe1, 0x09, 0x4a, 0xac, 0x3e, 0x71, 0xc7, 0xa6, 0x45, 0x37, - 0x8d, 0x6e, 0xcf, 0xdc, 0xa4, 0x67, 0x0e, 0xf1, 0x36, 0x1c, 0xd7, 0xa6, 0x36, 0xaa, 0x85, 0x37, - 0x37, 0xd8, 0x4d, 0xf5, 0xc9, 0x88, 0x76, 0xcf, 0x3d, 0x73, 0xa8, 0xbd, 0xe9, 0xb8, 0xb6, 0x7d, - 0x2c, 0xf4, 0xd5, 0x6b, 0x91, 0xdb, 0xdc, 0x4f, 0xd4, 0x5b, 0xec, 0xae, 0x34, 0x7e, 0x48, 0xce, - 0xfc, 0xbb, 0x4f, 0xce, 0xd8, 0x3a, 0x86, 0x6b, 0x8c, 0xfd, 0xdb, 0xeb, 0x03, 0xdb, 0x1e, 0x8c, - 0xc8, 0x26, 0x1f, 0x75, 0x27, 0xc7, 0x9b, 0xd4, 0x1c, 0x13, 0x8f, 0x1a, 0x63, 0x47, 0x2a, 0x5c, - 0x1e, 0xd8, 0x03, 0x9b, 0x5f, 0x6e, 0xb2, 0x2b, 0x21, 0xd5, 0x7e, 0xad, 0x40, 0x11, 0x93, 0x8f, - 0x27, 0xc4, 0xa3, 0x68, 0x0b, 0x72, 0xa4, 0x37, 0xb4, 0x1b, 0xe9, 0xeb, 0xe9, 0xe7, 0xca, 0x5b, - 0xd7, 0x36, 0xa6, 0x26, 0xb7, 0x21, 0xf5, 0x5a, 0xbd, 0xa1, 0xdd, 0x4e, 0x61, 0xae, 0x8b, 0x6e, - 0x41, 0xfe, 0x78, 0x34, 0xf1, 0x86, 0x8d, 0x0c, 0x37, 0x7a, 0x32, 0xc9, 0xe8, 0x0e, 0x53, 0x6a, - 0xa7, 0xb0, 0xd0, 0x66, 0x8f, 0x32, 0xad, 0x63, 0xbb, 0x91, 0x3d, 0xff, 0x51, 0xbb, 0xd6, 0x31, - 0x7f, 0x14, 0xd3, 0x45, 0x3b, 0x00, 0x1e, 0xa1, 0xba, 0xed, 0x50, 0xd3, 0xb6, 0x1a, 0x39, 0x6e, - 0xf9, 0x54, 0x92, 0xe5, 0x11, 0xa1, 0x07, 0x5c, 0xb1, 0x9d, 0xc2, 0x8a, 0xe7, 0x0f, 0x98, 0x0f, - 0xd3, 0x32, 0xa9, 0xde, 0x1b, 0x1a, 0xa6, 0xd5, 0xc8, 0x9f, 0xef, 0x63, 0xd7, 0x32, 0x69, 0x93, - 0x29, 0x32, 0x1f, 0xa6, 0x3f, 0x60, 0x53, 0xfe, 0x78, 0x42, 0xdc, 0xb3, 0x46, 0xe1, 0xfc, 0x29, - 0xff, 0x3f, 0x53, 0x62, 0x53, 0xe6, 0xda, 0xa8, 0x05, 0xe5, 0x2e, 0x19, 0x98, 0x96, 0xde, 0x1d, - 0xd9, 0xbd, 0x87, 0x8d, 0x22, 0x37, 0xd6, 0x92, 0x8c, 0x77, 0x98, 0xea, 0x0e, 0xd3, 0x6c, 0xa7, - 0x30, 0x74, 0x83, 0x11, 0x7a, 0x13, 0x4a, 0xbd, 0x21, 0xe9, 0x3d, 0xd4, 0xe9, 0x69, 0xa3, 0xc4, - 0x7d, 0xac, 0x27, 0xf9, 0x68, 0x32, 0xbd, 0xce, 0x69, 0x3b, 0x85, 0x8b, 0x3d, 0x71, 0xc9, 0xe6, - 0xdf, 0x27, 0x23, 0xf3, 0x84, 0xb8, 0xcc, 0x5e, 0x39, 0x7f, 0xfe, 0xb7, 0x85, 0x26, 0xf7, 0xa0, - 0xf4, 0xfd, 0x01, 0x7a, 0x0b, 0x14, 0x62, 0xf5, 0xe5, 0x34, 0x80, 0xbb, 0xb8, 0x9e, 0xb8, 0x56, - 0xac, 0xbe, 0x3f, 0x89, 0x12, 0x91, 0xd7, 0xe8, 0x35, 0x28, 0xf4, 0xec, 0xf1, 0xd8, 0xa4, 0x8d, - 0x32, 0xb7, 0x5e, 0x4b, 0x9c, 0x00, 0xd7, 0x6a, 0xa7, 0xb0, 0xd4, 0x47, 0xfb, 0x50, 0x1d, 0x99, - 0x1e, 0xd5, 0x3d, 0xcb, 0x70, 0xbc, 0xa1, 0x4d, 0xbd, 0xc6, 0x0a, 0xf7, 0xf0, 0x74, 0x92, 0x87, - 0x3d, 0xd3, 0xa3, 0x47, 0xbe, 0x72, 0x3b, 0x85, 0x2b, 0xa3, 0xa8, 0x80, 0xf9, 0xb3, 0x8f, 0x8f, - 0x89, 0x1b, 0x38, 0x6c, 0x54, 0xce, 0xf7, 0x77, 0xc0, 0xb4, 0x7d, 0x7b, 0xe6, 0xcf, 0x8e, 0x0a, - 0xd0, 0x0f, 0xe1, 0xd2, 0xc8, 0x36, 0xfa, 0x81, 0x3b, 0xbd, 0x37, 0x9c, 0x58, 0x0f, 0x1b, 0x55, - 0xee, 0xf4, 0xf9, 0xc4, 0x97, 0xb4, 0x8d, 0xbe, 0xef, 0xa2, 0xc9, 0x0c, 0xda, 0x29, 0xbc, 0x3a, - 0x9a, 0x16, 0xa2, 0x07, 0x70, 0xd9, 0x70, 0x9c, 0xd1, 0xd9, 0xb4, 0xf7, 0x1a, 0xf7, 0x7e, 0x33, - 0xc9, 0xfb, 0x36, 0xb3, 0x99, 0x76, 0x8f, 0x8c, 0x19, 0x29, 0xea, 0x40, 0xdd, 0x71, 0x89, 0x63, - 0xb8, 0x44, 0x77, 0x5c, 0xdb, 0xb1, 0x3d, 0x63, 0xd4, 0xa8, 0x73, 0xdf, 0xcf, 0x26, 0xf9, 0x3e, - 0x14, 0xfa, 0x87, 0x52, 0xbd, 0x9d, 0xc2, 0x35, 0x27, 0x2e, 0x12, 0x5e, 0xed, 0x1e, 0xf1, 0xbc, - 0xd0, 0xeb, 0xea, 0x22, 0xaf, 0x5c, 0x3f, 0xee, 0x35, 0x26, 0xda, 0x29, 0x42, 0xfe, 0xc4, 0x18, - 0x4d, 0x88, 0xf6, 0x2c, 0x94, 0x23, 0x69, 0x09, 0x35, 0xa0, 0x38, 0x26, 0x9e, 0x67, 0x0c, 0x08, - 0xcf, 0x62, 0x0a, 0xf6, 0x87, 0x5a, 0x15, 0x56, 0xa2, 0xa9, 0x48, 0x1b, 0x07, 0x86, 0x2c, 0xc9, - 0x30, 0xc3, 0x13, 0xe2, 0x7a, 0x2c, 0xb3, 0x48, 0x43, 0x39, 0x44, 0x37, 0xa0, 0xc2, 0x97, 0xba, - 0xee, 0xdf, 0x67, 0x99, 0x2e, 0x87, 0x57, 0xb8, 0xf0, 0xbe, 0x54, 0x5a, 0x87, 0xb2, 0xb3, 0xe5, - 0x04, 0x2a, 0x59, 0xae, 0x02, 0xce, 0x96, 0x23, 0x15, 0xb4, 0xff, 0x81, 0xfa, 0x74, 0x66, 0x42, - 0x75, 0xc8, 0x3e, 0x24, 0x67, 0xf2, 0x79, 0xec, 0x12, 0x5d, 0x96, 0xd3, 0xe2, 0xcf, 0x50, 0xb0, - 0x9c, 0xe3, 0xef, 0x32, 0x81, 0x71, 0x90, 0x92, 0xd0, 0x6b, 0x90, 0x63, 0x19, 0x5e, 0x26, 0x6b, - 0x75, 0x43, 0xa4, 0xff, 0x0d, 0x3f, 0xfd, 0x6f, 0x74, 0xfc, 0xf4, 0xbf, 0x53, 0xfa, 0xe2, 0xab, - 0xf5, 0xd4, 0x67, 0x7f, 0x5e, 0x4f, 0x63, 0x6e, 0x81, 0x1e, 0x67, 0x19, 0xc4, 0x30, 0x2d, 0xdd, - 0xec, 0xcb, 0xe7, 0x14, 0xf9, 0x78, 0xb7, 0x8f, 0xee, 0x42, 0xbd, 0x67, 0x5b, 0x1e, 0xb1, 0xbc, - 0x89, 0xa7, 0x8b, 0xf2, 0x22, 0x53, 0xf4, 0xec, 0x0e, 0x6f, 0xfa, 0x8a, 0x87, 0x5c, 0x0f, 0xd7, - 0x7a, 0x71, 0x01, 0xba, 0x03, 0x70, 0x62, 0x8c, 0xcc, 0xbe, 0x41, 0x6d, 0xd7, 0x6b, 0xe4, 0xae, - 0x67, 0xe7, 0xba, 0xb9, 0xef, 0xab, 0xdc, 0x73, 0xfa, 0x06, 0x25, 0x3b, 0x39, 0xf6, 0xb6, 0x38, - 0x62, 0x89, 0x9e, 0x81, 0x9a, 0xe1, 0x38, 0xba, 0x47, 0x0d, 0x4a, 0xf4, 0xee, 0x19, 0x25, 0x1e, - 0x4f, 0xdc, 0x2b, 0xb8, 0x62, 0x38, 0xce, 0x11, 0x93, 0xee, 0x30, 0x21, 0x7a, 0x1a, 0xaa, 0x2c, - 0x49, 0x9b, 0xc6, 0x48, 0x1f, 0x12, 0x73, 0x30, 0xa4, 0x3c, 0x41, 0x67, 0x71, 0x45, 0x4a, 0xdb, - 0x5c, 0xa8, 0xf5, 0x83, 0x85, 0xc0, 0x13, 0x34, 0x42, 0x90, 0xeb, 0x1b, 0xd4, 0xe0, 0x81, 0x5c, - 0xc1, 0xfc, 0x9a, 0xc9, 0x1c, 0x83, 0x0e, 0x65, 0x78, 0xf8, 0x35, 0xba, 0x02, 0x05, 0xe9, 0x36, - 0xcb, 0xdd, 0xca, 0x11, 0xfb, 0x66, 0x8e, 0x6b, 0x9f, 0x10, 0x5e, 0x91, 0x4a, 0x58, 0x0c, 0xb4, - 0x9f, 0x64, 0x60, 0x75, 0x26, 0x95, 0x33, 0xbf, 0x43, 0xc3, 0x1b, 0xfa, 0xcf, 0x62, 0xd7, 0xe8, - 0x55, 0xe6, 0xd7, 0xe8, 0x13, 0x57, 0x96, 0xd0, 0x46, 0x34, 0x44, 0xa2, 0x3d, 0x68, 0xf3, 0xfb, - 0x32, 0x34, 0x52, 0x1b, 0x1d, 0x40, 0x7d, 0x64, 0x78, 0x54, 0x17, 0xa9, 0x51, 0x8f, 0x94, 0xd3, - 0xd9, 0x82, 0xb0, 0x67, 0xf8, 0xc9, 0x94, 0x2d, 0x76, 0xe9, 0xa8, 0x3a, 0x8a, 0x49, 0x11, 0x86, - 0xcb, 0xdd, 0xb3, 0x47, 0x86, 0x45, 0x4d, 0x8b, 0xe8, 0x33, 0x5f, 0xee, 0xf1, 0x19, 0xa7, 0xad, - 0x13, 0xb3, 0x4f, 0xac, 0x9e, 0xff, 0xc9, 0x2e, 0x05, 0xc6, 0xc1, 0x27, 0xf5, 0x34, 0x0c, 0xd5, - 0x78, 0x31, 0x42, 0x55, 0xc8, 0xd0, 0x53, 0x19, 0x80, 0x0c, 0x3d, 0x45, 0xff, 0x05, 0x39, 0x36, - 0x49, 0x3e, 0xf9, 0xea, 0x9c, 0x4e, 0x40, 0xda, 0x75, 0xce, 0x1c, 0x82, 0xb9, 0xa6, 0xa6, 0x05, - 0xbb, 0x21, 0x28, 0x50, 0xd3, 0x5e, 0xb5, 0xe7, 0xa1, 0x36, 0x55, 0x81, 0x22, 0xdf, 0x2f, 0x1d, - 0xfd, 0x7e, 0x5a, 0x0d, 0x2a, 0xb1, 0x72, 0xa3, 0x5d, 0x81, 0xcb, 0xf3, 0xaa, 0x87, 0x36, 0x0c, - 0xe4, 0xb1, 0x2a, 0x80, 0x6e, 0x41, 0x29, 0x28, 0x1f, 0x62, 0x37, 0xce, 0xc6, 0xca, 0x57, 0xc6, - 0x81, 0x2a, 0xdb, 0x86, 0x6c, 0x59, 0xf3, 0xf5, 0x90, 0xe1, 0x2f, 0x5e, 0x34, 0x1c, 0xa7, 0x6d, - 0x78, 0x43, 0xed, 0x43, 0x68, 0x24, 0x95, 0x86, 0xa9, 0x69, 0xe4, 0x82, 0x65, 0x78, 0x05, 0x0a, - 0xc7, 0xb6, 0x3b, 0x36, 0x28, 0x77, 0x56, 0xc1, 0x72, 0xc4, 0x96, 0xa7, 0x28, 0x13, 0x59, 0x2e, - 0x16, 0x03, 0x4d, 0x87, 0xc7, 0x13, 0xcb, 0x03, 0x33, 0x31, 0xad, 0x3e, 0x11, 0xf1, 0xac, 0x60, - 0x31, 0x08, 0x1d, 0x89, 0x97, 0x15, 0x03, 0xf6, 0x58, 0x8f, 0xcf, 0x95, 0xfb, 0x57, 0xb0, 0x1c, - 0x69, 0x7f, 0x4d, 0xc3, 0x95, 0xf9, 0x45, 0x02, 0xdd, 0x02, 0x10, 0x09, 0x35, 0xd8, 0x76, 0xe5, - 0xad, 0x2b, 0xb3, 0x8b, 0xfe, 0xb6, 0x41, 0x0d, 0xac, 0x70, 0x4d, 0x76, 0xc9, 0xd2, 0x40, 0x68, - 0xa6, 0x7b, 0xe6, 0x23, 0xb1, 0x66, 0xb2, 0xb8, 0x12, 0xe8, 0x1c, 0x99, 0x8f, 0xe2, 0xe9, 0x2d, - 0x1b, 0x4f, 0x6f, 0x61, 0xec, 0x72, 0xb1, 0x2d, 0xec, 0xe7, 0xd2, 0xfc, 0x45, 0x73, 0xa9, 0xf6, - 0xb3, 0xe8, 0x34, 0x63, 0x25, 0x2a, 0xb2, 0xaf, 0xd3, 0x17, 0xda, 0xd7, 0xf1, 0xf0, 0x64, 0x96, - 0x0c, 0x8f, 0xf6, 0x73, 0x80, 0x12, 0x26, 0x9e, 0xc3, 0x92, 0x30, 0xda, 0x01, 0x85, 0x9c, 0xf6, - 0x88, 0xe8, 0x94, 0xd3, 0x89, 0x9d, 0xa6, 0xd0, 0x6e, 0xf9, 0x9a, 0xac, 0xcd, 0x0b, 0xcc, 0xd0, - 0x2b, 0x12, 0x0d, 0x24, 0x37, 0xf6, 0xd2, 0x3c, 0x0a, 0x07, 0x5e, 0xf5, 0xe1, 0x40, 0x36, 0xb1, - 0xb3, 0x13, 0x56, 0x53, 0x78, 0xe0, 0x15, 0x89, 0x07, 0x72, 0x0b, 0x1e, 0x16, 0x03, 0x04, 0xcd, - 0x18, 0x20, 0xc8, 0x2f, 0x98, 0x66, 0x02, 0x22, 0x68, 0xc6, 0x10, 0x41, 0x61, 0x81, 0x93, 0x04, - 0x48, 0xf0, 0xaa, 0x0f, 0x09, 0x8a, 0x0b, 0xa6, 0x3d, 0x85, 0x09, 0xee, 0xc4, 0x31, 0x81, 0xe8, - 0xe7, 0x6f, 0x24, 0x5a, 0x27, 0x82, 0x82, 0xff, 0x8d, 0x80, 0x02, 0x25, 0xb1, 0x23, 0x17, 0x4e, - 0xe6, 0xa0, 0x82, 0x66, 0x0c, 0x15, 0xc0, 0x82, 0x18, 0x24, 0xc0, 0x82, 0xb7, 0xa3, 0xb0, 0xa0, - 0x9c, 0x88, 0x2c, 0xe4, 0xa2, 0x99, 0x87, 0x0b, 0x5e, 0x0f, 0x70, 0xc1, 0x4a, 0x22, 0xb0, 0x91, - 0x73, 0x98, 0x06, 0x06, 0x07, 0x33, 0xc0, 0x40, 0x34, 0xf2, 0xcf, 0x24, 0xba, 0x58, 0x80, 0x0c, - 0x0e, 0x66, 0x90, 0x41, 0x75, 0x81, 0xc3, 0x05, 0xd0, 0xe0, 0x47, 0xf3, 0xa1, 0x41, 0x72, 0xf3, - 0x2e, 0x5f, 0x73, 0x39, 0x6c, 0xa0, 0x27, 0x60, 0x03, 0xd1, 0xbf, 0xbf, 0x90, 0xe8, 0x7e, 0x69, - 0x70, 0x70, 0x6f, 0x0e, 0x38, 0x10, 0x6d, 0xfc, 0x73, 0x89, 0xce, 0x97, 0x40, 0x07, 0xf7, 0xe6, - 0xa0, 0x03, 0xb4, 0xd0, 0xed, 0xf2, 0xf0, 0xe0, 0x79, 0xd6, 0x85, 0x4d, 0xa5, 0x39, 0x56, 0xc9, - 0x88, 0xeb, 0xda, 0xae, 0xec, 0xbc, 0xc5, 0x40, 0x7b, 0x8e, 0xf5, 0x85, 0x61, 0x4a, 0x3b, 0x07, - 0x4a, 0xf0, 0x8e, 0x21, 0x92, 0xc6, 0xb4, 0x5f, 0xa5, 0x43, 0x5b, 0xde, 0x4a, 0x45, 0x7b, 0x4a, - 0x45, 0xf6, 0x94, 0x11, 0x84, 0x91, 0x89, 0x23, 0x8c, 0x75, 0x28, 0xb3, 0x4e, 0x60, 0x0a, 0x3c, - 0x18, 0x8e, 0x0f, 0x1e, 0xd0, 0x4d, 0x58, 0xe5, 0xad, 0x9e, 0xa8, 0x0b, 0xb1, 0x12, 0x56, 0x63, - 0x37, 0xc4, 0x56, 0x12, 0xb5, 0xec, 0x25, 0xb8, 0x14, 0xd1, 0x0d, 0x3a, 0x0c, 0xd1, 0x31, 0xd7, - 0x03, 0xed, 0x6d, 0xd9, 0x6a, 0xbc, 0x17, 0x06, 0x28, 0x04, 0x26, 0x08, 0x72, 0x3d, 0xbb, 0x4f, - 0x64, 0xfd, 0xe7, 0xd7, 0x0c, 0xac, 0x8c, 0xec, 0x81, 0xac, 0xa8, 0xec, 0x92, 0x69, 0x05, 0x39, - 0x5b, 0x11, 0x29, 0x59, 0xfb, 0x6d, 0x3a, 0xf4, 0x17, 0x62, 0x95, 0x79, 0xb0, 0x22, 0xfd, 0xef, - 0x81, 0x15, 0x99, 0x6f, 0x0d, 0x2b, 0xa2, 0xfd, 0x57, 0x36, 0xde, 0x7f, 0xfd, 0x3d, 0x1d, 0x7e, - 0xe1, 0x00, 0x24, 0x7c, 0xbb, 0x88, 0x84, 0xcd, 0x54, 0x9e, 0x7f, 0x2f, 0xd9, 0x4c, 0x49, 0xe8, - 0x57, 0xe0, 0xcf, 0x8d, 0x43, 0xbf, 0xa2, 0x68, 0xaf, 0xf8, 0x00, 0xbd, 0x06, 0x0a, 0xe7, 0x0f, - 0x75, 0xdb, 0xf1, 0x64, 0x79, 0x78, 0x22, 0x3a, 0x57, 0x41, 0x13, 0x6e, 0x1c, 0x32, 0x9d, 0x03, - 0xc7, 0xc3, 0x25, 0x47, 0x5e, 0x45, 0x7a, 0x1d, 0x25, 0xd6, 0xeb, 0x5c, 0x03, 0x85, 0xbd, 0xbd, - 0xe7, 0x18, 0x3d, 0xc2, 0x53, 0xbd, 0x82, 0x43, 0x81, 0xf6, 0x00, 0xd0, 0x6c, 0xb1, 0x41, 0x6d, - 0x28, 0x90, 0x13, 0x62, 0x51, 0xf6, 0xd5, 0xb2, 0xd3, 0xed, 0x88, 0xc4, 0x02, 0xc4, 0xa2, 0x3b, - 0x0d, 0x16, 0xe4, 0xbf, 0x7d, 0xb5, 0x5e, 0x17, 0xda, 0x2f, 0xda, 0x63, 0x93, 0x92, 0xb1, 0x43, - 0xcf, 0xb0, 0xb4, 0xd7, 0xfe, 0x94, 0x61, 0x8d, 0x79, 0xac, 0x10, 0xcd, 0x8d, 0xad, 0xbf, 0x81, - 0x32, 0x11, 0x50, 0xb6, 0x5c, 0xbc, 0xd7, 0x00, 0x06, 0x86, 0xa7, 0x7f, 0x62, 0x58, 0x94, 0xf4, - 0x65, 0xd0, 0x23, 0x12, 0xa4, 0x42, 0x89, 0x8d, 0x26, 0x1e, 0xe9, 0x4b, 0x7c, 0x18, 0x8c, 0x23, - 0xf3, 0x2c, 0x7e, 0xb7, 0x79, 0xc6, 0xa3, 0x5c, 0x9a, 0x8a, 0x72, 0xa4, 0x69, 0x56, 0xa2, 0x4d, - 0x33, 0x7b, 0x37, 0xc7, 0x35, 0x6d, 0xd7, 0xa4, 0x67, 0xfc, 0xd3, 0x64, 0x71, 0x30, 0x46, 0x37, - 0xa0, 0x32, 0x26, 0x63, 0xc7, 0xb6, 0x47, 0xba, 0x48, 0x5e, 0x65, 0x6e, 0xba, 0x22, 0x85, 0x2d, - 0x9e, 0xc3, 0x7e, 0x9a, 0x09, 0xb7, 0x5f, 0x08, 0x8e, 0xfe, 0xe3, 0x02, 0xac, 0xfd, 0x91, 0x33, - 0x26, 0xf1, 0x56, 0x03, 0x1d, 0xc1, 0x6a, 0xb0, 0xfd, 0xf5, 0x09, 0x4f, 0x0b, 0xfe, 0x82, 0x5e, - 0x36, 0x7f, 0xd4, 0x4f, 0xe2, 0x62, 0x0f, 0x7d, 0x0f, 0xae, 0x4e, 0xa5, 0xb6, 0xc0, 0x75, 0x66, - 0xc9, 0x0c, 0xf7, 0x58, 0x3c, 0xc3, 0xf9, 0x9e, 0xc3, 0x58, 0x65, 0xbf, 0x63, 0xac, 0x9e, 0x85, - 0x1a, 0x03, 0x2b, 0xf6, 0x84, 0xca, 0x22, 0x2b, 0xb8, 0x8a, 0x1c, 0xae, 0x4a, 0xb1, 0xa8, 0x9b, - 0x04, 0x3d, 0x0d, 0xbe, 0x44, 0xb2, 0x0a, 0xfc, 0xf3, 0xe6, 0x70, 0x45, 0x4a, 0x25, 0x40, 0xde, - 0x65, 0xa0, 0x3e, 0xda, 0x88, 0xcd, 0x5d, 0x4d, 0x37, 0xa0, 0xe2, 0x12, 0xca, 0x80, 0x58, 0x8c, - 0x36, 0x59, 0x11, 0x42, 0x49, 0xc6, 0x1c, 0xc2, 0x63, 0x73, 0x1b, 0x32, 0xf4, 0xdf, 0xa0, 0x84, - 0xbd, 0x5c, 0x3a, 0x81, 0x81, 0x08, 0x50, 0x75, 0xa8, 0xab, 0xfd, 0x26, 0x1d, 0xba, 0x8c, 0xe3, - 0xf4, 0x16, 0x14, 0x5c, 0xe2, 0x4d, 0x46, 0x02, 0x39, 0x57, 0xb7, 0x5e, 0x5a, 0xae, 0x95, 0x63, - 0xd2, 0xc9, 0x88, 0x62, 0x69, 0xac, 0x3d, 0x80, 0x82, 0x90, 0xa0, 0x32, 0x14, 0xef, 0xed, 0xdf, - 0xdd, 0x3f, 0x78, 0x7f, 0xbf, 0x9e, 0x42, 0x00, 0x85, 0xed, 0x66, 0xb3, 0x75, 0xd8, 0xa9, 0xa7, - 0x91, 0x02, 0xf9, 0xed, 0x9d, 0x03, 0xdc, 0xa9, 0x67, 0x98, 0x18, 0xb7, 0xde, 0x6d, 0x35, 0x3b, - 0xf5, 0x2c, 0x5a, 0x85, 0x8a, 0xb8, 0xd6, 0xef, 0x1c, 0xe0, 0xf7, 0xb6, 0x3b, 0xf5, 0x5c, 0x44, - 0x74, 0xd4, 0xda, 0xbf, 0xdd, 0xc2, 0xf5, 0xbc, 0xf6, 0x32, 0x83, 0xe6, 0x09, 0xcd, 0x5f, 0x08, - 0xc2, 0xd3, 0x11, 0x10, 0xae, 0xfd, 0x22, 0x03, 0x6a, 0x72, 0x47, 0x87, 0xde, 0x9d, 0x9a, 0xf8, - 0xd6, 0x05, 0xda, 0xc1, 0xa9, 0xd9, 0xb3, 0x25, 0xe2, 0x92, 0x63, 0x42, 0x7b, 0x43, 0xd1, 0x61, - 0x8a, 0x0a, 0x5c, 0xc1, 0x15, 0x29, 0xe5, 0x46, 0x9e, 0x50, 0xfb, 0x88, 0xf4, 0xa8, 0x2e, 0x52, - 0x9b, 0x58, 0xc4, 0x0a, 0x53, 0x63, 0xd2, 0x23, 0x21, 0xd4, 0x3e, 0xbc, 0x50, 0x2c, 0x15, 0xc8, - 0xe3, 0x56, 0x07, 0x7f, 0xbf, 0x9e, 0x45, 0x08, 0xaa, 0xfc, 0x52, 0x3f, 0xda, 0xdf, 0x3e, 0x3c, - 0x6a, 0x1f, 0xb0, 0x58, 0x5e, 0x82, 0x9a, 0x1f, 0x4b, 0x5f, 0x98, 0xd7, 0x0e, 0xe1, 0x6a, 0x42, - 0x3b, 0xfa, 0x2d, 0x79, 0x08, 0xed, 0x97, 0xe9, 0xa8, 0xcb, 0x38, 0xe6, 0x7f, 0x67, 0x2a, 0xd2, - 0x9b, 0xcb, 0x36, 0xb1, 0xd3, 0x61, 0x56, 0xa1, 0x44, 0x24, 0xbd, 0xc6, 0x03, 0xbc, 0x82, 0x83, - 0xb1, 0xf6, 0xd2, 0xe2, 0xa0, 0x85, 0xab, 0x2e, 0xa3, 0xfd, 0x33, 0x0d, 0xb5, 0xa9, 0x94, 0x83, - 0xb6, 0x20, 0x2f, 0x70, 0x5a, 0xd2, 0xaf, 0x3e, 0x9e, 0x31, 0x65, 0x7e, 0x12, 0xaa, 0xe8, 0xcd, - 0xd8, 0x2b, 0xcd, 0xa4, 0x36, 0x11, 0x2c, 0x9f, 0x13, 0x94, 0xa6, 0x81, 0x05, 0x7a, 0x0b, 0x94, - 0x20, 0x77, 0x4a, 0x72, 0xe0, 0xa9, 0x59, 0xf3, 0x20, 0xeb, 0x4a, 0xfb, 0xd0, 0x06, 0xbd, 0x1e, - 0xb6, 0xcf, 0xb9, 0x59, 0x74, 0x28, 0xcd, 0x85, 0x82, 0x34, 0xf6, 0xf5, 0xb5, 0x26, 0x94, 0x23, - 0xf3, 0x41, 0x4f, 0x80, 0x32, 0x36, 0x4e, 0x25, 0x93, 0x2c, 0xb8, 0xc0, 0xd2, 0xd8, 0x38, 0x15, - 0x24, 0xf2, 0x55, 0x28, 0xb2, 0x9b, 0x03, 0xc3, 0x93, 0xec, 0x52, 0x61, 0x6c, 0x9c, 0xbe, 0x63, - 0x78, 0xda, 0x07, 0x50, 0x8d, 0xb3, 0xa8, 0x6c, 0x2f, 0xba, 0xf6, 0xc4, 0xea, 0x73, 0x1f, 0x79, - 0x2c, 0x06, 0xe8, 0x16, 0xe4, 0x4f, 0x6c, 0x91, 0xfe, 0xe7, 0x27, 0xad, 0xfb, 0x36, 0x25, 0x11, - 0x16, 0x56, 0x68, 0x6b, 0x8f, 0x20, 0xcf, 0xd3, 0x39, 0x4b, 0xa5, 0x9c, 0x0f, 0x95, 0xd0, 0x81, - 0x5d, 0xa3, 0x0f, 0x00, 0x0c, 0x4a, 0x5d, 0xb3, 0x3b, 0x09, 0x1d, 0xaf, 0xcf, 0x2f, 0x07, 0xdb, - 0xbe, 0xde, 0xce, 0x35, 0x59, 0x17, 0x2e, 0x87, 0xa6, 0x91, 0xda, 0x10, 0x71, 0xa8, 0xed, 0x43, - 0x35, 0x6e, 0x1b, 0xfd, 0x33, 0xb1, 0x32, 0xe7, 0xcf, 0x44, 0xd0, 0x9e, 0x06, 0xcd, 0x6d, 0x56, - 0x70, 0xdf, 0x7c, 0xa0, 0x7d, 0x9a, 0x86, 0x52, 0xe7, 0x54, 0xae, 0xd1, 0x04, 0xda, 0x35, 0x34, - 0xcd, 0x44, 0x49, 0x46, 0xc1, 0xe3, 0x66, 0x03, 0x76, 0xf8, 0xed, 0x60, 0x43, 0xe5, 0x96, 0x65, - 0x25, 0x7c, 0x3a, 0x4d, 0xa6, 0xeb, 0x37, 0x40, 0x09, 0x56, 0x15, 0xc3, 0x60, 0x46, 0xbf, 0xef, - 0x12, 0xcf, 0x93, 0x73, 0xf3, 0x87, 0x9c, 0xc5, 0xb7, 0x3f, 0x91, 0x34, 0x66, 0x16, 0x8b, 0x81, - 0xd6, 0x87, 0xda, 0x54, 0x23, 0x80, 0xde, 0x80, 0xa2, 0x33, 0xe9, 0xea, 0x7e, 0x78, 0xa6, 0x36, - 0x8f, 0xdf, 0x8f, 0x4f, 0xba, 0x23, 0xb3, 0x77, 0x97, 0x9c, 0xf9, 0x2f, 0xe3, 0x4c, 0xba, 0x77, - 0x45, 0x14, 0xc5, 0x53, 0x32, 0xd1, 0xa7, 0x9c, 0x40, 0xc9, 0x5f, 0x14, 0xe8, 0xff, 0xa2, 0xfb, - 0xc4, 0xff, 0xb7, 0x93, 0xd8, 0x9c, 0x48, 0xf7, 0x91, 0x6d, 0x72, 0x13, 0x56, 0x3d, 0x73, 0x60, - 0x91, 0xbe, 0x1e, 0xa2, 0x40, 0xfe, 0xb4, 0x12, 0xae, 0x89, 0x1b, 0x7b, 0x3e, 0x04, 0xd4, 0xfe, - 0x91, 0x86, 0x92, 0xbf, 0x61, 0xd1, 0xcb, 0x91, 0x75, 0x57, 0x9d, 0xc3, 0xc0, 0xf9, 0x8a, 0x21, - 0x11, 0x1f, 0x7f, 0xd7, 0xcc, 0xc5, 0xdf, 0x35, 0xe9, 0x8f, 0x8a, 0x4f, 0xc7, 0xe6, 0x2e, 0xfc, - 0x6b, 0xeb, 0x45, 0x40, 0xd4, 0xa6, 0xc6, 0x48, 0x3f, 0xb1, 0xa9, 0x69, 0x0d, 0x74, 0x11, 0x6c, - 0xd1, 0xa3, 0xd6, 0xf9, 0x9d, 0xfb, 0xfc, 0xc6, 0x21, 0x8f, 0xfb, 0x8f, 0xd3, 0x50, 0x0a, 0xba, - 0x83, 0x8b, 0xf2, 0xea, 0x57, 0xa0, 0x20, 0x0b, 0xa0, 0x20, 0xd6, 0xe5, 0x28, 0xf8, 0xc5, 0x93, - 0x8b, 0xfc, 0xe2, 0x51, 0xa1, 0x34, 0x26, 0xd4, 0xe0, 0x75, 0x46, 0x00, 0xf1, 0x60, 0x7c, 0xf3, - 0x75, 0x28, 0x47, 0x7e, 0x71, 0xb0, 0x9d, 0xb7, 0xdf, 0x7a, 0xbf, 0x9e, 0x52, 0x8b, 0x9f, 0x7e, - 0x7e, 0x3d, 0xbb, 0x4f, 0x3e, 0x61, 0x6b, 0x16, 0xb7, 0x9a, 0xed, 0x56, 0xf3, 0x6e, 0x3d, 0xad, - 0x96, 0x3f, 0xfd, 0xfc, 0x7a, 0x11, 0x13, 0x4e, 0xdc, 0xdd, 0x6c, 0xc3, 0x4a, 0xf4, 0xab, 0xc4, - 0xcb, 0x01, 0x82, 0xea, 0xed, 0x7b, 0x87, 0x7b, 0xbb, 0xcd, 0xed, 0x4e, 0x4b, 0xbf, 0x7f, 0xd0, - 0x69, 0xd5, 0xd3, 0xe8, 0x2a, 0x5c, 0xda, 0xdb, 0x7d, 0xa7, 0xdd, 0xd1, 0x9b, 0x7b, 0xbb, 0xad, - 0xfd, 0x8e, 0xbe, 0xdd, 0xe9, 0x6c, 0x37, 0xef, 0xd6, 0x33, 0x5b, 0xbf, 0x2f, 0x43, 0x6d, 0x7b, - 0xa7, 0xb9, 0xcb, 0xea, 0xbf, 0xd9, 0x33, 0x24, 0x31, 0x9a, 0xe3, 0x3c, 0xc8, 0xb9, 0xe7, 0x40, - 0xd4, 0xf3, 0x79, 0x61, 0x74, 0x07, 0xf2, 0x9c, 0x22, 0x41, 0xe7, 0x1f, 0x0c, 0x51, 0x17, 0x10, - 0xc5, 0xec, 0x65, 0xf8, 0xf6, 0x38, 0xf7, 0xa4, 0x88, 0x7a, 0x3e, 0x6f, 0x8c, 0x30, 0x28, 0x21, - 0xc7, 0xb1, 0xf8, 0xe4, 0x88, 0xba, 0x04, 0x97, 0xcc, 0x7c, 0x86, 0x40, 0x6b, 0xf1, 0x49, 0x0a, - 0x75, 0x89, 0x04, 0x86, 0xf6, 0xa0, 0xe8, 0x63, 0xe3, 0x45, 0x67, 0x3b, 0xd4, 0x85, 0x3c, 0x2f, - 0xfb, 0x04, 0x82, 0xc3, 0x38, 0xff, 0xa0, 0x8a, 0xba, 0x80, 0xb4, 0x46, 0xbb, 0x50, 0x90, 0xdd, - 0xfe, 0x82, 0xf3, 0x1a, 0xea, 0x22, 0xde, 0x96, 0x05, 0x2d, 0x24, 0x87, 0x16, 0x1f, 0xbf, 0x51, - 0x97, 0xe0, 0xe3, 0xd1, 0x3d, 0x80, 0x08, 0x63, 0xb1, 0xc4, 0xb9, 0x1a, 0x75, 0x19, 0x9e, 0x1d, - 0x1d, 0x40, 0x29, 0x00, 0x90, 0x0b, 0x4f, 0xb9, 0xa8, 0x8b, 0x09, 0x6f, 0xf4, 0x00, 0x2a, 0x71, - 0xa4, 0xb3, 0xdc, 0xd9, 0x15, 0x75, 0x49, 0x26, 0x9b, 0xf9, 0x8f, 0xc3, 0x9e, 0xe5, 0xce, 0xb2, - 0xa8, 0x4b, 0x12, 0xdb, 0xe8, 0x23, 0x58, 0x9d, 0x85, 0x25, 0xcb, 0x1f, 0x6d, 0x51, 0x2f, 0x40, - 0x75, 0xa3, 0x31, 0xa0, 0x39, 0x70, 0xe6, 0x02, 0x27, 0x5d, 0xd4, 0x8b, 0x30, 0xdf, 0xa8, 0x0f, - 0xb5, 0x69, 0x8c, 0xb0, 0xec, 0xc9, 0x17, 0x75, 0x69, 0x16, 0x5c, 0x3c, 0x25, 0x0e, 0x1b, 0x96, - 0x3d, 0x09, 0xa3, 0x2e, 0x4d, 0x8a, 0xef, 0xb4, 0xbe, 0xf8, 0x7a, 0x2d, 0xfd, 0xe5, 0xd7, 0x6b, - 0xe9, 0xbf, 0x7c, 0xbd, 0x96, 0xfe, 0xec, 0x9b, 0xb5, 0xd4, 0x97, 0xdf, 0xac, 0xa5, 0xfe, 0xf0, - 0xcd, 0x5a, 0xea, 0x07, 0x2f, 0x0c, 0x4c, 0x3a, 0x9c, 0x74, 0x37, 0x7a, 0xf6, 0x78, 0x33, 0x7a, - 0xa4, 0x70, 0xde, 0x31, 0xc7, 0x6e, 0x81, 0x17, 0xdd, 0x57, 0xfe, 0x15, 0x00, 0x00, 0xff, 0xff, - 0xad, 0xcb, 0xd0, 0x34, 0x06, 0x29, 0x00, 0x00, + // 3070 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcd, 0x73, 0xdb, 0xc6, + 0x15, 0xe7, 0x37, 0x89, 0x47, 0xf1, 0x43, 0x6b, 0xc7, 0xa6, 0x11, 0x47, 0x72, 0xe0, 0xc9, 0x97, + 0x93, 0x48, 0x8d, 0x32, 0x4e, 0x93, 0x26, 0x6d, 0x22, 0xd1, 0x74, 0xa8, 0x58, 0x91, 0x54, 0x88, + 0x76, 0xfa, 0x15, 0x23, 0x10, 0xb1, 0x22, 0x11, 0x93, 0x00, 0x02, 0x2c, 0x15, 0xc9, 0xc7, 0x4e, + 0x3b, 0x9d, 0xc9, 0x29, 0x33, 0xbd, 0xe4, 0x92, 0x63, 0x8f, 0xbd, 0xf7, 0xd2, 0x5e, 0x7a, 0xc9, + 0x4c, 0x0f, 0xcd, 0xb1, 0x87, 0x4e, 0xda, 0x49, 0x7a, 0xea, 0x3f, 0xd0, 0x53, 0xa7, 0x9d, 0xfd, + 0xc0, 0x17, 0x49, 0x88, 0x90, 0xd3, 0x5b, 0x6f, 0xd8, 0x87, 0xf7, 0x1e, 0xb0, 0x0f, 0xbb, 0xef, + 0xfd, 0x7e, 0x0f, 0x0b, 0x8f, 0x13, 0x6c, 0x19, 0xd8, 0x1d, 0x9b, 0x16, 0x59, 0xd7, 0x0f, 0xfb, + 0xe6, 0x3a, 0x39, 0x75, 0xb0, 0xb7, 0xe6, 0xb8, 0x36, 0xb1, 0x51, 0x23, 0xbc, 0xb9, 0x46, 0x6f, + 0xca, 0x4f, 0x44, 0xb4, 0xfb, 0xee, 0xa9, 0x43, 0xec, 0x75, 0xc7, 0xb5, 0xed, 0x23, 0xae, 0x2f, + 0x5f, 0x8d, 0xdc, 0x66, 0x7e, 0xa2, 0xde, 0x62, 0x77, 0x85, 0xf1, 0x03, 0x7c, 0xea, 0xdf, 0x7d, + 0x62, 0xc6, 0xd6, 0xd1, 0x5d, 0x7d, 0xec, 0xdf, 0x5e, 0x1d, 0xd8, 0xf6, 0x60, 0x84, 0xd7, 0xd9, + 0xe8, 0x70, 0x72, 0xb4, 0x4e, 0xcc, 0x31, 0xf6, 0x88, 0x3e, 0x76, 0x84, 0xc2, 0xc5, 0x81, 0x3d, + 0xb0, 0xd9, 0xe5, 0x3a, 0xbd, 0x12, 0xd2, 0x95, 0x69, 0x33, 0x63, 0xe2, 0xea, 0xc4, 0xb4, 0x2d, + 0x7e, 0x5f, 0xf9, 0xbd, 0x04, 0x65, 0x15, 0x7f, 0x34, 0xc1, 0x1e, 0x41, 0x1b, 0x50, 0xc0, 0xfd, + 0xa1, 0xdd, 0xca, 0x5e, 0xcb, 0x3e, 0x5b, 0xdd, 0xb8, 0xba, 0x36, 0x35, 0xf9, 0x35, 0xa1, 0xd7, + 0xe9, 0x0f, 0xed, 0x6e, 0x46, 0x65, 0xba, 0xe8, 0x26, 0x14, 0x8f, 0x46, 0x13, 0x6f, 0xd8, 0xca, + 0x31, 0xa3, 0x27, 0x92, 0x8c, 0x6e, 0x53, 0xa5, 0x6e, 0x46, 0xe5, 0xda, 0xf4, 0x51, 0xa6, 0x75, + 0x64, 0xb7, 0xf2, 0x67, 0x3f, 0x6a, 0xdb, 0x3a, 0x62, 0x8f, 0xa2, 0xba, 0x68, 0x0b, 0xc0, 0xc3, + 0x44, 0xb3, 0x1d, 0xfa, 0xfa, 0xad, 0x02, 0xb3, 0x7c, 0x32, 0xc9, 0xf2, 0x00, 0x93, 0x3d, 0xa6, + 0xd8, 0xcd, 0xa8, 0x92, 0xe7, 0x0f, 0xa8, 0x0f, 0xd3, 0x32, 0x89, 0xd6, 0x1f, 0xea, 0xa6, 0xd5, + 0x2a, 0x9e, 0xed, 0x63, 0xdb, 0x32, 0x49, 0x9b, 0x2a, 0x52, 0x1f, 0xa6, 0x3f, 0xa0, 0x53, 0xfe, + 0x68, 0x82, 0xdd, 0xd3, 0x56, 0xe9, 0xec, 0x29, 0xff, 0x90, 0x2a, 0xd1, 0x29, 0x33, 0x6d, 0xd4, + 0x81, 0xea, 0x21, 0x1e, 0x98, 0x96, 0x76, 0x38, 0xb2, 0xfb, 0x0f, 0x5a, 0x65, 0x66, 0xac, 0x24, + 0x19, 0x6f, 0x51, 0xd5, 0x2d, 0xaa, 0xd9, 0xcd, 0xa8, 0x70, 0x18, 0x8c, 0xd0, 0x1b, 0x50, 0xe9, + 0x0f, 0x71, 0xff, 0x81, 0x46, 0x4e, 0x5a, 0x15, 0xe6, 0x63, 0x35, 0xc9, 0x47, 0x9b, 0xea, 0xf5, + 0x4e, 0xba, 0x19, 0xb5, 0xdc, 0xe7, 0x97, 0x74, 0xfe, 0x06, 0x1e, 0x99, 0xc7, 0xd8, 0xa5, 0xf6, + 0xd2, 0xd9, 0xf3, 0xbf, 0xc5, 0x35, 0x99, 0x07, 0xc9, 0xf0, 0x07, 0xe8, 0x4d, 0x90, 0xb0, 0x65, + 0x88, 0x69, 0x00, 0x73, 0x71, 0x2d, 0x71, 0xad, 0x58, 0x86, 0x3f, 0x89, 0x0a, 0x16, 0xd7, 0xe8, + 0x55, 0x28, 0xf5, 0xed, 0xf1, 0xd8, 0x24, 0xad, 0x2a, 0xb3, 0x5e, 0x49, 0x9c, 0x00, 0xd3, 0xea, + 0x66, 0x54, 0xa1, 0x8f, 0x76, 0xa1, 0x3e, 0x32, 0x3d, 0xa2, 0x79, 0x96, 0xee, 0x78, 0x43, 0x9b, + 0x78, 0xad, 0x25, 0xe6, 0xe1, 0xa9, 0x24, 0x0f, 0x3b, 0xa6, 0x47, 0x0e, 0x7c, 0xe5, 0x6e, 0x46, + 0xad, 0x8d, 0xa2, 0x02, 0xea, 0xcf, 0x3e, 0x3a, 0xc2, 0x6e, 0xe0, 0xb0, 0x55, 0x3b, 0xdb, 0xdf, + 0x1e, 0xd5, 0xf6, 0xed, 0xa9, 0x3f, 0x3b, 0x2a, 0x40, 0x3f, 0x85, 0x0b, 0x23, 0x5b, 0x37, 0x02, + 0x77, 0x5a, 0x7f, 0x38, 0xb1, 0x1e, 0xb4, 0xea, 0xcc, 0xe9, 0x73, 0x89, 0x2f, 0x69, 0xeb, 0x86, + 0xef, 0xa2, 0x4d, 0x0d, 0xba, 0x19, 0x75, 0x79, 0x34, 0x2d, 0x44, 0xf7, 0xe1, 0xa2, 0xee, 0x38, + 0xa3, 0xd3, 0x69, 0xef, 0x0d, 0xe6, 0xfd, 0x46, 0x92, 0xf7, 0x4d, 0x6a, 0x33, 0xed, 0x1e, 0xe9, + 0x33, 0x52, 0xd4, 0x83, 0xa6, 0xe3, 0x62, 0x47, 0x77, 0xb1, 0xe6, 0xb8, 0xb6, 0x63, 0x7b, 0xfa, + 0xa8, 0xd5, 0x64, 0xbe, 0x9f, 0x49, 0xf2, 0xbd, 0xcf, 0xf5, 0xf7, 0x85, 0x7a, 0x37, 0xa3, 0x36, + 0x9c, 0xb8, 0x88, 0x7b, 0xb5, 0xfb, 0xd8, 0xf3, 0x42, 0xaf, 0xcb, 0x8b, 0xbc, 0x32, 0xfd, 0xb8, + 0xd7, 0x98, 0x68, 0xab, 0x0c, 0xc5, 0x63, 0x7d, 0x34, 0xc1, 0xca, 0x33, 0x50, 0x8d, 0xa4, 0x25, + 0xd4, 0x82, 0xf2, 0x18, 0x7b, 0x9e, 0x3e, 0xc0, 0x2c, 0x8b, 0x49, 0xaa, 0x3f, 0x54, 0xea, 0xb0, + 0x14, 0x4d, 0x45, 0xca, 0x38, 0x30, 0xa4, 0x49, 0x86, 0x1a, 0x1e, 0x63, 0xd7, 0xa3, 0x99, 0x45, + 0x18, 0x8a, 0x21, 0xba, 0x0e, 0x35, 0xb6, 0xd4, 0x35, 0xff, 0x3e, 0xcd, 0x74, 0x05, 0x75, 0x89, + 0x09, 0xef, 0x09, 0xa5, 0x55, 0xa8, 0x3a, 0x1b, 0x4e, 0xa0, 0x92, 0x67, 0x2a, 0xe0, 0x6c, 0x38, + 0x42, 0x41, 0xf9, 0x1e, 0x34, 0xa7, 0x33, 0x13, 0x6a, 0x42, 0xfe, 0x01, 0x3e, 0x15, 0xcf, 0xa3, + 0x97, 0xe8, 0xa2, 0x98, 0x16, 0x7b, 0x86, 0xa4, 0x8a, 0x39, 0xfe, 0x29, 0x17, 0x18, 0x07, 0x29, + 0x09, 0xbd, 0x0a, 0x05, 0x5a, 0x01, 0x44, 0xb2, 0x96, 0xd7, 0x78, 0x9e, 0x5f, 0xf3, 0xf3, 0xfc, + 0x5a, 0xcf, 0x2f, 0x0f, 0x5b, 0x95, 0x2f, 0xbe, 0x5a, 0xcd, 0x7c, 0xfa, 0xb7, 0xd5, 0xac, 0xca, + 0x2c, 0xd0, 0x15, 0x9a, 0x41, 0x74, 0xd3, 0xd2, 0x4c, 0x43, 0x3c, 0xa7, 0xcc, 0xc6, 0xdb, 0x06, + 0xba, 0x03, 0xcd, 0xbe, 0x6d, 0x79, 0xd8, 0xf2, 0x26, 0x9e, 0xc6, 0xcb, 0x8f, 0x48, 0xd1, 0xb3, + 0x3b, 0xbc, 0xed, 0x2b, 0xee, 0x33, 0x3d, 0xb5, 0xd1, 0x8f, 0x0b, 0xd0, 0x6d, 0x80, 0x63, 0x7d, + 0x64, 0x1a, 0x3a, 0xb1, 0x5d, 0xaf, 0x55, 0xb8, 0x96, 0x9f, 0xeb, 0xe6, 0x9e, 0xaf, 0x72, 0xd7, + 0x31, 0x74, 0x82, 0xb7, 0x0a, 0xf4, 0x6d, 0xd5, 0x88, 0x25, 0x7a, 0x1a, 0x1a, 0xba, 0xe3, 0x68, + 0x1e, 0xd1, 0x09, 0xd6, 0x0e, 0x4f, 0x09, 0xf6, 0x58, 0xe2, 0x5e, 0x52, 0x6b, 0xba, 0xe3, 0x1c, + 0x50, 0xe9, 0x16, 0x15, 0xa2, 0xa7, 0xa0, 0x4e, 0x93, 0xb4, 0xa9, 0x8f, 0xb4, 0x21, 0x36, 0x07, + 0x43, 0xc2, 0x12, 0x74, 0x5e, 0xad, 0x09, 0x69, 0x97, 0x09, 0x15, 0x23, 0x58, 0x08, 0x2c, 0x41, + 0x23, 0x04, 0x05, 0x43, 0x27, 0x3a, 0x0b, 0xe4, 0x92, 0xca, 0xae, 0xa9, 0xcc, 0xd1, 0xc9, 0x50, + 0x84, 0x87, 0x5d, 0xa3, 0x4b, 0x50, 0x12, 0x6e, 0xf3, 0xcc, 0xad, 0x18, 0xd1, 0x6f, 0xe6, 0xb8, + 0xf6, 0x31, 0x66, 0x15, 0xa9, 0xa2, 0xf2, 0x81, 0xf2, 0x8b, 0x1c, 0x2c, 0xcf, 0xa4, 0x72, 0xea, + 0x77, 0xa8, 0x7b, 0x43, 0xff, 0x59, 0xf4, 0x1a, 0xbd, 0x42, 0xfd, 0xea, 0x06, 0x76, 0x45, 0x09, + 0x6d, 0x45, 0x43, 0xc4, 0xe1, 0x43, 0x97, 0xdd, 0x17, 0xa1, 0x11, 0xda, 0x68, 0x0f, 0x9a, 0x23, + 0xdd, 0x23, 0x1a, 0x4f, 0x8d, 0x5a, 0xa4, 0x9c, 0xce, 0x16, 0x84, 0x1d, 0xdd, 0x4f, 0xa6, 0x74, + 0xb1, 0x0b, 0x47, 0xf5, 0x51, 0x4c, 0x8a, 0x54, 0xb8, 0x78, 0x78, 0xfa, 0x50, 0xb7, 0x88, 0x69, + 0x61, 0x6d, 0xe6, 0xcb, 0x5d, 0x99, 0x71, 0xda, 0x39, 0x36, 0x0d, 0x6c, 0xf5, 0xfd, 0x4f, 0x76, + 0x21, 0x30, 0x0e, 0x3e, 0xa9, 0xa7, 0xa8, 0x50, 0x8f, 0x17, 0x23, 0x54, 0x87, 0x1c, 0x39, 0x11, + 0x01, 0xc8, 0x91, 0x13, 0xf4, 0x1d, 0x28, 0xd0, 0x49, 0xb2, 0xc9, 0xd7, 0xe7, 0x20, 0x01, 0x61, + 0xd7, 0x3b, 0x75, 0xb0, 0xca, 0x34, 0x15, 0x25, 0xd8, 0x0d, 0x41, 0x81, 0x9a, 0xf6, 0xaa, 0x3c, + 0x07, 0x8d, 0xa9, 0x0a, 0x14, 0xf9, 0x7e, 0xd9, 0xe8, 0xf7, 0x53, 0x1a, 0x50, 0x8b, 0x95, 0x1b, + 0xe5, 0x12, 0x5c, 0x9c, 0x57, 0x3d, 0x94, 0x61, 0x20, 0x8f, 0x55, 0x01, 0x74, 0x13, 0x2a, 0x41, + 0xf9, 0xe0, 0xbb, 0x71, 0x36, 0x56, 0xbe, 0xb2, 0x1a, 0xa8, 0xd2, 0x6d, 0x48, 0x97, 0x35, 0x5b, + 0x0f, 0x39, 0xf6, 0xe2, 0x65, 0xdd, 0x71, 0xba, 0xba, 0x37, 0x54, 0x3e, 0x80, 0x56, 0x52, 0x69, + 0x98, 0x9a, 0x46, 0x21, 0x58, 0x86, 0x97, 0xa0, 0x74, 0x64, 0xbb, 0x63, 0x9d, 0x30, 0x67, 0x35, + 0x55, 0x8c, 0xe8, 0xf2, 0xe4, 0x65, 0x22, 0xcf, 0xc4, 0x7c, 0xa0, 0x68, 0x70, 0x25, 0xb1, 0x3c, + 0x50, 0x13, 0xd3, 0x32, 0x30, 0x8f, 0x67, 0x4d, 0xe5, 0x83, 0xd0, 0x11, 0x7f, 0x59, 0x3e, 0xa0, + 0x8f, 0xf5, 0xd8, 0x5c, 0x99, 0x7f, 0x49, 0x15, 0x23, 0xe5, 0x1f, 0x59, 0xb8, 0x34, 0xbf, 0x48, + 0xa0, 0x9b, 0x00, 0x3c, 0xa1, 0x06, 0xdb, 0xae, 0xba, 0x71, 0x69, 0x76, 0xd1, 0xdf, 0xd2, 0x89, + 0xae, 0x4a, 0x4c, 0x93, 0x5e, 0xd2, 0x34, 0x10, 0x9a, 0x69, 0x9e, 0xf9, 0x90, 0xaf, 0x99, 0xbc, + 0x5a, 0x0b, 0x74, 0x0e, 0xcc, 0x87, 0xf1, 0xf4, 0x96, 0x8f, 0xa7, 0xb7, 0x30, 0x76, 0x85, 0xd8, + 0x16, 0xf6, 0x73, 0x69, 0xf1, 0xbc, 0xb9, 0x54, 0xf9, 0x55, 0x74, 0x9a, 0xb1, 0x12, 0x15, 0xd9, + 0xd7, 0xd9, 0x73, 0xed, 0xeb, 0x78, 0x78, 0x72, 0x29, 0xc3, 0xa3, 0xfc, 0x1a, 0xa0, 0xa2, 0x62, + 0xcf, 0xa1, 0x49, 0x18, 0x6d, 0x81, 0x84, 0x4f, 0xfa, 0x98, 0x23, 0xe5, 0x6c, 0x22, 0xd2, 0xe4, + 0xda, 0x1d, 0x5f, 0x93, 0xc2, 0xbc, 0xc0, 0x0c, 0xbd, 0x2c, 0xd8, 0x40, 0x32, 0xb0, 0x17, 0xe6, + 0x51, 0x3a, 0xf0, 0x8a, 0x4f, 0x07, 0xf2, 0x89, 0xc8, 0x8e, 0x5b, 0x4d, 0xf1, 0x81, 0x97, 0x05, + 0x1f, 0x28, 0x2c, 0x78, 0x58, 0x8c, 0x10, 0xb4, 0x63, 0x84, 0xa0, 0xb8, 0x60, 0x9a, 0x09, 0x8c, + 0xa0, 0x1d, 0x63, 0x04, 0xa5, 0x05, 0x4e, 0x12, 0x28, 0xc1, 0x2b, 0x3e, 0x25, 0x28, 0x2f, 0x98, + 0xf6, 0x14, 0x27, 0xb8, 0x1d, 0xe7, 0x04, 0x1c, 0xcf, 0x5f, 0x4f, 0xb4, 0x4e, 0x24, 0x05, 0xdf, + 0x8f, 0x90, 0x02, 0x29, 0x11, 0x91, 0x73, 0x27, 0x73, 0x58, 0x41, 0x3b, 0xc6, 0x0a, 0x60, 0x41, + 0x0c, 0x12, 0x68, 0xc1, 0x5b, 0x51, 0x5a, 0x50, 0x4d, 0x64, 0x16, 0x62, 0xd1, 0xcc, 0xe3, 0x05, + 0xaf, 0x05, 0xbc, 0x60, 0x29, 0x91, 0xd8, 0x88, 0x39, 0x4c, 0x13, 0x83, 0xbd, 0x19, 0x62, 0xc0, + 0x81, 0xfc, 0xd3, 0x89, 0x2e, 0x16, 0x30, 0x83, 0xbd, 0x19, 0x66, 0x50, 0x5f, 0xe0, 0x70, 0x01, + 0x35, 0xf8, 0xd9, 0x7c, 0x6a, 0x90, 0x0c, 0xde, 0xc5, 0x6b, 0xa6, 0xe3, 0x06, 0x5a, 0x02, 0x37, + 0xe0, 0xf8, 0xfd, 0xf9, 0x44, 0xf7, 0xa9, 0xc9, 0xc1, 0xdd, 0x39, 0xe4, 0x80, 0xc3, 0xf8, 0x67, + 0x13, 0x9d, 0xa7, 0x60, 0x07, 0x77, 0xe7, 0xb0, 0x03, 0xb4, 0xd0, 0x6d, 0x7a, 0x7a, 0xf0, 0x1c, + 0x45, 0x61, 0x53, 0x69, 0x8e, 0x56, 0x32, 0xec, 0xba, 0xb6, 0x2b, 0x90, 0x37, 0x1f, 0x28, 0xcf, + 0x52, 0x5c, 0x18, 0xa6, 0xb4, 0x33, 0xa8, 0x04, 0x43, 0x0c, 0x91, 0x34, 0xa6, 0xfc, 0x2e, 0x1b, + 0xda, 0x32, 0x28, 0x15, 0xc5, 0x94, 0x92, 0xc0, 0x94, 0x11, 0x86, 0x91, 0x8b, 0x33, 0x8c, 0x55, + 0xa8, 0x52, 0x24, 0x30, 0x45, 0x1e, 0x74, 0xc7, 0x27, 0x0f, 0xe8, 0x06, 0x2c, 0x33, 0xa8, 0xc7, + 0xeb, 0x42, 0xac, 0x84, 0x35, 0xe8, 0x0d, 0xbe, 0x95, 0x78, 0x2d, 0x7b, 0x11, 0x2e, 0x44, 0x74, + 0x03, 0x84, 0xc1, 0x11, 0x73, 0x33, 0xd0, 0xde, 0x14, 0x50, 0xe3, 0xdd, 0x30, 0x40, 0x21, 0x31, + 0x41, 0x50, 0xe8, 0xdb, 0x06, 0x16, 0xf5, 0x9f, 0x5d, 0x53, 0xb2, 0x32, 0xb2, 0x07, 0xa2, 0xa2, + 0xd2, 0x4b, 0xaa, 0x15, 0xe4, 0x6c, 0x89, 0xa7, 0x64, 0xe5, 0x8f, 0xd9, 0xd0, 0x5f, 0xc8, 0x55, + 0xe6, 0xd1, 0x8a, 0xec, 0xff, 0x86, 0x56, 0xe4, 0x1e, 0x99, 0x56, 0x44, 0xf1, 0x57, 0x3e, 0x8e, + 0xbf, 0xfe, 0x95, 0x0d, 0xbf, 0x70, 0x40, 0x12, 0x1e, 0x2d, 0x22, 0x21, 0x98, 0x2a, 0xb2, 0xef, + 0x25, 0xc0, 0x94, 0xa0, 0x7e, 0x25, 0xf6, 0xdc, 0x38, 0xf5, 0x2b, 0x73, 0x78, 0xc5, 0x06, 0xe8, + 0x55, 0x90, 0x58, 0x7f, 0x51, 0xb3, 0x1d, 0x4f, 0x94, 0x87, 0xc7, 0xa3, 0x73, 0xe5, 0x6d, 0xc4, + 0xb5, 0x7d, 0xaa, 0xb3, 0xe7, 0x78, 0x6a, 0xc5, 0x11, 0x57, 0x11, 0xac, 0x23, 0xc5, 0xb0, 0xce, + 0x55, 0x90, 0xe8, 0xdb, 0x7b, 0x8e, 0xde, 0xc7, 0x2c, 0xd5, 0x4b, 0x6a, 0x28, 0x50, 0xee, 0x03, + 0x9a, 0x2d, 0x36, 0xa8, 0x0b, 0x25, 0x7c, 0x8c, 0x2d, 0x42, 0xbf, 0x5a, 0x7e, 0x1a, 0x8e, 0x08, + 0x2e, 0x80, 0x2d, 0xb2, 0xd5, 0xa2, 0x41, 0xfe, 0xe7, 0x57, 0xab, 0x4d, 0xae, 0xfd, 0x82, 0x3d, + 0x36, 0x09, 0x1e, 0x3b, 0xe4, 0x54, 0x15, 0xf6, 0xca, 0x5f, 0x73, 0x14, 0x98, 0xc7, 0x0a, 0xd1, + 0xdc, 0xd8, 0xfa, 0x1b, 0x28, 0x17, 0x21, 0x65, 0xe9, 0xe2, 0xbd, 0x02, 0x30, 0xd0, 0x3d, 0xed, + 0x63, 0xdd, 0x22, 0xd8, 0x10, 0x41, 0x8f, 0x48, 0x90, 0x0c, 0x15, 0x3a, 0x9a, 0x78, 0xd8, 0x10, + 0xfc, 0x30, 0x18, 0x47, 0xe6, 0x59, 0xfe, 0x76, 0xf3, 0x8c, 0x47, 0xb9, 0x32, 0x15, 0xe5, 0x08, + 0x68, 0x96, 0xa2, 0xa0, 0x99, 0xbe, 0x9b, 0xe3, 0x9a, 0xb6, 0x6b, 0x92, 0x53, 0xf6, 0x69, 0xf2, + 0x6a, 0x30, 0x46, 0xd7, 0xa1, 0x36, 0xc6, 0x63, 0xc7, 0xb6, 0x47, 0x1a, 0x4f, 0x5e, 0x55, 0x66, + 0xba, 0x24, 0x84, 0x1d, 0x96, 0xc3, 0x7e, 0x99, 0x0b, 0xb7, 0x5f, 0x48, 0x8e, 0xfe, 0xef, 0x02, + 0xac, 0xfc, 0x26, 0x4f, 0x39, 0x62, 0x1c, 0x6a, 0xa0, 0x03, 0x58, 0x0e, 0xb6, 0xbf, 0x36, 0x61, + 0x69, 0xc1, 0x5f, 0xd0, 0x69, 0xf3, 0x47, 0xf3, 0x38, 0x2e, 0xf6, 0xd0, 0x8f, 0xe0, 0xf2, 0x54, + 0x6a, 0x0b, 0x5c, 0xe7, 0x52, 0x66, 0xb8, 0xc7, 0xe2, 0x19, 0xce, 0xf7, 0x1c, 0xc6, 0x2a, 0xff, + 0x2d, 0x63, 0xb5, 0x03, 0x0d, 0x4a, 0x56, 0xec, 0x09, 0x11, 0x45, 0x16, 0x0b, 0x9c, 0x7d, 0x65, + 0x86, 0xe9, 0xdc, 0x12, 0x7f, 0x07, 0x38, 0xd1, 0xf9, 0x8c, 0x12, 0x9d, 0xba, 0xb0, 0xe5, 0xc5, + 0x15, 0xa3, 0x77, 0xc0, 0x97, 0x88, 0xd6, 0x83, 0x40, 0xde, 0xa9, 0x9c, 0xd5, 0x84, 0xa9, 0xa0, + 0xda, 0xdb, 0x50, 0x8f, 0x43, 0xba, 0xb9, 0xeb, 0xf2, 0x3a, 0xd4, 0x5c, 0x4c, 0x28, 0xa5, 0x8b, + 0x35, 0x60, 0x96, 0xb8, 0x50, 0xb4, 0x75, 0xf6, 0xe1, 0xb1, 0xb9, 0xd0, 0x0e, 0x7d, 0x17, 0xa4, + 0x10, 0x15, 0x66, 0x13, 0x7a, 0x19, 0x01, 0x3f, 0x0f, 0x75, 0x95, 0x3f, 0x64, 0x43, 0x97, 0x71, + 0xc6, 0xdf, 0x81, 0x92, 0x8b, 0xbd, 0xc9, 0x88, 0x73, 0xf0, 0xfa, 0xc6, 0x8b, 0xe9, 0x40, 0x21, + 0x95, 0x4e, 0x46, 0x44, 0x15, 0xc6, 0xca, 0x7d, 0x28, 0x71, 0x09, 0xaa, 0x42, 0xf9, 0xee, 0xee, + 0x9d, 0xdd, 0xbd, 0xf7, 0x76, 0x9b, 0x19, 0x04, 0x50, 0xda, 0x6c, 0xb7, 0x3b, 0xfb, 0xbd, 0x66, + 0x16, 0x49, 0x50, 0xdc, 0xdc, 0xda, 0x53, 0x7b, 0xcd, 0x1c, 0x15, 0xab, 0x9d, 0x77, 0x3a, 0xed, + 0x5e, 0x33, 0x8f, 0x96, 0xa1, 0xc6, 0xaf, 0xb5, 0xdb, 0x7b, 0xea, 0xbb, 0x9b, 0xbd, 0x66, 0x21, + 0x22, 0x3a, 0xe8, 0xec, 0xde, 0xea, 0xa8, 0xcd, 0xa2, 0xf2, 0x12, 0x25, 0xf9, 0x09, 0x30, 0x32, + 0xa4, 0xf3, 0xd9, 0x08, 0x9d, 0x57, 0x3e, 0xcb, 0x81, 0x9c, 0x8c, 0x0d, 0xd1, 0x3b, 0x53, 0x13, + 0xdf, 0x38, 0x07, 0xb0, 0x9c, 0x9a, 0x3d, 0x7a, 0x0a, 0xea, 0x2e, 0x3e, 0xc2, 0xa4, 0x3f, 0xe4, + 0x58, 0x95, 0xd7, 0xf2, 0x9a, 0x5a, 0x13, 0x52, 0x66, 0xe4, 0x71, 0xb5, 0x0f, 0x71, 0x9f, 0x68, + 0x3c, 0x49, 0xf2, 0xed, 0x20, 0x51, 0x35, 0x2a, 0x3d, 0xe0, 0x42, 0xe5, 0x83, 0x73, 0xc5, 0x52, + 0x82, 0xa2, 0xda, 0xe9, 0xa9, 0x3f, 0x6e, 0xe6, 0x11, 0x82, 0x3a, 0xbb, 0xd4, 0x0e, 0x76, 0x37, + 0xf7, 0x0f, 0xba, 0x7b, 0x34, 0x96, 0x17, 0xa0, 0xe1, 0xc7, 0xd2, 0x17, 0x16, 0x95, 0x7d, 0xb8, + 0x9c, 0x00, 0x6c, 0x1f, 0xb1, 0xa3, 0xa1, 0xfc, 0x36, 0x1b, 0x75, 0x19, 0xef, 0x1e, 0xbc, 0x3d, + 0x15, 0xe9, 0xf5, 0xb4, 0x70, 0x78, 0x3a, 0xcc, 0x32, 0x54, 0xb0, 0x68, 0xd4, 0xb1, 0x00, 0x2f, + 0xa9, 0xc1, 0x58, 0x79, 0x71, 0x71, 0xd0, 0xc2, 0x55, 0x97, 0x53, 0xfe, 0x93, 0x85, 0xc6, 0x54, + 0xf2, 0x42, 0x1b, 0x50, 0xe4, 0x8c, 0x2f, 0xe9, 0xa7, 0x21, 0xcb, 0xbd, 0x22, 0xd3, 0x71, 0x55, + 0xf4, 0x46, 0xec, 0x95, 0x66, 0x92, 0x24, 0x0f, 0x96, 0xdf, 0x5d, 0x14, 0xa6, 0x81, 0x05, 0x7a, + 0x13, 0xa4, 0x20, 0x0b, 0x8b, 0x36, 0xc3, 0x93, 0xb3, 0xe6, 0x41, 0xfe, 0x16, 0xf6, 0xa1, 0x0d, + 0x7a, 0x2d, 0x04, 0xe2, 0x85, 0x59, 0x9e, 0x29, 0xcc, 0xb9, 0x82, 0x30, 0xf6, 0xf5, 0x95, 0x36, + 0x54, 0x23, 0xf3, 0x41, 0x8f, 0x83, 0x34, 0xd6, 0x4f, 0x44, 0x4f, 0x9a, 0x77, 0x15, 0x2b, 0x63, + 0xfd, 0x84, 0xb7, 0xa3, 0x2f, 0x43, 0x99, 0xde, 0x1c, 0xe8, 0x9e, 0xe8, 0x53, 0x95, 0xc6, 0xfa, + 0xc9, 0xdb, 0xba, 0xa7, 0xbc, 0x0f, 0xf5, 0x78, 0x3f, 0x96, 0xee, 0x45, 0xd7, 0x9e, 0x58, 0x06, + 0xf3, 0x51, 0x54, 0xf9, 0x00, 0xdd, 0x84, 0xe2, 0xb1, 0xcd, 0x0b, 0xc9, 0xfc, 0xa4, 0x75, 0xcf, + 0x26, 0x38, 0xd2, 0xcf, 0xe5, 0xda, 0xca, 0x43, 0x28, 0xb2, 0xc2, 0x40, 0x53, 0x29, 0xeb, 0xac, + 0x0a, 0x12, 0x42, 0xaf, 0xd1, 0xfb, 0x00, 0x3a, 0x21, 0xae, 0x79, 0x38, 0x09, 0x1d, 0xaf, 0xce, + 0x2f, 0x2c, 0x9b, 0xbe, 0xde, 0xd6, 0x55, 0x51, 0x61, 0x2e, 0x86, 0xa6, 0x91, 0x2a, 0x13, 0x71, + 0xa8, 0xec, 0x42, 0x3d, 0x6e, 0x1b, 0xfd, 0xc7, 0xb1, 0x34, 0xe7, 0x1f, 0x47, 0x00, 0x74, 0x03, + 0x98, 0x9c, 0xe7, 0x5d, 0x74, 0x36, 0x50, 0x3e, 0xc9, 0x42, 0xa5, 0x77, 0x22, 0xd6, 0x68, 0x42, + 0x03, 0x37, 0x34, 0xcd, 0x45, 0xdb, 0x95, 0xbc, 0x23, 0x9c, 0x0f, 0xfa, 0xcc, 0x6f, 0x05, 0x1b, + 0xaa, 0x90, 0xb6, 0xbf, 0xe1, 0x37, 0xe6, 0x44, 0xba, 0x7e, 0x1d, 0xa4, 0x60, 0x55, 0x51, 0x36, + 0xa7, 0x1b, 0x86, 0x8b, 0x3d, 0x4f, 0xcc, 0xcd, 0x1f, 0xb2, 0xff, 0x01, 0xf6, 0xc7, 0xa2, 0x21, + 0x9a, 0x57, 0xf9, 0x40, 0x31, 0xa0, 0x31, 0x05, 0x29, 0xd0, 0xeb, 0x50, 0x76, 0x26, 0x87, 0x9a, + 0x1f, 0x9e, 0xa9, 0xcd, 0xe3, 0x23, 0xfb, 0xc9, 0xe1, 0xc8, 0xec, 0xdf, 0xc1, 0xa7, 0xfe, 0xcb, + 0x38, 0x93, 0xc3, 0x3b, 0x3c, 0x8a, 0xfc, 0x29, 0xb9, 0xe8, 0x53, 0x8e, 0xa1, 0xe2, 0x2f, 0x0a, + 0xf4, 0x83, 0xe8, 0x3e, 0xf1, 0xff, 0x12, 0x25, 0xc2, 0x1c, 0xe1, 0x3e, 0xb2, 0x4d, 0x6e, 0xc0, + 0xb2, 0x67, 0x0e, 0x2c, 0x6c, 0x68, 0x21, 0x9f, 0x64, 0x4f, 0xab, 0xa8, 0x0d, 0x7e, 0x63, 0xc7, + 0x27, 0x93, 0xca, 0xbf, 0xb3, 0x50, 0xf1, 0x37, 0x2c, 0x7a, 0x29, 0xb2, 0xee, 0xea, 0x73, 0x7a, + 0x79, 0xbe, 0x62, 0xd8, 0xd2, 0x8f, 0xbf, 0x6b, 0xee, 0xfc, 0xef, 0x9a, 0xf4, 0x6f, 0xc6, 0x6f, + 0xec, 0x16, 0xce, 0xfd, 0x93, 0xec, 0x05, 0x40, 0xc4, 0x26, 0xfa, 0x48, 0x3b, 0xb6, 0x89, 0x69, + 0x0d, 0x34, 0x1e, 0x6c, 0x8e, 0x76, 0x9b, 0xec, 0xce, 0x3d, 0x76, 0x63, 0x9f, 0xc5, 0xfd, 0xe7, + 0x59, 0xa8, 0x04, 0xe8, 0xe0, 0xbc, 0x1d, 0xfa, 0x4b, 0x50, 0x12, 0x05, 0x90, 0xb7, 0xe8, 0xc5, + 0x28, 0xf8, 0x59, 0x54, 0x88, 0xfc, 0x2c, 0x92, 0xa1, 0x32, 0xc6, 0x44, 0x67, 0x75, 0x86, 0x53, + 0xfa, 0x60, 0x7c, 0xe3, 0x35, 0xa8, 0x46, 0x7e, 0x96, 0xd0, 0x9d, 0xb7, 0xdb, 0x79, 0xaf, 0x99, + 0x91, 0xcb, 0x9f, 0x7c, 0x7e, 0x2d, 0xbf, 0x8b, 0x3f, 0xa6, 0x6b, 0x56, 0xed, 0xb4, 0xbb, 0x9d, + 0xf6, 0x9d, 0x66, 0x56, 0xae, 0x7e, 0xf2, 0xf9, 0xb5, 0xb2, 0x8a, 0x59, 0x0b, 0xf0, 0x46, 0x17, + 0x96, 0xa2, 0x5f, 0x25, 0x5e, 0x0e, 0x10, 0xd4, 0x6f, 0xdd, 0xdd, 0xdf, 0xd9, 0x6e, 0x6f, 0xf6, + 0x3a, 0xda, 0xbd, 0xbd, 0x5e, 0xa7, 0x99, 0x45, 0x97, 0xe1, 0xc2, 0xce, 0xf6, 0xdb, 0xdd, 0x9e, + 0xd6, 0xde, 0xd9, 0xee, 0xec, 0xf6, 0xb4, 0xcd, 0x5e, 0x6f, 0xb3, 0x7d, 0xa7, 0x99, 0xdb, 0xf8, + 0x73, 0x15, 0x1a, 0x9b, 0x5b, 0xed, 0x6d, 0x5a, 0xff, 0xcd, 0xbe, 0x2e, 0x5a, 0xac, 0x05, 0xd6, + 0x51, 0x39, 0xf3, 0x44, 0x89, 0x7c, 0x76, 0x87, 0x19, 0xdd, 0x86, 0x22, 0x6b, 0xb6, 0xa0, 0xb3, + 0x8f, 0x98, 0xc8, 0x0b, 0x5a, 0xce, 0xf4, 0x65, 0xd8, 0xf6, 0x38, 0xf3, 0xcc, 0x89, 0x7c, 0x76, + 0x07, 0x1a, 0xa9, 0x20, 0x85, 0xdd, 0x92, 0xc5, 0x67, 0x50, 0xe4, 0x14, 0x5d, 0x69, 0xea, 0x33, + 0xa4, 0x6c, 0x8b, 0xcf, 0x64, 0xc8, 0x29, 0x12, 0x18, 0xda, 0x81, 0xb2, 0xcf, 0xb2, 0x17, 0x9d, + 0x12, 0x91, 0x17, 0x76, 0x8c, 0xe9, 0x27, 0xe0, 0xdd, 0x90, 0xb3, 0x8f, 0xbc, 0xc8, 0x0b, 0xda, + 0xdf, 0x68, 0x1b, 0x4a, 0x02, 0xed, 0x2f, 0x38, 0xf9, 0x21, 0x2f, 0xea, 0x00, 0xd3, 0xa0, 0x85, + 0x6d, 0xa6, 0xc5, 0x07, 0x79, 0xe4, 0x14, 0x9d, 0x7d, 0x74, 0x17, 0x20, 0xd2, 0xfb, 0x48, 0x71, + 0x42, 0x47, 0x4e, 0xd3, 0xb1, 0x47, 0x7b, 0x50, 0x09, 0xa8, 0xe8, 0xc2, 0xf3, 0x32, 0xf2, 0xe2, + 0xd6, 0x39, 0xba, 0x0f, 0xb5, 0x38, 0xd3, 0x49, 0x77, 0x0a, 0x46, 0x4e, 0xd9, 0x13, 0xa7, 0xfe, + 0xe3, 0xb4, 0x27, 0xdd, 0xa9, 0x18, 0x39, 0x65, 0x8b, 0x1c, 0x7d, 0x08, 0xcb, 0xb3, 0xb4, 0x24, + 0xfd, 0x21, 0x19, 0xf9, 0x1c, 0x4d, 0x73, 0x34, 0x06, 0x34, 0x87, 0xce, 0x9c, 0xe3, 0xcc, 0x8c, + 0x7c, 0x9e, 0x1e, 0x3a, 0x32, 0xa0, 0x31, 0xcd, 0x11, 0xd2, 0x9e, 0xa1, 0x91, 0x53, 0xf7, 0xd3, + 0xf9, 0x53, 0xe2, 0xb4, 0x21, 0xed, 0x99, 0x1a, 0x39, 0x75, 0x7b, 0x7d, 0xab, 0xf3, 0xc5, 0xd7, + 0x2b, 0xd9, 0x2f, 0xbf, 0x5e, 0xc9, 0xfe, 0xfd, 0xeb, 0x95, 0xec, 0xa7, 0xdf, 0xac, 0x64, 0xbe, + 0xfc, 0x66, 0x25, 0xf3, 0x97, 0x6f, 0x56, 0x32, 0x3f, 0x79, 0x7e, 0x60, 0x92, 0xe1, 0xe4, 0x70, + 0xad, 0x6f, 0x8f, 0xd7, 0xa3, 0x87, 0x17, 0xe7, 0x1d, 0xa8, 0x3c, 0x2c, 0xb1, 0xa2, 0xfb, 0xf2, + 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xb1, 0xab, 0x0a, 0xc1, 0x70, 0x29, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -6463,16 +6465,22 @@ func (m *ResponseEndBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.TimeoutCommit != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.TimeoutCommit)) - i-- - dAtA[i] = 0x28 + n47, err47 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TimeoutCommit, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutCommit):]) + if err47 != nil { + return 0, err47 } - if m.TimeoutPropose != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.TimeoutPropose)) - i-- - dAtA[i] = 0x20 + i -= n47 + i = encodeVarintTypes(dAtA, i, uint64(n47)) + i-- + dAtA[i] = 0x2a + n48, err48 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TimeoutPropose, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutPropose):]) + if err48 != nil { + return 0, err48 } + i -= n48 + i = encodeVarintTypes(dAtA, i, uint64(n48)) + i-- + dAtA[i] = 0x22 if len(m.Events) > 0 { for iNdEx := len(m.Events) - 1; iNdEx >= 0; iNdEx-- { { @@ -6676,20 +6684,20 @@ func (m *ResponseApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, err } } if len(m.RefetchChunks) > 0 { - dAtA49 := make([]byte, len(m.RefetchChunks)*10) - var j48 int + dAtA51 := make([]byte, len(m.RefetchChunks)*10) + var j50 int for _, num := range m.RefetchChunks { for num >= 1<<7 { - dAtA49[j48] = uint8(uint64(num)&0x7f | 0x80) + dAtA51[j50] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j48++ + j50++ } - dAtA49[j48] = uint8(num) - j48++ + dAtA51[j50] = uint8(num) + j50++ } - i -= j48 - copy(dAtA[i:], dAtA49[:j48]) - i = encodeVarintTypes(dAtA, i, uint64(j48)) + i -= j50 + copy(dAtA[i:], dAtA51[:j50]) + i = encodeVarintTypes(dAtA, i, uint64(j50)) i-- dAtA[i] = 0x12 } @@ -7201,12 +7209,12 @@ func (m *Evidence) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x28 } - n58, err58 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err58 != nil { - return 0, err58 + n60, err60 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err60 != nil { + return 0, err60 } - i -= n58 - i = encodeVarintTypes(dAtA, i, uint64(n58)) + i -= n60 + i = encodeVarintTypes(dAtA, i, uint64(n60)) i-- dAtA[i] = 0x22 if m.Height != 0 { @@ -8304,12 +8312,10 @@ func (m *ResponseEndBlock) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } - if m.TimeoutPropose != 0 { - n += 1 + sovTypes(uint64(m.TimeoutPropose)) - } - if m.TimeoutCommit != 0 { - n += 1 + sovTypes(uint64(m.TimeoutCommit)) - } + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutPropose) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutCommit) + n += 1 + l + sovTypes(uint64(l)) return n } @@ -13772,10 +13778,10 @@ func (m *ResponseEndBlock) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 4: - if wireType != 0 { + if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field TimeoutPropose", wireType) } - m.TimeoutPropose = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -13785,16 +13791,30 @@ func (m *ResponseEndBlock) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.TimeoutPropose |= uint64(b&0x7F) << shift + 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 + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TimeoutPropose, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex case 5: - if wireType != 0 { + if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field TimeoutCommit", wireType) } - m.TimeoutCommit = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -13804,11 +13824,25 @@ func (m *ResponseEndBlock) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.TimeoutCommit |= uint64(b&0x7F) << shift + 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 + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TimeoutCommit, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index 5e73d4730d..dd6cbd13fd 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -11,6 +11,7 @@ import "tendermint/crypto/keys.proto"; import "tendermint/types/params.proto"; import "google/protobuf/timestamp.proto"; import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; // This file is copied from http://github.com/tendermint/abci // NOTE: When using custom types, mind the warnings. @@ -264,8 +265,8 @@ message ResponseEndBlock { ConsensusParams consensus_param_updates = 2; repeated Event events = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - uint64 timeout_propose = 4; - uint64 timeout_commit = 5; + google.protobuf.Duration timeout_propose = 4 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + google.protobuf.Duration timeout_commit = 5 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; } message ResponseCommit { diff --git a/state/execution.go b/state/execution.go index 9a76f02e5b..bf7f1e6959 100644 --- a/state/execution.go +++ b/state/execution.go @@ -568,8 +568,8 @@ func updateState( LastHeightConsensusParamsChanged: lastHeightParamsChanged, LastResultsHash: ABCIResponsesResultsHash(abciResponses), AppHash: nil, - timeoutCommit: time.Duration(abciResponses.EndBlock.TimeoutCommit) * time.Second, - timeoutPropose: time.Duration(abciResponses.EndBlock.TimeoutPropose) * time.Second, + timeoutCommit: abciResponses.EndBlock.TimeoutCommit, + timeoutPropose: abciResponses.EndBlock.TimeoutPropose, } return s, nil From 30bc1c0d330c7a36217ac343197c7b2954e4ae1c Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 19 Sep 2024 14:52:26 -0700 Subject: [PATCH 08/87] adds timeout fields to RequestInfo --- abci/types/types.pb.go | 560 ++++++++++++++++++------------ proto/tendermint/abci/types.proto | 8 +- 2 files changed, 336 insertions(+), 232 deletions(-) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index 2fce5f0f89..fbfd136ffb 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -550,9 +550,11 @@ func (m *RequestFlush) XXX_DiscardUnknown() { var xxx_messageInfo_RequestFlush proto.InternalMessageInfo type RequestInfo struct { - Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` - BlockVersion uint64 `protobuf:"varint,2,opt,name=block_version,json=blockVersion,proto3" json:"block_version,omitempty"` - P2PVersion uint64 `protobuf:"varint,3,opt,name=p2p_version,json=p2pVersion,proto3" json:"p2p_version,omitempty"` + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + BlockVersion uint64 `protobuf:"varint,2,opt,name=block_version,json=blockVersion,proto3" json:"block_version,omitempty"` + P2PVersion uint64 `protobuf:"varint,3,opt,name=p2p_version,json=p2pVersion,proto3" json:"p2p_version,omitempty"` + TimeoutPropose time.Duration `protobuf:"bytes,4,opt,name=timeout_propose,json=timeoutPropose,proto3,stdduration" json:"timeout_propose"` + TimeoutCommit time.Duration `protobuf:"bytes,5,opt,name=timeout_commit,json=timeoutCommit,proto3,stdduration" json:"timeout_commit"` } func (m *RequestInfo) Reset() { *m = RequestInfo{} } @@ -609,6 +611,20 @@ func (m *RequestInfo) GetP2PVersion() uint64 { return 0 } +func (m *RequestInfo) GetTimeoutPropose() time.Duration { + if m != nil { + return m.TimeoutPropose + } + return 0 +} + +func (m *RequestInfo) GetTimeoutCommit() time.Duration { + if m != nil { + return m.TimeoutCommit + } + return 0 +} + // nondeterministic type RequestSetOption struct { Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` @@ -3562,198 +3578,198 @@ func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_2 var fileDescriptor_252557cfdd89a31a = []byte{ // 3070 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcd, 0x73, 0xdb, 0xc6, - 0x15, 0xe7, 0x37, 0x89, 0x47, 0xf1, 0x43, 0x6b, 0xc7, 0xa6, 0x11, 0x47, 0x72, 0xe0, 0xc9, 0x97, - 0x93, 0x48, 0x8d, 0x32, 0x4e, 0x93, 0x26, 0x6d, 0x22, 0xd1, 0x74, 0xa8, 0x58, 0x91, 0x54, 0x88, - 0x76, 0xfa, 0x15, 0x23, 0x10, 0xb1, 0x22, 0x11, 0x93, 0x00, 0x02, 0x2c, 0x15, 0xc9, 0xc7, 0x4e, - 0x3b, 0x9d, 0xc9, 0x29, 0x33, 0xbd, 0xe4, 0x92, 0x63, 0x8f, 0xbd, 0xf7, 0xd2, 0x5e, 0x7a, 0xc9, - 0x4c, 0x0f, 0xcd, 0xb1, 0x87, 0x4e, 0xda, 0x49, 0x7a, 0xea, 0x3f, 0xd0, 0x53, 0xa7, 0x9d, 0xfd, - 0xc0, 0x17, 0x49, 0x88, 0x90, 0xd3, 0x5b, 0x6f, 0xd8, 0x87, 0xf7, 0x1e, 0xb0, 0x0f, 0xbb, 0xef, - 0xfd, 0x7e, 0x0f, 0x0b, 0x8f, 0x13, 0x6c, 0x19, 0xd8, 0x1d, 0x9b, 0x16, 0x59, 0xd7, 0x0f, 0xfb, - 0xe6, 0x3a, 0x39, 0x75, 0xb0, 0xb7, 0xe6, 0xb8, 0x36, 0xb1, 0x51, 0x23, 0xbc, 0xb9, 0x46, 0x6f, - 0xca, 0x4f, 0x44, 0xb4, 0xfb, 0xee, 0xa9, 0x43, 0xec, 0x75, 0xc7, 0xb5, 0xed, 0x23, 0xae, 0x2f, - 0x5f, 0x8d, 0xdc, 0x66, 0x7e, 0xa2, 0xde, 0x62, 0x77, 0x85, 0xf1, 0x03, 0x7c, 0xea, 0xdf, 0x7d, - 0x62, 0xc6, 0xd6, 0xd1, 0x5d, 0x7d, 0xec, 0xdf, 0x5e, 0x1d, 0xd8, 0xf6, 0x60, 0x84, 0xd7, 0xd9, - 0xe8, 0x70, 0x72, 0xb4, 0x4e, 0xcc, 0x31, 0xf6, 0x88, 0x3e, 0x76, 0x84, 0xc2, 0xc5, 0x81, 0x3d, - 0xb0, 0xd9, 0xe5, 0x3a, 0xbd, 0x12, 0xd2, 0x95, 0x69, 0x33, 0x63, 0xe2, 0xea, 0xc4, 0xb4, 0x2d, - 0x7e, 0x5f, 0xf9, 0xbd, 0x04, 0x65, 0x15, 0x7f, 0x34, 0xc1, 0x1e, 0x41, 0x1b, 0x50, 0xc0, 0xfd, - 0xa1, 0xdd, 0xca, 0x5e, 0xcb, 0x3e, 0x5b, 0xdd, 0xb8, 0xba, 0x36, 0x35, 0xf9, 0x35, 0xa1, 0xd7, - 0xe9, 0x0f, 0xed, 0x6e, 0x46, 0x65, 0xba, 0xe8, 0x26, 0x14, 0x8f, 0x46, 0x13, 0x6f, 0xd8, 0xca, - 0x31, 0xa3, 0x27, 0x92, 0x8c, 0x6e, 0x53, 0xa5, 0x6e, 0x46, 0xe5, 0xda, 0xf4, 0x51, 0xa6, 0x75, - 0x64, 0xb7, 0xf2, 0x67, 0x3f, 0x6a, 0xdb, 0x3a, 0x62, 0x8f, 0xa2, 0xba, 0x68, 0x0b, 0xc0, 0xc3, - 0x44, 0xb3, 0x1d, 0xfa, 0xfa, 0xad, 0x02, 0xb3, 0x7c, 0x32, 0xc9, 0xf2, 0x00, 0x93, 0x3d, 0xa6, - 0xd8, 0xcd, 0xa8, 0x92, 0xe7, 0x0f, 0xa8, 0x0f, 0xd3, 0x32, 0x89, 0xd6, 0x1f, 0xea, 0xa6, 0xd5, - 0x2a, 0x9e, 0xed, 0x63, 0xdb, 0x32, 0x49, 0x9b, 0x2a, 0x52, 0x1f, 0xa6, 0x3f, 0xa0, 0x53, 0xfe, - 0x68, 0x82, 0xdd, 0xd3, 0x56, 0xe9, 0xec, 0x29, 0xff, 0x90, 0x2a, 0xd1, 0x29, 0x33, 0x6d, 0xd4, - 0x81, 0xea, 0x21, 0x1e, 0x98, 0x96, 0x76, 0x38, 0xb2, 0xfb, 0x0f, 0x5a, 0x65, 0x66, 0xac, 0x24, - 0x19, 0x6f, 0x51, 0xd5, 0x2d, 0xaa, 0xd9, 0xcd, 0xa8, 0x70, 0x18, 0x8c, 0xd0, 0x1b, 0x50, 0xe9, - 0x0f, 0x71, 0xff, 0x81, 0x46, 0x4e, 0x5a, 0x15, 0xe6, 0x63, 0x35, 0xc9, 0x47, 0x9b, 0xea, 0xf5, - 0x4e, 0xba, 0x19, 0xb5, 0xdc, 0xe7, 0x97, 0x74, 0xfe, 0x06, 0x1e, 0x99, 0xc7, 0xd8, 0xa5, 0xf6, - 0xd2, 0xd9, 0xf3, 0xbf, 0xc5, 0x35, 0x99, 0x07, 0xc9, 0xf0, 0x07, 0xe8, 0x4d, 0x90, 0xb0, 0x65, - 0x88, 0x69, 0x00, 0x73, 0x71, 0x2d, 0x71, 0xad, 0x58, 0x86, 0x3f, 0x89, 0x0a, 0x16, 0xd7, 0xe8, - 0x55, 0x28, 0xf5, 0xed, 0xf1, 0xd8, 0x24, 0xad, 0x2a, 0xb3, 0x5e, 0x49, 0x9c, 0x00, 0xd3, 0xea, - 0x66, 0x54, 0xa1, 0x8f, 0x76, 0xa1, 0x3e, 0x32, 0x3d, 0xa2, 0x79, 0x96, 0xee, 0x78, 0x43, 0x9b, - 0x78, 0xad, 0x25, 0xe6, 0xe1, 0xa9, 0x24, 0x0f, 0x3b, 0xa6, 0x47, 0x0e, 0x7c, 0xe5, 0x6e, 0x46, - 0xad, 0x8d, 0xa2, 0x02, 0xea, 0xcf, 0x3e, 0x3a, 0xc2, 0x6e, 0xe0, 0xb0, 0x55, 0x3b, 0xdb, 0xdf, - 0x1e, 0xd5, 0xf6, 0xed, 0xa9, 0x3f, 0x3b, 0x2a, 0x40, 0x3f, 0x85, 0x0b, 0x23, 0x5b, 0x37, 0x02, - 0x77, 0x5a, 0x7f, 0x38, 0xb1, 0x1e, 0xb4, 0xea, 0xcc, 0xe9, 0x73, 0x89, 0x2f, 0x69, 0xeb, 0x86, - 0xef, 0xa2, 0x4d, 0x0d, 0xba, 0x19, 0x75, 0x79, 0x34, 0x2d, 0x44, 0xf7, 0xe1, 0xa2, 0xee, 0x38, - 0xa3, 0xd3, 0x69, 0xef, 0x0d, 0xe6, 0xfd, 0x46, 0x92, 0xf7, 0x4d, 0x6a, 0x33, 0xed, 0x1e, 0xe9, - 0x33, 0x52, 0xd4, 0x83, 0xa6, 0xe3, 0x62, 0x47, 0x77, 0xb1, 0xe6, 0xb8, 0xb6, 0x63, 0x7b, 0xfa, - 0xa8, 0xd5, 0x64, 0xbe, 0x9f, 0x49, 0xf2, 0xbd, 0xcf, 0xf5, 0xf7, 0x85, 0x7a, 0x37, 0xa3, 0x36, - 0x9c, 0xb8, 0x88, 0x7b, 0xb5, 0xfb, 0xd8, 0xf3, 0x42, 0xaf, 0xcb, 0x8b, 0xbc, 0x32, 0xfd, 0xb8, - 0xd7, 0x98, 0x68, 0xab, 0x0c, 0xc5, 0x63, 0x7d, 0x34, 0xc1, 0xca, 0x33, 0x50, 0x8d, 0xa4, 0x25, - 0xd4, 0x82, 0xf2, 0x18, 0x7b, 0x9e, 0x3e, 0xc0, 0x2c, 0x8b, 0x49, 0xaa, 0x3f, 0x54, 0xea, 0xb0, - 0x14, 0x4d, 0x45, 0xca, 0x38, 0x30, 0xa4, 0x49, 0x86, 0x1a, 0x1e, 0x63, 0xd7, 0xa3, 0x99, 0x45, - 0x18, 0x8a, 0x21, 0xba, 0x0e, 0x35, 0xb6, 0xd4, 0x35, 0xff, 0x3e, 0xcd, 0x74, 0x05, 0x75, 0x89, - 0x09, 0xef, 0x09, 0xa5, 0x55, 0xa8, 0x3a, 0x1b, 0x4e, 0xa0, 0x92, 0x67, 0x2a, 0xe0, 0x6c, 0x38, - 0x42, 0x41, 0xf9, 0x1e, 0x34, 0xa7, 0x33, 0x13, 0x6a, 0x42, 0xfe, 0x01, 0x3e, 0x15, 0xcf, 0xa3, - 0x97, 0xe8, 0xa2, 0x98, 0x16, 0x7b, 0x86, 0xa4, 0x8a, 0x39, 0xfe, 0x29, 0x17, 0x18, 0x07, 0x29, - 0x09, 0xbd, 0x0a, 0x05, 0x5a, 0x01, 0x44, 0xb2, 0x96, 0xd7, 0x78, 0x9e, 0x5f, 0xf3, 0xf3, 0xfc, - 0x5a, 0xcf, 0x2f, 0x0f, 0x5b, 0x95, 0x2f, 0xbe, 0x5a, 0xcd, 0x7c, 0xfa, 0xb7, 0xd5, 0xac, 0xca, - 0x2c, 0xd0, 0x15, 0x9a, 0x41, 0x74, 0xd3, 0xd2, 0x4c, 0x43, 0x3c, 0xa7, 0xcc, 0xc6, 0xdb, 0x06, - 0xba, 0x03, 0xcd, 0xbe, 0x6d, 0x79, 0xd8, 0xf2, 0x26, 0x9e, 0xc6, 0xcb, 0x8f, 0x48, 0xd1, 0xb3, - 0x3b, 0xbc, 0xed, 0x2b, 0xee, 0x33, 0x3d, 0xb5, 0xd1, 0x8f, 0x0b, 0xd0, 0x6d, 0x80, 0x63, 0x7d, - 0x64, 0x1a, 0x3a, 0xb1, 0x5d, 0xaf, 0x55, 0xb8, 0x96, 0x9f, 0xeb, 0xe6, 0x9e, 0xaf, 0x72, 0xd7, - 0x31, 0x74, 0x82, 0xb7, 0x0a, 0xf4, 0x6d, 0xd5, 0x88, 0x25, 0x7a, 0x1a, 0x1a, 0xba, 0xe3, 0x68, - 0x1e, 0xd1, 0x09, 0xd6, 0x0e, 0x4f, 0x09, 0xf6, 0x58, 0xe2, 0x5e, 0x52, 0x6b, 0xba, 0xe3, 0x1c, - 0x50, 0xe9, 0x16, 0x15, 0xa2, 0xa7, 0xa0, 0x4e, 0x93, 0xb4, 0xa9, 0x8f, 0xb4, 0x21, 0x36, 0x07, - 0x43, 0xc2, 0x12, 0x74, 0x5e, 0xad, 0x09, 0x69, 0x97, 0x09, 0x15, 0x23, 0x58, 0x08, 0x2c, 0x41, - 0x23, 0x04, 0x05, 0x43, 0x27, 0x3a, 0x0b, 0xe4, 0x92, 0xca, 0xae, 0xa9, 0xcc, 0xd1, 0xc9, 0x50, - 0x84, 0x87, 0x5d, 0xa3, 0x4b, 0x50, 0x12, 0x6e, 0xf3, 0xcc, 0xad, 0x18, 0xd1, 0x6f, 0xe6, 0xb8, - 0xf6, 0x31, 0x66, 0x15, 0xa9, 0xa2, 0xf2, 0x81, 0xf2, 0x8b, 0x1c, 0x2c, 0xcf, 0xa4, 0x72, 0xea, - 0x77, 0xa8, 0x7b, 0x43, 0xff, 0x59, 0xf4, 0x1a, 0xbd, 0x42, 0xfd, 0xea, 0x06, 0x76, 0x45, 0x09, - 0x6d, 0x45, 0x43, 0xc4, 0xe1, 0x43, 0x97, 0xdd, 0x17, 0xa1, 0x11, 0xda, 0x68, 0x0f, 0x9a, 0x23, - 0xdd, 0x23, 0x1a, 0x4f, 0x8d, 0x5a, 0xa4, 0x9c, 0xce, 0x16, 0x84, 0x1d, 0xdd, 0x4f, 0xa6, 0x74, - 0xb1, 0x0b, 0x47, 0xf5, 0x51, 0x4c, 0x8a, 0x54, 0xb8, 0x78, 0x78, 0xfa, 0x50, 0xb7, 0x88, 0x69, - 0x61, 0x6d, 0xe6, 0xcb, 0x5d, 0x99, 0x71, 0xda, 0x39, 0x36, 0x0d, 0x6c, 0xf5, 0xfd, 0x4f, 0x76, - 0x21, 0x30, 0x0e, 0x3e, 0xa9, 0xa7, 0xa8, 0x50, 0x8f, 0x17, 0x23, 0x54, 0x87, 0x1c, 0x39, 0x11, - 0x01, 0xc8, 0x91, 0x13, 0xf4, 0x1d, 0x28, 0xd0, 0x49, 0xb2, 0xc9, 0xd7, 0xe7, 0x20, 0x01, 0x61, - 0xd7, 0x3b, 0x75, 0xb0, 0xca, 0x34, 0x15, 0x25, 0xd8, 0x0d, 0x41, 0x81, 0x9a, 0xf6, 0xaa, 0x3c, - 0x07, 0x8d, 0xa9, 0x0a, 0x14, 0xf9, 0x7e, 0xd9, 0xe8, 0xf7, 0x53, 0x1a, 0x50, 0x8b, 0x95, 0x1b, - 0xe5, 0x12, 0x5c, 0x9c, 0x57, 0x3d, 0x94, 0x61, 0x20, 0x8f, 0x55, 0x01, 0x74, 0x13, 0x2a, 0x41, - 0xf9, 0xe0, 0xbb, 0x71, 0x36, 0x56, 0xbe, 0xb2, 0x1a, 0xa8, 0xd2, 0x6d, 0x48, 0x97, 0x35, 0x5b, - 0x0f, 0x39, 0xf6, 0xe2, 0x65, 0xdd, 0x71, 0xba, 0xba, 0x37, 0x54, 0x3e, 0x80, 0x56, 0x52, 0x69, - 0x98, 0x9a, 0x46, 0x21, 0x58, 0x86, 0x97, 0xa0, 0x74, 0x64, 0xbb, 0x63, 0x9d, 0x30, 0x67, 0x35, - 0x55, 0x8c, 0xe8, 0xf2, 0xe4, 0x65, 0x22, 0xcf, 0xc4, 0x7c, 0xa0, 0x68, 0x70, 0x25, 0xb1, 0x3c, - 0x50, 0x13, 0xd3, 0x32, 0x30, 0x8f, 0x67, 0x4d, 0xe5, 0x83, 0xd0, 0x11, 0x7f, 0x59, 0x3e, 0xa0, - 0x8f, 0xf5, 0xd8, 0x5c, 0x99, 0x7f, 0x49, 0x15, 0x23, 0xe5, 0x1f, 0x59, 0xb8, 0x34, 0xbf, 0x48, - 0xa0, 0x9b, 0x00, 0x3c, 0xa1, 0x06, 0xdb, 0xae, 0xba, 0x71, 0x69, 0x76, 0xd1, 0xdf, 0xd2, 0x89, - 0xae, 0x4a, 0x4c, 0x93, 0x5e, 0xd2, 0x34, 0x10, 0x9a, 0x69, 0x9e, 0xf9, 0x90, 0xaf, 0x99, 0xbc, - 0x5a, 0x0b, 0x74, 0x0e, 0xcc, 0x87, 0xf1, 0xf4, 0x96, 0x8f, 0xa7, 0xb7, 0x30, 0x76, 0x85, 0xd8, - 0x16, 0xf6, 0x73, 0x69, 0xf1, 0xbc, 0xb9, 0x54, 0xf9, 0x55, 0x74, 0x9a, 0xb1, 0x12, 0x15, 0xd9, - 0xd7, 0xd9, 0x73, 0xed, 0xeb, 0x78, 0x78, 0x72, 0x29, 0xc3, 0xa3, 0xfc, 0x1a, 0xa0, 0xa2, 0x62, - 0xcf, 0xa1, 0x49, 0x18, 0x6d, 0x81, 0x84, 0x4f, 0xfa, 0x98, 0x23, 0xe5, 0x6c, 0x22, 0xd2, 0xe4, - 0xda, 0x1d, 0x5f, 0x93, 0xc2, 0xbc, 0xc0, 0x0c, 0xbd, 0x2c, 0xd8, 0x40, 0x32, 0xb0, 0x17, 0xe6, - 0x51, 0x3a, 0xf0, 0x8a, 0x4f, 0x07, 0xf2, 0x89, 0xc8, 0x8e, 0x5b, 0x4d, 0xf1, 0x81, 0x97, 0x05, - 0x1f, 0x28, 0x2c, 0x78, 0x58, 0x8c, 0x10, 0xb4, 0x63, 0x84, 0xa0, 0xb8, 0x60, 0x9a, 0x09, 0x8c, - 0xa0, 0x1d, 0x63, 0x04, 0xa5, 0x05, 0x4e, 0x12, 0x28, 0xc1, 0x2b, 0x3e, 0x25, 0x28, 0x2f, 0x98, - 0xf6, 0x14, 0x27, 0xb8, 0x1d, 0xe7, 0x04, 0x1c, 0xcf, 0x5f, 0x4f, 0xb4, 0x4e, 0x24, 0x05, 0xdf, - 0x8f, 0x90, 0x02, 0x29, 0x11, 0x91, 0x73, 0x27, 0x73, 0x58, 0x41, 0x3b, 0xc6, 0x0a, 0x60, 0x41, - 0x0c, 0x12, 0x68, 0xc1, 0x5b, 0x51, 0x5a, 0x50, 0x4d, 0x64, 0x16, 0x62, 0xd1, 0xcc, 0xe3, 0x05, - 0xaf, 0x05, 0xbc, 0x60, 0x29, 0x91, 0xd8, 0x88, 0x39, 0x4c, 0x13, 0x83, 0xbd, 0x19, 0x62, 0xc0, - 0x81, 0xfc, 0xd3, 0x89, 0x2e, 0x16, 0x30, 0x83, 0xbd, 0x19, 0x66, 0x50, 0x5f, 0xe0, 0x70, 0x01, - 0x35, 0xf8, 0xd9, 0x7c, 0x6a, 0x90, 0x0c, 0xde, 0xc5, 0x6b, 0xa6, 0xe3, 0x06, 0x5a, 0x02, 0x37, - 0xe0, 0xf8, 0xfd, 0xf9, 0x44, 0xf7, 0xa9, 0xc9, 0xc1, 0xdd, 0x39, 0xe4, 0x80, 0xc3, 0xf8, 0x67, - 0x13, 0x9d, 0xa7, 0x60, 0x07, 0x77, 0xe7, 0xb0, 0x03, 0xb4, 0xd0, 0x6d, 0x7a, 0x7a, 0xf0, 0x1c, - 0x45, 0x61, 0x53, 0x69, 0x8e, 0x56, 0x32, 0xec, 0xba, 0xb6, 0x2b, 0x90, 0x37, 0x1f, 0x28, 0xcf, - 0x52, 0x5c, 0x18, 0xa6, 0xb4, 0x33, 0xa8, 0x04, 0x43, 0x0c, 0x91, 0x34, 0xa6, 0xfc, 0x2e, 0x1b, - 0xda, 0x32, 0x28, 0x15, 0xc5, 0x94, 0x92, 0xc0, 0x94, 0x11, 0x86, 0x91, 0x8b, 0x33, 0x8c, 0x55, - 0xa8, 0x52, 0x24, 0x30, 0x45, 0x1e, 0x74, 0xc7, 0x27, 0x0f, 0xe8, 0x06, 0x2c, 0x33, 0xa8, 0xc7, - 0xeb, 0x42, 0xac, 0x84, 0x35, 0xe8, 0x0d, 0xbe, 0x95, 0x78, 0x2d, 0x7b, 0x11, 0x2e, 0x44, 0x74, - 0x03, 0x84, 0xc1, 0x11, 0x73, 0x33, 0xd0, 0xde, 0x14, 0x50, 0xe3, 0xdd, 0x30, 0x40, 0x21, 0x31, - 0x41, 0x50, 0xe8, 0xdb, 0x06, 0x16, 0xf5, 0x9f, 0x5d, 0x53, 0xb2, 0x32, 0xb2, 0x07, 0xa2, 0xa2, - 0xd2, 0x4b, 0xaa, 0x15, 0xe4, 0x6c, 0x89, 0xa7, 0x64, 0xe5, 0x8f, 0xd9, 0xd0, 0x5f, 0xc8, 0x55, - 0xe6, 0xd1, 0x8a, 0xec, 0xff, 0x86, 0x56, 0xe4, 0x1e, 0x99, 0x56, 0x44, 0xf1, 0x57, 0x3e, 0x8e, - 0xbf, 0xfe, 0x95, 0x0d, 0xbf, 0x70, 0x40, 0x12, 0x1e, 0x2d, 0x22, 0x21, 0x98, 0x2a, 0xb2, 0xef, - 0x25, 0xc0, 0x94, 0xa0, 0x7e, 0x25, 0xf6, 0xdc, 0x38, 0xf5, 0x2b, 0x73, 0x78, 0xc5, 0x06, 0xe8, - 0x55, 0x90, 0x58, 0x7f, 0x51, 0xb3, 0x1d, 0x4f, 0x94, 0x87, 0xc7, 0xa3, 0x73, 0xe5, 0x6d, 0xc4, - 0xb5, 0x7d, 0xaa, 0xb3, 0xe7, 0x78, 0x6a, 0xc5, 0x11, 0x57, 0x11, 0xac, 0x23, 0xc5, 0xb0, 0xce, - 0x55, 0x90, 0xe8, 0xdb, 0x7b, 0x8e, 0xde, 0xc7, 0x2c, 0xd5, 0x4b, 0x6a, 0x28, 0x50, 0xee, 0x03, - 0x9a, 0x2d, 0x36, 0xa8, 0x0b, 0x25, 0x7c, 0x8c, 0x2d, 0x42, 0xbf, 0x5a, 0x7e, 0x1a, 0x8e, 0x08, - 0x2e, 0x80, 0x2d, 0xb2, 0xd5, 0xa2, 0x41, 0xfe, 0xe7, 0x57, 0xab, 0x4d, 0xae, 0xfd, 0x82, 0x3d, - 0x36, 0x09, 0x1e, 0x3b, 0xe4, 0x54, 0x15, 0xf6, 0xca, 0x5f, 0x73, 0x14, 0x98, 0xc7, 0x0a, 0xd1, - 0xdc, 0xd8, 0xfa, 0x1b, 0x28, 0x17, 0x21, 0x65, 0xe9, 0xe2, 0xbd, 0x02, 0x30, 0xd0, 0x3d, 0xed, - 0x63, 0xdd, 0x22, 0xd8, 0x10, 0x41, 0x8f, 0x48, 0x90, 0x0c, 0x15, 0x3a, 0x9a, 0x78, 0xd8, 0x10, - 0xfc, 0x30, 0x18, 0x47, 0xe6, 0x59, 0xfe, 0x76, 0xf3, 0x8c, 0x47, 0xb9, 0x32, 0x15, 0xe5, 0x08, - 0x68, 0x96, 0xa2, 0xa0, 0x99, 0xbe, 0x9b, 0xe3, 0x9a, 0xb6, 0x6b, 0x92, 0x53, 0xf6, 0x69, 0xf2, - 0x6a, 0x30, 0x46, 0xd7, 0xa1, 0x36, 0xc6, 0x63, 0xc7, 0xb6, 0x47, 0x1a, 0x4f, 0x5e, 0x55, 0x66, - 0xba, 0x24, 0x84, 0x1d, 0x96, 0xc3, 0x7e, 0x99, 0x0b, 0xb7, 0x5f, 0x48, 0x8e, 0xfe, 0xef, 0x02, - 0xac, 0xfc, 0x26, 0x4f, 0x39, 0x62, 0x1c, 0x6a, 0xa0, 0x03, 0x58, 0x0e, 0xb6, 0xbf, 0x36, 0x61, - 0x69, 0xc1, 0x5f, 0xd0, 0x69, 0xf3, 0x47, 0xf3, 0x38, 0x2e, 0xf6, 0xd0, 0x8f, 0xe0, 0xf2, 0x54, - 0x6a, 0x0b, 0x5c, 0xe7, 0x52, 0x66, 0xb8, 0xc7, 0xe2, 0x19, 0xce, 0xf7, 0x1c, 0xc6, 0x2a, 0xff, - 0x2d, 0x63, 0xb5, 0x03, 0x0d, 0x4a, 0x56, 0xec, 0x09, 0x11, 0x45, 0x16, 0x0b, 0x9c, 0x7d, 0x65, - 0x86, 0xe9, 0xdc, 0x12, 0x7f, 0x07, 0x38, 0xd1, 0xf9, 0x8c, 0x12, 0x9d, 0xba, 0xb0, 0xe5, 0xc5, - 0x15, 0xa3, 0x77, 0xc0, 0x97, 0x88, 0xd6, 0x83, 0x40, 0xde, 0xa9, 0x9c, 0xd5, 0x84, 0xa9, 0xa0, - 0xda, 0xdb, 0x50, 0x8f, 0x43, 0xba, 0xb9, 0xeb, 0xf2, 0x3a, 0xd4, 0x5c, 0x4c, 0x28, 0xa5, 0x8b, - 0x35, 0x60, 0x96, 0xb8, 0x50, 0xb4, 0x75, 0xf6, 0xe1, 0xb1, 0xb9, 0xd0, 0x0e, 0x7d, 0x17, 0xa4, - 0x10, 0x15, 0x66, 0x13, 0x7a, 0x19, 0x01, 0x3f, 0x0f, 0x75, 0x95, 0x3f, 0x64, 0x43, 0x97, 0x71, - 0xc6, 0xdf, 0x81, 0x92, 0x8b, 0xbd, 0xc9, 0x88, 0x73, 0xf0, 0xfa, 0xc6, 0x8b, 0xe9, 0x40, 0x21, - 0x95, 0x4e, 0x46, 0x44, 0x15, 0xc6, 0xca, 0x7d, 0x28, 0x71, 0x09, 0xaa, 0x42, 0xf9, 0xee, 0xee, - 0x9d, 0xdd, 0xbd, 0xf7, 0x76, 0x9b, 0x19, 0x04, 0x50, 0xda, 0x6c, 0xb7, 0x3b, 0xfb, 0xbd, 0x66, - 0x16, 0x49, 0x50, 0xdc, 0xdc, 0xda, 0x53, 0x7b, 0xcd, 0x1c, 0x15, 0xab, 0x9d, 0x77, 0x3a, 0xed, - 0x5e, 0x33, 0x8f, 0x96, 0xa1, 0xc6, 0xaf, 0xb5, 0xdb, 0x7b, 0xea, 0xbb, 0x9b, 0xbd, 0x66, 0x21, - 0x22, 0x3a, 0xe8, 0xec, 0xde, 0xea, 0xa8, 0xcd, 0xa2, 0xf2, 0x12, 0x25, 0xf9, 0x09, 0x30, 0x32, - 0xa4, 0xf3, 0xd9, 0x08, 0x9d, 0x57, 0x3e, 0xcb, 0x81, 0x9c, 0x8c, 0x0d, 0xd1, 0x3b, 0x53, 0x13, - 0xdf, 0x38, 0x07, 0xb0, 0x9c, 0x9a, 0x3d, 0x7a, 0x0a, 0xea, 0x2e, 0x3e, 0xc2, 0xa4, 0x3f, 0xe4, - 0x58, 0x95, 0xd7, 0xf2, 0x9a, 0x5a, 0x13, 0x52, 0x66, 0xe4, 0x71, 0xb5, 0x0f, 0x71, 0x9f, 0x68, - 0x3c, 0x49, 0xf2, 0xed, 0x20, 0x51, 0x35, 0x2a, 0x3d, 0xe0, 0x42, 0xe5, 0x83, 0x73, 0xc5, 0x52, - 0x82, 0xa2, 0xda, 0xe9, 0xa9, 0x3f, 0x6e, 0xe6, 0x11, 0x82, 0x3a, 0xbb, 0xd4, 0x0e, 0x76, 0x37, - 0xf7, 0x0f, 0xba, 0x7b, 0x34, 0x96, 0x17, 0xa0, 0xe1, 0xc7, 0xd2, 0x17, 0x16, 0x95, 0x7d, 0xb8, - 0x9c, 0x00, 0x6c, 0x1f, 0xb1, 0xa3, 0xa1, 0xfc, 0x36, 0x1b, 0x75, 0x19, 0xef, 0x1e, 0xbc, 0x3d, - 0x15, 0xe9, 0xf5, 0xb4, 0x70, 0x78, 0x3a, 0xcc, 0x32, 0x54, 0xb0, 0x68, 0xd4, 0xb1, 0x00, 0x2f, - 0xa9, 0xc1, 0x58, 0x79, 0x71, 0x71, 0xd0, 0xc2, 0x55, 0x97, 0x53, 0xfe, 0x93, 0x85, 0xc6, 0x54, - 0xf2, 0x42, 0x1b, 0x50, 0xe4, 0x8c, 0x2f, 0xe9, 0xa7, 0x21, 0xcb, 0xbd, 0x22, 0xd3, 0x71, 0x55, - 0xf4, 0x46, 0xec, 0x95, 0x66, 0x92, 0x24, 0x0f, 0x96, 0xdf, 0x5d, 0x14, 0xa6, 0x81, 0x05, 0x7a, - 0x13, 0xa4, 0x20, 0x0b, 0x8b, 0x36, 0xc3, 0x93, 0xb3, 0xe6, 0x41, 0xfe, 0x16, 0xf6, 0xa1, 0x0d, - 0x7a, 0x2d, 0x04, 0xe2, 0x85, 0x59, 0x9e, 0x29, 0xcc, 0xb9, 0x82, 0x30, 0xf6, 0xf5, 0x95, 0x36, - 0x54, 0x23, 0xf3, 0x41, 0x8f, 0x83, 0x34, 0xd6, 0x4f, 0x44, 0x4f, 0x9a, 0x77, 0x15, 0x2b, 0x63, - 0xfd, 0x84, 0xb7, 0xa3, 0x2f, 0x43, 0x99, 0xde, 0x1c, 0xe8, 0x9e, 0xe8, 0x53, 0x95, 0xc6, 0xfa, - 0xc9, 0xdb, 0xba, 0xa7, 0xbc, 0x0f, 0xf5, 0x78, 0x3f, 0x96, 0xee, 0x45, 0xd7, 0x9e, 0x58, 0x06, - 0xf3, 0x51, 0x54, 0xf9, 0x00, 0xdd, 0x84, 0xe2, 0xb1, 0xcd, 0x0b, 0xc9, 0xfc, 0xa4, 0x75, 0xcf, - 0x26, 0x38, 0xd2, 0xcf, 0xe5, 0xda, 0xca, 0x43, 0x28, 0xb2, 0xc2, 0x40, 0x53, 0x29, 0xeb, 0xac, - 0x0a, 0x12, 0x42, 0xaf, 0xd1, 0xfb, 0x00, 0x3a, 0x21, 0xae, 0x79, 0x38, 0x09, 0x1d, 0xaf, 0xce, - 0x2f, 0x2c, 0x9b, 0xbe, 0xde, 0xd6, 0x55, 0x51, 0x61, 0x2e, 0x86, 0xa6, 0x91, 0x2a, 0x13, 0x71, - 0xa8, 0xec, 0x42, 0x3d, 0x6e, 0x1b, 0xfd, 0xc7, 0xb1, 0x34, 0xe7, 0x1f, 0x47, 0x00, 0x74, 0x03, - 0x98, 0x9c, 0xe7, 0x5d, 0x74, 0x36, 0x50, 0x3e, 0xc9, 0x42, 0xa5, 0x77, 0x22, 0xd6, 0x68, 0x42, - 0x03, 0x37, 0x34, 0xcd, 0x45, 0xdb, 0x95, 0xbc, 0x23, 0x9c, 0x0f, 0xfa, 0xcc, 0x6f, 0x05, 0x1b, - 0xaa, 0x90, 0xb6, 0xbf, 0xe1, 0x37, 0xe6, 0x44, 0xba, 0x7e, 0x1d, 0xa4, 0x60, 0x55, 0x51, 0x36, - 0xa7, 0x1b, 0x86, 0x8b, 0x3d, 0x4f, 0xcc, 0xcd, 0x1f, 0xb2, 0xff, 0x01, 0xf6, 0xc7, 0xa2, 0x21, - 0x9a, 0x57, 0xf9, 0x40, 0x31, 0xa0, 0x31, 0x05, 0x29, 0xd0, 0xeb, 0x50, 0x76, 0x26, 0x87, 0x9a, - 0x1f, 0x9e, 0xa9, 0xcd, 0xe3, 0x23, 0xfb, 0xc9, 0xe1, 0xc8, 0xec, 0xdf, 0xc1, 0xa7, 0xfe, 0xcb, - 0x38, 0x93, 0xc3, 0x3b, 0x3c, 0x8a, 0xfc, 0x29, 0xb9, 0xe8, 0x53, 0x8e, 0xa1, 0xe2, 0x2f, 0x0a, - 0xf4, 0x83, 0xe8, 0x3e, 0xf1, 0xff, 0x12, 0x25, 0xc2, 0x1c, 0xe1, 0x3e, 0xb2, 0x4d, 0x6e, 0xc0, - 0xb2, 0x67, 0x0e, 0x2c, 0x6c, 0x68, 0x21, 0x9f, 0x64, 0x4f, 0xab, 0xa8, 0x0d, 0x7e, 0x63, 0xc7, - 0x27, 0x93, 0xca, 0xbf, 0xb3, 0x50, 0xf1, 0x37, 0x2c, 0x7a, 0x29, 0xb2, 0xee, 0xea, 0x73, 0x7a, - 0x79, 0xbe, 0x62, 0xd8, 0xd2, 0x8f, 0xbf, 0x6b, 0xee, 0xfc, 0xef, 0x9a, 0xf4, 0x6f, 0xc6, 0x6f, - 0xec, 0x16, 0xce, 0xfd, 0x93, 0xec, 0x05, 0x40, 0xc4, 0x26, 0xfa, 0x48, 0x3b, 0xb6, 0x89, 0x69, - 0x0d, 0x34, 0x1e, 0x6c, 0x8e, 0x76, 0x9b, 0xec, 0xce, 0x3d, 0x76, 0x63, 0x9f, 0xc5, 0xfd, 0xe7, - 0x59, 0xa8, 0x04, 0xe8, 0xe0, 0xbc, 0x1d, 0xfa, 0x4b, 0x50, 0x12, 0x05, 0x90, 0xb7, 0xe8, 0xc5, - 0x28, 0xf8, 0x59, 0x54, 0x88, 0xfc, 0x2c, 0x92, 0xa1, 0x32, 0xc6, 0x44, 0x67, 0x75, 0x86, 0x53, - 0xfa, 0x60, 0x7c, 0xe3, 0x35, 0xa8, 0x46, 0x7e, 0x96, 0xd0, 0x9d, 0xb7, 0xdb, 0x79, 0xaf, 0x99, - 0x91, 0xcb, 0x9f, 0x7c, 0x7e, 0x2d, 0xbf, 0x8b, 0x3f, 0xa6, 0x6b, 0x56, 0xed, 0xb4, 0xbb, 0x9d, - 0xf6, 0x9d, 0x66, 0x56, 0xae, 0x7e, 0xf2, 0xf9, 0xb5, 0xb2, 0x8a, 0x59, 0x0b, 0xf0, 0x46, 0x17, - 0x96, 0xa2, 0x5f, 0x25, 0x5e, 0x0e, 0x10, 0xd4, 0x6f, 0xdd, 0xdd, 0xdf, 0xd9, 0x6e, 0x6f, 0xf6, - 0x3a, 0xda, 0xbd, 0xbd, 0x5e, 0xa7, 0x99, 0x45, 0x97, 0xe1, 0xc2, 0xce, 0xf6, 0xdb, 0xdd, 0x9e, - 0xd6, 0xde, 0xd9, 0xee, 0xec, 0xf6, 0xb4, 0xcd, 0x5e, 0x6f, 0xb3, 0x7d, 0xa7, 0x99, 0xdb, 0xf8, - 0x73, 0x15, 0x1a, 0x9b, 0x5b, 0xed, 0x6d, 0x5a, 0xff, 0xcd, 0xbe, 0x2e, 0x5a, 0xac, 0x05, 0xd6, - 0x51, 0x39, 0xf3, 0x44, 0x89, 0x7c, 0x76, 0x87, 0x19, 0xdd, 0x86, 0x22, 0x6b, 0xb6, 0xa0, 0xb3, - 0x8f, 0x98, 0xc8, 0x0b, 0x5a, 0xce, 0xf4, 0x65, 0xd8, 0xf6, 0x38, 0xf3, 0xcc, 0x89, 0x7c, 0x76, - 0x07, 0x1a, 0xa9, 0x20, 0x85, 0xdd, 0x92, 0xc5, 0x67, 0x50, 0xe4, 0x14, 0x5d, 0x69, 0xea, 0x33, - 0xa4, 0x6c, 0x8b, 0xcf, 0x64, 0xc8, 0x29, 0x12, 0x18, 0xda, 0x81, 0xb2, 0xcf, 0xb2, 0x17, 0x9d, - 0x12, 0x91, 0x17, 0x76, 0x8c, 0xe9, 0x27, 0xe0, 0xdd, 0x90, 0xb3, 0x8f, 0xbc, 0xc8, 0x0b, 0xda, - 0xdf, 0x68, 0x1b, 0x4a, 0x02, 0xed, 0x2f, 0x38, 0xf9, 0x21, 0x2f, 0xea, 0x00, 0xd3, 0xa0, 0x85, - 0x6d, 0xa6, 0xc5, 0x07, 0x79, 0xe4, 0x14, 0x9d, 0x7d, 0x74, 0x17, 0x20, 0xd2, 0xfb, 0x48, 0x71, - 0x42, 0x47, 0x4e, 0xd3, 0xb1, 0x47, 0x7b, 0x50, 0x09, 0xa8, 0xe8, 0xc2, 0xf3, 0x32, 0xf2, 0xe2, - 0xd6, 0x39, 0xba, 0x0f, 0xb5, 0x38, 0xd3, 0x49, 0x77, 0x0a, 0x46, 0x4e, 0xd9, 0x13, 0xa7, 0xfe, - 0xe3, 0xb4, 0x27, 0xdd, 0xa9, 0x18, 0x39, 0x65, 0x8b, 0x1c, 0x7d, 0x08, 0xcb, 0xb3, 0xb4, 0x24, - 0xfd, 0x21, 0x19, 0xf9, 0x1c, 0x4d, 0x73, 0x34, 0x06, 0x34, 0x87, 0xce, 0x9c, 0xe3, 0xcc, 0x8c, - 0x7c, 0x9e, 0x1e, 0x3a, 0x32, 0xa0, 0x31, 0xcd, 0x11, 0xd2, 0x9e, 0xa1, 0x91, 0x53, 0xf7, 0xd3, - 0xf9, 0x53, 0xe2, 0xb4, 0x21, 0xed, 0x99, 0x1a, 0x39, 0x75, 0x7b, 0x7d, 0xab, 0xf3, 0xc5, 0xd7, - 0x2b, 0xd9, 0x2f, 0xbf, 0x5e, 0xc9, 0xfe, 0xfd, 0xeb, 0x95, 0xec, 0xa7, 0xdf, 0xac, 0x64, 0xbe, - 0xfc, 0x66, 0x25, 0xf3, 0x97, 0x6f, 0x56, 0x32, 0x3f, 0x79, 0x7e, 0x60, 0x92, 0xe1, 0xe4, 0x70, - 0xad, 0x6f, 0x8f, 0xd7, 0xa3, 0x87, 0x17, 0xe7, 0x1d, 0xa8, 0x3c, 0x2c, 0xb1, 0xa2, 0xfb, 0xf2, - 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xb1, 0xab, 0x0a, 0xc1, 0x70, 0x29, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcd, 0x73, 0xe4, 0xd4, + 0x11, 0x1f, 0xcd, 0xb7, 0x7a, 0x3c, 0x1f, 0x7e, 0xbb, 0xec, 0xce, 0x8a, 0xc5, 0x5e, 0xb4, 0xc5, + 0xd7, 0x02, 0x76, 0x30, 0xb5, 0x04, 0x02, 0x09, 0xd8, 0xb3, 0xb3, 0x8c, 0x59, 0x63, 0x3b, 0xf2, + 0xec, 0x92, 0x2f, 0x56, 0xc8, 0xa3, 0xe7, 0x19, 0xb1, 0x33, 0x92, 0x90, 0x34, 0xc6, 0xde, 0x63, + 0x2a, 0x29, 0xaa, 0x38, 0x51, 0x95, 0x0b, 0x17, 0x8e, 0x39, 0xe6, 0x9e, 0x4b, 0x72, 0xc9, 0x85, + 0xaa, 0x1c, 0xc2, 0x31, 0x87, 0x14, 0x49, 0x41, 0x4e, 0xf9, 0x07, 0x72, 0x4a, 0x25, 0xf5, 0x3e, + 0xf4, 0x39, 0x23, 0x8f, 0x0c, 0x39, 0xa4, 0x2a, 0x37, 0xbd, 0x56, 0xf7, 0x4f, 0x7a, 0xad, 0xf7, + 0xba, 0xfb, 0xd7, 0x7a, 0xf0, 0xa8, 0x87, 0x4d, 0x1d, 0x3b, 0x13, 0xc3, 0xf4, 0xd6, 0xb5, 0xc3, + 0x81, 0xb1, 0xee, 0x9d, 0xda, 0xd8, 0x5d, 0xb3, 0x1d, 0xcb, 0xb3, 0x50, 0x33, 0xbc, 0xb9, 0x46, + 0x6e, 0x4a, 0x8f, 0x45, 0xb4, 0x07, 0xce, 0xa9, 0xed, 0x59, 0xeb, 0xb6, 0x63, 0x59, 0x47, 0x4c, + 0x5f, 0xba, 0x1a, 0xb9, 0x4d, 0x71, 0xa2, 0x68, 0xb1, 0xbb, 0xdc, 0xf8, 0x01, 0x3e, 0xf5, 0xef, + 0x3e, 0x36, 0x63, 0x6b, 0x6b, 0x8e, 0x36, 0xf1, 0x6f, 0xaf, 0x0e, 0x2d, 0x6b, 0x38, 0xc6, 0xeb, + 0x74, 0x74, 0x38, 0x3d, 0x5a, 0xf7, 0x8c, 0x09, 0x76, 0x3d, 0x6d, 0x62, 0x73, 0x85, 0x8b, 0x43, + 0x6b, 0x68, 0xd1, 0xcb, 0x75, 0x72, 0xc5, 0xa5, 0x2b, 0x49, 0x33, 0x7d, 0xea, 0x68, 0x9e, 0x61, + 0x99, 0xec, 0xbe, 0xfc, 0x3b, 0x11, 0x2a, 0x0a, 0xfe, 0x60, 0x8a, 0x5d, 0x0f, 0x6d, 0x40, 0x11, + 0x0f, 0x46, 0x56, 0x5b, 0xb8, 0x26, 0x3c, 0x5d, 0xdb, 0xb8, 0xba, 0x96, 0x98, 0xfc, 0x1a, 0xd7, + 0xeb, 0x0e, 0x46, 0x56, 0x2f, 0xa7, 0x50, 0x5d, 0x74, 0x13, 0x4a, 0x47, 0xe3, 0xa9, 0x3b, 0x6a, + 0xe7, 0xa9, 0xd1, 0x63, 0x69, 0x46, 0xb7, 0x89, 0x52, 0x2f, 0xa7, 0x30, 0x6d, 0xf2, 0x28, 0xc3, + 0x3c, 0xb2, 0xda, 0x85, 0xb3, 0x1f, 0xb5, 0x6d, 0x1e, 0xd1, 0x47, 0x11, 0x5d, 0xb4, 0x05, 0xe0, + 0x62, 0x4f, 0xb5, 0x6c, 0xf2, 0xfa, 0xed, 0x22, 0xb5, 0x7c, 0x3c, 0xcd, 0xf2, 0x00, 0x7b, 0x7b, + 0x54, 0xb1, 0x97, 0x53, 0x44, 0xd7, 0x1f, 0x10, 0x0c, 0xc3, 0x34, 0x3c, 0x75, 0x30, 0xd2, 0x0c, + 0xb3, 0x5d, 0x3a, 0x1b, 0x63, 0xdb, 0x34, 0xbc, 0x0e, 0x51, 0x24, 0x18, 0x86, 0x3f, 0x20, 0x53, + 0xfe, 0x60, 0x8a, 0x9d, 0xd3, 0x76, 0xf9, 0xec, 0x29, 0xff, 0x90, 0x28, 0x91, 0x29, 0x53, 0x6d, + 0xd4, 0x85, 0xda, 0x21, 0x1e, 0x1a, 0xa6, 0x7a, 0x38, 0xb6, 0x06, 0x0f, 0xda, 0x15, 0x6a, 0x2c, + 0xa7, 0x19, 0x6f, 0x11, 0xd5, 0x2d, 0xa2, 0xd9, 0xcb, 0x29, 0x70, 0x18, 0x8c, 0xd0, 0x6b, 0x50, + 0x1d, 0x8c, 0xf0, 0xe0, 0x81, 0xea, 0x9d, 0xb4, 0xab, 0x14, 0x63, 0x35, 0x0d, 0xa3, 0x43, 0xf4, + 0xfa, 0x27, 0xbd, 0x9c, 0x52, 0x19, 0xb0, 0x4b, 0x32, 0x7f, 0x1d, 0x8f, 0x8d, 0x63, 0xec, 0x10, + 0x7b, 0xf1, 0xec, 0xf9, 0xdf, 0x62, 0x9a, 0x14, 0x41, 0xd4, 0xfd, 0x01, 0x7a, 0x1d, 0x44, 0x6c, + 0xea, 0x7c, 0x1a, 0x40, 0x21, 0xae, 0xa5, 0xae, 0x15, 0x53, 0xf7, 0x27, 0x51, 0xc5, 0xfc, 0x1a, + 0xbd, 0x0c, 0xe5, 0x81, 0x35, 0x99, 0x18, 0x5e, 0xbb, 0x46, 0xad, 0x57, 0x52, 0x27, 0x40, 0xb5, + 0x7a, 0x39, 0x85, 0xeb, 0xa3, 0x5d, 0x68, 0x8c, 0x0d, 0xd7, 0x53, 0x5d, 0x53, 0xb3, 0xdd, 0x91, + 0xe5, 0xb9, 0xed, 0x25, 0x8a, 0xf0, 0x44, 0x1a, 0xc2, 0x8e, 0xe1, 0x7a, 0x07, 0xbe, 0x72, 0x2f, + 0xa7, 0xd4, 0xc7, 0x51, 0x01, 0xc1, 0xb3, 0x8e, 0x8e, 0xb0, 0x13, 0x00, 0xb6, 0xeb, 0x67, 0xe3, + 0xed, 0x11, 0x6d, 0xdf, 0x9e, 0xe0, 0x59, 0x51, 0x01, 0xfa, 0x29, 0x5c, 0x18, 0x5b, 0x9a, 0x1e, + 0xc0, 0xa9, 0x83, 0xd1, 0xd4, 0x7c, 0xd0, 0x6e, 0x50, 0xd0, 0x67, 0x52, 0x5f, 0xd2, 0xd2, 0x74, + 0x1f, 0xa2, 0x43, 0x0c, 0x7a, 0x39, 0x65, 0x79, 0x9c, 0x14, 0xa2, 0xfb, 0x70, 0x51, 0xb3, 0xed, + 0xf1, 0x69, 0x12, 0xbd, 0x49, 0xd1, 0x6f, 0xa4, 0xa1, 0x6f, 0x12, 0x9b, 0x24, 0x3c, 0xd2, 0x66, + 0xa4, 0xa8, 0x0f, 0x2d, 0xdb, 0xc1, 0xb6, 0xe6, 0x60, 0xd5, 0x76, 0x2c, 0xdb, 0x72, 0xb5, 0x71, + 0xbb, 0x45, 0xb1, 0x9f, 0x4a, 0xc3, 0xde, 0x67, 0xfa, 0xfb, 0x5c, 0xbd, 0x97, 0x53, 0x9a, 0x76, + 0x5c, 0xc4, 0x50, 0xad, 0x01, 0x76, 0xdd, 0x10, 0x75, 0x79, 0x11, 0x2a, 0xd5, 0x8f, 0xa3, 0xc6, + 0x44, 0x5b, 0x15, 0x28, 0x1d, 0x6b, 0xe3, 0x29, 0x96, 0x9f, 0x82, 0x5a, 0x24, 0x2c, 0xa1, 0x36, + 0x54, 0x26, 0xd8, 0x75, 0xb5, 0x21, 0xa6, 0x51, 0x4c, 0x54, 0xfc, 0xa1, 0xdc, 0x80, 0xa5, 0x68, + 0x28, 0x92, 0x3f, 0xca, 0x07, 0x96, 0x24, 0xca, 0x10, 0xcb, 0x63, 0xec, 0xb8, 0x24, 0xb4, 0x70, + 0x4b, 0x3e, 0x44, 0xd7, 0xa1, 0x4e, 0xd7, 0xba, 0xea, 0xdf, 0x27, 0xa1, 0xae, 0xa8, 0x2c, 0x51, + 0xe1, 0x3d, 0xae, 0xb4, 0x0a, 0x35, 0x7b, 0xc3, 0x0e, 0x54, 0x0a, 0x54, 0x05, 0xec, 0x0d, 0xdb, + 0x57, 0xd8, 0x81, 0x26, 0x89, 0xd8, 0xd6, 0xd4, 0xe3, 0x7e, 0xc0, 0x3c, 0x84, 0x5d, 0x59, 0x63, + 0x21, 0x7a, 0xcd, 0x0f, 0xd1, 0x6b, 0xb7, 0x78, 0x88, 0xde, 0xaa, 0x7e, 0xfe, 0xe5, 0x6a, 0xee, + 0xd3, 0xbf, 0xae, 0x0a, 0x4a, 0x83, 0xdb, 0x32, 0x07, 0x60, 0xf4, 0x16, 0xf8, 0x12, 0x95, 0x6f, + 0xa5, 0x52, 0x76, 0xb0, 0x3a, 0x37, 0x65, 0xdb, 0x4b, 0xfe, 0x1e, 0xb4, 0x92, 0x41, 0x13, 0xb5, + 0xa0, 0xf0, 0x00, 0x9f, 0x72, 0x4f, 0x90, 0x4b, 0x74, 0x91, 0x7b, 0x9c, 0xce, 0x5e, 0x54, 0xb8, + 0xfb, 0xff, 0x98, 0x0f, 0x8c, 0x83, 0x68, 0x89, 0x5e, 0x86, 0x22, 0x79, 0x02, 0xcf, 0x23, 0xd2, + 0xcc, 0x2b, 0xf5, 0xfd, 0xcc, 0xc5, 0xde, 0xe9, 0x13, 0xf2, 0x4e, 0xd4, 0x02, 0x5d, 0x21, 0xc1, + 0x4d, 0x33, 0x4c, 0xd5, 0xd0, 0xf9, 0x73, 0x2a, 0x74, 0xbc, 0xad, 0xa3, 0x3b, 0xd0, 0x1a, 0x58, + 0xa6, 0x8b, 0x4d, 0x77, 0xea, 0xaa, 0x2c, 0x33, 0xf2, 0xec, 0x31, 0x1b, 0x7c, 0x3a, 0xbe, 0xe2, + 0x3e, 0xd5, 0x53, 0x9a, 0x83, 0xb8, 0x00, 0xdd, 0x06, 0x38, 0xd6, 0xc6, 0x86, 0xae, 0x79, 0x96, + 0xe3, 0xb6, 0x8b, 0xd7, 0x0a, 0x73, 0x61, 0xee, 0xf9, 0x2a, 0x77, 0x6d, 0x5d, 0xf3, 0xf0, 0x56, + 0x91, 0xbc, 0xad, 0x12, 0xb1, 0x44, 0x4f, 0x42, 0x53, 0xb3, 0x6d, 0xd5, 0xf5, 0x34, 0x0f, 0xab, + 0x87, 0xa7, 0x1e, 0x76, 0xe9, 0x77, 0x58, 0x52, 0xea, 0x9a, 0x6d, 0x1f, 0x10, 0xe9, 0x16, 0x11, + 0xa2, 0x27, 0xa0, 0x41, 0xf2, 0x87, 0xa1, 0x8d, 0xd5, 0x11, 0x36, 0x86, 0x23, 0x8f, 0xe6, 0x8e, + 0x82, 0x52, 0xe7, 0xd2, 0x1e, 0x15, 0xca, 0x7a, 0xb0, 0x46, 0x69, 0xee, 0x40, 0x08, 0x8a, 0xba, + 0xe6, 0x69, 0xd4, 0x91, 0x4b, 0x0a, 0xbd, 0x26, 0x32, 0x5b, 0xf3, 0x46, 0xdc, 0x3d, 0xf4, 0x1a, + 0x5d, 0x82, 0x32, 0x87, 0x2d, 0x50, 0x58, 0x3e, 0x22, 0xdf, 0xcc, 0x76, 0xac, 0x63, 0xb6, 0xd2, + 0xaa, 0x0a, 0x1b, 0xc8, 0xbf, 0xc8, 0xc3, 0xf2, 0x4c, 0x96, 0x21, 0xb8, 0x23, 0xcd, 0x1d, 0xf9, + 0xcf, 0x22, 0xd7, 0xe8, 0x25, 0x82, 0xab, 0xe9, 0xd8, 0xe1, 0xd9, 0xbd, 0x1d, 0x75, 0x11, 0xab, + 0x6c, 0x7a, 0xf4, 0x3e, 0x77, 0x0d, 0xd7, 0x46, 0x7b, 0xd0, 0x1a, 0x6b, 0xae, 0xbf, 0x34, 0xd5, + 0x48, 0xa6, 0x9f, 0xcd, 0x55, 0x3b, 0x9a, 0x1f, 0xe7, 0xc9, 0x36, 0xe4, 0x40, 0x8d, 0x71, 0x4c, + 0x8a, 0x14, 0xb8, 0x78, 0x78, 0xfa, 0x50, 0x33, 0x3d, 0xc3, 0xc4, 0xea, 0xcc, 0x97, 0xbb, 0x32, + 0x03, 0xda, 0x3d, 0x36, 0x74, 0x6c, 0x0e, 0xfc, 0x4f, 0x76, 0x21, 0x30, 0x0e, 0x3e, 0xa9, 0x2b, + 0x2b, 0xd0, 0x88, 0xe7, 0x49, 0xd4, 0x80, 0xbc, 0x77, 0xc2, 0x1d, 0x90, 0xf7, 0x4e, 0xd0, 0x77, + 0xa0, 0x48, 0x26, 0x49, 0x27, 0xdf, 0x98, 0x53, 0xa4, 0x70, 0xbb, 0xfe, 0xa9, 0x8d, 0x15, 0xaa, + 0x29, 0xcb, 0xc1, 0x6e, 0x08, 0x72, 0x67, 0x12, 0x55, 0x7e, 0x06, 0x9a, 0x89, 0xe4, 0x18, 0xf9, + 0x7e, 0x42, 0xf4, 0xfb, 0xc9, 0x4d, 0xa8, 0xc7, 0x32, 0xa1, 0x7c, 0x09, 0x2e, 0xce, 0x4b, 0x6c, + 0xf2, 0x28, 0x90, 0xc7, 0x12, 0x14, 0xba, 0x09, 0xd5, 0x20, 0xb3, 0x09, 0x3c, 0x40, 0x24, 0x67, + 0xe1, 0x2b, 0x2b, 0x81, 0x2a, 0xd9, 0x86, 0x64, 0x59, 0xd3, 0xf5, 0x90, 0xa7, 0x2f, 0x5e, 0xd1, + 0x6c, 0xbb, 0xa7, 0xb9, 0x23, 0xf9, 0x3d, 0x68, 0xa7, 0x65, 0xad, 0xc4, 0x34, 0x8a, 0xc1, 0x32, + 0xbc, 0x04, 0xe5, 0x23, 0xcb, 0x99, 0x68, 0x1e, 0x05, 0xab, 0x2b, 0x7c, 0x44, 0x96, 0x27, 0xcb, + 0x60, 0x05, 0x2a, 0x66, 0x03, 0x59, 0x85, 0x2b, 0xa9, 0x99, 0x8b, 0x98, 0x18, 0xa6, 0x8e, 0x99, + 0x3f, 0xeb, 0x0a, 0x1b, 0x84, 0x40, 0xec, 0x65, 0xd9, 0x80, 0x3c, 0xd6, 0xa5, 0x73, 0xa5, 0xf8, + 0xa2, 0xc2, 0x47, 0xf2, 0xdf, 0x05, 0xb8, 0x34, 0x3f, 0x7f, 0xa1, 0x9b, 0x00, 0x2c, 0xd4, 0x07, + 0xdb, 0xae, 0xb6, 0x71, 0x69, 0x76, 0xd1, 0xdf, 0xd2, 0x3c, 0x4d, 0x11, 0xa9, 0x26, 0xb9, 0x24, + 0x61, 0x20, 0x34, 0x53, 0x5d, 0xe3, 0x21, 0x5b, 0x33, 0x05, 0xa5, 0x1e, 0xe8, 0x1c, 0x18, 0x0f, + 0xe3, 0xe1, 0xad, 0x10, 0x0f, 0x6f, 0xa1, 0xef, 0x8a, 0xb1, 0x2d, 0xec, 0xc7, 0xd2, 0xd2, 0x79, + 0x63, 0xa9, 0xfc, 0x51, 0x74, 0x9a, 0xb1, 0xec, 0x19, 0xd9, 0xd7, 0xc2, 0xb9, 0xf6, 0x75, 0xdc, + 0x3d, 0xf9, 0x8c, 0xee, 0x91, 0x7f, 0x05, 0x50, 0x55, 0xb0, 0x6b, 0x93, 0x20, 0x8c, 0xb6, 0x40, + 0xc4, 0x27, 0x03, 0xcc, 0x8a, 0x78, 0x21, 0xb5, 0x08, 0x66, 0xda, 0x5d, 0x5f, 0x93, 0x54, 0xa0, + 0x81, 0x19, 0x7a, 0x91, 0x13, 0x95, 0x74, 0xce, 0xc1, 0xcd, 0xa3, 0x4c, 0xe5, 0x25, 0x9f, 0xa9, + 0x14, 0x52, 0x8b, 0x4e, 0x66, 0x95, 0xa0, 0x2a, 0x2f, 0x72, 0xaa, 0x52, 0x5c, 0xf0, 0xb0, 0x18, + 0x57, 0xe9, 0xc4, 0xb8, 0x4a, 0x69, 0xc1, 0x34, 0x53, 0xc8, 0x4a, 0x27, 0x46, 0x56, 0xca, 0x0b, + 0x40, 0x52, 0xd8, 0xca, 0x4b, 0x3e, 0x5b, 0xa9, 0x2c, 0x98, 0x76, 0x82, 0xae, 0xdc, 0x8e, 0xd3, + 0x15, 0x46, 0x35, 0xae, 0xa7, 0x5a, 0xa7, 0xf2, 0x95, 0xef, 0x47, 0xf8, 0x8a, 0x98, 0x4a, 0x16, + 0x18, 0xc8, 0x1c, 0xc2, 0xd2, 0x89, 0x11, 0x16, 0x58, 0xe0, 0x83, 0x14, 0xc6, 0xf2, 0x46, 0x94, + 0xb1, 0xd4, 0x52, 0x49, 0x0f, 0x5f, 0x34, 0xf3, 0x28, 0xcb, 0x2b, 0x01, 0x65, 0x59, 0x4a, 0xe5, + 0x5c, 0x7c, 0x0e, 0x49, 0xce, 0xb2, 0x37, 0xc3, 0x59, 0x18, 0xc7, 0x78, 0x32, 0x15, 0x62, 0x01, + 0x69, 0xd9, 0x9b, 0x21, 0x2d, 0x8d, 0x05, 0x80, 0x0b, 0x58, 0xcb, 0xcf, 0xe6, 0xb3, 0x96, 0x74, + 0x5e, 0xc1, 0x5f, 0x33, 0x1b, 0x6d, 0x51, 0x53, 0x68, 0x0b, 0xa3, 0x16, 0xcf, 0xa6, 0xc2, 0x67, + 0xe6, 0x2d, 0x77, 0xe7, 0xf0, 0x16, 0xc6, 0x30, 0x9e, 0x4e, 0x05, 0xcf, 0x40, 0x5c, 0xee, 0xce, + 0x21, 0x2e, 0x68, 0x21, 0x6c, 0x76, 0xe6, 0xf2, 0x0c, 0xa9, 0xc2, 0x12, 0x61, 0x8e, 0x64, 0x32, + 0xec, 0x38, 0x96, 0xc3, 0x2b, 0x6f, 0x36, 0x90, 0x9f, 0x26, 0x75, 0x61, 0x18, 0xd2, 0xce, 0x60, + 0x39, 0xb4, 0x62, 0x88, 0x84, 0x31, 0xf9, 0xb7, 0x42, 0x68, 0x4b, 0x4b, 0xa9, 0x68, 0x4d, 0x29, + 0xf2, 0x9a, 0x32, 0xc2, 0x7d, 0xf2, 0x71, 0xee, 0xb3, 0x0a, 0x35, 0x52, 0x09, 0x24, 0x68, 0x8d, + 0x66, 0x07, 0xb4, 0xe6, 0x06, 0x2c, 0xd3, 0x52, 0x8f, 0xe5, 0x85, 0x58, 0x0a, 0x6b, 0x92, 0x1b, + 0x6c, 0x2b, 0xb1, 0x5c, 0xf6, 0x3c, 0x5c, 0x88, 0xe8, 0x06, 0x15, 0x06, 0xab, 0x98, 0x5b, 0x81, + 0xf6, 0x26, 0x2f, 0x35, 0xde, 0x0e, 0x1d, 0x14, 0x12, 0x13, 0x04, 0xc5, 0x81, 0xa5, 0x63, 0x9e, + 0xff, 0xe9, 0x35, 0x21, 0x2b, 0x63, 0x6b, 0xc8, 0x33, 0x2a, 0xb9, 0x24, 0x5a, 0x41, 0xcc, 0x16, + 0x59, 0x48, 0x96, 0xff, 0x20, 0x84, 0x78, 0x21, 0x57, 0x99, 0x47, 0x2b, 0x84, 0xff, 0x0e, 0xad, + 0xc8, 0x7f, 0x63, 0x5a, 0x11, 0xad, 0xbf, 0x0a, 0xf1, 0xfa, 0xeb, 0x9f, 0x42, 0xf8, 0x85, 0x03, + 0x92, 0xf0, 0xcd, 0x3c, 0x12, 0x16, 0x53, 0x25, 0xfa, 0xbd, 0x78, 0x31, 0xc5, 0xa9, 0x5f, 0x99, + 0x3e, 0x37, 0x4e, 0xfd, 0x2a, 0xac, 0xbc, 0xa2, 0x03, 0xf4, 0x32, 0x88, 0xb4, 0xf5, 0xa9, 0x5a, + 0xb6, 0xcb, 0xd3, 0xc3, 0xa3, 0xd1, 0xb9, 0xb2, 0x0e, 0xe7, 0xda, 0x3e, 0xd1, 0xd9, 0xb3, 0x5d, + 0xa5, 0x6a, 0xf3, 0xab, 0x48, 0xad, 0x23, 0xc6, 0x6a, 0x9d, 0xab, 0x20, 0x92, 0xb7, 0x77, 0x6d, + 0x6d, 0x80, 0x69, 0xa8, 0x17, 0x95, 0x50, 0x20, 0xdf, 0x07, 0x34, 0x9b, 0x6c, 0x50, 0x0f, 0xca, + 0xf8, 0x18, 0x9b, 0x1e, 0xf9, 0x6a, 0x85, 0x64, 0x39, 0xc2, 0xb9, 0x00, 0x36, 0xbd, 0xad, 0x36, + 0x71, 0xf2, 0x3f, 0xbe, 0x5c, 0x6d, 0x31, 0xed, 0xe7, 0xac, 0x89, 0xe1, 0xe1, 0x89, 0xed, 0x9d, + 0x2a, 0xdc, 0x5e, 0xfe, 0x4b, 0x9e, 0x14, 0xe6, 0xb1, 0x44, 0x34, 0xd7, 0xb7, 0xfe, 0x06, 0xca, + 0x47, 0x48, 0x59, 0x36, 0x7f, 0xaf, 0x00, 0x0c, 0x35, 0x57, 0xfd, 0x50, 0x33, 0x3d, 0xac, 0x73, + 0xa7, 0x47, 0x24, 0x48, 0x82, 0x2a, 0x19, 0x4d, 0x5d, 0xac, 0x73, 0x7e, 0x18, 0x8c, 0x23, 0xf3, + 0xac, 0x7c, 0xbb, 0x79, 0xc6, 0xbd, 0x5c, 0x4d, 0x78, 0x39, 0x52, 0x34, 0x8b, 0xd1, 0xa2, 0x99, + 0xbc, 0x9b, 0xed, 0x18, 0x96, 0x63, 0x78, 0xa7, 0xf4, 0xd3, 0x14, 0x94, 0x60, 0x8c, 0xae, 0x43, + 0x7d, 0x82, 0x27, 0xb6, 0x65, 0x8d, 0x55, 0x16, 0xbc, 0x6a, 0xd4, 0x74, 0x89, 0x0b, 0xbb, 0x34, + 0x86, 0xfd, 0x32, 0x1f, 0x6e, 0xbf, 0x90, 0x1c, 0xfd, 0xdf, 0x39, 0x58, 0xfe, 0x75, 0x81, 0x70, + 0xc4, 0x78, 0xa9, 0x81, 0x0e, 0x60, 0x39, 0xd8, 0xfe, 0xea, 0x94, 0x86, 0x05, 0x7f, 0x41, 0x67, + 0x8d, 0x1f, 0xad, 0xe3, 0xb8, 0xd8, 0x45, 0x3f, 0x82, 0xcb, 0x89, 0xd0, 0x16, 0x40, 0xe7, 0x33, + 0x46, 0xb8, 0x47, 0xe2, 0x11, 0xce, 0x47, 0x0e, 0x7d, 0x55, 0xf8, 0x96, 0xbe, 0xfa, 0xdf, 0xed, + 0x8a, 0x6d, 0x43, 0x23, 0x5e, 0xd2, 0xcd, 0x5d, 0x97, 0xd7, 0xa1, 0xee, 0x60, 0x8f, 0x50, 0xba, + 0x58, 0x03, 0x66, 0x89, 0x09, 0x79, 0x5b, 0x67, 0x1f, 0x1e, 0x99, 0x5b, 0xda, 0xa1, 0xef, 0x82, + 0x18, 0x56, 0x85, 0x42, 0x4a, 0x2f, 0x23, 0xe0, 0xe7, 0xa1, 0xae, 0xfc, 0x7b, 0x21, 0x84, 0x8c, + 0x33, 0xfe, 0x2e, 0x94, 0x1d, 0xec, 0x4e, 0xc7, 0x8c, 0x83, 0x37, 0x36, 0x9e, 0xcf, 0x56, 0x14, + 0x12, 0xe9, 0x74, 0xec, 0x29, 0xdc, 0x58, 0xbe, 0x0f, 0x65, 0x26, 0x41, 0x35, 0xa8, 0xdc, 0xdd, + 0xbd, 0xb3, 0xbb, 0xf7, 0xce, 0x6e, 0x2b, 0x87, 0x00, 0xca, 0x9b, 0x9d, 0x4e, 0x77, 0xbf, 0xdf, + 0x12, 0x90, 0x08, 0xa5, 0xcd, 0xad, 0x3d, 0xa5, 0xdf, 0xca, 0x13, 0xb1, 0xd2, 0x7d, 0xab, 0xdb, + 0xe9, 0xb7, 0x0a, 0x68, 0x19, 0xea, 0xec, 0x5a, 0xbd, 0xbd, 0xa7, 0xbc, 0xbd, 0xd9, 0x6f, 0x15, + 0x23, 0xa2, 0x83, 0xee, 0xee, 0xad, 0xae, 0xd2, 0x2a, 0xc9, 0x2f, 0x10, 0x92, 0x9f, 0x52, 0x46, + 0x86, 0x74, 0x5e, 0x88, 0xd0, 0x79, 0xf9, 0xd3, 0x3c, 0x48, 0xe9, 0xb5, 0x21, 0x7a, 0x2b, 0x31, + 0xf1, 0x8d, 0x73, 0x14, 0x96, 0x89, 0xd9, 0xa3, 0x27, 0xa0, 0xe1, 0xe0, 0x23, 0xec, 0x0d, 0x46, + 0xac, 0x56, 0x65, 0xb9, 0xbc, 0xae, 0xd4, 0xb9, 0x94, 0x1a, 0xb9, 0x4c, 0xed, 0x7d, 0x3c, 0xf0, + 0x54, 0x16, 0x24, 0xd9, 0x76, 0x10, 0x89, 0x1a, 0x91, 0x1e, 0x30, 0xa1, 0xfc, 0xde, 0xb9, 0x7c, + 0x29, 0x42, 0x49, 0xe9, 0xf6, 0x95, 0x1f, 0xb7, 0x0a, 0x08, 0x41, 0x83, 0x5e, 0xaa, 0x07, 0xbb, + 0x9b, 0xfb, 0x07, 0xbd, 0x3d, 0xe2, 0xcb, 0x0b, 0xd0, 0xf4, 0x7d, 0xe9, 0x0b, 0x4b, 0xf2, 0x3e, + 0x5c, 0x4e, 0x29, 0x6c, 0xbf, 0x61, 0x47, 0x43, 0xfe, 0x8d, 0x10, 0x85, 0x8c, 0x77, 0x0f, 0xde, + 0x4c, 0x78, 0x7a, 0x3d, 0x6b, 0x39, 0x9c, 0x74, 0xb3, 0x04, 0x55, 0xcc, 0x1b, 0x75, 0xd4, 0xc1, + 0x4b, 0x4a, 0x30, 0x96, 0x9f, 0x5f, 0xec, 0xb4, 0x70, 0xd5, 0xe5, 0xe5, 0x7f, 0x0b, 0xd0, 0x4c, + 0x04, 0x2f, 0xb4, 0x01, 0x25, 0xc6, 0xf8, 0xd2, 0xfe, 0x67, 0xd2, 0xd8, 0xcb, 0x23, 0x1d, 0x53, + 0x45, 0xaf, 0xc5, 0x5e, 0x69, 0x26, 0x48, 0x32, 0x67, 0xf9, 0xdd, 0x45, 0x6e, 0x1a, 0x58, 0xa0, + 0xd7, 0x41, 0x0c, 0xa2, 0x30, 0x6f, 0x33, 0x3c, 0x3e, 0x6b, 0x1e, 0xc4, 0x6f, 0x6e, 0x1f, 0xda, + 0xa0, 0x57, 0xc2, 0x42, 0xbc, 0x38, 0xcb, 0x33, 0xb9, 0x39, 0x53, 0xe0, 0xc6, 0xbe, 0xbe, 0xdc, + 0x81, 0x5a, 0x64, 0x3e, 0xe8, 0x51, 0x10, 0x27, 0xda, 0x09, 0xef, 0x49, 0xb3, 0xae, 0x62, 0x75, + 0xa2, 0x9d, 0xb0, 0x76, 0xf4, 0x65, 0xa8, 0x90, 0x9b, 0x43, 0xcd, 0xe5, 0x7d, 0xaa, 0xf2, 0x44, + 0x3b, 0x79, 0x53, 0x73, 0xe5, 0x77, 0xa1, 0x11, 0xef, 0xc7, 0x92, 0xbd, 0xe8, 0x58, 0x53, 0x53, + 0xa7, 0x18, 0x25, 0x85, 0x0d, 0xd0, 0x4d, 0x28, 0x1d, 0x5b, 0x2c, 0x91, 0xcc, 0x0f, 0x5a, 0xf7, + 0x2c, 0x0f, 0x47, 0xfa, 0xb9, 0x4c, 0x5b, 0x7e, 0x08, 0x25, 0x9a, 0x18, 0x48, 0x28, 0xa5, 0x9d, + 0x55, 0x4e, 0x42, 0xc8, 0x35, 0x7a, 0x17, 0x40, 0xf3, 0x3c, 0xc7, 0x38, 0x9c, 0x86, 0xc0, 0xab, + 0xf3, 0x13, 0xcb, 0xa6, 0xaf, 0xb7, 0x75, 0x95, 0x67, 0x98, 0x8b, 0xa1, 0x69, 0x24, 0xcb, 0x44, + 0x00, 0xe5, 0x5d, 0x68, 0xc4, 0x6d, 0xa3, 0xff, 0x38, 0x96, 0xe6, 0xfc, 0xe3, 0x08, 0x0a, 0xdd, + 0xa0, 0x4c, 0x2e, 0xb0, 0x2e, 0x3a, 0x1d, 0xc8, 0x1f, 0x0b, 0x50, 0xed, 0x9f, 0xf0, 0x35, 0x9a, + 0xd2, 0xc0, 0x0d, 0x4d, 0xf3, 0xd1, 0x76, 0x25, 0xeb, 0x08, 0x17, 0x82, 0x3e, 0xf3, 0x1b, 0xc1, + 0x86, 0x2a, 0x66, 0xed, 0x6f, 0xf8, 0x8d, 0x39, 0x1e, 0xae, 0x5f, 0x05, 0x31, 0x58, 0x55, 0x84, + 0xcd, 0x69, 0xba, 0xee, 0x60, 0xd7, 0xe5, 0x73, 0xf3, 0x87, 0xf4, 0x7f, 0x80, 0xf5, 0x21, 0x6f, + 0x88, 0x16, 0x14, 0x36, 0x90, 0x75, 0x68, 0x26, 0x4a, 0x0a, 0xf4, 0x2a, 0x54, 0xec, 0xe9, 0xa1, + 0xea, 0xbb, 0x27, 0xb1, 0x79, 0xfc, 0xca, 0x7e, 0x7a, 0x38, 0x36, 0x06, 0x77, 0xf0, 0xa9, 0xff, + 0x32, 0xf6, 0xf4, 0xf0, 0x0e, 0xf3, 0x22, 0x7b, 0x4a, 0x3e, 0xfa, 0x94, 0x63, 0xa8, 0xfa, 0x8b, + 0x02, 0xfd, 0x20, 0xba, 0x4f, 0xfc, 0xbf, 0x44, 0xa9, 0x65, 0x0e, 0x87, 0x8f, 0x6c, 0x93, 0x1b, + 0xb0, 0xec, 0x1a, 0x43, 0x13, 0xeb, 0x6a, 0xc8, 0x27, 0xe9, 0xd3, 0xaa, 0x4a, 0x93, 0xdd, 0xd8, + 0xf1, 0xc9, 0xa4, 0xfc, 0x2f, 0x01, 0xaa, 0xfe, 0x86, 0x45, 0x2f, 0x44, 0xd6, 0x5d, 0x63, 0x4e, + 0x2f, 0xcf, 0x57, 0x0c, 0x5b, 0xfa, 0xf1, 0x77, 0xcd, 0x9f, 0xff, 0x5d, 0xd3, 0xfe, 0xcd, 0xf8, + 0x8d, 0xdd, 0xe2, 0xb9, 0x7f, 0x92, 0x3d, 0x07, 0xc8, 0xb3, 0x3c, 0x6d, 0xac, 0x1e, 0x5b, 0x9e, + 0x61, 0x0e, 0x55, 0xe6, 0x6c, 0x56, 0xed, 0xb6, 0xe8, 0x9d, 0x7b, 0xf4, 0xc6, 0x3e, 0xf5, 0xfb, + 0xcf, 0x05, 0xa8, 0x06, 0xd5, 0xc1, 0x79, 0x3b, 0xf4, 0x97, 0xa0, 0xcc, 0x13, 0x20, 0x6b, 0xd1, + 0xf3, 0x51, 0xf0, 0xb3, 0xa8, 0x18, 0xf9, 0x59, 0x24, 0x41, 0x75, 0x82, 0x3d, 0x8d, 0xe6, 0x19, + 0x46, 0xe9, 0x83, 0xf1, 0x8d, 0x57, 0xa0, 0x16, 0xf9, 0x59, 0x42, 0x76, 0xde, 0x6e, 0xf7, 0x9d, + 0x56, 0x4e, 0xaa, 0x7c, 0xfc, 0xd9, 0xb5, 0xc2, 0x2e, 0xfe, 0x90, 0xac, 0x59, 0xa5, 0xdb, 0xe9, + 0x75, 0x3b, 0x77, 0x5a, 0x82, 0x54, 0xfb, 0xf8, 0xb3, 0x6b, 0x15, 0x05, 0xd3, 0x16, 0xe0, 0x8d, + 0x1e, 0x2c, 0x45, 0xbf, 0x4a, 0x3c, 0x1d, 0x20, 0x68, 0xdc, 0xba, 0xbb, 0xbf, 0xb3, 0xdd, 0xd9, + 0xec, 0x77, 0xd5, 0x7b, 0x7b, 0xfd, 0x6e, 0x4b, 0x40, 0x97, 0xe1, 0xc2, 0xce, 0xf6, 0x9b, 0xbd, + 0xbe, 0xda, 0xd9, 0xd9, 0xee, 0xee, 0xf6, 0xd5, 0xcd, 0x7e, 0x7f, 0xb3, 0x73, 0xa7, 0x95, 0xdf, + 0xf8, 0x53, 0x0d, 0x9a, 0x9b, 0x5b, 0x9d, 0x6d, 0x92, 0xff, 0x8d, 0x81, 0xc6, 0x5b, 0xac, 0x45, + 0xda, 0x51, 0x39, 0xf3, 0xb0, 0x8b, 0x74, 0x76, 0x87, 0x19, 0xdd, 0x86, 0x12, 0x6d, 0xb6, 0xa0, + 0xb3, 0x4f, 0xbf, 0x48, 0x0b, 0x5a, 0xce, 0xe4, 0x65, 0xe8, 0xf6, 0x38, 0xf3, 0x38, 0x8c, 0x74, + 0x76, 0x07, 0x1a, 0x29, 0x20, 0x86, 0xdd, 0x92, 0xc5, 0xc7, 0x63, 0xa4, 0x0c, 0x5d, 0x69, 0x82, + 0x19, 0x52, 0xb6, 0xc5, 0xc7, 0x45, 0xa4, 0x0c, 0x01, 0x0c, 0xed, 0x40, 0xc5, 0x67, 0xd9, 0x8b, + 0x0e, 0xb0, 0x48, 0x0b, 0x3b, 0xc6, 0xe4, 0x13, 0xb0, 0x6e, 0xc8, 0xd9, 0xa7, 0x71, 0xa4, 0x05, + 0xed, 0x6f, 0xb4, 0x0d, 0x65, 0x5e, 0xed, 0x2f, 0x38, 0x94, 0x22, 0x2d, 0xea, 0x00, 0x13, 0xa7, + 0x85, 0x6d, 0xa6, 0xc5, 0x67, 0x8c, 0xa4, 0x0c, 0x9d, 0x7d, 0x74, 0x17, 0x20, 0xd2, 0xfb, 0xc8, + 0x70, 0x78, 0x48, 0xca, 0xd2, 0xb1, 0x47, 0x7b, 0x50, 0x0d, 0xa8, 0xe8, 0xc2, 0xa3, 0x3c, 0xd2, + 0xe2, 0xd6, 0x39, 0xba, 0x0f, 0xf5, 0x38, 0xd3, 0xc9, 0x76, 0x40, 0x47, 0xca, 0xd8, 0x13, 0x27, + 0xf8, 0x71, 0xda, 0x93, 0xed, 0xc0, 0x8e, 0x94, 0xb1, 0x45, 0x8e, 0xde, 0x87, 0xe5, 0x59, 0x5a, + 0x92, 0xfd, 0xfc, 0x8e, 0x74, 0x8e, 0xa6, 0x39, 0x9a, 0x00, 0x9a, 0x43, 0x67, 0xce, 0x71, 0x9c, + 0x47, 0x3a, 0x4f, 0x0f, 0x1d, 0xe9, 0xd0, 0x4c, 0x72, 0x84, 0xac, 0xc7, 0x7b, 0xa4, 0xcc, 0xfd, + 0x74, 0xf6, 0x94, 0x38, 0x6d, 0xc8, 0x7a, 0xdc, 0x47, 0xca, 0xdc, 0x5e, 0xdf, 0xea, 0x7e, 0xfe, + 0xd5, 0x8a, 0xf0, 0xc5, 0x57, 0x2b, 0xc2, 0xdf, 0xbe, 0x5a, 0x11, 0x3e, 0xf9, 0x7a, 0x25, 0xf7, + 0xc5, 0xd7, 0x2b, 0xb9, 0x3f, 0x7f, 0xbd, 0x92, 0xfb, 0xc9, 0xb3, 0x43, 0xc3, 0x1b, 0x4d, 0x0f, + 0xd7, 0x06, 0xd6, 0x64, 0x3d, 0x7a, 0xae, 0x72, 0xde, 0x59, 0xcf, 0xc3, 0x32, 0x4d, 0xba, 0x2f, + 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0x48, 0xa6, 0x8c, 0x1f, 0x0b, 0x2a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4878,6 +4894,22 @@ func (m *RequestInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + n18, err18 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TimeoutCommit, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutCommit):]) + if err18 != nil { + return 0, err18 + } + i -= n18 + i = encodeVarintTypes(dAtA, i, uint64(n18)) + i-- + dAtA[i] = 0x2a + n19, err19 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TimeoutPropose, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutPropose):]) + if err19 != nil { + return 0, err19 + } + i -= n19 + i = encodeVarintTypes(dAtA, i, uint64(n19)) + i-- + dAtA[i] = 0x22 if m.P2PVersion != 0 { i = encodeVarintTypes(dAtA, i, uint64(m.P2PVersion)) i-- @@ -5000,12 +5032,12 @@ func (m *RequestInitChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - n19, err19 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err19 != nil { - return 0, err19 + n21, err21 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err21 != nil { + return 0, err21 } - i -= n19 - i = encodeVarintTypes(dAtA, i, uint64(n19)) + i -= n21 + i = encodeVarintTypes(dAtA, i, uint64(n21)) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -5408,12 +5440,12 @@ func (m *RequestPrepareProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l - n23, err23 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err23 != nil { - return 0, err23 + n25, err25 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err25 != nil { + return 0, err25 } - i -= n23 - i = encodeVarintTypes(dAtA, i, uint64(n23)) + i -= n25 + i = encodeVarintTypes(dAtA, i, uint64(n25)) i-- dAtA[i] = 0x2a if m.Height != 0 { @@ -6465,20 +6497,20 @@ func (m *ResponseEndBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n47, err47 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TimeoutCommit, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutCommit):]) - if err47 != nil { - return 0, err47 + n49, err49 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TimeoutCommit, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutCommit):]) + if err49 != nil { + return 0, err49 } - i -= n47 - i = encodeVarintTypes(dAtA, i, uint64(n47)) + i -= n49 + i = encodeVarintTypes(dAtA, i, uint64(n49)) i-- dAtA[i] = 0x2a - n48, err48 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TimeoutPropose, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutPropose):]) - if err48 != nil { - return 0, err48 + n50, err50 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TimeoutPropose, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutPropose):]) + if err50 != nil { + return 0, err50 } - i -= n48 - i = encodeVarintTypes(dAtA, i, uint64(n48)) + i -= n50 + i = encodeVarintTypes(dAtA, i, uint64(n50)) i-- dAtA[i] = 0x22 if len(m.Events) > 0 { @@ -6684,20 +6716,20 @@ func (m *ResponseApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, err } } if len(m.RefetchChunks) > 0 { - dAtA51 := make([]byte, len(m.RefetchChunks)*10) - var j50 int + dAtA53 := make([]byte, len(m.RefetchChunks)*10) + var j52 int for _, num := range m.RefetchChunks { for num >= 1<<7 { - dAtA51[j50] = uint8(uint64(num)&0x7f | 0x80) + dAtA53[j52] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j50++ + j52++ } - dAtA51[j50] = uint8(num) - j50++ + dAtA53[j52] = uint8(num) + j52++ } - i -= j50 - copy(dAtA[i:], dAtA51[:j50]) - i = encodeVarintTypes(dAtA, i, uint64(j50)) + i -= j52 + copy(dAtA[i:], dAtA53[:j52]) + i = encodeVarintTypes(dAtA, i, uint64(j52)) i-- dAtA[i] = 0x12 } @@ -7209,12 +7241,12 @@ func (m *Evidence) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x28 } - n60, err60 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err60 != nil { - return 0, err60 + n62, err62 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err62 != nil { + return 0, err62 } - i -= n60 - i = encodeVarintTypes(dAtA, i, uint64(n60)) + i -= n62 + i = encodeVarintTypes(dAtA, i, uint64(n62)) i-- dAtA[i] = 0x22 if m.Height != 0 { @@ -7557,6 +7589,10 @@ func (m *RequestInfo) Size() (n int) { if m.P2PVersion != 0 { n += 1 + sovTypes(uint64(m.P2PVersion)) } + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutPropose) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutCommit) + n += 1 + l + sovTypes(uint64(l)) return n } @@ -9523,6 +9559,72 @@ func (m *RequestInfo) Unmarshal(dAtA []byte) error { break } } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutPropose", 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 + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TimeoutPropose, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutCommit", 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 + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TimeoutCommit, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index dd6cbd13fd..a781ffc4a5 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -49,9 +49,11 @@ message RequestEcho { message RequestFlush {} message RequestInfo { - string version = 1; - uint64 block_version = 2; - uint64 p2p_version = 3; + string version = 1; + uint64 block_version = 2; + uint64 p2p_version = 3; + google.protobuf.Duration timeout_propose = 4 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + google.protobuf.Duration timeout_commit = 5 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; } // nondeterministic From 7b3618b5abf010327534940441c7a16f7d699f88 Mon Sep 17 00:00:00 2001 From: sanaz Date: Fri, 20 Sep 2024 08:01:54 -0700 Subject: [PATCH 09/87] consolidates timeouts inside one protobuf message type --- abci/types/types.pb.go | 887 +++++++++++++++++------------- proto/tendermint/abci/types.proto | 17 +- state/execution.go | 4 +- 3 files changed, 525 insertions(+), 383 deletions(-) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index fbfd136ffb..46b484720a 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -121,7 +121,7 @@ func (x ResponseOfferSnapshot_Result) String() string { } func (ResponseOfferSnapshot_Result) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{32, 0} + return fileDescriptor_252557cfdd89a31a, []int{33, 0} } type ResponseApplySnapshotChunk_Result int32 @@ -158,7 +158,7 @@ func (x ResponseApplySnapshotChunk_Result) String() string { } func (ResponseApplySnapshotChunk_Result) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{34, 0} + return fileDescriptor_252557cfdd89a31a, []int{35, 0} } type ResponseProcessProposal_Result int32 @@ -186,7 +186,7 @@ func (x ResponseProcessProposal_Result) String() string { } func (ResponseProcessProposal_Result) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{36, 0} + return fileDescriptor_252557cfdd89a31a, []int{37, 0} } type Request struct { @@ -549,19 +549,70 @@ func (m *RequestFlush) XXX_DiscardUnknown() { var xxx_messageInfo_RequestFlush proto.InternalMessageInfo +type TimeoutsInfo struct { + TimeoutPropose time.Duration `protobuf:"bytes,1,opt,name=timeout_propose,json=timeoutPropose,proto3,stdduration" json:"timeout_propose"` + TimeoutCommit time.Duration `protobuf:"bytes,2,opt,name=timeout_commit,json=timeoutCommit,proto3,stdduration" json:"timeout_commit"` +} + +func (m *TimeoutsInfo) Reset() { *m = TimeoutsInfo{} } +func (m *TimeoutsInfo) String() string { return proto.CompactTextString(m) } +func (*TimeoutsInfo) ProtoMessage() {} +func (*TimeoutsInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_252557cfdd89a31a, []int{3} +} +func (m *TimeoutsInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TimeoutsInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TimeoutsInfo.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 *TimeoutsInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_TimeoutsInfo.Merge(m, src) +} +func (m *TimeoutsInfo) XXX_Size() int { + return m.Size() +} +func (m *TimeoutsInfo) XXX_DiscardUnknown() { + xxx_messageInfo_TimeoutsInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_TimeoutsInfo proto.InternalMessageInfo + +func (m *TimeoutsInfo) GetTimeoutPropose() time.Duration { + if m != nil { + return m.TimeoutPropose + } + return 0 +} + +func (m *TimeoutsInfo) GetTimeoutCommit() time.Duration { + if m != nil { + return m.TimeoutCommit + } + return 0 +} + type RequestInfo struct { - Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` - BlockVersion uint64 `protobuf:"varint,2,opt,name=block_version,json=blockVersion,proto3" json:"block_version,omitempty"` - P2PVersion uint64 `protobuf:"varint,3,opt,name=p2p_version,json=p2pVersion,proto3" json:"p2p_version,omitempty"` - TimeoutPropose time.Duration `protobuf:"bytes,4,opt,name=timeout_propose,json=timeoutPropose,proto3,stdduration" json:"timeout_propose"` - TimeoutCommit time.Duration `protobuf:"bytes,5,opt,name=timeout_commit,json=timeoutCommit,proto3,stdduration" json:"timeout_commit"` + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + BlockVersion uint64 `protobuf:"varint,2,opt,name=block_version,json=blockVersion,proto3" json:"block_version,omitempty"` + P2PVersion uint64 `protobuf:"varint,3,opt,name=p2p_version,json=p2pVersion,proto3" json:"p2p_version,omitempty"` + Timeouts *TimeoutsInfo `protobuf:"bytes,4,opt,name=timeouts,proto3" json:"timeouts,omitempty"` } func (m *RequestInfo) Reset() { *m = RequestInfo{} } func (m *RequestInfo) String() string { return proto.CompactTextString(m) } func (*RequestInfo) ProtoMessage() {} func (*RequestInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{3} + return fileDescriptor_252557cfdd89a31a, []int{4} } func (m *RequestInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -611,18 +662,11 @@ func (m *RequestInfo) GetP2PVersion() uint64 { return 0 } -func (m *RequestInfo) GetTimeoutPropose() time.Duration { +func (m *RequestInfo) GetTimeouts() *TimeoutsInfo { if m != nil { - return m.TimeoutPropose + return m.Timeouts } - return 0 -} - -func (m *RequestInfo) GetTimeoutCommit() time.Duration { - if m != nil { - return m.TimeoutCommit - } - return 0 + return nil } // nondeterministic @@ -635,7 +679,7 @@ func (m *RequestSetOption) Reset() { *m = RequestSetOption{} } func (m *RequestSetOption) String() string { return proto.CompactTextString(m) } func (*RequestSetOption) ProtoMessage() {} func (*RequestSetOption) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{4} + return fileDescriptor_252557cfdd89a31a, []int{5} } func (m *RequestSetOption) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -691,7 +735,7 @@ func (m *RequestInitChain) Reset() { *m = RequestInitChain{} } func (m *RequestInitChain) String() string { return proto.CompactTextString(m) } func (*RequestInitChain) ProtoMessage() {} func (*RequestInitChain) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{5} + return fileDescriptor_252557cfdd89a31a, []int{6} } func (m *RequestInitChain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -773,7 +817,7 @@ func (m *RequestQuery) Reset() { *m = RequestQuery{} } func (m *RequestQuery) String() string { return proto.CompactTextString(m) } func (*RequestQuery) ProtoMessage() {} func (*RequestQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{6} + return fileDescriptor_252557cfdd89a31a, []int{7} } func (m *RequestQuery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -841,7 +885,7 @@ func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} } func (m *RequestBeginBlock) String() string { return proto.CompactTextString(m) } func (*RequestBeginBlock) ProtoMessage() {} func (*RequestBeginBlock) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{7} + return fileDescriptor_252557cfdd89a31a, []int{8} } func (m *RequestBeginBlock) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -907,7 +951,7 @@ func (m *RequestCheckTx) Reset() { *m = RequestCheckTx{} } func (m *RequestCheckTx) String() string { return proto.CompactTextString(m) } func (*RequestCheckTx) ProtoMessage() {} func (*RequestCheckTx) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{8} + return fileDescriptor_252557cfdd89a31a, []int{9} } func (m *RequestCheckTx) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -958,7 +1002,7 @@ func (m *RequestDeliverTx) Reset() { *m = RequestDeliverTx{} } func (m *RequestDeliverTx) String() string { return proto.CompactTextString(m) } func (*RequestDeliverTx) ProtoMessage() {} func (*RequestDeliverTx) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{9} + return fileDescriptor_252557cfdd89a31a, []int{10} } func (m *RequestDeliverTx) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1002,7 +1046,7 @@ func (m *RequestEndBlock) Reset() { *m = RequestEndBlock{} } func (m *RequestEndBlock) String() string { return proto.CompactTextString(m) } func (*RequestEndBlock) ProtoMessage() {} func (*RequestEndBlock) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{10} + return fileDescriptor_252557cfdd89a31a, []int{11} } func (m *RequestEndBlock) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1045,7 +1089,7 @@ func (m *RequestCommit) Reset() { *m = RequestCommit{} } func (m *RequestCommit) String() string { return proto.CompactTextString(m) } func (*RequestCommit) ProtoMessage() {} func (*RequestCommit) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{11} + return fileDescriptor_252557cfdd89a31a, []int{12} } func (m *RequestCommit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1082,7 +1126,7 @@ func (m *RequestListSnapshots) Reset() { *m = RequestListSnapshots{} } func (m *RequestListSnapshots) String() string { return proto.CompactTextString(m) } func (*RequestListSnapshots) ProtoMessage() {} func (*RequestListSnapshots) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{12} + return fileDescriptor_252557cfdd89a31a, []int{13} } func (m *RequestListSnapshots) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1121,7 +1165,7 @@ func (m *RequestOfferSnapshot) Reset() { *m = RequestOfferSnapshot{} } func (m *RequestOfferSnapshot) String() string { return proto.CompactTextString(m) } func (*RequestOfferSnapshot) ProtoMessage() {} func (*RequestOfferSnapshot) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{13} + return fileDescriptor_252557cfdd89a31a, []int{14} } func (m *RequestOfferSnapshot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1175,7 +1219,7 @@ func (m *RequestLoadSnapshotChunk) Reset() { *m = RequestLoadSnapshotChu func (m *RequestLoadSnapshotChunk) String() string { return proto.CompactTextString(m) } func (*RequestLoadSnapshotChunk) ProtoMessage() {} func (*RequestLoadSnapshotChunk) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{14} + return fileDescriptor_252557cfdd89a31a, []int{15} } func (m *RequestLoadSnapshotChunk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1236,7 +1280,7 @@ func (m *RequestApplySnapshotChunk) Reset() { *m = RequestApplySnapshotC func (m *RequestApplySnapshotChunk) String() string { return proto.CompactTextString(m) } func (*RequestApplySnapshotChunk) ProtoMessage() {} func (*RequestApplySnapshotChunk) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{15} + return fileDescriptor_252557cfdd89a31a, []int{16} } func (m *RequestApplySnapshotChunk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1307,7 +1351,7 @@ func (m *RequestPrepareProposal) Reset() { *m = RequestPrepareProposal{} func (m *RequestPrepareProposal) String() string { return proto.CompactTextString(m) } func (*RequestPrepareProposal) ProtoMessage() {} func (*RequestPrepareProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{16} + return fileDescriptor_252557cfdd89a31a, []int{17} } func (m *RequestPrepareProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1380,7 +1424,7 @@ func (m *RequestProcessProposal) Reset() { *m = RequestProcessProposal{} func (m *RequestProcessProposal) String() string { return proto.CompactTextString(m) } func (*RequestProcessProposal) ProtoMessage() {} func (*RequestProcessProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{17} + return fileDescriptor_252557cfdd89a31a, []int{18} } func (m *RequestProcessProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1451,7 +1495,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{18} + return fileDescriptor_252557cfdd89a31a, []int{19} } func (m *Response) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1726,7 +1770,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{19} + return fileDescriptor_252557cfdd89a31a, []int{20} } func (m *ResponseException) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1770,7 +1814,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{20} + return fileDescriptor_252557cfdd89a31a, []int{21} } func (m *ResponseEcho) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1813,7 +1857,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{21} + return fileDescriptor_252557cfdd89a31a, []int{22} } func (m *ResponseFlush) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1854,7 +1898,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{22} + return fileDescriptor_252557cfdd89a31a, []int{23} } func (m *ResponseInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1930,7 +1974,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{23} + return fileDescriptor_252557cfdd89a31a, []int{24} } func (m *ResponseSetOption) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1990,7 +2034,7 @@ func (m *ResponseInitChain) Reset() { *m = ResponseInitChain{} } func (m *ResponseInitChain) String() string { return proto.CompactTextString(m) } func (*ResponseInitChain) ProtoMessage() {} func (*ResponseInitChain) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{24} + return fileDescriptor_252557cfdd89a31a, []int{25} } func (m *ResponseInitChain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2057,7 +2101,7 @@ func (m *ResponseQuery) Reset() { *m = ResponseQuery{} } func (m *ResponseQuery) String() string { return proto.CompactTextString(m) } func (*ResponseQuery) ProtoMessage() {} func (*ResponseQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{25} + return fileDescriptor_252557cfdd89a31a, []int{26} } func (m *ResponseQuery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2157,7 +2201,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{26} + return fileDescriptor_252557cfdd89a31a, []int{27} } func (m *ResponseBeginBlock) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2213,7 +2257,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{27} + return fileDescriptor_252557cfdd89a31a, []int{28} } func (m *ResponseCheckTx) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2334,7 +2378,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{28} + return fileDescriptor_252557cfdd89a31a, []int{29} } func (m *ResponseDeliverTx) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2423,15 +2467,14 @@ type ResponseEndBlock struct { ValidatorUpdates []ValidatorUpdate `protobuf:"bytes,1,rep,name=validator_updates,json=validatorUpdates,proto3" json:"validator_updates"` ConsensusParamUpdates *ConsensusParams `protobuf:"bytes,2,opt,name=consensus_param_updates,json=consensusParamUpdates,proto3" json:"consensus_param_updates,omitempty"` Events []Event `protobuf:"bytes,3,rep,name=events,proto3" json:"events,omitempty"` - TimeoutPropose time.Duration `protobuf:"bytes,4,opt,name=timeout_propose,json=timeoutPropose,proto3,stdduration" json:"timeout_propose"` - TimeoutCommit time.Duration `protobuf:"bytes,5,opt,name=timeout_commit,json=timeoutCommit,proto3,stdduration" json:"timeout_commit"` + Timeouts *TimeoutsInfo `protobuf:"bytes,4,opt,name=timeouts,proto3" json:"timeouts,omitempty"` } 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{29} + return fileDescriptor_252557cfdd89a31a, []int{30} } func (m *ResponseEndBlock) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2481,18 +2524,11 @@ func (m *ResponseEndBlock) GetEvents() []Event { return nil } -func (m *ResponseEndBlock) GetTimeoutPropose() time.Duration { - if m != nil { - return m.TimeoutPropose - } - return 0 -} - -func (m *ResponseEndBlock) GetTimeoutCommit() time.Duration { +func (m *ResponseEndBlock) GetTimeouts() *TimeoutsInfo { if m != nil { - return m.TimeoutCommit + return m.Timeouts } - return 0 + return nil } type ResponseCommit struct { @@ -2505,7 +2541,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{30} + return fileDescriptor_252557cfdd89a31a, []int{31} } func (m *ResponseCommit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2556,7 +2592,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{31} + return fileDescriptor_252557cfdd89a31a, []int{32} } func (m *ResponseListSnapshots) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2600,7 +2636,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{32} + return fileDescriptor_252557cfdd89a31a, []int{33} } func (m *ResponseOfferSnapshot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2644,7 +2680,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{33} + return fileDescriptor_252557cfdd89a31a, []int{34} } func (m *ResponseLoadSnapshotChunk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2690,7 +2726,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{34} + return fileDescriptor_252557cfdd89a31a, []int{35} } func (m *ResponseApplySnapshotChunk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2748,7 +2784,7 @@ func (m *ResponsePrepareProposal) Reset() { *m = ResponsePrepareProposal func (m *ResponsePrepareProposal) String() string { return proto.CompactTextString(m) } func (*ResponsePrepareProposal) ProtoMessage() {} func (*ResponsePrepareProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{35} + return fileDescriptor_252557cfdd89a31a, []int{36} } func (m *ResponsePrepareProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2793,7 +2829,7 @@ func (m *ResponseProcessProposal) Reset() { *m = ResponseProcessProposal func (m *ResponseProcessProposal) String() string { return proto.CompactTextString(m) } func (*ResponseProcessProposal) ProtoMessage() {} func (*ResponseProcessProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_252557cfdd89a31a, []int{36} + return fileDescriptor_252557cfdd89a31a, []int{37} } func (m *ResponseProcessProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2849,7 +2885,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{37} + return fileDescriptor_252557cfdd89a31a, []int{38} } func (m *ConsensusParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2918,7 +2954,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{38} + return fileDescriptor_252557cfdd89a31a, []int{39} } func (m *BlockParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2970,7 +3006,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{39} + return fileDescriptor_252557cfdd89a31a, []int{40} } func (m *LastCommitInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3025,7 +3061,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{40} + return fileDescriptor_252557cfdd89a31a, []int{41} } func (m *Event) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3079,7 +3115,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{41} + return fileDescriptor_252557cfdd89a31a, []int{42} } func (m *EventAttribute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3143,7 +3179,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{42} + return fileDescriptor_252557cfdd89a31a, []int{43} } func (m *TxResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3211,7 +3247,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{43} + return fileDescriptor_252557cfdd89a31a, []int{44} } func (m *Validator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3264,7 +3300,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{44} + return fileDescriptor_252557cfdd89a31a, []int{45} } func (m *ValidatorUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3317,7 +3353,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{45} + return fileDescriptor_252557cfdd89a31a, []int{46} } func (m *VoteInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3378,7 +3414,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{46} + return fileDescriptor_252557cfdd89a31a, []int{47} } func (m *Evidence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3454,7 +3490,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{47} + return fileDescriptor_252557cfdd89a31a, []int{48} } func (m *Snapshot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3527,6 +3563,7 @@ func init() { proto.RegisterType((*Request)(nil), "tendermint.abci.Request") proto.RegisterType((*RequestEcho)(nil), "tendermint.abci.RequestEcho") proto.RegisterType((*RequestFlush)(nil), "tendermint.abci.RequestFlush") + proto.RegisterType((*TimeoutsInfo)(nil), "tendermint.abci.TimeoutsInfo") proto.RegisterType((*RequestInfo)(nil), "tendermint.abci.RequestInfo") proto.RegisterType((*RequestSetOption)(nil), "tendermint.abci.RequestSetOption") proto.RegisterType((*RequestInitChain)(nil), "tendermint.abci.RequestInitChain") @@ -3577,199 +3614,201 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 3070 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcd, 0x73, 0xe4, 0xd4, - 0x11, 0x1f, 0xcd, 0xb7, 0x7a, 0x3c, 0x1f, 0x7e, 0xbb, 0xec, 0xce, 0x8a, 0xc5, 0x5e, 0xb4, 0xc5, - 0xd7, 0x02, 0x76, 0x30, 0xb5, 0x04, 0x02, 0x09, 0xd8, 0xb3, 0xb3, 0x8c, 0x59, 0x63, 0x3b, 0xf2, - 0xec, 0x92, 0x2f, 0x56, 0xc8, 0xa3, 0xe7, 0x19, 0xb1, 0x33, 0x92, 0x90, 0x34, 0xc6, 0xde, 0x63, - 0x2a, 0x29, 0xaa, 0x38, 0x51, 0x95, 0x0b, 0x17, 0x8e, 0x39, 0xe6, 0x9e, 0x4b, 0x72, 0xc9, 0x85, - 0xaa, 0x1c, 0xc2, 0x31, 0x87, 0x14, 0x49, 0x41, 0x4e, 0xf9, 0x07, 0x72, 0x4a, 0x25, 0xf5, 0x3e, - 0xf4, 0x39, 0x23, 0x8f, 0x0c, 0x39, 0xa4, 0x2a, 0x37, 0xbd, 0x56, 0xf7, 0x4f, 0x7a, 0xad, 0xf7, - 0xba, 0xfb, 0xd7, 0x7a, 0xf0, 0xa8, 0x87, 0x4d, 0x1d, 0x3b, 0x13, 0xc3, 0xf4, 0xd6, 0xb5, 0xc3, - 0x81, 0xb1, 0xee, 0x9d, 0xda, 0xd8, 0x5d, 0xb3, 0x1d, 0xcb, 0xb3, 0x50, 0x33, 0xbc, 0xb9, 0x46, - 0x6e, 0x4a, 0x8f, 0x45, 0xb4, 0x07, 0xce, 0xa9, 0xed, 0x59, 0xeb, 0xb6, 0x63, 0x59, 0x47, 0x4c, - 0x5f, 0xba, 0x1a, 0xb9, 0x4d, 0x71, 0xa2, 0x68, 0xb1, 0xbb, 0xdc, 0xf8, 0x01, 0x3e, 0xf5, 0xef, - 0x3e, 0x36, 0x63, 0x6b, 0x6b, 0x8e, 0x36, 0xf1, 0x6f, 0xaf, 0x0e, 0x2d, 0x6b, 0x38, 0xc6, 0xeb, - 0x74, 0x74, 0x38, 0x3d, 0x5a, 0xf7, 0x8c, 0x09, 0x76, 0x3d, 0x6d, 0x62, 0x73, 0x85, 0x8b, 0x43, - 0x6b, 0x68, 0xd1, 0xcb, 0x75, 0x72, 0xc5, 0xa5, 0x2b, 0x49, 0x33, 0x7d, 0xea, 0x68, 0x9e, 0x61, - 0x99, 0xec, 0xbe, 0xfc, 0x3b, 0x11, 0x2a, 0x0a, 0xfe, 0x60, 0x8a, 0x5d, 0x0f, 0x6d, 0x40, 0x11, - 0x0f, 0x46, 0x56, 0x5b, 0xb8, 0x26, 0x3c, 0x5d, 0xdb, 0xb8, 0xba, 0x96, 0x98, 0xfc, 0x1a, 0xd7, - 0xeb, 0x0e, 0x46, 0x56, 0x2f, 0xa7, 0x50, 0x5d, 0x74, 0x13, 0x4a, 0x47, 0xe3, 0xa9, 0x3b, 0x6a, - 0xe7, 0xa9, 0xd1, 0x63, 0x69, 0x46, 0xb7, 0x89, 0x52, 0x2f, 0xa7, 0x30, 0x6d, 0xf2, 0x28, 0xc3, - 0x3c, 0xb2, 0xda, 0x85, 0xb3, 0x1f, 0xb5, 0x6d, 0x1e, 0xd1, 0x47, 0x11, 0x5d, 0xb4, 0x05, 0xe0, - 0x62, 0x4f, 0xb5, 0x6c, 0xf2, 0xfa, 0xed, 0x22, 0xb5, 0x7c, 0x3c, 0xcd, 0xf2, 0x00, 0x7b, 0x7b, - 0x54, 0xb1, 0x97, 0x53, 0x44, 0xd7, 0x1f, 0x10, 0x0c, 0xc3, 0x34, 0x3c, 0x75, 0x30, 0xd2, 0x0c, - 0xb3, 0x5d, 0x3a, 0x1b, 0x63, 0xdb, 0x34, 0xbc, 0x0e, 0x51, 0x24, 0x18, 0x86, 0x3f, 0x20, 0x53, - 0xfe, 0x60, 0x8a, 0x9d, 0xd3, 0x76, 0xf9, 0xec, 0x29, 0xff, 0x90, 0x28, 0x91, 0x29, 0x53, 0x6d, - 0xd4, 0x85, 0xda, 0x21, 0x1e, 0x1a, 0xa6, 0x7a, 0x38, 0xb6, 0x06, 0x0f, 0xda, 0x15, 0x6a, 0x2c, - 0xa7, 0x19, 0x6f, 0x11, 0xd5, 0x2d, 0xa2, 0xd9, 0xcb, 0x29, 0x70, 0x18, 0x8c, 0xd0, 0x6b, 0x50, - 0x1d, 0x8c, 0xf0, 0xe0, 0x81, 0xea, 0x9d, 0xb4, 0xab, 0x14, 0x63, 0x35, 0x0d, 0xa3, 0x43, 0xf4, - 0xfa, 0x27, 0xbd, 0x9c, 0x52, 0x19, 0xb0, 0x4b, 0x32, 0x7f, 0x1d, 0x8f, 0x8d, 0x63, 0xec, 0x10, - 0x7b, 0xf1, 0xec, 0xf9, 0xdf, 0x62, 0x9a, 0x14, 0x41, 0xd4, 0xfd, 0x01, 0x7a, 0x1d, 0x44, 0x6c, - 0xea, 0x7c, 0x1a, 0x40, 0x21, 0xae, 0xa5, 0xae, 0x15, 0x53, 0xf7, 0x27, 0x51, 0xc5, 0xfc, 0x1a, - 0xbd, 0x0c, 0xe5, 0x81, 0x35, 0x99, 0x18, 0x5e, 0xbb, 0x46, 0xad, 0x57, 0x52, 0x27, 0x40, 0xb5, - 0x7a, 0x39, 0x85, 0xeb, 0xa3, 0x5d, 0x68, 0x8c, 0x0d, 0xd7, 0x53, 0x5d, 0x53, 0xb3, 0xdd, 0x91, - 0xe5, 0xb9, 0xed, 0x25, 0x8a, 0xf0, 0x44, 0x1a, 0xc2, 0x8e, 0xe1, 0x7a, 0x07, 0xbe, 0x72, 0x2f, - 0xa7, 0xd4, 0xc7, 0x51, 0x01, 0xc1, 0xb3, 0x8e, 0x8e, 0xb0, 0x13, 0x00, 0xb6, 0xeb, 0x67, 0xe3, - 0xed, 0x11, 0x6d, 0xdf, 0x9e, 0xe0, 0x59, 0x51, 0x01, 0xfa, 0x29, 0x5c, 0x18, 0x5b, 0x9a, 0x1e, - 0xc0, 0xa9, 0x83, 0xd1, 0xd4, 0x7c, 0xd0, 0x6e, 0x50, 0xd0, 0x67, 0x52, 0x5f, 0xd2, 0xd2, 0x74, - 0x1f, 0xa2, 0x43, 0x0c, 0x7a, 0x39, 0x65, 0x79, 0x9c, 0x14, 0xa2, 0xfb, 0x70, 0x51, 0xb3, 0xed, - 0xf1, 0x69, 0x12, 0xbd, 0x49, 0xd1, 0x6f, 0xa4, 0xa1, 0x6f, 0x12, 0x9b, 0x24, 0x3c, 0xd2, 0x66, - 0xa4, 0xa8, 0x0f, 0x2d, 0xdb, 0xc1, 0xb6, 0xe6, 0x60, 0xd5, 0x76, 0x2c, 0xdb, 0x72, 0xb5, 0x71, - 0xbb, 0x45, 0xb1, 0x9f, 0x4a, 0xc3, 0xde, 0x67, 0xfa, 0xfb, 0x5c, 0xbd, 0x97, 0x53, 0x9a, 0x76, - 0x5c, 0xc4, 0x50, 0xad, 0x01, 0x76, 0xdd, 0x10, 0x75, 0x79, 0x11, 0x2a, 0xd5, 0x8f, 0xa3, 0xc6, - 0x44, 0x5b, 0x15, 0x28, 0x1d, 0x6b, 0xe3, 0x29, 0x96, 0x9f, 0x82, 0x5a, 0x24, 0x2c, 0xa1, 0x36, - 0x54, 0x26, 0xd8, 0x75, 0xb5, 0x21, 0xa6, 0x51, 0x4c, 0x54, 0xfc, 0xa1, 0xdc, 0x80, 0xa5, 0x68, - 0x28, 0x92, 0x3f, 0xca, 0x07, 0x96, 0x24, 0xca, 0x10, 0xcb, 0x63, 0xec, 0xb8, 0x24, 0xb4, 0x70, - 0x4b, 0x3e, 0x44, 0xd7, 0xa1, 0x4e, 0xd7, 0xba, 0xea, 0xdf, 0x27, 0xa1, 0xae, 0xa8, 0x2c, 0x51, - 0xe1, 0x3d, 0xae, 0xb4, 0x0a, 0x35, 0x7b, 0xc3, 0x0e, 0x54, 0x0a, 0x54, 0x05, 0xec, 0x0d, 0xdb, - 0x57, 0xd8, 0x81, 0x26, 0x89, 0xd8, 0xd6, 0xd4, 0xe3, 0x7e, 0xc0, 0x3c, 0x84, 0x5d, 0x59, 0x63, - 0x21, 0x7a, 0xcd, 0x0f, 0xd1, 0x6b, 0xb7, 0x78, 0x88, 0xde, 0xaa, 0x7e, 0xfe, 0xe5, 0x6a, 0xee, - 0xd3, 0xbf, 0xae, 0x0a, 0x4a, 0x83, 0xdb, 0x32, 0x07, 0x60, 0xf4, 0x16, 0xf8, 0x12, 0x95, 0x6f, - 0xa5, 0x52, 0x76, 0xb0, 0x3a, 0x37, 0x65, 0xdb, 0x4b, 0xfe, 0x1e, 0xb4, 0x92, 0x41, 0x13, 0xb5, - 0xa0, 0xf0, 0x00, 0x9f, 0x72, 0x4f, 0x90, 0x4b, 0x74, 0x91, 0x7b, 0x9c, 0xce, 0x5e, 0x54, 0xb8, - 0xfb, 0xff, 0x98, 0x0f, 0x8c, 0x83, 0x68, 0x89, 0x5e, 0x86, 0x22, 0x79, 0x02, 0xcf, 0x23, 0xd2, - 0xcc, 0x2b, 0xf5, 0xfd, 0xcc, 0xc5, 0xde, 0xe9, 0x13, 0xf2, 0x4e, 0xd4, 0x02, 0x5d, 0x21, 0xc1, - 0x4d, 0x33, 0x4c, 0xd5, 0xd0, 0xf9, 0x73, 0x2a, 0x74, 0xbc, 0xad, 0xa3, 0x3b, 0xd0, 0x1a, 0x58, - 0xa6, 0x8b, 0x4d, 0x77, 0xea, 0xaa, 0x2c, 0x33, 0xf2, 0xec, 0x31, 0x1b, 0x7c, 0x3a, 0xbe, 0xe2, - 0x3e, 0xd5, 0x53, 0x9a, 0x83, 0xb8, 0x00, 0xdd, 0x06, 0x38, 0xd6, 0xc6, 0x86, 0xae, 0x79, 0x96, - 0xe3, 0xb6, 0x8b, 0xd7, 0x0a, 0x73, 0x61, 0xee, 0xf9, 0x2a, 0x77, 0x6d, 0x5d, 0xf3, 0xf0, 0x56, - 0x91, 0xbc, 0xad, 0x12, 0xb1, 0x44, 0x4f, 0x42, 0x53, 0xb3, 0x6d, 0xd5, 0xf5, 0x34, 0x0f, 0xab, - 0x87, 0xa7, 0x1e, 0x76, 0xe9, 0x77, 0x58, 0x52, 0xea, 0x9a, 0x6d, 0x1f, 0x10, 0xe9, 0x16, 0x11, - 0xa2, 0x27, 0xa0, 0x41, 0xf2, 0x87, 0xa1, 0x8d, 0xd5, 0x11, 0x36, 0x86, 0x23, 0x8f, 0xe6, 0x8e, - 0x82, 0x52, 0xe7, 0xd2, 0x1e, 0x15, 0xca, 0x7a, 0xb0, 0x46, 0x69, 0xee, 0x40, 0x08, 0x8a, 0xba, - 0xe6, 0x69, 0xd4, 0x91, 0x4b, 0x0a, 0xbd, 0x26, 0x32, 0x5b, 0xf3, 0x46, 0xdc, 0x3d, 0xf4, 0x1a, - 0x5d, 0x82, 0x32, 0x87, 0x2d, 0x50, 0x58, 0x3e, 0x22, 0xdf, 0xcc, 0x76, 0xac, 0x63, 0xb6, 0xd2, - 0xaa, 0x0a, 0x1b, 0xc8, 0xbf, 0xc8, 0xc3, 0xf2, 0x4c, 0x96, 0x21, 0xb8, 0x23, 0xcd, 0x1d, 0xf9, - 0xcf, 0x22, 0xd7, 0xe8, 0x25, 0x82, 0xab, 0xe9, 0xd8, 0xe1, 0xd9, 0xbd, 0x1d, 0x75, 0x11, 0xab, - 0x6c, 0x7a, 0xf4, 0x3e, 0x77, 0x0d, 0xd7, 0x46, 0x7b, 0xd0, 0x1a, 0x6b, 0xae, 0xbf, 0x34, 0xd5, - 0x48, 0xa6, 0x9f, 0xcd, 0x55, 0x3b, 0x9a, 0x1f, 0xe7, 0xc9, 0x36, 0xe4, 0x40, 0x8d, 0x71, 0x4c, - 0x8a, 0x14, 0xb8, 0x78, 0x78, 0xfa, 0x50, 0x33, 0x3d, 0xc3, 0xc4, 0xea, 0xcc, 0x97, 0xbb, 0x32, - 0x03, 0xda, 0x3d, 0x36, 0x74, 0x6c, 0x0e, 0xfc, 0x4f, 0x76, 0x21, 0x30, 0x0e, 0x3e, 0xa9, 0x2b, - 0x2b, 0xd0, 0x88, 0xe7, 0x49, 0xd4, 0x80, 0xbc, 0x77, 0xc2, 0x1d, 0x90, 0xf7, 0x4e, 0xd0, 0x77, - 0xa0, 0x48, 0x26, 0x49, 0x27, 0xdf, 0x98, 0x53, 0xa4, 0x70, 0xbb, 0xfe, 0xa9, 0x8d, 0x15, 0xaa, - 0x29, 0xcb, 0xc1, 0x6e, 0x08, 0x72, 0x67, 0x12, 0x55, 0x7e, 0x06, 0x9a, 0x89, 0xe4, 0x18, 0xf9, - 0x7e, 0x42, 0xf4, 0xfb, 0xc9, 0x4d, 0xa8, 0xc7, 0x32, 0xa1, 0x7c, 0x09, 0x2e, 0xce, 0x4b, 0x6c, - 0xf2, 0x28, 0x90, 0xc7, 0x12, 0x14, 0xba, 0x09, 0xd5, 0x20, 0xb3, 0x09, 0x3c, 0x40, 0x24, 0x67, - 0xe1, 0x2b, 0x2b, 0x81, 0x2a, 0xd9, 0x86, 0x64, 0x59, 0xd3, 0xf5, 0x90, 0xa7, 0x2f, 0x5e, 0xd1, - 0x6c, 0xbb, 0xa7, 0xb9, 0x23, 0xf9, 0x3d, 0x68, 0xa7, 0x65, 0xad, 0xc4, 0x34, 0x8a, 0xc1, 0x32, - 0xbc, 0x04, 0xe5, 0x23, 0xcb, 0x99, 0x68, 0x1e, 0x05, 0xab, 0x2b, 0x7c, 0x44, 0x96, 0x27, 0xcb, - 0x60, 0x05, 0x2a, 0x66, 0x03, 0x59, 0x85, 0x2b, 0xa9, 0x99, 0x8b, 0x98, 0x18, 0xa6, 0x8e, 0x99, - 0x3f, 0xeb, 0x0a, 0x1b, 0x84, 0x40, 0xec, 0x65, 0xd9, 0x80, 0x3c, 0xd6, 0xa5, 0x73, 0xa5, 0xf8, - 0xa2, 0xc2, 0x47, 0xf2, 0xdf, 0x05, 0xb8, 0x34, 0x3f, 0x7f, 0xa1, 0x9b, 0x00, 0x2c, 0xd4, 0x07, - 0xdb, 0xae, 0xb6, 0x71, 0x69, 0x76, 0xd1, 0xdf, 0xd2, 0x3c, 0x4d, 0x11, 0xa9, 0x26, 0xb9, 0x24, - 0x61, 0x20, 0x34, 0x53, 0x5d, 0xe3, 0x21, 0x5b, 0x33, 0x05, 0xa5, 0x1e, 0xe8, 0x1c, 0x18, 0x0f, - 0xe3, 0xe1, 0xad, 0x10, 0x0f, 0x6f, 0xa1, 0xef, 0x8a, 0xb1, 0x2d, 0xec, 0xc7, 0xd2, 0xd2, 0x79, - 0x63, 0xa9, 0xfc, 0x51, 0x74, 0x9a, 0xb1, 0xec, 0x19, 0xd9, 0xd7, 0xc2, 0xb9, 0xf6, 0x75, 0xdc, - 0x3d, 0xf9, 0x8c, 0xee, 0x91, 0x7f, 0x05, 0x50, 0x55, 0xb0, 0x6b, 0x93, 0x20, 0x8c, 0xb6, 0x40, - 0xc4, 0x27, 0x03, 0xcc, 0x8a, 0x78, 0x21, 0xb5, 0x08, 0x66, 0xda, 0x5d, 0x5f, 0x93, 0x54, 0xa0, - 0x81, 0x19, 0x7a, 0x91, 0x13, 0x95, 0x74, 0xce, 0xc1, 0xcd, 0xa3, 0x4c, 0xe5, 0x25, 0x9f, 0xa9, - 0x14, 0x52, 0x8b, 0x4e, 0x66, 0x95, 0xa0, 0x2a, 0x2f, 0x72, 0xaa, 0x52, 0x5c, 0xf0, 0xb0, 0x18, - 0x57, 0xe9, 0xc4, 0xb8, 0x4a, 0x69, 0xc1, 0x34, 0x53, 0xc8, 0x4a, 0x27, 0x46, 0x56, 0xca, 0x0b, - 0x40, 0x52, 0xd8, 0xca, 0x4b, 0x3e, 0x5b, 0xa9, 0x2c, 0x98, 0x76, 0x82, 0xae, 0xdc, 0x8e, 0xd3, - 0x15, 0x46, 0x35, 0xae, 0xa7, 0x5a, 0xa7, 0xf2, 0x95, 0xef, 0x47, 0xf8, 0x8a, 0x98, 0x4a, 0x16, - 0x18, 0xc8, 0x1c, 0xc2, 0xd2, 0x89, 0x11, 0x16, 0x58, 0xe0, 0x83, 0x14, 0xc6, 0xf2, 0x46, 0x94, - 0xb1, 0xd4, 0x52, 0x49, 0x0f, 0x5f, 0x34, 0xf3, 0x28, 0xcb, 0x2b, 0x01, 0x65, 0x59, 0x4a, 0xe5, - 0x5c, 0x7c, 0x0e, 0x49, 0xce, 0xb2, 0x37, 0xc3, 0x59, 0x18, 0xc7, 0x78, 0x32, 0x15, 0x62, 0x01, - 0x69, 0xd9, 0x9b, 0x21, 0x2d, 0x8d, 0x05, 0x80, 0x0b, 0x58, 0xcb, 0xcf, 0xe6, 0xb3, 0x96, 0x74, - 0x5e, 0xc1, 0x5f, 0x33, 0x1b, 0x6d, 0x51, 0x53, 0x68, 0x0b, 0xa3, 0x16, 0xcf, 0xa6, 0xc2, 0x67, - 0xe6, 0x2d, 0x77, 0xe7, 0xf0, 0x16, 0xc6, 0x30, 0x9e, 0x4e, 0x05, 0xcf, 0x40, 0x5c, 0xee, 0xce, - 0x21, 0x2e, 0x68, 0x21, 0x6c, 0x76, 0xe6, 0xf2, 0x0c, 0xa9, 0xc2, 0x12, 0x61, 0x8e, 0x64, 0x32, - 0xec, 0x38, 0x96, 0xc3, 0x2b, 0x6f, 0x36, 0x90, 0x9f, 0x26, 0x75, 0x61, 0x18, 0xd2, 0xce, 0x60, - 0x39, 0xb4, 0x62, 0x88, 0x84, 0x31, 0xf9, 0xb7, 0x42, 0x68, 0x4b, 0x4b, 0xa9, 0x68, 0x4d, 0x29, - 0xf2, 0x9a, 0x32, 0xc2, 0x7d, 0xf2, 0x71, 0xee, 0xb3, 0x0a, 0x35, 0x52, 0x09, 0x24, 0x68, 0x8d, - 0x66, 0x07, 0xb4, 0xe6, 0x06, 0x2c, 0xd3, 0x52, 0x8f, 0xe5, 0x85, 0x58, 0x0a, 0x6b, 0x92, 0x1b, - 0x6c, 0x2b, 0xb1, 0x5c, 0xf6, 0x3c, 0x5c, 0x88, 0xe8, 0x06, 0x15, 0x06, 0xab, 0x98, 0x5b, 0x81, - 0xf6, 0x26, 0x2f, 0x35, 0xde, 0x0e, 0x1d, 0x14, 0x12, 0x13, 0x04, 0xc5, 0x81, 0xa5, 0x63, 0x9e, - 0xff, 0xe9, 0x35, 0x21, 0x2b, 0x63, 0x6b, 0xc8, 0x33, 0x2a, 0xb9, 0x24, 0x5a, 0x41, 0xcc, 0x16, - 0x59, 0x48, 0x96, 0xff, 0x20, 0x84, 0x78, 0x21, 0x57, 0x99, 0x47, 0x2b, 0x84, 0xff, 0x0e, 0xad, - 0xc8, 0x7f, 0x63, 0x5a, 0x11, 0xad, 0xbf, 0x0a, 0xf1, 0xfa, 0xeb, 0x9f, 0x42, 0xf8, 0x85, 0x03, - 0x92, 0xf0, 0xcd, 0x3c, 0x12, 0x16, 0x53, 0x25, 0xfa, 0xbd, 0x78, 0x31, 0xc5, 0xa9, 0x5f, 0x99, - 0x3e, 0x37, 0x4e, 0xfd, 0x2a, 0xac, 0xbc, 0xa2, 0x03, 0xf4, 0x32, 0x88, 0xb4, 0xf5, 0xa9, 0x5a, - 0xb6, 0xcb, 0xd3, 0xc3, 0xa3, 0xd1, 0xb9, 0xb2, 0x0e, 0xe7, 0xda, 0x3e, 0xd1, 0xd9, 0xb3, 0x5d, - 0xa5, 0x6a, 0xf3, 0xab, 0x48, 0xad, 0x23, 0xc6, 0x6a, 0x9d, 0xab, 0x20, 0x92, 0xb7, 0x77, 0x6d, - 0x6d, 0x80, 0x69, 0xa8, 0x17, 0x95, 0x50, 0x20, 0xdf, 0x07, 0x34, 0x9b, 0x6c, 0x50, 0x0f, 0xca, - 0xf8, 0x18, 0x9b, 0x1e, 0xf9, 0x6a, 0x85, 0x64, 0x39, 0xc2, 0xb9, 0x00, 0x36, 0xbd, 0xad, 0x36, - 0x71, 0xf2, 0x3f, 0xbe, 0x5c, 0x6d, 0x31, 0xed, 0xe7, 0xac, 0x89, 0xe1, 0xe1, 0x89, 0xed, 0x9d, - 0x2a, 0xdc, 0x5e, 0xfe, 0x4b, 0x9e, 0x14, 0xe6, 0xb1, 0x44, 0x34, 0xd7, 0xb7, 0xfe, 0x06, 0xca, - 0x47, 0x48, 0x59, 0x36, 0x7f, 0xaf, 0x00, 0x0c, 0x35, 0x57, 0xfd, 0x50, 0x33, 0x3d, 0xac, 0x73, - 0xa7, 0x47, 0x24, 0x48, 0x82, 0x2a, 0x19, 0x4d, 0x5d, 0xac, 0x73, 0x7e, 0x18, 0x8c, 0x23, 0xf3, - 0xac, 0x7c, 0xbb, 0x79, 0xc6, 0xbd, 0x5c, 0x4d, 0x78, 0x39, 0x52, 0x34, 0x8b, 0xd1, 0xa2, 0x99, - 0xbc, 0x9b, 0xed, 0x18, 0x96, 0x63, 0x78, 0xa7, 0xf4, 0xd3, 0x14, 0x94, 0x60, 0x8c, 0xae, 0x43, - 0x7d, 0x82, 0x27, 0xb6, 0x65, 0x8d, 0x55, 0x16, 0xbc, 0x6a, 0xd4, 0x74, 0x89, 0x0b, 0xbb, 0x34, - 0x86, 0xfd, 0x32, 0x1f, 0x6e, 0xbf, 0x90, 0x1c, 0xfd, 0xdf, 0x39, 0x58, 0xfe, 0x75, 0x81, 0x70, - 0xc4, 0x78, 0xa9, 0x81, 0x0e, 0x60, 0x39, 0xd8, 0xfe, 0xea, 0x94, 0x86, 0x05, 0x7f, 0x41, 0x67, - 0x8d, 0x1f, 0xad, 0xe3, 0xb8, 0xd8, 0x45, 0x3f, 0x82, 0xcb, 0x89, 0xd0, 0x16, 0x40, 0xe7, 0x33, - 0x46, 0xb8, 0x47, 0xe2, 0x11, 0xce, 0x47, 0x0e, 0x7d, 0x55, 0xf8, 0x96, 0xbe, 0xfa, 0xdf, 0xed, - 0x8a, 0x6d, 0x43, 0x23, 0x5e, 0xd2, 0xcd, 0x5d, 0x97, 0xd7, 0xa1, 0xee, 0x60, 0x8f, 0x50, 0xba, - 0x58, 0x03, 0x66, 0x89, 0x09, 0x79, 0x5b, 0x67, 0x1f, 0x1e, 0x99, 0x5b, 0xda, 0xa1, 0xef, 0x82, - 0x18, 0x56, 0x85, 0x42, 0x4a, 0x2f, 0x23, 0xe0, 0xe7, 0xa1, 0xae, 0xfc, 0x7b, 0x21, 0x84, 0x8c, - 0x33, 0xfe, 0x2e, 0x94, 0x1d, 0xec, 0x4e, 0xc7, 0x8c, 0x83, 0x37, 0x36, 0x9e, 0xcf, 0x56, 0x14, - 0x12, 0xe9, 0x74, 0xec, 0x29, 0xdc, 0x58, 0xbe, 0x0f, 0x65, 0x26, 0x41, 0x35, 0xa8, 0xdc, 0xdd, - 0xbd, 0xb3, 0xbb, 0xf7, 0xce, 0x6e, 0x2b, 0x87, 0x00, 0xca, 0x9b, 0x9d, 0x4e, 0x77, 0xbf, 0xdf, - 0x12, 0x90, 0x08, 0xa5, 0xcd, 0xad, 0x3d, 0xa5, 0xdf, 0xca, 0x13, 0xb1, 0xd2, 0x7d, 0xab, 0xdb, - 0xe9, 0xb7, 0x0a, 0x68, 0x19, 0xea, 0xec, 0x5a, 0xbd, 0xbd, 0xa7, 0xbc, 0xbd, 0xd9, 0x6f, 0x15, - 0x23, 0xa2, 0x83, 0xee, 0xee, 0xad, 0xae, 0xd2, 0x2a, 0xc9, 0x2f, 0x10, 0x92, 0x9f, 0x52, 0x46, - 0x86, 0x74, 0x5e, 0x88, 0xd0, 0x79, 0xf9, 0xd3, 0x3c, 0x48, 0xe9, 0xb5, 0x21, 0x7a, 0x2b, 0x31, - 0xf1, 0x8d, 0x73, 0x14, 0x96, 0x89, 0xd9, 0xa3, 0x27, 0xa0, 0xe1, 0xe0, 0x23, 0xec, 0x0d, 0x46, - 0xac, 0x56, 0x65, 0xb9, 0xbc, 0xae, 0xd4, 0xb9, 0x94, 0x1a, 0xb9, 0x4c, 0xed, 0x7d, 0x3c, 0xf0, - 0x54, 0x16, 0x24, 0xd9, 0x76, 0x10, 0x89, 0x1a, 0x91, 0x1e, 0x30, 0xa1, 0xfc, 0xde, 0xb9, 0x7c, - 0x29, 0x42, 0x49, 0xe9, 0xf6, 0x95, 0x1f, 0xb7, 0x0a, 0x08, 0x41, 0x83, 0x5e, 0xaa, 0x07, 0xbb, - 0x9b, 0xfb, 0x07, 0xbd, 0x3d, 0xe2, 0xcb, 0x0b, 0xd0, 0xf4, 0x7d, 0xe9, 0x0b, 0x4b, 0xf2, 0x3e, - 0x5c, 0x4e, 0x29, 0x6c, 0xbf, 0x61, 0x47, 0x43, 0xfe, 0x8d, 0x10, 0x85, 0x8c, 0x77, 0x0f, 0xde, - 0x4c, 0x78, 0x7a, 0x3d, 0x6b, 0x39, 0x9c, 0x74, 0xb3, 0x04, 0x55, 0xcc, 0x1b, 0x75, 0xd4, 0xc1, - 0x4b, 0x4a, 0x30, 0x96, 0x9f, 0x5f, 0xec, 0xb4, 0x70, 0xd5, 0xe5, 0xe5, 0x7f, 0x0b, 0xd0, 0x4c, - 0x04, 0x2f, 0xb4, 0x01, 0x25, 0xc6, 0xf8, 0xd2, 0xfe, 0x67, 0xd2, 0xd8, 0xcb, 0x23, 0x1d, 0x53, - 0x45, 0xaf, 0xc5, 0x5e, 0x69, 0x26, 0x48, 0x32, 0x67, 0xf9, 0xdd, 0x45, 0x6e, 0x1a, 0x58, 0xa0, - 0xd7, 0x41, 0x0c, 0xa2, 0x30, 0x6f, 0x33, 0x3c, 0x3e, 0x6b, 0x1e, 0xc4, 0x6f, 0x6e, 0x1f, 0xda, - 0xa0, 0x57, 0xc2, 0x42, 0xbc, 0x38, 0xcb, 0x33, 0xb9, 0x39, 0x53, 0xe0, 0xc6, 0xbe, 0xbe, 0xdc, - 0x81, 0x5a, 0x64, 0x3e, 0xe8, 0x51, 0x10, 0x27, 0xda, 0x09, 0xef, 0x49, 0xb3, 0xae, 0x62, 0x75, - 0xa2, 0x9d, 0xb0, 0x76, 0xf4, 0x65, 0xa8, 0x90, 0x9b, 0x43, 0xcd, 0xe5, 0x7d, 0xaa, 0xf2, 0x44, - 0x3b, 0x79, 0x53, 0x73, 0xe5, 0x77, 0xa1, 0x11, 0xef, 0xc7, 0x92, 0xbd, 0xe8, 0x58, 0x53, 0x53, - 0xa7, 0x18, 0x25, 0x85, 0x0d, 0xd0, 0x4d, 0x28, 0x1d, 0x5b, 0x2c, 0x91, 0xcc, 0x0f, 0x5a, 0xf7, - 0x2c, 0x0f, 0x47, 0xfa, 0xb9, 0x4c, 0x5b, 0x7e, 0x08, 0x25, 0x9a, 0x18, 0x48, 0x28, 0xa5, 0x9d, - 0x55, 0x4e, 0x42, 0xc8, 0x35, 0x7a, 0x17, 0x40, 0xf3, 0x3c, 0xc7, 0x38, 0x9c, 0x86, 0xc0, 0xab, - 0xf3, 0x13, 0xcb, 0xa6, 0xaf, 0xb7, 0x75, 0x95, 0x67, 0x98, 0x8b, 0xa1, 0x69, 0x24, 0xcb, 0x44, - 0x00, 0xe5, 0x5d, 0x68, 0xc4, 0x6d, 0xa3, 0xff, 0x38, 0x96, 0xe6, 0xfc, 0xe3, 0x08, 0x0a, 0xdd, - 0xa0, 0x4c, 0x2e, 0xb0, 0x2e, 0x3a, 0x1d, 0xc8, 0x1f, 0x0b, 0x50, 0xed, 0x9f, 0xf0, 0x35, 0x9a, - 0xd2, 0xc0, 0x0d, 0x4d, 0xf3, 0xd1, 0x76, 0x25, 0xeb, 0x08, 0x17, 0x82, 0x3e, 0xf3, 0x1b, 0xc1, - 0x86, 0x2a, 0x66, 0xed, 0x6f, 0xf8, 0x8d, 0x39, 0x1e, 0xae, 0x5f, 0x05, 0x31, 0x58, 0x55, 0x84, - 0xcd, 0x69, 0xba, 0xee, 0x60, 0xd7, 0xe5, 0x73, 0xf3, 0x87, 0xf4, 0x7f, 0x80, 0xf5, 0x21, 0x6f, - 0x88, 0x16, 0x14, 0x36, 0x90, 0x75, 0x68, 0x26, 0x4a, 0x0a, 0xf4, 0x2a, 0x54, 0xec, 0xe9, 0xa1, - 0xea, 0xbb, 0x27, 0xb1, 0x79, 0xfc, 0xca, 0x7e, 0x7a, 0x38, 0x36, 0x06, 0x77, 0xf0, 0xa9, 0xff, - 0x32, 0xf6, 0xf4, 0xf0, 0x0e, 0xf3, 0x22, 0x7b, 0x4a, 0x3e, 0xfa, 0x94, 0x63, 0xa8, 0xfa, 0x8b, - 0x02, 0xfd, 0x20, 0xba, 0x4f, 0xfc, 0xbf, 0x44, 0xa9, 0x65, 0x0e, 0x87, 0x8f, 0x6c, 0x93, 0x1b, - 0xb0, 0xec, 0x1a, 0x43, 0x13, 0xeb, 0x6a, 0xc8, 0x27, 0xe9, 0xd3, 0xaa, 0x4a, 0x93, 0xdd, 0xd8, - 0xf1, 0xc9, 0xa4, 0xfc, 0x2f, 0x01, 0xaa, 0xfe, 0x86, 0x45, 0x2f, 0x44, 0xd6, 0x5d, 0x63, 0x4e, - 0x2f, 0xcf, 0x57, 0x0c, 0x5b, 0xfa, 0xf1, 0x77, 0xcd, 0x9f, 0xff, 0x5d, 0xd3, 0xfe, 0xcd, 0xf8, - 0x8d, 0xdd, 0xe2, 0xb9, 0x7f, 0x92, 0x3d, 0x07, 0xc8, 0xb3, 0x3c, 0x6d, 0xac, 0x1e, 0x5b, 0x9e, - 0x61, 0x0e, 0x55, 0xe6, 0x6c, 0x56, 0xed, 0xb6, 0xe8, 0x9d, 0x7b, 0xf4, 0xc6, 0x3e, 0xf5, 0xfb, - 0xcf, 0x05, 0xa8, 0x06, 0xd5, 0xc1, 0x79, 0x3b, 0xf4, 0x97, 0xa0, 0xcc, 0x13, 0x20, 0x6b, 0xd1, - 0xf3, 0x51, 0xf0, 0xb3, 0xa8, 0x18, 0xf9, 0x59, 0x24, 0x41, 0x75, 0x82, 0x3d, 0x8d, 0xe6, 0x19, - 0x46, 0xe9, 0x83, 0xf1, 0x8d, 0x57, 0xa0, 0x16, 0xf9, 0x59, 0x42, 0x76, 0xde, 0x6e, 0xf7, 0x9d, - 0x56, 0x4e, 0xaa, 0x7c, 0xfc, 0xd9, 0xb5, 0xc2, 0x2e, 0xfe, 0x90, 0xac, 0x59, 0xa5, 0xdb, 0xe9, - 0x75, 0x3b, 0x77, 0x5a, 0x82, 0x54, 0xfb, 0xf8, 0xb3, 0x6b, 0x15, 0x05, 0xd3, 0x16, 0xe0, 0x8d, - 0x1e, 0x2c, 0x45, 0xbf, 0x4a, 0x3c, 0x1d, 0x20, 0x68, 0xdc, 0xba, 0xbb, 0xbf, 0xb3, 0xdd, 0xd9, - 0xec, 0x77, 0xd5, 0x7b, 0x7b, 0xfd, 0x6e, 0x4b, 0x40, 0x97, 0xe1, 0xc2, 0xce, 0xf6, 0x9b, 0xbd, - 0xbe, 0xda, 0xd9, 0xd9, 0xee, 0xee, 0xf6, 0xd5, 0xcd, 0x7e, 0x7f, 0xb3, 0x73, 0xa7, 0x95, 0xdf, - 0xf8, 0x53, 0x0d, 0x9a, 0x9b, 0x5b, 0x9d, 0x6d, 0x92, 0xff, 0x8d, 0x81, 0xc6, 0x5b, 0xac, 0x45, - 0xda, 0x51, 0x39, 0xf3, 0xb0, 0x8b, 0x74, 0x76, 0x87, 0x19, 0xdd, 0x86, 0x12, 0x6d, 0xb6, 0xa0, - 0xb3, 0x4f, 0xbf, 0x48, 0x0b, 0x5a, 0xce, 0xe4, 0x65, 0xe8, 0xf6, 0x38, 0xf3, 0x38, 0x8c, 0x74, - 0x76, 0x07, 0x1a, 0x29, 0x20, 0x86, 0xdd, 0x92, 0xc5, 0xc7, 0x63, 0xa4, 0x0c, 0x5d, 0x69, 0x82, - 0x19, 0x52, 0xb6, 0xc5, 0xc7, 0x45, 0xa4, 0x0c, 0x01, 0x0c, 0xed, 0x40, 0xc5, 0x67, 0xd9, 0x8b, - 0x0e, 0xb0, 0x48, 0x0b, 0x3b, 0xc6, 0xe4, 0x13, 0xb0, 0x6e, 0xc8, 0xd9, 0xa7, 0x71, 0xa4, 0x05, - 0xed, 0x6f, 0xb4, 0x0d, 0x65, 0x5e, 0xed, 0x2f, 0x38, 0x94, 0x22, 0x2d, 0xea, 0x00, 0x13, 0xa7, - 0x85, 0x6d, 0xa6, 0xc5, 0x67, 0x8c, 0xa4, 0x0c, 0x9d, 0x7d, 0x74, 0x17, 0x20, 0xd2, 0xfb, 0xc8, - 0x70, 0x78, 0x48, 0xca, 0xd2, 0xb1, 0x47, 0x7b, 0x50, 0x0d, 0xa8, 0xe8, 0xc2, 0xa3, 0x3c, 0xd2, - 0xe2, 0xd6, 0x39, 0xba, 0x0f, 0xf5, 0x38, 0xd3, 0xc9, 0x76, 0x40, 0x47, 0xca, 0xd8, 0x13, 0x27, - 0xf8, 0x71, 0xda, 0x93, 0xed, 0xc0, 0x8e, 0x94, 0xb1, 0x45, 0x8e, 0xde, 0x87, 0xe5, 0x59, 0x5a, - 0x92, 0xfd, 0xfc, 0x8e, 0x74, 0x8e, 0xa6, 0x39, 0x9a, 0x00, 0x9a, 0x43, 0x67, 0xce, 0x71, 0x9c, - 0x47, 0x3a, 0x4f, 0x0f, 0x1d, 0xe9, 0xd0, 0x4c, 0x72, 0x84, 0xac, 0xc7, 0x7b, 0xa4, 0xcc, 0xfd, - 0x74, 0xf6, 0x94, 0x38, 0x6d, 0xc8, 0x7a, 0xdc, 0x47, 0xca, 0xdc, 0x5e, 0xdf, 0xea, 0x7e, 0xfe, - 0xd5, 0x8a, 0xf0, 0xc5, 0x57, 0x2b, 0xc2, 0xdf, 0xbe, 0x5a, 0x11, 0x3e, 0xf9, 0x7a, 0x25, 0xf7, - 0xc5, 0xd7, 0x2b, 0xb9, 0x3f, 0x7f, 0xbd, 0x92, 0xfb, 0xc9, 0xb3, 0x43, 0xc3, 0x1b, 0x4d, 0x0f, - 0xd7, 0x06, 0xd6, 0x64, 0x3d, 0x7a, 0xae, 0x72, 0xde, 0x59, 0xcf, 0xc3, 0x32, 0x4d, 0xba, 0x2f, - 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0x48, 0xa6, 0x8c, 0x1f, 0x0b, 0x2a, 0x00, 0x00, + // 3094 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcb, 0x73, 0xdc, 0xc6, + 0xd1, 0x5f, 0xec, 0x1b, 0xbd, 0xdc, 0x07, 0x47, 0xb2, 0xb4, 0x82, 0x65, 0x52, 0x86, 0xca, 0x2f, + 0xd9, 0x26, 0x3f, 0xd3, 0x25, 0x7f, 0x56, 0xec, 0xc4, 0x26, 0x57, 0x2b, 0x2f, 0x2d, 0x9a, 0x64, + 0xc0, 0x95, 0x9c, 0x97, 0x05, 0x83, 0x8b, 0xe1, 0x2e, 0xac, 0x5d, 0x00, 0x06, 0xb0, 0x34, 0xa9, + 0x63, 0x2a, 0xa9, 0x54, 0xf9, 0xe4, 0xaa, 0x5c, 0x7c, 0xf1, 0x3d, 0x97, 0xdc, 0x73, 0x49, 0x2e, + 0xa9, 0x4a, 0xb9, 0x2a, 0x87, 0xf8, 0x98, 0x43, 0xca, 0x49, 0xd9, 0x39, 0xe5, 0x1f, 0xc8, 0x29, + 0x95, 0xd4, 0x3c, 0xf0, 0xdc, 0x05, 0x17, 0xb4, 0x73, 0xcb, 0x6d, 0xa6, 0xa7, 0xbb, 0x31, 0xd3, + 0x33, 0xd3, 0xdd, 0xbf, 0xc6, 0xc0, 0xe3, 0x1e, 0x36, 0x75, 0xec, 0x4c, 0x0c, 0xd3, 0x5b, 0xd7, + 0x0e, 0x07, 0xc6, 0xba, 0x77, 0x6a, 0x63, 0x77, 0xcd, 0x76, 0x2c, 0xcf, 0x42, 0xcd, 0x70, 0x70, + 0x8d, 0x0c, 0x4a, 0x4f, 0x44, 0xb8, 0x07, 0xce, 0xa9, 0xed, 0x59, 0xeb, 0xb6, 0x63, 0x59, 0x47, + 0x8c, 0x5f, 0xba, 0x1a, 0x19, 0xa6, 0x7a, 0xa2, 0xda, 0x62, 0xa3, 0x5c, 0xf8, 0x21, 0x3e, 0xf5, + 0x47, 0x9f, 0x98, 0x91, 0xb5, 0x35, 0x47, 0x9b, 0xf8, 0xc3, 0xab, 0x43, 0xcb, 0x1a, 0x8e, 0xf1, + 0x3a, 0xed, 0x1d, 0x4e, 0x8f, 0xd6, 0x3d, 0x63, 0x82, 0x5d, 0x4f, 0x9b, 0xd8, 0x9c, 0xe1, 0xe2, + 0xd0, 0x1a, 0x5a, 0xb4, 0xb9, 0x4e, 0x5a, 0x9c, 0xba, 0x92, 0x14, 0xd3, 0xa7, 0x8e, 0xe6, 0x19, + 0x96, 0xc9, 0xc6, 0xe5, 0xdf, 0x8a, 0x50, 0x51, 0xf0, 0x87, 0x53, 0xec, 0x7a, 0x68, 0x03, 0x8a, + 0x78, 0x30, 0xb2, 0xda, 0xc2, 0x35, 0xe1, 0xd9, 0xda, 0xc6, 0xd5, 0xb5, 0xc4, 0xe2, 0xd7, 0x38, + 0x5f, 0x77, 0x30, 0xb2, 0x7a, 0x39, 0x85, 0xf2, 0xa2, 0x9b, 0x50, 0x3a, 0x1a, 0x4f, 0xdd, 0x51, + 0x3b, 0x4f, 0x85, 0x9e, 0x48, 0x13, 0xba, 0x43, 0x98, 0x7a, 0x39, 0x85, 0x71, 0x93, 0x4f, 0x19, + 0xe6, 0x91, 0xd5, 0x2e, 0x9c, 0xfd, 0xa9, 0x6d, 0xf3, 0x88, 0x7e, 0x8a, 0xf0, 0xa2, 0x2d, 0x00, + 0x17, 0x7b, 0xaa, 0x65, 0x93, 0xe9, 0xb7, 0x8b, 0x54, 0xf2, 0xc9, 0x34, 0xc9, 0x03, 0xec, 0xed, + 0x51, 0xc6, 0x5e, 0x4e, 0x11, 0x5d, 0xbf, 0x43, 0x74, 0x18, 0xa6, 0xe1, 0xa9, 0x83, 0x91, 0x66, + 0x98, 0xed, 0xd2, 0xd9, 0x3a, 0xb6, 0x4d, 0xc3, 0xeb, 0x10, 0x46, 0xa2, 0xc3, 0xf0, 0x3b, 0x64, + 0xc9, 0x1f, 0x4e, 0xb1, 0x73, 0xda, 0x2e, 0x9f, 0xbd, 0xe4, 0xef, 0x13, 0x26, 0xb2, 0x64, 0xca, + 0x8d, 0xba, 0x50, 0x3b, 0xc4, 0x43, 0xc3, 0x54, 0x0f, 0xc7, 0xd6, 0xe0, 0x61, 0xbb, 0x42, 0x85, + 0xe5, 0x34, 0xe1, 0x2d, 0xc2, 0xba, 0x45, 0x38, 0x7b, 0x39, 0x05, 0x0e, 0x83, 0x1e, 0x7a, 0x1d, + 0xaa, 0x83, 0x11, 0x1e, 0x3c, 0x54, 0xbd, 0x93, 0x76, 0x95, 0xea, 0x58, 0x4d, 0xd3, 0xd1, 0x21, + 0x7c, 0xfd, 0x93, 0x5e, 0x4e, 0xa9, 0x0c, 0x58, 0x93, 0xac, 0x5f, 0xc7, 0x63, 0xe3, 0x18, 0x3b, + 0x44, 0x5e, 0x3c, 0x7b, 0xfd, 0xb7, 0x19, 0x27, 0xd5, 0x20, 0xea, 0x7e, 0x07, 0xbd, 0x01, 0x22, + 0x36, 0x75, 0xbe, 0x0c, 0xa0, 0x2a, 0xae, 0xa5, 0x9e, 0x15, 0x53, 0xf7, 0x17, 0x51, 0xc5, 0xbc, + 0x8d, 0x5e, 0x85, 0xf2, 0xc0, 0x9a, 0x4c, 0x0c, 0xaf, 0x5d, 0xa3, 0xd2, 0x2b, 0xa9, 0x0b, 0xa0, + 0x5c, 0xbd, 0x9c, 0xc2, 0xf9, 0xd1, 0x2e, 0x34, 0xc6, 0x86, 0xeb, 0xa9, 0xae, 0xa9, 0xd9, 0xee, + 0xc8, 0xf2, 0xdc, 0xf6, 0x12, 0xd5, 0xf0, 0x54, 0x9a, 0x86, 0x1d, 0xc3, 0xf5, 0x0e, 0x7c, 0xe6, + 0x5e, 0x4e, 0xa9, 0x8f, 0xa3, 0x04, 0xa2, 0xcf, 0x3a, 0x3a, 0xc2, 0x4e, 0xa0, 0xb0, 0x5d, 0x3f, + 0x5b, 0xdf, 0x1e, 0xe1, 0xf6, 0xe5, 0x89, 0x3e, 0x2b, 0x4a, 0x40, 0x3f, 0x86, 0x0b, 0x63, 0x4b, + 0xd3, 0x03, 0x75, 0xea, 0x60, 0x34, 0x35, 0x1f, 0xb6, 0x1b, 0x54, 0xe9, 0x73, 0xa9, 0x93, 0xb4, + 0x34, 0xdd, 0x57, 0xd1, 0x21, 0x02, 0xbd, 0x9c, 0xb2, 0x3c, 0x4e, 0x12, 0xd1, 0x03, 0xb8, 0xa8, + 0xd9, 0xf6, 0xf8, 0x34, 0xa9, 0xbd, 0x49, 0xb5, 0xdf, 0x48, 0xd3, 0xbe, 0x49, 0x64, 0x92, 0xea, + 0x91, 0x36, 0x43, 0x45, 0x7d, 0x68, 0xd9, 0x0e, 0xb6, 0x35, 0x07, 0xab, 0xb6, 0x63, 0xd9, 0x96, + 0xab, 0x8d, 0xdb, 0x2d, 0xaa, 0xfb, 0x99, 0x34, 0xdd, 0xfb, 0x8c, 0x7f, 0x9f, 0xb3, 0xf7, 0x72, + 0x4a, 0xd3, 0x8e, 0x93, 0x98, 0x56, 0x6b, 0x80, 0x5d, 0x37, 0xd4, 0xba, 0xbc, 0x48, 0x2b, 0xe5, + 0x8f, 0x6b, 0x8d, 0x91, 0xb6, 0x2a, 0x50, 0x3a, 0xd6, 0xc6, 0x53, 0x2c, 0x3f, 0x03, 0xb5, 0x88, + 0x5b, 0x42, 0x6d, 0xa8, 0x4c, 0xb0, 0xeb, 0x6a, 0x43, 0x4c, 0xbd, 0x98, 0xa8, 0xf8, 0x5d, 0xb9, + 0x01, 0x4b, 0x51, 0x57, 0x24, 0xff, 0x4a, 0x80, 0xa5, 0xbe, 0x31, 0xc1, 0xd6, 0xd4, 0x73, 0x89, + 0x9b, 0x41, 0x3b, 0xd0, 0xf4, 0x58, 0x9f, 0x4f, 0x14, 0x73, 0x47, 0x78, 0x65, 0x8d, 0xf9, 0xd0, + 0x35, 0xdf, 0x87, 0xae, 0xdd, 0xe6, 0x3e, 0x74, 0xab, 0xfa, 0xf9, 0x97, 0xab, 0xb9, 0x4f, 0xff, + 0xba, 0x2a, 0x28, 0x0d, 0x2e, 0xcb, 0x66, 0x88, 0xd1, 0xdb, 0xe0, 0x53, 0x54, 0x7e, 0xd6, 0xf3, + 0xd9, 0x95, 0xd5, 0xb9, 0x28, 0x3b, 0xff, 0x64, 0xaa, 0xb5, 0x88, 0x43, 0x24, 0x8b, 0x3c, 0xc6, + 0x8e, 0x4b, 0xbc, 0x20, 0x5f, 0x24, 0xef, 0xa2, 0xeb, 0x50, 0xa7, 0xd7, 0x52, 0xf5, 0xc7, 0xc9, + 0x47, 0x8b, 0xca, 0x12, 0x25, 0xde, 0xe7, 0x4c, 0xab, 0x50, 0xb3, 0x37, 0xec, 0x80, 0xa5, 0x40, + 0x59, 0xc0, 0xde, 0xb0, 0x7d, 0x86, 0x5b, 0x50, 0xe5, 0x13, 0x70, 0xb9, 0x9b, 0x9d, 0xf5, 0x71, + 0x51, 0xd3, 0x29, 0x01, 0xbb, 0xfc, 0x1d, 0x68, 0x25, 0x1d, 0x30, 0x6a, 0x41, 0xe1, 0x21, 0x3e, + 0xe5, 0x53, 0x25, 0x4d, 0x74, 0x91, 0xef, 0x1e, 0x9d, 0x9e, 0xa8, 0xf0, 0xad, 0xfc, 0x63, 0x3e, + 0x10, 0x0e, 0x3c, 0x2f, 0x7a, 0x15, 0x8a, 0x44, 0x39, 0xdf, 0x0a, 0x69, 0xc6, 0x7a, 0x7d, 0x3f, + 0x0a, 0x32, 0xf3, 0x7d, 0x42, 0xcc, 0x47, 0x25, 0xd0, 0x15, 0xe2, 0x28, 0x35, 0xc3, 0x54, 0x0d, + 0x9d, 0x7f, 0xa7, 0x42, 0xfb, 0xdb, 0x3a, 0xba, 0x0b, 0xad, 0x81, 0x65, 0xba, 0xd8, 0x74, 0xa7, + 0xae, 0xca, 0xa2, 0x2c, 0x8f, 0x44, 0xb3, 0x8e, 0xac, 0xe3, 0x33, 0xee, 0x53, 0x3e, 0xa5, 0x39, + 0x88, 0x13, 0xd0, 0x1d, 0x80, 0x63, 0x6d, 0x6c, 0xe8, 0x9a, 0x67, 0x39, 0xc4, 0x5e, 0x85, 0xb9, + 0x6a, 0xee, 0xfb, 0x2c, 0xf7, 0x6c, 0x5d, 0xf3, 0xf0, 0x56, 0x91, 0xcc, 0x56, 0x89, 0x48, 0xa2, + 0xa7, 0xa1, 0xa9, 0xd9, 0xb6, 0xea, 0x7a, 0x9a, 0x87, 0xd5, 0xc3, 0x53, 0x0f, 0xbb, 0x34, 0x3e, + 0x2d, 0x29, 0x75, 0xcd, 0xb6, 0x0f, 0x08, 0x75, 0x8b, 0x10, 0xd1, 0x53, 0xd0, 0x20, 0xb1, 0xc8, + 0xd0, 0xc6, 0xea, 0x08, 0x1b, 0xc3, 0x91, 0x47, 0xe3, 0x50, 0x41, 0xa9, 0x73, 0x6a, 0x8f, 0x12, + 0x65, 0x3d, 0x38, 0xef, 0x34, 0x0e, 0x21, 0x04, 0x45, 0x5d, 0xf3, 0x34, 0x6a, 0xc8, 0x25, 0x85, + 0xb6, 0x09, 0xcd, 0xd6, 0xbc, 0x11, 0x37, 0x0f, 0x6d, 0xa3, 0x4b, 0x50, 0xe6, 0x6a, 0x0b, 0x54, + 0x2d, 0xef, 0x91, 0x3d, 0xb3, 0x1d, 0xeb, 0x18, 0xd3, 0x13, 0x51, 0x55, 0x58, 0x47, 0xfe, 0x59, + 0x1e, 0x96, 0x67, 0x22, 0x16, 0xd1, 0x3b, 0xd2, 0xdc, 0x91, 0xff, 0x2d, 0xd2, 0x46, 0xaf, 0x10, + 0xbd, 0x9a, 0x8e, 0x1d, 0x7e, 0x11, 0xda, 0x51, 0x13, 0xb1, 0x2c, 0xa9, 0x47, 0xc7, 0xb9, 0x69, + 0x38, 0x37, 0xda, 0x83, 0xd6, 0x58, 0x73, 0xfd, 0x5b, 0xa4, 0x46, 0xb2, 0x86, 0xd9, 0xb8, 0xb7, + 0xa3, 0xf9, 0x31, 0x83, 0x1c, 0x4b, 0xae, 0xa8, 0x31, 0x8e, 0x51, 0x91, 0x02, 0x17, 0x0f, 0x4f, + 0x1f, 0x69, 0xa6, 0x67, 0x98, 0x58, 0x9d, 0xd9, 0xb9, 0x2b, 0x33, 0x4a, 0xbb, 0xc7, 0x86, 0x8e, + 0xcd, 0x81, 0xbf, 0x65, 0x17, 0x02, 0xe1, 0x60, 0x4b, 0x5d, 0x59, 0x81, 0x46, 0x3c, 0xe6, 0xa2, + 0x06, 0xe4, 0xbd, 0x13, 0x6e, 0x80, 0xbc, 0x77, 0x82, 0xfe, 0x0f, 0x8a, 0x64, 0x91, 0x74, 0xf1, + 0x8d, 0x39, 0x09, 0x0f, 0x97, 0xeb, 0x9f, 0xda, 0x58, 0xa1, 0x9c, 0xb2, 0x1c, 0xdc, 0x86, 0x20, + 0x0e, 0x27, 0xb5, 0xca, 0xcf, 0x41, 0x33, 0x11, 0x68, 0x23, 0xfb, 0x27, 0x44, 0xf7, 0x4f, 0x6e, + 0x42, 0x3d, 0x16, 0x55, 0xe5, 0x4b, 0x70, 0x71, 0x5e, 0x90, 0x94, 0x47, 0x01, 0x3d, 0x16, 0xec, + 0xd0, 0x4d, 0xa8, 0x06, 0x51, 0xd2, 0x77, 0x8c, 0xc9, 0x55, 0xf8, 0xcc, 0x4a, 0xc0, 0x4a, 0xae, + 0x21, 0x39, 0xd6, 0xf4, 0x3c, 0xe4, 0xe9, 0xc4, 0x2b, 0x9a, 0x6d, 0xf7, 0x34, 0x77, 0x24, 0xbf, + 0x0f, 0xed, 0xb4, 0x08, 0x98, 0x58, 0x46, 0x31, 0x38, 0x86, 0x97, 0xa0, 0x7c, 0x64, 0x39, 0x13, + 0x8d, 0xf9, 0xd3, 0xba, 0xc2, 0x7b, 0xe4, 0x78, 0xb2, 0x68, 0x58, 0xa0, 0x64, 0xd6, 0x91, 0x55, + 0xb8, 0x92, 0x1a, 0x05, 0x89, 0x88, 0x61, 0xea, 0x98, 0xd9, 0xb3, 0xae, 0xb0, 0x4e, 0xa8, 0x88, + 0x4d, 0x96, 0x75, 0xc8, 0x67, 0x5d, 0xba, 0x56, 0xaa, 0x5f, 0x54, 0x78, 0x4f, 0xfe, 0xbb, 0x00, + 0x97, 0xe6, 0xc7, 0x42, 0x74, 0x13, 0x80, 0xf9, 0xe2, 0xe0, 0xda, 0xd5, 0x36, 0x2e, 0xcd, 0x1e, + 0xfa, 0xdb, 0x9a, 0xa7, 0x29, 0x22, 0xe5, 0x24, 0x4d, 0xe2, 0x06, 0x42, 0x31, 0xd5, 0x35, 0x1e, + 0xb1, 0x33, 0x53, 0x50, 0xea, 0x01, 0xcf, 0x81, 0xf1, 0x28, 0xee, 0xde, 0x0a, 0x71, 0xf7, 0x16, + 0xda, 0xae, 0x18, 0xbb, 0xc2, 0xbe, 0x2f, 0x2d, 0x9d, 0xd7, 0x97, 0xca, 0xbf, 0x88, 0x2e, 0x33, + 0x16, 0x89, 0x23, 0xf7, 0x5a, 0x38, 0xd7, 0xbd, 0x8e, 0x9b, 0x27, 0x9f, 0xd1, 0x3c, 0xf2, 0x2f, + 0x01, 0xaa, 0x0a, 0x76, 0x6d, 0xe2, 0x84, 0xd1, 0x16, 0x88, 0xf8, 0x64, 0x80, 0x19, 0x20, 0x10, + 0x52, 0x13, 0x6a, 0xc6, 0xdd, 0xf5, 0x39, 0x49, 0x36, 0x1b, 0x88, 0xa1, 0x97, 0x39, 0xe8, 0x49, + 0xc7, 0x2f, 0x5c, 0x3c, 0x8a, 0x7a, 0x5e, 0xf1, 0x51, 0x4f, 0x21, 0x35, 0x81, 0x65, 0x52, 0x09, + 0xd8, 0xf3, 0x32, 0x87, 0x3d, 0xc5, 0x05, 0x1f, 0x8b, 0xe1, 0x9e, 0x4e, 0x0c, 0xf7, 0x94, 0x16, + 0x2c, 0x33, 0x05, 0xf8, 0x74, 0x62, 0xc0, 0xa7, 0xbc, 0x40, 0x49, 0x0a, 0xf2, 0x79, 0xc5, 0x47, + 0x3e, 0x95, 0x05, 0xcb, 0x4e, 0x40, 0x9f, 0x3b, 0x71, 0xe8, 0xc3, 0x60, 0xcb, 0xf5, 0x54, 0xe9, + 0x54, 0xec, 0xf3, 0xdd, 0x08, 0xf6, 0x11, 0x53, 0x81, 0x07, 0x53, 0x32, 0x07, 0xfc, 0x74, 0x62, + 0xe0, 0x07, 0x16, 0xd8, 0x20, 0x05, 0xfd, 0xbc, 0x19, 0x45, 0x3f, 0xb5, 0x54, 0x00, 0xc5, 0x0f, + 0xcd, 0x3c, 0xf8, 0x73, 0x2b, 0x80, 0x3f, 0x4b, 0xa9, 0xf8, 0x8d, 0xaf, 0x21, 0x89, 0x7f, 0xf6, + 0x66, 0xf0, 0x0f, 0xc3, 0x2b, 0x4f, 0xa7, 0xaa, 0x58, 0x00, 0x80, 0xf6, 0x66, 0x00, 0x50, 0x63, + 0x81, 0xc2, 0x05, 0x08, 0xe8, 0x27, 0xf3, 0x11, 0x50, 0x3a, 0x46, 0xe1, 0xd3, 0xcc, 0x06, 0x81, + 0xd4, 0x14, 0x08, 0xc4, 0x60, 0xca, 0xf3, 0xa9, 0xea, 0x33, 0x63, 0xa0, 0x7b, 0x73, 0x30, 0x10, + 0x43, 0x2b, 0xcf, 0xa6, 0x2a, 0xcf, 0x00, 0x82, 0xee, 0xcd, 0x01, 0x41, 0x68, 0xa1, 0xda, 0xec, + 0x28, 0xe8, 0x39, 0x92, 0x85, 0x25, 0xdc, 0x1c, 0x89, 0x64, 0xd8, 0x71, 0x2c, 0x87, 0x67, 0xde, + 0xac, 0x23, 0x3f, 0x4b, 0xf2, 0xc2, 0xd0, 0xa5, 0x9d, 0x81, 0x98, 0x68, 0xc6, 0x10, 0x71, 0x63, + 0xf2, 0x6f, 0x84, 0x50, 0x96, 0xa6, 0x52, 0xd1, 0x9c, 0x52, 0xe4, 0x39, 0x65, 0x04, 0x9c, 0xe4, + 0xe3, 0xe0, 0x64, 0x15, 0x6a, 0x24, 0x13, 0x48, 0xe0, 0x0e, 0xcd, 0x0e, 0x70, 0xc7, 0x0d, 0x58, + 0xa6, 0xa9, 0x1e, 0x8b, 0x0b, 0xb1, 0x10, 0xd6, 0x24, 0x03, 0xec, 0x2a, 0xb1, 0x58, 0xf6, 0x22, + 0x5c, 0x88, 0xf0, 0x06, 0x19, 0x06, 0xcb, 0x98, 0x5b, 0x01, 0xf7, 0x26, 0x4f, 0x35, 0xde, 0x09, + 0x0d, 0x14, 0x02, 0x13, 0x04, 0xc5, 0x81, 0xa5, 0x63, 0x1e, 0xff, 0x69, 0x9b, 0x80, 0x95, 0xb1, + 0x35, 0xe4, 0x11, 0x95, 0x34, 0x09, 0x57, 0xe0, 0xb3, 0x45, 0xe6, 0x92, 0xe5, 0xdf, 0x0b, 0xa1, + 0xbe, 0x10, 0xab, 0xcc, 0x83, 0x15, 0xc2, 0x7f, 0x07, 0x56, 0xe4, 0xbf, 0x31, 0xac, 0x88, 0xe6, + 0x5f, 0x85, 0x78, 0xfe, 0xf5, 0x4f, 0x21, 0xdc, 0xe1, 0x00, 0x24, 0x7c, 0x33, 0x8b, 0x84, 0xc9, + 0x54, 0x89, 0xee, 0x17, 0x4f, 0xa6, 0x38, 0xf4, 0x2b, 0xd3, 0xef, 0xc6, 0xa1, 0x5f, 0x85, 0xa5, + 0x57, 0xb4, 0x83, 0x5e, 0x05, 0x91, 0x96, 0x51, 0x55, 0xcb, 0x76, 0x79, 0x78, 0x78, 0x3c, 0xba, + 0x56, 0x56, 0x2d, 0x5d, 0xdb, 0x27, 0x3c, 0x7b, 0xb6, 0xab, 0x54, 0x6d, 0xde, 0x8a, 0xe4, 0x3a, + 0x62, 0x2c, 0xd7, 0xb9, 0x0a, 0x22, 0x99, 0xbd, 0x6b, 0x6b, 0x03, 0x4c, 0x5d, 0xbd, 0xa8, 0x84, + 0x04, 0xf9, 0x01, 0xa0, 0xd9, 0x60, 0x83, 0x7a, 0x50, 0xc6, 0xc7, 0xd8, 0xf4, 0xc8, 0xae, 0x15, + 0x92, 0xe9, 0x08, 0xc7, 0x02, 0xd8, 0xf4, 0xb6, 0xda, 0xc4, 0xc8, 0xff, 0xf8, 0x72, 0xb5, 0xc5, + 0xb8, 0x5f, 0xb0, 0x26, 0x86, 0x87, 0x27, 0xb6, 0x77, 0xaa, 0x70, 0x79, 0xf9, 0x2f, 0x79, 0x92, + 0x98, 0xc7, 0x02, 0xd1, 0x5c, 0xdb, 0xfa, 0x17, 0x28, 0x1f, 0x01, 0x65, 0xd9, 0xec, 0xbd, 0x02, + 0x30, 0xd4, 0x5c, 0xf5, 0x23, 0xcd, 0xf4, 0xb0, 0xce, 0x8d, 0x1e, 0xa1, 0x20, 0x09, 0xaa, 0xa4, + 0x37, 0x75, 0xb1, 0xce, 0xf1, 0x61, 0xd0, 0x8f, 0xac, 0xb3, 0xf2, 0xed, 0xd6, 0x19, 0xb7, 0x72, + 0x35, 0x61, 0xe5, 0x48, 0xd2, 0x2c, 0x46, 0x93, 0x66, 0x32, 0x37, 0xdb, 0x31, 0x2c, 0xc7, 0xf0, + 0x4e, 0xe9, 0xd6, 0x14, 0x94, 0xa0, 0x8f, 0xae, 0x43, 0x7d, 0x82, 0x27, 0xb6, 0x65, 0x8d, 0x55, + 0xe6, 0xbc, 0x6a, 0x54, 0x74, 0x89, 0x13, 0xbb, 0xd4, 0x87, 0xfd, 0x3c, 0x1f, 0x5e, 0xbf, 0x10, + 0x1c, 0xfd, 0xcf, 0x19, 0x58, 0xfe, 0x03, 0xad, 0x98, 0xc4, 0x53, 0x0d, 0x74, 0x00, 0xcb, 0xc1, + 0xf5, 0x57, 0xa7, 0xd4, 0x2d, 0xf8, 0x07, 0x3a, 0xab, 0xff, 0x68, 0x1d, 0xc7, 0xc9, 0x2e, 0xfa, + 0x01, 0x5c, 0x4e, 0xb8, 0xb6, 0x40, 0x75, 0x3e, 0xa3, 0x87, 0x7b, 0x2c, 0xee, 0xe1, 0x7c, 0xcd, + 0xa1, 0xad, 0x0a, 0xdf, 0xd2, 0x56, 0xdf, 0xa2, 0x6c, 0xb5, 0x4d, 0xf0, 0x7b, 0x34, 0xe7, 0x9a, + 0x7b, 0x70, 0xae, 0x43, 0xdd, 0xc1, 0x1e, 0xc1, 0x5c, 0xb1, 0x0a, 0xc9, 0x12, 0x23, 0xf2, 0xba, + 0xcb, 0x3e, 0x3c, 0x36, 0x37, 0xf7, 0x42, 0xff, 0x0f, 0x62, 0x98, 0xb6, 0x09, 0x29, 0xc5, 0x86, + 0x00, 0x40, 0x87, 0xbc, 0xf2, 0xef, 0x84, 0x50, 0x65, 0x1c, 0x92, 0x77, 0xa1, 0xec, 0x60, 0x77, + 0x3a, 0x66, 0x20, 0xb9, 0xb1, 0xf1, 0x62, 0xb6, 0xac, 0x8d, 0x50, 0xa7, 0x63, 0x4f, 0xe1, 0xc2, + 0xf2, 0x03, 0x28, 0x33, 0x0a, 0xaa, 0x41, 0xe5, 0xde, 0xee, 0xdd, 0xdd, 0xbd, 0x77, 0x77, 0x5b, + 0x39, 0x04, 0x50, 0xde, 0xec, 0x74, 0xba, 0xfb, 0xfd, 0x96, 0x80, 0x44, 0x28, 0x6d, 0x6e, 0xed, + 0x29, 0xfd, 0x56, 0x9e, 0x90, 0x95, 0xee, 0xdb, 0xdd, 0x4e, 0xbf, 0x55, 0x40, 0xcb, 0x50, 0x67, + 0x6d, 0xf5, 0xce, 0x9e, 0xf2, 0xce, 0x66, 0xbf, 0x55, 0x8c, 0x90, 0x0e, 0xba, 0xbb, 0xb7, 0xbb, + 0x4a, 0xab, 0x24, 0xbf, 0x44, 0x50, 0x78, 0x4a, 0x9e, 0x17, 0xe2, 0x6d, 0x21, 0x82, 0xb7, 0xe5, + 0x4f, 0xf3, 0x20, 0xa5, 0x27, 0x6f, 0xe8, 0xed, 0xc4, 0xc2, 0x37, 0xce, 0x91, 0xf9, 0x25, 0x56, + 0x8f, 0x9e, 0x82, 0x86, 0x83, 0x8f, 0xb0, 0x37, 0x18, 0xb1, 0x64, 0x92, 0x05, 0xdb, 0xba, 0x52, + 0xe7, 0x54, 0x2a, 0xe4, 0x32, 0xb6, 0x0f, 0xf0, 0xc0, 0x53, 0x99, 0x17, 0x63, 0xe7, 0x55, 0x24, + 0x6c, 0x84, 0x7a, 0xc0, 0x88, 0xf2, 0xfb, 0xe7, 0xb2, 0xa5, 0x08, 0x25, 0xa5, 0xdb, 0x57, 0x7e, + 0xd8, 0x2a, 0x20, 0x04, 0x0d, 0xda, 0x54, 0x0f, 0x76, 0x37, 0xf7, 0x0f, 0x7a, 0x7b, 0xc4, 0x96, + 0x17, 0xa0, 0xe9, 0xdb, 0xd2, 0x27, 0x96, 0xe4, 0x7d, 0xb8, 0x9c, 0x92, 0x79, 0x7e, 0xc3, 0x92, + 0x83, 0xfc, 0x6b, 0x21, 0xaa, 0x32, 0x0e, 0xef, 0xdf, 0x4a, 0x58, 0x7a, 0x3d, 0x6b, 0xbe, 0x9a, + 0x34, 0xb3, 0x04, 0x55, 0xcc, 0x2b, 0x69, 0xd4, 0xc0, 0x4b, 0x4a, 0xd0, 0x97, 0x5f, 0x5c, 0x6c, + 0xb4, 0xf0, 0xd4, 0xe5, 0xe5, 0x7f, 0x0b, 0xd0, 0x4c, 0x78, 0x17, 0xb4, 0x01, 0x25, 0x06, 0xc9, + 0xd2, 0x7e, 0x5e, 0x52, 0xe7, 0xc8, 0x5d, 0x11, 0x63, 0x45, 0xaf, 0xc7, 0xa6, 0x34, 0xe3, 0xc5, + 0x98, 0xb1, 0xfc, 0xf2, 0x1f, 0x17, 0x0d, 0x24, 0xd0, 0x1b, 0x20, 0x06, 0x6e, 0x92, 0xd7, 0x01, + 0x9e, 0x9c, 0x15, 0x0f, 0x1c, 0x2c, 0x97, 0x0f, 0x65, 0xd0, 0xad, 0x30, 0x53, 0x2e, 0xce, 0x02, + 0x41, 0x2e, 0xce, 0x18, 0xb8, 0xb0, 0xcf, 0x2f, 0x77, 0xa0, 0x16, 0x59, 0x0f, 0x7a, 0x1c, 0xc4, + 0x89, 0x76, 0xc2, 0x8b, 0xc6, 0xac, 0xec, 0x57, 0x9d, 0x68, 0x27, 0xac, 0x5e, 0x7c, 0x19, 0x2a, + 0x64, 0x70, 0xa8, 0xb9, 0xbc, 0x90, 0x54, 0x9e, 0x68, 0x27, 0x6f, 0x69, 0xae, 0xfc, 0x1e, 0x34, + 0xe2, 0x05, 0x53, 0x72, 0x17, 0x1d, 0x6b, 0x6a, 0xea, 0x54, 0x47, 0x49, 0x61, 0x1d, 0x74, 0x13, + 0x4a, 0xc7, 0x16, 0xf3, 0xf4, 0xf3, 0x9d, 0xd6, 0x7d, 0xcb, 0xc3, 0x91, 0x82, 0x2b, 0xe3, 0x96, + 0x1f, 0x41, 0x89, 0x7a, 0x6e, 0xe2, 0x4a, 0x69, 0xe9, 0x93, 0xa3, 0x04, 0xd2, 0x46, 0xef, 0x01, + 0x68, 0x9e, 0xe7, 0x18, 0x87, 0xd3, 0x50, 0xf1, 0xea, 0x7c, 0xcf, 0xbf, 0xe9, 0xf3, 0x6d, 0x5d, + 0xe5, 0x21, 0xe0, 0x62, 0x28, 0x1a, 0x09, 0x03, 0x11, 0x85, 0xf2, 0x2e, 0x34, 0xe2, 0xb2, 0xd1, + 0x9f, 0x10, 0x4b, 0x73, 0x7e, 0x42, 0x04, 0x99, 0x68, 0x90, 0xc7, 0x16, 0x58, 0x99, 0x9b, 0x76, + 0xe4, 0x8f, 0x05, 0xa8, 0xf6, 0x4f, 0xf8, 0x19, 0x4d, 0xa9, 0xb0, 0x86, 0xa2, 0xf9, 0x68, 0x3d, + 0x91, 0x95, 0x6c, 0x0b, 0x41, 0x21, 0xf8, 0xcd, 0xe0, 0x42, 0x15, 0xb3, 0x16, 0x20, 0xfc, 0xca, + 0x19, 0x77, 0xd7, 0xaf, 0x81, 0x18, 0x9c, 0x2a, 0x02, 0xb7, 0x34, 0x5d, 0x77, 0xb0, 0xeb, 0xf2, + 0xb5, 0xf9, 0x5d, 0x5a, 0xb0, 0xb7, 0x3e, 0xe2, 0x15, 0xcb, 0x82, 0xc2, 0x3a, 0xb2, 0x0e, 0xcd, + 0x44, 0xcc, 0x47, 0xaf, 0x41, 0xc5, 0x9e, 0x1e, 0xaa, 0xbe, 0x79, 0x12, 0x97, 0xc7, 0x4f, 0xbd, + 0xa7, 0x87, 0x63, 0x63, 0x70, 0x17, 0x9f, 0xfa, 0x93, 0xb1, 0xa7, 0x87, 0x77, 0x99, 0x15, 0xd9, + 0x57, 0xf2, 0xd1, 0xaf, 0x1c, 0x43, 0xd5, 0x3f, 0x14, 0xe8, 0x7b, 0xd1, 0x7b, 0xe2, 0xff, 0xc6, + 0x49, 0xcd, 0x43, 0xb8, 0xfa, 0xc8, 0x35, 0xb9, 0x01, 0xcb, 0xae, 0x31, 0x34, 0xb1, 0xae, 0x86, + 0x80, 0x8f, 0x7e, 0xad, 0xaa, 0x34, 0xd9, 0xc0, 0x8e, 0x8f, 0xf6, 0xe4, 0x7f, 0x09, 0x50, 0xf5, + 0x2f, 0x2c, 0x7a, 0x29, 0x72, 0xee, 0x1a, 0x73, 0x72, 0x01, 0x9f, 0x31, 0xac, 0xb9, 0xc7, 0xe7, + 0x9a, 0x3f, 0xff, 0x5c, 0xd3, 0x7e, 0x9e, 0xf8, 0x95, 0xd7, 0xe2, 0xb9, 0xff, 0x62, 0xbd, 0x00, + 0xc8, 0xb3, 0x3c, 0x6d, 0xac, 0x1e, 0x5b, 0x9e, 0x61, 0x0e, 0x55, 0x66, 0x6c, 0x96, 0x8e, 0xb6, + 0xe8, 0xc8, 0x7d, 0x3a, 0xb0, 0x4f, 0xed, 0xfe, 0x53, 0x01, 0xaa, 0x41, 0x76, 0x70, 0xde, 0x12, + 0xfa, 0x25, 0x28, 0xf3, 0x00, 0xc8, 0x6a, 0xe8, 0xbc, 0x17, 0xfc, 0xcd, 0x29, 0x46, 0xfe, 0xe6, + 0x48, 0x50, 0x9d, 0x60, 0x4f, 0xa3, 0x71, 0x86, 0x61, 0xee, 0xa0, 0x7f, 0xe3, 0x16, 0xd4, 0x22, + 0x7f, 0x33, 0xc8, 0xcd, 0xdb, 0xed, 0xbe, 0xdb, 0xca, 0x49, 0x95, 0x8f, 0x3f, 0xbb, 0x56, 0xd8, + 0xc5, 0x1f, 0x91, 0x33, 0xab, 0x74, 0x3b, 0xbd, 0x6e, 0xe7, 0x6e, 0x4b, 0x90, 0x6a, 0x1f, 0x7f, + 0x76, 0xad, 0xa2, 0x60, 0x5a, 0xa3, 0xbb, 0xd1, 0x83, 0xa5, 0xe8, 0xae, 0xc4, 0xc3, 0x01, 0x82, + 0xc6, 0xed, 0x7b, 0xfb, 0x3b, 0xdb, 0x9d, 0xcd, 0x7e, 0x57, 0xbd, 0xbf, 0xd7, 0xef, 0xb6, 0x04, + 0x74, 0x19, 0x2e, 0xec, 0x6c, 0xbf, 0xd5, 0xeb, 0xab, 0x9d, 0x9d, 0xed, 0xee, 0x6e, 0x5f, 0xdd, + 0xec, 0xf7, 0x37, 0x3b, 0x77, 0x5b, 0xf9, 0x8d, 0x3f, 0xd5, 0xa0, 0xb9, 0xb9, 0xd5, 0xd9, 0x26, + 0xf1, 0xdf, 0x18, 0x68, 0xbc, 0x06, 0x5a, 0xa4, 0x25, 0x8f, 0x33, 0x5f, 0xb6, 0x48, 0x67, 0x97, + 0x80, 0xd1, 0x1d, 0x28, 0xd1, 0x6a, 0x08, 0x3a, 0xfb, 0xa9, 0x8b, 0xb4, 0xa0, 0x26, 0x4c, 0x26, + 0x43, 0xaf, 0xc7, 0x99, 0x6f, 0x5f, 0xa4, 0xb3, 0x4b, 0xc4, 0x48, 0x01, 0x31, 0x2c, 0x67, 0x2c, + 0x7e, 0x0b, 0x23, 0x65, 0x28, 0x1b, 0x13, 0x9d, 0x21, 0xa6, 0x5a, 0xfc, 0x36, 0x44, 0xca, 0xe0, + 0xc0, 0xd0, 0x0e, 0x54, 0x7c, 0x18, 0xbc, 0xe8, 0xb5, 0x8a, 0xb4, 0xb0, 0xa4, 0x4b, 0xb6, 0x80, + 0x95, 0x2b, 0xce, 0x7e, 0x7a, 0x23, 0x2d, 0xa8, 0x4f, 0xa3, 0x6d, 0x28, 0xf3, 0x6c, 0x7f, 0xc1, + 0x0b, 0x14, 0x69, 0x51, 0x89, 0x96, 0x18, 0x2d, 0xac, 0x03, 0x2d, 0x7e, 0x50, 0x24, 0x65, 0x28, + 0xbd, 0xa3, 0x7b, 0x00, 0x91, 0xe2, 0x44, 0x86, 0x97, 0x42, 0x52, 0x96, 0x92, 0x3a, 0xda, 0x83, + 0x6a, 0x80, 0x15, 0x17, 0xbe, 0xdb, 0x91, 0x16, 0xd7, 0xb6, 0xd1, 0x03, 0xa8, 0xc7, 0x91, 0x4e, + 0xb6, 0xd7, 0x38, 0x52, 0xc6, 0xa2, 0x35, 0xd1, 0x1f, 0x87, 0x3d, 0xd9, 0x5e, 0xe7, 0x48, 0x19, + 0x6b, 0xd8, 0xe8, 0x03, 0x58, 0x9e, 0x85, 0x25, 0xd9, 0x1f, 0xeb, 0x48, 0xe7, 0xa8, 0x6a, 0xa3, + 0x09, 0xa0, 0x39, 0x70, 0xe6, 0x1c, 0x6f, 0x77, 0xa4, 0xf3, 0x14, 0xb9, 0x91, 0x0e, 0xcd, 0x24, + 0x46, 0xc8, 0xfa, 0x96, 0x47, 0xca, 0x5c, 0xf0, 0x66, 0x5f, 0x89, 0xc3, 0x86, 0xac, 0x6f, 0x7b, + 0xa4, 0xcc, 0xf5, 0xef, 0xad, 0xee, 0xe7, 0x5f, 0xad, 0x08, 0x5f, 0x7c, 0xb5, 0x22, 0xfc, 0xed, + 0xab, 0x15, 0xe1, 0x93, 0xaf, 0x57, 0x72, 0x5f, 0x7c, 0xbd, 0x92, 0xfb, 0xf3, 0xd7, 0x2b, 0xb9, + 0x1f, 0x3d, 0x3f, 0x34, 0xbc, 0xd1, 0xf4, 0x70, 0x6d, 0x60, 0x4d, 0xd6, 0xa3, 0x8f, 0x28, 0xe7, + 0x3d, 0xec, 0x3c, 0x2c, 0xd3, 0xa0, 0xfb, 0xf2, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x2c, + 0x2a, 0x36, 0xf8, 0x29, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4874,7 +4913,7 @@ func (m *RequestFlush) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *RequestInfo) Marshal() (dAtA []byte, err error) { +func (m *TimeoutsInfo) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4884,12 +4923,12 @@ func (m *RequestInfo) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *RequestInfo) MarshalTo(dAtA []byte) (int, error) { +func (m *TimeoutsInfo) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *RequestInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *TimeoutsInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4901,7 +4940,7 @@ func (m *RequestInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= n18 i = encodeVarintTypes(dAtA, i, uint64(n18)) i-- - dAtA[i] = 0x2a + dAtA[i] = 0x12 n19, err19 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TimeoutPropose, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutPropose):]) if err19 != nil { return 0, err19 @@ -4909,7 +4948,42 @@ func (m *RequestInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= n19 i = encodeVarintTypes(dAtA, i, uint64(n19)) i-- - dAtA[i] = 0x22 + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RequestInfo) 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 *RequestInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RequestInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Timeouts != nil { + { + size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } if m.P2PVersion != 0 { i = encodeVarintTypes(dAtA, i, uint64(m.P2PVersion)) i-- @@ -5032,12 +5106,12 @@ func (m *RequestInitChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - n21, err21 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err21 != nil { - return 0, err21 + n22, err22 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err22 != nil { + return 0, err22 } - i -= n21 - i = encodeVarintTypes(dAtA, i, uint64(n21)) + i -= n22 + i = encodeVarintTypes(dAtA, i, uint64(n22)) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -5440,12 +5514,12 @@ func (m *RequestPrepareProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l - n25, err25 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err25 != nil { - return 0, err25 + n26, err26 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err26 != nil { + return 0, err26 } - i -= n25 - i = encodeVarintTypes(dAtA, i, uint64(n25)) + i -= n26 + i = encodeVarintTypes(dAtA, i, uint64(n26)) i-- dAtA[i] = 0x2a if m.Height != 0 { @@ -6497,22 +6571,18 @@ func (m *ResponseEndBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n49, err49 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TimeoutCommit, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutCommit):]) - if err49 != nil { - return 0, err49 - } - i -= n49 - i = encodeVarintTypes(dAtA, i, uint64(n49)) - i-- - dAtA[i] = 0x2a - n50, err50 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TimeoutPropose, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutPropose):]) - if err50 != nil { - return 0, err50 + if m.Timeouts != nil { + { + size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n50 - i = encodeVarintTypes(dAtA, i, uint64(n50)) - i-- - dAtA[i] = 0x22 if len(m.Events) > 0 { for iNdEx := len(m.Events) - 1; iNdEx >= 0; iNdEx-- { { @@ -7573,6 +7643,19 @@ func (m *RequestFlush) Size() (n int) { return n } +func (m *TimeoutsInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutPropose) + n += 1 + l + sovTypes(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutCommit) + n += 1 + l + sovTypes(uint64(l)) + return n +} + func (m *RequestInfo) Size() (n int) { if m == nil { return 0 @@ -7589,10 +7672,10 @@ func (m *RequestInfo) Size() (n int) { if m.P2PVersion != 0 { n += 1 + sovTypes(uint64(m.P2PVersion)) } - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutPropose) - n += 1 + l + sovTypes(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutCommit) - n += 1 + l + sovTypes(uint64(l)) + if m.Timeouts != nil { + l = m.Timeouts.Size() + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -8348,10 +8431,10 @@ func (m *ResponseEndBlock) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutPropose) - n += 1 + l + sovTypes(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.TimeoutCommit) - n += 1 + l + sovTypes(uint64(l)) + if m.Timeouts != nil { + l = m.Timeouts.Size() + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -9460,6 +9543,122 @@ func (m *RequestFlush) Unmarshal(dAtA []byte) error { } return nil } +func (m *TimeoutsInfo) 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: TimeoutsInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TimeoutsInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutPropose", 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 + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TimeoutPropose, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutCommit", 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 + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TimeoutCommit, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *RequestInfo) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -9561,7 +9760,7 @@ func (m *RequestInfo) Unmarshal(dAtA []byte) error { } case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TimeoutPropose", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Timeouts", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -9588,40 +9787,10 @@ func (m *RequestInfo) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TimeoutPropose, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TimeoutCommit", 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 m.Timeouts == nil { + m.Timeouts = &TimeoutsInfo{} } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TimeoutCommit, dAtA[iNdEx:postIndex]); err != nil { + if err := m.Timeouts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -13881,7 +14050,7 @@ func (m *ResponseEndBlock) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TimeoutPropose", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Timeouts", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -13908,40 +14077,10 @@ func (m *ResponseEndBlock) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TimeoutPropose, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TimeoutCommit", 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 + if m.Timeouts == nil { + m.Timeouts = &TimeoutsInfo{} } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.TimeoutCommit, dAtA[iNdEx:postIndex]); err != nil { + if err := m.Timeouts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index a781ffc4a5..27b7bf1c30 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -48,12 +48,16 @@ message RequestEcho { message RequestFlush {} +message TimeoutsInfo { + google.protobuf.Duration timeout_propose = 1 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + google.protobuf.Duration timeout_commit = 2 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; +} + message RequestInfo { - string version = 1; - uint64 block_version = 2; - uint64 p2p_version = 3; - google.protobuf.Duration timeout_propose = 4 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; - google.protobuf.Duration timeout_commit = 5 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + string version = 1; + uint64 block_version = 2; + uint64 p2p_version = 3; + TimeoutsInfo timeouts = 4; } // nondeterministic @@ -267,8 +271,7 @@ message ResponseEndBlock { ConsensusParams consensus_param_updates = 2; repeated Event events = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - google.protobuf.Duration timeout_propose = 4 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; - google.protobuf.Duration timeout_commit = 5 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + TimeoutsInfo timeouts = 4; } message ResponseCommit { diff --git a/state/execution.go b/state/execution.go index bf7f1e6959..de77a88e11 100644 --- a/state/execution.go +++ b/state/execution.go @@ -568,8 +568,8 @@ func updateState( LastHeightConsensusParamsChanged: lastHeightParamsChanged, LastResultsHash: ABCIResponsesResultsHash(abciResponses), AppHash: nil, - timeoutCommit: abciResponses.EndBlock.TimeoutCommit, - timeoutPropose: abciResponses.EndBlock.TimeoutPropose, + timeoutCommit: abciResponses.EndBlock.Timeouts.TimeoutCommit, + timeoutPropose: abciResponses.EndBlock.Timeouts.TimeoutPropose, } return s, nil From fa27abe8e36ef87d0078c855f2958c211294726b Mon Sep 17 00:00:00 2001 From: sanaz Date: Fri, 20 Sep 2024 10:03:24 -0700 Subject: [PATCH 10/87] moves tiemouts to the response msg --- abci/types/types.pb.go | 524 +++++++++++++++--------------- node/node.go | 5 +- proto/tendermint/abci/types.proto | 9 +- 3 files changed, 270 insertions(+), 268 deletions(-) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index 46b484720a..eb541744ed 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -602,10 +602,9 @@ func (m *TimeoutsInfo) GetTimeoutCommit() time.Duration { } type RequestInfo struct { - Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` - BlockVersion uint64 `protobuf:"varint,2,opt,name=block_version,json=blockVersion,proto3" json:"block_version,omitempty"` - P2PVersion uint64 `protobuf:"varint,3,opt,name=p2p_version,json=p2pVersion,proto3" json:"p2p_version,omitempty"` - Timeouts *TimeoutsInfo `protobuf:"bytes,4,opt,name=timeouts,proto3" json:"timeouts,omitempty"` + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + BlockVersion uint64 `protobuf:"varint,2,opt,name=block_version,json=blockVersion,proto3" json:"block_version,omitempty"` + P2PVersion uint64 `protobuf:"varint,3,opt,name=p2p_version,json=p2pVersion,proto3" json:"p2p_version,omitempty"` } func (m *RequestInfo) Reset() { *m = RequestInfo{} } @@ -662,13 +661,6 @@ func (m *RequestInfo) GetP2PVersion() uint64 { return 0 } -func (m *RequestInfo) GetTimeouts() *TimeoutsInfo { - if m != nil { - return m.Timeouts - } - return nil -} - // nondeterministic type RequestSetOption struct { Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` @@ -1887,11 +1879,12 @@ func (m *ResponseFlush) XXX_DiscardUnknown() { var xxx_messageInfo_ResponseFlush proto.InternalMessageInfo type ResponseInfo struct { - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - AppVersion uint64 `protobuf:"varint,3,opt,name=app_version,json=appVersion,proto3" json:"app_version,omitempty"` - LastBlockHeight int64 `protobuf:"varint,4,opt,name=last_block_height,json=lastBlockHeight,proto3" json:"last_block_height,omitempty"` - LastBlockAppHash []byte `protobuf:"bytes,5,opt,name=last_block_app_hash,json=lastBlockAppHash,proto3" json:"last_block_app_hash,omitempty"` + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + AppVersion uint64 `protobuf:"varint,3,opt,name=app_version,json=appVersion,proto3" json:"app_version,omitempty"` + LastBlockHeight int64 `protobuf:"varint,4,opt,name=last_block_height,json=lastBlockHeight,proto3" json:"last_block_height,omitempty"` + LastBlockAppHash []byte `protobuf:"bytes,5,opt,name=last_block_app_hash,json=lastBlockAppHash,proto3" json:"last_block_app_hash,omitempty"` + Timeouts *TimeoutsInfo `protobuf:"bytes,6,opt,name=timeouts,proto3" json:"timeouts,omitempty"` } func (m *ResponseInfo) Reset() { *m = ResponseInfo{} } @@ -1962,6 +1955,13 @@ func (m *ResponseInfo) GetLastBlockAppHash() []byte { return nil } +func (m *ResponseInfo) GetTimeouts() *TimeoutsInfo { + if m != nil { + return m.Timeouts + } + return nil +} + // nondeterministic type ResponseSetOption struct { Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` @@ -3614,201 +3614,201 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 3094 bytes of a gzipped FileDescriptorProto + // 3100 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcb, 0x73, 0xdc, 0xc6, 0xd1, 0x5f, 0xec, 0x1b, 0xbd, 0xdc, 0x07, 0x47, 0xb2, 0xb4, 0x82, 0x65, 0x52, 0x86, 0xca, 0x2f, 0xd9, 0x26, 0x3f, 0xd3, 0x25, 0x7f, 0x56, 0xec, 0xc4, 0x26, 0x57, 0x2b, 0x2f, 0x2d, 0x9a, 0x64, 0xc0, 0x95, 0x9c, 0x97, 0x05, 0x83, 0x8b, 0xe1, 0x2e, 0xac, 0x5d, 0x00, 0x06, 0xb0, 0x34, 0xa9, - 0x63, 0x2a, 0xa9, 0x54, 0xf9, 0xe4, 0xaa, 0x5c, 0x7c, 0xf1, 0x3d, 0x97, 0xdc, 0x73, 0x49, 0x2e, - 0xa9, 0x4a, 0xb9, 0x2a, 0x87, 0xf8, 0x98, 0x43, 0xca, 0x49, 0xd9, 0x39, 0xe5, 0x1f, 0xc8, 0x29, - 0x95, 0xd4, 0x3c, 0xf0, 0xdc, 0x05, 0x17, 0xb4, 0x73, 0xcb, 0x6d, 0xa6, 0xa7, 0xbb, 0x31, 0xd3, - 0x33, 0xd3, 0xdd, 0xbf, 0xc6, 0xc0, 0xe3, 0x1e, 0x36, 0x75, 0xec, 0x4c, 0x0c, 0xd3, 0x5b, 0xd7, + 0x63, 0x2a, 0xa9, 0x54, 0xf9, 0xe4, 0xaa, 0x5c, 0x7c, 0xf1, 0x3d, 0x97, 0xfc, 0x09, 0xc9, 0x25, + 0x55, 0x29, 0x57, 0xe5, 0x10, 0x1f, 0x73, 0x48, 0x39, 0x29, 0x3b, 0xa7, 0x5c, 0x73, 0xc8, 0x29, + 0x95, 0xd4, 0x3c, 0xf0, 0xdc, 0x05, 0x17, 0xb4, 0x73, 0xcb, 0x6d, 0xa6, 0xa7, 0xbb, 0x67, 0xa6, + 0x31, 0xd3, 0xdd, 0xbf, 0xc6, 0xc0, 0xe3, 0x1e, 0x36, 0x75, 0xec, 0x4c, 0x0c, 0xd3, 0x5b, 0xd7, 0x0e, 0x07, 0xc6, 0xba, 0x77, 0x6a, 0x63, 0x77, 0xcd, 0x76, 0x2c, 0xcf, 0x42, 0xcd, 0x70, 0x70, 0x8d, 0x0c, 0x4a, 0x4f, 0x44, 0xb8, 0x07, 0xce, 0xa9, 0xed, 0x59, 0xeb, 0xb6, 0x63, 0x59, 0x47, 0x8c, 0x5f, 0xba, 0x1a, 0x19, 0xa6, 0x7a, 0xa2, 0xda, 0x62, 0xa3, 0x5c, 0xf8, 0x21, 0x3e, 0xf5, 0x47, 0x9f, 0x98, 0x91, 0xb5, 0x35, 0x47, 0x9b, 0xf8, 0xc3, 0xab, 0x43, 0xcb, 0x1a, 0x8e, 0xf1, 0x3a, 0xed, 0x1d, 0x4e, 0x8f, 0xd6, 0x3d, 0x63, 0x82, 0x5d, 0x4f, 0x9b, 0xd8, 0x9c, 0xe1, 0xe2, 0xd0, 0x1a, 0x5a, 0xb4, 0xb9, 0x4e, 0x5a, 0x9c, 0xba, 0x92, 0x14, 0xd3, 0xa7, 0x8e, 0xe6, 0x19, - 0x96, 0xc9, 0xc6, 0xe5, 0xdf, 0x8a, 0x50, 0x51, 0xf0, 0x87, 0x53, 0xec, 0x7a, 0x68, 0x03, 0x8a, - 0x78, 0x30, 0xb2, 0xda, 0xc2, 0x35, 0xe1, 0xd9, 0xda, 0xc6, 0xd5, 0xb5, 0xc4, 0xe2, 0xd7, 0x38, + 0x96, 0xc9, 0xc6, 0xe5, 0xdf, 0x88, 0x50, 0x51, 0xf0, 0x87, 0x53, 0xec, 0x7a, 0x68, 0x03, 0x8a, + 0x78, 0x30, 0xb2, 0xda, 0xc2, 0x35, 0xe1, 0xd9, 0xda, 0xc6, 0xd5, 0xb5, 0xc4, 0xe6, 0xd7, 0x38, 0x5f, 0x77, 0x30, 0xb2, 0x7a, 0x39, 0x85, 0xf2, 0xa2, 0x9b, 0x50, 0x3a, 0x1a, 0x4f, 0xdd, 0x51, - 0x3b, 0x4f, 0x85, 0x9e, 0x48, 0x13, 0xba, 0x43, 0x98, 0x7a, 0x39, 0x85, 0x71, 0x93, 0x4f, 0x19, - 0xe6, 0x91, 0xd5, 0x2e, 0x9c, 0xfd, 0xa9, 0x6d, 0xf3, 0x88, 0x7e, 0x8a, 0xf0, 0xa2, 0x2d, 0x00, - 0x17, 0x7b, 0xaa, 0x65, 0x93, 0xe9, 0xb7, 0x8b, 0x54, 0xf2, 0xc9, 0x34, 0xc9, 0x03, 0xec, 0xed, - 0x51, 0xc6, 0x5e, 0x4e, 0x11, 0x5d, 0xbf, 0x43, 0x74, 0x18, 0xa6, 0xe1, 0xa9, 0x83, 0x91, 0x66, - 0x98, 0xed, 0xd2, 0xd9, 0x3a, 0xb6, 0x4d, 0xc3, 0xeb, 0x10, 0x46, 0xa2, 0xc3, 0xf0, 0x3b, 0x64, - 0xc9, 0x1f, 0x4e, 0xb1, 0x73, 0xda, 0x2e, 0x9f, 0xbd, 0xe4, 0xef, 0x13, 0x26, 0xb2, 0x64, 0xca, - 0x8d, 0xba, 0x50, 0x3b, 0xc4, 0x43, 0xc3, 0x54, 0x0f, 0xc7, 0xd6, 0xe0, 0x61, 0xbb, 0x42, 0x85, - 0xe5, 0x34, 0xe1, 0x2d, 0xc2, 0xba, 0x45, 0x38, 0x7b, 0x39, 0x05, 0x0e, 0x83, 0x1e, 0x7a, 0x1d, - 0xaa, 0x83, 0x11, 0x1e, 0x3c, 0x54, 0xbd, 0x93, 0x76, 0x95, 0xea, 0x58, 0x4d, 0xd3, 0xd1, 0x21, - 0x7c, 0xfd, 0x93, 0x5e, 0x4e, 0xa9, 0x0c, 0x58, 0x93, 0xac, 0x5f, 0xc7, 0x63, 0xe3, 0x18, 0x3b, - 0x44, 0x5e, 0x3c, 0x7b, 0xfd, 0xb7, 0x19, 0x27, 0xd5, 0x20, 0xea, 0x7e, 0x07, 0xbd, 0x01, 0x22, - 0x36, 0x75, 0xbe, 0x0c, 0xa0, 0x2a, 0xae, 0xa5, 0x9e, 0x15, 0x53, 0xf7, 0x17, 0x51, 0xc5, 0xbc, - 0x8d, 0x5e, 0x85, 0xf2, 0xc0, 0x9a, 0x4c, 0x0c, 0xaf, 0x5d, 0xa3, 0xd2, 0x2b, 0xa9, 0x0b, 0xa0, - 0x5c, 0xbd, 0x9c, 0xc2, 0xf9, 0xd1, 0x2e, 0x34, 0xc6, 0x86, 0xeb, 0xa9, 0xae, 0xa9, 0xd9, 0xee, - 0xc8, 0xf2, 0xdc, 0xf6, 0x12, 0xd5, 0xf0, 0x54, 0x9a, 0x86, 0x1d, 0xc3, 0xf5, 0x0e, 0x7c, 0xe6, - 0x5e, 0x4e, 0xa9, 0x8f, 0xa3, 0x04, 0xa2, 0xcf, 0x3a, 0x3a, 0xc2, 0x4e, 0xa0, 0xb0, 0x5d, 0x3f, - 0x5b, 0xdf, 0x1e, 0xe1, 0xf6, 0xe5, 0x89, 0x3e, 0x2b, 0x4a, 0x40, 0x3f, 0x86, 0x0b, 0x63, 0x4b, - 0xd3, 0x03, 0x75, 0xea, 0x60, 0x34, 0x35, 0x1f, 0xb6, 0x1b, 0x54, 0xe9, 0x73, 0xa9, 0x93, 0xb4, - 0x34, 0xdd, 0x57, 0xd1, 0x21, 0x02, 0xbd, 0x9c, 0xb2, 0x3c, 0x4e, 0x12, 0xd1, 0x03, 0xb8, 0xa8, - 0xd9, 0xf6, 0xf8, 0x34, 0xa9, 0xbd, 0x49, 0xb5, 0xdf, 0x48, 0xd3, 0xbe, 0x49, 0x64, 0x92, 0xea, - 0x91, 0x36, 0x43, 0x45, 0x7d, 0x68, 0xd9, 0x0e, 0xb6, 0x35, 0x07, 0xab, 0xb6, 0x63, 0xd9, 0x96, - 0xab, 0x8d, 0xdb, 0x2d, 0xaa, 0xfb, 0x99, 0x34, 0xdd, 0xfb, 0x8c, 0x7f, 0x9f, 0xb3, 0xf7, 0x72, - 0x4a, 0xd3, 0x8e, 0x93, 0x98, 0x56, 0x6b, 0x80, 0x5d, 0x37, 0xd4, 0xba, 0xbc, 0x48, 0x2b, 0xe5, - 0x8f, 0x6b, 0x8d, 0x91, 0xb6, 0x2a, 0x50, 0x3a, 0xd6, 0xc6, 0x53, 0x2c, 0x3f, 0x03, 0xb5, 0x88, - 0x5b, 0x42, 0x6d, 0xa8, 0x4c, 0xb0, 0xeb, 0x6a, 0x43, 0x4c, 0xbd, 0x98, 0xa8, 0xf8, 0x5d, 0xb9, - 0x01, 0x4b, 0x51, 0x57, 0x24, 0xff, 0x4a, 0x80, 0xa5, 0xbe, 0x31, 0xc1, 0xd6, 0xd4, 0x73, 0x89, - 0x9b, 0x41, 0x3b, 0xd0, 0xf4, 0x58, 0x9f, 0x4f, 0x14, 0x73, 0x47, 0x78, 0x65, 0x8d, 0xf9, 0xd0, - 0x35, 0xdf, 0x87, 0xae, 0xdd, 0xe6, 0x3e, 0x74, 0xab, 0xfa, 0xf9, 0x97, 0xab, 0xb9, 0x4f, 0xff, - 0xba, 0x2a, 0x28, 0x0d, 0x2e, 0xcb, 0x66, 0x88, 0xd1, 0xdb, 0xe0, 0x53, 0x54, 0x7e, 0xd6, 0xf3, - 0xd9, 0x95, 0xd5, 0xb9, 0x28, 0x3b, 0xff, 0x64, 0xaa, 0xb5, 0x88, 0x43, 0x24, 0x8b, 0x3c, 0xc6, - 0x8e, 0x4b, 0xbc, 0x20, 0x5f, 0x24, 0xef, 0xa2, 0xeb, 0x50, 0xa7, 0xd7, 0x52, 0xf5, 0xc7, 0xc9, - 0x47, 0x8b, 0xca, 0x12, 0x25, 0xde, 0xe7, 0x4c, 0xab, 0x50, 0xb3, 0x37, 0xec, 0x80, 0xa5, 0x40, - 0x59, 0xc0, 0xde, 0xb0, 0x7d, 0x86, 0x5b, 0x50, 0xe5, 0x13, 0x70, 0xb9, 0x9b, 0x9d, 0xf5, 0x71, - 0x51, 0xd3, 0x29, 0x01, 0xbb, 0xfc, 0x1d, 0x68, 0x25, 0x1d, 0x30, 0x6a, 0x41, 0xe1, 0x21, 0x3e, - 0xe5, 0x53, 0x25, 0x4d, 0x74, 0x91, 0xef, 0x1e, 0x9d, 0x9e, 0xa8, 0xf0, 0xad, 0xfc, 0x63, 0x3e, - 0x10, 0x0e, 0x3c, 0x2f, 0x7a, 0x15, 0x8a, 0x44, 0x39, 0xdf, 0x0a, 0x69, 0xc6, 0x7a, 0x7d, 0x3f, - 0x0a, 0x32, 0xf3, 0x7d, 0x42, 0xcc, 0x47, 0x25, 0xd0, 0x15, 0xe2, 0x28, 0x35, 0xc3, 0x54, 0x0d, - 0x9d, 0x7f, 0xa7, 0x42, 0xfb, 0xdb, 0x3a, 0xba, 0x0b, 0xad, 0x81, 0x65, 0xba, 0xd8, 0x74, 0xa7, - 0xae, 0xca, 0xa2, 0x2c, 0x8f, 0x44, 0xb3, 0x8e, 0xac, 0xe3, 0x33, 0xee, 0x53, 0x3e, 0xa5, 0x39, - 0x88, 0x13, 0xd0, 0x1d, 0x80, 0x63, 0x6d, 0x6c, 0xe8, 0x9a, 0x67, 0x39, 0xc4, 0x5e, 0x85, 0xb9, - 0x6a, 0xee, 0xfb, 0x2c, 0xf7, 0x6c, 0x5d, 0xf3, 0xf0, 0x56, 0x91, 0xcc, 0x56, 0x89, 0x48, 0xa2, - 0xa7, 0xa1, 0xa9, 0xd9, 0xb6, 0xea, 0x7a, 0x9a, 0x87, 0xd5, 0xc3, 0x53, 0x0f, 0xbb, 0x34, 0x3e, - 0x2d, 0x29, 0x75, 0xcd, 0xb6, 0x0f, 0x08, 0x75, 0x8b, 0x10, 0xd1, 0x53, 0xd0, 0x20, 0xb1, 0xc8, - 0xd0, 0xc6, 0xea, 0x08, 0x1b, 0xc3, 0x91, 0x47, 0xe3, 0x50, 0x41, 0xa9, 0x73, 0x6a, 0x8f, 0x12, - 0x65, 0x3d, 0x38, 0xef, 0x34, 0x0e, 0x21, 0x04, 0x45, 0x5d, 0xf3, 0x34, 0x6a, 0xc8, 0x25, 0x85, - 0xb6, 0x09, 0xcd, 0xd6, 0xbc, 0x11, 0x37, 0x0f, 0x6d, 0xa3, 0x4b, 0x50, 0xe6, 0x6a, 0x0b, 0x54, - 0x2d, 0xef, 0x91, 0x3d, 0xb3, 0x1d, 0xeb, 0x18, 0xd3, 0x13, 0x51, 0x55, 0x58, 0x47, 0xfe, 0x59, - 0x1e, 0x96, 0x67, 0x22, 0x16, 0xd1, 0x3b, 0xd2, 0xdc, 0x91, 0xff, 0x2d, 0xd2, 0x46, 0xaf, 0x10, - 0xbd, 0x9a, 0x8e, 0x1d, 0x7e, 0x11, 0xda, 0x51, 0x13, 0xb1, 0x2c, 0xa9, 0x47, 0xc7, 0xb9, 0x69, - 0x38, 0x37, 0xda, 0x83, 0xd6, 0x58, 0x73, 0xfd, 0x5b, 0xa4, 0x46, 0xb2, 0x86, 0xd9, 0xb8, 0xb7, - 0xa3, 0xf9, 0x31, 0x83, 0x1c, 0x4b, 0xae, 0xa8, 0x31, 0x8e, 0x51, 0x91, 0x02, 0x17, 0x0f, 0x4f, - 0x1f, 0x69, 0xa6, 0x67, 0x98, 0x58, 0x9d, 0xd9, 0xb9, 0x2b, 0x33, 0x4a, 0xbb, 0xc7, 0x86, 0x8e, - 0xcd, 0x81, 0xbf, 0x65, 0x17, 0x02, 0xe1, 0x60, 0x4b, 0x5d, 0x59, 0x81, 0x46, 0x3c, 0xe6, 0xa2, - 0x06, 0xe4, 0xbd, 0x13, 0x6e, 0x80, 0xbc, 0x77, 0x82, 0xfe, 0x0f, 0x8a, 0x64, 0x91, 0x74, 0xf1, - 0x8d, 0x39, 0x09, 0x0f, 0x97, 0xeb, 0x9f, 0xda, 0x58, 0xa1, 0x9c, 0xb2, 0x1c, 0xdc, 0x86, 0x20, - 0x0e, 0x27, 0xb5, 0xca, 0xcf, 0x41, 0x33, 0x11, 0x68, 0x23, 0xfb, 0x27, 0x44, 0xf7, 0x4f, 0x6e, - 0x42, 0x3d, 0x16, 0x55, 0xe5, 0x4b, 0x70, 0x71, 0x5e, 0x90, 0x94, 0x47, 0x01, 0x3d, 0x16, 0xec, - 0xd0, 0x4d, 0xa8, 0x06, 0x51, 0xd2, 0x77, 0x8c, 0xc9, 0x55, 0xf8, 0xcc, 0x4a, 0xc0, 0x4a, 0xae, - 0x21, 0x39, 0xd6, 0xf4, 0x3c, 0xe4, 0xe9, 0xc4, 0x2b, 0x9a, 0x6d, 0xf7, 0x34, 0x77, 0x24, 0xbf, - 0x0f, 0xed, 0xb4, 0x08, 0x98, 0x58, 0x46, 0x31, 0x38, 0x86, 0x97, 0xa0, 0x7c, 0x64, 0x39, 0x13, - 0x8d, 0xf9, 0xd3, 0xba, 0xc2, 0x7b, 0xe4, 0x78, 0xb2, 0x68, 0x58, 0xa0, 0x64, 0xd6, 0x91, 0x55, - 0xb8, 0x92, 0x1a, 0x05, 0x89, 0x88, 0x61, 0xea, 0x98, 0xd9, 0xb3, 0xae, 0xb0, 0x4e, 0xa8, 0x88, - 0x4d, 0x96, 0x75, 0xc8, 0x67, 0x5d, 0xba, 0x56, 0xaa, 0x5f, 0x54, 0x78, 0x4f, 0xfe, 0xbb, 0x00, - 0x97, 0xe6, 0xc7, 0x42, 0x74, 0x13, 0x80, 0xf9, 0xe2, 0xe0, 0xda, 0xd5, 0x36, 0x2e, 0xcd, 0x1e, - 0xfa, 0xdb, 0x9a, 0xa7, 0x29, 0x22, 0xe5, 0x24, 0x4d, 0xe2, 0x06, 0x42, 0x31, 0xd5, 0x35, 0x1e, - 0xb1, 0x33, 0x53, 0x50, 0xea, 0x01, 0xcf, 0x81, 0xf1, 0x28, 0xee, 0xde, 0x0a, 0x71, 0xf7, 0x16, - 0xda, 0xae, 0x18, 0xbb, 0xc2, 0xbe, 0x2f, 0x2d, 0x9d, 0xd7, 0x97, 0xca, 0xbf, 0x88, 0x2e, 0x33, - 0x16, 0x89, 0x23, 0xf7, 0x5a, 0x38, 0xd7, 0xbd, 0x8e, 0x9b, 0x27, 0x9f, 0xd1, 0x3c, 0xf2, 0x2f, - 0x01, 0xaa, 0x0a, 0x76, 0x6d, 0xe2, 0x84, 0xd1, 0x16, 0x88, 0xf8, 0x64, 0x80, 0x19, 0x20, 0x10, - 0x52, 0x13, 0x6a, 0xc6, 0xdd, 0xf5, 0x39, 0x49, 0x36, 0x1b, 0x88, 0xa1, 0x97, 0x39, 0xe8, 0x49, - 0xc7, 0x2f, 0x5c, 0x3c, 0x8a, 0x7a, 0x5e, 0xf1, 0x51, 0x4f, 0x21, 0x35, 0x81, 0x65, 0x52, 0x09, - 0xd8, 0xf3, 0x32, 0x87, 0x3d, 0xc5, 0x05, 0x1f, 0x8b, 0xe1, 0x9e, 0x4e, 0x0c, 0xf7, 0x94, 0x16, - 0x2c, 0x33, 0x05, 0xf8, 0x74, 0x62, 0xc0, 0xa7, 0xbc, 0x40, 0x49, 0x0a, 0xf2, 0x79, 0xc5, 0x47, - 0x3e, 0x95, 0x05, 0xcb, 0x4e, 0x40, 0x9f, 0x3b, 0x71, 0xe8, 0xc3, 0x60, 0xcb, 0xf5, 0x54, 0xe9, - 0x54, 0xec, 0xf3, 0xdd, 0x08, 0xf6, 0x11, 0x53, 0x81, 0x07, 0x53, 0x32, 0x07, 0xfc, 0x74, 0x62, - 0xe0, 0x07, 0x16, 0xd8, 0x20, 0x05, 0xfd, 0xbc, 0x19, 0x45, 0x3f, 0xb5, 0x54, 0x00, 0xc5, 0x0f, - 0xcd, 0x3c, 0xf8, 0x73, 0x2b, 0x80, 0x3f, 0x4b, 0xa9, 0xf8, 0x8d, 0xaf, 0x21, 0x89, 0x7f, 0xf6, - 0x66, 0xf0, 0x0f, 0xc3, 0x2b, 0x4f, 0xa7, 0xaa, 0x58, 0x00, 0x80, 0xf6, 0x66, 0x00, 0x50, 0x63, - 0x81, 0xc2, 0x05, 0x08, 0xe8, 0x27, 0xf3, 0x11, 0x50, 0x3a, 0x46, 0xe1, 0xd3, 0xcc, 0x06, 0x81, - 0xd4, 0x14, 0x08, 0xc4, 0x60, 0xca, 0xf3, 0xa9, 0xea, 0x33, 0x63, 0xa0, 0x7b, 0x73, 0x30, 0x10, - 0x43, 0x2b, 0xcf, 0xa6, 0x2a, 0xcf, 0x00, 0x82, 0xee, 0xcd, 0x01, 0x41, 0x68, 0xa1, 0xda, 0xec, - 0x28, 0xe8, 0x39, 0x92, 0x85, 0x25, 0xdc, 0x1c, 0x89, 0x64, 0xd8, 0x71, 0x2c, 0x87, 0x67, 0xde, - 0xac, 0x23, 0x3f, 0x4b, 0xf2, 0xc2, 0xd0, 0xa5, 0x9d, 0x81, 0x98, 0x68, 0xc6, 0x10, 0x71, 0x63, - 0xf2, 0x6f, 0x84, 0x50, 0x96, 0xa6, 0x52, 0xd1, 0x9c, 0x52, 0xe4, 0x39, 0x65, 0x04, 0x9c, 0xe4, - 0xe3, 0xe0, 0x64, 0x15, 0x6a, 0x24, 0x13, 0x48, 0xe0, 0x0e, 0xcd, 0x0e, 0x70, 0xc7, 0x0d, 0x58, - 0xa6, 0xa9, 0x1e, 0x8b, 0x0b, 0xb1, 0x10, 0xd6, 0x24, 0x03, 0xec, 0x2a, 0xb1, 0x58, 0xf6, 0x22, - 0x5c, 0x88, 0xf0, 0x06, 0x19, 0x06, 0xcb, 0x98, 0x5b, 0x01, 0xf7, 0x26, 0x4f, 0x35, 0xde, 0x09, - 0x0d, 0x14, 0x02, 0x13, 0x04, 0xc5, 0x81, 0xa5, 0x63, 0x1e, 0xff, 0x69, 0x9b, 0x80, 0x95, 0xb1, - 0x35, 0xe4, 0x11, 0x95, 0x34, 0x09, 0x57, 0xe0, 0xb3, 0x45, 0xe6, 0x92, 0xe5, 0xdf, 0x0b, 0xa1, - 0xbe, 0x10, 0xab, 0xcc, 0x83, 0x15, 0xc2, 0x7f, 0x07, 0x56, 0xe4, 0xbf, 0x31, 0xac, 0x88, 0xe6, - 0x5f, 0x85, 0x78, 0xfe, 0xf5, 0x4f, 0x21, 0xdc, 0xe1, 0x00, 0x24, 0x7c, 0x33, 0x8b, 0x84, 0xc9, - 0x54, 0x89, 0xee, 0x17, 0x4f, 0xa6, 0x38, 0xf4, 0x2b, 0xd3, 0xef, 0xc6, 0xa1, 0x5f, 0x85, 0xa5, - 0x57, 0xb4, 0x83, 0x5e, 0x05, 0x91, 0x96, 0x51, 0x55, 0xcb, 0x76, 0x79, 0x78, 0x78, 0x3c, 0xba, - 0x56, 0x56, 0x2d, 0x5d, 0xdb, 0x27, 0x3c, 0x7b, 0xb6, 0xab, 0x54, 0x6d, 0xde, 0x8a, 0xe4, 0x3a, - 0x62, 0x2c, 0xd7, 0xb9, 0x0a, 0x22, 0x99, 0xbd, 0x6b, 0x6b, 0x03, 0x4c, 0x5d, 0xbd, 0xa8, 0x84, - 0x04, 0xf9, 0x01, 0xa0, 0xd9, 0x60, 0x83, 0x7a, 0x50, 0xc6, 0xc7, 0xd8, 0xf4, 0xc8, 0xae, 0x15, - 0x92, 0xe9, 0x08, 0xc7, 0x02, 0xd8, 0xf4, 0xb6, 0xda, 0xc4, 0xc8, 0xff, 0xf8, 0x72, 0xb5, 0xc5, - 0xb8, 0x5f, 0xb0, 0x26, 0x86, 0x87, 0x27, 0xb6, 0x77, 0xaa, 0x70, 0x79, 0xf9, 0x2f, 0x79, 0x92, - 0x98, 0xc7, 0x02, 0xd1, 0x5c, 0xdb, 0xfa, 0x17, 0x28, 0x1f, 0x01, 0x65, 0xd9, 0xec, 0xbd, 0x02, - 0x30, 0xd4, 0x5c, 0xf5, 0x23, 0xcd, 0xf4, 0xb0, 0xce, 0x8d, 0x1e, 0xa1, 0x20, 0x09, 0xaa, 0xa4, - 0x37, 0x75, 0xb1, 0xce, 0xf1, 0x61, 0xd0, 0x8f, 0xac, 0xb3, 0xf2, 0xed, 0xd6, 0x19, 0xb7, 0x72, - 0x35, 0x61, 0xe5, 0x48, 0xd2, 0x2c, 0x46, 0x93, 0x66, 0x32, 0x37, 0xdb, 0x31, 0x2c, 0xc7, 0xf0, - 0x4e, 0xe9, 0xd6, 0x14, 0x94, 0xa0, 0x8f, 0xae, 0x43, 0x7d, 0x82, 0x27, 0xb6, 0x65, 0x8d, 0x55, - 0xe6, 0xbc, 0x6a, 0x54, 0x74, 0x89, 0x13, 0xbb, 0xd4, 0x87, 0xfd, 0x3c, 0x1f, 0x5e, 0xbf, 0x10, - 0x1c, 0xfd, 0xcf, 0x19, 0x58, 0xfe, 0x03, 0xad, 0x98, 0xc4, 0x53, 0x0d, 0x74, 0x00, 0xcb, 0xc1, - 0xf5, 0x57, 0xa7, 0xd4, 0x2d, 0xf8, 0x07, 0x3a, 0xab, 0xff, 0x68, 0x1d, 0xc7, 0xc9, 0x2e, 0xfa, - 0x01, 0x5c, 0x4e, 0xb8, 0xb6, 0x40, 0x75, 0x3e, 0xa3, 0x87, 0x7b, 0x2c, 0xee, 0xe1, 0x7c, 0xcd, - 0xa1, 0xad, 0x0a, 0xdf, 0xd2, 0x56, 0xdf, 0xa2, 0x6c, 0xb5, 0x4d, 0xf0, 0x7b, 0x34, 0xe7, 0x9a, - 0x7b, 0x70, 0xae, 0x43, 0xdd, 0xc1, 0x1e, 0xc1, 0x5c, 0xb1, 0x0a, 0xc9, 0x12, 0x23, 0xf2, 0xba, - 0xcb, 0x3e, 0x3c, 0x36, 0x37, 0xf7, 0x42, 0xff, 0x0f, 0x62, 0x98, 0xb6, 0x09, 0x29, 0xc5, 0x86, - 0x00, 0x40, 0x87, 0xbc, 0xf2, 0xef, 0x84, 0x50, 0x65, 0x1c, 0x92, 0x77, 0xa1, 0xec, 0x60, 0x77, - 0x3a, 0x66, 0x20, 0xb9, 0xb1, 0xf1, 0x62, 0xb6, 0xac, 0x8d, 0x50, 0xa7, 0x63, 0x4f, 0xe1, 0xc2, - 0xf2, 0x03, 0x28, 0x33, 0x0a, 0xaa, 0x41, 0xe5, 0xde, 0xee, 0xdd, 0xdd, 0xbd, 0x77, 0x77, 0x5b, - 0x39, 0x04, 0x50, 0xde, 0xec, 0x74, 0xba, 0xfb, 0xfd, 0x96, 0x80, 0x44, 0x28, 0x6d, 0x6e, 0xed, - 0x29, 0xfd, 0x56, 0x9e, 0x90, 0x95, 0xee, 0xdb, 0xdd, 0x4e, 0xbf, 0x55, 0x40, 0xcb, 0x50, 0x67, - 0x6d, 0xf5, 0xce, 0x9e, 0xf2, 0xce, 0x66, 0xbf, 0x55, 0x8c, 0x90, 0x0e, 0xba, 0xbb, 0xb7, 0xbb, - 0x4a, 0xab, 0x24, 0xbf, 0x44, 0x50, 0x78, 0x4a, 0x9e, 0x17, 0xe2, 0x6d, 0x21, 0x82, 0xb7, 0xe5, - 0x4f, 0xf3, 0x20, 0xa5, 0x27, 0x6f, 0xe8, 0xed, 0xc4, 0xc2, 0x37, 0xce, 0x91, 0xf9, 0x25, 0x56, - 0x8f, 0x9e, 0x82, 0x86, 0x83, 0x8f, 0xb0, 0x37, 0x18, 0xb1, 0x64, 0x92, 0x05, 0xdb, 0xba, 0x52, - 0xe7, 0x54, 0x2a, 0xe4, 0x32, 0xb6, 0x0f, 0xf0, 0xc0, 0x53, 0x99, 0x17, 0x63, 0xe7, 0x55, 0x24, - 0x6c, 0x84, 0x7a, 0xc0, 0x88, 0xf2, 0xfb, 0xe7, 0xb2, 0xa5, 0x08, 0x25, 0xa5, 0xdb, 0x57, 0x7e, - 0xd8, 0x2a, 0x20, 0x04, 0x0d, 0xda, 0x54, 0x0f, 0x76, 0x37, 0xf7, 0x0f, 0x7a, 0x7b, 0xc4, 0x96, - 0x17, 0xa0, 0xe9, 0xdb, 0xd2, 0x27, 0x96, 0xe4, 0x7d, 0xb8, 0x9c, 0x92, 0x79, 0x7e, 0xc3, 0x92, - 0x83, 0xfc, 0x6b, 0x21, 0xaa, 0x32, 0x0e, 0xef, 0xdf, 0x4a, 0x58, 0x7a, 0x3d, 0x6b, 0xbe, 0x9a, - 0x34, 0xb3, 0x04, 0x55, 0xcc, 0x2b, 0x69, 0xd4, 0xc0, 0x4b, 0x4a, 0xd0, 0x97, 0x5f, 0x5c, 0x6c, - 0xb4, 0xf0, 0xd4, 0xe5, 0xe5, 0x7f, 0x0b, 0xd0, 0x4c, 0x78, 0x17, 0xb4, 0x01, 0x25, 0x06, 0xc9, - 0xd2, 0x7e, 0x5e, 0x52, 0xe7, 0xc8, 0x5d, 0x11, 0x63, 0x45, 0xaf, 0xc7, 0xa6, 0x34, 0xe3, 0xc5, - 0x98, 0xb1, 0xfc, 0xf2, 0x1f, 0x17, 0x0d, 0x24, 0xd0, 0x1b, 0x20, 0x06, 0x6e, 0x92, 0xd7, 0x01, - 0x9e, 0x9c, 0x15, 0x0f, 0x1c, 0x2c, 0x97, 0x0f, 0x65, 0xd0, 0xad, 0x30, 0x53, 0x2e, 0xce, 0x02, - 0x41, 0x2e, 0xce, 0x18, 0xb8, 0xb0, 0xcf, 0x2f, 0x77, 0xa0, 0x16, 0x59, 0x0f, 0x7a, 0x1c, 0xc4, - 0x89, 0x76, 0xc2, 0x8b, 0xc6, 0xac, 0xec, 0x57, 0x9d, 0x68, 0x27, 0xac, 0x5e, 0x7c, 0x19, 0x2a, - 0x64, 0x70, 0xa8, 0xb9, 0xbc, 0x90, 0x54, 0x9e, 0x68, 0x27, 0x6f, 0x69, 0xae, 0xfc, 0x1e, 0x34, - 0xe2, 0x05, 0x53, 0x72, 0x17, 0x1d, 0x6b, 0x6a, 0xea, 0x54, 0x47, 0x49, 0x61, 0x1d, 0x74, 0x13, - 0x4a, 0xc7, 0x16, 0xf3, 0xf4, 0xf3, 0x9d, 0xd6, 0x7d, 0xcb, 0xc3, 0x91, 0x82, 0x2b, 0xe3, 0x96, - 0x1f, 0x41, 0x89, 0x7a, 0x6e, 0xe2, 0x4a, 0x69, 0xe9, 0x93, 0xa3, 0x04, 0xd2, 0x46, 0xef, 0x01, - 0x68, 0x9e, 0xe7, 0x18, 0x87, 0xd3, 0x50, 0xf1, 0xea, 0x7c, 0xcf, 0xbf, 0xe9, 0xf3, 0x6d, 0x5d, - 0xe5, 0x21, 0xe0, 0x62, 0x28, 0x1a, 0x09, 0x03, 0x11, 0x85, 0xf2, 0x2e, 0x34, 0xe2, 0xb2, 0xd1, - 0x9f, 0x10, 0x4b, 0x73, 0x7e, 0x42, 0x04, 0x99, 0x68, 0x90, 0xc7, 0x16, 0x58, 0x99, 0x9b, 0x76, - 0xe4, 0x8f, 0x05, 0xa8, 0xf6, 0x4f, 0xf8, 0x19, 0x4d, 0xa9, 0xb0, 0x86, 0xa2, 0xf9, 0x68, 0x3d, - 0x91, 0x95, 0x6c, 0x0b, 0x41, 0x21, 0xf8, 0xcd, 0xe0, 0x42, 0x15, 0xb3, 0x16, 0x20, 0xfc, 0xca, - 0x19, 0x77, 0xd7, 0xaf, 0x81, 0x18, 0x9c, 0x2a, 0x02, 0xb7, 0x34, 0x5d, 0x77, 0xb0, 0xeb, 0xf2, - 0xb5, 0xf9, 0x5d, 0x5a, 0xb0, 0xb7, 0x3e, 0xe2, 0x15, 0xcb, 0x82, 0xc2, 0x3a, 0xb2, 0x0e, 0xcd, - 0x44, 0xcc, 0x47, 0xaf, 0x41, 0xc5, 0x9e, 0x1e, 0xaa, 0xbe, 0x79, 0x12, 0x97, 0xc7, 0x4f, 0xbd, - 0xa7, 0x87, 0x63, 0x63, 0x70, 0x17, 0x9f, 0xfa, 0x93, 0xb1, 0xa7, 0x87, 0x77, 0x99, 0x15, 0xd9, - 0x57, 0xf2, 0xd1, 0xaf, 0x1c, 0x43, 0xd5, 0x3f, 0x14, 0xe8, 0x7b, 0xd1, 0x7b, 0xe2, 0xff, 0xc6, - 0x49, 0xcd, 0x43, 0xb8, 0xfa, 0xc8, 0x35, 0xb9, 0x01, 0xcb, 0xae, 0x31, 0x34, 0xb1, 0xae, 0x86, - 0x80, 0x8f, 0x7e, 0xad, 0xaa, 0x34, 0xd9, 0xc0, 0x8e, 0x8f, 0xf6, 0xe4, 0x7f, 0x09, 0x50, 0xf5, - 0x2f, 0x2c, 0x7a, 0x29, 0x72, 0xee, 0x1a, 0x73, 0x72, 0x01, 0x9f, 0x31, 0xac, 0xb9, 0xc7, 0xe7, - 0x9a, 0x3f, 0xff, 0x5c, 0xd3, 0x7e, 0x9e, 0xf8, 0x95, 0xd7, 0xe2, 0xb9, 0xff, 0x62, 0xbd, 0x00, - 0xc8, 0xb3, 0x3c, 0x6d, 0xac, 0x1e, 0x5b, 0x9e, 0x61, 0x0e, 0x55, 0x66, 0x6c, 0x96, 0x8e, 0xb6, - 0xe8, 0xc8, 0x7d, 0x3a, 0xb0, 0x4f, 0xed, 0xfe, 0x53, 0x01, 0xaa, 0x41, 0x76, 0x70, 0xde, 0x12, - 0xfa, 0x25, 0x28, 0xf3, 0x00, 0xc8, 0x6a, 0xe8, 0xbc, 0x17, 0xfc, 0xcd, 0x29, 0x46, 0xfe, 0xe6, - 0x48, 0x50, 0x9d, 0x60, 0x4f, 0xa3, 0x71, 0x86, 0x61, 0xee, 0xa0, 0x7f, 0xe3, 0x16, 0xd4, 0x22, - 0x7f, 0x33, 0xc8, 0xcd, 0xdb, 0xed, 0xbe, 0xdb, 0xca, 0x49, 0x95, 0x8f, 0x3f, 0xbb, 0x56, 0xd8, - 0xc5, 0x1f, 0x91, 0x33, 0xab, 0x74, 0x3b, 0xbd, 0x6e, 0xe7, 0x6e, 0x4b, 0x90, 0x6a, 0x1f, 0x7f, - 0x76, 0xad, 0xa2, 0x60, 0x5a, 0xa3, 0xbb, 0xd1, 0x83, 0xa5, 0xe8, 0xae, 0xc4, 0xc3, 0x01, 0x82, - 0xc6, 0xed, 0x7b, 0xfb, 0x3b, 0xdb, 0x9d, 0xcd, 0x7e, 0x57, 0xbd, 0xbf, 0xd7, 0xef, 0xb6, 0x04, - 0x74, 0x19, 0x2e, 0xec, 0x6c, 0xbf, 0xd5, 0xeb, 0xab, 0x9d, 0x9d, 0xed, 0xee, 0x6e, 0x5f, 0xdd, - 0xec, 0xf7, 0x37, 0x3b, 0x77, 0x5b, 0xf9, 0x8d, 0x3f, 0xd5, 0xa0, 0xb9, 0xb9, 0xd5, 0xd9, 0x26, - 0xf1, 0xdf, 0x18, 0x68, 0xbc, 0x06, 0x5a, 0xa4, 0x25, 0x8f, 0x33, 0x5f, 0xb6, 0x48, 0x67, 0x97, - 0x80, 0xd1, 0x1d, 0x28, 0xd1, 0x6a, 0x08, 0x3a, 0xfb, 0xa9, 0x8b, 0xb4, 0xa0, 0x26, 0x4c, 0x26, - 0x43, 0xaf, 0xc7, 0x99, 0x6f, 0x5f, 0xa4, 0xb3, 0x4b, 0xc4, 0x48, 0x01, 0x31, 0x2c, 0x67, 0x2c, - 0x7e, 0x0b, 0x23, 0x65, 0x28, 0x1b, 0x13, 0x9d, 0x21, 0xa6, 0x5a, 0xfc, 0x36, 0x44, 0xca, 0xe0, - 0xc0, 0xd0, 0x0e, 0x54, 0x7c, 0x18, 0xbc, 0xe8, 0xb5, 0x8a, 0xb4, 0xb0, 0xa4, 0x4b, 0xb6, 0x80, - 0x95, 0x2b, 0xce, 0x7e, 0x7a, 0x23, 0x2d, 0xa8, 0x4f, 0xa3, 0x6d, 0x28, 0xf3, 0x6c, 0x7f, 0xc1, - 0x0b, 0x14, 0x69, 0x51, 0x89, 0x96, 0x18, 0x2d, 0xac, 0x03, 0x2d, 0x7e, 0x50, 0x24, 0x65, 0x28, - 0xbd, 0xa3, 0x7b, 0x00, 0x91, 0xe2, 0x44, 0x86, 0x97, 0x42, 0x52, 0x96, 0x92, 0x3a, 0xda, 0x83, - 0x6a, 0x80, 0x15, 0x17, 0xbe, 0xdb, 0x91, 0x16, 0xd7, 0xb6, 0xd1, 0x03, 0xa8, 0xc7, 0x91, 0x4e, - 0xb6, 0xd7, 0x38, 0x52, 0xc6, 0xa2, 0x35, 0xd1, 0x1f, 0x87, 0x3d, 0xd9, 0x5e, 0xe7, 0x48, 0x19, - 0x6b, 0xd8, 0xe8, 0x03, 0x58, 0x9e, 0x85, 0x25, 0xd9, 0x1f, 0xeb, 0x48, 0xe7, 0xa8, 0x6a, 0xa3, - 0x09, 0xa0, 0x39, 0x70, 0xe6, 0x1c, 0x6f, 0x77, 0xa4, 0xf3, 0x14, 0xb9, 0x91, 0x0e, 0xcd, 0x24, - 0x46, 0xc8, 0xfa, 0x96, 0x47, 0xca, 0x5c, 0xf0, 0x66, 0x5f, 0x89, 0xc3, 0x86, 0xac, 0x6f, 0x7b, - 0xa4, 0xcc, 0xf5, 0xef, 0xad, 0xee, 0xe7, 0x5f, 0xad, 0x08, 0x5f, 0x7c, 0xb5, 0x22, 0xfc, 0xed, - 0xab, 0x15, 0xe1, 0x93, 0xaf, 0x57, 0x72, 0x5f, 0x7c, 0xbd, 0x92, 0xfb, 0xf3, 0xd7, 0x2b, 0xb9, - 0x1f, 0x3d, 0x3f, 0x34, 0xbc, 0xd1, 0xf4, 0x70, 0x6d, 0x60, 0x4d, 0xd6, 0xa3, 0x8f, 0x28, 0xe7, - 0x3d, 0xec, 0x3c, 0x2c, 0xd3, 0xa0, 0xfb, 0xf2, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x2c, - 0x2a, 0x36, 0xf8, 0x29, 0x00, 0x00, + 0x3b, 0x4f, 0x85, 0x9e, 0x48, 0x13, 0xba, 0x43, 0x98, 0x7a, 0x39, 0x85, 0x71, 0x93, 0xa9, 0x0c, + 0xf3, 0xc8, 0x6a, 0x17, 0xce, 0x9e, 0x6a, 0xdb, 0x3c, 0xa2, 0x53, 0x11, 0x5e, 0xb4, 0x05, 0xe0, + 0x62, 0x4f, 0xb5, 0x6c, 0xb2, 0xfc, 0x76, 0x91, 0x4a, 0x3e, 0x99, 0x26, 0x79, 0x80, 0xbd, 0x3d, + 0xca, 0xd8, 0xcb, 0x29, 0xa2, 0xeb, 0x77, 0x88, 0x0e, 0xc3, 0x34, 0x3c, 0x75, 0x30, 0xd2, 0x0c, + 0xb3, 0x5d, 0x3a, 0x5b, 0xc7, 0xb6, 0x69, 0x78, 0x1d, 0xc2, 0x48, 0x74, 0x18, 0x7e, 0x87, 0x6c, + 0xf9, 0xc3, 0x29, 0x76, 0x4e, 0xdb, 0xe5, 0xb3, 0xb7, 0xfc, 0x7d, 0xc2, 0x44, 0xb6, 0x4c, 0xb9, + 0x51, 0x17, 0x6a, 0x87, 0x78, 0x68, 0x98, 0xea, 0xe1, 0xd8, 0x1a, 0x3c, 0x6c, 0x57, 0xa8, 0xb0, + 0x9c, 0x26, 0xbc, 0x45, 0x58, 0xb7, 0x08, 0x67, 0x2f, 0xa7, 0xc0, 0x61, 0xd0, 0x43, 0xaf, 0x43, + 0x75, 0x30, 0xc2, 0x83, 0x87, 0xaa, 0x77, 0xd2, 0xae, 0x52, 0x1d, 0xab, 0x69, 0x3a, 0x3a, 0x84, + 0xaf, 0x7f, 0xd2, 0xcb, 0x29, 0x95, 0x01, 0x6b, 0x92, 0xfd, 0xeb, 0x78, 0x6c, 0x1c, 0x63, 0x87, + 0xc8, 0x8b, 0x67, 0xef, 0xff, 0x36, 0xe3, 0xa4, 0x1a, 0x44, 0xdd, 0xef, 0xa0, 0x37, 0x40, 0xc4, + 0xa6, 0xce, 0xb7, 0x01, 0x54, 0xc5, 0xb5, 0xd4, 0xb3, 0x62, 0xea, 0xfe, 0x26, 0xaa, 0x98, 0xb7, + 0xd1, 0xab, 0x50, 0x1e, 0x58, 0x93, 0x89, 0xe1, 0xb5, 0x6b, 0x54, 0x7a, 0x25, 0x75, 0x03, 0x94, + 0xab, 0x97, 0x53, 0x38, 0x3f, 0xda, 0x85, 0xc6, 0xd8, 0x70, 0x3d, 0xd5, 0x35, 0x35, 0xdb, 0x1d, + 0x59, 0x9e, 0xdb, 0x5e, 0xa2, 0x1a, 0x9e, 0x4a, 0xd3, 0xb0, 0x63, 0xb8, 0xde, 0x81, 0xcf, 0xdc, + 0xcb, 0x29, 0xf5, 0x71, 0x94, 0x40, 0xf4, 0x59, 0x47, 0x47, 0xd8, 0x09, 0x14, 0xb6, 0xeb, 0x67, + 0xeb, 0xdb, 0x23, 0xdc, 0xbe, 0x3c, 0xd1, 0x67, 0x45, 0x09, 0xe8, 0xc7, 0x70, 0x61, 0x6c, 0x69, + 0x7a, 0xa0, 0x4e, 0x1d, 0x8c, 0xa6, 0xe6, 0xc3, 0x76, 0x83, 0x2a, 0x7d, 0x2e, 0x75, 0x91, 0x96, + 0xa6, 0xfb, 0x2a, 0x3a, 0x44, 0xa0, 0x97, 0x53, 0x96, 0xc7, 0x49, 0x22, 0x7a, 0x00, 0x17, 0x35, + 0xdb, 0x1e, 0x9f, 0x26, 0xb5, 0x37, 0xa9, 0xf6, 0x1b, 0x69, 0xda, 0x37, 0x89, 0x4c, 0x52, 0x3d, + 0xd2, 0x66, 0xa8, 0xa8, 0x0f, 0x2d, 0xdb, 0xc1, 0xb6, 0xe6, 0x60, 0xd5, 0x76, 0x2c, 0xdb, 0x72, + 0xb5, 0x71, 0xbb, 0x45, 0x75, 0x3f, 0x93, 0xa6, 0x7b, 0x9f, 0xf1, 0xef, 0x73, 0xf6, 0x5e, 0x4e, + 0x69, 0xda, 0x71, 0x12, 0xd3, 0x6a, 0x0d, 0xb0, 0xeb, 0x86, 0x5a, 0x97, 0x17, 0x69, 0xa5, 0xfc, + 0x71, 0xad, 0x31, 0xd2, 0x56, 0x05, 0x4a, 0xc7, 0xda, 0x78, 0x8a, 0xe5, 0x67, 0xa0, 0x16, 0x71, + 0x4b, 0xa8, 0x0d, 0x95, 0x09, 0x76, 0x5d, 0x6d, 0x88, 0xa9, 0x17, 0x13, 0x15, 0xbf, 0x2b, 0x37, + 0x60, 0x29, 0xea, 0x8a, 0xe4, 0x5f, 0x09, 0xb0, 0xd4, 0x37, 0x26, 0xd8, 0x9a, 0x7a, 0x2e, 0x71, + 0x33, 0x68, 0x07, 0x9a, 0x1e, 0xeb, 0xf3, 0x85, 0x62, 0xee, 0x08, 0xaf, 0xac, 0x31, 0x1f, 0xba, + 0xe6, 0xfb, 0xd0, 0xb5, 0xdb, 0xdc, 0x87, 0x6e, 0x55, 0x3f, 0xff, 0x72, 0x35, 0xf7, 0xe9, 0x5f, + 0x56, 0x05, 0xa5, 0xc1, 0x65, 0xd9, 0x0a, 0x31, 0x7a, 0x1b, 0x7c, 0x8a, 0xca, 0xcf, 0x7a, 0x3e, + 0xbb, 0xb2, 0x3a, 0x17, 0x65, 0xe7, 0x5f, 0x9e, 0x04, 0x7b, 0xa4, 0x0b, 0x6d, 0x43, 0xe5, 0x18, + 0x3b, 0x2e, 0x71, 0x82, 0x7c, 0x8f, 0xbc, 0x8b, 0xae, 0x43, 0x9d, 0xde, 0x4a, 0xd5, 0x1f, 0x27, + 0x73, 0x16, 0x95, 0x25, 0x4a, 0xbc, 0xcf, 0x99, 0x56, 0xa1, 0x66, 0x6f, 0xd8, 0x01, 0x4b, 0x81, + 0xb2, 0x80, 0xbd, 0x61, 0x73, 0x06, 0xf9, 0x3b, 0xd0, 0x4a, 0x3a, 0x51, 0xd4, 0x82, 0xc2, 0x43, + 0x7c, 0xca, 0xe7, 0x23, 0x4d, 0x74, 0x91, 0x7f, 0x01, 0x3a, 0x87, 0xa8, 0xf0, 0xcf, 0xf1, 0x87, + 0x7c, 0x20, 0x1c, 0x78, 0x4f, 0xf4, 0x2a, 0x14, 0xc9, 0x86, 0xb8, 0x39, 0xa5, 0x19, 0x0b, 0xf4, + 0xfd, 0x48, 0xc6, 0x4c, 0xf0, 0x09, 0x31, 0x01, 0x95, 0x40, 0x57, 0x88, 0xb3, 0xd3, 0x0c, 0x53, + 0x35, 0x74, 0x3e, 0x4f, 0x85, 0xf6, 0xb7, 0x75, 0x74, 0x17, 0x5a, 0x03, 0xcb, 0x74, 0xb1, 0xe9, + 0x4e, 0x5d, 0x95, 0x45, 0x4a, 0x1e, 0x4d, 0x66, 0x9d, 0x51, 0xc7, 0x67, 0xdc, 0xa7, 0x7c, 0x4a, + 0x73, 0x10, 0x27, 0xa0, 0x3b, 0x00, 0xc7, 0xda, 0xd8, 0xd0, 0x35, 0xcf, 0x72, 0xdc, 0x76, 0xf1, + 0x5a, 0x61, 0xae, 0x9a, 0xfb, 0x3e, 0xcb, 0x3d, 0x5b, 0xd7, 0x3c, 0xbc, 0x55, 0x24, 0xab, 0x55, + 0x22, 0x92, 0xe8, 0x69, 0x68, 0x6a, 0xb6, 0xad, 0xba, 0x9e, 0xe6, 0x61, 0xf5, 0xf0, 0xd4, 0xc3, + 0x2e, 0x8d, 0x31, 0x4b, 0x4a, 0x5d, 0xb3, 0xed, 0x03, 0x42, 0xdd, 0x22, 0x44, 0xf4, 0x14, 0x34, + 0x48, 0x3c, 0x31, 0xb4, 0xb1, 0x3a, 0xc2, 0xc6, 0x70, 0xe4, 0xd1, 0x58, 0x52, 0x50, 0xea, 0x9c, + 0xda, 0xa3, 0x44, 0x59, 0x0f, 0xce, 0x2c, 0x8d, 0x25, 0x08, 0x41, 0x51, 0xd7, 0x3c, 0x8d, 0x1a, + 0x72, 0x49, 0xa1, 0x6d, 0x42, 0xb3, 0x35, 0x6f, 0xc4, 0xcd, 0x43, 0xdb, 0xe8, 0x12, 0x94, 0xb9, + 0xda, 0x02, 0x55, 0xcb, 0x7b, 0xe4, 0x9b, 0xd9, 0x8e, 0x75, 0x8c, 0x69, 0xf0, 0xac, 0x2a, 0xac, + 0x23, 0xff, 0x2c, 0x0f, 0xcb, 0x33, 0x51, 0x87, 0xe8, 0x1d, 0x69, 0xee, 0xc8, 0x9f, 0x8b, 0xb4, + 0xd1, 0x2b, 0x44, 0xaf, 0xa6, 0x63, 0x87, 0x1f, 0xe6, 0x76, 0xd4, 0x44, 0x2c, 0xd3, 0xe9, 0xd1, + 0x71, 0x6e, 0x1a, 0xce, 0x8d, 0xf6, 0xa0, 0x35, 0xd6, 0x5c, 0xff, 0x26, 0xa8, 0x91, 0xc8, 0x3f, + 0x1b, 0xbb, 0x76, 0x34, 0xdf, 0xef, 0x93, 0xc3, 0xce, 0x15, 0x35, 0xc6, 0x31, 0x2a, 0x52, 0xe0, + 0xe2, 0xe1, 0xe9, 0x23, 0xcd, 0xf4, 0x0c, 0x13, 0xab, 0x33, 0x5f, 0xee, 0xca, 0x8c, 0xd2, 0xee, + 0xb1, 0xa1, 0x63, 0x73, 0xe0, 0x7f, 0xb2, 0x0b, 0x81, 0x70, 0xf0, 0x49, 0x5d, 0x59, 0x81, 0x46, + 0x3c, 0x6e, 0xa2, 0x06, 0xe4, 0xbd, 0x13, 0x6e, 0x80, 0xbc, 0x77, 0x82, 0xfe, 0x0f, 0x8a, 0x64, + 0x93, 0x74, 0xf3, 0x8d, 0x39, 0x49, 0x0b, 0x97, 0xeb, 0x9f, 0xda, 0x58, 0xa1, 0x9c, 0xb2, 0x1c, + 0xdc, 0x86, 0x20, 0x96, 0x26, 0xb5, 0xca, 0xcf, 0x41, 0x33, 0x11, 0x2c, 0x23, 0xdf, 0x4f, 0x88, + 0x7e, 0x3f, 0xb9, 0x09, 0xf5, 0x58, 0x64, 0x94, 0x2f, 0xc1, 0xc5, 0x79, 0x81, 0x4e, 0x1e, 0x05, + 0xf4, 0x58, 0xc0, 0x42, 0x37, 0xa1, 0x1a, 0x44, 0x3a, 0xdf, 0xb9, 0x25, 0x77, 0xe1, 0x33, 0x2b, + 0x01, 0x2b, 0xb9, 0x86, 0xe4, 0x58, 0xd3, 0xf3, 0x90, 0xa7, 0x0b, 0xaf, 0x68, 0xb6, 0xdd, 0xd3, + 0xdc, 0x91, 0xfc, 0x3e, 0xb4, 0xd3, 0xa2, 0x58, 0x62, 0x1b, 0xc5, 0xe0, 0x18, 0x5e, 0x82, 0xf2, + 0x91, 0xe5, 0x4c, 0x34, 0xe6, 0x13, 0xeb, 0x0a, 0xef, 0x91, 0xe3, 0xc9, 0x22, 0x5a, 0x81, 0x92, + 0x59, 0x47, 0x56, 0xe1, 0x4a, 0x6a, 0x24, 0x23, 0x22, 0x86, 0xa9, 0x63, 0x66, 0xcf, 0xba, 0xc2, + 0x3a, 0xa1, 0x22, 0xb6, 0x58, 0xd6, 0x21, 0xd3, 0xba, 0x74, 0xaf, 0x54, 0xbf, 0xa8, 0xf0, 0x9e, + 0xfc, 0x37, 0x01, 0x2e, 0xcd, 0x8f, 0x67, 0xe8, 0x26, 0x00, 0x73, 0xa8, 0xc1, 0xb5, 0xab, 0x6d, + 0x5c, 0x9a, 0x3d, 0xf4, 0xb7, 0x35, 0x4f, 0x53, 0x44, 0xca, 0x49, 0x9a, 0xc4, 0x0d, 0x84, 0x62, + 0xaa, 0x6b, 0x3c, 0x62, 0x67, 0xa6, 0xa0, 0xd4, 0x03, 0x9e, 0x03, 0xe3, 0x51, 0xdc, 0xbd, 0x15, + 0xe2, 0xee, 0x2d, 0xb4, 0x5d, 0x31, 0x76, 0x85, 0x7d, 0x5f, 0x5a, 0x3a, 0xaf, 0x2f, 0x95, 0x7f, + 0x11, 0xdd, 0x66, 0x2c, 0x9a, 0x46, 0xee, 0xb5, 0x70, 0xae, 0x7b, 0x1d, 0x37, 0x4f, 0x3e, 0xa3, + 0x79, 0xe4, 0x5f, 0x02, 0x54, 0x15, 0xec, 0xda, 0xc4, 0x09, 0xa3, 0x2d, 0x10, 0xf1, 0xc9, 0x00, + 0xb3, 0xa4, 0x5e, 0x48, 0x4d, 0x8a, 0x19, 0x77, 0xd7, 0xe7, 0x24, 0x19, 0x69, 0x20, 0x86, 0x5e, + 0xe6, 0xc0, 0x25, 0x1d, 0x83, 0x70, 0xf1, 0x28, 0x72, 0x79, 0xc5, 0x47, 0x2e, 0x85, 0xd4, 0x24, + 0x94, 0x49, 0x25, 0xa0, 0xcb, 0xcb, 0x1c, 0xba, 0x14, 0x17, 0x4c, 0x16, 0xc3, 0x2e, 0x9d, 0x18, + 0x76, 0x29, 0x2d, 0xd8, 0x66, 0x0a, 0x78, 0xe9, 0xc4, 0xc0, 0x4b, 0x79, 0x81, 0x92, 0x14, 0xf4, + 0xf2, 0x8a, 0x8f, 0x5e, 0x2a, 0x0b, 0xb6, 0x9d, 0x80, 0x2f, 0x77, 0xe2, 0xf0, 0x85, 0x41, 0x8f, + 0xeb, 0xa9, 0xd2, 0xa9, 0xf8, 0xe5, 0xbb, 0x11, 0xfc, 0x22, 0xa6, 0x82, 0x07, 0xa6, 0x64, 0x0e, + 0x80, 0xe9, 0xc4, 0x00, 0x0c, 0x2c, 0xb0, 0x41, 0x0a, 0x82, 0x79, 0x33, 0x8a, 0x60, 0x6a, 0xa9, + 0x20, 0x88, 0x1f, 0x9a, 0x79, 0x10, 0xe6, 0x56, 0x00, 0x61, 0x96, 0x52, 0x31, 0x18, 0xdf, 0x43, + 0x12, 0xc3, 0xec, 0xcd, 0x60, 0x18, 0x86, 0x39, 0x9e, 0x4e, 0x55, 0xb1, 0x00, 0xc4, 0xec, 0xcd, + 0x80, 0x98, 0xc6, 0x02, 0x85, 0x0b, 0x50, 0xcc, 0x4f, 0xe6, 0xa3, 0x98, 0x74, 0x9c, 0xc1, 0x97, + 0x99, 0x0d, 0xc6, 0xa8, 0x29, 0x30, 0x86, 0x41, 0x8d, 0xe7, 0x53, 0xd5, 0x67, 0xc6, 0x31, 0xf7, + 0xe6, 0xe0, 0x18, 0x86, 0x38, 0x9e, 0x4d, 0x55, 0x9e, 0x01, 0xc8, 0xdc, 0x9b, 0x03, 0x64, 0xd0, + 0x42, 0xb5, 0xd9, 0x91, 0xcc, 0x73, 0x24, 0x0b, 0x4b, 0xb8, 0x39, 0x12, 0xc9, 0xb0, 0xe3, 0x58, + 0x0e, 0xcf, 0xbc, 0x59, 0x47, 0x7e, 0x96, 0xe4, 0x85, 0xa1, 0x4b, 0x3b, 0x03, 0xf5, 0xd0, 0x8c, + 0x21, 0xe2, 0xc6, 0xe4, 0x7f, 0x08, 0xa1, 0x2c, 0x4d, 0xa5, 0xa2, 0x39, 0xa5, 0xc8, 0x73, 0xca, + 0x08, 0xc2, 0xc8, 0xc7, 0x11, 0xc6, 0x2a, 0xd4, 0x48, 0x26, 0x90, 0x00, 0x0f, 0x9a, 0xed, 0x83, + 0x07, 0x74, 0x03, 0x96, 0x69, 0xaa, 0xc7, 0xe2, 0x42, 0x2c, 0x84, 0x35, 0xc9, 0x00, 0xbb, 0x4a, + 0x2c, 0x96, 0xbd, 0x08, 0x17, 0x22, 0xbc, 0x41, 0x86, 0xc1, 0x32, 0xe6, 0x56, 0xc0, 0xbd, 0xc9, + 0x52, 0x0d, 0x74, 0x0b, 0xaa, 0x1c, 0x17, 0xb9, 0xa9, 0xa5, 0x97, 0x28, 0xa2, 0x53, 0x02, 0x76, + 0xf9, 0x9d, 0xd0, 0xb6, 0x21, 0xa6, 0x41, 0x50, 0x1c, 0x58, 0x3a, 0xe6, 0xa9, 0x03, 0x6d, 0x13, + 0x9c, 0x33, 0xb6, 0x86, 0x3c, 0x18, 0x93, 0x26, 0xe1, 0x0a, 0xdc, 0xbd, 0xc8, 0xbc, 0xb9, 0xfc, + 0x3b, 0x21, 0xd4, 0x17, 0xc2, 0x9c, 0x79, 0x88, 0x44, 0xf8, 0xef, 0x20, 0x92, 0xfc, 0x37, 0x46, + 0x24, 0xd1, 0xd4, 0xad, 0x10, 0x4f, 0xdd, 0xfe, 0x29, 0x84, 0x87, 0x23, 0xc0, 0x17, 0xdf, 0xcc, + 0x22, 0x61, 0x1e, 0x56, 0xa2, 0x9f, 0x9a, 0xe7, 0x61, 0x1c, 0x35, 0x96, 0xe9, 0xbc, 0x71, 0xd4, + 0x58, 0x61, 0x99, 0x19, 0xed, 0xa0, 0x57, 0x41, 0xa4, 0x55, 0x54, 0xd5, 0xb2, 0x5d, 0x1e, 0x59, + 0x1e, 0x8f, 0xee, 0x95, 0x15, 0x4b, 0xd7, 0xf6, 0x09, 0xcf, 0x9e, 0xed, 0x2a, 0x55, 0x9b, 0xb7, + 0x22, 0x69, 0x92, 0x18, 0x4b, 0x93, 0xae, 0x82, 0x48, 0x56, 0xef, 0xda, 0xda, 0x00, 0xd3, 0x28, + 0x21, 0x2a, 0x21, 0x41, 0x7e, 0x00, 0x68, 0x36, 0x4e, 0xa1, 0x1e, 0x94, 0xf1, 0x31, 0x36, 0x3d, + 0xf2, 0xd5, 0x0a, 0xc9, 0x4c, 0x86, 0xc3, 0x08, 0x6c, 0x7a, 0x5b, 0x6d, 0x62, 0xe4, 0xbf, 0x7f, + 0xb9, 0xda, 0x62, 0xdc, 0x2f, 0x58, 0x13, 0xc3, 0xc3, 0x13, 0xdb, 0x3b, 0x55, 0xb8, 0xbc, 0xfc, + 0xe7, 0x3c, 0xc9, 0xe9, 0x63, 0x31, 0x6c, 0xae, 0x6d, 0xfd, 0xbb, 0x97, 0x8f, 0xe0, 0xb9, 0x6c, + 0xf6, 0x5e, 0x01, 0x18, 0x6a, 0xae, 0xfa, 0x91, 0x66, 0x7a, 0x58, 0xe7, 0x46, 0x8f, 0x50, 0x90, + 0x04, 0x55, 0xd2, 0x9b, 0xba, 0x58, 0xe7, 0xd0, 0x32, 0xe8, 0x47, 0xf6, 0x59, 0xf9, 0x76, 0xfb, + 0x8c, 0x5b, 0xb9, 0x9a, 0xb0, 0x72, 0x24, 0xdf, 0x16, 0xa3, 0xf9, 0x36, 0x59, 0x9b, 0xed, 0x18, + 0x96, 0x63, 0x78, 0xa7, 0xf4, 0xd3, 0x14, 0x94, 0xa0, 0x8f, 0xae, 0x43, 0x7d, 0x82, 0x27, 0xb6, + 0x65, 0x8d, 0x55, 0xe6, 0xf7, 0x6a, 0x54, 0x74, 0x89, 0x13, 0xbb, 0xd4, 0xfd, 0xfd, 0x3c, 0x1f, + 0x5e, 0xbf, 0x10, 0x57, 0xfd, 0xcf, 0x19, 0x58, 0xfe, 0x3d, 0x2d, 0xb6, 0xc4, 0xb3, 0x14, 0x74, + 0x00, 0xcb, 0xc1, 0xf5, 0x57, 0xa7, 0xd4, 0x2d, 0xf8, 0x07, 0x3a, 0xab, 0xff, 0x68, 0x1d, 0xc7, + 0xc9, 0x2e, 0xfa, 0x01, 0x5c, 0x4e, 0xb8, 0xb6, 0x40, 0x75, 0x3e, 0xa3, 0x87, 0x7b, 0x2c, 0xee, + 0xe1, 0x7c, 0xcd, 0xa1, 0xad, 0x0a, 0xdf, 0xd2, 0x56, 0xd1, 0xf0, 0x50, 0x3c, 0x5f, 0x78, 0xd8, + 0x26, 0xd0, 0x3f, 0x9a, 0xae, 0xcd, 0x3d, 0x38, 0xd7, 0xa1, 0xee, 0x60, 0x8f, 0xc0, 0xb5, 0x58, + 0x71, 0x65, 0x89, 0x11, 0x79, 0xc9, 0x66, 0x1f, 0x1e, 0x9b, 0x9b, 0xb6, 0xa1, 0xff, 0x07, 0x31, + 0xcc, 0xf8, 0x84, 0x94, 0x3a, 0x45, 0x80, 0xbd, 0x43, 0x5e, 0xf9, 0xb7, 0x42, 0xa8, 0x32, 0x8e, + 0xe6, 0xbb, 0x50, 0x76, 0xb0, 0x3b, 0x1d, 0x33, 0x7c, 0xdd, 0xd8, 0x78, 0x31, 0x5b, 0xc2, 0x47, + 0xa8, 0xd3, 0xb1, 0xa7, 0x70, 0x61, 0xf9, 0x01, 0x94, 0x19, 0x05, 0xd5, 0xa0, 0x72, 0x6f, 0xf7, + 0xee, 0xee, 0xde, 0xbb, 0xbb, 0xad, 0x1c, 0x02, 0x28, 0x6f, 0x76, 0x3a, 0xdd, 0xfd, 0x7e, 0x4b, + 0x40, 0x22, 0x94, 0x36, 0xb7, 0xf6, 0x94, 0x7e, 0x2b, 0x4f, 0xc8, 0x4a, 0xf7, 0xed, 0x6e, 0xa7, + 0xdf, 0x2a, 0xa0, 0x65, 0xa8, 0xb3, 0xb6, 0x7a, 0x67, 0x4f, 0x79, 0x67, 0xb3, 0xdf, 0x2a, 0x46, + 0x48, 0x07, 0xdd, 0xdd, 0xdb, 0x5d, 0xa5, 0x55, 0x92, 0x5f, 0x22, 0x00, 0x3e, 0x25, 0x45, 0x0c, + 0xa1, 0xba, 0x10, 0x81, 0xea, 0xf2, 0xa7, 0x79, 0x90, 0xd2, 0xf3, 0x3e, 0xf4, 0x76, 0x62, 0xe3, + 0x1b, 0xe7, 0x48, 0x1a, 0x13, 0xbb, 0x47, 0x4f, 0x41, 0xc3, 0xc1, 0x47, 0xd8, 0x1b, 0x8c, 0x58, + 0x1e, 0xca, 0x82, 0x6d, 0x5d, 0xa9, 0x73, 0x2a, 0x15, 0x72, 0x19, 0xdb, 0x07, 0x78, 0xe0, 0xa9, + 0xcc, 0x8b, 0xb1, 0xf3, 0x2a, 0x12, 0x36, 0x42, 0x3d, 0x60, 0x44, 0xf9, 0xfd, 0x73, 0xd9, 0x52, + 0x84, 0x92, 0xd2, 0xed, 0x2b, 0x3f, 0x6c, 0x15, 0x10, 0x82, 0x06, 0x6d, 0xaa, 0x07, 0xbb, 0x9b, + 0xfb, 0x07, 0xbd, 0x3d, 0x62, 0xcb, 0x0b, 0xd0, 0xf4, 0x6d, 0xe9, 0x13, 0x4b, 0xf2, 0x3e, 0x5c, + 0x4e, 0x49, 0x5a, 0xbf, 0x61, 0xb5, 0x42, 0xfe, 0xb5, 0x10, 0x55, 0x19, 0xaf, 0x0c, 0xbc, 0x95, + 0xb0, 0xf4, 0x7a, 0xd6, 0x54, 0x37, 0x69, 0x66, 0x09, 0xaa, 0x98, 0x17, 0xe1, 0xa8, 0x81, 0x97, + 0x94, 0xa0, 0x2f, 0xbf, 0xb8, 0xd8, 0x68, 0xe1, 0xa9, 0xcb, 0xcb, 0xff, 0x16, 0xa0, 0x99, 0xf0, + 0x2e, 0x68, 0x03, 0x4a, 0x0c, 0xcd, 0xa5, 0xfd, 0xbb, 0xa4, 0xce, 0x91, 0xbb, 0x22, 0xc6, 0x8a, + 0x5e, 0x8f, 0x2d, 0x69, 0xc6, 0x8b, 0x31, 0x63, 0xf9, 0x95, 0x43, 0x2e, 0x1a, 0x48, 0xa0, 0x37, + 0x40, 0x0c, 0xdc, 0x24, 0x2f, 0x21, 0x3c, 0x39, 0x2b, 0x1e, 0x38, 0x58, 0x2e, 0x1f, 0xca, 0xa0, + 0x5b, 0x61, 0x92, 0x5d, 0x9c, 0xc5, 0x90, 0x5c, 0x9c, 0x31, 0x70, 0x61, 0x9f, 0x5f, 0xee, 0x40, + 0x2d, 0xb2, 0x1f, 0xf4, 0x38, 0x88, 0x13, 0xed, 0x84, 0xd7, 0x9b, 0x59, 0xc5, 0xb0, 0x3a, 0xd1, + 0x4e, 0x58, 0xa9, 0xf9, 0x32, 0x54, 0xc8, 0xe0, 0x50, 0x73, 0x79, 0x0d, 0xaa, 0x3c, 0xd1, 0x4e, + 0xde, 0xd2, 0x5c, 0xf9, 0x3d, 0x68, 0xc4, 0x6b, 0xad, 0xe4, 0x2e, 0x3a, 0xd6, 0xd4, 0xd4, 0xa9, + 0x8e, 0x92, 0xc2, 0x3a, 0xe8, 0x26, 0x94, 0x8e, 0x2d, 0xe6, 0xe9, 0xe7, 0x3b, 0xad, 0xfb, 0x96, + 0x87, 0x23, 0xb5, 0x5a, 0xc6, 0x2d, 0x3f, 0x82, 0x12, 0xf5, 0xdc, 0xc4, 0x95, 0xd2, 0xaa, 0x29, + 0x07, 0x18, 0xa4, 0x8d, 0xde, 0x03, 0xd0, 0x3c, 0xcf, 0x31, 0x0e, 0xa7, 0xa1, 0xe2, 0xd5, 0xf9, + 0x9e, 0x7f, 0xd3, 0xe7, 0xdb, 0xba, 0xca, 0x43, 0xc0, 0xc5, 0x50, 0x34, 0x12, 0x06, 0x22, 0x0a, + 0xe5, 0x5d, 0x68, 0xc4, 0x65, 0xa3, 0xff, 0x2f, 0x96, 0xe6, 0xfc, 0xbf, 0x08, 0x32, 0xd1, 0x20, + 0x8f, 0x2d, 0xb0, 0x0a, 0x39, 0xed, 0xc8, 0x1f, 0x0b, 0x50, 0xed, 0x9f, 0xf0, 0x33, 0x9a, 0x52, + 0x9c, 0x0d, 0x45, 0xf3, 0xd1, 0x52, 0x24, 0xab, 0xf6, 0x16, 0x82, 0x1a, 0xf2, 0x9b, 0xc1, 0x85, + 0x2a, 0x66, 0xad, 0x5d, 0xf8, 0x45, 0x37, 0xee, 0xae, 0x5f, 0x03, 0x31, 0x38, 0x55, 0x04, 0xa9, + 0x69, 0xba, 0xee, 0x60, 0xd7, 0xe5, 0x7b, 0xf3, 0xbb, 0xb4, 0xd6, 0x6f, 0x7d, 0xc4, 0x8b, 0x9d, + 0x05, 0x85, 0x75, 0x64, 0x1d, 0x9a, 0x89, 0x98, 0x8f, 0x5e, 0x83, 0x8a, 0x3d, 0x3d, 0x54, 0x7d, + 0xf3, 0x24, 0x2e, 0x8f, 0x9f, 0x7a, 0x4f, 0x0f, 0xc7, 0xc6, 0xe0, 0x2e, 0x3e, 0xf5, 0x17, 0x63, + 0x4f, 0x0f, 0xef, 0x32, 0x2b, 0xb2, 0x59, 0xf2, 0xd1, 0x59, 0x8e, 0xa1, 0xea, 0x1f, 0x0a, 0xf4, + 0xbd, 0xe8, 0x3d, 0xf1, 0xff, 0x00, 0xa5, 0xe6, 0x21, 0x5c, 0x7d, 0xe4, 0x9a, 0xdc, 0x80, 0x65, + 0xd7, 0x18, 0x9a, 0x58, 0x57, 0x43, 0xac, 0x48, 0x67, 0xab, 0x2a, 0x4d, 0x36, 0xb0, 0xe3, 0x03, + 0x45, 0xf9, 0x5f, 0x02, 0x54, 0xfd, 0x0b, 0x8b, 0x5e, 0x8a, 0x9c, 0xbb, 0xc6, 0x9c, 0x5c, 0xc0, + 0x67, 0x0c, 0xcb, 0xf5, 0xf1, 0xb5, 0xe6, 0xcf, 0xbf, 0xd6, 0xb4, 0xff, 0x2e, 0x7e, 0xd1, 0xb6, + 0x78, 0xee, 0x1f, 0x60, 0x2f, 0x00, 0xf2, 0x2c, 0x4f, 0x1b, 0xab, 0xc7, 0x96, 0x67, 0x98, 0x43, + 0x95, 0x19, 0x9b, 0xa5, 0xa3, 0x2d, 0x3a, 0x72, 0x9f, 0x0e, 0xec, 0x53, 0xbb, 0xff, 0x54, 0x80, + 0x6a, 0x90, 0x1d, 0x9c, 0xb7, 0xfa, 0x7e, 0x09, 0xca, 0x3c, 0x00, 0xb2, 0xf2, 0x3b, 0xef, 0x05, + 0x3f, 0x82, 0x8a, 0x91, 0x1f, 0x41, 0x12, 0x54, 0x27, 0xd8, 0xd3, 0x68, 0x9c, 0x61, 0x70, 0x3d, + 0xe8, 0xdf, 0xb8, 0x05, 0xb5, 0xc8, 0x8f, 0x10, 0x72, 0xf3, 0x76, 0xbb, 0xef, 0xb6, 0x72, 0x52, + 0xe5, 0xe3, 0xcf, 0xae, 0x15, 0x76, 0xf1, 0x47, 0xe4, 0xcc, 0x2a, 0xdd, 0x4e, 0xaf, 0xdb, 0xb9, + 0xdb, 0x12, 0xa4, 0xda, 0xc7, 0x9f, 0x5d, 0xab, 0x28, 0x98, 0x96, 0xf7, 0x6e, 0xf4, 0x60, 0x29, + 0xfa, 0x55, 0xe2, 0xe1, 0x00, 0x41, 0xe3, 0xf6, 0xbd, 0xfd, 0x9d, 0xed, 0xce, 0x66, 0xbf, 0xab, + 0xde, 0xdf, 0xeb, 0x77, 0x5b, 0x02, 0xba, 0x0c, 0x17, 0x76, 0xb6, 0xdf, 0xea, 0xf5, 0xd5, 0xce, + 0xce, 0x76, 0x77, 0xb7, 0xaf, 0x6e, 0xf6, 0xfb, 0x9b, 0x9d, 0xbb, 0xad, 0xfc, 0xc6, 0x1f, 0x6b, + 0xd0, 0xdc, 0xdc, 0xea, 0x6c, 0x93, 0xf8, 0x6f, 0x0c, 0x34, 0x5e, 0x3e, 0x2d, 0xd2, 0x6a, 0xc9, + 0x99, 0x0f, 0x5b, 0xa4, 0xb3, 0xab, 0xc7, 0xe8, 0x0e, 0x94, 0x68, 0x21, 0x05, 0x9d, 0xfd, 0xd2, + 0x45, 0x5a, 0x50, 0x4e, 0x26, 0x8b, 0xa1, 0xd7, 0xe3, 0xcc, 0xa7, 0x2f, 0xd2, 0xd9, 0xd5, 0x65, + 0xa4, 0x80, 0x18, 0x96, 0x33, 0x16, 0x3f, 0x85, 0x91, 0x32, 0x54, 0x9c, 0x89, 0xce, 0x10, 0x53, + 0x2d, 0x7e, 0x1a, 0x22, 0x65, 0x70, 0x60, 0x68, 0x07, 0x2a, 0x3e, 0x0c, 0x5e, 0xf4, 0x58, 0x45, + 0x5a, 0x58, 0x0d, 0x26, 0x9f, 0x80, 0x95, 0x2b, 0xce, 0x7e, 0x79, 0x23, 0x2d, 0x28, 0x6d, 0xa3, + 0x6d, 0x28, 0xf3, 0x6c, 0x7f, 0xc1, 0x03, 0x14, 0x69, 0x51, 0x75, 0x97, 0x18, 0x2d, 0xac, 0x03, + 0x2d, 0x7e, 0x4f, 0x24, 0x65, 0xa8, 0xda, 0xa3, 0x7b, 0x00, 0x91, 0xe2, 0x44, 0x86, 0x87, 0x42, + 0x52, 0x96, 0x6a, 0x3c, 0xda, 0x83, 0x6a, 0x80, 0x15, 0x17, 0x3e, 0xdb, 0x91, 0x16, 0x97, 0xc5, + 0xd1, 0x03, 0xa8, 0xc7, 0x91, 0x4e, 0xb6, 0xc7, 0x38, 0x52, 0xc6, 0x7a, 0x37, 0xd1, 0x1f, 0x87, + 0x3d, 0xd9, 0x1e, 0xe7, 0x48, 0x19, 0xcb, 0xdf, 0xe8, 0x03, 0x58, 0x9e, 0x85, 0x25, 0xd9, 0xdf, + 0xea, 0x48, 0xe7, 0x28, 0x88, 0xa3, 0x09, 0xa0, 0x39, 0x70, 0xe6, 0x1c, 0x4f, 0x77, 0xa4, 0xf3, + 0xd4, 0xc7, 0x91, 0x0e, 0xcd, 0x24, 0x46, 0xc8, 0xfa, 0x94, 0x47, 0xca, 0x5c, 0x2b, 0x67, 0xb3, + 0xc4, 0x61, 0x43, 0xd6, 0xa7, 0x3d, 0x52, 0xe6, 0xd2, 0xf9, 0x56, 0xf7, 0xf3, 0xaf, 0x56, 0x84, + 0x2f, 0xbe, 0x5a, 0x11, 0xfe, 0xfa, 0xd5, 0x8a, 0xf0, 0xc9, 0xd7, 0x2b, 0xb9, 0x2f, 0xbe, 0x5e, + 0xc9, 0xfd, 0xe9, 0xeb, 0x95, 0xdc, 0x8f, 0x9e, 0x1f, 0x1a, 0xde, 0x68, 0x7a, 0xb8, 0x36, 0xb0, + 0x26, 0xeb, 0xd1, 0x37, 0x94, 0xf3, 0xde, 0x75, 0x1e, 0x96, 0x69, 0xd0, 0x7d, 0xf9, 0x3f, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x20, 0xc5, 0x6d, 0xed, 0xf7, 0x29, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4972,18 +4972,6 @@ func (m *RequestInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.Timeouts != nil { - { - size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } if m.P2PVersion != 0 { i = encodeVarintTypes(dAtA, i, uint64(m.P2PVersion)) i-- @@ -5106,12 +5094,12 @@ func (m *RequestInitChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - n22, err22 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err22 != nil { - return 0, err22 + n21, err21 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err21 != nil { + return 0, err21 } - i -= n22 - i = encodeVarintTypes(dAtA, i, uint64(n22)) + i -= n21 + i = encodeVarintTypes(dAtA, i, uint64(n21)) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -5514,12 +5502,12 @@ func (m *RequestPrepareProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l - n26, err26 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err26 != nil { - return 0, err26 + n25, err25 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err25 != nil { + return 0, err25 } - i -= n26 - i = encodeVarintTypes(dAtA, i, uint64(n26)) + i -= n25 + i = encodeVarintTypes(dAtA, i, uint64(n25)) i-- dAtA[i] = 0x2a if m.Height != 0 { @@ -6118,6 +6106,18 @@ func (m *ResponseInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Timeouts != nil { + { + size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } if len(m.LastBlockAppHash) > 0 { i -= len(m.LastBlockAppHash) copy(dAtA[i:], m.LastBlockAppHash) @@ -7672,10 +7672,6 @@ func (m *RequestInfo) Size() (n int) { if m.P2PVersion != 0 { n += 1 + sovTypes(uint64(m.P2PVersion)) } - if m.Timeouts != nil { - l = m.Timeouts.Size() - n += 1 + l + sovTypes(uint64(l)) - } return n } @@ -8215,6 +8211,10 @@ func (m *ResponseInfo) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + if m.Timeouts != nil { + l = m.Timeouts.Size() + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -9758,42 +9758,6 @@ func (m *RequestInfo) Unmarshal(dAtA []byte) error { break } } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timeouts", 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 - } - if m.Timeouts == nil { - m.Timeouts = &TimeoutsInfo{} - } - if err := m.Timeouts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -12591,6 +12555,42 @@ func (m *ResponseInfo) Unmarshal(dAtA []byte) error { m.LastBlockAppHash = []byte{} } iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timeouts", 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 + } + if m.Timeouts == nil { + m.Timeouts = &TimeoutsInfo{} + } + if err := m.Timeouts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/node/node.go b/node/node.go index e2c749fb1f..e77afad0a0 100644 --- a/node/node.go +++ b/node/node.go @@ -837,7 +837,7 @@ func NewNode(config *cfg.Config, } // Reload the state. It will have the Version.Consensus.App set by the - // Handshake, and may have other modifications as well (ie. depending on + // Handshake, and may have other modifications as well (i.e., depending on // what happened during block replay). state, err = stateStore.Load() if err != nil { @@ -852,7 +852,8 @@ func NewNode(config *cfg.Config, } // Determine whether we should do fast sync. This must happen after the handshake, since the - // app may modify the validator set, specifying ourself as the only validator. + // app may modify the validator set, + //specifying ourselves as the only validator. fastSync := config.FastSyncMode && !onlyValidatorIsUs(state, pubKey) logNodeStartupInfo(state, pubKey, logger, consensusLogger) diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index 27b7bf1c30..99e9438725 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -54,10 +54,9 @@ message TimeoutsInfo { } message RequestInfo { - string version = 1; - uint64 block_version = 2; - uint64 p2p_version = 3; - TimeoutsInfo timeouts = 4; + string version = 1; + uint64 block_version = 2; + uint64 p2p_version = 3; } // nondeterministic @@ -200,6 +199,8 @@ message ResponseInfo { int64 last_block_height = 4; bytes last_block_app_hash = 5; + + TimeoutsInfo timeouts = 6; } // nondeterministic From 6e2fb788ed252c3df37ada6b7faf897dbf33c121 Mon Sep 17 00:00:00 2001 From: sanaz Date: Tue, 24 Sep 2024 10:58:08 -0700 Subject: [PATCH 11/87] adds timemouts to InitchainRespo se --- abci/types/types.pb.go | 468 +++++++++++++++++++++++------------------ 1 file changed, 264 insertions(+), 204 deletions(-) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index eb541744ed..d47df78be3 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -2028,6 +2028,7 @@ type ResponseInitChain struct { ConsensusParams *ConsensusParams `protobuf:"bytes,1,opt,name=consensus_params,json=consensusParams,proto3" json:"consensus_params,omitempty"` Validators []ValidatorUpdate `protobuf:"bytes,2,rep,name=validators,proto3" json:"validators"` AppHash []byte `protobuf:"bytes,3,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` + Timeouts *TimeoutsInfo `protobuf:"bytes,4,opt,name=timeouts,proto3" json:"timeouts,omitempty"` } func (m *ResponseInitChain) Reset() { *m = ResponseInitChain{} } @@ -2084,6 +2085,13 @@ func (m *ResponseInitChain) GetAppHash() []byte { return nil } +func (m *ResponseInitChain) GetTimeouts() *TimeoutsInfo { + if m != nil { + return m.Timeouts + } + return nil +} + type ResponseQuery struct { Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` // bytes data = 2; // use "value" instead. @@ -3619,196 +3627,196 @@ var fileDescriptor_252557cfdd89a31a = []byte{ 0xd1, 0x5f, 0xec, 0x1b, 0xbd, 0xdc, 0x07, 0x47, 0xb2, 0xb4, 0x82, 0x65, 0x52, 0x86, 0xca, 0x2f, 0xd9, 0x26, 0x3f, 0xd3, 0x25, 0x7f, 0x56, 0xec, 0xc4, 0x26, 0x57, 0x2b, 0x2f, 0x2d, 0x9a, 0x64, 0xc0, 0x95, 0x9c, 0x97, 0x05, 0x83, 0x8b, 0xe1, 0x2e, 0xac, 0x5d, 0x00, 0x06, 0xb0, 0x34, 0xa9, - 0x63, 0x2a, 0xa9, 0x54, 0xf9, 0xe4, 0xaa, 0x5c, 0x7c, 0xf1, 0x3d, 0x97, 0xfc, 0x09, 0xc9, 0x25, - 0x55, 0x29, 0x57, 0xe5, 0x10, 0x1f, 0x73, 0x48, 0x39, 0x29, 0x3b, 0xa7, 0x5c, 0x73, 0xc8, 0x29, - 0x95, 0xd4, 0x3c, 0xf0, 0xdc, 0x05, 0x17, 0xb4, 0x73, 0xcb, 0x6d, 0xa6, 0xa7, 0xbb, 0x67, 0xa6, - 0x31, 0xd3, 0xdd, 0xbf, 0xc6, 0xc0, 0xe3, 0x1e, 0x36, 0x75, 0xec, 0x4c, 0x0c, 0xd3, 0x5b, 0xd7, - 0x0e, 0x07, 0xc6, 0xba, 0x77, 0x6a, 0x63, 0x77, 0xcd, 0x76, 0x2c, 0xcf, 0x42, 0xcd, 0x70, 0x70, - 0x8d, 0x0c, 0x4a, 0x4f, 0x44, 0xb8, 0x07, 0xce, 0xa9, 0xed, 0x59, 0xeb, 0xb6, 0x63, 0x59, 0x47, - 0x8c, 0x5f, 0xba, 0x1a, 0x19, 0xa6, 0x7a, 0xa2, 0xda, 0x62, 0xa3, 0x5c, 0xf8, 0x21, 0x3e, 0xf5, - 0x47, 0x9f, 0x98, 0x91, 0xb5, 0x35, 0x47, 0x9b, 0xf8, 0xc3, 0xab, 0x43, 0xcb, 0x1a, 0x8e, 0xf1, - 0x3a, 0xed, 0x1d, 0x4e, 0x8f, 0xd6, 0x3d, 0x63, 0x82, 0x5d, 0x4f, 0x9b, 0xd8, 0x9c, 0xe1, 0xe2, - 0xd0, 0x1a, 0x5a, 0xb4, 0xb9, 0x4e, 0x5a, 0x9c, 0xba, 0x92, 0x14, 0xd3, 0xa7, 0x8e, 0xe6, 0x19, - 0x96, 0xc9, 0xc6, 0xe5, 0xdf, 0x88, 0x50, 0x51, 0xf0, 0x87, 0x53, 0xec, 0x7a, 0x68, 0x03, 0x8a, - 0x78, 0x30, 0xb2, 0xda, 0xc2, 0x35, 0xe1, 0xd9, 0xda, 0xc6, 0xd5, 0xb5, 0xc4, 0xe6, 0xd7, 0x38, - 0x5f, 0x77, 0x30, 0xb2, 0x7a, 0x39, 0x85, 0xf2, 0xa2, 0x9b, 0x50, 0x3a, 0x1a, 0x4f, 0xdd, 0x51, - 0x3b, 0x4f, 0x85, 0x9e, 0x48, 0x13, 0xba, 0x43, 0x98, 0x7a, 0x39, 0x85, 0x71, 0x93, 0xa9, 0x0c, - 0xf3, 0xc8, 0x6a, 0x17, 0xce, 0x9e, 0x6a, 0xdb, 0x3c, 0xa2, 0x53, 0x11, 0x5e, 0xb4, 0x05, 0xe0, - 0x62, 0x4f, 0xb5, 0x6c, 0xb2, 0xfc, 0x76, 0x91, 0x4a, 0x3e, 0x99, 0x26, 0x79, 0x80, 0xbd, 0x3d, - 0xca, 0xd8, 0xcb, 0x29, 0xa2, 0xeb, 0x77, 0x88, 0x0e, 0xc3, 0x34, 0x3c, 0x75, 0x30, 0xd2, 0x0c, - 0xb3, 0x5d, 0x3a, 0x5b, 0xc7, 0xb6, 0x69, 0x78, 0x1d, 0xc2, 0x48, 0x74, 0x18, 0x7e, 0x87, 0x6c, - 0xf9, 0xc3, 0x29, 0x76, 0x4e, 0xdb, 0xe5, 0xb3, 0xb7, 0xfc, 0x7d, 0xc2, 0x44, 0xb6, 0x4c, 0xb9, - 0x51, 0x17, 0x6a, 0x87, 0x78, 0x68, 0x98, 0xea, 0xe1, 0xd8, 0x1a, 0x3c, 0x6c, 0x57, 0xa8, 0xb0, - 0x9c, 0x26, 0xbc, 0x45, 0x58, 0xb7, 0x08, 0x67, 0x2f, 0xa7, 0xc0, 0x61, 0xd0, 0x43, 0xaf, 0x43, - 0x75, 0x30, 0xc2, 0x83, 0x87, 0xaa, 0x77, 0xd2, 0xae, 0x52, 0x1d, 0xab, 0x69, 0x3a, 0x3a, 0x84, - 0xaf, 0x7f, 0xd2, 0xcb, 0x29, 0x95, 0x01, 0x6b, 0x92, 0xfd, 0xeb, 0x78, 0x6c, 0x1c, 0x63, 0x87, - 0xc8, 0x8b, 0x67, 0xef, 0xff, 0x36, 0xe3, 0xa4, 0x1a, 0x44, 0xdd, 0xef, 0xa0, 0x37, 0x40, 0xc4, - 0xa6, 0xce, 0xb7, 0x01, 0x54, 0xc5, 0xb5, 0xd4, 0xb3, 0x62, 0xea, 0xfe, 0x26, 0xaa, 0x98, 0xb7, - 0xd1, 0xab, 0x50, 0x1e, 0x58, 0x93, 0x89, 0xe1, 0xb5, 0x6b, 0x54, 0x7a, 0x25, 0x75, 0x03, 0x94, - 0xab, 0x97, 0x53, 0x38, 0x3f, 0xda, 0x85, 0xc6, 0xd8, 0x70, 0x3d, 0xd5, 0x35, 0x35, 0xdb, 0x1d, - 0x59, 0x9e, 0xdb, 0x5e, 0xa2, 0x1a, 0x9e, 0x4a, 0xd3, 0xb0, 0x63, 0xb8, 0xde, 0x81, 0xcf, 0xdc, - 0xcb, 0x29, 0xf5, 0x71, 0x94, 0x40, 0xf4, 0x59, 0x47, 0x47, 0xd8, 0x09, 0x14, 0xb6, 0xeb, 0x67, - 0xeb, 0xdb, 0x23, 0xdc, 0xbe, 0x3c, 0xd1, 0x67, 0x45, 0x09, 0xe8, 0xc7, 0x70, 0x61, 0x6c, 0x69, - 0x7a, 0xa0, 0x4e, 0x1d, 0x8c, 0xa6, 0xe6, 0xc3, 0x76, 0x83, 0x2a, 0x7d, 0x2e, 0x75, 0x91, 0x96, - 0xa6, 0xfb, 0x2a, 0x3a, 0x44, 0xa0, 0x97, 0x53, 0x96, 0xc7, 0x49, 0x22, 0x7a, 0x00, 0x17, 0x35, - 0xdb, 0x1e, 0x9f, 0x26, 0xb5, 0x37, 0xa9, 0xf6, 0x1b, 0x69, 0xda, 0x37, 0x89, 0x4c, 0x52, 0x3d, - 0xd2, 0x66, 0xa8, 0xa8, 0x0f, 0x2d, 0xdb, 0xc1, 0xb6, 0xe6, 0x60, 0xd5, 0x76, 0x2c, 0xdb, 0x72, - 0xb5, 0x71, 0xbb, 0x45, 0x75, 0x3f, 0x93, 0xa6, 0x7b, 0x9f, 0xf1, 0xef, 0x73, 0xf6, 0x5e, 0x4e, - 0x69, 0xda, 0x71, 0x12, 0xd3, 0x6a, 0x0d, 0xb0, 0xeb, 0x86, 0x5a, 0x97, 0x17, 0x69, 0xa5, 0xfc, - 0x71, 0xad, 0x31, 0xd2, 0x56, 0x05, 0x4a, 0xc7, 0xda, 0x78, 0x8a, 0xe5, 0x67, 0xa0, 0x16, 0x71, - 0x4b, 0xa8, 0x0d, 0x95, 0x09, 0x76, 0x5d, 0x6d, 0x88, 0xa9, 0x17, 0x13, 0x15, 0xbf, 0x2b, 0x37, - 0x60, 0x29, 0xea, 0x8a, 0xe4, 0x5f, 0x09, 0xb0, 0xd4, 0x37, 0x26, 0xd8, 0x9a, 0x7a, 0x2e, 0x71, - 0x33, 0x68, 0x07, 0x9a, 0x1e, 0xeb, 0xf3, 0x85, 0x62, 0xee, 0x08, 0xaf, 0xac, 0x31, 0x1f, 0xba, - 0xe6, 0xfb, 0xd0, 0xb5, 0xdb, 0xdc, 0x87, 0x6e, 0x55, 0x3f, 0xff, 0x72, 0x35, 0xf7, 0xe9, 0x5f, - 0x56, 0x05, 0xa5, 0xc1, 0x65, 0xd9, 0x0a, 0x31, 0x7a, 0x1b, 0x7c, 0x8a, 0xca, 0xcf, 0x7a, 0x3e, - 0xbb, 0xb2, 0x3a, 0x17, 0x65, 0xe7, 0x5f, 0x9e, 0x04, 0x7b, 0xa4, 0x0b, 0x6d, 0x43, 0xe5, 0x18, - 0x3b, 0x2e, 0x71, 0x82, 0x7c, 0x8f, 0xbc, 0x8b, 0xae, 0x43, 0x9d, 0xde, 0x4a, 0xd5, 0x1f, 0x27, - 0x73, 0x16, 0x95, 0x25, 0x4a, 0xbc, 0xcf, 0x99, 0x56, 0xa1, 0x66, 0x6f, 0xd8, 0x01, 0x4b, 0x81, - 0xb2, 0x80, 0xbd, 0x61, 0x73, 0x06, 0xf9, 0x3b, 0xd0, 0x4a, 0x3a, 0x51, 0xd4, 0x82, 0xc2, 0x43, - 0x7c, 0xca, 0xe7, 0x23, 0x4d, 0x74, 0x91, 0x7f, 0x01, 0x3a, 0x87, 0xa8, 0xf0, 0xcf, 0xf1, 0x87, - 0x7c, 0x20, 0x1c, 0x78, 0x4f, 0xf4, 0x2a, 0x14, 0xc9, 0x86, 0xb8, 0x39, 0xa5, 0x19, 0x0b, 0xf4, - 0xfd, 0x48, 0xc6, 0x4c, 0xf0, 0x09, 0x31, 0x01, 0x95, 0x40, 0x57, 0x88, 0xb3, 0xd3, 0x0c, 0x53, - 0x35, 0x74, 0x3e, 0x4f, 0x85, 0xf6, 0xb7, 0x75, 0x74, 0x17, 0x5a, 0x03, 0xcb, 0x74, 0xb1, 0xe9, - 0x4e, 0x5d, 0x95, 0x45, 0x4a, 0x1e, 0x4d, 0x66, 0x9d, 0x51, 0xc7, 0x67, 0xdc, 0xa7, 0x7c, 0x4a, - 0x73, 0x10, 0x27, 0xa0, 0x3b, 0x00, 0xc7, 0xda, 0xd8, 0xd0, 0x35, 0xcf, 0x72, 0xdc, 0x76, 0xf1, - 0x5a, 0x61, 0xae, 0x9a, 0xfb, 0x3e, 0xcb, 0x3d, 0x5b, 0xd7, 0x3c, 0xbc, 0x55, 0x24, 0xab, 0x55, - 0x22, 0x92, 0xe8, 0x69, 0x68, 0x6a, 0xb6, 0xad, 0xba, 0x9e, 0xe6, 0x61, 0xf5, 0xf0, 0xd4, 0xc3, - 0x2e, 0x8d, 0x31, 0x4b, 0x4a, 0x5d, 0xb3, 0xed, 0x03, 0x42, 0xdd, 0x22, 0x44, 0xf4, 0x14, 0x34, - 0x48, 0x3c, 0x31, 0xb4, 0xb1, 0x3a, 0xc2, 0xc6, 0x70, 0xe4, 0xd1, 0x58, 0x52, 0x50, 0xea, 0x9c, - 0xda, 0xa3, 0x44, 0x59, 0x0f, 0xce, 0x2c, 0x8d, 0x25, 0x08, 0x41, 0x51, 0xd7, 0x3c, 0x8d, 0x1a, - 0x72, 0x49, 0xa1, 0x6d, 0x42, 0xb3, 0x35, 0x6f, 0xc4, 0xcd, 0x43, 0xdb, 0xe8, 0x12, 0x94, 0xb9, - 0xda, 0x02, 0x55, 0xcb, 0x7b, 0xe4, 0x9b, 0xd9, 0x8e, 0x75, 0x8c, 0x69, 0xf0, 0xac, 0x2a, 0xac, - 0x23, 0xff, 0x2c, 0x0f, 0xcb, 0x33, 0x51, 0x87, 0xe8, 0x1d, 0x69, 0xee, 0xc8, 0x9f, 0x8b, 0xb4, - 0xd1, 0x2b, 0x44, 0xaf, 0xa6, 0x63, 0x87, 0x1f, 0xe6, 0x76, 0xd4, 0x44, 0x2c, 0xd3, 0xe9, 0xd1, - 0x71, 0x6e, 0x1a, 0xce, 0x8d, 0xf6, 0xa0, 0x35, 0xd6, 0x5c, 0xff, 0x26, 0xa8, 0x91, 0xc8, 0x3f, - 0x1b, 0xbb, 0x76, 0x34, 0xdf, 0xef, 0x93, 0xc3, 0xce, 0x15, 0x35, 0xc6, 0x31, 0x2a, 0x52, 0xe0, - 0xe2, 0xe1, 0xe9, 0x23, 0xcd, 0xf4, 0x0c, 0x13, 0xab, 0x33, 0x5f, 0xee, 0xca, 0x8c, 0xd2, 0xee, - 0xb1, 0xa1, 0x63, 0x73, 0xe0, 0x7f, 0xb2, 0x0b, 0x81, 0x70, 0xf0, 0x49, 0x5d, 0x59, 0x81, 0x46, - 0x3c, 0x6e, 0xa2, 0x06, 0xe4, 0xbd, 0x13, 0x6e, 0x80, 0xbc, 0x77, 0x82, 0xfe, 0x0f, 0x8a, 0x64, - 0x93, 0x74, 0xf3, 0x8d, 0x39, 0x49, 0x0b, 0x97, 0xeb, 0x9f, 0xda, 0x58, 0xa1, 0x9c, 0xb2, 0x1c, - 0xdc, 0x86, 0x20, 0x96, 0x26, 0xb5, 0xca, 0xcf, 0x41, 0x33, 0x11, 0x2c, 0x23, 0xdf, 0x4f, 0x88, - 0x7e, 0x3f, 0xb9, 0x09, 0xf5, 0x58, 0x64, 0x94, 0x2f, 0xc1, 0xc5, 0x79, 0x81, 0x4e, 0x1e, 0x05, - 0xf4, 0x58, 0xc0, 0x42, 0x37, 0xa1, 0x1a, 0x44, 0x3a, 0xdf, 0xb9, 0x25, 0x77, 0xe1, 0x33, 0x2b, - 0x01, 0x2b, 0xb9, 0x86, 0xe4, 0x58, 0xd3, 0xf3, 0x90, 0xa7, 0x0b, 0xaf, 0x68, 0xb6, 0xdd, 0xd3, - 0xdc, 0x91, 0xfc, 0x3e, 0xb4, 0xd3, 0xa2, 0x58, 0x62, 0x1b, 0xc5, 0xe0, 0x18, 0x5e, 0x82, 0xf2, - 0x91, 0xe5, 0x4c, 0x34, 0xe6, 0x13, 0xeb, 0x0a, 0xef, 0x91, 0xe3, 0xc9, 0x22, 0x5a, 0x81, 0x92, - 0x59, 0x47, 0x56, 0xe1, 0x4a, 0x6a, 0x24, 0x23, 0x22, 0x86, 0xa9, 0x63, 0x66, 0xcf, 0xba, 0xc2, - 0x3a, 0xa1, 0x22, 0xb6, 0x58, 0xd6, 0x21, 0xd3, 0xba, 0x74, 0xaf, 0x54, 0xbf, 0xa8, 0xf0, 0x9e, - 0xfc, 0x37, 0x01, 0x2e, 0xcd, 0x8f, 0x67, 0xe8, 0x26, 0x00, 0x73, 0xa8, 0xc1, 0xb5, 0xab, 0x6d, - 0x5c, 0x9a, 0x3d, 0xf4, 0xb7, 0x35, 0x4f, 0x53, 0x44, 0xca, 0x49, 0x9a, 0xc4, 0x0d, 0x84, 0x62, - 0xaa, 0x6b, 0x3c, 0x62, 0x67, 0xa6, 0xa0, 0xd4, 0x03, 0x9e, 0x03, 0xe3, 0x51, 0xdc, 0xbd, 0x15, - 0xe2, 0xee, 0x2d, 0xb4, 0x5d, 0x31, 0x76, 0x85, 0x7d, 0x5f, 0x5a, 0x3a, 0xaf, 0x2f, 0x95, 0x7f, - 0x11, 0xdd, 0x66, 0x2c, 0x9a, 0x46, 0xee, 0xb5, 0x70, 0xae, 0x7b, 0x1d, 0x37, 0x4f, 0x3e, 0xa3, - 0x79, 0xe4, 0x5f, 0x02, 0x54, 0x15, 0xec, 0xda, 0xc4, 0x09, 0xa3, 0x2d, 0x10, 0xf1, 0xc9, 0x00, - 0xb3, 0xa4, 0x5e, 0x48, 0x4d, 0x8a, 0x19, 0x77, 0xd7, 0xe7, 0x24, 0x19, 0x69, 0x20, 0x86, 0x5e, - 0xe6, 0xc0, 0x25, 0x1d, 0x83, 0x70, 0xf1, 0x28, 0x72, 0x79, 0xc5, 0x47, 0x2e, 0x85, 0xd4, 0x24, - 0x94, 0x49, 0x25, 0xa0, 0xcb, 0xcb, 0x1c, 0xba, 0x14, 0x17, 0x4c, 0x16, 0xc3, 0x2e, 0x9d, 0x18, - 0x76, 0x29, 0x2d, 0xd8, 0x66, 0x0a, 0x78, 0xe9, 0xc4, 0xc0, 0x4b, 0x79, 0x81, 0x92, 0x14, 0xf4, - 0xf2, 0x8a, 0x8f, 0x5e, 0x2a, 0x0b, 0xb6, 0x9d, 0x80, 0x2f, 0x77, 0xe2, 0xf0, 0x85, 0x41, 0x8f, - 0xeb, 0xa9, 0xd2, 0xa9, 0xf8, 0xe5, 0xbb, 0x11, 0xfc, 0x22, 0xa6, 0x82, 0x07, 0xa6, 0x64, 0x0e, - 0x80, 0xe9, 0xc4, 0x00, 0x0c, 0x2c, 0xb0, 0x41, 0x0a, 0x82, 0x79, 0x33, 0x8a, 0x60, 0x6a, 0xa9, - 0x20, 0x88, 0x1f, 0x9a, 0x79, 0x10, 0xe6, 0x56, 0x00, 0x61, 0x96, 0x52, 0x31, 0x18, 0xdf, 0x43, - 0x12, 0xc3, 0xec, 0xcd, 0x60, 0x18, 0x86, 0x39, 0x9e, 0x4e, 0x55, 0xb1, 0x00, 0xc4, 0xec, 0xcd, - 0x80, 0x98, 0xc6, 0x02, 0x85, 0x0b, 0x50, 0xcc, 0x4f, 0xe6, 0xa3, 0x98, 0x74, 0x9c, 0xc1, 0x97, - 0x99, 0x0d, 0xc6, 0xa8, 0x29, 0x30, 0x86, 0x41, 0x8d, 0xe7, 0x53, 0xd5, 0x67, 0xc6, 0x31, 0xf7, - 0xe6, 0xe0, 0x18, 0x86, 0x38, 0x9e, 0x4d, 0x55, 0x9e, 0x01, 0xc8, 0xdc, 0x9b, 0x03, 0x64, 0xd0, - 0x42, 0xb5, 0xd9, 0x91, 0xcc, 0x73, 0x24, 0x0b, 0x4b, 0xb8, 0x39, 0x12, 0xc9, 0xb0, 0xe3, 0x58, - 0x0e, 0xcf, 0xbc, 0x59, 0x47, 0x7e, 0x96, 0xe4, 0x85, 0xa1, 0x4b, 0x3b, 0x03, 0xf5, 0xd0, 0x8c, - 0x21, 0xe2, 0xc6, 0xe4, 0x7f, 0x08, 0xa1, 0x2c, 0x4d, 0xa5, 0xa2, 0x39, 0xa5, 0xc8, 0x73, 0xca, - 0x08, 0xc2, 0xc8, 0xc7, 0x11, 0xc6, 0x2a, 0xd4, 0x48, 0x26, 0x90, 0x00, 0x0f, 0x9a, 0xed, 0x83, - 0x07, 0x74, 0x03, 0x96, 0x69, 0xaa, 0xc7, 0xe2, 0x42, 0x2c, 0x84, 0x35, 0xc9, 0x00, 0xbb, 0x4a, - 0x2c, 0x96, 0xbd, 0x08, 0x17, 0x22, 0xbc, 0x41, 0x86, 0xc1, 0x32, 0xe6, 0x56, 0xc0, 0xbd, 0xc9, - 0x52, 0x0d, 0x74, 0x0b, 0xaa, 0x1c, 0x17, 0xb9, 0xa9, 0xa5, 0x97, 0x28, 0xa2, 0x53, 0x02, 0x76, - 0xf9, 0x9d, 0xd0, 0xb6, 0x21, 0xa6, 0x41, 0x50, 0x1c, 0x58, 0x3a, 0xe6, 0xa9, 0x03, 0x6d, 0x13, - 0x9c, 0x33, 0xb6, 0x86, 0x3c, 0x18, 0x93, 0x26, 0xe1, 0x0a, 0xdc, 0xbd, 0xc8, 0xbc, 0xb9, 0xfc, - 0x3b, 0x21, 0xd4, 0x17, 0xc2, 0x9c, 0x79, 0x88, 0x44, 0xf8, 0xef, 0x20, 0x92, 0xfc, 0x37, 0x46, - 0x24, 0xd1, 0xd4, 0xad, 0x10, 0x4f, 0xdd, 0xfe, 0x29, 0x84, 0x87, 0x23, 0xc0, 0x17, 0xdf, 0xcc, - 0x22, 0x61, 0x1e, 0x56, 0xa2, 0x9f, 0x9a, 0xe7, 0x61, 0x1c, 0x35, 0x96, 0xe9, 0xbc, 0x71, 0xd4, - 0x58, 0x61, 0x99, 0x19, 0xed, 0xa0, 0x57, 0x41, 0xa4, 0x55, 0x54, 0xd5, 0xb2, 0x5d, 0x1e, 0x59, - 0x1e, 0x8f, 0xee, 0x95, 0x15, 0x4b, 0xd7, 0xf6, 0x09, 0xcf, 0x9e, 0xed, 0x2a, 0x55, 0x9b, 0xb7, - 0x22, 0x69, 0x92, 0x18, 0x4b, 0x93, 0xae, 0x82, 0x48, 0x56, 0xef, 0xda, 0xda, 0x00, 0xd3, 0x28, - 0x21, 0x2a, 0x21, 0x41, 0x7e, 0x00, 0x68, 0x36, 0x4e, 0xa1, 0x1e, 0x94, 0xf1, 0x31, 0x36, 0x3d, - 0xf2, 0xd5, 0x0a, 0xc9, 0x4c, 0x86, 0xc3, 0x08, 0x6c, 0x7a, 0x5b, 0x6d, 0x62, 0xe4, 0xbf, 0x7f, - 0xb9, 0xda, 0x62, 0xdc, 0x2f, 0x58, 0x13, 0xc3, 0xc3, 0x13, 0xdb, 0x3b, 0x55, 0xb8, 0xbc, 0xfc, - 0xe7, 0x3c, 0xc9, 0xe9, 0x63, 0x31, 0x6c, 0xae, 0x6d, 0xfd, 0xbb, 0x97, 0x8f, 0xe0, 0xb9, 0x6c, - 0xf6, 0x5e, 0x01, 0x18, 0x6a, 0xae, 0xfa, 0x91, 0x66, 0x7a, 0x58, 0xe7, 0x46, 0x8f, 0x50, 0x90, - 0x04, 0x55, 0xd2, 0x9b, 0xba, 0x58, 0xe7, 0xd0, 0x32, 0xe8, 0x47, 0xf6, 0x59, 0xf9, 0x76, 0xfb, - 0x8c, 0x5b, 0xb9, 0x9a, 0xb0, 0x72, 0x24, 0xdf, 0x16, 0xa3, 0xf9, 0x36, 0x59, 0x9b, 0xed, 0x18, - 0x96, 0x63, 0x78, 0xa7, 0xf4, 0xd3, 0x14, 0x94, 0xa0, 0x8f, 0xae, 0x43, 0x7d, 0x82, 0x27, 0xb6, - 0x65, 0x8d, 0x55, 0xe6, 0xf7, 0x6a, 0x54, 0x74, 0x89, 0x13, 0xbb, 0xd4, 0xfd, 0xfd, 0x3c, 0x1f, - 0x5e, 0xbf, 0x10, 0x57, 0xfd, 0xcf, 0x19, 0x58, 0xfe, 0x3d, 0x2d, 0xb6, 0xc4, 0xb3, 0x14, 0x74, - 0x00, 0xcb, 0xc1, 0xf5, 0x57, 0xa7, 0xd4, 0x2d, 0xf8, 0x07, 0x3a, 0xab, 0xff, 0x68, 0x1d, 0xc7, - 0xc9, 0x2e, 0xfa, 0x01, 0x5c, 0x4e, 0xb8, 0xb6, 0x40, 0x75, 0x3e, 0xa3, 0x87, 0x7b, 0x2c, 0xee, - 0xe1, 0x7c, 0xcd, 0xa1, 0xad, 0x0a, 0xdf, 0xd2, 0x56, 0xd1, 0xf0, 0x50, 0x3c, 0x5f, 0x78, 0xd8, - 0x26, 0xd0, 0x3f, 0x9a, 0xae, 0xcd, 0x3d, 0x38, 0xd7, 0xa1, 0xee, 0x60, 0x8f, 0xc0, 0xb5, 0x58, - 0x71, 0x65, 0x89, 0x11, 0x79, 0xc9, 0x66, 0x1f, 0x1e, 0x9b, 0x9b, 0xb6, 0xa1, 0xff, 0x07, 0x31, - 0xcc, 0xf8, 0x84, 0x94, 0x3a, 0x45, 0x80, 0xbd, 0x43, 0x5e, 0xf9, 0xb7, 0x42, 0xa8, 0x32, 0x8e, - 0xe6, 0xbb, 0x50, 0x76, 0xb0, 0x3b, 0x1d, 0x33, 0x7c, 0xdd, 0xd8, 0x78, 0x31, 0x5b, 0xc2, 0x47, - 0xa8, 0xd3, 0xb1, 0xa7, 0x70, 0x61, 0xf9, 0x01, 0x94, 0x19, 0x05, 0xd5, 0xa0, 0x72, 0x6f, 0xf7, - 0xee, 0xee, 0xde, 0xbb, 0xbb, 0xad, 0x1c, 0x02, 0x28, 0x6f, 0x76, 0x3a, 0xdd, 0xfd, 0x7e, 0x4b, - 0x40, 0x22, 0x94, 0x36, 0xb7, 0xf6, 0x94, 0x7e, 0x2b, 0x4f, 0xc8, 0x4a, 0xf7, 0xed, 0x6e, 0xa7, - 0xdf, 0x2a, 0xa0, 0x65, 0xa8, 0xb3, 0xb6, 0x7a, 0x67, 0x4f, 0x79, 0x67, 0xb3, 0xdf, 0x2a, 0x46, - 0x48, 0x07, 0xdd, 0xdd, 0xdb, 0x5d, 0xa5, 0x55, 0x92, 0x5f, 0x22, 0x00, 0x3e, 0x25, 0x45, 0x0c, - 0xa1, 0xba, 0x10, 0x81, 0xea, 0xf2, 0xa7, 0x79, 0x90, 0xd2, 0xf3, 0x3e, 0xf4, 0x76, 0x62, 0xe3, - 0x1b, 0xe7, 0x48, 0x1a, 0x13, 0xbb, 0x47, 0x4f, 0x41, 0xc3, 0xc1, 0x47, 0xd8, 0x1b, 0x8c, 0x58, - 0x1e, 0xca, 0x82, 0x6d, 0x5d, 0xa9, 0x73, 0x2a, 0x15, 0x72, 0x19, 0xdb, 0x07, 0x78, 0xe0, 0xa9, - 0xcc, 0x8b, 0xb1, 0xf3, 0x2a, 0x12, 0x36, 0x42, 0x3d, 0x60, 0x44, 0xf9, 0xfd, 0x73, 0xd9, 0x52, - 0x84, 0x92, 0xd2, 0xed, 0x2b, 0x3f, 0x6c, 0x15, 0x10, 0x82, 0x06, 0x6d, 0xaa, 0x07, 0xbb, 0x9b, - 0xfb, 0x07, 0xbd, 0x3d, 0x62, 0xcb, 0x0b, 0xd0, 0xf4, 0x6d, 0xe9, 0x13, 0x4b, 0xf2, 0x3e, 0x5c, - 0x4e, 0x49, 0x5a, 0xbf, 0x61, 0xb5, 0x42, 0xfe, 0xb5, 0x10, 0x55, 0x19, 0xaf, 0x0c, 0xbc, 0x95, - 0xb0, 0xf4, 0x7a, 0xd6, 0x54, 0x37, 0x69, 0x66, 0x09, 0xaa, 0x98, 0x17, 0xe1, 0xa8, 0x81, 0x97, - 0x94, 0xa0, 0x2f, 0xbf, 0xb8, 0xd8, 0x68, 0xe1, 0xa9, 0xcb, 0xcb, 0xff, 0x16, 0xa0, 0x99, 0xf0, - 0x2e, 0x68, 0x03, 0x4a, 0x0c, 0xcd, 0xa5, 0xfd, 0xbb, 0xa4, 0xce, 0x91, 0xbb, 0x22, 0xc6, 0x8a, - 0x5e, 0x8f, 0x2d, 0x69, 0xc6, 0x8b, 0x31, 0x63, 0xf9, 0x95, 0x43, 0x2e, 0x1a, 0x48, 0xa0, 0x37, - 0x40, 0x0c, 0xdc, 0x24, 0x2f, 0x21, 0x3c, 0x39, 0x2b, 0x1e, 0x38, 0x58, 0x2e, 0x1f, 0xca, 0xa0, - 0x5b, 0x61, 0x92, 0x5d, 0x9c, 0xc5, 0x90, 0x5c, 0x9c, 0x31, 0x70, 0x61, 0x9f, 0x5f, 0xee, 0x40, - 0x2d, 0xb2, 0x1f, 0xf4, 0x38, 0x88, 0x13, 0xed, 0x84, 0xd7, 0x9b, 0x59, 0xc5, 0xb0, 0x3a, 0xd1, - 0x4e, 0x58, 0xa9, 0xf9, 0x32, 0x54, 0xc8, 0xe0, 0x50, 0x73, 0x79, 0x0d, 0xaa, 0x3c, 0xd1, 0x4e, - 0xde, 0xd2, 0x5c, 0xf9, 0x3d, 0x68, 0xc4, 0x6b, 0xad, 0xe4, 0x2e, 0x3a, 0xd6, 0xd4, 0xd4, 0xa9, - 0x8e, 0x92, 0xc2, 0x3a, 0xe8, 0x26, 0x94, 0x8e, 0x2d, 0xe6, 0xe9, 0xe7, 0x3b, 0xad, 0xfb, 0x96, - 0x87, 0x23, 0xb5, 0x5a, 0xc6, 0x2d, 0x3f, 0x82, 0x12, 0xf5, 0xdc, 0xc4, 0x95, 0xd2, 0xaa, 0x29, - 0x07, 0x18, 0xa4, 0x8d, 0xde, 0x03, 0xd0, 0x3c, 0xcf, 0x31, 0x0e, 0xa7, 0xa1, 0xe2, 0xd5, 0xf9, - 0x9e, 0x7f, 0xd3, 0xe7, 0xdb, 0xba, 0xca, 0x43, 0xc0, 0xc5, 0x50, 0x34, 0x12, 0x06, 0x22, 0x0a, - 0xe5, 0x5d, 0x68, 0xc4, 0x65, 0xa3, 0xff, 0x2f, 0x96, 0xe6, 0xfc, 0xbf, 0x08, 0x32, 0xd1, 0x20, - 0x8f, 0x2d, 0xb0, 0x0a, 0x39, 0xed, 0xc8, 0x1f, 0x0b, 0x50, 0xed, 0x9f, 0xf0, 0x33, 0x9a, 0x52, - 0x9c, 0x0d, 0x45, 0xf3, 0xd1, 0x52, 0x24, 0xab, 0xf6, 0x16, 0x82, 0x1a, 0xf2, 0x9b, 0xc1, 0x85, - 0x2a, 0x66, 0xad, 0x5d, 0xf8, 0x45, 0x37, 0xee, 0xae, 0x5f, 0x03, 0x31, 0x38, 0x55, 0x04, 0xa9, - 0x69, 0xba, 0xee, 0x60, 0xd7, 0xe5, 0x7b, 0xf3, 0xbb, 0xb4, 0xd6, 0x6f, 0x7d, 0xc4, 0x8b, 0x9d, - 0x05, 0x85, 0x75, 0x64, 0x1d, 0x9a, 0x89, 0x98, 0x8f, 0x5e, 0x83, 0x8a, 0x3d, 0x3d, 0x54, 0x7d, - 0xf3, 0x24, 0x2e, 0x8f, 0x9f, 0x7a, 0x4f, 0x0f, 0xc7, 0xc6, 0xe0, 0x2e, 0x3e, 0xf5, 0x17, 0x63, - 0x4f, 0x0f, 0xef, 0x32, 0x2b, 0xb2, 0x59, 0xf2, 0xd1, 0x59, 0x8e, 0xa1, 0xea, 0x1f, 0x0a, 0xf4, - 0xbd, 0xe8, 0x3d, 0xf1, 0xff, 0x00, 0xa5, 0xe6, 0x21, 0x5c, 0x7d, 0xe4, 0x9a, 0xdc, 0x80, 0x65, - 0xd7, 0x18, 0x9a, 0x58, 0x57, 0x43, 0xac, 0x48, 0x67, 0xab, 0x2a, 0x4d, 0x36, 0xb0, 0xe3, 0x03, - 0x45, 0xf9, 0x5f, 0x02, 0x54, 0xfd, 0x0b, 0x8b, 0x5e, 0x8a, 0x9c, 0xbb, 0xc6, 0x9c, 0x5c, 0xc0, - 0x67, 0x0c, 0xcb, 0xf5, 0xf1, 0xb5, 0xe6, 0xcf, 0xbf, 0xd6, 0xb4, 0xff, 0x2e, 0x7e, 0xd1, 0xb6, - 0x78, 0xee, 0x1f, 0x60, 0x2f, 0x00, 0xf2, 0x2c, 0x4f, 0x1b, 0xab, 0xc7, 0x96, 0x67, 0x98, 0x43, - 0x95, 0x19, 0x9b, 0xa5, 0xa3, 0x2d, 0x3a, 0x72, 0x9f, 0x0e, 0xec, 0x53, 0xbb, 0xff, 0x54, 0x80, - 0x6a, 0x90, 0x1d, 0x9c, 0xb7, 0xfa, 0x7e, 0x09, 0xca, 0x3c, 0x00, 0xb2, 0xf2, 0x3b, 0xef, 0x05, - 0x3f, 0x82, 0x8a, 0x91, 0x1f, 0x41, 0x12, 0x54, 0x27, 0xd8, 0xd3, 0x68, 0x9c, 0x61, 0x70, 0x3d, - 0xe8, 0xdf, 0xb8, 0x05, 0xb5, 0xc8, 0x8f, 0x10, 0x72, 0xf3, 0x76, 0xbb, 0xef, 0xb6, 0x72, 0x52, - 0xe5, 0xe3, 0xcf, 0xae, 0x15, 0x76, 0xf1, 0x47, 0xe4, 0xcc, 0x2a, 0xdd, 0x4e, 0xaf, 0xdb, 0xb9, - 0xdb, 0x12, 0xa4, 0xda, 0xc7, 0x9f, 0x5d, 0xab, 0x28, 0x98, 0x96, 0xf7, 0x6e, 0xf4, 0x60, 0x29, - 0xfa, 0x55, 0xe2, 0xe1, 0x00, 0x41, 0xe3, 0xf6, 0xbd, 0xfd, 0x9d, 0xed, 0xce, 0x66, 0xbf, 0xab, - 0xde, 0xdf, 0xeb, 0x77, 0x5b, 0x02, 0xba, 0x0c, 0x17, 0x76, 0xb6, 0xdf, 0xea, 0xf5, 0xd5, 0xce, - 0xce, 0x76, 0x77, 0xb7, 0xaf, 0x6e, 0xf6, 0xfb, 0x9b, 0x9d, 0xbb, 0xad, 0xfc, 0xc6, 0x1f, 0x6b, - 0xd0, 0xdc, 0xdc, 0xea, 0x6c, 0x93, 0xf8, 0x6f, 0x0c, 0x34, 0x5e, 0x3e, 0x2d, 0xd2, 0x6a, 0xc9, - 0x99, 0x0f, 0x5b, 0xa4, 0xb3, 0xab, 0xc7, 0xe8, 0x0e, 0x94, 0x68, 0x21, 0x05, 0x9d, 0xfd, 0xd2, - 0x45, 0x5a, 0x50, 0x4e, 0x26, 0x8b, 0xa1, 0xd7, 0xe3, 0xcc, 0xa7, 0x2f, 0xd2, 0xd9, 0xd5, 0x65, - 0xa4, 0x80, 0x18, 0x96, 0x33, 0x16, 0x3f, 0x85, 0x91, 0x32, 0x54, 0x9c, 0x89, 0xce, 0x10, 0x53, - 0x2d, 0x7e, 0x1a, 0x22, 0x65, 0x70, 0x60, 0x68, 0x07, 0x2a, 0x3e, 0x0c, 0x5e, 0xf4, 0x58, 0x45, - 0x5a, 0x58, 0x0d, 0x26, 0x9f, 0x80, 0x95, 0x2b, 0xce, 0x7e, 0x79, 0x23, 0x2d, 0x28, 0x6d, 0xa3, - 0x6d, 0x28, 0xf3, 0x6c, 0x7f, 0xc1, 0x03, 0x14, 0x69, 0x51, 0x75, 0x97, 0x18, 0x2d, 0xac, 0x03, - 0x2d, 0x7e, 0x4f, 0x24, 0x65, 0xa8, 0xda, 0xa3, 0x7b, 0x00, 0x91, 0xe2, 0x44, 0x86, 0x87, 0x42, - 0x52, 0x96, 0x6a, 0x3c, 0xda, 0x83, 0x6a, 0x80, 0x15, 0x17, 0x3e, 0xdb, 0x91, 0x16, 0x97, 0xc5, - 0xd1, 0x03, 0xa8, 0xc7, 0x91, 0x4e, 0xb6, 0xc7, 0x38, 0x52, 0xc6, 0x7a, 0x37, 0xd1, 0x1f, 0x87, - 0x3d, 0xd9, 0x1e, 0xe7, 0x48, 0x19, 0xcb, 0xdf, 0xe8, 0x03, 0x58, 0x9e, 0x85, 0x25, 0xd9, 0xdf, - 0xea, 0x48, 0xe7, 0x28, 0x88, 0xa3, 0x09, 0xa0, 0x39, 0x70, 0xe6, 0x1c, 0x4f, 0x77, 0xa4, 0xf3, - 0xd4, 0xc7, 0x91, 0x0e, 0xcd, 0x24, 0x46, 0xc8, 0xfa, 0x94, 0x47, 0xca, 0x5c, 0x2b, 0x67, 0xb3, - 0xc4, 0x61, 0x43, 0xd6, 0xa7, 0x3d, 0x52, 0xe6, 0xd2, 0xf9, 0x56, 0xf7, 0xf3, 0xaf, 0x56, 0x84, - 0x2f, 0xbe, 0x5a, 0x11, 0xfe, 0xfa, 0xd5, 0x8a, 0xf0, 0xc9, 0xd7, 0x2b, 0xb9, 0x2f, 0xbe, 0x5e, - 0xc9, 0xfd, 0xe9, 0xeb, 0x95, 0xdc, 0x8f, 0x9e, 0x1f, 0x1a, 0xde, 0x68, 0x7a, 0xb8, 0x36, 0xb0, - 0x26, 0xeb, 0xd1, 0x37, 0x94, 0xf3, 0xde, 0x75, 0x1e, 0x96, 0x69, 0xd0, 0x7d, 0xf9, 0x3f, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x20, 0xc5, 0x6d, 0xed, 0xf7, 0x29, 0x00, 0x00, + 0x63, 0x2a, 0xa9, 0x54, 0xf9, 0xe4, 0xaa, 0x5c, 0x7c, 0xf1, 0x3d, 0x97, 0xfc, 0x09, 0xc9, 0x31, + 0xe5, 0xaa, 0x1c, 0xe2, 0x63, 0x0e, 0x29, 0x27, 0x65, 0xe7, 0x94, 0x6b, 0x0e, 0x39, 0xe5, 0x51, + 0xf3, 0xc0, 0x73, 0x17, 0x5c, 0xd0, 0xce, 0x2d, 0xb7, 0x99, 0x46, 0x77, 0x63, 0xba, 0x31, 0xd3, + 0xdd, 0xbf, 0xc6, 0xc0, 0xe3, 0x1e, 0x36, 0x75, 0xec, 0x4c, 0x0c, 0xd3, 0x5b, 0xd7, 0x0e, 0x07, + 0xc6, 0xba, 0x77, 0x6a, 0x63, 0x77, 0xcd, 0x76, 0x2c, 0xcf, 0x42, 0xcd, 0xf0, 0xe1, 0x1a, 0x79, + 0x28, 0x3d, 0x11, 0xe1, 0x1e, 0x38, 0xa7, 0xb6, 0x67, 0xad, 0xdb, 0x8e, 0x65, 0x1d, 0x31, 0x7e, + 0xe9, 0x6a, 0xe4, 0x31, 0xd5, 0x13, 0xd5, 0x16, 0x7b, 0xca, 0x85, 0x1f, 0xe2, 0x53, 0xff, 0xe9, + 0x13, 0x33, 0xb2, 0xb6, 0xe6, 0x68, 0x13, 0xff, 0xf1, 0xea, 0xd0, 0xb2, 0x86, 0x63, 0xbc, 0x4e, + 0x67, 0x87, 0xd3, 0xa3, 0x75, 0xcf, 0x98, 0x60, 0xd7, 0xd3, 0x26, 0x36, 0x67, 0xb8, 0x38, 0xb4, + 0x86, 0x16, 0x1d, 0xae, 0x93, 0x11, 0xa7, 0xae, 0x24, 0xc5, 0xf4, 0xa9, 0xa3, 0x79, 0x86, 0x65, + 0xb2, 0xe7, 0xf2, 0x6f, 0x44, 0xa8, 0x28, 0xf8, 0xc3, 0x29, 0x76, 0x3d, 0xb4, 0x01, 0x45, 0x3c, + 0x18, 0x59, 0x6d, 0xe1, 0x9a, 0xf0, 0x6c, 0x6d, 0xe3, 0xea, 0x5a, 0xc2, 0xf8, 0x35, 0xce, 0xd7, + 0x1d, 0x8c, 0xac, 0x5e, 0x4e, 0xa1, 0xbc, 0xe8, 0x26, 0x94, 0x8e, 0xc6, 0x53, 0x77, 0xd4, 0xce, + 0x53, 0xa1, 0x27, 0xd2, 0x84, 0xee, 0x10, 0xa6, 0x5e, 0x4e, 0x61, 0xdc, 0xe4, 0x55, 0x86, 0x79, + 0x64, 0xb5, 0x0b, 0x67, 0xbf, 0x6a, 0xdb, 0x3c, 0xa2, 0xaf, 0x22, 0xbc, 0x68, 0x0b, 0xc0, 0xc5, + 0x9e, 0x6a, 0xd9, 0x64, 0xf9, 0xed, 0x22, 0x95, 0x7c, 0x32, 0x4d, 0xf2, 0x00, 0x7b, 0x7b, 0x94, + 0xb1, 0x97, 0x53, 0x44, 0xd7, 0x9f, 0x10, 0x1d, 0x86, 0x69, 0x78, 0xea, 0x60, 0xa4, 0x19, 0x66, + 0xbb, 0x74, 0xb6, 0x8e, 0x6d, 0xd3, 0xf0, 0x3a, 0x84, 0x91, 0xe8, 0x30, 0xfc, 0x09, 0x31, 0xf9, + 0xc3, 0x29, 0x76, 0x4e, 0xdb, 0xe5, 0xb3, 0x4d, 0xfe, 0x3e, 0x61, 0x22, 0x26, 0x53, 0x6e, 0xd4, + 0x85, 0xda, 0x21, 0x1e, 0x1a, 0xa6, 0x7a, 0x38, 0xb6, 0x06, 0x0f, 0xdb, 0x15, 0x2a, 0x2c, 0xa7, + 0x09, 0x6f, 0x11, 0xd6, 0x2d, 0xc2, 0xd9, 0xcb, 0x29, 0x70, 0x18, 0xcc, 0xd0, 0xeb, 0x50, 0x1d, + 0x8c, 0xf0, 0xe0, 0xa1, 0xea, 0x9d, 0xb4, 0xab, 0x54, 0xc7, 0x6a, 0x9a, 0x8e, 0x0e, 0xe1, 0xeb, + 0x9f, 0xf4, 0x72, 0x4a, 0x65, 0xc0, 0x86, 0xc4, 0x7e, 0x1d, 0x8f, 0x8d, 0x63, 0xec, 0x10, 0x79, + 0xf1, 0x6c, 0xfb, 0x6f, 0x33, 0x4e, 0xaa, 0x41, 0xd4, 0xfd, 0x09, 0x7a, 0x03, 0x44, 0x6c, 0xea, + 0xdc, 0x0c, 0xa0, 0x2a, 0xae, 0xa5, 0xee, 0x15, 0x53, 0xf7, 0x8d, 0xa8, 0x62, 0x3e, 0x46, 0xaf, + 0x42, 0x79, 0x60, 0x4d, 0x26, 0x86, 0xd7, 0xae, 0x51, 0xe9, 0x95, 0x54, 0x03, 0x28, 0x57, 0x2f, + 0xa7, 0x70, 0x7e, 0xb4, 0x0b, 0x8d, 0xb1, 0xe1, 0x7a, 0xaa, 0x6b, 0x6a, 0xb6, 0x3b, 0xb2, 0x3c, + 0xb7, 0xbd, 0x44, 0x35, 0x3c, 0x95, 0xa6, 0x61, 0xc7, 0x70, 0xbd, 0x03, 0x9f, 0xb9, 0x97, 0x53, + 0xea, 0xe3, 0x28, 0x81, 0xe8, 0xb3, 0x8e, 0x8e, 0xb0, 0x13, 0x28, 0x6c, 0xd7, 0xcf, 0xd6, 0xb7, + 0x47, 0xb8, 0x7d, 0x79, 0xa2, 0xcf, 0x8a, 0x12, 0xd0, 0x8f, 0xe1, 0xc2, 0xd8, 0xd2, 0xf4, 0x40, + 0x9d, 0x3a, 0x18, 0x4d, 0xcd, 0x87, 0xed, 0x06, 0x55, 0xfa, 0x5c, 0xea, 0x22, 0x2d, 0x4d, 0xf7, + 0x55, 0x74, 0x88, 0x40, 0x2f, 0xa7, 0x2c, 0x8f, 0x93, 0x44, 0xf4, 0x00, 0x2e, 0x6a, 0xb6, 0x3d, + 0x3e, 0x4d, 0x6a, 0x6f, 0x52, 0xed, 0x37, 0xd2, 0xb4, 0x6f, 0x12, 0x99, 0xa4, 0x7a, 0xa4, 0xcd, + 0x50, 0x51, 0x1f, 0x5a, 0xb6, 0x83, 0x6d, 0xcd, 0xc1, 0xaa, 0xed, 0x58, 0xb6, 0xe5, 0x6a, 0xe3, + 0x76, 0x8b, 0xea, 0x7e, 0x26, 0x4d, 0xf7, 0x3e, 0xe3, 0xdf, 0xe7, 0xec, 0xbd, 0x9c, 0xd2, 0xb4, + 0xe3, 0x24, 0xa6, 0xd5, 0x1a, 0x60, 0xd7, 0x0d, 0xb5, 0x2e, 0x2f, 0xd2, 0x4a, 0xf9, 0xe3, 0x5a, + 0x63, 0xa4, 0xad, 0x0a, 0x94, 0x8e, 0xb5, 0xf1, 0x14, 0xcb, 0xcf, 0x40, 0x2d, 0x12, 0x96, 0x50, + 0x1b, 0x2a, 0x13, 0xec, 0xba, 0xda, 0x10, 0xd3, 0x28, 0x26, 0x2a, 0xfe, 0x54, 0x6e, 0xc0, 0x52, + 0x34, 0x14, 0xc9, 0xbf, 0x12, 0x60, 0xa9, 0x6f, 0x4c, 0xb0, 0x35, 0xf5, 0x5c, 0x12, 0x66, 0xd0, + 0x0e, 0x34, 0x3d, 0x36, 0xe7, 0x0b, 0xc5, 0x3c, 0x10, 0x5e, 0x59, 0x63, 0x31, 0x74, 0xcd, 0x8f, + 0xa1, 0x6b, 0xb7, 0x79, 0x0c, 0xdd, 0xaa, 0x7e, 0xfe, 0xe5, 0x6a, 0xee, 0xd3, 0x3f, 0xaf, 0x0a, + 0x4a, 0x83, 0xcb, 0xb2, 0x15, 0x62, 0xf4, 0x36, 0xf8, 0x14, 0x95, 0xef, 0xf5, 0x7c, 0x76, 0x65, + 0x75, 0x2e, 0xca, 0xf6, 0xbf, 0x3c, 0x09, 0x6c, 0xa4, 0x0b, 0x6d, 0x43, 0xe5, 0x18, 0x3b, 0x2e, + 0x09, 0x82, 0xdc, 0x46, 0x3e, 0x45, 0xd7, 0xa1, 0x4e, 0x4f, 0xa5, 0xea, 0x3f, 0x27, 0xef, 0x2c, + 0x2a, 0x4b, 0x94, 0x78, 0x9f, 0x33, 0xad, 0x42, 0xcd, 0xde, 0xb0, 0x03, 0x96, 0x02, 0x65, 0x01, + 0x7b, 0xc3, 0xe6, 0x0c, 0xf2, 0x77, 0xa0, 0x95, 0x0c, 0xa2, 0xa8, 0x05, 0x85, 0x87, 0xf8, 0x94, + 0xbf, 0x8f, 0x0c, 0xd1, 0x45, 0xfe, 0x05, 0xe8, 0x3b, 0x44, 0x85, 0x7f, 0x8e, 0xdf, 0xe7, 0x03, + 0xe1, 0x20, 0x7a, 0xa2, 0x57, 0xa1, 0x48, 0x0c, 0xe2, 0xee, 0x94, 0x66, 0x3c, 0xd0, 0xf7, 0x33, + 0x19, 0x73, 0xc1, 0x27, 0xc4, 0x05, 0x54, 0x02, 0x5d, 0x21, 0xc1, 0x4e, 0x33, 0x4c, 0xd5, 0xd0, + 0xf9, 0x7b, 0x2a, 0x74, 0xbe, 0xad, 0xa3, 0xbb, 0xd0, 0x1a, 0x58, 0xa6, 0x8b, 0x4d, 0x77, 0xea, + 0xaa, 0x2c, 0x53, 0xf2, 0x6c, 0x32, 0x1b, 0x8c, 0x3a, 0x3e, 0xe3, 0x3e, 0xe5, 0x53, 0x9a, 0x83, + 0x38, 0x01, 0xdd, 0x01, 0x38, 0xd6, 0xc6, 0x86, 0xae, 0x79, 0x96, 0xe3, 0xb6, 0x8b, 0xd7, 0x0a, + 0x73, 0xd5, 0xdc, 0xf7, 0x59, 0xee, 0xd9, 0xba, 0xe6, 0xe1, 0xad, 0x22, 0x59, 0xad, 0x12, 0x91, + 0x44, 0x4f, 0x43, 0x53, 0xb3, 0x6d, 0xd5, 0xf5, 0x34, 0x0f, 0xab, 0x87, 0xa7, 0x1e, 0x76, 0x69, + 0x8e, 0x59, 0x52, 0xea, 0x9a, 0x6d, 0x1f, 0x10, 0xea, 0x16, 0x21, 0xa2, 0xa7, 0xa0, 0x41, 0xf2, + 0x89, 0xa1, 0x8d, 0xd5, 0x11, 0x36, 0x86, 0x23, 0x8f, 0xe6, 0x92, 0x82, 0x52, 0xe7, 0xd4, 0x1e, + 0x25, 0xca, 0x7a, 0xb0, 0x67, 0x69, 0x2e, 0x41, 0x08, 0x8a, 0xba, 0xe6, 0x69, 0xd4, 0x91, 0x4b, + 0x0a, 0x1d, 0x13, 0x9a, 0xad, 0x79, 0x23, 0xee, 0x1e, 0x3a, 0x46, 0x97, 0xa0, 0xcc, 0xd5, 0x16, + 0xa8, 0x5a, 0x3e, 0x23, 0xdf, 0xcc, 0x76, 0xac, 0x63, 0x4c, 0x93, 0x67, 0x55, 0x61, 0x13, 0xf9, + 0x67, 0x79, 0x58, 0x9e, 0xc9, 0x3a, 0x44, 0xef, 0x48, 0x73, 0x47, 0xfe, 0xbb, 0xc8, 0x18, 0xbd, + 0x42, 0xf4, 0x6a, 0x3a, 0x76, 0xf8, 0x66, 0x6e, 0x47, 0x5d, 0xc4, 0x2a, 0x9d, 0x1e, 0x7d, 0xce, + 0x5d, 0xc3, 0xb9, 0xd1, 0x1e, 0xb4, 0xc6, 0x9a, 0xeb, 0x9f, 0x04, 0x35, 0x92, 0xf9, 0x67, 0x73, + 0xd7, 0x8e, 0xe6, 0xc7, 0x7d, 0xb2, 0xd9, 0xb9, 0xa2, 0xc6, 0x38, 0x46, 0x45, 0x0a, 0x5c, 0x3c, + 0x3c, 0x7d, 0xa4, 0x99, 0x9e, 0x61, 0x62, 0x75, 0xe6, 0xcb, 0x5d, 0x99, 0x51, 0xda, 0x3d, 0x36, + 0x74, 0x6c, 0x0e, 0xfc, 0x4f, 0x76, 0x21, 0x10, 0x0e, 0x3e, 0xa9, 0x2b, 0x2b, 0xd0, 0x88, 0xe7, + 0x4d, 0xd4, 0x80, 0xbc, 0x77, 0xc2, 0x1d, 0x90, 0xf7, 0x4e, 0xd0, 0xff, 0x41, 0x91, 0x18, 0x49, + 0x8d, 0x6f, 0xcc, 0x29, 0x5a, 0xb8, 0x5c, 0xff, 0xd4, 0xc6, 0x0a, 0xe5, 0x94, 0xe5, 0xe0, 0x34, + 0x04, 0xb9, 0x34, 0xa9, 0x55, 0x7e, 0x0e, 0x9a, 0x89, 0x64, 0x19, 0xf9, 0x7e, 0x42, 0xf4, 0xfb, + 0xc9, 0x4d, 0xa8, 0xc7, 0x32, 0xa3, 0x7c, 0x09, 0x2e, 0xce, 0x4b, 0x74, 0xf2, 0x28, 0xa0, 0xc7, + 0x12, 0x16, 0xba, 0x09, 0xd5, 0x20, 0xd3, 0xf9, 0xc1, 0x2d, 0x69, 0x85, 0xcf, 0xac, 0x04, 0xac, + 0xe4, 0x18, 0x92, 0x6d, 0x4d, 0xf7, 0x43, 0x9e, 0x2e, 0xbc, 0xa2, 0xd9, 0x76, 0x4f, 0x73, 0x47, + 0xf2, 0xfb, 0xd0, 0x4e, 0xcb, 0x62, 0x09, 0x33, 0x8a, 0xc1, 0x36, 0xbc, 0x04, 0xe5, 0x23, 0xcb, + 0x99, 0x68, 0x2c, 0x26, 0xd6, 0x15, 0x3e, 0x23, 0xdb, 0x93, 0x65, 0xb4, 0x02, 0x25, 0xb3, 0x89, + 0xac, 0xc2, 0x95, 0xd4, 0x4c, 0x46, 0x44, 0x0c, 0x53, 0xc7, 0xcc, 0x9f, 0x75, 0x85, 0x4d, 0x42, + 0x45, 0x6c, 0xb1, 0x6c, 0x42, 0x5e, 0xeb, 0x52, 0x5b, 0xa9, 0x7e, 0x51, 0xe1, 0x33, 0xf9, 0xaf, + 0x02, 0x5c, 0x9a, 0x9f, 0xcf, 0xd0, 0x4d, 0x00, 0x16, 0x50, 0x83, 0x63, 0x57, 0xdb, 0xb8, 0x34, + 0xbb, 0xe9, 0x6f, 0x6b, 0x9e, 0xa6, 0x88, 0x94, 0x93, 0x0c, 0x49, 0x18, 0x08, 0xc5, 0x54, 0xd7, + 0x78, 0xc4, 0xf6, 0x4c, 0x41, 0xa9, 0x07, 0x3c, 0x07, 0xc6, 0xa3, 0x78, 0x78, 0x2b, 0xc4, 0xc3, + 0x5b, 0xe8, 0xbb, 0x62, 0xec, 0x08, 0xfb, 0xb1, 0xb4, 0x74, 0xde, 0x58, 0x2a, 0xff, 0x22, 0x6a, + 0x66, 0x2c, 0x9b, 0x46, 0xce, 0xb5, 0x70, 0xae, 0x73, 0x1d, 0x77, 0x4f, 0x3e, 0xa3, 0x7b, 0xe4, + 0x5f, 0x02, 0x54, 0x15, 0xec, 0xda, 0x24, 0x08, 0xa3, 0x2d, 0x10, 0xf1, 0xc9, 0x00, 0xb3, 0xa2, + 0x5e, 0x48, 0x2d, 0x8a, 0x19, 0x77, 0xd7, 0xe7, 0x24, 0x15, 0x69, 0x20, 0x86, 0x5e, 0xe6, 0xc0, + 0x25, 0x1d, 0x83, 0x70, 0xf1, 0x28, 0x72, 0x79, 0xc5, 0x47, 0x2e, 0x85, 0xd4, 0x22, 0x94, 0x49, + 0x25, 0xa0, 0xcb, 0xcb, 0x1c, 0xba, 0x14, 0x17, 0xbc, 0x2c, 0x86, 0x5d, 0x3a, 0x31, 0xec, 0x52, + 0x5a, 0x60, 0x66, 0x0a, 0x78, 0xe9, 0xc4, 0xc0, 0x4b, 0x79, 0x81, 0x92, 0x14, 0xf4, 0xf2, 0x8a, + 0x8f, 0x5e, 0x2a, 0x0b, 0xcc, 0x4e, 0xc0, 0x97, 0x3b, 0x71, 0xf8, 0xc2, 0xa0, 0xc7, 0xf5, 0x54, + 0xe9, 0x54, 0xfc, 0xf2, 0xdd, 0x08, 0x7e, 0x11, 0x53, 0xc1, 0x03, 0x53, 0x32, 0x07, 0xc0, 0x74, + 0x62, 0x00, 0x06, 0x16, 0xf8, 0x20, 0x05, 0xc1, 0xbc, 0x19, 0x45, 0x30, 0xb5, 0x54, 0x10, 0xc4, + 0x37, 0xcd, 0x3c, 0x08, 0x73, 0x2b, 0x80, 0x30, 0x4b, 0xa9, 0x18, 0x8c, 0xdb, 0x90, 0xc4, 0x30, + 0x7b, 0x33, 0x18, 0x86, 0x61, 0x8e, 0xa7, 0x53, 0x55, 0x2c, 0x00, 0x31, 0x7b, 0x33, 0x20, 0xa6, + 0xb1, 0x40, 0xe1, 0x02, 0x14, 0xf3, 0x93, 0xf9, 0x28, 0x26, 0x1d, 0x67, 0xf0, 0x65, 0x66, 0x83, + 0x31, 0x6a, 0x0a, 0x8c, 0x61, 0x50, 0xe3, 0xf9, 0x54, 0xf5, 0x99, 0x71, 0xcc, 0xbd, 0x39, 0x38, + 0x86, 0x21, 0x8e, 0x67, 0x53, 0x95, 0x67, 0x00, 0x32, 0xf7, 0xe6, 0x00, 0x19, 0xb4, 0x50, 0x6d, + 0x76, 0x24, 0xf3, 0x1c, 0xa9, 0xc2, 0x12, 0x61, 0x8e, 0x64, 0x32, 0xec, 0x38, 0x96, 0xc3, 0x2b, + 0x6f, 0x36, 0x91, 0x9f, 0x25, 0x75, 0x61, 0x18, 0xd2, 0xce, 0x40, 0x3d, 0xb4, 0x62, 0x88, 0x84, + 0x31, 0xf9, 0xef, 0x42, 0x28, 0x4b, 0x4b, 0xa9, 0x68, 0x4d, 0x29, 0xf2, 0x9a, 0x32, 0x82, 0x30, + 0xf2, 0x71, 0x84, 0xb1, 0x0a, 0x35, 0x52, 0x09, 0x24, 0xc0, 0x83, 0x66, 0xfb, 0xe0, 0x01, 0xdd, + 0x80, 0x65, 0x5a, 0xea, 0xb1, 0xbc, 0x10, 0x4b, 0x61, 0x4d, 0xf2, 0x80, 0x1d, 0x25, 0x96, 0xcb, + 0x5e, 0x84, 0x0b, 0x11, 0xde, 0xa0, 0xc2, 0x60, 0x15, 0x73, 0x2b, 0xe0, 0xde, 0x64, 0xa5, 0x06, + 0xba, 0x05, 0x55, 0x8e, 0x8b, 0xdc, 0xd4, 0xd6, 0x4b, 0x14, 0xd1, 0x29, 0x01, 0xbb, 0xfc, 0x4e, + 0xe8, 0xdb, 0x10, 0xd3, 0x20, 0x28, 0x0e, 0x2c, 0x1d, 0xf3, 0xd2, 0x81, 0x8e, 0x09, 0xce, 0x19, + 0x5b, 0x43, 0x9e, 0x8c, 0xc9, 0x90, 0x70, 0x05, 0xe1, 0x5e, 0x64, 0xd1, 0x5c, 0xfe, 0x97, 0x10, + 0xea, 0x0b, 0x61, 0xce, 0x3c, 0x44, 0x22, 0xfc, 0x77, 0x10, 0x49, 0xfe, 0x1b, 0x23, 0x92, 0x68, + 0xe9, 0x56, 0x88, 0x95, 0x6e, 0x31, 0x7f, 0x16, 0xcf, 0xe7, 0xcf, 0x7f, 0x08, 0xe1, 0xbe, 0x0a, + 0xa0, 0xc9, 0x37, 0x73, 0x66, 0x58, 0xc2, 0x95, 0xe8, 0x2e, 0xe1, 0x25, 0x1c, 0x07, 0x9c, 0x65, + 0xba, 0xe4, 0x38, 0xe0, 0xac, 0xb0, 0xa2, 0x8e, 0x4e, 0xd0, 0xab, 0x20, 0xd2, 0x06, 0xac, 0x6a, + 0xd9, 0x2e, 0x4f, 0x4a, 0x8f, 0x47, 0xad, 0x60, 0x7d, 0xd6, 0xb5, 0x7d, 0xc2, 0xb3, 0x67, 0xbb, + 0x4a, 0xd5, 0xe6, 0xa3, 0x48, 0x85, 0x25, 0xc6, 0x2a, 0xac, 0xab, 0x20, 0x92, 0xd5, 0xbb, 0xb6, + 0x36, 0xc0, 0x34, 0xc1, 0x88, 0x4a, 0x48, 0x90, 0x1f, 0x00, 0x9a, 0x4d, 0x71, 0xa8, 0x07, 0x65, + 0x7c, 0x8c, 0x4d, 0x8f, 0x7c, 0xf0, 0x42, 0xb2, 0x08, 0xe2, 0x08, 0x04, 0x9b, 0xde, 0x56, 0x9b, + 0x7c, 0x9f, 0xbf, 0x7d, 0xb9, 0xda, 0x62, 0xdc, 0x2f, 0x58, 0x13, 0xc3, 0xc3, 0x13, 0xdb, 0x3b, + 0x55, 0xb8, 0xbc, 0xfc, 0xa7, 0x3c, 0x81, 0x03, 0xb1, 0xf4, 0x37, 0xd7, 0xb7, 0xfe, 0xb1, 0xcd, + 0x47, 0xa0, 0x60, 0x36, 0x7f, 0xaf, 0x00, 0x0c, 0x35, 0x57, 0xfd, 0x48, 0x33, 0x3d, 0xac, 0x73, + 0xa7, 0x47, 0x28, 0x48, 0x82, 0x2a, 0x99, 0x4d, 0x5d, 0xac, 0x73, 0x54, 0x1a, 0xcc, 0x23, 0x76, + 0x56, 0xbe, 0x9d, 0x9d, 0x71, 0x2f, 0x57, 0x13, 0x5e, 0x8e, 0x94, 0xea, 0x62, 0xb4, 0x54, 0x27, + 0x6b, 0xb3, 0x1d, 0xc3, 0x72, 0x0c, 0xef, 0x94, 0x7e, 0x9a, 0x82, 0x12, 0xcc, 0xd1, 0x75, 0xa8, + 0x4f, 0xf0, 0xc4, 0xb6, 0xac, 0xb1, 0xca, 0x42, 0x66, 0x8d, 0x8a, 0x2e, 0x71, 0x62, 0x97, 0x46, + 0xce, 0x9f, 0xe7, 0xc3, 0x93, 0x1b, 0x42, 0xb2, 0xff, 0x39, 0x07, 0xcb, 0xbf, 0xa3, 0x7d, 0x9a, + 0x78, 0x81, 0x83, 0x0e, 0x60, 0x39, 0x88, 0x1c, 0xea, 0x94, 0x46, 0x14, 0x7f, 0x43, 0x67, 0x0d, + 0x3d, 0xad, 0xe3, 0x38, 0xd9, 0x45, 0x3f, 0x80, 0xcb, 0x89, 0xa8, 0x18, 0xa8, 0xce, 0x67, 0x0c, + 0x8e, 0x8f, 0xc5, 0x83, 0xa3, 0xaf, 0x39, 0xf4, 0x55, 0xe1, 0x5b, 0xfa, 0xea, 0x5b, 0x44, 0xc2, + 0x6d, 0x68, 0xc4, 0x2b, 0xbd, 0xb9, 0x1b, 0xe7, 0x3a, 0xd4, 0x1d, 0xec, 0x11, 0xa4, 0x17, 0xeb, + 0xcb, 0x2c, 0x31, 0x22, 0xef, 0xf6, 0xec, 0xc3, 0x63, 0x73, 0x2b, 0x3e, 0xf4, 0xff, 0x20, 0x86, + 0xc5, 0xa2, 0x90, 0xd2, 0xe2, 0x08, 0x60, 0x7b, 0xc8, 0x2b, 0xff, 0x56, 0x08, 0x55, 0xc6, 0x1b, + 0x01, 0x5d, 0x28, 0x3b, 0xd8, 0x9d, 0x8e, 0x19, 0x34, 0x6f, 0x6c, 0xbc, 0x98, 0xad, 0x56, 0x24, + 0xd4, 0xe9, 0xd8, 0x53, 0xb8, 0xb0, 0xfc, 0x00, 0xca, 0x8c, 0x82, 0x6a, 0x50, 0xb9, 0xb7, 0x7b, + 0x77, 0x77, 0xef, 0xdd, 0xdd, 0x56, 0x0e, 0x01, 0x94, 0x37, 0x3b, 0x9d, 0xee, 0x7e, 0xbf, 0x25, + 0x20, 0x11, 0x4a, 0x9b, 0x5b, 0x7b, 0x4a, 0xbf, 0x95, 0x27, 0x64, 0xa5, 0xfb, 0x76, 0xb7, 0xd3, + 0x6f, 0x15, 0xd0, 0x32, 0xd4, 0xd9, 0x58, 0xbd, 0xb3, 0xa7, 0xbc, 0xb3, 0xd9, 0x6f, 0x15, 0x23, + 0xa4, 0x83, 0xee, 0xee, 0xed, 0xae, 0xd2, 0x2a, 0xc9, 0x2f, 0x11, 0xec, 0x9f, 0x52, 0x5d, 0x86, + 0x28, 0x5f, 0x88, 0xa0, 0x7c, 0xf9, 0xd3, 0x3c, 0x48, 0xe9, 0x25, 0x23, 0x7a, 0x3b, 0x61, 0xf8, + 0xc6, 0x39, 0xea, 0xcd, 0x84, 0xf5, 0xe8, 0x29, 0x68, 0x38, 0xf8, 0x08, 0x7b, 0x83, 0x11, 0x2b, + 0x61, 0x59, 0x9e, 0xae, 0x2b, 0x75, 0x4e, 0xa5, 0x42, 0x2e, 0x63, 0xfb, 0x00, 0x0f, 0x3c, 0x95, + 0x45, 0x31, 0xb6, 0x5f, 0x45, 0xc2, 0x46, 0xa8, 0x07, 0x8c, 0x28, 0xbf, 0x7f, 0x2e, 0x5f, 0x8a, + 0x50, 0x52, 0xba, 0x7d, 0xe5, 0x87, 0xad, 0x02, 0x42, 0xd0, 0xa0, 0x43, 0xf5, 0x60, 0x77, 0x73, + 0xff, 0xa0, 0xb7, 0x47, 0x7c, 0x79, 0x01, 0x9a, 0xbe, 0x2f, 0x7d, 0x62, 0x49, 0xde, 0x87, 0xcb, + 0x29, 0xf5, 0xee, 0x37, 0x6c, 0x74, 0xc8, 0xbf, 0x16, 0xa2, 0x2a, 0xe3, 0x4d, 0x85, 0xb7, 0x12, + 0x9e, 0x5e, 0xcf, 0x5a, 0x25, 0x27, 0xdd, 0x2c, 0x41, 0x15, 0xf3, 0xfe, 0x1d, 0x75, 0xf0, 0x92, + 0x12, 0xcc, 0xe5, 0x17, 0x17, 0x3b, 0x2d, 0xdc, 0x75, 0x79, 0xf9, 0xdf, 0x02, 0x34, 0x13, 0xd1, + 0x05, 0x6d, 0x40, 0x89, 0x01, 0xc1, 0xb4, 0xdf, 0x9e, 0x34, 0x38, 0xf2, 0x50, 0xc4, 0x58, 0xd1, + 0xeb, 0xb1, 0x25, 0xcd, 0x44, 0x31, 0xe6, 0x2c, 0xbf, 0xe9, 0xc8, 0x45, 0x03, 0x09, 0xf4, 0x06, + 0x88, 0x41, 0x98, 0xe4, 0xdd, 0x87, 0x27, 0x67, 0xc5, 0x83, 0x00, 0xcb, 0xe5, 0x43, 0x19, 0x74, + 0x2b, 0xac, 0xcf, 0x8b, 0xb3, 0xf0, 0x93, 0x8b, 0x33, 0x06, 0x2e, 0xec, 0xf3, 0xcb, 0x1d, 0xa8, + 0x45, 0xec, 0x41, 0x8f, 0x83, 0x38, 0xd1, 0x4e, 0x78, 0xab, 0x9a, 0x35, 0x1b, 0xab, 0x13, 0xed, + 0x84, 0x75, 0xa9, 0x2f, 0x43, 0x85, 0x3c, 0x1c, 0x6a, 0x2e, 0x6f, 0x5f, 0x95, 0x27, 0xda, 0xc9, + 0x5b, 0x9a, 0x2b, 0xbf, 0x07, 0x8d, 0x78, 0x9b, 0x96, 0x9c, 0x45, 0xc7, 0x9a, 0x9a, 0x3a, 0xd5, + 0x51, 0x52, 0xd8, 0x04, 0xdd, 0x84, 0xd2, 0xb1, 0xc5, 0x22, 0xfd, 0xfc, 0xa0, 0x75, 0xdf, 0xf2, + 0x70, 0xa4, 0xcd, 0xcb, 0xb8, 0xe5, 0x47, 0x50, 0xa2, 0x91, 0x9b, 0x84, 0x52, 0xda, 0x70, 0xe5, + 0xd8, 0x84, 0x8c, 0xd1, 0x7b, 0x00, 0x9a, 0xe7, 0x39, 0xc6, 0xe1, 0x34, 0x54, 0xbc, 0x3a, 0x3f, + 0xf2, 0x6f, 0xfa, 0x7c, 0x5b, 0x57, 0x79, 0x0a, 0xb8, 0x18, 0x8a, 0x46, 0xd2, 0x40, 0x44, 0xa1, + 0xbc, 0x0b, 0x8d, 0xb8, 0x6c, 0xf4, 0xd7, 0xc7, 0xd2, 0x9c, 0x5f, 0x1f, 0x41, 0x25, 0x1a, 0xd4, + 0xb1, 0x05, 0xd6, 0x5c, 0xa7, 0x13, 0xf9, 0x63, 0x01, 0xaa, 0xfd, 0x13, 0xbe, 0x47, 0x53, 0xfa, + 0xba, 0xa1, 0x68, 0x3e, 0xda, 0xc5, 0x64, 0x8d, 0xe2, 0x42, 0xd0, 0x7e, 0x7e, 0x33, 0x38, 0x50, + 0xc5, 0xac, 0x6d, 0x0f, 0xbf, 0x5f, 0xc7, 0xc3, 0xf5, 0x6b, 0x20, 0x06, 0xbb, 0x8a, 0x80, 0x3c, + 0x4d, 0xd7, 0x1d, 0xec, 0xba, 0xdc, 0x36, 0x7f, 0x4a, 0x7f, 0x13, 0x58, 0x1f, 0xf1, 0x3e, 0x69, + 0x41, 0x61, 0x13, 0x59, 0x87, 0x66, 0x22, 0xe7, 0xa3, 0xd7, 0xa0, 0x62, 0x4f, 0x0f, 0x55, 0xdf, + 0x3d, 0x89, 0xc3, 0xe3, 0x97, 0xde, 0xd3, 0xc3, 0xb1, 0x31, 0xb8, 0x8b, 0x4f, 0xfd, 0xc5, 0xd8, + 0xd3, 0xc3, 0xbb, 0xcc, 0x8b, 0xec, 0x2d, 0xf9, 0xe8, 0x5b, 0x8e, 0xa1, 0xea, 0x6f, 0x0a, 0xf4, + 0xbd, 0xe8, 0x39, 0xf1, 0x7f, 0x1e, 0xa5, 0xd6, 0x21, 0x5c, 0x7d, 0xe4, 0x98, 0xdc, 0x80, 0x65, + 0xd7, 0x18, 0x9a, 0x58, 0x57, 0x43, 0x98, 0x49, 0xdf, 0x56, 0x55, 0x9a, 0xec, 0xc1, 0x8e, 0x8f, + 0x31, 0xe5, 0x7f, 0x0a, 0x50, 0xf5, 0x0f, 0x2c, 0x7a, 0x29, 0xb2, 0xef, 0x1a, 0x73, 0x6a, 0x01, + 0x9f, 0x31, 0xec, 0xf4, 0xc7, 0xd7, 0x9a, 0x3f, 0xff, 0x5a, 0xd3, 0x7e, 0xd9, 0xf8, 0xfd, 0xde, + 0xe2, 0xb9, 0xff, 0x9d, 0xbd, 0x00, 0xc8, 0xb3, 0x3c, 0x6d, 0xac, 0x1e, 0x5b, 0x9e, 0x61, 0x0e, + 0x55, 0xe6, 0x6c, 0x56, 0x8e, 0xb6, 0xe8, 0x93, 0xfb, 0xf4, 0xc1, 0x3e, 0xf5, 0xfb, 0x4f, 0x05, + 0xa8, 0x06, 0xd5, 0xc1, 0x79, 0x1b, 0xf7, 0x97, 0xa0, 0xcc, 0x13, 0x20, 0xeb, 0xdc, 0xf3, 0x59, + 0xf0, 0x0f, 0xa9, 0x18, 0xf9, 0x87, 0x24, 0x41, 0x75, 0x82, 0x3d, 0x8d, 0xe6, 0x19, 0x86, 0xf4, + 0x83, 0xf9, 0x8d, 0x5b, 0x50, 0x8b, 0xfc, 0x43, 0x21, 0x27, 0x6f, 0xb7, 0xfb, 0x6e, 0x2b, 0x27, + 0x55, 0x3e, 0xfe, 0xec, 0x5a, 0x61, 0x17, 0x7f, 0x44, 0xf6, 0xac, 0xd2, 0xed, 0xf4, 0xba, 0x9d, + 0xbb, 0x2d, 0x41, 0xaa, 0x7d, 0xfc, 0xd9, 0xb5, 0x8a, 0x82, 0x69, 0x67, 0xf0, 0x46, 0x0f, 0x96, + 0xa2, 0x5f, 0x25, 0x9e, 0x0e, 0x10, 0x34, 0x6e, 0xdf, 0xdb, 0xdf, 0xd9, 0xee, 0x6c, 0xf6, 0xbb, + 0xea, 0xfd, 0xbd, 0x7e, 0xb7, 0x25, 0xa0, 0xcb, 0x70, 0x61, 0x67, 0xfb, 0xad, 0x5e, 0x5f, 0xed, + 0xec, 0x6c, 0x77, 0x77, 0xfb, 0xea, 0x66, 0xbf, 0xbf, 0xd9, 0xb9, 0xdb, 0xca, 0x6f, 0xfc, 0xa1, + 0x06, 0xcd, 0xcd, 0xad, 0xce, 0x36, 0xc9, 0xff, 0xc6, 0x40, 0xe3, 0x9d, 0xd7, 0x22, 0x6d, 0xb4, + 0x9c, 0x79, 0x27, 0x46, 0x3a, 0xbb, 0xf1, 0x8c, 0xee, 0x40, 0x89, 0xf6, 0x60, 0xd0, 0xd9, 0x97, + 0x64, 0xa4, 0x05, 0x9d, 0x68, 0xb2, 0x18, 0x7a, 0x3c, 0xce, 0xbc, 0x35, 0x23, 0x9d, 0xdd, 0x98, + 0x46, 0x0a, 0x88, 0x61, 0x27, 0x64, 0xf1, 0x2d, 0x1a, 0x29, 0x43, 0xb3, 0x9a, 0xe8, 0x0c, 0x31, + 0xd5, 0xe2, 0x5b, 0x25, 0x52, 0x86, 0x00, 0x86, 0x76, 0xa0, 0xe2, 0xc3, 0xe0, 0x45, 0xf7, 0x5c, + 0xa4, 0x85, 0x8d, 0x64, 0xf2, 0x09, 0x58, 0xbb, 0xe2, 0xec, 0x4b, 0x3b, 0xd2, 0x82, 0xae, 0x38, + 0xda, 0x86, 0x32, 0xaf, 0xf6, 0x17, 0xdc, 0x5d, 0x91, 0x16, 0x35, 0x86, 0x89, 0xd3, 0xc2, 0x16, + 0xd2, 0xe2, 0xab, 0x48, 0x52, 0x86, 0x86, 0x3f, 0xba, 0x07, 0x10, 0x69, 0x4e, 0x64, 0xb8, 0x63, + 0x24, 0x65, 0x69, 0xe4, 0xa3, 0x3d, 0xa8, 0x06, 0x58, 0x71, 0xe1, 0x8d, 0x1f, 0x69, 0x71, 0x47, + 0x1d, 0x3d, 0x80, 0x7a, 0x1c, 0xe9, 0x64, 0xbb, 0xc7, 0x23, 0x65, 0x6c, 0x95, 0x13, 0xfd, 0x71, + 0xd8, 0x93, 0xed, 0x5e, 0x8f, 0x94, 0xb1, 0x73, 0x8e, 0x3e, 0x80, 0xe5, 0x59, 0x58, 0x92, 0xfd, + 0x9a, 0x8f, 0x74, 0x8e, 0x5e, 0x3a, 0x9a, 0x00, 0x9a, 0x03, 0x67, 0xce, 0x71, 0xeb, 0x47, 0x3a, + 0x4f, 0x6b, 0x1d, 0xe9, 0xd0, 0x4c, 0x62, 0x84, 0xac, 0xb7, 0x80, 0xa4, 0xcc, 0x6d, 0x76, 0xf6, + 0x96, 0x38, 0x6c, 0xc8, 0x7a, 0x2b, 0x48, 0xca, 0xdc, 0x75, 0xdf, 0xea, 0x7e, 0xfe, 0xd5, 0x8a, + 0xf0, 0xc5, 0x57, 0x2b, 0xc2, 0x5f, 0xbe, 0x5a, 0x11, 0x3e, 0xf9, 0x7a, 0x25, 0xf7, 0xc5, 0xd7, + 0x2b, 0xb9, 0x3f, 0x7e, 0xbd, 0x92, 0xfb, 0xd1, 0xf3, 0x43, 0xc3, 0x1b, 0x4d, 0x0f, 0xd7, 0x06, + 0xd6, 0x64, 0x3d, 0x7a, 0xfd, 0x72, 0xde, 0x95, 0xd0, 0xc3, 0x32, 0x4d, 0xba, 0x2f, 0xff, 0x27, + 0x00, 0x00, 0xff, 0xff, 0x12, 0x7d, 0x76, 0xbd, 0x32, 0x2a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -6214,6 +6222,18 @@ func (m *ResponseInitChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Timeouts != nil { + { + size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } if len(m.AppHash) > 0 { i -= len(m.AppHash) copy(dAtA[i:], m.AppHash) @@ -6786,20 +6806,20 @@ func (m *ResponseApplySnapshotChunk) MarshalToSizedBuffer(dAtA []byte) (int, err } } if len(m.RefetchChunks) > 0 { - dAtA53 := make([]byte, len(m.RefetchChunks)*10) - var j52 int + dAtA54 := make([]byte, len(m.RefetchChunks)*10) + var j53 int for _, num := range m.RefetchChunks { for num >= 1<<7 { - dAtA53[j52] = uint8(uint64(num)&0x7f | 0x80) + dAtA54[j53] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j52++ + j53++ } - dAtA53[j52] = uint8(num) - j52++ + dAtA54[j53] = uint8(num) + j53++ } - i -= j52 - copy(dAtA[i:], dAtA53[:j52]) - i = encodeVarintTypes(dAtA, i, uint64(j52)) + i -= j53 + copy(dAtA[i:], dAtA54[:j53]) + i = encodeVarintTypes(dAtA, i, uint64(j53)) i-- dAtA[i] = 0x12 } @@ -7311,12 +7331,12 @@ func (m *Evidence) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x28 } - n62, err62 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err62 != nil { - return 0, err62 + n63, err63 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err63 != nil { + return 0, err63 } - i -= n62 - i = encodeVarintTypes(dAtA, i, uint64(n62)) + i -= n63 + i = encodeVarintTypes(dAtA, i, uint64(n63)) i-- dAtA[i] = 0x22 if m.Height != 0 { @@ -8258,6 +8278,10 @@ func (m *ResponseInitChain) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + if m.Timeouts != nil { + l = m.Timeouts.Size() + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -12878,6 +12902,42 @@ func (m *ResponseInitChain) Unmarshal(dAtA []byte) error { m.AppHash = []byte{} } iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timeouts", 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 + } + if m.Timeouts == nil { + m.Timeouts = &TimeoutsInfo{} + } + if err := m.Timeouts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) From a7d1e1b35de216b2be2e3e460babdb2965c45046 Mon Sep 17 00:00:00 2001 From: sanaz Date: Tue, 24 Sep 2024 10:58:45 -0700 Subject: [PATCH 12/87] corrects some of the docs --- config/config.go | 8 ++++---- state/store.go | 2 +- statesync/reactor.go | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config/config.go b/config/config.go index d5e0312551..5fe51210d6 100644 --- a/config/config.go +++ b/config/config.go @@ -167,14 +167,14 @@ type BaseConfig struct { //nolint: maligned chainID string // The root directory for all data. - // This should be set in viper so it can unmarshal into this struct + // This should be set in viper so that it can unmarshal into this struct RootDir string `mapstructure:"home"` // TCP or UNIX socket address of the ABCI application, // or the name of an ABCI application compiled in with the CometBFT binary ProxyApp string `mapstructure:"proxy_app"` - // A custom human readable name for this node + // A custom human-readable name for this node Moniker string `mapstructure:"moniker"` // If this node is many blocks behind the tip of the chain, FastSync @@ -212,7 +212,7 @@ type BaseConfig struct { //nolint: maligned // Output format: 'plain' (colored text) or 'json' LogFormat string `mapstructure:"log_format"` - // Path to the JSON file containing the initial validator set and other meta data + // Path to the JSON file containing the initial validator set and other metadata Genesis string `mapstructure:"genesis_file"` // Path to the JSON file containing the private key to use as a validator in the consensus protocol @@ -848,7 +848,7 @@ func DefaultStateSyncConfig() *StateSyncConfig { } } -// TestFastSyncConfig returns a default configuration for the state sync service +// TestStateSyncConfig returns a default configuration for the state sync service func TestStateSyncConfig() *StateSyncConfig { return DefaultStateSyncConfig() } diff --git a/state/store.go b/state/store.go index 3fbadccdc0..6d34e960fc 100644 --- a/state/store.go +++ b/state/store.go @@ -101,7 +101,7 @@ func NewStore(db dbm.DB, options StoreOptions) Store { return dbStore{db, options} } -// LoadStateFromDBOrGenesisFile loads the most recent state from the database, +// LoadFromDBOrGenesisFile loads the most recent state from the database, // or creates a new one from the given genesisFilePath. func (store dbStore) LoadFromDBOrGenesisFile(genesisFilePath string) (State, error) { state, err := store.Load() diff --git a/statesync/reactor.go b/statesync/reactor.go index d8aa5b2a7d..59f85f9aab 100644 --- a/statesync/reactor.go +++ b/statesync/reactor.go @@ -103,7 +103,7 @@ func (r *Reactor) RemovePeer(peer p2p.Peer, reason interface{}) { } } -// Receive implements p2p.Reactor. +// ReceiveEnvelope implements p2p.Reactor. func (r *Reactor) ReceiveEnvelope(e p2p.Envelope) { if !r.IsRunning() { return From 0904cd5050025493e63c1c42c0cd2ee006b1c1ab Mon Sep 17 00:00:00 2001 From: sanaz Date: Tue, 24 Sep 2024 10:59:32 -0700 Subject: [PATCH 13/87] remnants of adding timeouts to the InitchainResponse --- proto/tendermint/abci/types.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index 99e9438725..f35b343658 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -215,6 +215,7 @@ message ResponseInitChain { ConsensusParams consensus_params = 1; repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; bytes app_hash = 3; + TimeoutsInfo timeouts = 4; } message ResponseQuery { From 02713707e4905a6ef33c596475b1a3d26cb56062 Mon Sep 17 00:00:00 2001 From: sanaz Date: Tue, 24 Sep 2024 15:38:49 -0700 Subject: [PATCH 14/87] disambiguates a comment --- blockchain/v0/reactor.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/blockchain/v0/reactor.go b/blockchain/v0/reactor.go index 090cd6f760..b7bef90957 100644 --- a/blockchain/v0/reactor.go +++ b/blockchain/v0/reactor.go @@ -410,8 +410,7 @@ FOR_LOOP: // TODO: batch saves so we dont persist to disk every block bcR.store.SaveBlock(first, firstParts, second.LastCommit) - // TODO: same thing for app - but we would need a way to - // get the hash without persisting the state + // TODO: same thing for app - but we would need a way to get the hash without persisting the state state, _, err = bcR.blockExec.ApplyBlock(state, firstID, first, second.LastCommit) if err != nil { // TODO This is bad, are we zombie? From 47329dbfc7822fe2843a352232d19202ea8a2f28 Mon Sep 17 00:00:00 2001 From: sanaz Date: Tue, 24 Sep 2024 15:39:45 -0700 Subject: [PATCH 15/87] minor edits --- state/execution.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/state/execution.go b/state/execution.go index de77a88e11..676a7e5a4b 100644 --- a/state/execution.go +++ b/state/execution.go @@ -200,7 +200,7 @@ func (blockExec *BlockExecutor) ProcessProposal( // ValidateBlock validates the given block against the given state. // If the block is invalid, it returns an error. // Validation does not mutate state, but does require historical information from the stateDB, -// ie. to verify evidence from a validator at an old height. +// i.e., to verify evidence from a validator at an old height. func (blockExec *BlockExecutor) ValidateBlock(state State, block *types.Block) error { err := validateBlock(state, block) if err != nil { @@ -514,7 +514,7 @@ func updateState( validatorUpdates []*types.Validator, ) (State, error) { - // Copy the valset so we can apply changes from EndBlock + // Copy the valset so that we can apply changes from EndBlock // and update s.LastValidators and s.Validators. nValSet := state.NextValidators.Copy() From 8ef666653ccc566e3be8303757d1c7f052685868 Mon Sep 17 00:00:00 2001 From: sanaz Date: Tue, 24 Sep 2024 15:41:19 -0700 Subject: [PATCH 16/87] adds some todos --- node/node.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/node/node.go b/node/node.go index e77afad0a0..852ed4d564 100644 --- a/node/node.go +++ b/node/node.go @@ -872,6 +872,7 @@ func NewNode(config *cfg.Config, } // Make MempoolReactor + // TODO limit the proxyApp to Mempool only mempool, mempoolReactor := createMempoolAndMempoolReactor(config, proxyApp, state, memplMetrics, logger, tracer) // Make Evidence Reactor @@ -927,6 +928,7 @@ func NewNode(config *cfg.Config, } // Setup Transport. + // TODO limit the proxyApp to Query only transport, peerFilters := createTransport(config, nodeInfo, nodeKey, proxyApp, tracer) // Setup Switch. @@ -1520,7 +1522,7 @@ func LoadStateFromDBOrGenesisDocProvider( return sm.State{}, nil, err } // save genesis doc to prevent a certain class of user errors (e.g. when it - // was changed, accidentally or not). Also good for audit trail. + // was changed, accidentally or not). Also, good for audit trail. if err := saveGenesisDoc(stateDB, genDoc); err != nil { return sm.State{}, nil, err } From 6a92b182bc0a6d49f56a8bfbfd3c692fe7106dfa Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 12:00:28 -0700 Subject: [PATCH 17/87] fixes godocs --- state/store.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/state/store.go b/state/store.go index 6d34e960fc..5a19c59775 100644 --- a/state/store.go +++ b/state/store.go @@ -119,7 +119,7 @@ func (store dbStore) LoadFromDBOrGenesisFile(genesisFilePath string) (State, err return state, nil } -// LoadStateFromDBOrGenesisDoc loads the most recent state from the database, +// LoadFromDBOrGenesisDoc loads the most recent state from the database, // or creates a new one from the given genesisDoc. func (store dbStore) LoadFromDBOrGenesisDoc(genesisDoc *types.GenesisDoc) (State, error) { state, err := store.Load() @@ -138,7 +138,7 @@ func (store dbStore) LoadFromDBOrGenesisDoc(genesisDoc *types.GenesisDoc) (State return state, nil } -// LoadState loads the State from the database. +// Load loads the State from the database. func (store dbStore) Load() (State, error) { return store.loadState(stateKey) } @@ -203,7 +203,7 @@ func (store dbStore) save(state State, key []byte) error { return nil } -// BootstrapState saves a new state, used e.g. by state sync when starting from non-zero height. +// Bootstrap saves a new state, used e.g. by state sync when starting from non-zero height. func (store dbStore) Bootstrap(state State) error { height := state.LastBlockHeight + 1 if height == 1 { From 782efa1233c1288484362806e47bce0ee8f14a1b Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 12:01:04 -0700 Subject: [PATCH 18/87] adds timeouts to the State protobuf message to be saved in the statedb --- proto/tendermint/state/types.pb.go | 176 +++++++++++++++++++---------- proto/tendermint/state/types.proto | 3 + 2 files changed, 122 insertions(+), 57 deletions(-) diff --git a/proto/tendermint/state/types.pb.go b/proto/tendermint/state/types.pb.go index 6b57ca1ae8..04c5371c65 100644 --- a/proto/tendermint/state/types.pb.go +++ b/proto/tendermint/state/types.pb.go @@ -330,6 +330,8 @@ type State struct { LastResultsHash []byte `protobuf:"bytes,12,opt,name=last_results_hash,json=lastResultsHash,proto3" json:"last_results_hash,omitempty"` // the latest AppHash we've received from calling abci.Commit() AppHash []byte `protobuf:"bytes,13,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` + // timeouts to be used for the next block height + Timeouts *types.TimeoutsInfo `protobuf:"bytes,15,opt,name=timeouts,proto3" json:"timeouts,omitempty"` } func (m *State) Reset() { *m = State{} } @@ -463,6 +465,13 @@ func (m *State) GetAppHash() []byte { return nil } +func (m *State) GetTimeouts() *types.TimeoutsInfo { + if m != nil { + return m.Timeouts + } + return nil +} + func init() { proto.RegisterType((*ABCIResponses)(nil), "tendermint.state.ABCIResponses") proto.RegisterType((*ValidatorsInfo)(nil), "tendermint.state.ValidatorsInfo") @@ -475,58 +484,59 @@ func init() { func init() { proto.RegisterFile("tendermint/state/types.proto", fileDescriptor_ccfacf933f22bf93) } var fileDescriptor_ccfacf933f22bf93 = []byte{ - // 805 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcd, 0x8e, 0xe3, 0x44, - 0x10, 0x8e, 0xc9, 0x6e, 0x7e, 0xca, 0x93, 0x64, 0xb7, 0x07, 0x21, 0x6f, 0x96, 0x75, 0xb2, 0xe1, - 0x47, 0x23, 0x0e, 0x8e, 0xb4, 0x1c, 0x10, 0x97, 0x95, 0xd6, 0x09, 0xb0, 0x91, 0x56, 0x08, 0x3c, - 0xa3, 0x39, 0x70, 0xb1, 0x3a, 0x71, 0x8f, 0x6d, 0x91, 0xd8, 0x96, 0xbb, 0x13, 0x86, 0x07, 0xe0, - 0x3e, 0x57, 0xde, 0x68, 0x8e, 0x73, 0x44, 0x1c, 0x06, 0xc8, 0xbc, 0x08, 0xea, 0x1f, 0xdb, 0x9d, - 0x84, 0x91, 0x06, 0xed, 0xad, 0x5d, 0xf5, 0xd5, 0x57, 0x5f, 0x55, 0x57, 0xb5, 0xe1, 0x63, 0x46, - 0x92, 0x80, 0xe4, 0xab, 0x38, 0x61, 0x63, 0xca, 0x30, 0x23, 0x63, 0xf6, 0x6b, 0x46, 0xa8, 0x93, - 0xe5, 0x29, 0x4b, 0xd1, 0x93, 0xca, 0xeb, 0x08, 0x6f, 0xff, 0xc3, 0x30, 0x0d, 0x53, 0xe1, 0x1c, - 0xf3, 0x93, 0xc4, 0xf5, 0x9f, 0x6b, 0x2c, 0x78, 0xbe, 0x88, 0x75, 0x92, 0xbe, 0x9e, 0x42, 0xd8, - 0x77, 0xbc, 0xc3, 0x03, 0xef, 0x06, 0x2f, 0xe3, 0x00, 0xb3, 0x34, 0x57, 0x88, 0x17, 0x07, 0x88, - 0x0c, 0xe7, 0x78, 0x55, 0x10, 0xd8, 0x9a, 0x7b, 0x43, 0x72, 0x1a, 0xa7, 0xc9, 0x4e, 0x82, 0x41, - 0x98, 0xa6, 0xe1, 0x92, 0x8c, 0xc5, 0xd7, 0x7c, 0x7d, 0x31, 0x66, 0xf1, 0x8a, 0x50, 0x86, 0x57, - 0x99, 0x04, 0x8c, 0xfe, 0x34, 0xa0, 0xf3, 0xc6, 0x9d, 0xcc, 0x3c, 0x42, 0xb3, 0x34, 0xa1, 0x84, - 0xa2, 0x09, 0x98, 0x01, 0x59, 0xc6, 0x1b, 0x92, 0xfb, 0xec, 0x92, 0x5a, 0xc6, 0xb0, 0x7e, 0x62, - 0xbe, 0x1a, 0x39, 0x5a, 0x33, 0x78, 0x91, 0x4e, 0x11, 0x30, 0x95, 0xd8, 0xb3, 0x4b, 0x0f, 0x82, - 0xe2, 0x48, 0xd1, 0x6b, 0x68, 0x93, 0x24, 0xf0, 0xe7, 0xcb, 0x74, 0xf1, 0xb3, 0xf5, 0xc1, 0xd0, - 0x38, 0x31, 0x5f, 0xbd, 0xbc, 0x97, 0xe2, 0x9b, 0x24, 0x70, 0x39, 0xd0, 0x6b, 0x11, 0x75, 0x42, - 0x53, 0x30, 0xe7, 0x24, 0x8c, 0x13, 0xc5, 0x50, 0x17, 0x0c, 0x9f, 0xdc, 0xcb, 0xe0, 0x72, 0xac, - 0xe4, 0x80, 0x79, 0x79, 0x1e, 0xfd, 0x66, 0x40, 0xf7, 0xbc, 0x68, 0x28, 0x9d, 0x25, 0x17, 0x29, - 0x9a, 0x40, 0xa7, 0x6c, 0xb1, 0x4f, 0x09, 0xb3, 0x0c, 0x41, 0x6d, 0xeb, 0xd4, 0xb2, 0x81, 0x65, - 0xe0, 0x29, 0x61, 0xde, 0xd1, 0x46, 0xfb, 0x42, 0x0e, 0x1c, 0x2f, 0x31, 0x65, 0x7e, 0x44, 0xe2, - 0x30, 0x62, 0xfe, 0x22, 0xc2, 0x49, 0x48, 0x02, 0x51, 0x67, 0xdd, 0x7b, 0xca, 0x5d, 0x6f, 0x85, - 0x67, 0x22, 0x1d, 0xa3, 0xdf, 0x0d, 0x38, 0x9e, 0x70, 0x9d, 0x09, 0x5d, 0xd3, 0x1f, 0xc4, 0xfd, - 0x09, 0x31, 0x1e, 0x3c, 0x59, 0x14, 0x66, 0x5f, 0xde, 0xab, 0xd2, 0xf3, 0xf2, 0x50, 0xcf, 0x1e, - 0x81, 0xfb, 0xe8, 0xfa, 0x76, 0x50, 0xf3, 0x7a, 0x8b, 0x5d, 0xf3, 0xff, 0xd6, 0x46, 0xe1, 0xe9, - 0xce, 0xfd, 0x0b, 0x61, 0xdf, 0x42, 0x97, 0xf7, 0xd7, 0xcf, 0x0b, 0xab, 0x92, 0x35, 0x70, 0xf6, - 0x77, 0xc2, 0xd9, 0x09, 0xf6, 0x3a, 0x3c, 0xac, 0x9a, 0xa5, 0x8f, 0xa0, 0x21, 0x75, 0xa8, 0xfc, - 0xea, 0x6b, 0x14, 0x41, 0xf3, 0x5c, 0x4e, 0x2b, 0x7a, 0x03, 0xed, 0xb2, 0x04, 0x95, 0xe5, 0x85, - 0x9e, 0x45, 0x4d, 0x75, 0x55, 0xbe, 0x2a, 0xbc, 0x8a, 0x42, 0x7d, 0x68, 0xd1, 0xf4, 0x82, 0xfd, - 0x82, 0x73, 0x22, 0xf2, 0xb4, 0xbd, 0xf2, 0x7b, 0xf4, 0x4f, 0x03, 0x1e, 0x9f, 0x72, 0xa1, 0xe8, - 0x6b, 0x68, 0x2a, 0x2e, 0x95, 0xe6, 0xd9, 0x61, 0x31, 0x4a, 0x94, 0x4a, 0x51, 0xe0, 0xd1, 0xe7, - 0xd0, 0x5a, 0x44, 0x38, 0x4e, 0xfc, 0x58, 0x36, 0xb2, 0xed, 0x9a, 0xdb, 0xdb, 0x41, 0x73, 0xc2, - 0x6d, 0xb3, 0xa9, 0xd7, 0x14, 0xce, 0x59, 0x80, 0x3e, 0x83, 0x6e, 0x9c, 0xc4, 0x2c, 0xc6, 0x4b, - 0xd5, 0x7e, 0xab, 0x2b, 0xca, 0xee, 0x28, 0xab, 0xec, 0x3c, 0xfa, 0x02, 0xc4, 0x3d, 0xc8, 0xd9, - 0x2e, 0x90, 0x75, 0x81, 0xec, 0x71, 0x87, 0x18, 0x5e, 0x85, 0xf5, 0xa0, 0xa3, 0x61, 0xe3, 0xc0, - 0x7a, 0x74, 0xa8, 0x5d, 0xce, 0x87, 0x88, 0x9a, 0x4d, 0xdd, 0x63, 0xae, 0x7d, 0x7b, 0x3b, 0x30, - 0xdf, 0x15, 0x54, 0xb3, 0xa9, 0x67, 0x96, 0xbc, 0xb3, 0x00, 0xbd, 0x83, 0x9e, 0xc6, 0xc9, 0x5f, - 0x04, 0xeb, 0xb1, 0x60, 0xed, 0x3b, 0xf2, 0xb9, 0x70, 0x8a, 0xe7, 0xc2, 0x39, 0x2b, 0x9e, 0x0b, - 0xb7, 0xc5, 0x69, 0xaf, 0xfe, 0x1a, 0x18, 0x5e, 0xa7, 0xe4, 0xe2, 0x5e, 0xf4, 0x1d, 0xf4, 0x12, - 0x72, 0xc9, 0xfc, 0x72, 0x43, 0xa8, 0xd5, 0x78, 0xd0, 0x4e, 0x75, 0x79, 0x58, 0xb5, 0x9e, 0xe8, - 0x35, 0x80, 0xc6, 0xd1, 0x7c, 0x10, 0x87, 0x16, 0xc1, 0x85, 0x88, 0xb2, 0x34, 0x92, 0xd6, 0xc3, - 0x84, 0xf0, 0x30, 0x4d, 0xc8, 0x04, 0x6c, 0x7d, 0x85, 0x2a, 0xbe, 0x72, 0x9b, 0xda, 0xe2, 0xb2, - 0x9e, 0x57, 0xdb, 0x54, 0x45, 0xab, 0xbd, 0xfa, 0xcf, 0xdd, 0x86, 0xf7, 0xdc, 0xed, 0xef, 0xe1, - 0xd3, 0x9d, 0xdd, 0xde, 0xe3, 0x2f, 0xe5, 0x99, 0x42, 0xde, 0x50, 0x5b, 0xf6, 0x5d, 0xa2, 0x42, - 0x63, 0x31, 0x88, 0x39, 0xa1, 0xeb, 0x25, 0xa3, 0x7e, 0x84, 0x69, 0x64, 0x1d, 0x0d, 0x8d, 0x93, - 0x23, 0x39, 0x88, 0x9e, 0xb4, 0xbf, 0xc5, 0x34, 0x42, 0xcf, 0xa0, 0x85, 0xb3, 0x4c, 0x42, 0x3a, - 0x02, 0xd2, 0xc4, 0x59, 0xc6, 0x5d, 0xee, 0x8f, 0xd7, 0x5b, 0xdb, 0xb8, 0xd9, 0xda, 0xc6, 0xdf, - 0x5b, 0xdb, 0xb8, 0xba, 0xb3, 0x6b, 0x37, 0x77, 0x76, 0xed, 0x8f, 0x3b, 0xbb, 0xf6, 0xd3, 0x57, - 0x61, 0xcc, 0xa2, 0xf5, 0xdc, 0x59, 0xa4, 0xab, 0xb1, 0xfe, 0x23, 0xab, 0x8e, 0xf2, 0x6f, 0xba, - 0xff, 0x1f, 0x9e, 0x37, 0x84, 0xfd, 0xcb, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x1a, 0xb9, - 0x2e, 0xa2, 0x07, 0x00, 0x00, + // 827 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x6f, 0xe3, 0x44, + 0x14, 0x8f, 0xc9, 0x6e, 0x93, 0x3c, 0x37, 0xc9, 0xee, 0x14, 0x21, 0x6f, 0x96, 0x75, 0xb2, 0xe1, + 0x8f, 0x2a, 0x0e, 0x8e, 0xb4, 0x1c, 0xd0, 0x5e, 0x56, 0x5a, 0x27, 0x40, 0x23, 0x55, 0x08, 0xdc, + 0xaa, 0x07, 0x2e, 0xd6, 0x24, 0x9e, 0xda, 0x16, 0x89, 0x6d, 0x79, 0x26, 0xa1, 0x7c, 0x00, 0xee, + 0xbd, 0x22, 0xf1, 0x81, 0x7a, 0xec, 0x11, 0x71, 0x28, 0x28, 0xfd, 0x22, 0x68, 0xfe, 0xd8, 0x9e, + 0x24, 0x54, 0x2a, 0xe2, 0x36, 0x7e, 0xef, 0xf7, 0x7e, 0xef, 0xf7, 0xde, 0xbc, 0x37, 0x86, 0x8f, + 0x19, 0x49, 0x02, 0x92, 0x2f, 0xe3, 0x84, 0x8d, 0x28, 0xc3, 0x8c, 0x8c, 0xd8, 0x2f, 0x19, 0xa1, + 0x4e, 0x96, 0xa7, 0x2c, 0x45, 0xcf, 0x2a, 0xaf, 0x23, 0xbc, 0xbd, 0x0f, 0xc3, 0x34, 0x4c, 0x85, + 0x73, 0xc4, 0x4f, 0x12, 0xd7, 0x7b, 0xa9, 0xb1, 0xe0, 0xd9, 0x3c, 0xd6, 0x49, 0x7a, 0x7a, 0x0a, + 0x61, 0xdf, 0xf2, 0x0e, 0xf6, 0xbc, 0x6b, 0xbc, 0x88, 0x03, 0xcc, 0xd2, 0x5c, 0x21, 0x5e, 0xed, + 0x21, 0x32, 0x9c, 0xe3, 0x65, 0x41, 0x60, 0x6b, 0xee, 0x35, 0xc9, 0x69, 0x9c, 0x26, 0x5b, 0x09, + 0xfa, 0x61, 0x9a, 0x86, 0x0b, 0x32, 0x12, 0x5f, 0xb3, 0xd5, 0xe5, 0x88, 0xc5, 0x4b, 0x42, 0x19, + 0x5e, 0x66, 0x12, 0x30, 0xfc, 0xd3, 0x80, 0xf6, 0x7b, 0x77, 0x3c, 0xf5, 0x08, 0xcd, 0xd2, 0x84, + 0x12, 0x8a, 0xc6, 0x60, 0x06, 0x64, 0x11, 0xaf, 0x49, 0xee, 0xb3, 0x2b, 0x6a, 0x19, 0x83, 0xfa, + 0xb1, 0xf9, 0x66, 0xe8, 0x68, 0xcd, 0xe0, 0x45, 0x3a, 0x45, 0xc0, 0x44, 0x62, 0xcf, 0xaf, 0x3c, + 0x08, 0x8a, 0x23, 0x45, 0xef, 0xa0, 0x45, 0x92, 0xc0, 0x9f, 0x2d, 0xd2, 0xf9, 0x4f, 0xd6, 0x07, + 0x03, 0xe3, 0xd8, 0x7c, 0xf3, 0xfa, 0x41, 0x8a, 0xaf, 0x93, 0xc0, 0xe5, 0x40, 0xaf, 0x49, 0xd4, + 0x09, 0x4d, 0xc0, 0x9c, 0x91, 0x30, 0x4e, 0x14, 0x43, 0x5d, 0x30, 0x7c, 0xf2, 0x20, 0x83, 0xcb, + 0xb1, 0x92, 0x03, 0x66, 0xe5, 0x79, 0xf8, 0xab, 0x01, 0x9d, 0x8b, 0xa2, 0xa1, 0x74, 0x9a, 0x5c, + 0xa6, 0x68, 0x0c, 0xed, 0xb2, 0xc5, 0x3e, 0x25, 0xcc, 0x32, 0x04, 0xb5, 0xad, 0x53, 0xcb, 0x06, + 0x96, 0x81, 0x67, 0x84, 0x79, 0x87, 0x6b, 0xed, 0x0b, 0x39, 0x70, 0xb4, 0xc0, 0x94, 0xf9, 0x11, + 0x89, 0xc3, 0x88, 0xf9, 0xf3, 0x08, 0x27, 0x21, 0x09, 0x44, 0x9d, 0x75, 0xef, 0x39, 0x77, 0x9d, + 0x08, 0xcf, 0x58, 0x3a, 0x86, 0xbf, 0x19, 0x70, 0x34, 0xe6, 0x3a, 0x13, 0xba, 0xa2, 0xdf, 0x8b, + 0xfb, 0x13, 0x62, 0x3c, 0x78, 0x36, 0x2f, 0xcc, 0xbe, 0xbc, 0x57, 0xa5, 0xe7, 0xf5, 0xbe, 0x9e, + 0x1d, 0x02, 0xf7, 0xc9, 0xcd, 0x5d, 0xbf, 0xe6, 0x75, 0xe7, 0xdb, 0xe6, 0xff, 0xac, 0x8d, 0xc2, + 0xf3, 0xad, 0xfb, 0x17, 0xc2, 0xbe, 0x81, 0x0e, 0xef, 0xaf, 0x9f, 0x17, 0x56, 0x25, 0xab, 0xef, + 0xec, 0xee, 0x84, 0xb3, 0x15, 0xec, 0xb5, 0x79, 0x58, 0x35, 0x4b, 0x1f, 0xc1, 0x81, 0xd4, 0xa1, + 0xf2, 0xab, 0xaf, 0x61, 0x04, 0x8d, 0x0b, 0x39, 0xad, 0xe8, 0x3d, 0xb4, 0xca, 0x12, 0x54, 0x96, + 0x57, 0x7a, 0x16, 0x35, 0xd5, 0x55, 0xf9, 0xaa, 0xf0, 0x2a, 0x0a, 0xf5, 0xa0, 0x49, 0xd3, 0x4b, + 0xf6, 0x33, 0xce, 0x89, 0xc8, 0xd3, 0xf2, 0xca, 0xef, 0xe1, 0xef, 0x0d, 0x78, 0x7a, 0xc6, 0x85, + 0xa2, 0xb7, 0xd0, 0x50, 0x5c, 0x2a, 0xcd, 0x8b, 0xfd, 0x62, 0x94, 0x28, 0x95, 0xa2, 0xc0, 0xa3, + 0xcf, 0xa1, 0x39, 0x8f, 0x70, 0x9c, 0xf8, 0xb1, 0x6c, 0x64, 0xcb, 0x35, 0x37, 0x77, 0xfd, 0xc6, + 0x98, 0xdb, 0xa6, 0x13, 0xaf, 0x21, 0x9c, 0xd3, 0x00, 0x7d, 0x06, 0x9d, 0x38, 0x89, 0x59, 0x8c, + 0x17, 0xaa, 0xfd, 0x56, 0x47, 0x94, 0xdd, 0x56, 0x56, 0xd9, 0x79, 0xf4, 0x05, 0x88, 0x7b, 0x90, + 0xb3, 0x5d, 0x20, 0xeb, 0x02, 0xd9, 0xe5, 0x0e, 0x31, 0xbc, 0x0a, 0xeb, 0x41, 0x5b, 0xc3, 0xc6, + 0x81, 0xf5, 0x64, 0x5f, 0xbb, 0x9c, 0x0f, 0x11, 0x35, 0x9d, 0xb8, 0x47, 0x5c, 0xfb, 0xe6, 0xae, + 0x6f, 0x9e, 0x16, 0x54, 0xd3, 0x89, 0x67, 0x96, 0xbc, 0xd3, 0x00, 0x9d, 0x42, 0x57, 0xe3, 0xe4, + 0x2f, 0x82, 0xf5, 0x54, 0xb0, 0xf6, 0x1c, 0xf9, 0x5c, 0x38, 0xc5, 0x73, 0xe1, 0x9c, 0x17, 0xcf, + 0x85, 0xdb, 0xe4, 0xb4, 0xd7, 0x7f, 0xf5, 0x0d, 0xaf, 0x5d, 0x72, 0x71, 0x2f, 0xfa, 0x16, 0xba, + 0x09, 0xb9, 0x62, 0x7e, 0xb9, 0x21, 0xd4, 0x3a, 0x78, 0xd4, 0x4e, 0x75, 0x78, 0x58, 0xb5, 0x9e, + 0xe8, 0x1d, 0x80, 0xc6, 0xd1, 0x78, 0x14, 0x87, 0x16, 0xc1, 0x85, 0x88, 0xb2, 0x34, 0x92, 0xe6, + 0xe3, 0x84, 0xf0, 0x30, 0x4d, 0xc8, 0x18, 0x6c, 0x7d, 0x85, 0x2a, 0xbe, 0x72, 0x9b, 0x5a, 0xe2, + 0xb2, 0x5e, 0x56, 0xdb, 0x54, 0x45, 0xab, 0xbd, 0xfa, 0xd7, 0xdd, 0x86, 0xff, 0xb9, 0xdb, 0xdf, + 0xc1, 0xa7, 0x5b, 0xbb, 0xbd, 0xc3, 0x5f, 0xca, 0x33, 0x85, 0xbc, 0x81, 0xb6, 0xec, 0xdb, 0x44, + 0x85, 0xc6, 0x62, 0x10, 0x73, 0x42, 0x57, 0x0b, 0x46, 0xfd, 0x08, 0xd3, 0xc8, 0x3a, 0x1c, 0x18, + 0xc7, 0x87, 0x72, 0x10, 0x3d, 0x69, 0x3f, 0xc1, 0x34, 0x42, 0x2f, 0xa0, 0x89, 0xb3, 0x4c, 0x42, + 0xda, 0x02, 0xd2, 0xc0, 0x59, 0x26, 0x5c, 0x6f, 0xa1, 0xc9, 0x87, 0x28, 0x5d, 0x31, 0x6a, 0x75, + 0xf7, 0x37, 0x58, 0xbc, 0xd4, 0xe7, 0x0a, 0xc0, 0x9f, 0x17, 0xaf, 0x84, 0xbb, 0x3f, 0xdc, 0x6c, + 0x6c, 0xe3, 0x76, 0x63, 0x1b, 0x7f, 0x6f, 0x6c, 0xe3, 0xfa, 0xde, 0xae, 0xdd, 0xde, 0xdb, 0xb5, + 0x3f, 0xee, 0xed, 0xda, 0x8f, 0x5f, 0x85, 0x31, 0x8b, 0x56, 0x33, 0x67, 0x9e, 0x2e, 0x47, 0xfa, + 0x3f, 0xb0, 0x3a, 0xca, 0x1f, 0xf1, 0xee, 0x2f, 0x7c, 0x76, 0x20, 0xec, 0x5f, 0xfe, 0x13, 0x00, + 0x00, 0xff, 0xff, 0x27, 0xdf, 0x7c, 0x06, 0xdd, 0x07, 0x00, 0x00, } func (m *ABCIResponses) Marshal() (dAtA []byte, err error) { @@ -768,6 +778,18 @@ func (m *State) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Timeouts != nil { + { + size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x7a + } if m.InitialHeight != 0 { i = encodeVarintTypes(dAtA, i, uint64(m.InitialHeight)) i-- @@ -843,12 +865,12 @@ func (m *State) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x32 } - n11, err11 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastBlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastBlockTime):]) - if err11 != nil { - return 0, err11 + n12, err12 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastBlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastBlockTime):]) + if err12 != nil { + return 0, err12 } - i -= n11 - i = encodeVarintTypes(dAtA, i, uint64(n11)) + i -= n12 + i = encodeVarintTypes(dAtA, i, uint64(n12)) i-- dAtA[i] = 0x2a { @@ -1031,6 +1053,10 @@ func (m *State) Size() (n int) { if m.InitialHeight != 0 { n += 1 + sovTypes(uint64(m.InitialHeight)) } + if m.Timeouts != nil { + l = m.Timeouts.Size() + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -2068,6 +2094,42 @@ func (m *State) Unmarshal(dAtA []byte) error { break } } + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Timeouts", 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 + } + if m.Timeouts == nil { + m.Timeouts = &types.TimeoutsInfo{} + } + if err := m.Timeouts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/proto/tendermint/state/types.proto b/proto/tendermint/state/types.proto index f3fdc0ef39..9f86fa9d09 100644 --- a/proto/tendermint/state/types.proto +++ b/proto/tendermint/state/types.proto @@ -77,4 +77,7 @@ message State { // the latest AppHash we've received from calling abci.Commit() bytes app_hash = 13; + + // timeouts to be used for the next block height + tendermint.abci.TimeoutsInfo timeouts = 15; } From 26dfedffde75b92aa464d6c02c54bc488f3e1eef Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 12:38:17 -0700 Subject: [PATCH 19/87] fixes godocs --- consensus/replay_file.go | 4 ++-- consensus/state.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/consensus/replay_file.go b/consensus/replay_file.go index ae85d557fd..44cee21879 100644 --- a/consensus/replay_file.go +++ b/consensus/replay_file.go @@ -29,7 +29,7 @@ const ( //-------------------------------------------------------- // replay messages interactively or all at once -// replay the wal file +// RunReplayFile replays the wal file func RunReplayFile(config cfg.BaseConfig, csConfig *cfg.ConsensusConfig, console bool) { consensusState := newConsensusStateForReplay(config, csConfig) @@ -38,7 +38,7 @@ func RunReplayFile(config cfg.BaseConfig, csConfig *cfg.ConsensusConfig, console } } -// Replay msgs in file or start the console +// ReplayFile replays msgs in file or start the console func (cs *State) ReplayFile(file string, console bool) error { if cs.IsRunning() { diff --git a/consensus/state.go b/consensus/state.go index 8292e49eeb..e1274fd78a 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -84,7 +84,7 @@ type State struct { config *cfg.ConsensusConfig privValidator types.PrivValidator // for signing votes - // store blocks and commits + // blockStore blocks and commits blockStore sm.BlockStore // create and execute blocks @@ -1699,7 +1699,7 @@ func (cs *State) finalizeCommit(height int64) { stateCopy := cs.state.Copy() // Execute and commit the block, update and save the state, and update the mempool. - // NOTE The block.AppHash wont reflect these txs until the next block. + // NOTE The block.AppHash won't reflect these txs until the next block. var ( err error retainHeight int64 From 490189c479b5c5169f6c72bece4e02c5af1723b5 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 13:03:27 -0700 Subject: [PATCH 20/87] makes timeouts field not nullable --- abci/types/types.pb.go | 499 ++++++++++++++--------------- proto/tendermint/abci/types.proto | 6 +- proto/tendermint/state/types.pb.go | 135 ++++---- proto/tendermint/state/types.proto | 2 +- 4 files changed, 307 insertions(+), 335 deletions(-) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index d47df78be3..9f5d435e71 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -1879,12 +1879,12 @@ func (m *ResponseFlush) XXX_DiscardUnknown() { var xxx_messageInfo_ResponseFlush proto.InternalMessageInfo type ResponseInfo struct { - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - AppVersion uint64 `protobuf:"varint,3,opt,name=app_version,json=appVersion,proto3" json:"app_version,omitempty"` - LastBlockHeight int64 `protobuf:"varint,4,opt,name=last_block_height,json=lastBlockHeight,proto3" json:"last_block_height,omitempty"` - LastBlockAppHash []byte `protobuf:"bytes,5,opt,name=last_block_app_hash,json=lastBlockAppHash,proto3" json:"last_block_app_hash,omitempty"` - Timeouts *TimeoutsInfo `protobuf:"bytes,6,opt,name=timeouts,proto3" json:"timeouts,omitempty"` + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + AppVersion uint64 `protobuf:"varint,3,opt,name=app_version,json=appVersion,proto3" json:"app_version,omitempty"` + LastBlockHeight int64 `protobuf:"varint,4,opt,name=last_block_height,json=lastBlockHeight,proto3" json:"last_block_height,omitempty"` + LastBlockAppHash []byte `protobuf:"bytes,5,opt,name=last_block_app_hash,json=lastBlockAppHash,proto3" json:"last_block_app_hash,omitempty"` + Timeouts TimeoutsInfo `protobuf:"bytes,6,opt,name=timeouts,proto3" json:"timeouts"` } func (m *ResponseInfo) Reset() { *m = ResponseInfo{} } @@ -1955,11 +1955,11 @@ func (m *ResponseInfo) GetLastBlockAppHash() []byte { return nil } -func (m *ResponseInfo) GetTimeouts() *TimeoutsInfo { +func (m *ResponseInfo) GetTimeouts() TimeoutsInfo { if m != nil { return m.Timeouts } - return nil + return TimeoutsInfo{} } // nondeterministic @@ -2028,7 +2028,7 @@ type ResponseInitChain struct { ConsensusParams *ConsensusParams `protobuf:"bytes,1,opt,name=consensus_params,json=consensusParams,proto3" json:"consensus_params,omitempty"` Validators []ValidatorUpdate `protobuf:"bytes,2,rep,name=validators,proto3" json:"validators"` AppHash []byte `protobuf:"bytes,3,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` - Timeouts *TimeoutsInfo `protobuf:"bytes,4,opt,name=timeouts,proto3" json:"timeouts,omitempty"` + Timeouts TimeoutsInfo `protobuf:"bytes,4,opt,name=timeouts,proto3" json:"timeouts"` } func (m *ResponseInitChain) Reset() { *m = ResponseInitChain{} } @@ -2085,11 +2085,11 @@ func (m *ResponseInitChain) GetAppHash() []byte { return nil } -func (m *ResponseInitChain) GetTimeouts() *TimeoutsInfo { +func (m *ResponseInitChain) GetTimeouts() TimeoutsInfo { if m != nil { return m.Timeouts } - return nil + return TimeoutsInfo{} } type ResponseQuery struct { @@ -2475,7 +2475,7 @@ type ResponseEndBlock struct { ValidatorUpdates []ValidatorUpdate `protobuf:"bytes,1,rep,name=validator_updates,json=validatorUpdates,proto3" json:"validator_updates"` ConsensusParamUpdates *ConsensusParams `protobuf:"bytes,2,opt,name=consensus_param_updates,json=consensusParamUpdates,proto3" json:"consensus_param_updates,omitempty"` Events []Event `protobuf:"bytes,3,rep,name=events,proto3" json:"events,omitempty"` - Timeouts *TimeoutsInfo `protobuf:"bytes,4,opt,name=timeouts,proto3" json:"timeouts,omitempty"` + Timeouts TimeoutsInfo `protobuf:"bytes,4,opt,name=timeouts,proto3" json:"timeouts"` } func (m *ResponseEndBlock) Reset() { *m = ResponseEndBlock{} } @@ -2532,11 +2532,11 @@ func (m *ResponseEndBlock) GetEvents() []Event { return nil } -func (m *ResponseEndBlock) GetTimeouts() *TimeoutsInfo { +func (m *ResponseEndBlock) GetTimeouts() TimeoutsInfo { if m != nil { return m.Timeouts } - return nil + return TimeoutsInfo{} } type ResponseCommit struct { @@ -3622,201 +3622,201 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 3100 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcb, 0x73, 0xdc, 0xc6, - 0xd1, 0x5f, 0xec, 0x1b, 0xbd, 0xdc, 0x07, 0x47, 0xb2, 0xb4, 0x82, 0x65, 0x52, 0x86, 0xca, 0x2f, - 0xd9, 0x26, 0x3f, 0xd3, 0x25, 0x7f, 0x56, 0xec, 0xc4, 0x26, 0x57, 0x2b, 0x2f, 0x2d, 0x9a, 0x64, - 0xc0, 0x95, 0x9c, 0x97, 0x05, 0x83, 0x8b, 0xe1, 0x2e, 0xac, 0x5d, 0x00, 0x06, 0xb0, 0x34, 0xa9, - 0x63, 0x2a, 0xa9, 0x54, 0xf9, 0xe4, 0xaa, 0x5c, 0x7c, 0xf1, 0x3d, 0x97, 0xfc, 0x09, 0xc9, 0x31, - 0xe5, 0xaa, 0x1c, 0xe2, 0x63, 0x0e, 0x29, 0x27, 0x65, 0xe7, 0x94, 0x6b, 0x0e, 0x39, 0xe5, 0x51, - 0xf3, 0xc0, 0x73, 0x17, 0x5c, 0xd0, 0xce, 0x2d, 0xb7, 0x99, 0x46, 0x77, 0x63, 0xba, 0x31, 0xd3, - 0xdd, 0xbf, 0xc6, 0xc0, 0xe3, 0x1e, 0x36, 0x75, 0xec, 0x4c, 0x0c, 0xd3, 0x5b, 0xd7, 0x0e, 0x07, - 0xc6, 0xba, 0x77, 0x6a, 0x63, 0x77, 0xcd, 0x76, 0x2c, 0xcf, 0x42, 0xcd, 0xf0, 0xe1, 0x1a, 0x79, - 0x28, 0x3d, 0x11, 0xe1, 0x1e, 0x38, 0xa7, 0xb6, 0x67, 0xad, 0xdb, 0x8e, 0x65, 0x1d, 0x31, 0x7e, - 0xe9, 0x6a, 0xe4, 0x31, 0xd5, 0x13, 0xd5, 0x16, 0x7b, 0xca, 0x85, 0x1f, 0xe2, 0x53, 0xff, 0xe9, - 0x13, 0x33, 0xb2, 0xb6, 0xe6, 0x68, 0x13, 0xff, 0xf1, 0xea, 0xd0, 0xb2, 0x86, 0x63, 0xbc, 0x4e, - 0x67, 0x87, 0xd3, 0xa3, 0x75, 0xcf, 0x98, 0x60, 0xd7, 0xd3, 0x26, 0x36, 0x67, 0xb8, 0x38, 0xb4, - 0x86, 0x16, 0x1d, 0xae, 0x93, 0x11, 0xa7, 0xae, 0x24, 0xc5, 0xf4, 0xa9, 0xa3, 0x79, 0x86, 0x65, - 0xb2, 0xe7, 0xf2, 0x6f, 0x44, 0xa8, 0x28, 0xf8, 0xc3, 0x29, 0x76, 0x3d, 0xb4, 0x01, 0x45, 0x3c, - 0x18, 0x59, 0x6d, 0xe1, 0x9a, 0xf0, 0x6c, 0x6d, 0xe3, 0xea, 0x5a, 0xc2, 0xf8, 0x35, 0xce, 0xd7, - 0x1d, 0x8c, 0xac, 0x5e, 0x4e, 0xa1, 0xbc, 0xe8, 0x26, 0x94, 0x8e, 0xc6, 0x53, 0x77, 0xd4, 0xce, - 0x53, 0xa1, 0x27, 0xd2, 0x84, 0xee, 0x10, 0xa6, 0x5e, 0x4e, 0x61, 0xdc, 0xe4, 0x55, 0x86, 0x79, - 0x64, 0xb5, 0x0b, 0x67, 0xbf, 0x6a, 0xdb, 0x3c, 0xa2, 0xaf, 0x22, 0xbc, 0x68, 0x0b, 0xc0, 0xc5, - 0x9e, 0x6a, 0xd9, 0x64, 0xf9, 0xed, 0x22, 0x95, 0x7c, 0x32, 0x4d, 0xf2, 0x00, 0x7b, 0x7b, 0x94, - 0xb1, 0x97, 0x53, 0x44, 0xd7, 0x9f, 0x10, 0x1d, 0x86, 0x69, 0x78, 0xea, 0x60, 0xa4, 0x19, 0x66, - 0xbb, 0x74, 0xb6, 0x8e, 0x6d, 0xd3, 0xf0, 0x3a, 0x84, 0x91, 0xe8, 0x30, 0xfc, 0x09, 0x31, 0xf9, - 0xc3, 0x29, 0x76, 0x4e, 0xdb, 0xe5, 0xb3, 0x4d, 0xfe, 0x3e, 0x61, 0x22, 0x26, 0x53, 0x6e, 0xd4, - 0x85, 0xda, 0x21, 0x1e, 0x1a, 0xa6, 0x7a, 0x38, 0xb6, 0x06, 0x0f, 0xdb, 0x15, 0x2a, 0x2c, 0xa7, - 0x09, 0x6f, 0x11, 0xd6, 0x2d, 0xc2, 0xd9, 0xcb, 0x29, 0x70, 0x18, 0xcc, 0xd0, 0xeb, 0x50, 0x1d, - 0x8c, 0xf0, 0xe0, 0xa1, 0xea, 0x9d, 0xb4, 0xab, 0x54, 0xc7, 0x6a, 0x9a, 0x8e, 0x0e, 0xe1, 0xeb, - 0x9f, 0xf4, 0x72, 0x4a, 0x65, 0xc0, 0x86, 0xc4, 0x7e, 0x1d, 0x8f, 0x8d, 0x63, 0xec, 0x10, 0x79, - 0xf1, 0x6c, 0xfb, 0x6f, 0x33, 0x4e, 0xaa, 0x41, 0xd4, 0xfd, 0x09, 0x7a, 0x03, 0x44, 0x6c, 0xea, - 0xdc, 0x0c, 0xa0, 0x2a, 0xae, 0xa5, 0xee, 0x15, 0x53, 0xf7, 0x8d, 0xa8, 0x62, 0x3e, 0x46, 0xaf, - 0x42, 0x79, 0x60, 0x4d, 0x26, 0x86, 0xd7, 0xae, 0x51, 0xe9, 0x95, 0x54, 0x03, 0x28, 0x57, 0x2f, - 0xa7, 0x70, 0x7e, 0xb4, 0x0b, 0x8d, 0xb1, 0xe1, 0x7a, 0xaa, 0x6b, 0x6a, 0xb6, 0x3b, 0xb2, 0x3c, - 0xb7, 0xbd, 0x44, 0x35, 0x3c, 0x95, 0xa6, 0x61, 0xc7, 0x70, 0xbd, 0x03, 0x9f, 0xb9, 0x97, 0x53, - 0xea, 0xe3, 0x28, 0x81, 0xe8, 0xb3, 0x8e, 0x8e, 0xb0, 0x13, 0x28, 0x6c, 0xd7, 0xcf, 0xd6, 0xb7, - 0x47, 0xb8, 0x7d, 0x79, 0xa2, 0xcf, 0x8a, 0x12, 0xd0, 0x8f, 0xe1, 0xc2, 0xd8, 0xd2, 0xf4, 0x40, - 0x9d, 0x3a, 0x18, 0x4d, 0xcd, 0x87, 0xed, 0x06, 0x55, 0xfa, 0x5c, 0xea, 0x22, 0x2d, 0x4d, 0xf7, - 0x55, 0x74, 0x88, 0x40, 0x2f, 0xa7, 0x2c, 0x8f, 0x93, 0x44, 0xf4, 0x00, 0x2e, 0x6a, 0xb6, 0x3d, - 0x3e, 0x4d, 0x6a, 0x6f, 0x52, 0xed, 0x37, 0xd2, 0xb4, 0x6f, 0x12, 0x99, 0xa4, 0x7a, 0xa4, 0xcd, - 0x50, 0x51, 0x1f, 0x5a, 0xb6, 0x83, 0x6d, 0xcd, 0xc1, 0xaa, 0xed, 0x58, 0xb6, 0xe5, 0x6a, 0xe3, - 0x76, 0x8b, 0xea, 0x7e, 0x26, 0x4d, 0xf7, 0x3e, 0xe3, 0xdf, 0xe7, 0xec, 0xbd, 0x9c, 0xd2, 0xb4, - 0xe3, 0x24, 0xa6, 0xd5, 0x1a, 0x60, 0xd7, 0x0d, 0xb5, 0x2e, 0x2f, 0xd2, 0x4a, 0xf9, 0xe3, 0x5a, - 0x63, 0xa4, 0xad, 0x0a, 0x94, 0x8e, 0xb5, 0xf1, 0x14, 0xcb, 0xcf, 0x40, 0x2d, 0x12, 0x96, 0x50, - 0x1b, 0x2a, 0x13, 0xec, 0xba, 0xda, 0x10, 0xd3, 0x28, 0x26, 0x2a, 0xfe, 0x54, 0x6e, 0xc0, 0x52, - 0x34, 0x14, 0xc9, 0xbf, 0x12, 0x60, 0xa9, 0x6f, 0x4c, 0xb0, 0x35, 0xf5, 0x5c, 0x12, 0x66, 0xd0, - 0x0e, 0x34, 0x3d, 0x36, 0xe7, 0x0b, 0xc5, 0x3c, 0x10, 0x5e, 0x59, 0x63, 0x31, 0x74, 0xcd, 0x8f, - 0xa1, 0x6b, 0xb7, 0x79, 0x0c, 0xdd, 0xaa, 0x7e, 0xfe, 0xe5, 0x6a, 0xee, 0xd3, 0x3f, 0xaf, 0x0a, - 0x4a, 0x83, 0xcb, 0xb2, 0x15, 0x62, 0xf4, 0x36, 0xf8, 0x14, 0x95, 0xef, 0xf5, 0x7c, 0x76, 0x65, - 0x75, 0x2e, 0xca, 0xf6, 0xbf, 0x3c, 0x09, 0x6c, 0xa4, 0x0b, 0x6d, 0x43, 0xe5, 0x18, 0x3b, 0x2e, - 0x09, 0x82, 0xdc, 0x46, 0x3e, 0x45, 0xd7, 0xa1, 0x4e, 0x4f, 0xa5, 0xea, 0x3f, 0x27, 0xef, 0x2c, - 0x2a, 0x4b, 0x94, 0x78, 0x9f, 0x33, 0xad, 0x42, 0xcd, 0xde, 0xb0, 0x03, 0x96, 0x02, 0x65, 0x01, - 0x7b, 0xc3, 0xe6, 0x0c, 0xf2, 0x77, 0xa0, 0x95, 0x0c, 0xa2, 0xa8, 0x05, 0x85, 0x87, 0xf8, 0x94, - 0xbf, 0x8f, 0x0c, 0xd1, 0x45, 0xfe, 0x05, 0xe8, 0x3b, 0x44, 0x85, 0x7f, 0x8e, 0xdf, 0xe7, 0x03, - 0xe1, 0x20, 0x7a, 0xa2, 0x57, 0xa1, 0x48, 0x0c, 0xe2, 0xee, 0x94, 0x66, 0x3c, 0xd0, 0xf7, 0x33, - 0x19, 0x73, 0xc1, 0x27, 0xc4, 0x05, 0x54, 0x02, 0x5d, 0x21, 0xc1, 0x4e, 0x33, 0x4c, 0xd5, 0xd0, - 0xf9, 0x7b, 0x2a, 0x74, 0xbe, 0xad, 0xa3, 0xbb, 0xd0, 0x1a, 0x58, 0xa6, 0x8b, 0x4d, 0x77, 0xea, - 0xaa, 0x2c, 0x53, 0xf2, 0x6c, 0x32, 0x1b, 0x8c, 0x3a, 0x3e, 0xe3, 0x3e, 0xe5, 0x53, 0x9a, 0x83, - 0x38, 0x01, 0xdd, 0x01, 0x38, 0xd6, 0xc6, 0x86, 0xae, 0x79, 0x96, 0xe3, 0xb6, 0x8b, 0xd7, 0x0a, - 0x73, 0xd5, 0xdc, 0xf7, 0x59, 0xee, 0xd9, 0xba, 0xe6, 0xe1, 0xad, 0x22, 0x59, 0xad, 0x12, 0x91, - 0x44, 0x4f, 0x43, 0x53, 0xb3, 0x6d, 0xd5, 0xf5, 0x34, 0x0f, 0xab, 0x87, 0xa7, 0x1e, 0x76, 0x69, - 0x8e, 0x59, 0x52, 0xea, 0x9a, 0x6d, 0x1f, 0x10, 0xea, 0x16, 0x21, 0xa2, 0xa7, 0xa0, 0x41, 0xf2, - 0x89, 0xa1, 0x8d, 0xd5, 0x11, 0x36, 0x86, 0x23, 0x8f, 0xe6, 0x92, 0x82, 0x52, 0xe7, 0xd4, 0x1e, - 0x25, 0xca, 0x7a, 0xb0, 0x67, 0x69, 0x2e, 0x41, 0x08, 0x8a, 0xba, 0xe6, 0x69, 0xd4, 0x91, 0x4b, - 0x0a, 0x1d, 0x13, 0x9a, 0xad, 0x79, 0x23, 0xee, 0x1e, 0x3a, 0x46, 0x97, 0xa0, 0xcc, 0xd5, 0x16, - 0xa8, 0x5a, 0x3e, 0x23, 0xdf, 0xcc, 0x76, 0xac, 0x63, 0x4c, 0x93, 0x67, 0x55, 0x61, 0x13, 0xf9, - 0x67, 0x79, 0x58, 0x9e, 0xc9, 0x3a, 0x44, 0xef, 0x48, 0x73, 0x47, 0xfe, 0xbb, 0xc8, 0x18, 0xbd, - 0x42, 0xf4, 0x6a, 0x3a, 0x76, 0xf8, 0x66, 0x6e, 0x47, 0x5d, 0xc4, 0x2a, 0x9d, 0x1e, 0x7d, 0xce, - 0x5d, 0xc3, 0xb9, 0xd1, 0x1e, 0xb4, 0xc6, 0x9a, 0xeb, 0x9f, 0x04, 0x35, 0x92, 0xf9, 0x67, 0x73, - 0xd7, 0x8e, 0xe6, 0xc7, 0x7d, 0xb2, 0xd9, 0xb9, 0xa2, 0xc6, 0x38, 0x46, 0x45, 0x0a, 0x5c, 0x3c, - 0x3c, 0x7d, 0xa4, 0x99, 0x9e, 0x61, 0x62, 0x75, 0xe6, 0xcb, 0x5d, 0x99, 0x51, 0xda, 0x3d, 0x36, - 0x74, 0x6c, 0x0e, 0xfc, 0x4f, 0x76, 0x21, 0x10, 0x0e, 0x3e, 0xa9, 0x2b, 0x2b, 0xd0, 0x88, 0xe7, - 0x4d, 0xd4, 0x80, 0xbc, 0x77, 0xc2, 0x1d, 0x90, 0xf7, 0x4e, 0xd0, 0xff, 0x41, 0x91, 0x18, 0x49, - 0x8d, 0x6f, 0xcc, 0x29, 0x5a, 0xb8, 0x5c, 0xff, 0xd4, 0xc6, 0x0a, 0xe5, 0x94, 0xe5, 0xe0, 0x34, - 0x04, 0xb9, 0x34, 0xa9, 0x55, 0x7e, 0x0e, 0x9a, 0x89, 0x64, 0x19, 0xf9, 0x7e, 0x42, 0xf4, 0xfb, - 0xc9, 0x4d, 0xa8, 0xc7, 0x32, 0xa3, 0x7c, 0x09, 0x2e, 0xce, 0x4b, 0x74, 0xf2, 0x28, 0xa0, 0xc7, - 0x12, 0x16, 0xba, 0x09, 0xd5, 0x20, 0xd3, 0xf9, 0xc1, 0x2d, 0x69, 0x85, 0xcf, 0xac, 0x04, 0xac, - 0xe4, 0x18, 0x92, 0x6d, 0x4d, 0xf7, 0x43, 0x9e, 0x2e, 0xbc, 0xa2, 0xd9, 0x76, 0x4f, 0x73, 0x47, - 0xf2, 0xfb, 0xd0, 0x4e, 0xcb, 0x62, 0x09, 0x33, 0x8a, 0xc1, 0x36, 0xbc, 0x04, 0xe5, 0x23, 0xcb, - 0x99, 0x68, 0x2c, 0x26, 0xd6, 0x15, 0x3e, 0x23, 0xdb, 0x93, 0x65, 0xb4, 0x02, 0x25, 0xb3, 0x89, - 0xac, 0xc2, 0x95, 0xd4, 0x4c, 0x46, 0x44, 0x0c, 0x53, 0xc7, 0xcc, 0x9f, 0x75, 0x85, 0x4d, 0x42, - 0x45, 0x6c, 0xb1, 0x6c, 0x42, 0x5e, 0xeb, 0x52, 0x5b, 0xa9, 0x7e, 0x51, 0xe1, 0x33, 0xf9, 0xaf, - 0x02, 0x5c, 0x9a, 0x9f, 0xcf, 0xd0, 0x4d, 0x00, 0x16, 0x50, 0x83, 0x63, 0x57, 0xdb, 0xb8, 0x34, - 0xbb, 0xe9, 0x6f, 0x6b, 0x9e, 0xa6, 0x88, 0x94, 0x93, 0x0c, 0x49, 0x18, 0x08, 0xc5, 0x54, 0xd7, - 0x78, 0xc4, 0xf6, 0x4c, 0x41, 0xa9, 0x07, 0x3c, 0x07, 0xc6, 0xa3, 0x78, 0x78, 0x2b, 0xc4, 0xc3, - 0x5b, 0xe8, 0xbb, 0x62, 0xec, 0x08, 0xfb, 0xb1, 0xb4, 0x74, 0xde, 0x58, 0x2a, 0xff, 0x22, 0x6a, - 0x66, 0x2c, 0x9b, 0x46, 0xce, 0xb5, 0x70, 0xae, 0x73, 0x1d, 0x77, 0x4f, 0x3e, 0xa3, 0x7b, 0xe4, - 0x5f, 0x02, 0x54, 0x15, 0xec, 0xda, 0x24, 0x08, 0xa3, 0x2d, 0x10, 0xf1, 0xc9, 0x00, 0xb3, 0xa2, - 0x5e, 0x48, 0x2d, 0x8a, 0x19, 0x77, 0xd7, 0xe7, 0x24, 0x15, 0x69, 0x20, 0x86, 0x5e, 0xe6, 0xc0, - 0x25, 0x1d, 0x83, 0x70, 0xf1, 0x28, 0x72, 0x79, 0xc5, 0x47, 0x2e, 0x85, 0xd4, 0x22, 0x94, 0x49, - 0x25, 0xa0, 0xcb, 0xcb, 0x1c, 0xba, 0x14, 0x17, 0xbc, 0x2c, 0x86, 0x5d, 0x3a, 0x31, 0xec, 0x52, - 0x5a, 0x60, 0x66, 0x0a, 0x78, 0xe9, 0xc4, 0xc0, 0x4b, 0x79, 0x81, 0x92, 0x14, 0xf4, 0xf2, 0x8a, - 0x8f, 0x5e, 0x2a, 0x0b, 0xcc, 0x4e, 0xc0, 0x97, 0x3b, 0x71, 0xf8, 0xc2, 0xa0, 0xc7, 0xf5, 0x54, - 0xe9, 0x54, 0xfc, 0xf2, 0xdd, 0x08, 0x7e, 0x11, 0x53, 0xc1, 0x03, 0x53, 0x32, 0x07, 0xc0, 0x74, - 0x62, 0x00, 0x06, 0x16, 0xf8, 0x20, 0x05, 0xc1, 0xbc, 0x19, 0x45, 0x30, 0xb5, 0x54, 0x10, 0xc4, - 0x37, 0xcd, 0x3c, 0x08, 0x73, 0x2b, 0x80, 0x30, 0x4b, 0xa9, 0x18, 0x8c, 0xdb, 0x90, 0xc4, 0x30, - 0x7b, 0x33, 0x18, 0x86, 0x61, 0x8e, 0xa7, 0x53, 0x55, 0x2c, 0x00, 0x31, 0x7b, 0x33, 0x20, 0xa6, - 0xb1, 0x40, 0xe1, 0x02, 0x14, 0xf3, 0x93, 0xf9, 0x28, 0x26, 0x1d, 0x67, 0xf0, 0x65, 0x66, 0x83, - 0x31, 0x6a, 0x0a, 0x8c, 0x61, 0x50, 0xe3, 0xf9, 0x54, 0xf5, 0x99, 0x71, 0xcc, 0xbd, 0x39, 0x38, - 0x86, 0x21, 0x8e, 0x67, 0x53, 0x95, 0x67, 0x00, 0x32, 0xf7, 0xe6, 0x00, 0x19, 0xb4, 0x50, 0x6d, - 0x76, 0x24, 0xf3, 0x1c, 0xa9, 0xc2, 0x12, 0x61, 0x8e, 0x64, 0x32, 0xec, 0x38, 0x96, 0xc3, 0x2b, - 0x6f, 0x36, 0x91, 0x9f, 0x25, 0x75, 0x61, 0x18, 0xd2, 0xce, 0x40, 0x3d, 0xb4, 0x62, 0x88, 0x84, - 0x31, 0xf9, 0xef, 0x42, 0x28, 0x4b, 0x4b, 0xa9, 0x68, 0x4d, 0x29, 0xf2, 0x9a, 0x32, 0x82, 0x30, - 0xf2, 0x71, 0x84, 0xb1, 0x0a, 0x35, 0x52, 0x09, 0x24, 0xc0, 0x83, 0x66, 0xfb, 0xe0, 0x01, 0xdd, - 0x80, 0x65, 0x5a, 0xea, 0xb1, 0xbc, 0x10, 0x4b, 0x61, 0x4d, 0xf2, 0x80, 0x1d, 0x25, 0x96, 0xcb, - 0x5e, 0x84, 0x0b, 0x11, 0xde, 0xa0, 0xc2, 0x60, 0x15, 0x73, 0x2b, 0xe0, 0xde, 0x64, 0xa5, 0x06, - 0xba, 0x05, 0x55, 0x8e, 0x8b, 0xdc, 0xd4, 0xd6, 0x4b, 0x14, 0xd1, 0x29, 0x01, 0xbb, 0xfc, 0x4e, - 0xe8, 0xdb, 0x10, 0xd3, 0x20, 0x28, 0x0e, 0x2c, 0x1d, 0xf3, 0xd2, 0x81, 0x8e, 0x09, 0xce, 0x19, - 0x5b, 0x43, 0x9e, 0x8c, 0xc9, 0x90, 0x70, 0x05, 0xe1, 0x5e, 0x64, 0xd1, 0x5c, 0xfe, 0x97, 0x10, - 0xea, 0x0b, 0x61, 0xce, 0x3c, 0x44, 0x22, 0xfc, 0x77, 0x10, 0x49, 0xfe, 0x1b, 0x23, 0x92, 0x68, - 0xe9, 0x56, 0x88, 0x95, 0x6e, 0x31, 0x7f, 0x16, 0xcf, 0xe7, 0xcf, 0x7f, 0x08, 0xe1, 0xbe, 0x0a, - 0xa0, 0xc9, 0x37, 0x73, 0x66, 0x58, 0xc2, 0x95, 0xe8, 0x2e, 0xe1, 0x25, 0x1c, 0x07, 0x9c, 0x65, - 0xba, 0xe4, 0x38, 0xe0, 0xac, 0xb0, 0xa2, 0x8e, 0x4e, 0xd0, 0xab, 0x20, 0xd2, 0x06, 0xac, 0x6a, - 0xd9, 0x2e, 0x4f, 0x4a, 0x8f, 0x47, 0xad, 0x60, 0x7d, 0xd6, 0xb5, 0x7d, 0xc2, 0xb3, 0x67, 0xbb, - 0x4a, 0xd5, 0xe6, 0xa3, 0x48, 0x85, 0x25, 0xc6, 0x2a, 0xac, 0xab, 0x20, 0x92, 0xd5, 0xbb, 0xb6, - 0x36, 0xc0, 0x34, 0xc1, 0x88, 0x4a, 0x48, 0x90, 0x1f, 0x00, 0x9a, 0x4d, 0x71, 0xa8, 0x07, 0x65, - 0x7c, 0x8c, 0x4d, 0x8f, 0x7c, 0xf0, 0x42, 0xb2, 0x08, 0xe2, 0x08, 0x04, 0x9b, 0xde, 0x56, 0x9b, - 0x7c, 0x9f, 0xbf, 0x7d, 0xb9, 0xda, 0x62, 0xdc, 0x2f, 0x58, 0x13, 0xc3, 0xc3, 0x13, 0xdb, 0x3b, - 0x55, 0xb8, 0xbc, 0xfc, 0xa7, 0x3c, 0x81, 0x03, 0xb1, 0xf4, 0x37, 0xd7, 0xb7, 0xfe, 0xb1, 0xcd, - 0x47, 0xa0, 0x60, 0x36, 0x7f, 0xaf, 0x00, 0x0c, 0x35, 0x57, 0xfd, 0x48, 0x33, 0x3d, 0xac, 0x73, - 0xa7, 0x47, 0x28, 0x48, 0x82, 0x2a, 0x99, 0x4d, 0x5d, 0xac, 0x73, 0x54, 0x1a, 0xcc, 0x23, 0x76, - 0x56, 0xbe, 0x9d, 0x9d, 0x71, 0x2f, 0x57, 0x13, 0x5e, 0x8e, 0x94, 0xea, 0x62, 0xb4, 0x54, 0x27, - 0x6b, 0xb3, 0x1d, 0xc3, 0x72, 0x0c, 0xef, 0x94, 0x7e, 0x9a, 0x82, 0x12, 0xcc, 0xd1, 0x75, 0xa8, - 0x4f, 0xf0, 0xc4, 0xb6, 0xac, 0xb1, 0xca, 0x42, 0x66, 0x8d, 0x8a, 0x2e, 0x71, 0x62, 0x97, 0x46, - 0xce, 0x9f, 0xe7, 0xc3, 0x93, 0x1b, 0x42, 0xb2, 0xff, 0x39, 0x07, 0xcb, 0xbf, 0xa3, 0x7d, 0x9a, - 0x78, 0x81, 0x83, 0x0e, 0x60, 0x39, 0x88, 0x1c, 0xea, 0x94, 0x46, 0x14, 0x7f, 0x43, 0x67, 0x0d, - 0x3d, 0xad, 0xe3, 0x38, 0xd9, 0x45, 0x3f, 0x80, 0xcb, 0x89, 0xa8, 0x18, 0xa8, 0xce, 0x67, 0x0c, - 0x8e, 0x8f, 0xc5, 0x83, 0xa3, 0xaf, 0x39, 0xf4, 0x55, 0xe1, 0x5b, 0xfa, 0xea, 0x5b, 0x44, 0xc2, - 0x6d, 0x68, 0xc4, 0x2b, 0xbd, 0xb9, 0x1b, 0xe7, 0x3a, 0xd4, 0x1d, 0xec, 0x11, 0xa4, 0x17, 0xeb, - 0xcb, 0x2c, 0x31, 0x22, 0xef, 0xf6, 0xec, 0xc3, 0x63, 0x73, 0x2b, 0x3e, 0xf4, 0xff, 0x20, 0x86, - 0xc5, 0xa2, 0x90, 0xd2, 0xe2, 0x08, 0x60, 0x7b, 0xc8, 0x2b, 0xff, 0x56, 0x08, 0x55, 0xc6, 0x1b, - 0x01, 0x5d, 0x28, 0x3b, 0xd8, 0x9d, 0x8e, 0x19, 0x34, 0x6f, 0x6c, 0xbc, 0x98, 0xad, 0x56, 0x24, - 0xd4, 0xe9, 0xd8, 0x53, 0xb8, 0xb0, 0xfc, 0x00, 0xca, 0x8c, 0x82, 0x6a, 0x50, 0xb9, 0xb7, 0x7b, - 0x77, 0x77, 0xef, 0xdd, 0xdd, 0x56, 0x0e, 0x01, 0x94, 0x37, 0x3b, 0x9d, 0xee, 0x7e, 0xbf, 0x25, - 0x20, 0x11, 0x4a, 0x9b, 0x5b, 0x7b, 0x4a, 0xbf, 0x95, 0x27, 0x64, 0xa5, 0xfb, 0x76, 0xb7, 0xd3, - 0x6f, 0x15, 0xd0, 0x32, 0xd4, 0xd9, 0x58, 0xbd, 0xb3, 0xa7, 0xbc, 0xb3, 0xd9, 0x6f, 0x15, 0x23, - 0xa4, 0x83, 0xee, 0xee, 0xed, 0xae, 0xd2, 0x2a, 0xc9, 0x2f, 0x11, 0xec, 0x9f, 0x52, 0x5d, 0x86, - 0x28, 0x5f, 0x88, 0xa0, 0x7c, 0xf9, 0xd3, 0x3c, 0x48, 0xe9, 0x25, 0x23, 0x7a, 0x3b, 0x61, 0xf8, - 0xc6, 0x39, 0xea, 0xcd, 0x84, 0xf5, 0xe8, 0x29, 0x68, 0x38, 0xf8, 0x08, 0x7b, 0x83, 0x11, 0x2b, - 0x61, 0x59, 0x9e, 0xae, 0x2b, 0x75, 0x4e, 0xa5, 0x42, 0x2e, 0x63, 0xfb, 0x00, 0x0f, 0x3c, 0x95, - 0x45, 0x31, 0xb6, 0x5f, 0x45, 0xc2, 0x46, 0xa8, 0x07, 0x8c, 0x28, 0xbf, 0x7f, 0x2e, 0x5f, 0x8a, - 0x50, 0x52, 0xba, 0x7d, 0xe5, 0x87, 0xad, 0x02, 0x42, 0xd0, 0xa0, 0x43, 0xf5, 0x60, 0x77, 0x73, - 0xff, 0xa0, 0xb7, 0x47, 0x7c, 0x79, 0x01, 0x9a, 0xbe, 0x2f, 0x7d, 0x62, 0x49, 0xde, 0x87, 0xcb, - 0x29, 0xf5, 0xee, 0x37, 0x6c, 0x74, 0xc8, 0xbf, 0x16, 0xa2, 0x2a, 0xe3, 0x4d, 0x85, 0xb7, 0x12, - 0x9e, 0x5e, 0xcf, 0x5a, 0x25, 0x27, 0xdd, 0x2c, 0x41, 0x15, 0xf3, 0xfe, 0x1d, 0x75, 0xf0, 0x92, - 0x12, 0xcc, 0xe5, 0x17, 0x17, 0x3b, 0x2d, 0xdc, 0x75, 0x79, 0xf9, 0xdf, 0x02, 0x34, 0x13, 0xd1, - 0x05, 0x6d, 0x40, 0x89, 0x01, 0xc1, 0xb4, 0xdf, 0x9e, 0x34, 0x38, 0xf2, 0x50, 0xc4, 0x58, 0xd1, - 0xeb, 0xb1, 0x25, 0xcd, 0x44, 0x31, 0xe6, 0x2c, 0xbf, 0xe9, 0xc8, 0x45, 0x03, 0x09, 0xf4, 0x06, - 0x88, 0x41, 0x98, 0xe4, 0xdd, 0x87, 0x27, 0x67, 0xc5, 0x83, 0x00, 0xcb, 0xe5, 0x43, 0x19, 0x74, - 0x2b, 0xac, 0xcf, 0x8b, 0xb3, 0xf0, 0x93, 0x8b, 0x33, 0x06, 0x2e, 0xec, 0xf3, 0xcb, 0x1d, 0xa8, - 0x45, 0xec, 0x41, 0x8f, 0x83, 0x38, 0xd1, 0x4e, 0x78, 0xab, 0x9a, 0x35, 0x1b, 0xab, 0x13, 0xed, - 0x84, 0x75, 0xa9, 0x2f, 0x43, 0x85, 0x3c, 0x1c, 0x6a, 0x2e, 0x6f, 0x5f, 0x95, 0x27, 0xda, 0xc9, - 0x5b, 0x9a, 0x2b, 0xbf, 0x07, 0x8d, 0x78, 0x9b, 0x96, 0x9c, 0x45, 0xc7, 0x9a, 0x9a, 0x3a, 0xd5, - 0x51, 0x52, 0xd8, 0x04, 0xdd, 0x84, 0xd2, 0xb1, 0xc5, 0x22, 0xfd, 0xfc, 0xa0, 0x75, 0xdf, 0xf2, - 0x70, 0xa4, 0xcd, 0xcb, 0xb8, 0xe5, 0x47, 0x50, 0xa2, 0x91, 0x9b, 0x84, 0x52, 0xda, 0x70, 0xe5, - 0xd8, 0x84, 0x8c, 0xd1, 0x7b, 0x00, 0x9a, 0xe7, 0x39, 0xc6, 0xe1, 0x34, 0x54, 0xbc, 0x3a, 0x3f, - 0xf2, 0x6f, 0xfa, 0x7c, 0x5b, 0x57, 0x79, 0x0a, 0xb8, 0x18, 0x8a, 0x46, 0xd2, 0x40, 0x44, 0xa1, - 0xbc, 0x0b, 0x8d, 0xb8, 0x6c, 0xf4, 0xd7, 0xc7, 0xd2, 0x9c, 0x5f, 0x1f, 0x41, 0x25, 0x1a, 0xd4, - 0xb1, 0x05, 0xd6, 0x5c, 0xa7, 0x13, 0xf9, 0x63, 0x01, 0xaa, 0xfd, 0x13, 0xbe, 0x47, 0x53, 0xfa, - 0xba, 0xa1, 0x68, 0x3e, 0xda, 0xc5, 0x64, 0x8d, 0xe2, 0x42, 0xd0, 0x7e, 0x7e, 0x33, 0x38, 0x50, - 0xc5, 0xac, 0x6d, 0x0f, 0xbf, 0x5f, 0xc7, 0xc3, 0xf5, 0x6b, 0x20, 0x06, 0xbb, 0x8a, 0x80, 0x3c, - 0x4d, 0xd7, 0x1d, 0xec, 0xba, 0xdc, 0x36, 0x7f, 0x4a, 0x7f, 0x13, 0x58, 0x1f, 0xf1, 0x3e, 0x69, - 0x41, 0x61, 0x13, 0x59, 0x87, 0x66, 0x22, 0xe7, 0xa3, 0xd7, 0xa0, 0x62, 0x4f, 0x0f, 0x55, 0xdf, - 0x3d, 0x89, 0xc3, 0xe3, 0x97, 0xde, 0xd3, 0xc3, 0xb1, 0x31, 0xb8, 0x8b, 0x4f, 0xfd, 0xc5, 0xd8, - 0xd3, 0xc3, 0xbb, 0xcc, 0x8b, 0xec, 0x2d, 0xf9, 0xe8, 0x5b, 0x8e, 0xa1, 0xea, 0x6f, 0x0a, 0xf4, - 0xbd, 0xe8, 0x39, 0xf1, 0x7f, 0x1e, 0xa5, 0xd6, 0x21, 0x5c, 0x7d, 0xe4, 0x98, 0xdc, 0x80, 0x65, - 0xd7, 0x18, 0x9a, 0x58, 0x57, 0x43, 0x98, 0x49, 0xdf, 0x56, 0x55, 0x9a, 0xec, 0xc1, 0x8e, 0x8f, - 0x31, 0xe5, 0x7f, 0x0a, 0x50, 0xf5, 0x0f, 0x2c, 0x7a, 0x29, 0xb2, 0xef, 0x1a, 0x73, 0x6a, 0x01, - 0x9f, 0x31, 0xec, 0xf4, 0xc7, 0xd7, 0x9a, 0x3f, 0xff, 0x5a, 0xd3, 0x7e, 0xd9, 0xf8, 0xfd, 0xde, - 0xe2, 0xb9, 0xff, 0x9d, 0xbd, 0x00, 0xc8, 0xb3, 0x3c, 0x6d, 0xac, 0x1e, 0x5b, 0x9e, 0x61, 0x0e, - 0x55, 0xe6, 0x6c, 0x56, 0x8e, 0xb6, 0xe8, 0x93, 0xfb, 0xf4, 0xc1, 0x3e, 0xf5, 0xfb, 0x4f, 0x05, - 0xa8, 0x06, 0xd5, 0xc1, 0x79, 0x1b, 0xf7, 0x97, 0xa0, 0xcc, 0x13, 0x20, 0xeb, 0xdc, 0xf3, 0x59, - 0xf0, 0x0f, 0xa9, 0x18, 0xf9, 0x87, 0x24, 0x41, 0x75, 0x82, 0x3d, 0x8d, 0xe6, 0x19, 0x86, 0xf4, - 0x83, 0xf9, 0x8d, 0x5b, 0x50, 0x8b, 0xfc, 0x43, 0x21, 0x27, 0x6f, 0xb7, 0xfb, 0x6e, 0x2b, 0x27, - 0x55, 0x3e, 0xfe, 0xec, 0x5a, 0x61, 0x17, 0x7f, 0x44, 0xf6, 0xac, 0xd2, 0xed, 0xf4, 0xba, 0x9d, - 0xbb, 0x2d, 0x41, 0xaa, 0x7d, 0xfc, 0xd9, 0xb5, 0x8a, 0x82, 0x69, 0x67, 0xf0, 0x46, 0x0f, 0x96, - 0xa2, 0x5f, 0x25, 0x9e, 0x0e, 0x10, 0x34, 0x6e, 0xdf, 0xdb, 0xdf, 0xd9, 0xee, 0x6c, 0xf6, 0xbb, - 0xea, 0xfd, 0xbd, 0x7e, 0xb7, 0x25, 0xa0, 0xcb, 0x70, 0x61, 0x67, 0xfb, 0xad, 0x5e, 0x5f, 0xed, - 0xec, 0x6c, 0x77, 0x77, 0xfb, 0xea, 0x66, 0xbf, 0xbf, 0xd9, 0xb9, 0xdb, 0xca, 0x6f, 0xfc, 0xa1, - 0x06, 0xcd, 0xcd, 0xad, 0xce, 0x36, 0xc9, 0xff, 0xc6, 0x40, 0xe3, 0x9d, 0xd7, 0x22, 0x6d, 0xb4, - 0x9c, 0x79, 0x27, 0x46, 0x3a, 0xbb, 0xf1, 0x8c, 0xee, 0x40, 0x89, 0xf6, 0x60, 0xd0, 0xd9, 0x97, - 0x64, 0xa4, 0x05, 0x9d, 0x68, 0xb2, 0x18, 0x7a, 0x3c, 0xce, 0xbc, 0x35, 0x23, 0x9d, 0xdd, 0x98, - 0x46, 0x0a, 0x88, 0x61, 0x27, 0x64, 0xf1, 0x2d, 0x1a, 0x29, 0x43, 0xb3, 0x9a, 0xe8, 0x0c, 0x31, - 0xd5, 0xe2, 0x5b, 0x25, 0x52, 0x86, 0x00, 0x86, 0x76, 0xa0, 0xe2, 0xc3, 0xe0, 0x45, 0xf7, 0x5c, - 0xa4, 0x85, 0x8d, 0x64, 0xf2, 0x09, 0x58, 0xbb, 0xe2, 0xec, 0x4b, 0x3b, 0xd2, 0x82, 0xae, 0x38, - 0xda, 0x86, 0x32, 0xaf, 0xf6, 0x17, 0xdc, 0x5d, 0x91, 0x16, 0x35, 0x86, 0x89, 0xd3, 0xc2, 0x16, - 0xd2, 0xe2, 0xab, 0x48, 0x52, 0x86, 0x86, 0x3f, 0xba, 0x07, 0x10, 0x69, 0x4e, 0x64, 0xb8, 0x63, - 0x24, 0x65, 0x69, 0xe4, 0xa3, 0x3d, 0xa8, 0x06, 0x58, 0x71, 0xe1, 0x8d, 0x1f, 0x69, 0x71, 0x47, - 0x1d, 0x3d, 0x80, 0x7a, 0x1c, 0xe9, 0x64, 0xbb, 0xc7, 0x23, 0x65, 0x6c, 0x95, 0x13, 0xfd, 0x71, - 0xd8, 0x93, 0xed, 0x5e, 0x8f, 0x94, 0xb1, 0x73, 0x8e, 0x3e, 0x80, 0xe5, 0x59, 0x58, 0x92, 0xfd, - 0x9a, 0x8f, 0x74, 0x8e, 0x5e, 0x3a, 0x9a, 0x00, 0x9a, 0x03, 0x67, 0xce, 0x71, 0xeb, 0x47, 0x3a, - 0x4f, 0x6b, 0x1d, 0xe9, 0xd0, 0x4c, 0x62, 0x84, 0xac, 0xb7, 0x80, 0xa4, 0xcc, 0x6d, 0x76, 0xf6, - 0x96, 0x38, 0x6c, 0xc8, 0x7a, 0x2b, 0x48, 0xca, 0xdc, 0x75, 0xdf, 0xea, 0x7e, 0xfe, 0xd5, 0x8a, - 0xf0, 0xc5, 0x57, 0x2b, 0xc2, 0x5f, 0xbe, 0x5a, 0x11, 0x3e, 0xf9, 0x7a, 0x25, 0xf7, 0xc5, 0xd7, - 0x2b, 0xb9, 0x3f, 0x7e, 0xbd, 0x92, 0xfb, 0xd1, 0xf3, 0x43, 0xc3, 0x1b, 0x4d, 0x0f, 0xd7, 0x06, - 0xd6, 0x64, 0x3d, 0x7a, 0xfd, 0x72, 0xde, 0x95, 0xd0, 0xc3, 0x32, 0x4d, 0xba, 0x2f, 0xff, 0x27, - 0x00, 0x00, 0xff, 0xff, 0x12, 0x7d, 0x76, 0xbd, 0x32, 0x2a, 0x00, 0x00, + // 3097 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcd, 0x73, 0xdb, 0xd6, + 0x11, 0xe7, 0x37, 0x89, 0xa5, 0xf8, 0xa1, 0x67, 0xc7, 0xa6, 0x11, 0x47, 0x72, 0xe0, 0xc9, 0x97, + 0x93, 0x48, 0x8d, 0x32, 0x4e, 0x93, 0x26, 0x6d, 0x22, 0xd2, 0x74, 0xa8, 0x58, 0x91, 0x54, 0x88, + 0x76, 0xfa, 0x15, 0x23, 0x20, 0xf1, 0x44, 0x22, 0x26, 0x01, 0x04, 0x00, 0x15, 0xc9, 0xc7, 0x4e, + 0x3b, 0x9d, 0xc9, 0x29, 0x33, 0xbd, 0xe4, 0x92, 0x7b, 0x2f, 0xfd, 0x13, 0xda, 0x73, 0x66, 0xda, + 0x99, 0xe6, 0xd8, 0x43, 0x27, 0xed, 0x24, 0x3d, 0xf5, 0x1f, 0xe8, 0xf4, 0xd0, 0x69, 0xe7, 0x7d, + 0xe0, 0x93, 0x84, 0x08, 0x39, 0xbd, 0xf5, 0xf6, 0xde, 0x62, 0x77, 0xf1, 0x76, 0xf1, 0xde, 0xee, + 0xfe, 0x16, 0x0f, 0x1e, 0x77, 0xb1, 0xa1, 0x61, 0x7b, 0xaa, 0x1b, 0xee, 0xa6, 0x3a, 0x18, 0xea, + 0x9b, 0xee, 0xa9, 0x85, 0x9d, 0x0d, 0xcb, 0x36, 0x5d, 0x13, 0x35, 0x82, 0x87, 0x1b, 0xe4, 0xa1, + 0xf8, 0x44, 0x88, 0x7b, 0x68, 0x9f, 0x5a, 0xae, 0xb9, 0x69, 0xd9, 0xa6, 0x79, 0xc4, 0xf8, 0xc5, + 0xab, 0xa1, 0xc7, 0x54, 0x4f, 0x58, 0x5b, 0xe4, 0x29, 0x17, 0x7e, 0x80, 0x4f, 0xbd, 0xa7, 0x4f, + 0xcc, 0xc9, 0x5a, 0xaa, 0xad, 0x4e, 0xbd, 0xc7, 0xeb, 0x23, 0xd3, 0x1c, 0x4d, 0xf0, 0x26, 0x9d, + 0x0d, 0x66, 0x47, 0x9b, 0xae, 0x3e, 0xc5, 0x8e, 0xab, 0x4e, 0x2d, 0xce, 0x70, 0x71, 0x64, 0x8e, + 0x4c, 0x3a, 0xdc, 0x24, 0x23, 0x4e, 0x5d, 0x8b, 0x8b, 0x69, 0x33, 0x5b, 0x75, 0x75, 0xd3, 0x60, + 0xcf, 0xa5, 0xdf, 0x09, 0x50, 0x96, 0xf1, 0x47, 0x33, 0xec, 0xb8, 0x68, 0x0b, 0x0a, 0x78, 0x38, + 0x36, 0x5b, 0xd9, 0x6b, 0xd9, 0x67, 0xab, 0x5b, 0x57, 0x37, 0x62, 0xc6, 0x6f, 0x70, 0xbe, 0xee, + 0x70, 0x6c, 0xf6, 0x32, 0x32, 0xe5, 0x45, 0x37, 0xa1, 0x78, 0x34, 0x99, 0x39, 0xe3, 0x56, 0x8e, + 0x0a, 0x3d, 0x91, 0x24, 0x74, 0x9b, 0x30, 0xf5, 0x32, 0x32, 0xe3, 0x26, 0xaf, 0xd2, 0x8d, 0x23, + 0xb3, 0x95, 0x3f, 0xfb, 0x55, 0x3b, 0xc6, 0x11, 0x7d, 0x15, 0xe1, 0x45, 0x6d, 0x00, 0x07, 0xbb, + 0x8a, 0x69, 0x91, 0xe5, 0xb7, 0x0a, 0x54, 0xf2, 0xc9, 0x24, 0xc9, 0x43, 0xec, 0xee, 0x53, 0xc6, + 0x5e, 0x46, 0x16, 0x1c, 0x6f, 0x42, 0x74, 0xe8, 0x86, 0xee, 0x2a, 0xc3, 0xb1, 0xaa, 0x1b, 0xad, + 0xe2, 0xd9, 0x3a, 0x76, 0x0c, 0xdd, 0xed, 0x10, 0x46, 0xa2, 0x43, 0xf7, 0x26, 0xc4, 0xe4, 0x8f, + 0x66, 0xd8, 0x3e, 0x6d, 0x95, 0xce, 0x36, 0xf9, 0x87, 0x84, 0x89, 0x98, 0x4c, 0xb9, 0x51, 0x17, + 0xaa, 0x03, 0x3c, 0xd2, 0x0d, 0x65, 0x30, 0x31, 0x87, 0x0f, 0x5a, 0x65, 0x2a, 0x2c, 0x25, 0x09, + 0xb7, 0x09, 0x6b, 0x9b, 0x70, 0xf6, 0x32, 0x32, 0x0c, 0xfc, 0x19, 0x7a, 0x03, 0x2a, 0xc3, 0x31, + 0x1e, 0x3e, 0x50, 0xdc, 0x93, 0x56, 0x85, 0xea, 0x58, 0x4f, 0xd2, 0xd1, 0x21, 0x7c, 0xfd, 0x93, + 0x5e, 0x46, 0x2e, 0x0f, 0xd9, 0x90, 0xd8, 0xaf, 0xe1, 0x89, 0x7e, 0x8c, 0x6d, 0x22, 0x2f, 0x9c, + 0x6d, 0xff, 0x2d, 0xc6, 0x49, 0x35, 0x08, 0x9a, 0x37, 0x41, 0x6f, 0x82, 0x80, 0x0d, 0x8d, 0x9b, + 0x01, 0x54, 0xc5, 0xb5, 0xc4, 0xbd, 0x62, 0x68, 0x9e, 0x11, 0x15, 0xcc, 0xc7, 0xe8, 0x55, 0x28, + 0x0d, 0xcd, 0xe9, 0x54, 0x77, 0x5b, 0x55, 0x2a, 0xbd, 0x96, 0x68, 0x00, 0xe5, 0xea, 0x65, 0x64, + 0xce, 0x8f, 0xf6, 0xa0, 0x3e, 0xd1, 0x1d, 0x57, 0x71, 0x0c, 0xd5, 0x72, 0xc6, 0xa6, 0xeb, 0xb4, + 0x56, 0xa8, 0x86, 0xa7, 0x92, 0x34, 0xec, 0xea, 0x8e, 0x7b, 0xe8, 0x31, 0xf7, 0x32, 0x72, 0x6d, + 0x12, 0x26, 0x10, 0x7d, 0xe6, 0xd1, 0x11, 0xb6, 0x7d, 0x85, 0xad, 0xda, 0xd9, 0xfa, 0xf6, 0x09, + 0xb7, 0x27, 0x4f, 0xf4, 0x99, 0x61, 0x02, 0xfa, 0x29, 0x5c, 0x98, 0x98, 0xaa, 0xe6, 0xab, 0x53, + 0x86, 0xe3, 0x99, 0xf1, 0xa0, 0x55, 0xa7, 0x4a, 0x9f, 0x4b, 0x5c, 0xa4, 0xa9, 0x6a, 0x9e, 0x8a, + 0x0e, 0x11, 0xe8, 0x65, 0xe4, 0xd5, 0x49, 0x9c, 0x88, 0xee, 0xc3, 0x45, 0xd5, 0xb2, 0x26, 0xa7, + 0x71, 0xed, 0x0d, 0xaa, 0xfd, 0x46, 0x92, 0xf6, 0x6d, 0x22, 0x13, 0x57, 0x8f, 0xd4, 0x39, 0x2a, + 0xea, 0x43, 0xd3, 0xb2, 0xb1, 0xa5, 0xda, 0x58, 0xb1, 0x6c, 0xd3, 0x32, 0x1d, 0x75, 0xd2, 0x6a, + 0x52, 0xdd, 0xcf, 0x24, 0xe9, 0x3e, 0x60, 0xfc, 0x07, 0x9c, 0xbd, 0x97, 0x91, 0x1b, 0x56, 0x94, + 0xc4, 0xb4, 0x9a, 0x43, 0xec, 0x38, 0x81, 0xd6, 0xd5, 0x65, 0x5a, 0x29, 0x7f, 0x54, 0x6b, 0x84, + 0xd4, 0x2e, 0x43, 0xf1, 0x58, 0x9d, 0xcc, 0xb0, 0xf4, 0x0c, 0x54, 0x43, 0x61, 0x09, 0xb5, 0xa0, + 0x3c, 0xc5, 0x8e, 0xa3, 0x8e, 0x30, 0x8d, 0x62, 0x82, 0xec, 0x4d, 0xa5, 0x3a, 0xac, 0x84, 0x43, + 0x91, 0xf4, 0x9b, 0x2c, 0xac, 0xf4, 0xf5, 0x29, 0x36, 0x67, 0xae, 0x43, 0xc2, 0x0c, 0xda, 0x85, + 0x86, 0xcb, 0xe6, 0x7c, 0xa1, 0x98, 0x07, 0xc2, 0x2b, 0x1b, 0x2c, 0x86, 0x6e, 0x78, 0x31, 0x74, + 0xe3, 0x16, 0x8f, 0xa1, 0xed, 0xca, 0x17, 0x5f, 0xad, 0x67, 0x3e, 0xfb, 0xeb, 0x7a, 0x56, 0xae, + 0x73, 0x59, 0xb6, 0x42, 0x8c, 0xde, 0x01, 0x8f, 0xa2, 0xf0, 0xbd, 0x9e, 0x4b, 0xaf, 0xac, 0xc6, + 0x45, 0xd9, 0xfe, 0x97, 0xa6, 0xbe, 0x8d, 0x74, 0xa1, 0x2d, 0x28, 0x1f, 0x63, 0xdb, 0x21, 0x41, + 0x90, 0xdb, 0xc8, 0xa7, 0xe8, 0x3a, 0xd4, 0xe8, 0xa9, 0x54, 0xbc, 0xe7, 0xe4, 0x9d, 0x05, 0x79, + 0x85, 0x12, 0xef, 0x71, 0xa6, 0x75, 0xa8, 0x5a, 0x5b, 0x96, 0xcf, 0x92, 0xa7, 0x2c, 0x60, 0x6d, + 0x59, 0x9c, 0x41, 0xfa, 0x1e, 0x34, 0xe3, 0x41, 0x14, 0x35, 0x21, 0xff, 0x00, 0x9f, 0xf2, 0xf7, + 0x91, 0x21, 0xba, 0xc8, 0xbf, 0x00, 0x7d, 0x87, 0x20, 0xf3, 0xcf, 0xf1, 0x87, 0x9c, 0x2f, 0xec, + 0x47, 0x4f, 0xf4, 0x2a, 0x14, 0x88, 0x41, 0xdc, 0x9d, 0xe2, 0x9c, 0x07, 0xfa, 0x5e, 0x26, 0x63, + 0x2e, 0xf8, 0x94, 0xb8, 0x80, 0x4a, 0xa0, 0x2b, 0x24, 0xd8, 0xa9, 0xba, 0xa1, 0xe8, 0x1a, 0x7f, + 0x4f, 0x99, 0xce, 0x77, 0x34, 0x74, 0x07, 0x9a, 0x43, 0xd3, 0x70, 0xb0, 0xe1, 0xcc, 0x1c, 0x85, + 0x65, 0x4a, 0x9e, 0x4d, 0xe6, 0x83, 0x51, 0xc7, 0x63, 0x3c, 0xa0, 0x7c, 0x72, 0x63, 0x18, 0x25, + 0xa0, 0xdb, 0x00, 0xc7, 0xea, 0x44, 0xd7, 0x54, 0xd7, 0xb4, 0x9d, 0x56, 0xe1, 0x5a, 0x7e, 0xa1, + 0x9a, 0x7b, 0x1e, 0xcb, 0x5d, 0x4b, 0x53, 0x5d, 0xdc, 0x2e, 0x90, 0xd5, 0xca, 0x21, 0x49, 0xf4, + 0x34, 0x34, 0x54, 0xcb, 0x52, 0x1c, 0x57, 0x75, 0xb1, 0x32, 0x38, 0x75, 0xb1, 0x43, 0x73, 0xcc, + 0x8a, 0x5c, 0x53, 0x2d, 0xeb, 0x90, 0x50, 0xdb, 0x84, 0x88, 0x9e, 0x82, 0x3a, 0xc9, 0x27, 0xba, + 0x3a, 0x51, 0xc6, 0x58, 0x1f, 0x8d, 0x5d, 0x9a, 0x4b, 0xf2, 0x72, 0x8d, 0x53, 0x7b, 0x94, 0x28, + 0x69, 0xfe, 0x9e, 0xa5, 0xb9, 0x04, 0x21, 0x28, 0x68, 0xaa, 0xab, 0x52, 0x47, 0xae, 0xc8, 0x74, + 0x4c, 0x68, 0x96, 0xea, 0x8e, 0xb9, 0x7b, 0xe8, 0x18, 0x5d, 0x82, 0x12, 0x57, 0x9b, 0xa7, 0x6a, + 0xf9, 0x8c, 0x7c, 0x33, 0xcb, 0x36, 0x8f, 0x31, 0x4d, 0x9e, 0x15, 0x99, 0x4d, 0xa4, 0x5f, 0xe4, + 0x60, 0x75, 0x2e, 0xeb, 0x10, 0xbd, 0x63, 0xd5, 0x19, 0x7b, 0xef, 0x22, 0x63, 0xf4, 0x0a, 0xd1, + 0xab, 0x6a, 0xd8, 0xe6, 0x9b, 0xb9, 0x15, 0x76, 0x11, 0xab, 0x74, 0x7a, 0xf4, 0x39, 0x77, 0x0d, + 0xe7, 0x46, 0xfb, 0xd0, 0x9c, 0xa8, 0x8e, 0x77, 0x12, 0x94, 0x50, 0xe6, 0x9f, 0xcf, 0x5d, 0xbb, + 0xaa, 0x17, 0xf7, 0xc9, 0x66, 0xe7, 0x8a, 0xea, 0x93, 0x08, 0x15, 0xc9, 0x70, 0x71, 0x70, 0xfa, + 0x50, 0x35, 0x5c, 0xdd, 0xc0, 0xca, 0xdc, 0x97, 0xbb, 0x32, 0xa7, 0xb4, 0x7b, 0xac, 0x6b, 0xd8, + 0x18, 0x7a, 0x9f, 0xec, 0x82, 0x2f, 0xec, 0x7f, 0x52, 0x47, 0x92, 0xa1, 0x1e, 0xcd, 0x9b, 0xa8, + 0x0e, 0x39, 0xf7, 0x84, 0x3b, 0x20, 0xe7, 0x9e, 0xa0, 0xef, 0x40, 0x81, 0x18, 0x49, 0x8d, 0xaf, + 0x2f, 0x28, 0x5a, 0xb8, 0x5c, 0xff, 0xd4, 0xc2, 0x32, 0xe5, 0x94, 0x24, 0xff, 0x34, 0xf8, 0xb9, + 0x34, 0xae, 0x55, 0x7a, 0x0e, 0x1a, 0xb1, 0x64, 0x19, 0xfa, 0x7e, 0xd9, 0xf0, 0xf7, 0x93, 0x1a, + 0x50, 0x8b, 0x64, 0x46, 0xe9, 0x12, 0x5c, 0x5c, 0x94, 0xe8, 0xa4, 0xb1, 0x4f, 0x8f, 0x24, 0x2c, + 0x74, 0x13, 0x2a, 0x7e, 0xa6, 0xf3, 0x82, 0x5b, 0xdc, 0x0a, 0x8f, 0x59, 0xf6, 0x59, 0xc9, 0x31, + 0x24, 0xdb, 0x9a, 0xee, 0x87, 0x1c, 0x5d, 0x78, 0x59, 0xb5, 0xac, 0x9e, 0xea, 0x8c, 0xa5, 0x0f, + 0xa0, 0x95, 0x94, 0xc5, 0x62, 0x66, 0x14, 0xfc, 0x6d, 0x78, 0x09, 0x4a, 0x47, 0xa6, 0x3d, 0x55, + 0x59, 0x4c, 0xac, 0xc9, 0x7c, 0x46, 0xb6, 0x27, 0xcb, 0x68, 0x79, 0x4a, 0x66, 0x13, 0x49, 0x81, + 0x2b, 0x89, 0x99, 0x8c, 0x88, 0xe8, 0x86, 0x86, 0x99, 0x3f, 0x6b, 0x32, 0x9b, 0x04, 0x8a, 0xd8, + 0x62, 0xd9, 0x84, 0xbc, 0xd6, 0xa1, 0xb6, 0x52, 0xfd, 0x82, 0xcc, 0x67, 0xd2, 0xdf, 0xb3, 0x70, + 0x69, 0x71, 0x3e, 0x43, 0x37, 0x01, 0x58, 0x40, 0xf5, 0x8f, 0x5d, 0x75, 0xeb, 0xd2, 0xfc, 0xa6, + 0xbf, 0xa5, 0xba, 0xaa, 0x2c, 0x50, 0x4e, 0x32, 0x24, 0x61, 0x20, 0x10, 0x53, 0x1c, 0xfd, 0x21, + 0xdb, 0x33, 0x79, 0xb9, 0xe6, 0xf3, 0x1c, 0xea, 0x0f, 0xa3, 0xe1, 0x2d, 0x1f, 0x0d, 0x6f, 0x81, + 0xef, 0x0a, 0x91, 0x23, 0xec, 0xc5, 0xd2, 0xe2, 0x79, 0x63, 0xa9, 0xf4, 0xab, 0xb0, 0x99, 0x91, + 0x6c, 0x1a, 0x3a, 0xd7, 0xd9, 0x73, 0x9d, 0xeb, 0xa8, 0x7b, 0x72, 0x29, 0xdd, 0x23, 0xfd, 0x1a, + 0xa0, 0x22, 0x63, 0xc7, 0x22, 0x41, 0x18, 0xb5, 0x41, 0xc0, 0x27, 0x43, 0xcc, 0x8a, 0xfa, 0x6c, + 0x62, 0x51, 0xcc, 0xb8, 0xbb, 0x1e, 0x27, 0xa9, 0x48, 0x7d, 0x31, 0xf4, 0x32, 0x07, 0x2e, 0xc9, + 0x18, 0x84, 0x8b, 0x87, 0x91, 0xcb, 0x2b, 0x1e, 0x72, 0xc9, 0x27, 0x16, 0xa1, 0x4c, 0x2a, 0x06, + 0x5d, 0x5e, 0xe6, 0xd0, 0xa5, 0xb0, 0xe4, 0x65, 0x11, 0xec, 0xd2, 0x89, 0x60, 0x97, 0xe2, 0x12, + 0x33, 0x13, 0xc0, 0x4b, 0x27, 0x02, 0x5e, 0x4a, 0x4b, 0x94, 0x24, 0xa0, 0x97, 0x57, 0x3c, 0xf4, + 0x52, 0x5e, 0x62, 0x76, 0x0c, 0xbe, 0xdc, 0x8e, 0xc2, 0x17, 0x06, 0x3d, 0xae, 0x27, 0x4a, 0x27, + 0xe2, 0x97, 0xef, 0x87, 0xf0, 0x8b, 0x90, 0x08, 0x1e, 0x98, 0x92, 0x05, 0x00, 0xa6, 0x13, 0x01, + 0x30, 0xb0, 0xc4, 0x07, 0x09, 0x08, 0xe6, 0xad, 0x30, 0x82, 0xa9, 0x26, 0x82, 0x20, 0xbe, 0x69, + 0x16, 0x41, 0x98, 0xd7, 0x7c, 0x08, 0xb3, 0x92, 0x88, 0xc1, 0xb8, 0x0d, 0x71, 0x0c, 0xb3, 0x3f, + 0x87, 0x61, 0x18, 0xe6, 0x78, 0x3a, 0x51, 0xc5, 0x12, 0x10, 0xb3, 0x3f, 0x07, 0x62, 0xea, 0x4b, + 0x14, 0x2e, 0x41, 0x31, 0x3f, 0x5b, 0x8c, 0x62, 0x92, 0x71, 0x06, 0x5f, 0x66, 0x3a, 0x18, 0xa3, + 0x24, 0xc0, 0x18, 0x06, 0x35, 0x9e, 0x4f, 0x54, 0x9f, 0x1a, 0xc7, 0xdc, 0x5d, 0x80, 0x63, 0x18, + 0xe2, 0x78, 0x36, 0x51, 0x79, 0x0a, 0x20, 0x73, 0x77, 0x01, 0x90, 0x41, 0x4b, 0xd5, 0xa6, 0x47, + 0x32, 0xcf, 0x91, 0x2a, 0x2c, 0x16, 0xe6, 0x48, 0x26, 0xc3, 0xb6, 0x6d, 0xda, 0xbc, 0xf2, 0x66, + 0x13, 0xe9, 0x59, 0x52, 0x17, 0x06, 0x21, 0xed, 0x0c, 0xd4, 0x43, 0x2b, 0x86, 0x50, 0x18, 0x93, + 0xfe, 0x95, 0x0d, 0x64, 0x69, 0x29, 0x15, 0xae, 0x29, 0x05, 0x5e, 0x53, 0x86, 0x10, 0x46, 0x2e, + 0x8a, 0x30, 0xd6, 0xa1, 0x4a, 0x2a, 0x81, 0x18, 0x78, 0x50, 0x2d, 0x0f, 0x3c, 0xa0, 0x1b, 0xb0, + 0x4a, 0x4b, 0x3d, 0x96, 0x17, 0x22, 0x29, 0xac, 0x41, 0x1e, 0xb0, 0xa3, 0xc4, 0x72, 0xd9, 0x8b, + 0x70, 0x21, 0xc4, 0xeb, 0x57, 0x18, 0xac, 0x62, 0x6e, 0xfa, 0xdc, 0xdb, 0xac, 0xd4, 0x40, 0x6f, + 0x42, 0x85, 0xe3, 0x22, 0x27, 0xb1, 0xf5, 0x12, 0x46, 0x74, 0x3c, 0x59, 0xf9, 0x42, 0xd2, 0xbb, + 0x81, 0x87, 0x03, 0x64, 0x83, 0xa0, 0x30, 0x34, 0x35, 0xcc, 0x0b, 0x08, 0x3a, 0x26, 0x68, 0x67, + 0x62, 0x8e, 0x78, 0x4a, 0x26, 0x43, 0xc2, 0xe5, 0x07, 0x7d, 0x81, 0xc5, 0x74, 0x5e, 0x37, 0xc7, + 0x82, 0xed, 0x42, 0x5c, 0x92, 0xfd, 0xdf, 0xe0, 0x92, 0xdc, 0x23, 0xe3, 0x92, 0x70, 0x01, 0x97, + 0x8f, 0x14, 0x70, 0x11, 0xaf, 0x16, 0x1e, 0xc5, 0xab, 0xff, 0xcc, 0x06, 0x7b, 0xcc, 0x87, 0x29, + 0x8f, 0xe6, 0xd2, 0xa0, 0x9c, 0x2b, 0xd2, 0x1d, 0xc3, 0xcb, 0x39, 0x0e, 0x3e, 0x4b, 0x74, 0xe1, + 0x51, 0xf0, 0x59, 0x66, 0x05, 0x1e, 0x9d, 0xa0, 0x57, 0x41, 0xa0, 0xcd, 0x58, 0xc5, 0xb4, 0x1c, + 0x9e, 0xa0, 0x1e, 0x0f, 0xdb, 0xc2, 0x7a, 0xae, 0x1b, 0x07, 0x84, 0x67, 0xdf, 0x72, 0xe4, 0x8a, + 0xc5, 0x47, 0xa1, 0x6a, 0x4b, 0x88, 0x54, 0x5b, 0x57, 0x41, 0x20, 0xab, 0x77, 0x2c, 0x75, 0x88, + 0x69, 0xb2, 0x11, 0xe4, 0x80, 0x20, 0xdd, 0x07, 0x34, 0x9f, 0xee, 0x50, 0x0f, 0x4a, 0xf8, 0x18, + 0x1b, 0x2e, 0xf9, 0xec, 0xf9, 0x78, 0x41, 0xc4, 0xd1, 0x08, 0x36, 0xdc, 0x76, 0x8b, 0xf8, 0xf1, + 0x1f, 0x5f, 0xad, 0x37, 0x19, 0xf7, 0x0b, 0xe6, 0x54, 0x77, 0xf1, 0xd4, 0x72, 0x4f, 0x65, 0x2e, + 0x2f, 0xfd, 0x25, 0x47, 0xa0, 0x41, 0x24, 0x15, 0x2e, 0xf4, 0xad, 0x77, 0x84, 0x73, 0x21, 0x58, + 0x98, 0xce, 0xdf, 0x6b, 0x00, 0x23, 0xd5, 0x51, 0x3e, 0x56, 0x0d, 0x17, 0x6b, 0xdc, 0xe9, 0x21, + 0x0a, 0x12, 0xa1, 0x42, 0x66, 0x33, 0x07, 0x6b, 0x1c, 0xa1, 0xfa, 0xf3, 0x90, 0x9d, 0xe5, 0x6f, + 0x67, 0x67, 0xd4, 0xcb, 0x95, 0x98, 0x97, 0x43, 0x65, 0xbb, 0x10, 0x2e, 0xdb, 0xc9, 0xda, 0x2c, + 0x5b, 0x37, 0x6d, 0xdd, 0x3d, 0xa5, 0x9f, 0x26, 0x2f, 0xfb, 0x73, 0x74, 0x1d, 0x6a, 0x53, 0x3c, + 0xb5, 0x4c, 0x73, 0xa2, 0xb0, 0xf0, 0x59, 0xa5, 0xa2, 0x2b, 0x9c, 0xd8, 0xa5, 0x51, 0xf4, 0x97, + 0xa1, 0xf3, 0x1b, 0xc0, 0xb3, 0xff, 0x3b, 0x07, 0x4b, 0x7f, 0xa4, 0x3d, 0x9b, 0x68, 0xb1, 0x83, + 0x0e, 0x61, 0xd5, 0x8f, 0x1f, 0xca, 0x8c, 0xc6, 0x15, 0x6f, 0x43, 0xa7, 0x0d, 0x40, 0xcd, 0xe3, + 0x28, 0xd9, 0x41, 0x3f, 0x82, 0xcb, 0xb1, 0xd8, 0xe8, 0xab, 0xce, 0xa5, 0x0c, 0x91, 0x8f, 0x45, + 0x43, 0xa4, 0xa7, 0x39, 0xf0, 0x55, 0xfe, 0x5b, 0xfa, 0xea, 0x5b, 0xc7, 0xc3, 0x1d, 0xa8, 0x47, + 0x6b, 0xbf, 0x85, 0xdb, 0xe7, 0x3a, 0xd4, 0x6c, 0xec, 0x12, 0xec, 0x17, 0xe9, 0xd4, 0xac, 0x30, + 0x22, 0xef, 0xff, 0x1c, 0xc0, 0x63, 0x0b, 0x6b, 0x40, 0xf4, 0x5d, 0x10, 0x82, 0xf2, 0x31, 0x9b, + 0xd0, 0xf4, 0xf0, 0x81, 0x7c, 0xc0, 0x2b, 0xfd, 0x3e, 0x1b, 0xa8, 0x8c, 0xb6, 0x06, 0xba, 0x50, + 0xb2, 0xb1, 0x33, 0x9b, 0x30, 0xb0, 0x5e, 0xdf, 0x7a, 0x31, 0x5d, 0xf5, 0x48, 0xa8, 0xb3, 0x89, + 0x2b, 0x73, 0x61, 0xe9, 0x3e, 0x94, 0x18, 0x05, 0x55, 0xa1, 0x7c, 0x77, 0xef, 0xce, 0xde, 0xfe, + 0x7b, 0x7b, 0xcd, 0x0c, 0x02, 0x28, 0x6d, 0x77, 0x3a, 0xdd, 0x83, 0x7e, 0x33, 0x8b, 0x04, 0x28, + 0x6e, 0xb7, 0xf7, 0xe5, 0x7e, 0x33, 0x47, 0xc8, 0x72, 0xf7, 0x9d, 0x6e, 0xa7, 0xdf, 0xcc, 0xa3, + 0x55, 0xa8, 0xb1, 0xb1, 0x72, 0x7b, 0x5f, 0x7e, 0x77, 0xbb, 0xdf, 0x2c, 0x84, 0x48, 0x87, 0xdd, + 0xbd, 0x5b, 0x5d, 0xb9, 0x59, 0x94, 0x5e, 0x82, 0x2b, 0x89, 0xf5, 0x66, 0x80, 0xfb, 0xb3, 0x21, + 0xdc, 0x2f, 0x7d, 0x96, 0x03, 0x31, 0xb9, 0x88, 0x44, 0xef, 0xc4, 0x0c, 0xdf, 0x3a, 0x47, 0x05, + 0x1a, 0xb3, 0x1e, 0x3d, 0x05, 0x75, 0x1b, 0x1f, 0x61, 0x77, 0x38, 0x66, 0x45, 0x2d, 0xcb, 0xd9, + 0x35, 0xb9, 0xc6, 0xa9, 0x54, 0xc8, 0x61, 0x6c, 0x1f, 0xe2, 0xa1, 0xab, 0xb0, 0x58, 0xc6, 0x76, + 0xad, 0x40, 0xd8, 0x08, 0xf5, 0x90, 0x11, 0xa5, 0x0f, 0xce, 0xe5, 0x4b, 0x01, 0x8a, 0x72, 0xb7, + 0x2f, 0xff, 0xb8, 0x99, 0x47, 0x08, 0xea, 0x74, 0xa8, 0x1c, 0xee, 0x6d, 0x1f, 0x1c, 0xf6, 0xf6, + 0x89, 0x2f, 0x2f, 0x40, 0xc3, 0xf3, 0xa5, 0x47, 0x2c, 0x4a, 0x07, 0x70, 0x39, 0xa1, 0x02, 0x7e, + 0xc4, 0xd6, 0x87, 0xf4, 0xdb, 0x6c, 0x58, 0x65, 0xb4, 0xcd, 0xf0, 0x76, 0xcc, 0xd3, 0x9b, 0x69, + 0xeb, 0xe6, 0xb8, 0x9b, 0x45, 0xa8, 0x60, 0xde, 0xd1, 0xa3, 0x0e, 0x5e, 0x91, 0xfd, 0xb9, 0xf4, + 0xe2, 0x72, 0xa7, 0x05, 0xbb, 0x2e, 0x27, 0xfd, 0x27, 0x0b, 0x8d, 0x58, 0x8c, 0x41, 0x5b, 0x50, + 0x64, 0xd0, 0x30, 0xe9, 0x47, 0x28, 0x0d, 0x91, 0x3c, 0x20, 0x31, 0x56, 0xf4, 0x46, 0x64, 0x49, + 0x73, 0xb1, 0x8c, 0x39, 0xcb, 0x6b, 0x43, 0x72, 0x51, 0x5f, 0x02, 0xbd, 0x09, 0x82, 0x1f, 0x2c, + 0x79, 0x3f, 0xe2, 0xc9, 0x79, 0x71, 0x3f, 0xcc, 0x72, 0xf9, 0x40, 0x06, 0xbd, 0x16, 0x54, 0xec, + 0x85, 0x79, 0x40, 0xca, 0xc5, 0x19, 0x03, 0x17, 0xf6, 0xf8, 0xa5, 0x0e, 0x54, 0x43, 0xf6, 0xa0, + 0xc7, 0x41, 0x98, 0xaa, 0x27, 0xbc, 0x79, 0xcd, 0xda, 0x8f, 0x95, 0xa9, 0x7a, 0xc2, 0xfa, 0xd6, + 0x97, 0xa1, 0x4c, 0x1e, 0x8e, 0x54, 0x87, 0x37, 0xb4, 0x4a, 0x53, 0xf5, 0xe4, 0x6d, 0xd5, 0x91, + 0xde, 0x87, 0x7a, 0xb4, 0x71, 0x4b, 0xce, 0xa2, 0x6d, 0xce, 0x0c, 0x8d, 0xea, 0x28, 0xca, 0x6c, + 0x82, 0x6e, 0x42, 0xf1, 0xd8, 0x64, 0xf1, 0x7e, 0x71, 0xd0, 0xba, 0x67, 0xba, 0x38, 0x14, 0x56, + 0x19, 0xb7, 0xf4, 0x10, 0x8a, 0x34, 0x7e, 0x93, 0x50, 0x4a, 0x5b, 0xb0, 0x1c, 0xad, 0x90, 0x31, + 0x7a, 0x1f, 0x40, 0x75, 0x5d, 0x5b, 0x1f, 0xcc, 0x02, 0xc5, 0xeb, 0x8b, 0xe3, 0xff, 0xb6, 0xc7, + 0xd7, 0xbe, 0xca, 0x13, 0xc1, 0xc5, 0x40, 0x34, 0x94, 0x0c, 0x42, 0x0a, 0xa5, 0x3d, 0xa8, 0x47, + 0x65, 0xc3, 0x3f, 0x43, 0x56, 0x16, 0xfc, 0x0c, 0xf1, 0xeb, 0x51, 0xbf, 0x9a, 0xcd, 0xb3, 0x76, + 0x3b, 0x9d, 0x48, 0x9f, 0x64, 0xa1, 0xd2, 0x3f, 0xe1, 0x7b, 0x34, 0xa1, 0xd3, 0x1b, 0x88, 0xe6, + 0xc2, 0x7d, 0x4d, 0xd6, 0x3a, 0xce, 0xfb, 0x0d, 0xe9, 0xb7, 0xfc, 0x03, 0x55, 0x48, 0xdb, 0x08, + 0xf1, 0x3a, 0x78, 0x3c, 0x5c, 0xbf, 0x0e, 0x82, 0xbf, 0xab, 0x08, 0xec, 0x53, 0x35, 0xcd, 0xc6, + 0x8e, 0xc3, 0x6d, 0xf3, 0xa6, 0xf4, 0xc7, 0x81, 0xf9, 0x31, 0xef, 0x9c, 0xe6, 0x65, 0x36, 0x91, + 0x34, 0x68, 0xc4, 0x32, 0x3f, 0x7a, 0x1d, 0xca, 0xd6, 0x6c, 0xa0, 0x78, 0xee, 0x89, 0x1d, 0x1e, + 0xaf, 0x00, 0x9f, 0x0d, 0x26, 0xfa, 0xf0, 0x0e, 0x3e, 0xf5, 0x16, 0x63, 0xcd, 0x06, 0x77, 0x98, + 0x17, 0xd9, 0x5b, 0x72, 0xe1, 0xb7, 0x1c, 0x43, 0xc5, 0xdb, 0x14, 0xe8, 0x07, 0xe1, 0x73, 0xe2, + 0xfd, 0x4e, 0x4a, 0xac, 0x46, 0xb8, 0xfa, 0xd0, 0x31, 0xb9, 0x01, 0xab, 0x8e, 0x3e, 0x32, 0xb0, + 0xa6, 0x04, 0xc0, 0x93, 0xbe, 0xad, 0x22, 0x37, 0xd8, 0x83, 0x5d, 0x0f, 0x75, 0x4a, 0xff, 0xce, + 0x42, 0xc5, 0x3b, 0xb0, 0xe8, 0xa5, 0xd0, 0xbe, 0xab, 0x2f, 0xa8, 0x08, 0x3c, 0xc6, 0xa0, 0xf7, + 0x1f, 0x5d, 0x6b, 0xee, 0xfc, 0x6b, 0x4d, 0xfa, 0x89, 0xe3, 0x75, 0x80, 0x0b, 0xe7, 0xfe, 0x9b, + 0xf6, 0x02, 0x20, 0xd7, 0x74, 0xd5, 0x89, 0x72, 0x6c, 0xba, 0xba, 0x31, 0x52, 0x98, 0xb3, 0x59, + 0x51, 0xda, 0xa4, 0x4f, 0xee, 0xd1, 0x07, 0x07, 0xd4, 0xef, 0x3f, 0xcf, 0x42, 0xc5, 0xaf, 0x0e, + 0xce, 0xdb, 0xca, 0xbf, 0x04, 0x25, 0x9e, 0x00, 0x59, 0x2f, 0x9f, 0xcf, 0xfc, 0xbf, 0x4a, 0x85, + 0xd0, 0x5f, 0x25, 0x11, 0x2a, 0x53, 0xec, 0xaa, 0x34, 0xcf, 0x30, 0xec, 0xef, 0xcf, 0x6f, 0xbc, + 0x06, 0xd5, 0xd0, 0x5f, 0x15, 0x72, 0xf2, 0xf6, 0xba, 0xef, 0x35, 0x33, 0x62, 0xf9, 0x93, 0xcf, + 0xaf, 0xe5, 0xf7, 0xf0, 0xc7, 0x64, 0xcf, 0xca, 0xdd, 0x4e, 0xaf, 0xdb, 0xb9, 0xd3, 0xcc, 0x8a, + 0xd5, 0x4f, 0x3e, 0xbf, 0x56, 0x96, 0x31, 0xed, 0x15, 0xde, 0xe8, 0xc1, 0x4a, 0xf8, 0xab, 0x44, + 0xd3, 0x01, 0x82, 0xfa, 0xad, 0xbb, 0x07, 0xbb, 0x3b, 0x9d, 0xed, 0x7e, 0x57, 0xb9, 0xb7, 0xdf, + 0xef, 0x36, 0xb3, 0xe8, 0x32, 0x5c, 0xd8, 0xdd, 0x79, 0xbb, 0xd7, 0x57, 0x3a, 0xbb, 0x3b, 0xdd, + 0xbd, 0xbe, 0xb2, 0xdd, 0xef, 0x6f, 0x77, 0xee, 0x34, 0x73, 0x5b, 0x7f, 0xaa, 0x42, 0x63, 0xbb, + 0xdd, 0xd9, 0x21, 0xf9, 0x5f, 0x1f, 0xaa, 0xbc, 0x17, 0x5b, 0xa0, 0xad, 0x97, 0x33, 0x6f, 0xc9, + 0x88, 0x67, 0xb7, 0xa2, 0xd1, 0x6d, 0x28, 0xd2, 0xae, 0x0c, 0x3a, 0xfb, 0xda, 0x8c, 0xb8, 0xa4, + 0x37, 0x4d, 0x16, 0x43, 0x8f, 0xc7, 0x99, 0xf7, 0x68, 0xc4, 0xb3, 0x5b, 0xd5, 0x48, 0x06, 0x21, + 0xe8, 0x8a, 0x2c, 0xbf, 0x57, 0x23, 0xa6, 0x68, 0x5f, 0x13, 0x9d, 0x01, 0xb2, 0x5a, 0x7e, 0xcf, + 0x44, 0x4c, 0x11, 0xc0, 0xd0, 0x2e, 0x94, 0x3d, 0x30, 0xbc, 0xec, 0xe6, 0x8b, 0xb8, 0xb4, 0xb5, + 0x4c, 0x3e, 0x01, 0x6b, 0x5a, 0x9c, 0x7d, 0x8d, 0x47, 0x5c, 0xd2, 0x27, 0x47, 0x3b, 0x50, 0xe2, + 0xd5, 0xfe, 0x92, 0xdb, 0x2c, 0xe2, 0xb2, 0x56, 0x31, 0x71, 0x5a, 0xd0, 0x4e, 0x5a, 0x7e, 0x39, + 0x49, 0x4c, 0xf1, 0x0b, 0x00, 0xdd, 0x05, 0x08, 0xb5, 0x28, 0x52, 0xdc, 0x3a, 0x12, 0xd3, 0xb4, + 0xf6, 0xd1, 0x3e, 0x54, 0x7c, 0xc4, 0xb8, 0xf4, 0x0e, 0x90, 0xb8, 0xbc, 0xc7, 0x8e, 0xee, 0x43, + 0x2d, 0x8a, 0x74, 0xd2, 0xdd, 0xec, 0x11, 0x53, 0x36, 0xcf, 0x89, 0xfe, 0x28, 0xec, 0x49, 0x77, + 0xd3, 0x47, 0x4c, 0xd9, 0x4b, 0x47, 0x1f, 0xc2, 0xea, 0x3c, 0x2c, 0x49, 0x7f, 0xf1, 0x47, 0x3c, + 0x47, 0x77, 0x1d, 0x4d, 0x01, 0x2d, 0x80, 0x33, 0xe7, 0xb8, 0x07, 0x24, 0x9e, 0xa7, 0xd9, 0x8e, + 0x34, 0x68, 0xc4, 0x31, 0x42, 0xda, 0x7b, 0x41, 0x62, 0xea, 0xc6, 0x3b, 0x7b, 0x4b, 0x14, 0x36, + 0xa4, 0xbd, 0x27, 0x24, 0xa6, 0xee, 0xc3, 0xb7, 0xbb, 0x5f, 0x7c, 0xbd, 0x96, 0xfd, 0xf2, 0xeb, + 0xb5, 0xec, 0xdf, 0xbe, 0x5e, 0xcb, 0x7e, 0xfa, 0xcd, 0x5a, 0xe6, 0xcb, 0x6f, 0xd6, 0x32, 0x7f, + 0xfe, 0x66, 0x2d, 0xf3, 0x93, 0xe7, 0x47, 0xba, 0x3b, 0x9e, 0x0d, 0x36, 0x86, 0xe6, 0x74, 0x33, + 0x7c, 0x21, 0x73, 0xd1, 0x25, 0xd1, 0x41, 0x89, 0x26, 0xdd, 0x97, 0xff, 0x1b, 0x00, 0x00, 0xff, + 0xff, 0x12, 0x9c, 0xef, 0xf9, 0x44, 0x2a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -6114,18 +6114,16 @@ func (m *ResponseInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.Timeouts != nil { - { - size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) + { + size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0x32 + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x32 if len(m.LastBlockAppHash) > 0 { i -= len(m.LastBlockAppHash) copy(dAtA[i:], m.LastBlockAppHash) @@ -6222,18 +6220,16 @@ func (m *ResponseInitChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.Timeouts != nil { - { - size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) + { + size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0x22 + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x22 if len(m.AppHash) > 0 { i -= len(m.AppHash) copy(dAtA[i:], m.AppHash) @@ -6591,18 +6587,16 @@ func (m *ResponseEndBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.Timeouts != nil { - { - size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) + { + size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0x22 + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x22 if len(m.Events) > 0 { for iNdEx := len(m.Events) - 1; iNdEx >= 0; iNdEx-- { { @@ -8231,10 +8225,8 @@ func (m *ResponseInfo) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } - if m.Timeouts != nil { - l = m.Timeouts.Size() - n += 1 + l + sovTypes(uint64(l)) - } + l = m.Timeouts.Size() + n += 1 + l + sovTypes(uint64(l)) return n } @@ -8278,10 +8270,8 @@ func (m *ResponseInitChain) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } - if m.Timeouts != nil { - l = m.Timeouts.Size() - n += 1 + l + sovTypes(uint64(l)) - } + l = m.Timeouts.Size() + n += 1 + l + sovTypes(uint64(l)) return n } @@ -8455,10 +8445,8 @@ func (m *ResponseEndBlock) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } - if m.Timeouts != nil { - l = m.Timeouts.Size() - n += 1 + l + sovTypes(uint64(l)) - } + l = m.Timeouts.Size() + n += 1 + l + sovTypes(uint64(l)) return n } @@ -12608,9 +12596,6 @@ func (m *ResponseInfo) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Timeouts == nil { - m.Timeouts = &TimeoutsInfo{} - } if err := m.Timeouts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -12931,9 +12916,6 @@ func (m *ResponseInitChain) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Timeouts == nil { - m.Timeouts = &TimeoutsInfo{} - } if err := m.Timeouts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -14137,9 +14119,6 @@ func (m *ResponseEndBlock) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Timeouts == nil { - m.Timeouts = &TimeoutsInfo{} - } if err := m.Timeouts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index f35b343658..17e8576811 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -200,7 +200,7 @@ message ResponseInfo { int64 last_block_height = 4; bytes last_block_app_hash = 5; - TimeoutsInfo timeouts = 6; + TimeoutsInfo timeouts = 6 [(gogoproto.nullable) = false]; } // nondeterministic @@ -215,7 +215,7 @@ message ResponseInitChain { ConsensusParams consensus_params = 1; repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; bytes app_hash = 3; - TimeoutsInfo timeouts = 4; + TimeoutsInfo timeouts = 4 [(gogoproto.nullable) = false]; } message ResponseQuery { @@ -273,7 +273,7 @@ message ResponseEndBlock { ConsensusParams consensus_param_updates = 2; repeated Event events = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - TimeoutsInfo timeouts = 4; + TimeoutsInfo timeouts = 4 [(gogoproto.nullable) = false]; } message ResponseCommit { diff --git a/proto/tendermint/state/types.pb.go b/proto/tendermint/state/types.pb.go index 04c5371c65..122cda8ebb 100644 --- a/proto/tendermint/state/types.pb.go +++ b/proto/tendermint/state/types.pb.go @@ -331,7 +331,7 @@ type State struct { // the latest AppHash we've received from calling abci.Commit() AppHash []byte `protobuf:"bytes,13,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` // timeouts to be used for the next block height - Timeouts *types.TimeoutsInfo `protobuf:"bytes,15,opt,name=timeouts,proto3" json:"timeouts,omitempty"` + Timeouts types.TimeoutsInfo `protobuf:"bytes,15,opt,name=timeouts,proto3" json:"timeouts"` } func (m *State) Reset() { *m = State{} } @@ -465,11 +465,11 @@ func (m *State) GetAppHash() []byte { return nil } -func (m *State) GetTimeouts() *types.TimeoutsInfo { +func (m *State) GetTimeouts() types.TimeoutsInfo { if m != nil { return m.Timeouts } - return nil + return types.TimeoutsInfo{} } func init() { @@ -484,59 +484,59 @@ func init() { func init() { proto.RegisterFile("tendermint/state/types.proto", fileDescriptor_ccfacf933f22bf93) } var fileDescriptor_ccfacf933f22bf93 = []byte{ - // 827 bytes of a gzipped FileDescriptorProto + // 829 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x6f, 0xe3, 0x44, 0x14, 0x8f, 0xc9, 0x6e, 0x93, 0x3c, 0x37, 0xc9, 0xee, 0x14, 0x21, 0x6f, 0x96, 0x75, 0xb2, 0xe1, - 0x8f, 0x2a, 0x0e, 0x8e, 0xb4, 0x1c, 0xd0, 0x5e, 0x56, 0x5a, 0x27, 0x40, 0x23, 0x55, 0x08, 0xdc, - 0xaa, 0x07, 0x2e, 0xd6, 0x24, 0x9e, 0xda, 0x16, 0x89, 0x6d, 0x79, 0x26, 0xa1, 0x7c, 0x00, 0xee, - 0xbd, 0x22, 0xf1, 0x81, 0x7a, 0xec, 0x11, 0x71, 0x28, 0x28, 0xfd, 0x22, 0x68, 0xfe, 0xd8, 0x9e, - 0x24, 0x54, 0x2a, 0xe2, 0x36, 0x7e, 0xef, 0xf7, 0x7e, 0xef, 0xf7, 0xde, 0xbc, 0x37, 0x86, 0x8f, - 0x19, 0x49, 0x02, 0x92, 0x2f, 0xe3, 0x84, 0x8d, 0x28, 0xc3, 0x8c, 0x8c, 0xd8, 0x2f, 0x19, 0xa1, - 0x4e, 0x96, 0xa7, 0x2c, 0x45, 0xcf, 0x2a, 0xaf, 0x23, 0xbc, 0xbd, 0x0f, 0xc3, 0x34, 0x4c, 0x85, - 0x73, 0xc4, 0x4f, 0x12, 0xd7, 0x7b, 0xa9, 0xb1, 0xe0, 0xd9, 0x3c, 0xd6, 0x49, 0x7a, 0x7a, 0x0a, - 0x61, 0xdf, 0xf2, 0x0e, 0xf6, 0xbc, 0x6b, 0xbc, 0x88, 0x03, 0xcc, 0xd2, 0x5c, 0x21, 0x5e, 0xed, - 0x21, 0x32, 0x9c, 0xe3, 0x65, 0x41, 0x60, 0x6b, 0xee, 0x35, 0xc9, 0x69, 0x9c, 0x26, 0x5b, 0x09, - 0xfa, 0x61, 0x9a, 0x86, 0x0b, 0x32, 0x12, 0x5f, 0xb3, 0xd5, 0xe5, 0x88, 0xc5, 0x4b, 0x42, 0x19, - 0x5e, 0x66, 0x12, 0x30, 0xfc, 0xd3, 0x80, 0xf6, 0x7b, 0x77, 0x3c, 0xf5, 0x08, 0xcd, 0xd2, 0x84, - 0x12, 0x8a, 0xc6, 0x60, 0x06, 0x64, 0x11, 0xaf, 0x49, 0xee, 0xb3, 0x2b, 0x6a, 0x19, 0x83, 0xfa, - 0xb1, 0xf9, 0x66, 0xe8, 0x68, 0xcd, 0xe0, 0x45, 0x3a, 0x45, 0xc0, 0x44, 0x62, 0xcf, 0xaf, 0x3c, - 0x08, 0x8a, 0x23, 0x45, 0xef, 0xa0, 0x45, 0x92, 0xc0, 0x9f, 0x2d, 0xd2, 0xf9, 0x4f, 0xd6, 0x07, - 0x03, 0xe3, 0xd8, 0x7c, 0xf3, 0xfa, 0x41, 0x8a, 0xaf, 0x93, 0xc0, 0xe5, 0x40, 0xaf, 0x49, 0xd4, - 0x09, 0x4d, 0xc0, 0x9c, 0x91, 0x30, 0x4e, 0x14, 0x43, 0x5d, 0x30, 0x7c, 0xf2, 0x20, 0x83, 0xcb, - 0xb1, 0x92, 0x03, 0x66, 0xe5, 0x79, 0xf8, 0xab, 0x01, 0x9d, 0x8b, 0xa2, 0xa1, 0x74, 0x9a, 0x5c, - 0xa6, 0x68, 0x0c, 0xed, 0xb2, 0xc5, 0x3e, 0x25, 0xcc, 0x32, 0x04, 0xb5, 0xad, 0x53, 0xcb, 0x06, - 0x96, 0x81, 0x67, 0x84, 0x79, 0x87, 0x6b, 0xed, 0x0b, 0x39, 0x70, 0xb4, 0xc0, 0x94, 0xf9, 0x11, - 0x89, 0xc3, 0x88, 0xf9, 0xf3, 0x08, 0x27, 0x21, 0x09, 0x44, 0x9d, 0x75, 0xef, 0x39, 0x77, 0x9d, - 0x08, 0xcf, 0x58, 0x3a, 0x86, 0xbf, 0x19, 0x70, 0x34, 0xe6, 0x3a, 0x13, 0xba, 0xa2, 0xdf, 0x8b, - 0xfb, 0x13, 0x62, 0x3c, 0x78, 0x36, 0x2f, 0xcc, 0xbe, 0xbc, 0x57, 0xa5, 0xe7, 0xf5, 0xbe, 0x9e, - 0x1d, 0x02, 0xf7, 0xc9, 0xcd, 0x5d, 0xbf, 0xe6, 0x75, 0xe7, 0xdb, 0xe6, 0xff, 0xac, 0x8d, 0xc2, - 0xf3, 0xad, 0xfb, 0x17, 0xc2, 0xbe, 0x81, 0x0e, 0xef, 0xaf, 0x9f, 0x17, 0x56, 0x25, 0xab, 0xef, - 0xec, 0xee, 0x84, 0xb3, 0x15, 0xec, 0xb5, 0x79, 0x58, 0x35, 0x4b, 0x1f, 0xc1, 0x81, 0xd4, 0xa1, - 0xf2, 0xab, 0xaf, 0x61, 0x04, 0x8d, 0x0b, 0x39, 0xad, 0xe8, 0x3d, 0xb4, 0xca, 0x12, 0x54, 0x96, - 0x57, 0x7a, 0x16, 0x35, 0xd5, 0x55, 0xf9, 0xaa, 0xf0, 0x2a, 0x0a, 0xf5, 0xa0, 0x49, 0xd3, 0x4b, - 0xf6, 0x33, 0xce, 0x89, 0xc8, 0xd3, 0xf2, 0xca, 0xef, 0xe1, 0xef, 0x0d, 0x78, 0x7a, 0xc6, 0x85, - 0xa2, 0xb7, 0xd0, 0x50, 0x5c, 0x2a, 0xcd, 0x8b, 0xfd, 0x62, 0x94, 0x28, 0x95, 0xa2, 0xc0, 0xa3, - 0xcf, 0xa1, 0x39, 0x8f, 0x70, 0x9c, 0xf8, 0xb1, 0x6c, 0x64, 0xcb, 0x35, 0x37, 0x77, 0xfd, 0xc6, - 0x98, 0xdb, 0xa6, 0x13, 0xaf, 0x21, 0x9c, 0xd3, 0x00, 0x7d, 0x06, 0x9d, 0x38, 0x89, 0x59, 0x8c, - 0x17, 0xaa, 0xfd, 0x56, 0x47, 0x94, 0xdd, 0x56, 0x56, 0xd9, 0x79, 0xf4, 0x05, 0x88, 0x7b, 0x90, - 0xb3, 0x5d, 0x20, 0xeb, 0x02, 0xd9, 0xe5, 0x0e, 0x31, 0xbc, 0x0a, 0xeb, 0x41, 0x5b, 0xc3, 0xc6, - 0x81, 0xf5, 0x64, 0x5f, 0xbb, 0x9c, 0x0f, 0x11, 0x35, 0x9d, 0xb8, 0x47, 0x5c, 0xfb, 0xe6, 0xae, - 0x6f, 0x9e, 0x16, 0x54, 0xd3, 0x89, 0x67, 0x96, 0xbc, 0xd3, 0x00, 0x9d, 0x42, 0x57, 0xe3, 0xe4, - 0x2f, 0x82, 0xf5, 0x54, 0xb0, 0xf6, 0x1c, 0xf9, 0x5c, 0x38, 0xc5, 0x73, 0xe1, 0x9c, 0x17, 0xcf, - 0x85, 0xdb, 0xe4, 0xb4, 0xd7, 0x7f, 0xf5, 0x0d, 0xaf, 0x5d, 0x72, 0x71, 0x2f, 0xfa, 0x16, 0xba, - 0x09, 0xb9, 0x62, 0x7e, 0xb9, 0x21, 0xd4, 0x3a, 0x78, 0xd4, 0x4e, 0x75, 0x78, 0x58, 0xb5, 0x9e, - 0xe8, 0x1d, 0x80, 0xc6, 0xd1, 0x78, 0x14, 0x87, 0x16, 0xc1, 0x85, 0x88, 0xb2, 0x34, 0x92, 0xe6, - 0xe3, 0x84, 0xf0, 0x30, 0x4d, 0xc8, 0x18, 0x6c, 0x7d, 0x85, 0x2a, 0xbe, 0x72, 0x9b, 0x5a, 0xe2, - 0xb2, 0x5e, 0x56, 0xdb, 0x54, 0x45, 0xab, 0xbd, 0xfa, 0xd7, 0xdd, 0x86, 0xff, 0xb9, 0xdb, 0xdf, - 0xc1, 0xa7, 0x5b, 0xbb, 0xbd, 0xc3, 0x5f, 0xca, 0x33, 0x85, 0xbc, 0x81, 0xb6, 0xec, 0xdb, 0x44, - 0x85, 0xc6, 0x62, 0x10, 0x73, 0x42, 0x57, 0x0b, 0x46, 0xfd, 0x08, 0xd3, 0xc8, 0x3a, 0x1c, 0x18, - 0xc7, 0x87, 0x72, 0x10, 0x3d, 0x69, 0x3f, 0xc1, 0x34, 0x42, 0x2f, 0xa0, 0x89, 0xb3, 0x4c, 0x42, - 0xda, 0x02, 0xd2, 0xc0, 0x59, 0x26, 0x5c, 0x6f, 0xa1, 0xc9, 0x87, 0x28, 0x5d, 0x31, 0x6a, 0x75, - 0xf7, 0x37, 0x58, 0xbc, 0xd4, 0xe7, 0x0a, 0xc0, 0x9f, 0x17, 0xaf, 0x84, 0xbb, 0x3f, 0xdc, 0x6c, - 0x6c, 0xe3, 0x76, 0x63, 0x1b, 0x7f, 0x6f, 0x6c, 0xe3, 0xfa, 0xde, 0xae, 0xdd, 0xde, 0xdb, 0xb5, - 0x3f, 0xee, 0xed, 0xda, 0x8f, 0x5f, 0x85, 0x31, 0x8b, 0x56, 0x33, 0x67, 0x9e, 0x2e, 0x47, 0xfa, - 0x3f, 0xb0, 0x3a, 0xca, 0x1f, 0xf1, 0xee, 0x2f, 0x7c, 0x76, 0x20, 0xec, 0x5f, 0xfe, 0x13, 0x00, - 0x00, 0xff, 0xff, 0x27, 0xdf, 0x7c, 0x06, 0xdd, 0x07, 0x00, 0x00, + 0x8f, 0x2a, 0x0e, 0x8e, 0xb4, 0x1c, 0x10, 0x97, 0x45, 0xeb, 0x04, 0x68, 0xa4, 0x0a, 0x81, 0x5b, + 0xf5, 0xc0, 0xc5, 0x9a, 0xc4, 0x53, 0xdb, 0x22, 0xb1, 0x2d, 0xcf, 0x24, 0x94, 0x0f, 0xc0, 0xbd, + 0x57, 0xae, 0x7c, 0x9a, 0x1e, 0x7b, 0x44, 0x1c, 0x0a, 0x4a, 0xbf, 0x08, 0x9a, 0x3f, 0xb6, 0x27, + 0x09, 0x95, 0x8a, 0xb8, 0x8d, 0xdf, 0xfb, 0xbd, 0xdf, 0xfb, 0xbd, 0x37, 0xef, 0x8d, 0xe1, 0x43, + 0x46, 0x92, 0x80, 0xe4, 0xcb, 0x38, 0x61, 0x23, 0xca, 0x30, 0x23, 0x23, 0xf6, 0x4b, 0x46, 0xa8, + 0x93, 0xe5, 0x29, 0x4b, 0xd1, 0xb3, 0xca, 0xeb, 0x08, 0x6f, 0xef, 0xfd, 0x30, 0x0d, 0x53, 0xe1, + 0x1c, 0xf1, 0x93, 0xc4, 0xf5, 0x5e, 0x6a, 0x2c, 0x78, 0x36, 0x8f, 0x75, 0x92, 0x9e, 0x9e, 0x42, + 0xd8, 0xb7, 0xbc, 0x83, 0x3d, 0xef, 0x1a, 0x2f, 0xe2, 0x00, 0xb3, 0x34, 0x57, 0x88, 0x57, 0x7b, + 0x88, 0x0c, 0xe7, 0x78, 0x59, 0x10, 0xd8, 0x9a, 0x7b, 0x4d, 0x72, 0x1a, 0xa7, 0xc9, 0x56, 0x82, + 0x7e, 0x98, 0xa6, 0xe1, 0x82, 0x8c, 0xc4, 0xd7, 0x6c, 0x75, 0x39, 0x62, 0xf1, 0x92, 0x50, 0x86, + 0x97, 0x99, 0x04, 0x0c, 0xff, 0x34, 0xa0, 0xfd, 0xce, 0x1d, 0x4f, 0x3d, 0x42, 0xb3, 0x34, 0xa1, + 0x84, 0xa2, 0x31, 0x98, 0x01, 0x59, 0xc4, 0x6b, 0x92, 0xfb, 0xec, 0x8a, 0x5a, 0xc6, 0xa0, 0x7e, + 0x6c, 0xbe, 0x19, 0x3a, 0x5a, 0x33, 0x78, 0x91, 0x4e, 0x11, 0x30, 0x91, 0xd8, 0xf3, 0x2b, 0x0f, + 0x82, 0xe2, 0x48, 0xd1, 0x5b, 0x68, 0x91, 0x24, 0xf0, 0x67, 0x8b, 0x74, 0xfe, 0x93, 0xf5, 0xde, + 0xc0, 0x38, 0x36, 0xdf, 0xbc, 0x7e, 0x90, 0xe2, 0xeb, 0x24, 0x70, 0x39, 0xd0, 0x6b, 0x12, 0x75, + 0x42, 0x13, 0x30, 0x67, 0x24, 0x8c, 0x13, 0xc5, 0x50, 0x17, 0x0c, 0x1f, 0x3d, 0xc8, 0xe0, 0x72, + 0xac, 0xe4, 0x80, 0x59, 0x79, 0x1e, 0xfe, 0x6a, 0x40, 0xe7, 0xa2, 0x68, 0x28, 0x9d, 0x26, 0x97, + 0x29, 0x1a, 0x43, 0xbb, 0x6c, 0xb1, 0x4f, 0x09, 0xb3, 0x0c, 0x41, 0x6d, 0xeb, 0xd4, 0xb2, 0x81, + 0x65, 0xe0, 0x19, 0x61, 0xde, 0xe1, 0x5a, 0xfb, 0x42, 0x0e, 0x1c, 0x2d, 0x30, 0x65, 0x7e, 0x44, + 0xe2, 0x30, 0x62, 0xfe, 0x3c, 0xc2, 0x49, 0x48, 0x02, 0x51, 0x67, 0xdd, 0x7b, 0xce, 0x5d, 0x27, + 0xc2, 0x33, 0x96, 0x8e, 0xe1, 0x6f, 0x06, 0x1c, 0x8d, 0xb9, 0xce, 0x84, 0xae, 0xe8, 0xf7, 0xe2, + 0xfe, 0x84, 0x18, 0x0f, 0x9e, 0xcd, 0x0b, 0xb3, 0x2f, 0xef, 0x55, 0xe9, 0x79, 0xbd, 0xaf, 0x67, + 0x87, 0xc0, 0x7d, 0x72, 0x73, 0xd7, 0xaf, 0x79, 0xdd, 0xf9, 0xb6, 0xf9, 0x3f, 0x6b, 0xa3, 0xf0, + 0x7c, 0xeb, 0xfe, 0x85, 0xb0, 0x6f, 0xa0, 0xc3, 0xfb, 0xeb, 0xe7, 0x85, 0x55, 0xc9, 0xea, 0x3b, + 0xbb, 0x3b, 0xe1, 0x6c, 0x05, 0x7b, 0x6d, 0x1e, 0x56, 0xcd, 0xd2, 0x07, 0x70, 0x20, 0x75, 0xa8, + 0xfc, 0xea, 0x6b, 0x18, 0x41, 0xe3, 0x42, 0x4e, 0x2b, 0x7a, 0x07, 0xad, 0xb2, 0x04, 0x95, 0xe5, + 0x95, 0x9e, 0x45, 0x4d, 0x75, 0x55, 0xbe, 0x2a, 0xbc, 0x8a, 0x42, 0x3d, 0x68, 0xd2, 0xf4, 0x92, + 0xfd, 0x8c, 0x73, 0x22, 0xf2, 0xb4, 0xbc, 0xf2, 0x7b, 0xf8, 0x7b, 0x03, 0x9e, 0x9e, 0x71, 0xa1, + 0xe8, 0x4b, 0x68, 0x28, 0x2e, 0x95, 0xe6, 0xc5, 0x7e, 0x31, 0x4a, 0x94, 0x4a, 0x51, 0xe0, 0xd1, + 0xa7, 0xd0, 0x9c, 0x47, 0x38, 0x4e, 0xfc, 0x58, 0x36, 0xb2, 0xe5, 0x9a, 0x9b, 0xbb, 0x7e, 0x63, + 0xcc, 0x6d, 0xd3, 0x89, 0xd7, 0x10, 0xce, 0x69, 0x80, 0x3e, 0x81, 0x4e, 0x9c, 0xc4, 0x2c, 0xc6, + 0x0b, 0xd5, 0x7e, 0xab, 0x23, 0xca, 0x6e, 0x2b, 0xab, 0xec, 0x3c, 0xfa, 0x0c, 0xc4, 0x3d, 0xc8, + 0xd9, 0x2e, 0x90, 0x75, 0x81, 0xec, 0x72, 0x87, 0x18, 0x5e, 0x85, 0xf5, 0xa0, 0xad, 0x61, 0xe3, + 0xc0, 0x7a, 0xb2, 0xaf, 0x5d, 0xce, 0x87, 0x88, 0x9a, 0x4e, 0xdc, 0x23, 0xae, 0x7d, 0x73, 0xd7, + 0x37, 0x4f, 0x0b, 0xaa, 0xe9, 0xc4, 0x33, 0x4b, 0xde, 0x69, 0x80, 0x4e, 0xa1, 0xab, 0x71, 0xf2, + 0x17, 0xc1, 0x7a, 0x2a, 0x58, 0x7b, 0x8e, 0x7c, 0x2e, 0x9c, 0xe2, 0xb9, 0x70, 0xce, 0x8b, 0xe7, + 0xc2, 0x6d, 0x72, 0xda, 0xeb, 0xbf, 0xfa, 0x86, 0xd7, 0x2e, 0xb9, 0xb8, 0x17, 0x7d, 0x0b, 0xdd, + 0x84, 0x5c, 0x31, 0xbf, 0xdc, 0x10, 0x6a, 0x1d, 0x3c, 0x6a, 0xa7, 0x3a, 0x3c, 0xac, 0x5a, 0x4f, + 0xf4, 0x16, 0x40, 0xe3, 0x68, 0x3c, 0x8a, 0x43, 0x8b, 0xe0, 0x42, 0x44, 0x59, 0x1a, 0x49, 0xf3, + 0x71, 0x42, 0x78, 0x98, 0x26, 0x64, 0x0c, 0xb6, 0xbe, 0x42, 0x15, 0x5f, 0xb9, 0x4d, 0x2d, 0x71, + 0x59, 0x2f, 0xab, 0x6d, 0xaa, 0xa2, 0xd5, 0x5e, 0xfd, 0xeb, 0x6e, 0xc3, 0xff, 0xdc, 0xed, 0xef, + 0xe0, 0xe3, 0xad, 0xdd, 0xde, 0xe1, 0x2f, 0xe5, 0x99, 0x42, 0xde, 0x40, 0x5b, 0xf6, 0x6d, 0xa2, + 0x42, 0x63, 0x31, 0x88, 0x39, 0xa1, 0xab, 0x05, 0xa3, 0x7e, 0x84, 0x69, 0x64, 0x1d, 0x0e, 0x8c, + 0xe3, 0x43, 0x39, 0x88, 0x9e, 0xb4, 0x9f, 0x60, 0x1a, 0xa1, 0x17, 0xd0, 0xc4, 0x59, 0x26, 0x21, + 0x6d, 0x01, 0x69, 0xe0, 0x2c, 0x13, 0xae, 0xaf, 0xa0, 0xc9, 0x87, 0x28, 0x5d, 0x31, 0x6a, 0x75, + 0xf7, 0x37, 0x58, 0xbc, 0xd4, 0xe7, 0x0a, 0xc0, 0x9f, 0x17, 0x55, 0x5e, 0x19, 0xe4, 0xfe, 0x70, + 0xb3, 0xb1, 0x8d, 0xdb, 0x8d, 0x6d, 0xfc, 0xbd, 0xb1, 0x8d, 0xeb, 0x7b, 0xbb, 0x76, 0x7b, 0x6f, + 0xd7, 0xfe, 0xb8, 0xb7, 0x6b, 0x3f, 0x7e, 0x11, 0xc6, 0x2c, 0x5a, 0xcd, 0x9c, 0x79, 0xba, 0x1c, + 0xe9, 0x7f, 0xc2, 0xea, 0x28, 0x7f, 0xc7, 0xbb, 0x3f, 0xf2, 0xd9, 0x81, 0xb0, 0x7f, 0xfe, 0x4f, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x8e, 0x97, 0xe8, 0x4f, 0xe3, 0x07, 0x00, 0x00, } func (m *ABCIResponses) Marshal() (dAtA []byte, err error) { @@ -778,18 +778,16 @@ func (m *State) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.Timeouts != nil { - { - size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) + { + size, err := m.Timeouts.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0x7a + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x7a if m.InitialHeight != 0 { i = encodeVarintTypes(dAtA, i, uint64(m.InitialHeight)) i-- @@ -1053,10 +1051,8 @@ func (m *State) Size() (n int) { if m.InitialHeight != 0 { n += 1 + sovTypes(uint64(m.InitialHeight)) } - if m.Timeouts != nil { - l = m.Timeouts.Size() - n += 1 + l + sovTypes(uint64(l)) - } + l = m.Timeouts.Size() + n += 1 + l + sovTypes(uint64(l)) return n } @@ -2123,9 +2119,6 @@ func (m *State) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Timeouts == nil { - m.Timeouts = &types.TimeoutsInfo{} - } if err := m.Timeouts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/proto/tendermint/state/types.proto b/proto/tendermint/state/types.proto index 9f86fa9d09..9796a8fc55 100644 --- a/proto/tendermint/state/types.proto +++ b/proto/tendermint/state/types.proto @@ -79,5 +79,5 @@ message State { bytes app_hash = 13; // timeouts to be used for the next block height - tendermint.abci.TimeoutsInfo timeouts = 15; + tendermint.abci.TimeoutsInfo timeouts = 15 [(gogoproto.nullable) = false]; } From 852d07f48c6691d67e9c8c5d6d55a506b01a7d3c Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 13:07:40 -0700 Subject: [PATCH 21/87] exposes Timeout fields of the State --- state/execution.go | 4 ++-- state/state.go | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/state/execution.go b/state/execution.go index 676a7e5a4b..21aff937ae 100644 --- a/state/execution.go +++ b/state/execution.go @@ -568,8 +568,8 @@ func updateState( LastHeightConsensusParamsChanged: lastHeightParamsChanged, LastResultsHash: ABCIResponsesResultsHash(abciResponses), AppHash: nil, - timeoutCommit: abciResponses.EndBlock.Timeouts.TimeoutCommit, - timeoutPropose: abciResponses.EndBlock.Timeouts.TimeoutPropose, + TimeoutCommit: abciResponses.EndBlock.Timeouts.TimeoutCommit, + TimeoutPropose: abciResponses.EndBlock.Timeouts.TimeoutPropose, } return s, nil diff --git a/state/state.go b/state/state.go index a7b32f5642..5cab5f49d9 100644 --- a/state/state.go +++ b/state/state.go @@ -79,15 +79,15 @@ type State struct { AppHash []byte // timeouts received from app, after abci EndBlock call, to be used in the next height - timeoutPropose time.Duration - timeoutCommit time.Duration + TimeoutPropose time.Duration + TimeoutCommit time.Duration } func (state *State) GetTimeoutPropose() time.Duration { - return state.timeoutPropose + return state.TimeoutPropose } func (state *State) GetTimeoutCommit() time.Duration { - return state.timeoutCommit + return state.TimeoutCommit } // Copy makes a copy of the State for mutating. @@ -112,6 +112,9 @@ func (state State) Copy() State { AppHash: state.AppHash, LastResultsHash: state.LastResultsHash, + + TimeoutCommit: state.TimeoutCommit, + TimeoutPropose: state.TimeoutPropose, } } From f1568a6545d89ecfd30245ed171a57a36b1e8c8e Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 13:25:38 -0700 Subject: [PATCH 22/87] copies over timeout values when converting from proto to local state and vice versa --- state/state.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/state/state.go b/state/state.go index 5cab5f49d9..6197b9b656 100644 --- a/state/state.go +++ b/state/state.go @@ -184,6 +184,9 @@ func (state *State) ToProto() (*cmtstate.State, error) { sm.LastResultsHash = state.LastResultsHash sm.AppHash = state.AppHash + sm.Timeouts.TimeoutPropose = state.TimeoutPropose + sm.Timeouts.TimeoutCommit = state.TimeoutCommit + return sm, nil } @@ -234,6 +237,8 @@ func FromProto(pb *cmtstate.State) (*State, error) { //nolint:golint state.LastHeightConsensusParamsChanged = pb.LastHeightConsensusParamsChanged state.LastResultsHash = pb.LastResultsHash state.AppHash = pb.AppHash + state.TimeoutCommit = pb.Timeouts.TimeoutCommit + state.TimeoutPropose = pb.Timeouts.TimeoutPropose return state, nil } From 00d8e1c65de7fb6ddd5bf10b6d90abfcc6e9e04f Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 13:25:51 -0700 Subject: [PATCH 23/87] tests copying timeouts --- state/state_test.go | 58 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/state/state_test.go b/state/state_test.go index b7abc418ff..03457776b5 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -7,6 +7,7 @@ import ( "math/big" "os" "testing" + "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -49,17 +50,54 @@ func TestStateCopy(t *testing.T) { tearDown, _, state := setupTestCase(t) defer tearDown(t) assert := assert.New(t) + // the timeouts coming from the setupTestCase are 0, + // we change it here just to ensure that they have non-zero values in the + // tests below + state.TimeoutPropose = 10 * time.Second + state.TimeoutCommit = 20 * time.Second + + tests := []struct { + name string + modifyState func(sm.State) sm.State + expected bool + }{ + { + name: "no modification", + modifyState: func(s sm.State) sm.State { + stateCopy := s.Copy() + return stateCopy + }, + expected: true, + }, + { + name: "modify block height and validators", + modifyState: func(s sm.State) sm.State { + stateCopy := s.Copy() + stateCopy.LastBlockHeight++ + stateCopy.LastValidators = s.Validators + return stateCopy + }, + expected: false, + }, + { + name: "modify timeouts", + modifyState: func(s sm.State) sm.State { + stateCopy := s.Copy() + stateCopy.TimeoutPropose = 1 * time.Second + stateCopy.TimeoutCommit = 2 * time.Second + return stateCopy + }, + expected: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + newState := tt.modifyState(state) + assert.Equal(tt.expected, state.Equals(newState), + fmt.Sprintf("expected state: %v\n got: %v\n", state, newState)) + }) - stateCopy := state.Copy() - - assert.True(state.Equals(stateCopy), - fmt.Sprintf("expected state and its copy to be identical.\ngot: %v\nexpected: %v\n", - stateCopy, state)) - - stateCopy.LastBlockHeight++ - stateCopy.LastValidators = state.Validators - assert.False(state.Equals(stateCopy), fmt.Sprintf(`expected states to be different. got same - %v`, state)) + } } // TestMakeGenesisStateNilValidators tests state's consistency when genesis file's validators field is nil. From 3b6cbb3347290b312d932f445703d828d0a56844 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 13:30:31 -0700 Subject: [PATCH 24/87] extends TestStateSaveLoad to account for timeout equality --- state/state_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/state/state_test.go b/state/state_test.go index 03457776b5..7c17605e43 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -149,6 +149,8 @@ func TestStateSaveLoad(t *testing.T) { }) assert := assert.New(t) + state.TimeoutCommit = 10 * time.Second + state.TimeoutPropose = 5 * time.Second state.LastBlockHeight++ state.LastValidators = state.Validators err := stateStore.Save(state) @@ -159,6 +161,13 @@ func TestStateSaveLoad(t *testing.T) { assert.True(state.Equals(loadedState), fmt.Sprintf("expected state and its copy to be identical.\ngot: %v\nexpected: %v\n", loadedState, state)) + + // the following assertions are just for additional assurance + assert.Equal(state.TimeoutCommit, loadedState.TimeoutCommit, + fmt.Sprintf("expected TimeoutCommit to be equal."+ + "\ngot: %v\nexpected: %v\n", loadedState.TimeoutCommit, state.TimeoutCommit)) + assert.Equal(state.TimeoutPropose, loadedState.TimeoutPropose, fmt.Sprintf("expected TimeoutPropose to be equal."+ + "\ngot: %v\nexpected: %v\n", loadedState.TimeoutPropose, state.TimeoutPropose)) } // TestABCIResponsesSaveLoad tests saving and loading ABCIResponses. From 98feed8e2b0ecf271141292e42d263afdafca6cf Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 13:31:44 -0700 Subject: [PATCH 25/87] adds a clarifying comment --- state/state_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/state/state_test.go b/state/state_test.go index 7c17605e43..dc5914a6d9 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -149,6 +149,9 @@ func TestStateSaveLoad(t *testing.T) { }) assert := assert.New(t) + // the timeouts coming from the setupTestCase are 0, + // we change it here just to ensure that they have non-zero values in the + // tests below state.TimeoutCommit = 10 * time.Second state.TimeoutPropose = 5 * time.Second state.LastBlockHeight++ From 9ecf2d180d01eeac352ea5d556cbd9bd411079af Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 13:40:40 -0700 Subject: [PATCH 26/87] integrates timeouts in TestABCIResponsesSaveLoad1 --- state/state_test.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/state/state_test.go b/state/state_test.go index dc5914a6d9..98277d3d5b 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -193,9 +193,9 @@ func TestABCIResponsesSaveLoad1(t *testing.T) { abciResponses.DeliverTxs[0] = &abci.ResponseDeliverTx{Data: []byte("foo"), Events: nil} abciResponses.DeliverTxs[1] = &abci.ResponseDeliverTx{Data: []byte("bar"), Log: "ok", Events: nil} - abciResponses.EndBlock = &abci.ResponseEndBlock{ValidatorUpdates: []abci.ValidatorUpdate{ - types.TM2PB.NewValidatorUpdate(ed25519.GenPrivKey().PubKey(), 10), - }} + abciResponses.EndBlock = &abci.ResponseEndBlock{ + ValidatorUpdates: []abci.ValidatorUpdate{types.TM2PB.NewValidatorUpdate(ed25519.GenPrivKey().PubKey(), 10)}, + Timeouts: abci.TimeoutsInfo{TimeoutPropose: 1 * time.Second, TimeoutCommit: 2 * time.Second}} err := stateStore.SaveABCIResponses(block.Height, abciResponses) require.NoError(t, err) @@ -204,6 +204,7 @@ func TestABCIResponsesSaveLoad1(t *testing.T) { assert.Equal(abciResponses, loadedABCIResponses, fmt.Sprintf("ABCIResponses don't match:\ngot: %v\nexpected: %v\n", loadedABCIResponses, abciResponses)) + } // TestResultsSaveLoad tests saving and loading ABCI results. From 063fafd3b4d08adddcf59b50db2aaeb85b758bb0 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 14:44:45 -0700 Subject: [PATCH 27/87] sets non-zero timeouts for the TestStateProto --- state/state_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/state/state_test.go b/state/state_test.go index 98277d3d5b..13e1439ef7 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -1151,7 +1151,9 @@ func TestConsensusParamsChangesSaveLoad(t *testing.T) { func TestStateProto(t *testing.T) { tearDown, _, state := setupTestCase(t) defer tearDown(t) - + // set non-zero values for the timeouts of the state + state.TimeoutCommit = 10 * time.Second + state.TimeoutPropose = 11 * time.Second tc := []struct { testName string state *sm.State From bbfbd59b1d5d15772e8849413910d7d664ce1127 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 14:52:18 -0700 Subject: [PATCH 28/87] creates a new testcase for state with non-zero tiemouts --- state/state_test.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/state/state_test.go b/state/state_test.go index 13e1439ef7..8f5ec412ea 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -1151,9 +1151,13 @@ func TestConsensusParamsChangesSaveLoad(t *testing.T) { func TestStateProto(t *testing.T) { tearDown, _, state := setupTestCase(t) defer tearDown(t) - // set non-zero values for the timeouts of the state - state.TimeoutCommit = 10 * time.Second - state.TimeoutPropose = 11 * time.Second + + // for assurance, + // we make another state with non-zero timeouts to see if conversion works + stateCopyWithTimeouts := state.Copy() + stateCopyWithTimeouts.TimeoutCommit = 10 * time.Second + stateCopyWithTimeouts.TimeoutPropose = 11 * time.Second + tc := []struct { testName string state *sm.State @@ -1163,6 +1167,7 @@ func TestStateProto(t *testing.T) { {"empty state", &sm.State{}, true, false}, {"nil failure state", nil, false, false}, {"success state", &state, true, true}, + {"success state with timeouts", &stateCopyWithTimeouts, true, true}, } for _, tt := range tc { From 77e31cada27cca20bd73e9c5877af22d4a7932ea Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 25 Sep 2024 15:37:13 -0700 Subject: [PATCH 29/87] sets the initial state's timeouts using InitChainResponse timeouts --- consensus/replay.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/consensus/replay.go b/consensus/replay.go index 9c88c620ab..454845b885 100644 --- a/consensus/replay.go +++ b/consensus/replay.go @@ -362,6 +362,11 @@ func (h *Handshaker) ReplayBlocksWithContext( state.ConsensusParams = types.UpdateConsensusParams(state.ConsensusParams, res.ConsensusParams) state.Version.Consensus.App = state.ConsensusParams.Version.AppVersion } + + // update tiemouts based on the app response + state.TimeoutCommit = res.Timeouts.TimeoutCommit + state.TimeoutPropose = res.Timeouts.TimeoutPropose + // We update the last results hash with the empty hash, to conform with RFC-6962. state.LastResultsHash = merkle.HashFromByteSlices(nil) if err := h.stateStore.Save(state); err != nil { From b8b7b5ab1466b01ecece3caad505c8dfbbbbbbe3 Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 26 Sep 2024 15:07:52 -0700 Subject: [PATCH 30/87] improves docs --- consensus/replay.go | 6 +++--- state/store.go | 4 ++-- store/store.go | 5 ++--- types/block.go | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/consensus/replay.go b/consensus/replay.go index 454845b885..bb261c3b09 100644 --- a/consensus/replay.go +++ b/consensus/replay.go @@ -156,8 +156,8 @@ LOOP: } // NOTE: since the priv key is set when the msgs are received - // it will attempt to eg double sign but we can just ignore it - // since the votes will be replayed and we'll get to the next step + // it will attempt to e.g., double sign, but we can just ignore it + // since the votes will be replayed, and we'll get to the next step if err := cs.readReplayMessage(msg, nil); err != nil { return err } @@ -363,7 +363,7 @@ func (h *Handshaker) ReplayBlocksWithContext( state.Version.Consensus.App = state.ConsensusParams.Version.AppVersion } - // update tiemouts based on the app response + // update timeouts based on the InitChainSync response state.TimeoutCommit = res.Timeouts.TimeoutCommit state.TimeoutPropose = res.Timeouts.TimeoutPropose diff --git a/state/store.go b/state/store.go index 5a19c59775..27802bd4fc 100644 --- a/state/store.go +++ b/state/store.go @@ -87,7 +87,7 @@ type dbStore struct { type StoreOptions struct { - // DiscardABCIResponses determines whether or not the store + // DiscardABCIResponses determines whether the store // retains all ABCIResponses. If DiscardABCiResponses is enabled, // the store will maintain only the response object from the latest // height. @@ -236,7 +236,7 @@ func (store dbStore) Bootstrap(state State) error { // guaranteed to delete all states, since the last checkpointed state and states being pointed to by // e.g. `LastHeightChanged` must remain. The state at to must also exist. // -// The from parameter is necessary since we can't do a key scan in a performant way due to the key +// The `from` parameter is necessary since we can't do a key scan in a performant way due to the key // encoding not preserving ordering: https://github.com/tendermint/tendermint/issues/4567 // This will cause some old states to be left behind when doing incremental partial prunes, // specifically older checkpoints and LastHeightChanged targets. diff --git a/store/store.go b/store/store.go index 2990f44378..5ddea3bbfc 100644 --- a/store/store.go +++ b/store/store.go @@ -79,7 +79,7 @@ func (bs *BlockStore) Size() int64 { return bs.height - bs.base + 1 } -// LoadBase atomically loads the base block meta, or returns nil if no base is found. +// LoadBaseMeta atomically loads the base block meta, or returns nil if no base is found. func (bs *BlockStore) LoadBaseMeta() *types.BlockMeta { bs.mtx.RLock() defer bs.mtx.RUnlock() @@ -197,8 +197,7 @@ func (bs *BlockStore) LoadBlockMeta(height int64) *types.BlockMeta { return blockMeta } -// LoadBlockMetaByHash returns the blockmeta who's header corresponds to the given -// hash. If none is found, returns nil. +// LoadBlockMetaByHash returns the blockmeta whose header corresponds to the given hash. If none is found, returns nil. func (bs *BlockStore) LoadBlockMetaByHash(hash []byte) *types.BlockMeta { bz, err := bs.db.Get(calcBlockHashKey(hash)) if err != nil { diff --git a/types/block.go b/types/block.go index 60e17193da..d9d9c70587 100644 --- a/types/block.go +++ b/types/block.go @@ -1289,7 +1289,7 @@ func (blockID *BlockID) ToProto() cmtproto.BlockID { } } -// FromProto sets a protobuf BlockID to the given pointer. +// BlockIDFromProto sets a protobuf BlockID to the given pointer. // It returns an error if the block id is invalid. func BlockIDFromProto(bID *cmtproto.BlockID) (*BlockID, error) { if bID == nil { From d48a1204276e32d3c42704ec715e0f980ff57181 Mon Sep 17 00:00:00 2001 From: sanaz Date: Fri, 27 Sep 2024 15:23:04 -0700 Subject: [PATCH 31/87] adds a todo about setting timeouts in stateSync --- statesync/stateprovider.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/statesync/stateprovider.go b/statesync/stateprovider.go index 3b7a9b0227..2dd1ce106d 100644 --- a/statesync/stateprovider.go +++ b/statesync/stateprovider.go @@ -194,6 +194,10 @@ func (s *lightClientStateProvider) State(ctx context.Context, height uint64) (sm state.ConsensusParams = result.ConsensusParams state.LastHeightConsensusParamsChanged = currentLightBlock.Height + // TODO assign timeouts + // state.TimeoutPropose + // state.TimeoutCommit + return state, nil } From 6d53ec3c269d737652fa5a83d1b3462b8b700cd1 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 2 Oct 2024 09:58:34 -0700 Subject: [PATCH 32/87] saves timeouts separately in the store --- state/store.go | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/state/store.go b/state/store.go index 27802bd4fc..ba02485a9d 100644 --- a/state/store.go +++ b/state/store.go @@ -8,6 +8,7 @@ import ( "github.com/gogo/protobuf/proto" abci "github.com/tendermint/tendermint/abci/types" + abcitypes "github.com/tendermint/tendermint/abci/types" cmtmath "github.com/tendermint/tendermint/libs/math" cmtos "github.com/tendermint/tendermint/libs/os" cmtstate "github.com/tendermint/tendermint/proto/tendermint/state" @@ -37,6 +38,10 @@ func calcABCIResponsesKey(height int64) []byte { return []byte(fmt.Sprintf("abciResponsesKey:%v", height)) } +func calcTimeoutsKey(height int64) []byte { + return []byte(fmt.Sprintf("consensusTimeoutsKey:%v", height)) +} + //---------------------- var ( @@ -196,6 +201,12 @@ func (store dbStore) save(state State, key []byte) error { state.LastHeightConsensusParamsChanged, state.ConsensusParams); err != nil { return err } + + // save next timeouts + if err := store.saveConsensusTimeoutsInfo(nextHeight, &abcitypes.TimeoutsInfo{TimeoutPropose: state.TimeoutPropose, TimeoutCommit: state.TimeoutCommit}); err != nil { + return err + } + err := store.db.SetSync(key, state.Bytes()) if err != nil { return err @@ -403,7 +414,7 @@ func (store dbStore) LoadABCIResponses(height int64) (*cmtstate.ABCIResponses, e return abciResponses, nil } -// LoadLastABCIResponses loads the ABCIResponses from the most recent height. +// LoadLastABCIResponse loads the ABCIResponses from the most recent height. // The height parameter is used to ensure that the response corresponds to the latest height. // If not, an error is returned. // @@ -613,6 +624,22 @@ func (store dbStore) LoadConsensusParams(height int64) (cmtproto.ConsensusParams return paramsInfo.ConsensusParams, nil } +func (store dbStore) loadConsensusTimeoutsInfo(height int64) (*abcitypes.TimeoutsInfo, error) { + buf, err := store.db.Get(calcTimeoutsKey(height)) + if err != nil { + return nil, err + } + if len(buf) == 0 { + return nil, errors.New("value retrieved from db is empty") + } + + timeoutsInfo := new(abcitypes.TimeoutsInfo) + if err = timeoutsInfo.Unmarshal(buf); err != nil { + // DATA HAS BEEN CORRUPTED OR THE SPEC HAS CHANGED + cmtos.Exit(fmt.Sprintf(`LoadConsensusTimeouts: Data has been corrupted or its spec has changed:%v\n`, err)) + } + return timeoutsInfo, nil +} func (store dbStore) loadConsensusParamsInfo(height int64) (*cmtstate.ConsensusParamsInfo, error) { buf, err := store.db.Get(calcConsensusParamsKey(height)) if err != nil { @@ -633,6 +660,17 @@ func (store dbStore) loadConsensusParamsInfo(height int64) (*cmtstate.ConsensusP return paramsInfo, nil } +// saveConsensusTimeoutsInfo saves the timeouts info for the next block to disk. +// It should be called from s.Save(), right before the state itself is persisted. +func (store dbStore) saveConsensusTimeoutsInfo(height int64, timeoutsInfo *abcitypes.TimeoutsInfo) error { + bz, err := timeoutsInfo.Marshal() + if err != nil { + return err + } + + return store.db.Set(calcTimeoutsKey(height), bz) +} + // saveConsensusParamsInfo persists the consensus params for the next block to disk. // It should be called from s.Save(), right before the state itself is persisted. // If the consensus params did not change after processing the latest block, From 4d794062a089feef0c32c57bfb9b7067ece98ce3 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 2 Oct 2024 09:58:59 -0700 Subject: [PATCH 33/87] fixes a godoc --- rpc/client/http/http.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpc/client/http/http.go b/rpc/client/http/http.go index abcf9c9924..7acb6a43c2 100644 --- a/rpc/client/http/http.go +++ b/rpc/client/http/http.go @@ -118,7 +118,7 @@ func New(remote, wsEndpoint string) (*HTTP, error) { return NewWithClient(remote, wsEndpoint, httpClient) } -// Create timeout enabled http client +// NewWithTimeout creates timeout enabled http client func NewWithTimeout(remote, wsEndpoint string, timeout uint) (*HTTP, error) { httpClient, err := jsonrpcclient.DefaultHTTPClient(remote) if err != nil { From eddd24b3e19622802605547738eb51af7ca8d88d Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 2 Oct 2024 09:59:59 -0700 Subject: [PATCH 34/87] adds a todo --- state/store.go | 1 + 1 file changed, 1 insertion(+) diff --git a/state/store.go b/state/store.go index ba02485a9d..7dfdced052 100644 --- a/state/store.go +++ b/state/store.go @@ -203,6 +203,7 @@ func (store dbStore) save(state State, key []byte) error { } // save next timeouts + // TODO write test for this if err := store.saveConsensusTimeoutsInfo(nextHeight, &abcitypes.TimeoutsInfo{TimeoutPropose: state.TimeoutPropose, TimeoutCommit: state.TimeoutCommit}); err != nil { return err } From 647cd295ba4a44c5905ba2d9d5884196493ffaaf Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 2 Oct 2024 13:37:45 -0700 Subject: [PATCH 35/87] logs timeout propose and timeout commit --- consensus/state.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/consensus/state.go b/consensus/state.go index e1274fd78a..cff3409caf 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -673,8 +673,10 @@ func (cs *State) updateToState(state sm.State) { // to be gathered for the first block. // And alternative solution that relies on clocks: // cs.StartTime = state.LastBlockTime.Add(timeoutCommit) + cs.Logger.Info("timeout_commit is set to", "timeout_commit", cs.config.TimeoutCommit) cs.StartTime = cs.config.Commit(cmttime.Now()) } else { + cs.Logger.Info("timeout_commit is set to", "timeout_commit", cs.config.TimeoutCommit) cs.StartTime = cs.config.Commit(cs.CommitTime) } @@ -1114,6 +1116,7 @@ func (cs *State) enterPropose(height int64, round int32) { }() // If we don't get the proposal and all block parts quick enough, enterPrevote + cs.Logger.Info("scheduling timeoutPropose", "timeout", cs.config.TimeoutPropose) cs.scheduleTimeout(cs.config.Propose(round), height, round, cstypes.RoundStepPropose) // Nothing more to do if we're not a validator From ca5cbf6c22b44323fdc2086d501236be2dfa69c8 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 2 Oct 2024 13:48:11 -0700 Subject: [PATCH 36/87] logs timeouts in second unit --- consensus/state.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index cff3409caf..14c860a24d 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -673,10 +673,12 @@ func (cs *State) updateToState(state sm.State) { // to be gathered for the first block. // And alternative solution that relies on clocks: // cs.StartTime = state.LastBlockTime.Add(timeoutCommit) - cs.Logger.Info("timeout_commit is set to", "timeout_commit", cs.config.TimeoutCommit) + cs.Logger.Info("timeout_commit is set to", "timeout_commit", + cs.config.TimeoutCommit.Seconds()) cs.StartTime = cs.config.Commit(cmttime.Now()) } else { - cs.Logger.Info("timeout_commit is set to", "timeout_commit", cs.config.TimeoutCommit) + cs.Logger.Info("timeout_commit is set to", "timeout_commit", + cs.config.TimeoutCommit.Seconds()) cs.StartTime = cs.config.Commit(cs.CommitTime) } @@ -1116,7 +1118,8 @@ func (cs *State) enterPropose(height int64, round int32) { }() // If we don't get the proposal and all block parts quick enough, enterPrevote - cs.Logger.Info("scheduling timeoutPropose", "timeout", cs.config.TimeoutPropose) + cs.Logger.Info("scheduling timeoutPropose", "timeout", + cs.config.TimeoutPropose.Seconds()) cs.scheduleTimeout(cs.config.Propose(round), height, round, cstypes.RoundStepPropose) // Nothing more to do if we're not a validator From bf59cd5c84f2b25568be756b977cacda0bd8d024 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 2 Oct 2024 13:53:35 -0700 Subject: [PATCH 37/87] checks if config is not nil --- consensus/state.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index 14c860a24d..d14ac8fd1a 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -673,12 +673,17 @@ func (cs *State) updateToState(state sm.State) { // to be gathered for the first block. // And alternative solution that relies on clocks: // cs.StartTime = state.LastBlockTime.Add(timeoutCommit) - cs.Logger.Info("timeout_commit is set to", "timeout_commit", - cs.config.TimeoutCommit.Seconds()) + if cs.config != nil { + cs.Logger.Info("timeout_commit is set to", "timeout_commit", + cs.config.TimeoutCommit.Seconds()) + } + cs.StartTime = cs.config.Commit(cmttime.Now()) } else { - cs.Logger.Info("timeout_commit is set to", "timeout_commit", - cs.config.TimeoutCommit.Seconds()) + if cs.config != nil { + cs.Logger.Info("timeout_commit is set to", "timeout_commit", + cs.config.TimeoutCommit.Seconds()) + } cs.StartTime = cs.config.Commit(cs.CommitTime) } @@ -1118,8 +1123,11 @@ func (cs *State) enterPropose(height int64, round int32) { }() // If we don't get the proposal and all block parts quick enough, enterPrevote - cs.Logger.Info("scheduling timeoutPropose", "timeout", - cs.config.TimeoutPropose.Seconds()) + if cs.config != nil { + cs.Logger.Info("scheduling timeoutPropose", "timeout", + cs.config.TimeoutPropose.Seconds()) + } + cs.scheduleTimeout(cs.config.Propose(round), height, round, cstypes.RoundStepPropose) // Nothing more to do if we're not a validator From 585d6824ac95e53f876756d8d7c3030158fa1245 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 2 Oct 2024 14:01:28 -0700 Subject: [PATCH 38/87] removes the logs --- consensus/state.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index d14ac8fd1a..64721d8613 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -673,17 +673,17 @@ func (cs *State) updateToState(state sm.State) { // to be gathered for the first block. // And alternative solution that relies on clocks: // cs.StartTime = state.LastBlockTime.Add(timeoutCommit) - if cs.config != nil { - cs.Logger.Info("timeout_commit is set to", "timeout_commit", - cs.config.TimeoutCommit.Seconds()) - } + //if cs.config != nil { + // //cs.Logger.Info("timeout_commit is set to", "timeout_commit", + // // cs.config.TimeoutCommit.Seconds()) + //} cs.StartTime = cs.config.Commit(cmttime.Now()) } else { - if cs.config != nil { - cs.Logger.Info("timeout_commit is set to", "timeout_commit", - cs.config.TimeoutCommit.Seconds()) - } + //if cs.config != nil { + // //cs.Logger.Info("timeout_commit is set to", "timeout_commit", + // // cs.config.TimeoutCommit.Seconds()) + //} cs.StartTime = cs.config.Commit(cs.CommitTime) } @@ -1123,10 +1123,10 @@ func (cs *State) enterPropose(height int64, round int32) { }() // If we don't get the proposal and all block parts quick enough, enterPrevote - if cs.config != nil { - cs.Logger.Info("scheduling timeoutPropose", "timeout", - cs.config.TimeoutPropose.Seconds()) - } + //if cs.config != nil { + // cs.Logger.Info("scheduling timeoutPropose", "timeout", + // cs.config.TimeoutPropose.Seconds()) + //} cs.scheduleTimeout(cs.config.Propose(round), height, round, cstypes.RoundStepPropose) From bd49c4c531e5a649ad919e0bc04bccd1a59e15b0 Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 3 Oct 2024 09:47:24 -0700 Subject: [PATCH 39/87] extends store interface with LoadConsensusTimeoutsInfo --- node/node.go | 6 ++++++ state/store.go | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/node/node.go b/node/node.go index 852ed4d564..cd6e2fc53b 100644 --- a/node/node.go +++ b/node/node.go @@ -1367,6 +1367,12 @@ func (n *Node) ConsensusState() *cs.State { return n.consensusState } +// ConsensusStateTimeoutsByHeight returns the Node's timeouts info in +// ConsensusState at a given height. +func (n *Node) ConsensusStateTimeoutsByHeight(height int64) (*abci.TimeoutsInfo, error) { + return n.stateStore.LoadConsensusTimeoutsInfo(height) +} + // ConsensusReactor returns the Node's ConsensusReactor. func (n *Node) ConsensusReactor() *cs.Reactor { return n.consensusReactor diff --git a/state/store.go b/state/store.go index 7dfdced052..cda0209666 100644 --- a/state/store.go +++ b/state/store.go @@ -71,6 +71,8 @@ type Store interface { LoadLastABCIResponse(int64) (*cmtstate.ABCIResponses, error) // LoadConsensusParams loads the consensus params for a given height LoadConsensusParams(int64) (cmtproto.ConsensusParams, error) + // LoadConsensusTimeoutsInfo loads timeouts info for a given height + LoadConsensusTimeoutsInfo(int64) (*abcitypes.TimeoutsInfo, error) // Save overwrites the previous state with the updated one Save(State) error // SaveABCIResponses saves ABCIResponses for a given height @@ -625,7 +627,7 @@ func (store dbStore) LoadConsensusParams(height int64) (cmtproto.ConsensusParams return paramsInfo.ConsensusParams, nil } -func (store dbStore) loadConsensusTimeoutsInfo(height int64) (*abcitypes.TimeoutsInfo, error) { +func (store dbStore) LoadConsensusTimeoutsInfo(height int64) (*abcitypes.TimeoutsInfo, error) { buf, err := store.db.Get(calcTimeoutsKey(height)) if err != nil { return nil, err From 2c2411671dcaccdc5e96b53787d921dd96063bf9 Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 3 Oct 2024 14:46:23 -0700 Subject: [PATCH 40/87] adds two new methods for calculation of timeouts --- config/config.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index 5fe51210d6..0a160072e8 100644 --- a/config/config.go +++ b/config/config.go @@ -1032,6 +1032,11 @@ func (cfg *ConsensusConfig) Propose(round int32) time.Duration { ) * time.Nanosecond } +// ProposeWithCustomTimeout returns the amount of time to wait for a proposal +func (cfg *ConsensusConfig) ProposeWithCustomTimeout(round int32, customTimeout time.Duration) time.Duration { + return time.Duration(customTimeout.Nanoseconds()+cfg.TimeoutProposeDelta.Nanoseconds()*int64(round)) * time.Nanosecond +} + // Prevote returns the amount of time to wait for straggler votes after receiving any +2/3 prevotes func (cfg *ConsensusConfig) Prevote(round int32) time.Duration { return time.Duration( @@ -1047,11 +1052,15 @@ func (cfg *ConsensusConfig) Precommit(round int32) time.Duration { } // Commit returns the amount of time to wait for straggler votes after receiving +2/3 precommits -// for a single block (ie. a commit). +// for a single block (i.e., a commit). func (cfg *ConsensusConfig) Commit(t time.Time) time.Time { return t.Add(cfg.TimeoutCommit) } +func (cfg *ConsensusConfig) CommitWithCustomTimeout(t time.Time, customTimeouts time.Duration) time.Time { + return t.Add(customTimeouts) +} + // WalFile returns the full path to the write-ahead log file func (cfg *ConsensusConfig) WalFile() string { if cfg.walFile != "" { From 61ea40b38c5b94eb101569f449e314b326940c50 Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 3 Oct 2024 14:46:58 -0700 Subject: [PATCH 41/87] utilizes new methods for commit time and timeout propose --- consensus/state.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index 64721d8613..20c91c7f45 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -678,13 +678,13 @@ func (cs *State) updateToState(state sm.State) { // // cs.config.TimeoutCommit.Seconds()) //} - cs.StartTime = cs.config.Commit(cmttime.Now()) + cs.StartTime = cs.config.CommitWithCustomTimeout(cmttime.Now(), cs.state.TimeoutCommit) } else { //if cs.config != nil { // //cs.Logger.Info("timeout_commit is set to", "timeout_commit", // // cs.config.TimeoutCommit.Seconds()) //} - cs.StartTime = cs.config.Commit(cs.CommitTime) + cs.StartTime = cs.config.CommitWithCustomTimeout(cs.CommitTime, cs.state.TimeoutCommit) } cs.Validators = validators @@ -1128,7 +1128,9 @@ func (cs *State) enterPropose(height int64, round int32) { // cs.config.TimeoutPropose.Seconds()) //} - cs.scheduleTimeout(cs.config.Propose(round), height, round, cstypes.RoundStepPropose) + cs.scheduleTimeout(cs.config.ProposeWithCustomTimeout(round, cs.state.TimeoutPropose), + height, + round, cstypes.RoundStepPropose) // Nothing more to do if we're not a validator if cs.privValidator == nil { From 5dca0dcd28e8a6a0a3b33295edbd35ac63f53534 Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 3 Oct 2024 14:47:29 -0700 Subject: [PATCH 42/87] adds logs --- node/node.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/node/node.go b/node/node.go index cd6e2fc53b..43a4d34cff 100644 --- a/node/node.go +++ b/node/node.go @@ -840,21 +840,33 @@ func NewNode(config *cfg.Config, // Handshake, and may have other modifications as well (i.e., depending on // what happened during block replay). state, err = stateStore.Load() + logger.Info("Loaded state after doHandshake", "height", + state.LastBlockHeight, "app_version", + state.Version.Consensus.App, "timeout_commit", state.TimeoutCommit, "timeout_propose", state.TimeoutPropose) if err != nil { + logger.Info("Error loading state after doHandshake", "err", err) return nil, fmt.Errorf("cannot load state: %w", err) } } else { + logger.Info("Skipping handshake, Starting state sync") resp, err := proxyApp.Query().InfoSync(proxy.RequestInfo) if err != nil { return nil, fmt.Errorf("error during info call: %w", err) } - softwareVersion = resp.Version + softwareVersion = resp.Version // TODO is this the same as celestia-app version } + //resp, err := proxyApp.Query().InfoSync(proxy.RequestInfo) + //if err != nil { + // return nil, fmt.Errorf("error during info call: %w", err) + //} + // Determine whether we should do fast sync. This must happen after the handshake, since the // app may modify the validator set, //specifying ourselves as the only validator. - fastSync := config.FastSyncMode && !onlyValidatorIsUs(state, pubKey) + fastSync := config.FastSyncMode && !onlyValidatorIsUs(state, + pubKey) // the state certainly has the latest timeouts according + // the app version lastBlock in the blockstore logNodeStartupInfo(state, pubKey, logger, consensusLogger) @@ -910,6 +922,9 @@ func NewNode(config *cfg.Config, privValidator, csMetrics, stateSync || fastSync, eventBus, consensusLogger, tracer, ) + logger.Info("Consensus reactor created", "timeout_propose", + consensusState.GetState().TimeoutPropose, "timeout_commit", + consensusState.GetState().TimeoutCommit) // Set up state sync reactor, and schedule a sync if requested. // FIXME The way we do phased startups (e.g. replay -> fast sync -> consensus) is very messy, // we should clean this whole thing up. See: From 4831733914d33f5bfccf9fc893f70037b327d4ae Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 3 Oct 2024 15:44:22 -0700 Subject: [PATCH 43/87] updates protobufs --- abci/types/types.pb.go | 385 +++++++++++++++--------------- proto/tendermint/abci/types.proto | 6 +- 2 files changed, 198 insertions(+), 193 deletions(-) diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index 471cbec607..66631d2c7a 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -3630,196 +3630,201 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 3017 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcd, 0x73, 0x23, 0xc5, - 0x15, 0xd7, 0xe8, 0x7b, 0x9e, 0xac, 0x0f, 0xf7, 0x2e, 0xbb, 0x62, 0x58, 0xec, 0x65, 0xb6, 0xf8, - 0x5a, 0xc0, 0x0e, 0xa6, 0x96, 0x40, 0x20, 0x01, 0x4b, 0xab, 0x45, 0x66, 0x8d, 0xed, 0x8c, 0xe5, - 0x25, 0x5f, 0xec, 0x30, 0x92, 0xda, 0xd2, 0xb0, 0xd2, 0xcc, 0x30, 0xd3, 0x32, 0xf6, 0x1e, 0x53, - 0x49, 0xa5, 0x42, 0x2e, 0x54, 0xe5, 0x92, 0x0b, 0x7f, 0x42, 0xee, 0xb9, 0x24, 0x97, 0x5c, 0xa8, - 0xca, 0x21, 0x1c, 0x73, 0x48, 0x91, 0x14, 0xe4, 0x94, 0x7f, 0x20, 0xa7, 0x54, 0x52, 0xfd, 0x31, - 0x5f, 0x92, 0xc6, 0x92, 0x21, 0xb7, 0xdc, 0xa6, 0xbb, 0xdf, 0x7b, 0x3d, 0xfd, 0xa6, 0xfb, 0xf7, - 0xde, 0xef, 0x4d, 0xc3, 0x63, 0x04, 0x5b, 0x7d, 0xec, 0x8e, 0x4d, 0x8b, 0x6c, 0x1a, 0xdd, 0x9e, - 0xb9, 0x49, 0xce, 0x1c, 0xec, 0x6d, 0x38, 0xae, 0x4d, 0x6c, 0x54, 0x0d, 0x07, 0x37, 0xe8, 0xa0, - 0xf2, 0x78, 0x44, 0xba, 0xe7, 0x9e, 0x39, 0xc4, 0xde, 0x74, 0x5c, 0xdb, 0x3e, 0xe6, 0xf2, 0xca, - 0xb5, 0xc8, 0x30, 0xb3, 0x13, 0xb5, 0x16, 0x1b, 0x15, 0xca, 0x0f, 0xf0, 0x99, 0x3f, 0xfa, 0xf8, - 0x8c, 0xae, 0x63, 0xb8, 0xc6, 0xd8, 0x1f, 0x5e, 0x1f, 0xd8, 0xf6, 0x60, 0x84, 0x37, 0x59, 0xab, - 0x3b, 0x39, 0xde, 0x24, 0xe6, 0x18, 0x7b, 0xc4, 0x18, 0x3b, 0x42, 0xe0, 0xf2, 0xc0, 0x1e, 0xd8, - 0xec, 0x71, 0x93, 0x3e, 0xf1, 0x5e, 0xf5, 0xf7, 0x32, 0x14, 0x34, 0xfc, 0xe1, 0x04, 0x7b, 0x04, - 0x6d, 0x41, 0x16, 0xf7, 0x86, 0x76, 0x5d, 0xba, 0x2e, 0x3d, 0x53, 0xda, 0xba, 0xb6, 0x31, 0xb5, - 0xb8, 0x0d, 0x21, 0xd7, 0xea, 0x0d, 0xed, 0x76, 0x4a, 0x63, 0xb2, 0xe8, 0x16, 0xe4, 0x8e, 0x47, - 0x13, 0x6f, 0x58, 0x4f, 0x33, 0xa5, 0xc7, 0x93, 0x94, 0xee, 0x50, 0xa1, 0x76, 0x4a, 0xe3, 0xd2, - 0x74, 0x2a, 0xd3, 0x3a, 0xb6, 0xeb, 0x99, 0xf3, 0xa7, 0xda, 0xb1, 0x8e, 0xd9, 0x54, 0x54, 0x16, - 0x35, 0x00, 0x3c, 0x4c, 0x74, 0xdb, 0x21, 0xa6, 0x6d, 0xd5, 0xb3, 0x4c, 0xf3, 0x89, 0x24, 0xcd, - 0x43, 0x4c, 0xf6, 0x99, 0x60, 0x3b, 0xa5, 0xc9, 0x9e, 0xdf, 0xa0, 0x36, 0x4c, 0xcb, 0x24, 0x7a, - 0x6f, 0x68, 0x98, 0x56, 0x3d, 0x77, 0xbe, 0x8d, 0x1d, 0xcb, 0x24, 0x4d, 0x2a, 0x48, 0x6d, 0x98, - 0x7e, 0x83, 0x2e, 0xf9, 0xc3, 0x09, 0x76, 0xcf, 0xea, 0xf9, 0xf3, 0x97, 0xfc, 0x7d, 0x2a, 0x44, - 0x97, 0xcc, 0xa4, 0x51, 0x0b, 0x4a, 0x5d, 0x3c, 0x30, 0x2d, 0xbd, 0x3b, 0xb2, 0x7b, 0x0f, 0xea, - 0x05, 0xa6, 0xac, 0x26, 0x29, 0x37, 0xa8, 0x68, 0x83, 0x4a, 0xb6, 0x53, 0x1a, 0x74, 0x83, 0x16, - 0x7a, 0x1d, 0x8a, 0xbd, 0x21, 0xee, 0x3d, 0xd0, 0xc9, 0x69, 0xbd, 0xc8, 0x6c, 0xac, 0x27, 0xd9, - 0x68, 0x52, 0xb9, 0xce, 0x69, 0x3b, 0xa5, 0x15, 0x7a, 0xfc, 0x91, 0xae, 0xbf, 0x8f, 0x47, 0xe6, - 0x09, 0x76, 0xa9, 0xbe, 0x7c, 0xfe, 0xfa, 0x6f, 0x73, 0x49, 0x66, 0x41, 0xee, 0xfb, 0x0d, 0xf4, - 0x06, 0xc8, 0xd8, 0xea, 0x8b, 0x65, 0x00, 0x33, 0x71, 0x3d, 0x71, 0xaf, 0x58, 0x7d, 0x7f, 0x11, - 0x45, 0x2c, 0x9e, 0xd1, 0x2b, 0x90, 0xef, 0xd9, 0xe3, 0xb1, 0x49, 0xea, 0x25, 0xa6, 0xbd, 0x96, - 0xb8, 0x00, 0x26, 0xd5, 0x4e, 0x69, 0x42, 0x1e, 0xed, 0x41, 0x65, 0x64, 0x7a, 0x44, 0xf7, 0x2c, - 0xc3, 0xf1, 0x86, 0x36, 0xf1, 0xea, 0x2b, 0xcc, 0xc2, 0x93, 0x49, 0x16, 0x76, 0x4d, 0x8f, 0x1c, - 0xfa, 0xc2, 0xed, 0x94, 0x56, 0x1e, 0x45, 0x3b, 0xa8, 0x3d, 0xfb, 0xf8, 0x18, 0xbb, 0x81, 0xc1, - 0x7a, 0xf9, 0x7c, 0x7b, 0xfb, 0x54, 0xda, 0xd7, 0xa7, 0xf6, 0xec, 0x68, 0x07, 0xfa, 0x31, 0x5c, - 0x1a, 0xd9, 0x46, 0x3f, 0x30, 0xa7, 0xf7, 0x86, 0x13, 0xeb, 0x41, 0xbd, 0xc2, 0x8c, 0x3e, 0x9b, - 0xf8, 0x92, 0xb6, 0xd1, 0xf7, 0x4d, 0x34, 0xa9, 0x42, 0x3b, 0xa5, 0xad, 0x8e, 0xa6, 0x3b, 0xd1, - 0x7d, 0xb8, 0x6c, 0x38, 0xce, 0xe8, 0x6c, 0xda, 0x7a, 0x95, 0x59, 0xbf, 0x99, 0x64, 0x7d, 0x9b, - 0xea, 0x4c, 0x9b, 0x47, 0xc6, 0x4c, 0x2f, 0xea, 0x40, 0xcd, 0x71, 0xb1, 0x63, 0xb8, 0x58, 0x77, - 0x5c, 0xdb, 0xb1, 0x3d, 0x63, 0x54, 0xaf, 0x31, 0xdb, 0x4f, 0x27, 0xd9, 0x3e, 0xe0, 0xf2, 0x07, - 0x42, 0xbc, 0x9d, 0xd2, 0xaa, 0x4e, 0xbc, 0x8b, 0x5b, 0xb5, 0x7b, 0xd8, 0xf3, 0x42, 0xab, 0xab, - 0x8b, 0xac, 0x32, 0xf9, 0xb8, 0xd5, 0x58, 0x57, 0xa3, 0x00, 0xb9, 0x13, 0x63, 0x34, 0xc1, 0xea, - 0xd3, 0x50, 0x8a, 0xc0, 0x12, 0xaa, 0x43, 0x61, 0x8c, 0x3d, 0xcf, 0x18, 0x60, 0x86, 0x62, 0xb2, - 0xe6, 0x37, 0xd5, 0x0a, 0xac, 0x44, 0xa1, 0x48, 0x1d, 0x07, 0x8a, 0x14, 0x64, 0xa8, 0xe2, 0x09, - 0x76, 0x3d, 0x8a, 0x2c, 0x42, 0x51, 0x34, 0xd1, 0x0d, 0x28, 0xb3, 0xad, 0xae, 0xfb, 0xe3, 0x14, - 0xe9, 0xb2, 0xda, 0x0a, 0xeb, 0xbc, 0x27, 0x84, 0xd6, 0xa1, 0xe4, 0x6c, 0x39, 0x81, 0x48, 0x86, - 0x89, 0x80, 0xb3, 0xe5, 0x08, 0x01, 0xf5, 0x3b, 0x50, 0x9b, 0x46, 0x26, 0x54, 0x83, 0xcc, 0x03, - 0x7c, 0x26, 0xe6, 0xa3, 0x8f, 0xe8, 0xb2, 0x58, 0x16, 0x9b, 0x43, 0xd6, 0xc4, 0x1a, 0xff, 0x94, - 0x0e, 0x94, 0x03, 0x48, 0x42, 0xaf, 0x40, 0x96, 0x22, 0xbc, 0x00, 0x6b, 0x65, 0x83, 0xc3, 0xff, - 0x86, 0x0f, 0xff, 0x1b, 0x1d, 0x1f, 0xfe, 0x1b, 0xc5, 0xcf, 0xbe, 0x58, 0x4f, 0x7d, 0xf2, 0xb7, - 0x75, 0x49, 0x63, 0x1a, 0xe8, 0x51, 0x8a, 0x20, 0x86, 0x69, 0xe9, 0x66, 0x5f, 0xcc, 0x53, 0x60, - 0xed, 0x9d, 0x3e, 0xba, 0x0b, 0xb5, 0x9e, 0x6d, 0x79, 0xd8, 0xf2, 0x26, 0x9e, 0xce, 0xc3, 0x8b, - 0x80, 0xe8, 0xd9, 0x13, 0xde, 0xf4, 0x05, 0x0f, 0x98, 0x9c, 0x56, 0xed, 0xc5, 0x3b, 0xd0, 0x1d, - 0x80, 0x13, 0x63, 0x64, 0xf6, 0x0d, 0x62, 0xbb, 0x5e, 0x3d, 0x7b, 0x3d, 0x33, 0xd7, 0xcc, 0x3d, - 0x5f, 0xe4, 0xc8, 0xe9, 0x1b, 0x04, 0x37, 0xb2, 0xf4, 0x6d, 0xb5, 0x88, 0x26, 0x7a, 0x0a, 0xaa, - 0x86, 0xe3, 0xe8, 0x1e, 0x31, 0x08, 0xd6, 0xbb, 0x67, 0x04, 0x7b, 0x0c, 0xb8, 0x57, 0xb4, 0xb2, - 0xe1, 0x38, 0x87, 0xb4, 0xb7, 0x41, 0x3b, 0xd1, 0x93, 0x50, 0xa1, 0x20, 0x6d, 0x1a, 0x23, 0x7d, - 0x88, 0xcd, 0xc1, 0x90, 0x30, 0x80, 0xce, 0x68, 0x65, 0xd1, 0xdb, 0x66, 0x9d, 0x6a, 0x3f, 0xd8, - 0x08, 0x0c, 0xa0, 0x11, 0x82, 0x6c, 0xdf, 0x20, 0x06, 0x73, 0xe4, 0x8a, 0xc6, 0x9e, 0x69, 0x9f, - 0x63, 0x90, 0xa1, 0x70, 0x0f, 0x7b, 0x46, 0x57, 0x20, 0x2f, 0xcc, 0x66, 0x98, 0x59, 0xd1, 0xa2, - 0xdf, 0xcc, 0x71, 0xed, 0x13, 0xcc, 0x22, 0x52, 0x51, 0xe3, 0x0d, 0xf5, 0x67, 0x69, 0x58, 0x9d, - 0x81, 0x72, 0x6a, 0x77, 0x68, 0x78, 0x43, 0x7f, 0x2e, 0xfa, 0x8c, 0x5e, 0xa6, 0x76, 0x8d, 0x3e, - 0x76, 0x45, 0x08, 0xad, 0x47, 0x5d, 0xc4, 0xd3, 0x83, 0x36, 0x1b, 0x17, 0xae, 0x11, 0xd2, 0x68, - 0x1f, 0x6a, 0x23, 0xc3, 0x23, 0x3a, 0x87, 0x46, 0x3d, 0x12, 0x4e, 0x67, 0x03, 0xc2, 0xae, 0xe1, - 0x83, 0x29, 0xdd, 0xec, 0xc2, 0x50, 0x65, 0x14, 0xeb, 0x45, 0x1a, 0x5c, 0xee, 0x9e, 0x3d, 0x34, - 0x2c, 0x62, 0x5a, 0x58, 0x9f, 0xf9, 0x72, 0x8f, 0xce, 0x18, 0x6d, 0x9d, 0x98, 0x7d, 0x6c, 0xf5, - 0xfc, 0x4f, 0x76, 0x29, 0x50, 0x0e, 0x3e, 0xa9, 0xa7, 0x6a, 0x50, 0x89, 0x07, 0x23, 0x54, 0x81, - 0x34, 0x39, 0x15, 0x0e, 0x48, 0x93, 0x53, 0xf4, 0x2d, 0xc8, 0xd2, 0x45, 0xb2, 0xc5, 0x57, 0xe6, - 0x64, 0x02, 0x42, 0xaf, 0x73, 0xe6, 0x60, 0x8d, 0x49, 0xaa, 0x6a, 0x70, 0x1a, 0x82, 0x00, 0x35, - 0x6d, 0x55, 0x7d, 0x16, 0xaa, 0x53, 0x11, 0x28, 0xf2, 0xfd, 0xa4, 0xe8, 0xf7, 0x53, 0xab, 0x50, - 0x8e, 0x85, 0x1b, 0xf5, 0x0a, 0x5c, 0x9e, 0x17, 0x3d, 0xd4, 0x5f, 0x4a, 0xc1, 0x40, 0x2c, 0x0c, - 0xa0, 0x5b, 0x50, 0x0c, 0xe2, 0x07, 0x3f, 0x8e, 0xb3, 0xce, 0xf2, 0x85, 0xb5, 0x40, 0x94, 0x9e, - 0x43, 0xba, 0xaf, 0xd9, 0x86, 0x48, 0xb3, 0x37, 0x2f, 0x18, 0x8e, 0xd3, 0xa6, 0x7b, 0x62, 0x1d, - 0x4a, 0x74, 0x68, 0x0a, 0x4e, 0x0c, 0x27, 0x80, 0x93, 0xf7, 0xa1, 0x9e, 0x14, 0x3c, 0xa6, 0x16, - 0x9a, 0x0d, 0x36, 0xea, 0x15, 0xc8, 0x1f, 0xdb, 0xee, 0xd8, 0x20, 0x6c, 0xb6, 0xb2, 0x26, 0x5a, - 0x74, 0x03, 0xf3, 0x40, 0x92, 0x61, 0xdd, 0xbc, 0xa1, 0xea, 0xf0, 0x68, 0x62, 0x00, 0xa1, 0x2a, - 0xa6, 0xd5, 0xc7, 0xdc, 0xe3, 0x65, 0x8d, 0x37, 0x42, 0x43, 0x7c, 0x35, 0xbc, 0x41, 0xa7, 0xf5, - 0x98, 0x33, 0x98, 0x7d, 0x59, 0x13, 0x2d, 0xf5, 0x1f, 0x12, 0x5c, 0x99, 0x1f, 0x46, 0xd0, 0x2d, - 0x00, 0x0e, 0xb9, 0xc1, 0xc1, 0x2c, 0x6d, 0x5d, 0x99, 0x3d, 0x16, 0xb7, 0x0d, 0x62, 0x68, 0x32, - 0x93, 0xa4, 0x8f, 0x14, 0x28, 0x42, 0x35, 0xdd, 0x33, 0x1f, 0xf2, 0x5d, 0x95, 0xd1, 0xca, 0x81, - 0xcc, 0xa1, 0xf9, 0x30, 0x0e, 0x80, 0x99, 0x38, 0x00, 0x86, 0xbe, 0xcb, 0xc6, 0x0e, 0xb9, 0x8f, - 0xb6, 0xb9, 0x8b, 0xa2, 0xad, 0xfa, 0x8b, 0xe8, 0x32, 0x63, 0x41, 0x2c, 0x72, 0xf2, 0xa5, 0x0b, - 0x9d, 0xfc, 0xb8, 0x7b, 0xd2, 0x4b, 0xba, 0x47, 0xfd, 0x35, 0x40, 0x51, 0xc3, 0x9e, 0x43, 0x61, - 0x1a, 0x35, 0x40, 0xc6, 0xa7, 0x3d, 0xcc, 0x73, 0x69, 0x29, 0x31, 0x17, 0xe5, 0xd2, 0x2d, 0x5f, - 0x92, 0x26, 0x82, 0x81, 0x1a, 0x7a, 0x49, 0xf0, 0x85, 0xe4, 0xd4, 0x5f, 0xa8, 0x47, 0x09, 0xc3, - 0xcb, 0x3e, 0x61, 0xc8, 0x24, 0xe6, 0x7e, 0x5c, 0x6b, 0x8a, 0x31, 0xbc, 0x24, 0x18, 0x43, 0x76, - 0xc1, 0x64, 0x31, 0xca, 0xd0, 0x8c, 0x51, 0x86, 0xdc, 0x82, 0x65, 0x26, 0x70, 0x86, 0x66, 0x8c, - 0x33, 0xe4, 0x17, 0x18, 0x49, 0x20, 0x0d, 0x2f, 0xfb, 0xa4, 0xa1, 0xb0, 0x60, 0xd9, 0x53, 0xac, - 0xe1, 0x4e, 0x9c, 0x35, 0xf0, 0x8c, 0xff, 0x46, 0xa2, 0x76, 0x22, 0x6d, 0xf8, 0x6e, 0x84, 0x36, - 0xc8, 0x89, 0x39, 0x3b, 0x37, 0x32, 0x87, 0x37, 0x34, 0x63, 0xbc, 0x01, 0x16, 0xf8, 0x20, 0x81, - 0x38, 0xbc, 0x19, 0x25, 0x0e, 0xa5, 0x44, 0xee, 0x21, 0x36, 0xcd, 0x3c, 0xe6, 0xf0, 0x6a, 0xc0, - 0x1c, 0x56, 0x12, 0xa9, 0x8f, 0x58, 0xc3, 0x34, 0x75, 0xd8, 0x9f, 0xa1, 0x0e, 0x3c, 0xd5, 0x7f, - 0x2a, 0xd1, 0xc4, 0x02, 0xee, 0xb0, 0x3f, 0xc3, 0x1d, 0x2a, 0x0b, 0x0c, 0x2e, 0x20, 0x0f, 0x3f, - 0x99, 0x4f, 0x1e, 0x92, 0xd3, 0x7b, 0xf1, 0x9a, 0xcb, 0xb1, 0x07, 0x3d, 0x81, 0x3d, 0xf0, 0x0c, - 0xff, 0xb9, 0x44, 0xf3, 0x4b, 0xd3, 0x87, 0xa3, 0x39, 0xf4, 0x81, 0x27, 0xfa, 0xcf, 0x24, 0x1a, - 0x5f, 0x82, 0x3f, 0x1c, 0xcd, 0xe1, 0x0f, 0x68, 0xa1, 0xd9, 0xe5, 0x09, 0xc4, 0xb3, 0x34, 0x4f, - 0x9b, 0x82, 0x39, 0x1a, 0xc9, 0xb0, 0xeb, 0xda, 0xae, 0xc8, 0xcd, 0x79, 0x43, 0x7d, 0x86, 0x66, - 0x8e, 0x21, 0xa4, 0x9d, 0x43, 0x36, 0x58, 0x4e, 0x11, 0x81, 0x31, 0xf5, 0x77, 0x52, 0xa8, 0xcb, - 0x92, 0xad, 0x68, 0xd6, 0x29, 0x8b, 0xac, 0x33, 0xc2, 0x41, 0xd2, 0x71, 0x0e, 0xb2, 0x28, 0x1f, - 0x40, 0x37, 0x61, 0x95, 0x25, 0x83, 0x3c, 0x2e, 0xc4, 0x42, 0x58, 0x95, 0x0e, 0xf0, 0xa3, 0xc4, - 0x63, 0xd9, 0x0b, 0x70, 0x29, 0x22, 0x1b, 0xa4, 0x20, 0x3c, 0xa7, 0xae, 0x05, 0xd2, 0xdb, 0x3c, - 0x17, 0x51, 0xdf, 0x09, 0x1d, 0x14, 0x52, 0x17, 0x04, 0xd9, 0x9e, 0xdd, 0xc7, 0x22, 0xfe, 0xb3, - 0x67, 0x4a, 0x67, 0x46, 0xf6, 0x40, 0x44, 0x54, 0xfa, 0x48, 0xa5, 0x02, 0xcc, 0x96, 0x39, 0x24, - 0xab, 0x7f, 0x94, 0x42, 0x7b, 0x21, 0x9b, 0x99, 0x47, 0x3c, 0xa4, 0xff, 0x0d, 0xf1, 0x48, 0x7f, - 0x6d, 0xe2, 0x11, 0x4d, 0xd0, 0x32, 0xb1, 0x04, 0x4d, 0xfd, 0x97, 0x14, 0x7e, 0xe1, 0x80, 0x46, - 0x7c, 0x3d, 0x8f, 0x84, 0xc9, 0x54, 0x8e, 0x7d, 0x2f, 0x91, 0x4c, 0x09, 0x72, 0x98, 0x67, 0xf3, - 0xc6, 0xc9, 0x61, 0x81, 0xa7, 0x57, 0xac, 0x81, 0x5e, 0x01, 0x99, 0x55, 0x18, 0x75, 0xdb, 0xf1, - 0x44, 0x78, 0x78, 0x2c, 0xba, 0x56, 0x5e, 0x48, 0xdc, 0x38, 0xa0, 0x32, 0xfb, 0x8e, 0xa7, 0x15, - 0x1d, 0xf1, 0x14, 0xc9, 0x75, 0xe4, 0x58, 0xae, 0x73, 0x0d, 0x64, 0xfa, 0xf6, 0x9e, 0x63, 0xf4, - 0x30, 0x83, 0x7a, 0x59, 0x0b, 0x3b, 0xd4, 0xfb, 0x80, 0x66, 0x83, 0x0d, 0x6a, 0x43, 0x1e, 0x9f, - 0x60, 0x8b, 0xd0, 0xaf, 0x96, 0x99, 0x4e, 0x47, 0x04, 0x5b, 0xc0, 0x16, 0x69, 0xd4, 0xa9, 0x93, - 0xff, 0xf9, 0xc5, 0x7a, 0x8d, 0x4b, 0x3f, 0x6f, 0x8f, 0x4d, 0x82, 0xc7, 0x0e, 0x39, 0xd3, 0x84, - 0xbe, 0xfa, 0xd7, 0x34, 0x4d, 0xdd, 0x63, 0x81, 0x68, 0xae, 0x6f, 0xfd, 0x03, 0x94, 0x8e, 0xd0, - 0xb6, 0xe5, 0xfc, 0xbd, 0x06, 0x30, 0x30, 0x3c, 0xfd, 0x23, 0xc3, 0x22, 0xb8, 0x2f, 0x9c, 0x1e, - 0xe9, 0x41, 0x0a, 0x14, 0x69, 0x6b, 0xe2, 0xe1, 0xbe, 0x60, 0x90, 0x41, 0x3b, 0xb2, 0xce, 0xc2, - 0x37, 0x5b, 0x67, 0xdc, 0xcb, 0xc5, 0x29, 0x2f, 0x47, 0x92, 0x66, 0x39, 0x9a, 0x34, 0xd3, 0x77, - 0x73, 0x5c, 0xd3, 0x76, 0x4d, 0x72, 0xc6, 0x3e, 0x4d, 0x46, 0x0b, 0xda, 0xe8, 0x06, 0x94, 0xc7, - 0x78, 0xec, 0xd8, 0xf6, 0x48, 0xe7, 0xe0, 0x55, 0x62, 0xaa, 0x2b, 0xa2, 0xb3, 0xc5, 0x30, 0xec, - 0xe7, 0xe9, 0xf0, 0xf8, 0x85, 0xf4, 0xe9, 0xff, 0xce, 0xc1, 0xea, 0xaf, 0x58, 0x4d, 0x25, 0x9e, - 0x6a, 0xa0, 0x43, 0x58, 0x0d, 0x8e, 0xbf, 0x3e, 0x61, 0xb0, 0xe0, 0x6f, 0xe8, 0x65, 0xf1, 0xa3, - 0x76, 0x12, 0xef, 0xf6, 0xd0, 0x0f, 0xe0, 0xea, 0x14, 0xb4, 0x05, 0xa6, 0xd3, 0x4b, 0x22, 0xdc, - 0x23, 0x71, 0x84, 0xf3, 0x2d, 0x87, 0xbe, 0xca, 0x7c, 0xc3, 0x43, 0xb7, 0x43, 0x69, 0x7a, 0x34, - 0x71, 0x9a, 0xfb, 0xf5, 0x6f, 0x40, 0xd9, 0xc5, 0x84, 0x12, 0xa7, 0x58, 0x21, 0x64, 0x85, 0x77, - 0x8a, 0xf2, 0xca, 0x01, 0x3c, 0x32, 0x37, 0x81, 0x42, 0xdf, 0x06, 0x39, 0xcc, 0xbd, 0xa4, 0x84, - 0x9a, 0x42, 0x40, 0x93, 0x43, 0x59, 0xf5, 0x0f, 0x52, 0x68, 0x32, 0x4e, 0xbc, 0x5b, 0x90, 0x77, - 0xb1, 0x37, 0x19, 0x71, 0xa6, 0x5b, 0xd9, 0x7a, 0x61, 0xb9, 0xd4, 0x8b, 0xf6, 0x4e, 0x46, 0x44, - 0x13, 0xca, 0xea, 0x7d, 0xc8, 0xf3, 0x1e, 0x54, 0x82, 0xc2, 0xd1, 0xde, 0xdd, 0xbd, 0xfd, 0x77, - 0xf7, 0x6a, 0x29, 0x04, 0x90, 0xdf, 0x6e, 0x36, 0x5b, 0x07, 0x9d, 0x9a, 0x84, 0x64, 0xc8, 0x6d, - 0x37, 0xf6, 0xb5, 0x4e, 0x2d, 0x4d, 0xbb, 0xb5, 0xd6, 0xdb, 0xad, 0x66, 0xa7, 0x96, 0x41, 0xab, - 0x50, 0xe6, 0xcf, 0xfa, 0x9d, 0x7d, 0xed, 0x9d, 0xed, 0x4e, 0x2d, 0x1b, 0xe9, 0x3a, 0x6c, 0xed, - 0xdd, 0x6e, 0x69, 0xb5, 0x9c, 0xfa, 0x22, 0xa5, 0xd2, 0x09, 0xc9, 0x5a, 0x48, 0x9a, 0xa5, 0x08, - 0x69, 0x56, 0x7f, 0x93, 0x06, 0x25, 0x39, 0x03, 0x43, 0x6f, 0x4f, 0x2d, 0x7c, 0xeb, 0x02, 0xe9, - 0xdb, 0xd4, 0xea, 0xd1, 0x93, 0x50, 0x71, 0xf1, 0x31, 0x26, 0xbd, 0x21, 0xcf, 0x08, 0x79, 0xc4, - 0x2c, 0x6b, 0x65, 0xd1, 0xcb, 0x94, 0x3c, 0x2e, 0xf6, 0x01, 0xee, 0x11, 0x9d, 0x43, 0x11, 0xdf, - 0x74, 0x32, 0x15, 0xa3, 0xbd, 0x87, 0xbc, 0x53, 0x7d, 0xff, 0x42, 0xbe, 0x94, 0x21, 0xa7, 0xb5, - 0x3a, 0xda, 0x0f, 0x6b, 0x19, 0x84, 0xa0, 0xc2, 0x1e, 0xf5, 0xc3, 0xbd, 0xed, 0x83, 0xc3, 0xf6, - 0x3e, 0xf5, 0xe5, 0x25, 0xa8, 0xfa, 0xbe, 0xf4, 0x3b, 0x73, 0xea, 0x01, 0x5c, 0x4d, 0x48, 0x1f, - 0xbf, 0x66, 0xdd, 0x40, 0xfd, 0xad, 0x14, 0x35, 0x19, 0xe7, 0xe8, 0x6f, 0x4d, 0x79, 0x7a, 0x73, - 0xd9, 0xa4, 0x73, 0xda, 0xcd, 0x0a, 0x14, 0xb1, 0x28, 0x98, 0x31, 0x07, 0xaf, 0x68, 0x41, 0x5b, - 0x7d, 0x61, 0xb1, 0xd3, 0xc2, 0x5d, 0x97, 0x56, 0xff, 0x23, 0x41, 0x75, 0x0a, 0x22, 0xd0, 0x16, - 0xe4, 0x38, 0xaf, 0x4a, 0xfa, 0x79, 0xc7, 0x10, 0x4e, 0xe0, 0x09, 0x17, 0x45, 0xaf, 0xc7, 0x5e, - 0x69, 0x06, 0x8a, 0xb8, 0xb3, 0xfc, 0x2a, 0x9f, 0x50, 0x0d, 0x34, 0xd0, 0x1b, 0x20, 0x07, 0x58, - 0x27, 0xc8, 0xfc, 0x13, 0xb3, 0xea, 0x01, 0x4a, 0x0a, 0xfd, 0x50, 0x07, 0xbd, 0x1a, 0xa6, 0xbb, - 0xd9, 0x59, 0x36, 0x27, 0xd4, 0xb9, 0x80, 0x50, 0xf6, 0xe5, 0xd5, 0x26, 0x94, 0x22, 0xeb, 0x41, - 0x8f, 0x81, 0x3c, 0x36, 0x4e, 0x45, 0x6d, 0x98, 0x57, 0xf7, 0x8a, 0x63, 0xe3, 0x94, 0x97, 0x85, - 0xaf, 0x42, 0x81, 0x0e, 0x0e, 0x0c, 0x4f, 0x54, 0x83, 0xf2, 0x63, 0xe3, 0xf4, 0x2d, 0xc3, 0x53, - 0xdf, 0x83, 0x4a, 0xbc, 0x2e, 0x4a, 0xcf, 0xa2, 0x6b, 0x4f, 0xac, 0x3e, 0xb3, 0x91, 0xd3, 0x78, - 0x03, 0xdd, 0x82, 0xdc, 0x89, 0xcd, 0xe1, 0x7a, 0x3e, 0x68, 0xdd, 0xb3, 0x09, 0x8e, 0xd4, 0x55, - 0xb9, 0xb4, 0xfa, 0x10, 0x72, 0x0c, 0x7e, 0x29, 0x94, 0xb2, 0x0a, 0xa7, 0x48, 0xf5, 0xe9, 0x33, - 0x7a, 0x0f, 0xc0, 0x20, 0xc4, 0x35, 0xbb, 0x93, 0xd0, 0xf0, 0xfa, 0x7c, 0xf8, 0xde, 0xf6, 0xe5, - 0x1a, 0xd7, 0x04, 0x8e, 0x5f, 0x0e, 0x55, 0x23, 0x58, 0x1e, 0x31, 0xa8, 0xee, 0x41, 0x25, 0xae, - 0x1b, 0xfd, 0xd7, 0xb0, 0x32, 0xe7, 0x5f, 0x43, 0x90, 0x4e, 0x06, 0xc9, 0x68, 0x86, 0x57, 0xb3, - 0x59, 0x43, 0xfd, 0x58, 0x82, 0x62, 0xe7, 0x54, 0xec, 0xd1, 0x84, 0x42, 0x6a, 0xa8, 0x9a, 0x8e, - 0x16, 0x05, 0x79, 0x65, 0x36, 0x13, 0xd4, 0x7b, 0xdf, 0x0c, 0x0e, 0x54, 0x76, 0xd9, 0x2a, 0x82, - 0x5f, 0xfe, 0x12, 0x70, 0xfd, 0x1a, 0xc8, 0xc1, 0xae, 0xa2, 0x9c, 0xc9, 0xe8, 0xf7, 0x5d, 0xec, - 0x79, 0x62, 0x6d, 0x7e, 0x93, 0xd5, 0xe5, 0xed, 0x8f, 0x44, 0xd9, 0x31, 0xa3, 0xf1, 0x86, 0xda, - 0x87, 0xea, 0x54, 0xe0, 0x46, 0xaf, 0x41, 0xc1, 0x99, 0x74, 0x75, 0xdf, 0x3d, 0x53, 0x87, 0xc7, - 0xcf, 0x9f, 0x27, 0xdd, 0x91, 0xd9, 0xbb, 0x8b, 0xcf, 0xfc, 0x97, 0x71, 0x26, 0xdd, 0xbb, 0xdc, - 0x8b, 0x7c, 0x96, 0x74, 0x74, 0x96, 0x13, 0x28, 0xfa, 0x9b, 0x02, 0x7d, 0x2f, 0x7a, 0x4e, 0xfc, - 0xbf, 0x35, 0x89, 0xc9, 0x84, 0x30, 0x1f, 0x39, 0x26, 0x37, 0x61, 0xd5, 0x33, 0x07, 0x16, 0xee, - 0xeb, 0x21, 0x6b, 0x63, 0xb3, 0x15, 0xb5, 0x2a, 0x1f, 0xd8, 0xf5, 0x29, 0x9b, 0xfa, 0x6f, 0x09, - 0x8a, 0xfe, 0x81, 0x45, 0x2f, 0x46, 0xf6, 0x5d, 0x65, 0x4e, 0xc5, 0xcc, 0x17, 0x0c, 0x4b, 0xeb, - 0xf1, 0x77, 0x4d, 0x5f, 0xfc, 0x5d, 0x93, 0xfe, 0x91, 0xf8, 0xe5, 0xd3, 0xec, 0x85, 0x7f, 0x56, - 0x3d, 0x0f, 0x88, 0xd8, 0xc4, 0x18, 0xe9, 0x27, 0x36, 0x31, 0xad, 0x81, 0xce, 0x9d, 0xcd, 0x73, - 0xca, 0x1a, 0x1b, 0xb9, 0xc7, 0x06, 0x0e, 0x98, 0xdf, 0x7f, 0x2a, 0x41, 0x31, 0xc8, 0x0e, 0x2e, - 0x5a, 0x07, 0xbf, 0x02, 0x79, 0x11, 0x00, 0x79, 0x21, 0x5c, 0xb4, 0x82, 0x9f, 0x36, 0xd9, 0xc8, - 0x4f, 0x1b, 0x05, 0x8a, 0x63, 0x4c, 0x0c, 0x16, 0x67, 0x38, 0x71, 0x0e, 0xda, 0x37, 0x5f, 0x85, - 0x52, 0xe4, 0xa7, 0x05, 0x3d, 0x79, 0x7b, 0xad, 0x77, 0x6b, 0x29, 0xa5, 0xf0, 0xf1, 0xa7, 0xd7, - 0x33, 0x7b, 0xf8, 0x23, 0xba, 0x67, 0xb5, 0x56, 0xb3, 0xdd, 0x6a, 0xde, 0xad, 0x49, 0x4a, 0xe9, - 0xe3, 0x4f, 0xaf, 0x17, 0x34, 0xcc, 0x0a, 0x6d, 0x37, 0xdb, 0xb0, 0x12, 0xfd, 0x2a, 0xf1, 0x70, - 0x80, 0xa0, 0x72, 0xfb, 0xe8, 0x60, 0x77, 0xa7, 0xb9, 0xdd, 0x69, 0xe9, 0xf7, 0xf6, 0x3b, 0xad, - 0x9a, 0x84, 0xae, 0xc2, 0xa5, 0xdd, 0x9d, 0xb7, 0xda, 0x1d, 0xbd, 0xb9, 0xbb, 0xd3, 0xda, 0xeb, - 0xe8, 0xdb, 0x9d, 0xce, 0x76, 0xf3, 0x6e, 0x2d, 0xbd, 0xf5, 0xe7, 0x12, 0x54, 0xb7, 0x1b, 0xcd, - 0x1d, 0x1a, 0xff, 0xcd, 0x9e, 0x21, 0x0a, 0x99, 0x59, 0x56, 0xb7, 0x38, 0xf7, 0x66, 0x87, 0x72, - 0x7e, 0x1d, 0x17, 0xdd, 0x81, 0x1c, 0x2b, 0x69, 0xa0, 0xf3, 0xaf, 0x7a, 0x28, 0x0b, 0x0a, 0xbb, - 0xf4, 0x65, 0xd8, 0xf1, 0x38, 0xf7, 0xee, 0x87, 0x72, 0x7e, 0x9d, 0x17, 0x69, 0x20, 0x87, 0x35, - 0x89, 0xc5, 0x77, 0x41, 0x94, 0x25, 0x6a, 0xbf, 0xd4, 0x66, 0x48, 0x8c, 0x16, 0xdf, 0x8d, 0x50, - 0x96, 0x00, 0x30, 0xb4, 0x0b, 0x05, 0x9f, 0xcb, 0x2e, 0xba, 0xad, 0xa1, 0x2c, 0xac, 0xcb, 0xd2, - 0x4f, 0xc0, 0x6b, 0x0e, 0xe7, 0x5f, 0x3d, 0x51, 0x16, 0x14, 0x99, 0xd1, 0x0e, 0xe4, 0x45, 0xb6, - 0xbf, 0xe0, 0x06, 0x86, 0xb2, 0xa8, 0xce, 0x4a, 0x9d, 0x16, 0x16, 0x73, 0x16, 0x5f, 0xa8, 0x51, - 0x96, 0xa8, 0x9f, 0xa3, 0x23, 0x80, 0x48, 0x85, 0x61, 0x89, 0x9b, 0x32, 0xca, 0x32, 0x75, 0x71, - 0xb4, 0x0f, 0xc5, 0x80, 0xf0, 0x2d, 0xbc, 0xb7, 0xa2, 0x2c, 0x2e, 0x50, 0xa3, 0xfb, 0x50, 0x8e, - 0x33, 0x9d, 0xe5, 0x6e, 0xa3, 0x28, 0x4b, 0x56, 0x9e, 0xa9, 0xfd, 0x38, 0xed, 0x59, 0xee, 0x76, - 0x8a, 0xb2, 0x64, 0x21, 0x1a, 0x7d, 0x00, 0xab, 0xb3, 0xb4, 0x64, 0xf9, 0xcb, 0x2a, 0xca, 0x05, - 0x4a, 0xd3, 0x68, 0x0c, 0x68, 0x0e, 0x9d, 0xb9, 0xc0, 0xdd, 0x15, 0xe5, 0x22, 0x95, 0x6a, 0xd4, - 0x87, 0xea, 0x34, 0x47, 0x58, 0xf6, 0x2e, 0x8b, 0xb2, 0x74, 0xd5, 0x9a, 0xcf, 0x12, 0xa7, 0x0d, - 0xcb, 0xde, 0x6d, 0x51, 0x96, 0x2e, 0x62, 0x37, 0x5a, 0x9f, 0x7d, 0xb9, 0x26, 0x7d, 0xfe, 0xe5, - 0x9a, 0xf4, 0xf7, 0x2f, 0xd7, 0xa4, 0x4f, 0xbe, 0x5a, 0x4b, 0x7d, 0xfe, 0xd5, 0x5a, 0xea, 0x2f, - 0x5f, 0xad, 0xa5, 0x7e, 0xf4, 0xdc, 0xc0, 0x24, 0xc3, 0x49, 0x77, 0xa3, 0x67, 0x8f, 0x37, 0xa3, - 0x97, 0x04, 0xe7, 0x5d, 0x5c, 0xec, 0xe6, 0x59, 0xd0, 0x7d, 0xe9, 0xbf, 0x01, 0x00, 0x00, 0xff, - 0xff, 0xd1, 0x6a, 0xc9, 0x8e, 0xd8, 0x28, 0x00, 0x00, + // 3101 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0x4b, 0x73, 0xdc, 0xc6, + 0xf1, 0x5f, 0xec, 0x1b, 0xbd, 0xdc, 0x07, 0x47, 0xb2, 0xb4, 0x82, 0x65, 0x52, 0x86, 0xca, 0x2f, + 0xd9, 0x26, 0xff, 0xa6, 0x4b, 0xfe, 0xdb, 0xb1, 0x13, 0x9b, 0x5c, 0xad, 0xbc, 0xb4, 0x68, 0x92, + 0x01, 0x57, 0x72, 0x5e, 0x16, 0x0c, 0x2e, 0x86, 0xbb, 0xb0, 0x76, 0x01, 0x18, 0xc0, 0xd2, 0xa4, + 0x8e, 0xa9, 0xa4, 0x52, 0xf1, 0xc9, 0x55, 0xb9, 0xf8, 0xe2, 0x7b, 0x2e, 0xf9, 0x08, 0xc9, 0xd9, + 0x55, 0x49, 0x55, 0x7c, 0xcc, 0x21, 0xe5, 0xa4, 0xec, 0x9c, 0xf2, 0x05, 0x52, 0x39, 0xa4, 0x92, + 0x9a, 0x07, 0x9e, 0xbb, 0xe0, 0x82, 0x72, 0x6e, 0xb9, 0xcd, 0xf4, 0x74, 0xf7, 0xcc, 0x34, 0x66, + 0xba, 0xfb, 0xd7, 0x18, 0x78, 0xdc, 0xc3, 0xa6, 0x8e, 0x9d, 0x89, 0x61, 0x7a, 0xeb, 0xda, 0xe1, + 0xc0, 0x58, 0xf7, 0x4e, 0x6d, 0xec, 0xae, 0xd9, 0x8e, 0xe5, 0x59, 0xa8, 0x19, 0x0e, 0xae, 0x91, + 0x41, 0xe9, 0x89, 0x08, 0xf7, 0xc0, 0x39, 0xb5, 0x3d, 0x6b, 0xdd, 0x76, 0x2c, 0xeb, 0x88, 0xf1, + 0x4b, 0x57, 0x23, 0xc3, 0x54, 0x4f, 0x54, 0x5b, 0x6c, 0x94, 0x0b, 0x3f, 0xc0, 0xa7, 0xfe, 0xe8, + 0x13, 0x33, 0xb2, 0xb6, 0xe6, 0x68, 0x13, 0x7f, 0x78, 0x75, 0x68, 0x59, 0xc3, 0x31, 0x5e, 0xa7, + 0xbd, 0xc3, 0xe9, 0xd1, 0xba, 0x67, 0x4c, 0xb0, 0xeb, 0x69, 0x13, 0x9b, 0x33, 0x5c, 0x1c, 0x5a, + 0x43, 0x8b, 0x36, 0xd7, 0x49, 0x8b, 0x53, 0x57, 0x92, 0x62, 0xfa, 0xd4, 0xd1, 0x3c, 0xc3, 0x32, + 0xd9, 0xb8, 0xfc, 0x5b, 0x11, 0x2a, 0x0a, 0xfe, 0x68, 0x8a, 0x5d, 0x0f, 0x6d, 0x40, 0x11, 0x0f, + 0x46, 0x56, 0x5b, 0xb8, 0x26, 0x3c, 0x5b, 0xdb, 0xb8, 0xba, 0x96, 0xd8, 0xfc, 0x1a, 0xe7, 0xeb, + 0x0e, 0x46, 0x56, 0x2f, 0xa7, 0x50, 0x5e, 0x74, 0x13, 0x4a, 0x47, 0xe3, 0xa9, 0x3b, 0x6a, 0xe7, + 0xa9, 0xd0, 0x13, 0x69, 0x42, 0xb7, 0x09, 0x53, 0x2f, 0xa7, 0x30, 0x6e, 0x32, 0x95, 0x61, 0x1e, + 0x59, 0xed, 0xc2, 0xd9, 0x53, 0x6d, 0x9b, 0x47, 0x74, 0x2a, 0xc2, 0x8b, 0xb6, 0x00, 0x5c, 0xec, + 0xa9, 0x96, 0x4d, 0x96, 0xdf, 0x2e, 0x52, 0xc9, 0x27, 0xd3, 0x24, 0x0f, 0xb0, 0xb7, 0x47, 0x19, + 0x7b, 0x39, 0x45, 0x74, 0xfd, 0x0e, 0xd1, 0x61, 0x98, 0x86, 0xa7, 0x0e, 0x46, 0x9a, 0x61, 0xb6, + 0x4b, 0x67, 0xeb, 0xd8, 0x36, 0x0d, 0xaf, 0x43, 0x18, 0x89, 0x0e, 0xc3, 0xef, 0x90, 0x2d, 0x7f, + 0x34, 0xc5, 0xce, 0x69, 0xbb, 0x7c, 0xf6, 0x96, 0xbf, 0x4f, 0x98, 0xc8, 0x96, 0x29, 0x37, 0xea, + 0x42, 0xed, 0x10, 0x0f, 0x0d, 0x53, 0x3d, 0x1c, 0x5b, 0x83, 0x07, 0xed, 0x0a, 0x15, 0x96, 0xd3, + 0x84, 0xb7, 0x08, 0xeb, 0x16, 0xe1, 0xec, 0xe5, 0x14, 0x38, 0x0c, 0x7a, 0xe8, 0x0d, 0xa8, 0x0e, + 0x46, 0x78, 0xf0, 0x40, 0xf5, 0x4e, 0xda, 0x55, 0xaa, 0x63, 0x35, 0x4d, 0x47, 0x87, 0xf0, 0xf5, + 0x4f, 0x7a, 0x39, 0xa5, 0x32, 0x60, 0x4d, 0xb2, 0x7f, 0x1d, 0x8f, 0x8d, 0x63, 0xec, 0x10, 0x79, + 0xf1, 0xec, 0xfd, 0xdf, 0x62, 0x9c, 0x54, 0x83, 0xa8, 0xfb, 0x1d, 0xf4, 0x26, 0x88, 0xd8, 0xd4, + 0xf9, 0x36, 0x80, 0xaa, 0xb8, 0x96, 0x7a, 0x56, 0x4c, 0xdd, 0xdf, 0x44, 0x15, 0xf3, 0x36, 0x7a, + 0x15, 0xca, 0x03, 0x6b, 0x32, 0x31, 0xbc, 0x76, 0x8d, 0x4a, 0xaf, 0xa4, 0x6e, 0x80, 0x72, 0xf5, + 0x72, 0x0a, 0xe7, 0x47, 0xbb, 0xd0, 0x18, 0x1b, 0xae, 0xa7, 0xba, 0xa6, 0x66, 0xbb, 0x23, 0xcb, + 0x73, 0xdb, 0x4b, 0x54, 0xc3, 0x53, 0x69, 0x1a, 0x76, 0x0c, 0xd7, 0x3b, 0xf0, 0x99, 0x7b, 0x39, + 0xa5, 0x3e, 0x8e, 0x12, 0x88, 0x3e, 0xeb, 0xe8, 0x08, 0x3b, 0x81, 0xc2, 0x76, 0xfd, 0x6c, 0x7d, + 0x7b, 0x84, 0xdb, 0x97, 0x27, 0xfa, 0xac, 0x28, 0x01, 0xfd, 0x18, 0x2e, 0x8c, 0x2d, 0x4d, 0x0f, + 0xd4, 0xa9, 0x83, 0xd1, 0xd4, 0x7c, 0xd0, 0x6e, 0x50, 0xa5, 0xcf, 0xa5, 0x2e, 0xd2, 0xd2, 0x74, + 0x5f, 0x45, 0x87, 0x08, 0xf4, 0x72, 0xca, 0xf2, 0x38, 0x49, 0x44, 0xf7, 0xe1, 0xa2, 0x66, 0xdb, + 0xe3, 0xd3, 0xa4, 0xf6, 0x26, 0xd5, 0x7e, 0x23, 0x4d, 0xfb, 0x26, 0x91, 0x49, 0xaa, 0x47, 0xda, + 0x0c, 0x15, 0xf5, 0xa1, 0x65, 0x3b, 0xd8, 0xd6, 0x1c, 0xac, 0xda, 0x8e, 0x65, 0x5b, 0xae, 0x36, + 0x6e, 0xb7, 0xa8, 0xee, 0x67, 0xd2, 0x74, 0xef, 0x33, 0xfe, 0x7d, 0xce, 0xde, 0xcb, 0x29, 0x4d, + 0x3b, 0x4e, 0x62, 0x5a, 0xad, 0x01, 0x76, 0xdd, 0x50, 0xeb, 0xf2, 0x22, 0xad, 0x94, 0x3f, 0xae, + 0x35, 0x46, 0xda, 0xaa, 0x40, 0xe9, 0x58, 0x1b, 0x4f, 0xb1, 0xfc, 0x0c, 0xd4, 0x22, 0x6e, 0x09, + 0xb5, 0xa1, 0x32, 0xc1, 0xae, 0xab, 0x0d, 0x31, 0xf5, 0x62, 0xa2, 0xe2, 0x77, 0xe5, 0x06, 0x2c, + 0x45, 0x5d, 0x91, 0xfc, 0x6b, 0x01, 0x96, 0xfa, 0xc6, 0x04, 0x5b, 0x53, 0xcf, 0x25, 0x6e, 0x06, + 0xed, 0x40, 0xd3, 0x63, 0x7d, 0xbe, 0x50, 0xcc, 0x1d, 0xe1, 0x95, 0x35, 0xe6, 0x43, 0xd7, 0x7c, + 0x1f, 0xba, 0x76, 0x8b, 0xfb, 0xd0, 0xad, 0xea, 0x17, 0x5f, 0xad, 0xe6, 0x3e, 0xfb, 0xcb, 0xaa, + 0xa0, 0x34, 0xb8, 0x2c, 0x5b, 0x21, 0x46, 0xef, 0x80, 0x4f, 0x51, 0xf9, 0x59, 0xcf, 0x67, 0x57, + 0x56, 0xe7, 0xa2, 0xec, 0xfc, 0xcb, 0x93, 0x60, 0x8f, 0x74, 0xa1, 0x6d, 0xa8, 0x1c, 0x63, 0xc7, + 0x25, 0x4e, 0x90, 0xef, 0x91, 0x77, 0xd1, 0x75, 0xa8, 0xd3, 0x5b, 0xa9, 0xfa, 0xe3, 0x64, 0xce, + 0xa2, 0xb2, 0x44, 0x89, 0xf7, 0x38, 0xd3, 0x2a, 0xd4, 0xec, 0x0d, 0x3b, 0x60, 0x29, 0x50, 0x16, + 0xb0, 0x37, 0x6c, 0xce, 0x20, 0x7f, 0x07, 0x5a, 0x49, 0x27, 0x8a, 0x5a, 0x50, 0x78, 0x80, 0x4f, + 0xf9, 0x7c, 0xa4, 0x89, 0x2e, 0xf2, 0x2f, 0x40, 0xe7, 0x10, 0x15, 0xfe, 0x39, 0x7e, 0x9f, 0x0f, + 0x84, 0x03, 0xef, 0x89, 0x5e, 0x85, 0x22, 0xd9, 0x10, 0x37, 0xa7, 0x34, 0x63, 0x81, 0xbe, 0x1f, + 0xc9, 0x98, 0x09, 0x3e, 0x25, 0x26, 0xa0, 0x12, 0xe8, 0x0a, 0x71, 0x76, 0x9a, 0x61, 0xaa, 0x86, + 0xce, 0xe7, 0xa9, 0xd0, 0xfe, 0xb6, 0x8e, 0xee, 0x40, 0x6b, 0x60, 0x99, 0x2e, 0x36, 0xdd, 0xa9, + 0xab, 0xb2, 0x48, 0xc9, 0xa3, 0xc9, 0xac, 0x33, 0xea, 0xf8, 0x8c, 0xfb, 0x94, 0x4f, 0x69, 0x0e, + 0xe2, 0x04, 0x74, 0x1b, 0xe0, 0x58, 0x1b, 0x1b, 0xba, 0xe6, 0x59, 0x8e, 0xdb, 0x2e, 0x5e, 0x2b, + 0xcc, 0x55, 0x73, 0xcf, 0x67, 0xb9, 0x6b, 0xeb, 0x9a, 0x87, 0xb7, 0x8a, 0x64, 0xb5, 0x4a, 0x44, + 0x12, 0x3d, 0x0d, 0x4d, 0xcd, 0xb6, 0x55, 0xd7, 0xd3, 0x3c, 0xac, 0x1e, 0x9e, 0x7a, 0xd8, 0xa5, + 0x31, 0x66, 0x49, 0xa9, 0x6b, 0xb6, 0x7d, 0x40, 0xa8, 0x5b, 0x84, 0x88, 0x9e, 0x82, 0x06, 0x89, + 0x27, 0x86, 0x36, 0x56, 0x47, 0xd8, 0x18, 0x8e, 0x3c, 0x1a, 0x4b, 0x0a, 0x4a, 0x9d, 0x53, 0x7b, + 0x94, 0x28, 0xeb, 0xc1, 0x99, 0xa5, 0xb1, 0x04, 0x21, 0x28, 0xea, 0x9a, 0xa7, 0x51, 0x43, 0x2e, + 0x29, 0xb4, 0x4d, 0x68, 0xb6, 0xe6, 0x8d, 0xb8, 0x79, 0x68, 0x1b, 0x5d, 0x82, 0x32, 0x57, 0x5b, + 0xa0, 0x6a, 0x79, 0x8f, 0x7c, 0x33, 0xdb, 0xb1, 0x8e, 0x31, 0x0d, 0x9e, 0x55, 0x85, 0x75, 0xe4, + 0x9f, 0xe5, 0x61, 0x79, 0x26, 0xea, 0x10, 0xbd, 0x23, 0xcd, 0x1d, 0xf9, 0x73, 0x91, 0x36, 0x7a, + 0x85, 0xe8, 0xd5, 0x74, 0xec, 0xf0, 0xc3, 0xdc, 0x8e, 0x9a, 0x88, 0x65, 0x3a, 0x3d, 0x3a, 0xce, + 0x4d, 0xc3, 0xb9, 0xd1, 0x1e, 0xb4, 0xc6, 0x9a, 0xeb, 0xdf, 0x04, 0x35, 0x12, 0xf9, 0x67, 0x63, + 0xd7, 0x8e, 0xe6, 0xfb, 0x7d, 0x72, 0xd8, 0xb9, 0xa2, 0xc6, 0x38, 0x46, 0x45, 0x0a, 0x5c, 0x3c, + 0x3c, 0x7d, 0xa8, 0x99, 0x9e, 0x61, 0x62, 0x75, 0xe6, 0xcb, 0x5d, 0x99, 0x51, 0xda, 0x3d, 0x36, + 0x74, 0x6c, 0x0e, 0xfc, 0x4f, 0x76, 0x21, 0x10, 0x0e, 0x3e, 0xa9, 0x2b, 0x2b, 0xd0, 0x88, 0xc7, + 0x4d, 0xd4, 0x80, 0xbc, 0x77, 0xc2, 0x0d, 0x90, 0xf7, 0x4e, 0xd0, 0xff, 0x41, 0x91, 0x6c, 0x92, + 0x6e, 0xbe, 0x31, 0x27, 0x69, 0xe1, 0x72, 0xfd, 0x53, 0x1b, 0x2b, 0x94, 0x53, 0x96, 0x83, 0xdb, + 0x10, 0xc4, 0xd2, 0xa4, 0x56, 0xf9, 0x39, 0x68, 0x26, 0x82, 0x65, 0xe4, 0xfb, 0x09, 0xd1, 0xef, + 0x27, 0x37, 0xa1, 0x1e, 0x8b, 0x8c, 0xf2, 0x25, 0xb8, 0x38, 0x2f, 0xd0, 0xc9, 0xbf, 0x14, 0x82, + 0x81, 0x58, 0xc4, 0x42, 0x37, 0xa1, 0x1a, 0x84, 0x3a, 0xdf, 0xbb, 0x25, 0xb7, 0xe1, 0x33, 0x2b, + 0x01, 0x2b, 0xb9, 0x87, 0xe4, 0x5c, 0xd3, 0x03, 0x91, 0xa7, 0x2b, 0xaf, 0x68, 0xb6, 0xdd, 0x23, + 0x67, 0x62, 0x15, 0x6a, 0x64, 0x28, 0xe1, 0x4e, 0x34, 0x3b, 0x70, 0x27, 0x1f, 0x40, 0x3b, 0x2d, + 0xce, 0x25, 0x36, 0x5a, 0x0c, 0x0e, 0xea, 0x25, 0x28, 0x1f, 0x59, 0xce, 0x44, 0x63, 0x5e, 0xb3, + 0xae, 0xf0, 0x1e, 0x39, 0xc0, 0x2c, 0xe6, 0x15, 0x28, 0x99, 0x75, 0x64, 0x15, 0xae, 0xa4, 0xc6, + 0x3a, 0x22, 0x62, 0x98, 0x3a, 0x66, 0x16, 0xaf, 0x2b, 0xac, 0x13, 0x2a, 0x62, 0xbb, 0x61, 0x1d, + 0x32, 0xad, 0x4b, 0x8d, 0x41, 0xf5, 0x8b, 0x0a, 0xef, 0xc9, 0x7f, 0x13, 0xe0, 0xd2, 0xfc, 0x88, + 0x87, 0x6e, 0x02, 0x30, 0x97, 0x1b, 0x5c, 0xcc, 0xda, 0xc6, 0xa5, 0xd9, 0x6b, 0x71, 0x4b, 0xf3, + 0x34, 0x45, 0xa4, 0x9c, 0xa4, 0x49, 0x1c, 0x45, 0x28, 0xa6, 0xba, 0xc6, 0x43, 0x76, 0xaa, 0x0a, + 0x4a, 0x3d, 0xe0, 0x39, 0x30, 0x1e, 0xc6, 0x1d, 0x60, 0x21, 0xee, 0x00, 0x43, 0xdb, 0x15, 0x63, + 0x97, 0xdc, 0xf7, 0xb6, 0xa5, 0xf3, 0x7a, 0x5b, 0xf9, 0x17, 0xd1, 0x6d, 0xc6, 0xe2, 0x6d, 0xe4, + 0xe6, 0x0b, 0xe7, 0xba, 0xf9, 0x71, 0xf3, 0xe4, 0x33, 0x9a, 0x47, 0xfe, 0x15, 0x40, 0x55, 0xc1, + 0xae, 0x4d, 0xdc, 0x34, 0xda, 0x02, 0x11, 0x9f, 0x0c, 0x30, 0x4b, 0xfb, 0x85, 0xd4, 0xb4, 0x99, + 0x71, 0x77, 0x7d, 0x4e, 0x92, 0xb3, 0x06, 0x62, 0xe8, 0x65, 0x0e, 0x6d, 0xd2, 0x51, 0x0a, 0x17, + 0x8f, 0x62, 0x9b, 0x57, 0x7c, 0x6c, 0x53, 0x48, 0x4d, 0x53, 0x99, 0x54, 0x02, 0xdc, 0xbc, 0xcc, + 0xc1, 0x4d, 0x71, 0xc1, 0x64, 0x31, 0x74, 0xd3, 0x89, 0xa1, 0x9b, 0xd2, 0x82, 0x6d, 0xa6, 0xc0, + 0x9b, 0x4e, 0x0c, 0xde, 0x94, 0x17, 0x28, 0x49, 0xc1, 0x37, 0xaf, 0xf8, 0xf8, 0xa6, 0xb2, 0x60, + 0xdb, 0x09, 0x80, 0x73, 0x3b, 0x0e, 0x70, 0x18, 0x38, 0xb9, 0x9e, 0x2a, 0x9d, 0x8a, 0x70, 0xbe, + 0x1b, 0x41, 0x38, 0x62, 0x2a, 0xbc, 0x60, 0x4a, 0xe6, 0x40, 0x9c, 0x4e, 0x0c, 0xe2, 0xc0, 0x02, + 0x1b, 0xa4, 0x60, 0x9c, 0xb7, 0xa2, 0x18, 0xa7, 0x96, 0x0a, 0x93, 0xf8, 0xa1, 0x99, 0x07, 0x72, + 0x5e, 0x0b, 0x40, 0xce, 0x52, 0x2a, 0x4a, 0xe3, 0x7b, 0x48, 0xa2, 0x9c, 0xbd, 0x19, 0x94, 0xc3, + 0x50, 0xc9, 0xd3, 0xa9, 0x2a, 0x16, 0xc0, 0x9c, 0xbd, 0x19, 0x98, 0xd3, 0x58, 0xa0, 0x70, 0x01, + 0xce, 0xf9, 0xc9, 0x7c, 0x9c, 0x93, 0x8e, 0x44, 0xf8, 0x32, 0xb3, 0x01, 0x1d, 0x35, 0x05, 0xe8, + 0x30, 0x30, 0xf2, 0x7c, 0xaa, 0xfa, 0xcc, 0x48, 0xe7, 0xee, 0x1c, 0xa4, 0xc3, 0x30, 0xc9, 0xb3, + 0xa9, 0xca, 0x33, 0x40, 0x9d, 0xbb, 0x73, 0xa0, 0x0e, 0x5a, 0xa8, 0x36, 0x3b, 0xd6, 0x79, 0x8e, + 0xe4, 0x69, 0x09, 0x37, 0x47, 0x22, 0x19, 0x76, 0x1c, 0xcb, 0xe1, 0xb9, 0x39, 0xeb, 0xc8, 0xcf, + 0x92, 0xcc, 0x31, 0x74, 0x69, 0x67, 0xe0, 0x22, 0x9a, 0x53, 0x44, 0xdc, 0x98, 0xfc, 0x4f, 0x21, + 0x94, 0xa5, 0xc9, 0x56, 0x34, 0xeb, 0x14, 0x79, 0xd6, 0x19, 0xc1, 0x20, 0xf9, 0x38, 0x06, 0x59, + 0x94, 0x0f, 0xa0, 0x1b, 0xb0, 0x4c, 0x93, 0x41, 0x16, 0x17, 0x62, 0x21, 0xac, 0x49, 0x06, 0xd8, + 0x55, 0x62, 0xb1, 0xec, 0x45, 0xb8, 0x10, 0xe1, 0x0d, 0x52, 0x10, 0x96, 0x53, 0xb7, 0x02, 0xee, + 0x4d, 0x9e, 0x8b, 0xbc, 0x09, 0x55, 0x8e, 0x9c, 0xdc, 0xd4, 0xe2, 0x4c, 0x14, 0xf3, 0xf1, 0x60, + 0x15, 0x08, 0xc9, 0xef, 0x86, 0x16, 0x0e, 0xb1, 0x0f, 0x82, 0xe2, 0xc0, 0xd2, 0x31, 0x4f, 0x20, + 0x68, 0x9b, 0xe0, 0xa1, 0xb1, 0x35, 0xe4, 0x21, 0x99, 0x34, 0x09, 0x57, 0xe0, 0xf4, 0x45, 0xe6, + 0xd3, 0x79, 0x66, 0x9d, 0x70, 0xb6, 0x73, 0x91, 0x8b, 0xf0, 0xdf, 0x41, 0x2e, 0xf9, 0x47, 0x46, + 0x2e, 0xd1, 0x0c, 0xaf, 0x10, 0xcf, 0xf0, 0xa2, 0x56, 0x2d, 0x3e, 0x8a, 0x55, 0xff, 0x21, 0x84, + 0x67, 0x2c, 0x00, 0x32, 0x8f, 0x66, 0xd2, 0x30, 0x9d, 0x2b, 0xd1, 0x13, 0xc3, 0xd3, 0x39, 0x0e, + 0x4f, 0xcb, 0x74, 0xe1, 0x71, 0x78, 0x5a, 0x61, 0x09, 0x1e, 0xed, 0xa0, 0x57, 0x41, 0xa4, 0xe5, + 0x5a, 0xd5, 0xb2, 0x5d, 0x1e, 0xa0, 0x1e, 0x8f, 0xee, 0x85, 0x55, 0x65, 0xd7, 0xf6, 0x09, 0xcf, + 0x9e, 0xed, 0x2a, 0x55, 0x9b, 0xb7, 0x22, 0xd9, 0x96, 0x18, 0xcb, 0xb6, 0xae, 0x82, 0x48, 0x56, + 0xef, 0xda, 0xda, 0x00, 0xd3, 0x60, 0x23, 0x2a, 0x21, 0x41, 0xbe, 0x0f, 0x68, 0x36, 0xdc, 0xa1, + 0x1e, 0x94, 0xf1, 0x31, 0x36, 0x3d, 0xf2, 0xd9, 0x0b, 0xc9, 0x84, 0x88, 0xe3, 0x15, 0x6c, 0x7a, + 0x5b, 0x6d, 0x62, 0xc7, 0xbf, 0x7f, 0xb5, 0xda, 0x62, 0xdc, 0x2f, 0x58, 0x13, 0xc3, 0xc3, 0x13, + 0xdb, 0x3b, 0x55, 0xb8, 0xbc, 0xfc, 0xe7, 0x3c, 0x01, 0x0f, 0xb1, 0x50, 0x38, 0xd7, 0xb6, 0xfe, + 0x15, 0xce, 0x47, 0x80, 0x63, 0x36, 0x7b, 0xaf, 0x00, 0x0c, 0x35, 0x57, 0xfd, 0x58, 0x33, 0x3d, + 0xac, 0x73, 0xa3, 0x47, 0x28, 0x48, 0x82, 0x2a, 0xe9, 0x4d, 0x5d, 0xac, 0x73, 0x0c, 0x1b, 0xf4, + 0x23, 0xfb, 0xac, 0x7c, 0xbb, 0x7d, 0xc6, 0xad, 0x5c, 0x4d, 0x58, 0x39, 0x92, 0xb6, 0x8b, 0xd1, + 0xb4, 0x9d, 0xac, 0xcd, 0x76, 0x0c, 0xcb, 0x31, 0xbc, 0x53, 0xfa, 0x69, 0x0a, 0x4a, 0xd0, 0x47, + 0xd7, 0xa1, 0x3e, 0xc1, 0x13, 0xdb, 0xb2, 0xc6, 0x2a, 0x73, 0x9f, 0x35, 0x2a, 0xba, 0xc4, 0x89, + 0x5d, 0xea, 0x45, 0x7f, 0x1e, 0xb9, 0xbf, 0x21, 0x80, 0xfb, 0x9f, 0x33, 0xb0, 0xfc, 0x07, 0x5a, + 0xd5, 0x89, 0x27, 0x3b, 0xe8, 0x00, 0x96, 0x03, 0xff, 0xa1, 0x4e, 0xa9, 0x5f, 0xf1, 0x0f, 0x74, + 0x56, 0x07, 0xd4, 0x3a, 0x8e, 0x93, 0x5d, 0xf4, 0x03, 0xb8, 0x9c, 0xf0, 0x8d, 0x81, 0xea, 0x7c, + 0x46, 0x17, 0xf9, 0x58, 0xdc, 0x45, 0xfa, 0x9a, 0x43, 0x5b, 0x15, 0xbe, 0xa5, 0xad, 0xbe, 0xb5, + 0x3f, 0xdc, 0x86, 0x46, 0x3c, 0xf7, 0x9b, 0x7b, 0x7c, 0xae, 0x43, 0xdd, 0xc1, 0x1e, 0xc1, 0x7e, + 0xb1, 0x5a, 0xce, 0x12, 0x23, 0xf2, 0x0a, 0xd1, 0x3e, 0x3c, 0x36, 0x37, 0x07, 0x44, 0xff, 0x0f, + 0x62, 0x98, 0x3e, 0x0a, 0x29, 0x65, 0x91, 0x00, 0xe9, 0x87, 0xbc, 0xf2, 0xef, 0x84, 0x50, 0x65, + 0xbc, 0x76, 0xd0, 0x85, 0xb2, 0x83, 0xdd, 0xe9, 0x98, 0x81, 0xf5, 0xc6, 0xc6, 0x8b, 0xd9, 0xb2, + 0x47, 0x42, 0x9d, 0x8e, 0x3d, 0x85, 0x0b, 0xcb, 0xf7, 0xa1, 0xcc, 0x28, 0xa8, 0x06, 0x95, 0xbb, + 0xbb, 0x77, 0x76, 0xf7, 0xde, 0xdb, 0x6d, 0xe5, 0x10, 0x40, 0x79, 0xb3, 0xd3, 0xe9, 0xee, 0xf7, + 0x5b, 0x02, 0x12, 0xa1, 0xb4, 0xb9, 0xb5, 0xa7, 0xf4, 0x5b, 0x79, 0x42, 0x56, 0xba, 0xef, 0x74, + 0x3b, 0xfd, 0x56, 0x01, 0x2d, 0x43, 0x9d, 0xb5, 0xd5, 0xdb, 0x7b, 0xca, 0xbb, 0x9b, 0xfd, 0x56, + 0x31, 0x42, 0x3a, 0xe8, 0xee, 0xde, 0xea, 0x2a, 0xad, 0x92, 0xfc, 0x12, 0x5c, 0x49, 0xcd, 0x37, + 0x43, 0xdc, 0x2f, 0x44, 0x70, 0xbf, 0xfc, 0x59, 0x1e, 0xa4, 0xf4, 0x24, 0x12, 0xbd, 0x93, 0xd8, + 0xf8, 0xc6, 0x39, 0x32, 0xd0, 0xc4, 0xee, 0xd1, 0x53, 0xd0, 0x70, 0xf0, 0x11, 0xf6, 0x06, 0x23, + 0x96, 0xd4, 0xb2, 0x98, 0x5d, 0x57, 0xea, 0x9c, 0x4a, 0x85, 0x5c, 0xc6, 0xf6, 0x21, 0x1e, 0x78, + 0x2a, 0xf3, 0x65, 0xec, 0xd4, 0x8a, 0x84, 0x8d, 0x50, 0x0f, 0x18, 0x51, 0xfe, 0xe0, 0x5c, 0xb6, + 0x14, 0xa1, 0xa4, 0x74, 0xfb, 0xca, 0x0f, 0x5b, 0x05, 0x84, 0xa0, 0x41, 0x9b, 0xea, 0xc1, 0xee, + 0xe6, 0xfe, 0x41, 0x6f, 0x8f, 0xd8, 0xf2, 0x02, 0x34, 0x7d, 0x5b, 0xfa, 0xc4, 0x92, 0xbc, 0x0f, + 0x97, 0x53, 0x32, 0xe0, 0x47, 0x2c, 0x7d, 0xc8, 0xbf, 0x11, 0xa2, 0x2a, 0xe3, 0x65, 0x86, 0xb7, + 0x13, 0x96, 0x5e, 0xcf, 0x9a, 0x37, 0x27, 0xcd, 0x2c, 0x41, 0x15, 0xf3, 0x9a, 0x1f, 0x35, 0xf0, + 0x92, 0x12, 0xf4, 0xe5, 0x17, 0x17, 0x1b, 0x2d, 0x3c, 0x75, 0x79, 0xf9, 0xdf, 0x02, 0x34, 0x13, + 0x3e, 0x06, 0x6d, 0x40, 0x89, 0x41, 0xc3, 0xb4, 0x5f, 0xa5, 0xd4, 0x45, 0x72, 0x87, 0xc4, 0x58, + 0xd1, 0x1b, 0xb1, 0x25, 0xcd, 0xf8, 0x32, 0x66, 0x2c, 0xbf, 0x50, 0xc9, 0x45, 0x03, 0x09, 0xf4, + 0x26, 0x88, 0x81, 0xb3, 0xe4, 0xf5, 0x88, 0x27, 0x67, 0xc5, 0x03, 0x37, 0xcb, 0xe5, 0x43, 0x19, + 0xf4, 0x5a, 0x98, 0xb1, 0x17, 0x67, 0x01, 0x29, 0x17, 0x67, 0x0c, 0x5c, 0xd8, 0xe7, 0x97, 0x3b, + 0x50, 0x8b, 0xec, 0x07, 0x3d, 0x0e, 0xe2, 0x44, 0x3b, 0xe1, 0xe5, 0x6d, 0x56, 0xa0, 0xac, 0x4e, + 0xb4, 0x13, 0x56, 0xd9, 0xbe, 0x0c, 0x15, 0x32, 0x38, 0xd4, 0x5c, 0x5e, 0xd0, 0x2a, 0x4f, 0xb4, + 0x93, 0xb7, 0x35, 0x57, 0x7e, 0x1f, 0x1a, 0xf1, 0xd2, 0x2e, 0xb9, 0x8b, 0x8e, 0x35, 0x35, 0x75, + 0xaa, 0xa3, 0xa4, 0xb0, 0x0e, 0xba, 0x09, 0xa5, 0x63, 0x8b, 0xf9, 0xfb, 0xf9, 0x4e, 0xeb, 0x9e, + 0xe5, 0xe1, 0x88, 0x5b, 0x65, 0xdc, 0xf2, 0x43, 0x28, 0x51, 0xff, 0x4d, 0x5c, 0x29, 0x2d, 0xd2, + 0x72, 0xb4, 0x42, 0xda, 0xe8, 0x7d, 0x00, 0xcd, 0xf3, 0x1c, 0xe3, 0x70, 0x1a, 0x2a, 0x5e, 0x9d, + 0xef, 0xff, 0x37, 0x7d, 0xbe, 0xad, 0xab, 0x3c, 0x10, 0x5c, 0x0c, 0x45, 0x23, 0xc1, 0x20, 0xa2, + 0x50, 0xde, 0x85, 0x46, 0x5c, 0x36, 0xfa, 0xbb, 0x64, 0x69, 0xce, 0xef, 0x92, 0x20, 0x1f, 0x0d, + 0xb2, 0xd9, 0x02, 0x2b, 0xc8, 0xd3, 0x8e, 0xfc, 0x89, 0x00, 0xd5, 0xfe, 0x09, 0x3f, 0xa3, 0x29, + 0xb5, 0xe0, 0x50, 0x34, 0x1f, 0xad, 0x6b, 0xb2, 0xe2, 0x72, 0x21, 0x28, 0x59, 0xbf, 0x15, 0x5c, + 0xa8, 0x62, 0xd6, 0x42, 0x88, 0x5f, 0xc1, 0xe3, 0xee, 0xfa, 0x75, 0x10, 0x83, 0x53, 0x45, 0x60, + 0x9f, 0xa6, 0xeb, 0x0e, 0x76, 0x5d, 0xbe, 0x37, 0xbf, 0x4b, 0x7f, 0x2d, 0x58, 0x1f, 0xf3, 0xca, + 0x69, 0x41, 0x61, 0x1d, 0x59, 0x87, 0x66, 0x22, 0xf2, 0xa3, 0xd7, 0xa1, 0x62, 0x4f, 0x0f, 0x55, + 0xdf, 0x3c, 0x89, 0xcb, 0xe3, 0x27, 0xe0, 0xd3, 0xc3, 0xb1, 0x31, 0xb8, 0x83, 0x4f, 0xfd, 0xc5, + 0xd8, 0xd3, 0xc3, 0x3b, 0xcc, 0x8a, 0x6c, 0x96, 0x7c, 0x74, 0x96, 0x63, 0xa8, 0xfa, 0x87, 0x02, + 0x7d, 0x2f, 0x7a, 0x4f, 0xfc, 0x1f, 0x4e, 0xa9, 0xd9, 0x08, 0x57, 0x1f, 0xb9, 0x26, 0x37, 0x60, + 0xd9, 0x35, 0x86, 0x26, 0xd6, 0xd5, 0x10, 0x78, 0xd2, 0xd9, 0xaa, 0x4a, 0x93, 0x0d, 0xec, 0xf8, + 0xa8, 0x53, 0xfe, 0x97, 0x00, 0x55, 0xff, 0xc2, 0xa2, 0x97, 0x22, 0xe7, 0xae, 0x31, 0x27, 0x23, + 0xf0, 0x19, 0xc3, 0xbf, 0x03, 0xf1, 0xb5, 0xe6, 0xcf, 0xbf, 0xd6, 0xb4, 0xdf, 0x3c, 0x7e, 0x05, + 0xb8, 0x78, 0xee, 0xff, 0x6d, 0x2f, 0x00, 0xf2, 0x2c, 0x4f, 0x1b, 0xab, 0xc7, 0x96, 0x67, 0x98, + 0x43, 0x95, 0x19, 0x9b, 0x25, 0xa5, 0x2d, 0x3a, 0x72, 0x8f, 0x0e, 0xec, 0x53, 0xbb, 0xff, 0x54, + 0x80, 0x6a, 0x90, 0x1d, 0x9c, 0xb7, 0x94, 0x7f, 0x09, 0xca, 0x3c, 0x00, 0xb2, 0x5a, 0x3e, 0xef, + 0x05, 0xff, 0x9d, 0x8a, 0x91, 0xff, 0x4e, 0x12, 0x54, 0x27, 0xd8, 0xd3, 0x68, 0x9c, 0x61, 0xd8, + 0x3f, 0xe8, 0xdf, 0x78, 0x0d, 0x6a, 0x91, 0xff, 0x2e, 0xe4, 0xe6, 0xed, 0x76, 0xdf, 0x6b, 0xe5, + 0xa4, 0xca, 0x27, 0x9f, 0x5f, 0x2b, 0xec, 0xe2, 0x8f, 0xc9, 0x99, 0x55, 0xba, 0x9d, 0x5e, 0xb7, + 0x73, 0xa7, 0x25, 0x48, 0xb5, 0x4f, 0x3e, 0xbf, 0x56, 0x51, 0x30, 0xad, 0x15, 0xde, 0xe8, 0xc1, + 0x52, 0xf4, 0xab, 0xc4, 0xc3, 0x01, 0x82, 0xc6, 0xad, 0xbb, 0xfb, 0x3b, 0xdb, 0x9d, 0xcd, 0x7e, + 0x57, 0xbd, 0xb7, 0xd7, 0xef, 0xb6, 0x04, 0x74, 0x19, 0x2e, 0xec, 0x6c, 0xbf, 0xdd, 0xeb, 0xab, + 0x9d, 0x9d, 0xed, 0xee, 0x6e, 0x5f, 0xdd, 0xec, 0xf7, 0x37, 0x3b, 0x77, 0x5a, 0xf9, 0x8d, 0x3f, + 0xd6, 0xa0, 0xb9, 0xb9, 0xd5, 0xd9, 0x26, 0xf1, 0xdf, 0x18, 0x68, 0xbc, 0x16, 0x5b, 0xa4, 0xa5, + 0x97, 0x33, 0xdf, 0xd1, 0x48, 0x67, 0x97, 0xa2, 0xd1, 0x6d, 0x28, 0xd1, 0xaa, 0x0c, 0x3a, 0xfb, + 0x61, 0x8d, 0xb4, 0xa0, 0x36, 0x4d, 0x16, 0x43, 0xaf, 0xc7, 0x99, 0x2f, 0x6d, 0xa4, 0xb3, 0x4b, + 0xd5, 0x48, 0x01, 0x31, 0xac, 0x8a, 0x2c, 0x7e, 0x79, 0x23, 0x65, 0x28, 0x5f, 0x13, 0x9d, 0x21, + 0xb2, 0x5a, 0xfc, 0x12, 0x45, 0xca, 0xe0, 0xc0, 0xd0, 0x0e, 0x54, 0x7c, 0x30, 0xbc, 0xe8, 0x6d, + 0x8c, 0xb4, 0xb0, 0xb4, 0x4c, 0x3e, 0x01, 0x2b, 0x5a, 0x9c, 0xfd, 0xd0, 0x47, 0x5a, 0x50, 0x27, + 0x47, 0xdb, 0x50, 0xe6, 0xd9, 0xfe, 0x82, 0xf7, 0x2e, 0xd2, 0xa2, 0x52, 0x31, 0x31, 0x5a, 0x58, + 0x4e, 0x5a, 0xfc, 0x7c, 0x49, 0xca, 0xf0, 0x0b, 0x00, 0xdd, 0x05, 0x88, 0x94, 0x28, 0x32, 0xbc, + 0x4b, 0x92, 0xb2, 0x94, 0xf6, 0xd1, 0x1e, 0x54, 0x03, 0xc4, 0xb8, 0xf0, 0x95, 0x90, 0xb4, 0xb8, + 0xc6, 0x8e, 0xee, 0x43, 0x3d, 0x8e, 0x74, 0xb2, 0xbd, 0xfd, 0x91, 0x32, 0x16, 0xcf, 0x89, 0xfe, + 0x38, 0xec, 0xc9, 0xf6, 0x16, 0x48, 0xca, 0x58, 0x4b, 0x47, 0x1f, 0xc2, 0xf2, 0x2c, 0x2c, 0xc9, + 0xfe, 0x34, 0x48, 0x3a, 0x47, 0x75, 0x1d, 0x4d, 0x00, 0xcd, 0x81, 0x33, 0xe7, 0x78, 0x29, 0x24, + 0x9d, 0xa7, 0xd8, 0x8e, 0x74, 0x68, 0x26, 0x31, 0x42, 0xd6, 0x97, 0x43, 0x52, 0xe6, 0xc2, 0x3b, + 0x9b, 0x25, 0x0e, 0x1b, 0xb2, 0xbe, 0x24, 0x92, 0x32, 0xd7, 0xe1, 0xb7, 0xba, 0x5f, 0x7c, 0xbd, + 0x22, 0x7c, 0xf9, 0xf5, 0x8a, 0xf0, 0xd7, 0xaf, 0x57, 0x84, 0x4f, 0xbf, 0x59, 0xc9, 0x7d, 0xf9, + 0xcd, 0x4a, 0xee, 0x4f, 0xdf, 0xac, 0xe4, 0x7e, 0xf4, 0xfc, 0xd0, 0xf0, 0x46, 0xd3, 0xc3, 0xb5, + 0x81, 0x35, 0x59, 0x8f, 0x3e, 0xd9, 0x9c, 0xf7, 0x8c, 0xf4, 0xb0, 0x4c, 0x83, 0xee, 0xcb, 0xff, + 0x09, 0x00, 0x00, 0xff, 0xff, 0x01, 0xd0, 0x52, 0xd6, 0x66, 0x2a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index 2e953b3aae..2adc2ba797 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -114,9 +114,9 @@ message RequestListSnapshots {} // offers a snapshot to the application message RequestOfferSnapshot { - Snapshot snapshot = 1; // snapshot offered by peers - bytes app_hash = 2; // light client-verified app hash for snapshot height - uint64 app_version = 3; // The application version at which the snapshot was taken + Snapshot snapshot = 1; // snapshot offered by peers + bytes app_hash = 2; // light client-verified app hash for snapshot height + uint64 app_version = 3; // The application version at which the snapshot was taken } // loads a snapshot chunk From cfdd2c352a9d349cbc09ed9b5b4c2d5518cb1020 Mon Sep 17 00:00:00 2001 From: sanaz Date: Fri, 4 Oct 2024 09:02:14 -0700 Subject: [PATCH 44/87] adds further logs for monitoring timeout changes during consensus operations --- consensus/state.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index a4eaadd910..6319473e64 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -679,12 +679,16 @@ func (cs *State) updateToState(state sm.State) { // // cs.config.TimeoutCommit.Seconds()) //} + cs.Logger.Info("Calculating StartTime for height", "height", height, + "timeout_commit", cs.state.TimeoutCommit.Seconds()) cs.StartTime = cs.config.CommitWithCustomTimeout(cmttime.Now(), cs.state.TimeoutCommit) } else { //if cs.config != nil { // //cs.Logger.Info("timeout_commit is set to", "timeout_commit", // // cs.config.TimeoutCommit.Seconds()) //} + cs.Logger.Info("Calculating StartTime for height", "height", height, + "timeout_commit", cs.state.TimeoutCommit.Seconds()) cs.StartTime = cs.config.CommitWithCustomTimeout(cs.CommitTime, cs.state.TimeoutCommit) } @@ -1129,6 +1133,7 @@ func (cs *State) enterPropose(height int64, round int32) { // cs.config.TimeoutPropose.Seconds()) //} + cs.Logger.Info("scheduling timeoutPropose", "timeout", cs.state.TimeoutPropose) cs.scheduleTimeout(cs.config.ProposeWithCustomTimeout(round, cs.state.TimeoutPropose), height, round, cstypes.RoundStepPropose) @@ -1700,7 +1705,7 @@ func (cs *State) finalizeCommit(height int64) { // exists. // // Either way, the State should not be resumed until we - // successfully call ApplyBlock (ie. later here, or in Handshake after + // successfully call ApplyBlock (i.e., later here, or in Handshake after // restart). endMsg := EndHeightMessage{height} if err := cs.wal.WriteSync(endMsg); err != nil { // NOTE: fsync @@ -1759,7 +1764,7 @@ func (cs *State) finalizeCommit(height int64) { fail.Fail() // XXX - // Private validator might have changed it's key pair => refetch pubkey. + // Private validator might have changed its key pair => refetch pubkey. if err := cs.updatePrivValidatorPubKey(); err != nil { logger.Error("failed to get private validator pubkey", "err", err) } From e3ae19c9149869b7804e11f67a80efd7cdbfc99c Mon Sep 17 00:00:00 2001 From: sanaz Date: Fri, 4 Oct 2024 10:40:26 -0700 Subject: [PATCH 45/87] logs timeouts when calculated --- config/config.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/config/config.go b/config/config.go index ef103536f7..e8781b6845 100644 --- a/config/config.go +++ b/config/config.go @@ -1057,6 +1057,7 @@ func (cfg *ConsensusConfig) Propose(round int32) time.Duration { // ProposeWithCustomTimeout returns the amount of time to wait for a proposal func (cfg *ConsensusConfig) ProposeWithCustomTimeout(round int32, customTimeout time.Duration) time.Duration { + log.Println("ProposeWithCustomTimeout called with", customTimeout.Seconds()) return time.Duration(customTimeout.Nanoseconds()+cfg.TimeoutProposeDelta.Nanoseconds()*int64(round)) * time.Nanosecond } @@ -1076,12 +1077,14 @@ func (cfg *ConsensusConfig) Precommit(round int32) time.Duration { // Commit returns the amount of time to wait for straggler votes after receiving +2/3 precommits // for a single block (i.e., a commit). +// TODO endure this is not used anymore func (cfg *ConsensusConfig) Commit(t time.Time) time.Time { return t.Add(cfg.TimeoutCommit) } -func (cfg *ConsensusConfig) CommitWithCustomTimeout(t time.Time, customTimeouts time.Duration) time.Time { - return t.Add(customTimeouts) +func (cfg *ConsensusConfig) CommitWithCustomTimeout(t time.Time, customTimeout time.Duration) time.Time { + log.Println("CommitWithCustomTimeout called with", customTimeout.Seconds()) + return t.Add(customTimeout) } // WalFile returns the full path to the write-ahead log file From 1e08820f330563e6377f89003e00c556cdb2be95 Mon Sep 17 00:00:00 2001 From: sanaz Date: Fri, 4 Oct 2024 10:40:56 -0700 Subject: [PATCH 46/87] removes some of logs --- consensus/state.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index 6319473e64..c1830c8e89 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -679,16 +679,16 @@ func (cs *State) updateToState(state sm.State) { // // cs.config.TimeoutCommit.Seconds()) //} - cs.Logger.Info("Calculating StartTime for height", "height", height, - "timeout_commit", cs.state.TimeoutCommit.Seconds()) + //cs.Logger.Info("Calculating StartTime for height", "height", height, + // "timeout_commit", cs.state.TimeoutCommit.Seconds()) cs.StartTime = cs.config.CommitWithCustomTimeout(cmttime.Now(), cs.state.TimeoutCommit) } else { //if cs.config != nil { // //cs.Logger.Info("timeout_commit is set to", "timeout_commit", // // cs.config.TimeoutCommit.Seconds()) //} - cs.Logger.Info("Calculating StartTime for height", "height", height, - "timeout_commit", cs.state.TimeoutCommit.Seconds()) + //cs.Logger.Info("Calculating StartTime for height", "height", height, + // "timeout_commit", cs.state.TimeoutCommit.Seconds()) cs.StartTime = cs.config.CommitWithCustomTimeout(cs.CommitTime, cs.state.TimeoutCommit) } From f8eaf2d790f3035fd9d3add00da2f7d262309df6 Mon Sep 17 00:00:00 2001 From: sanaz Date: Fri, 4 Oct 2024 10:41:28 -0700 Subject: [PATCH 47/87] removes some logs --- consensus/state.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/consensus/state.go b/consensus/state.go index c1830c8e89..5eff4bdeee 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -1133,7 +1133,7 @@ func (cs *State) enterPropose(height int64, round int32) { // cs.config.TimeoutPropose.Seconds()) //} - cs.Logger.Info("scheduling timeoutPropose", "timeout", cs.state.TimeoutPropose) + //cs.Logger.Info("scheduling timeoutPropose", "timeout", cs.state.TimeoutPropose) cs.scheduleTimeout(cs.config.ProposeWithCustomTimeout(round, cs.state.TimeoutPropose), height, round, cstypes.RoundStepPropose) From eff0bb26586456d42aff6d04d396cacd8c6a472b Mon Sep 17 00:00:00 2001 From: sanaz Date: Fri, 4 Oct 2024 10:53:20 -0700 Subject: [PATCH 48/87] minor fix and godoc update --- config/config.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/config.go b/config/config.go index e8781b6845..054c9c14c6 100644 --- a/config/config.go +++ b/config/config.go @@ -279,7 +279,7 @@ func (cfg BaseConfig) PrivValidatorKeyFile() string { return rootify(cfg.PrivValidatorKey, cfg.RootDir) } -// PrivValidatorFile returns the full path to the priv_validator_state.json file +// PrivValidatorStateFile returns the full path to the priv_validator_state.json file func (cfg BaseConfig) PrivValidatorStateFile() string { return rootify(cfg.PrivValidatorState, cfg.RootDir) } @@ -1057,7 +1057,7 @@ func (cfg *ConsensusConfig) Propose(round int32) time.Duration { // ProposeWithCustomTimeout returns the amount of time to wait for a proposal func (cfg *ConsensusConfig) ProposeWithCustomTimeout(round int32, customTimeout time.Duration) time.Duration { - log.Println("ProposeWithCustomTimeout called with", customTimeout.Seconds()) + fmt.Println("ProposeWithCustomTimeout called with", customTimeout.Seconds()) return time.Duration(customTimeout.Nanoseconds()+cfg.TimeoutProposeDelta.Nanoseconds()*int64(round)) * time.Nanosecond } @@ -1083,7 +1083,7 @@ func (cfg *ConsensusConfig) Commit(t time.Time) time.Time { } func (cfg *ConsensusConfig) CommitWithCustomTimeout(t time.Time, customTimeout time.Duration) time.Time { - log.Println("CommitWithCustomTimeout called with", customTimeout.Seconds()) + fmt.Println("CommitWithCustomTimeout called with", customTimeout.Seconds()) return t.Add(customTimeout) } From 9865ebe792619f8375b5863a7f828cd7486123f7 Mon Sep 17 00:00:00 2001 From: sanaz Date: Fri, 4 Oct 2024 12:19:34 -0700 Subject: [PATCH 49/87] logs the state and the header's app version after each ApplyBlock --- state/execution.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/state/execution.go b/state/execution.go index 21aff937ae..3407611a56 100644 --- a/state/execution.go +++ b/state/execution.go @@ -277,6 +277,8 @@ func (blockExec *BlockExecutor) ApplyBlock( return state, 0, fmt.Errorf("commit failed for application: %v", err) } + blockExec.logger.Info("state updated in ApplyBlock", "height", block.Height, "app version in the header", block.Header.Version.App, "updated state timeout_commit", state.TimeoutCommit, "updated state timeout_propose", state.TimeoutPropose) + // Lock mempool, commit app state, update mempoool. appHash, retainHeight, err := blockExec.Commit(state, block, abciResponses.DeliverTxs) if err != nil { From 6f88a3036d351575d19550e8a2d44478224735e3 Mon Sep 17 00:00:00 2001 From: sanaz Date: Mon, 7 Oct 2024 12:31:38 -0700 Subject: [PATCH 50/87] adds an rpc route for timeout info --- rpc/core/consensus.go | 6 ++++++ rpc/core/routes.go | 3 +++ 2 files changed, 9 insertions(+) diff --git a/rpc/core/consensus.go b/rpc/core/consensus.go index 1f303d3393..2d6f4ec2f1 100644 --- a/rpc/core/consensus.go +++ b/rpc/core/consensus.go @@ -1,6 +1,7 @@ package core import ( + abci "github.com/tendermint/tendermint/abci/types" cm "github.com/tendermint/tendermint/consensus" cmtmath "github.com/tendermint/tendermint/libs/math" ctypes "github.com/tendermint/tendermint/rpc/core/types" @@ -87,6 +88,11 @@ func ConsensusState(ctx *rpctypes.Context) (*ctypes.ResultConsensusState, error) return &ctypes.ResultConsensusState{RoundState: bz}, err } +func ConsensusTimeoutsInfo(ctx *rpctypes.Context, + heightPtr *int64) (*abci.TimeoutsInfo, error) { + return GetEnvironment().StateStore.LoadConsensusTimeoutsInfo(*heightPtr) +} + // ConsensusParams gets the consensus parameters at the given block height. // If no height is provided, it will fetch the latest consensus params. // More: https://docs.cometbft.com/v0.34/rpc/#/Info/consensus_params diff --git a/rpc/core/routes.go b/rpc/core/routes.go index b2c8d69ee1..9d1845eb56 100644 --- a/rpc/core/routes.go +++ b/rpc/core/routes.go @@ -54,6 +54,9 @@ var Routes = map[string]*rpc.RPCFunc{ // evidence API "broadcast_evidence": rpc.NewRPCFunc(BroadcastEvidence, "evidence"), + + // get Timeouts by height + "timeout": rpc.NewRPCFunc(ConsensusTimeoutsInfo, "height"), } // AddUnsafeRoutes adds unsafe routes. From 3f8320f0c1f39361c5055b8c12dfd411d86213af Mon Sep 17 00:00:00 2001 From: sanaz Date: Mon, 7 Oct 2024 12:45:12 -0700 Subject: [PATCH 51/87] implements ConsensusTimeoutsInfo for baseRPCClient --- rpc/client/http/http.go | 10 ++++++++++ rpc/client/interface.go | 2 ++ 2 files changed, 12 insertions(+) diff --git a/rpc/client/http/http.go b/rpc/client/http/http.go index 7acb6a43c2..0fc0af32a8 100644 --- a/rpc/client/http/http.go +++ b/rpc/client/http/http.go @@ -7,6 +7,7 @@ import ( "strings" "time" + abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/bytes" cmtjson "github.com/tendermint/tendermint/libs/json" "github.com/tendermint/tendermint/libs/log" @@ -388,6 +389,15 @@ func (c *baseRPCClient) BlockchainInfo( return result, nil } +func (c *baseRPCClient) ConsensusTimeoutsInfo(ctx context.Context, heightPtr int64) (*abci.TimeoutsInfo, error) { + result := new(abci.TimeoutsInfo) + _, err := c.caller.Call(ctx, "timeout", map[string]interface{}{"height": heightPtr}, result) + if err != nil { + return nil, err + } + return result, nil +} + func (c *baseRPCClient) Genesis(ctx context.Context) (*ctypes.ResultGenesis, error) { result := new(ctypes.ResultGenesis) _, err := c.caller.Call(ctx, "genesis", map[string]interface{}{}, result) diff --git a/rpc/client/interface.go b/rpc/client/interface.go index ceef3b223f..c5bee96201 100644 --- a/rpc/client/interface.go +++ b/rpc/client/interface.go @@ -23,6 +23,7 @@ implementation. import ( "context" + abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/bytes" "github.com/tendermint/tendermint/libs/service" ctypes "github.com/tendermint/tendermint/rpc/core/types" @@ -116,6 +117,7 @@ type HistoryClient interface { Genesis(context.Context) (*ctypes.ResultGenesis, error) GenesisChunked(context.Context, uint) (*ctypes.ResultGenesisChunk, error) BlockchainInfo(ctx context.Context, minHeight, maxHeight int64) (*ctypes.ResultBlockchainInfo, error) + ConsensusTimeoutsInfo(ctx context.Context, heightPtr int64) (*abci.TimeoutsInfo, error) } // StatusClient provides access to general chain info. From d6ecfd49de5126000149b93e31184e10997d567b Mon Sep 17 00:00:00 2001 From: sanaz Date: Mon, 7 Oct 2024 12:50:28 -0700 Subject: [PATCH 52/87] adds some missing parts --- light/rpc/client.go | 5 +++++ rpc/client/local/local.go | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/light/rpc/client.go b/light/rpc/client.go index 7f7fc64b14..0781097081 100644 --- a/light/rpc/client.go +++ b/light/rpc/client.go @@ -52,6 +52,11 @@ type Client struct { keyPathFn KeyPathFunc } +func (c *Client) ConsensusTimeoutsInfo(ctx context.Context, heightPtr int64) (*abci.TimeoutsInfo, error) { + //TODO implement me + panic("implement me") +} + var _ rpcclient.Client = (*Client)(nil) // Option allow you to tweak Client. diff --git a/rpc/client/local/local.go b/rpc/client/local/local.go index 93ecf6f0c0..a09bad73cf 100644 --- a/rpc/client/local/local.go +++ b/rpc/client/local/local.go @@ -5,6 +5,7 @@ import ( "fmt" "time" + abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/bytes" "github.com/tendermint/tendermint/libs/log" cmtpubsub "github.com/tendermint/tendermint/libs/pubsub" @@ -43,6 +44,11 @@ type Local struct { ctx *rpctypes.Context } +func (c *Local) ConsensusTimeoutsInfo(ctx context.Context, heightPtr int64) (*abci.TimeoutsInfo, error) { + //TODO implement me + panic("implement me") +} + // NewLocal configures a client that calls the Node directly. // // Note that given how rpc/core works with package singletons, that From d8815a3a4137b4efa4ebb4204c277f44c13f5aad Mon Sep 17 00:00:00 2001 From: sanaz Date: Mon, 7 Oct 2024 15:52:20 -0700 Subject: [PATCH 53/87] adds a test for the retrieval of timeout info per height --- state/state_test.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/state/state_test.go b/state/state_test.go index 8f5ec412ea..c1a3ed2436 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -173,6 +173,50 @@ func TestStateSaveLoad(t *testing.T) { "\ngot: %v\nexpected: %v\n", loadedState.TimeoutPropose, state.TimeoutPropose)) } +// TestLoadConsensusTimeoutsInfo tests whether timeouts are properly saved +// while saving State to a db and can be retrieved using LoadConsensusTimeoutsInfo. +func TestLoadConsensusTimeoutsInfo(t *testing.T) { + tearDown, stateDB, state := setupTestCase(t) + defer tearDown(t) + stateStore := sm.NewStore(stateDB, sm.StoreOptions{ + DiscardABCIResponses: false, + }) + assert := assert.New(t) + + state1 := state.Copy() + state1.TimeoutCommit = 1 * time.Second + state1.TimeoutPropose = 2 * time.Second + // advance height to ensure timeouts are saved for a new height + state1.LastBlockHeight++ + state1.LastValidators = state.Validators + err := stateStore.Save(state1) + require.NoError(t, err) + + // State saved with LastBlockHeight is saved for the next height, + //hence using state1.LastBlockHeight + 1 to retrieve it + loadedTimeoutsInfo1, err := stateStore.LoadConsensusTimeoutsInfo(state1.LastBlockHeight + 1) + require.NoError(t, err) + assert.Equal(state1.TimeoutCommit, loadedTimeoutsInfo1.TimeoutCommit, "expected TimeoutCommit to be equal") + assert.Equal(state1.TimeoutPropose, loadedTimeoutsInfo1.TimeoutPropose, "expected TimeoutPropose to be equal") + + state2 := state.Copy() + // advance height by 2 to ensure timeouts are + // saved for a new height + state2.LastBlockHeight += 2 + state2.TimeoutCommit = 3 * time.Second + state2.TimeoutPropose = 4 * time.Second + state2.LastValidators = state.Validators + err = stateStore.Save(state2) + require.NoError(t, err) + + // State saved with LastBlockHeight is saved for the next height, + //hence using state1.LastBlockHeight + 1 to retrieve it + loadedTimeoutsInfo2, err := stateStore.LoadConsensusTimeoutsInfo(state2.LastBlockHeight + 1) + require.NoError(t, err) + assert.Equal(state2.TimeoutCommit, loadedTimeoutsInfo2.TimeoutCommit, "expected TimeoutCommit to be equal") + assert.Equal(state2.TimeoutPropose, loadedTimeoutsInfo2.TimeoutPropose, "expected TimeoutPropose to be equal") +} + // TestABCIResponsesSaveLoad tests saving and loading ABCIResponses. func TestABCIResponsesSaveLoad1(t *testing.T) { tearDown, stateDB, state := setupTestCase(t) From 377751e96a5cc8382dffed131c8a671822745148 Mon Sep 17 00:00:00 2001 From: sanaz Date: Mon, 7 Oct 2024 15:53:29 -0700 Subject: [PATCH 54/87] fixes a comment --- state/state_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/state/state_test.go b/state/state_test.go index c1a3ed2436..abeff5c03c 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -193,7 +193,7 @@ func TestLoadConsensusTimeoutsInfo(t *testing.T) { require.NoError(t, err) // State saved with LastBlockHeight is saved for the next height, - //hence using state1.LastBlockHeight + 1 to retrieve it + // hence using state1.LastBlockHeight + 1 to retrieve it loadedTimeoutsInfo1, err := stateStore.LoadConsensusTimeoutsInfo(state1.LastBlockHeight + 1) require.NoError(t, err) assert.Equal(state1.TimeoutCommit, loadedTimeoutsInfo1.TimeoutCommit, "expected TimeoutCommit to be equal") @@ -210,7 +210,7 @@ func TestLoadConsensusTimeoutsInfo(t *testing.T) { require.NoError(t, err) // State saved with LastBlockHeight is saved for the next height, - //hence using state1.LastBlockHeight + 1 to retrieve it + // hence using state2.LastBlockHeight + 1 to retrieve it loadedTimeoutsInfo2, err := stateStore.LoadConsensusTimeoutsInfo(state2.LastBlockHeight + 1) require.NoError(t, err) assert.Equal(state2.TimeoutCommit, loadedTimeoutsInfo2.TimeoutCommit, "expected TimeoutCommit to be equal") From 598e9be6073e77b1cb1f2b94d54f6c20f8ee3048 Mon Sep 17 00:00:00 2001 From: sanaz Date: Tue, 8 Oct 2024 09:46:10 -0700 Subject: [PATCH 55/87] revises the test to retrieve states after all are saved --- state/state_test.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/state/state_test.go b/state/state_test.go index abeff5c03c..cc4cf16369 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -183,6 +183,7 @@ func TestLoadConsensusTimeoutsInfo(t *testing.T) { }) assert := assert.New(t) + // add two states to the store state1 := state.Copy() state1.TimeoutCommit = 1 * time.Second state1.TimeoutPropose = 2 * time.Second @@ -192,13 +193,6 @@ func TestLoadConsensusTimeoutsInfo(t *testing.T) { err := stateStore.Save(state1) require.NoError(t, err) - // State saved with LastBlockHeight is saved for the next height, - // hence using state1.LastBlockHeight + 1 to retrieve it - loadedTimeoutsInfo1, err := stateStore.LoadConsensusTimeoutsInfo(state1.LastBlockHeight + 1) - require.NoError(t, err) - assert.Equal(state1.TimeoutCommit, loadedTimeoutsInfo1.TimeoutCommit, "expected TimeoutCommit to be equal") - assert.Equal(state1.TimeoutPropose, loadedTimeoutsInfo1.TimeoutPropose, "expected TimeoutPropose to be equal") - state2 := state.Copy() // advance height by 2 to ensure timeouts are // saved for a new height @@ -209,6 +203,15 @@ func TestLoadConsensusTimeoutsInfo(t *testing.T) { err = stateStore.Save(state2) require.NoError(t, err) + // now try to retrieve saved sates from the store, focusing on timeouts + + // State saved with LastBlockHeight is saved for the next height, + // hence using state1.LastBlockHeight + 1 to retrieve it + loadedTimeoutsInfo1, err := stateStore.LoadConsensusTimeoutsInfo(state1.LastBlockHeight + 1) + require.NoError(t, err) + assert.Equal(state1.TimeoutCommit, loadedTimeoutsInfo1.TimeoutCommit, "expected TimeoutCommit to be equal") + assert.Equal(state1.TimeoutPropose, loadedTimeoutsInfo1.TimeoutPropose, "expected TimeoutPropose to be equal") + // State saved with LastBlockHeight is saved for the next height, // hence using state2.LastBlockHeight + 1 to retrieve it loadedTimeoutsInfo2, err := stateStore.LoadConsensusTimeoutsInfo(state2.LastBlockHeight + 1) From a34d10359727fdeb0eb36781724a50fc79607a6c Mon Sep 17 00:00:00 2001 From: sanaz Date: Tue, 8 Oct 2024 09:46:20 -0700 Subject: [PATCH 56/87] fixes a typo --- node/node.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/node.go b/node/node.go index 39e2d255fa..b0ced22513 100644 --- a/node/node.go +++ b/node/node.go @@ -1062,7 +1062,7 @@ func (n *Node) OnStart() error { n.addrBook.AddPrivateIDs(splitAndTrimEmpty(n.config.P2P.PrivatePeerIDs, ",", " ")) // Start the RPC server before the P2P server - // so we can eg. receive txs for the first block + // so we can e.g., receive txs for the first block if n.config.RPC.ListenAddress != "" { listeners, err := n.startRPC() if err != nil { From f06eae6dfd137643dea03cba71fb6d5f75caae65 Mon Sep 17 00:00:00 2001 From: sanaz Date: Tue, 8 Oct 2024 12:03:24 -0700 Subject: [PATCH 57/87] covers a tricky corner case for the genesis state --- consensus/state.go | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index 5eff4bdeee..fa7d246caa 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -674,22 +674,30 @@ func (cs *State) updateToState(state sm.State) { // to be gathered for the first block. // And alternative solution that relies on clocks: // cs.StartTime = state.LastBlockTime.Add(timeoutCommit) - //if cs.config != nil { - // //cs.Logger.Info("timeout_commit is set to", "timeout_commit", - // // cs.config.TimeoutCommit.Seconds()) - //} - - //cs.Logger.Info("Calculating StartTime for height", "height", height, - // "timeout_commit", cs.state.TimeoutCommit.Seconds()) - cs.StartTime = cs.config.CommitWithCustomTimeout(cmttime.Now(), cs.state.TimeoutCommit) + + if state.LastBlockHeight == 0 { + // state represents the genesis state, hence the StartTime should be set based on the state's TimeoutCommit + // we don't use cs.state.TimeoutCommit because that is zero + cs.StartTime = cs.config.CommitWithCustomTimeout(cmttime.Now(), + state.TimeoutCommit) + } else { + // if state does not represent the genesis state, + // we use the cs.state.TimeoutCommit + cs.StartTime = cs.config.CommitWithCustomTimeout(cmttime.Now(), + cs.state.TimeoutCommit) + } + } else { - //if cs.config != nil { - // //cs.Logger.Info("timeout_commit is set to", "timeout_commit", - // // cs.config.TimeoutCommit.Seconds()) - //} - //cs.Logger.Info("Calculating StartTime for height", "height", height, - // "timeout_commit", cs.state.TimeoutCommit.Seconds()) - cs.StartTime = cs.config.CommitWithCustomTimeout(cs.CommitTime, cs.state.TimeoutCommit) + if state.LastBlockHeight == 0 { + // state represents the genesis state, hence the StartTime should be set based on the state's TimeoutCommit + // we don't use cs.state.TimeoutCommit because that is zero + cs.StartTime = cs.config.CommitWithCustomTimeout(cs.CommitTime, state.TimeoutCommit) + } else { + // if state does not represent the genesis state, + // we use the cs.state.TimeoutCommit + cs.StartTime = cs.config.CommitWithCustomTimeout(cs.CommitTime, cs.state.TimeoutCommit) + } + } cs.Validators = validators From 3347fe7e2ee7ba7949675eccae64f30fdc0a8124 Mon Sep 17 00:00:00 2001 From: sanaz Date: Tue, 8 Oct 2024 12:56:19 -0700 Subject: [PATCH 58/87] does not amend configs in updatoToState --- consensus/state.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index fa7d246caa..104f82109c 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -714,8 +714,8 @@ func (cs *State) updateToState(state sm.State) { cs.CommitRound = -1 cs.LastValidators = state.LastValidators cs.TriggeredTimeoutPrecommit = false - cs.config.TimeoutPropose = state.GetTimeoutPropose() - cs.config.TimeoutCommit = state.GetTimeoutCommit() + //cs.config.TimeoutPropose = state.GetTimeoutPropose() + //cs.config.TimeoutCommit = state.GetTimeoutCommit() cs.state = state From fbe4f62c8eb7f508d6b092e60dd092cc3570471b Mon Sep 17 00:00:00 2001 From: sanaz Date: Tue, 8 Oct 2024 14:56:46 -0700 Subject: [PATCH 59/87] formats some lines --- consensus/state.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index 104f82109c..3088a5d00d 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -678,13 +678,11 @@ func (cs *State) updateToState(state sm.State) { if state.LastBlockHeight == 0 { // state represents the genesis state, hence the StartTime should be set based on the state's TimeoutCommit // we don't use cs.state.TimeoutCommit because that is zero - cs.StartTime = cs.config.CommitWithCustomTimeout(cmttime.Now(), - state.TimeoutCommit) + cs.StartTime = cs.config.CommitWithCustomTimeout(cmttime.Now(), state.TimeoutCommit) } else { // if state does not represent the genesis state, // we use the cs.state.TimeoutCommit - cs.StartTime = cs.config.CommitWithCustomTimeout(cmttime.Now(), - cs.state.TimeoutCommit) + cs.StartTime = cs.config.CommitWithCustomTimeout(cmttime.Now(), cs.state.TimeoutCommit) } } else { From 86bd13085065632c7d6a402567eeaa3f892e39f4 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 9 Oct 2024 11:36:19 -0700 Subject: [PATCH 60/87] implements ConsensusTimeoutsInfo for the local client --- rpc/client/local/local.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/rpc/client/local/local.go b/rpc/client/local/local.go index a09bad73cf..a55d69e161 100644 --- a/rpc/client/local/local.go +++ b/rpc/client/local/local.go @@ -44,12 +44,7 @@ type Local struct { ctx *rpctypes.Context } -func (c *Local) ConsensusTimeoutsInfo(ctx context.Context, heightPtr int64) (*abci.TimeoutsInfo, error) { - //TODO implement me - panic("implement me") -} - -// NewLocal configures a client that calls the Node directly. +// New configures a client that calls the Node directly. // // Note that given how rpc/core works with package singletons, that // you can only have one node per process. So make sure test cases @@ -133,6 +128,10 @@ func (c *Local) ConsensusParams(ctx context.Context, height *int64) (*ctypes.Res return core.ConsensusParams(c.ctx, height) } +func (c *Local) ConsensusTimeoutsInfo(_ context.Context, height int64) (*abci.TimeoutsInfo, error) { + return core.ConsensusTimeoutsInfo(c.ctx, height) +} + func (c *Local) Health(ctx context.Context) (*ctypes.ResultHealth, error) { return core.Health(c.ctx) } From 8fe698f6f7b8c306bac75afff6daaef868c39390 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 9 Oct 2024 11:36:55 -0700 Subject: [PATCH 61/87] converts height ptr to int64 --- rpc/client/http/http.go | 4 ++-- rpc/client/interface.go | 2 +- rpc/core/consensus.go | 4 ++-- rpc/jsonrpc/server/http_server.go | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/rpc/client/http/http.go b/rpc/client/http/http.go index 0fc0af32a8..70a8f17b87 100644 --- a/rpc/client/http/http.go +++ b/rpc/client/http/http.go @@ -389,9 +389,9 @@ func (c *baseRPCClient) BlockchainInfo( return result, nil } -func (c *baseRPCClient) ConsensusTimeoutsInfo(ctx context.Context, heightPtr int64) (*abci.TimeoutsInfo, error) { +func (c *baseRPCClient) ConsensusTimeoutsInfo(ctx context.Context, height int64) (*abci.TimeoutsInfo, error) { result := new(abci.TimeoutsInfo) - _, err := c.caller.Call(ctx, "timeout", map[string]interface{}{"height": heightPtr}, result) + _, err := c.caller.Call(ctx, "timeout", map[string]interface{}{"height": height}, result) if err != nil { return nil, err } diff --git a/rpc/client/interface.go b/rpc/client/interface.go index c5bee96201..3f97dc09e9 100644 --- a/rpc/client/interface.go +++ b/rpc/client/interface.go @@ -7,7 +7,7 @@ to a CometBFT node, as well as higher-level functionality. The main implementation for production code is client.HTTP, which connects via http to the jsonrpc interface of the CometBFT node. -For connecting to a node running in the same process (eg. when +For connecting to a node running in the same process (e.g., when compiling the abci app in the same process), you can use the client.Local implementation. diff --git a/rpc/core/consensus.go b/rpc/core/consensus.go index 2d6f4ec2f1..ae60b0bb80 100644 --- a/rpc/core/consensus.go +++ b/rpc/core/consensus.go @@ -89,8 +89,8 @@ func ConsensusState(ctx *rpctypes.Context) (*ctypes.ResultConsensusState, error) } func ConsensusTimeoutsInfo(ctx *rpctypes.Context, - heightPtr *int64) (*abci.TimeoutsInfo, error) { - return GetEnvironment().StateStore.LoadConsensusTimeoutsInfo(*heightPtr) + heightPtr int64) (*abci.TimeoutsInfo, error) { + return GetEnvironment().StateStore.LoadConsensusTimeoutsInfo(heightPtr) } // ConsensusParams gets the consensus parameters at the given block height. diff --git a/rpc/jsonrpc/server/http_server.go b/rpc/jsonrpc/server/http_server.go index 29eae9fc32..bdd757e7e8 100644 --- a/rpc/jsonrpc/server/http_server.go +++ b/rpc/jsonrpc/server/http_server.go @@ -19,7 +19,7 @@ import ( types "github.com/tendermint/tendermint/rpc/jsonrpc/types" ) -// Config is a RPC server configuration. +// Config is an RPC server configuration. type Config struct { // see netutil.LimitListener MaxOpenConnections int @@ -64,7 +64,7 @@ func Serve(listener net.Listener, handler http.Handler, logger log.Logger, confi return err } -// Serve creates a http.Server and calls ServeTLS with the given listener, +// ServeTLS creates a http.Server and calls ServeTLS with the given listener, // certFile and keyFile. It wraps handler with RecoverAndLogHandler and a // handler, which limits the max body size to config.MaxBodyBytes. // From 5785b37e376282b7dc7bc85e254d86c99be1d67d Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 9 Oct 2024 11:36:55 -0700 Subject: [PATCH 62/87] converts height ptr to int64 --- rpc/client/http/http.go | 4 ++-- rpc/client/interface.go | 4 ++-- rpc/core/consensus.go | 4 ++-- rpc/jsonrpc/server/http_server.go | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/rpc/client/http/http.go b/rpc/client/http/http.go index 0fc0af32a8..70a8f17b87 100644 --- a/rpc/client/http/http.go +++ b/rpc/client/http/http.go @@ -389,9 +389,9 @@ func (c *baseRPCClient) BlockchainInfo( return result, nil } -func (c *baseRPCClient) ConsensusTimeoutsInfo(ctx context.Context, heightPtr int64) (*abci.TimeoutsInfo, error) { +func (c *baseRPCClient) ConsensusTimeoutsInfo(ctx context.Context, height int64) (*abci.TimeoutsInfo, error) { result := new(abci.TimeoutsInfo) - _, err := c.caller.Call(ctx, "timeout", map[string]interface{}{"height": heightPtr}, result) + _, err := c.caller.Call(ctx, "timeout", map[string]interface{}{"height": height}, result) if err != nil { return nil, err } diff --git a/rpc/client/interface.go b/rpc/client/interface.go index c5bee96201..4d6d3cb353 100644 --- a/rpc/client/interface.go +++ b/rpc/client/interface.go @@ -7,7 +7,7 @@ to a CometBFT node, as well as higher-level functionality. The main implementation for production code is client.HTTP, which connects via http to the jsonrpc interface of the CometBFT node. -For connecting to a node running in the same process (eg. when +For connecting to a node running in the same process (e.g., when compiling the abci app in the same process), you can use the client.Local implementation. @@ -117,7 +117,7 @@ type HistoryClient interface { Genesis(context.Context) (*ctypes.ResultGenesis, error) GenesisChunked(context.Context, uint) (*ctypes.ResultGenesisChunk, error) BlockchainInfo(ctx context.Context, minHeight, maxHeight int64) (*ctypes.ResultBlockchainInfo, error) - ConsensusTimeoutsInfo(ctx context.Context, heightPtr int64) (*abci.TimeoutsInfo, error) + ConsensusTimeoutsInfo(ctx context.Context, height int64) (*abci.TimeoutsInfo, error) } // StatusClient provides access to general chain info. diff --git a/rpc/core/consensus.go b/rpc/core/consensus.go index 2d6f4ec2f1..ae60b0bb80 100644 --- a/rpc/core/consensus.go +++ b/rpc/core/consensus.go @@ -89,8 +89,8 @@ func ConsensusState(ctx *rpctypes.Context) (*ctypes.ResultConsensusState, error) } func ConsensusTimeoutsInfo(ctx *rpctypes.Context, - heightPtr *int64) (*abci.TimeoutsInfo, error) { - return GetEnvironment().StateStore.LoadConsensusTimeoutsInfo(*heightPtr) + heightPtr int64) (*abci.TimeoutsInfo, error) { + return GetEnvironment().StateStore.LoadConsensusTimeoutsInfo(heightPtr) } // ConsensusParams gets the consensus parameters at the given block height. diff --git a/rpc/jsonrpc/server/http_server.go b/rpc/jsonrpc/server/http_server.go index 29eae9fc32..bdd757e7e8 100644 --- a/rpc/jsonrpc/server/http_server.go +++ b/rpc/jsonrpc/server/http_server.go @@ -19,7 +19,7 @@ import ( types "github.com/tendermint/tendermint/rpc/jsonrpc/types" ) -// Config is a RPC server configuration. +// Config is an RPC server configuration. type Config struct { // see netutil.LimitListener MaxOpenConnections int @@ -64,7 +64,7 @@ func Serve(listener net.Listener, handler http.Handler, logger log.Logger, confi return err } -// Serve creates a http.Server and calls ServeTLS with the given listener, +// ServeTLS creates a http.Server and calls ServeTLS with the given listener, // certFile and keyFile. It wraps handler with RecoverAndLogHandler and a // handler, which limits the max body size to config.MaxBodyBytes. // From 66f3f21155f4ed432327a21773eb64914e88d58b Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 9 Oct 2024 11:40:11 -0700 Subject: [PATCH 63/87] implements ConsensusTimeoutsInfo for the mock client --- rpc/client/mock/client.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rpc/client/mock/client.go b/rpc/client/mock/client.go index 796d3ed3c7..19b477025e 100644 --- a/rpc/client/mock/client.go +++ b/rpc/client/mock/client.go @@ -18,6 +18,7 @@ import ( "context" "reflect" + abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/bytes" "github.com/tendermint/tendermint/libs/service" "github.com/tendermint/tendermint/rpc/client" @@ -131,6 +132,10 @@ func (c Client) ConsensusParams(ctx context.Context, height *int64) (*ctypes.Res return core.ConsensusParams(&rpctypes.Context{}, height) } +func (c Client) ConsensusTimeoutsInfo(_ context.Context, height int64) (*abci.TimeoutsInfo, error) { + return core.ConsensusTimeoutsInfo(&rpctypes.Context{}, height) +} + func (c Client) Health(ctx context.Context) (*ctypes.ResultHealth, error) { return core.Health(&rpctypes.Context{}) } From 0ebf51c3067c02385d1b3e025dba11c28a74a420 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 9 Oct 2024 15:49:07 -0700 Subject: [PATCH 64/87] fixes redundant imports --- state/store.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/state/store.go b/state/store.go index cda0209666..3f4e9ebc4a 100644 --- a/state/store.go +++ b/state/store.go @@ -8,7 +8,6 @@ import ( "github.com/gogo/protobuf/proto" abci "github.com/tendermint/tendermint/abci/types" - abcitypes "github.com/tendermint/tendermint/abci/types" cmtmath "github.com/tendermint/tendermint/libs/math" cmtos "github.com/tendermint/tendermint/libs/os" cmtstate "github.com/tendermint/tendermint/proto/tendermint/state" @@ -72,7 +71,7 @@ type Store interface { // LoadConsensusParams loads the consensus params for a given height LoadConsensusParams(int64) (cmtproto.ConsensusParams, error) // LoadConsensusTimeoutsInfo loads timeouts info for a given height - LoadConsensusTimeoutsInfo(int64) (*abcitypes.TimeoutsInfo, error) + LoadConsensusTimeoutsInfo(int64) (*abci.TimeoutsInfo, error) // Save overwrites the previous state with the updated one Save(State) error // SaveABCIResponses saves ABCIResponses for a given height @@ -206,7 +205,7 @@ func (store dbStore) save(state State, key []byte) error { // save next timeouts // TODO write test for this - if err := store.saveConsensusTimeoutsInfo(nextHeight, &abcitypes.TimeoutsInfo{TimeoutPropose: state.TimeoutPropose, TimeoutCommit: state.TimeoutCommit}); err != nil { + if err := store.saveConsensusTimeoutsInfo(nextHeight, &abci.TimeoutsInfo{TimeoutPropose: state.TimeoutPropose, TimeoutCommit: state.TimeoutCommit}); err != nil { return err } @@ -627,7 +626,7 @@ func (store dbStore) LoadConsensusParams(height int64) (cmtproto.ConsensusParams return paramsInfo.ConsensusParams, nil } -func (store dbStore) LoadConsensusTimeoutsInfo(height int64) (*abcitypes.TimeoutsInfo, error) { +func (store dbStore) LoadConsensusTimeoutsInfo(height int64) (*abci.TimeoutsInfo, error) { buf, err := store.db.Get(calcTimeoutsKey(height)) if err != nil { return nil, err @@ -636,7 +635,7 @@ func (store dbStore) LoadConsensusTimeoutsInfo(height int64) (*abcitypes.Timeout return nil, errors.New("value retrieved from db is empty") } - timeoutsInfo := new(abcitypes.TimeoutsInfo) + timeoutsInfo := new(abci.TimeoutsInfo) if err = timeoutsInfo.Unmarshal(buf); err != nil { // DATA HAS BEEN CORRUPTED OR THE SPEC HAS CHANGED cmtos.Exit(fmt.Sprintf(`LoadConsensusTimeouts: Data has been corrupted or its spec has changed:%v\n`, err)) @@ -665,7 +664,7 @@ func (store dbStore) loadConsensusParamsInfo(height int64) (*cmtstate.ConsensusP // saveConsensusTimeoutsInfo saves the timeouts info for the next block to disk. // It should be called from s.Save(), right before the state itself is persisted. -func (store dbStore) saveConsensusTimeoutsInfo(height int64, timeoutsInfo *abcitypes.TimeoutsInfo) error { +func (store dbStore) saveConsensusTimeoutsInfo(height int64, timeoutsInfo *abci.TimeoutsInfo) error { bz, err := timeoutsInfo.Marshal() if err != nil { return err From ee9bda27cafb6b26ba99fb090d7a0d41aa63aa30 Mon Sep 17 00:00:00 2001 From: sanaz Date: Wed, 9 Oct 2024 15:49:21 -0700 Subject: [PATCH 65/87] implements a missing method for the mock store --- state/mocks/store.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/state/mocks/store.go b/state/mocks/store.go index b232f0df93..20b92e8e06 100644 --- a/state/mocks/store.go +++ b/state/mocks/store.go @@ -4,6 +4,7 @@ package mocks import ( mock "github.com/stretchr/testify/mock" + abci "github.com/tendermint/tendermint/abci/types" state "github.com/tendermint/tendermint/state" tendermintstate "github.com/tendermint/tendermint/proto/tendermint/state" @@ -18,6 +19,12 @@ type Store struct { mock.Mock } +func (_m *Store) LoadConsensusTimeoutsInfo(i int64) (*abci.TimeoutsInfo, error) { + //TODO implement me, retrieve the timeouts info from the store + res := abci.TimeoutsInfo{} + return &res, nil +} + // Bootstrap provides a mock function with given fields: _a0 func (_m *Store) Bootstrap(_a0 state.State) error { ret := _m.Called(_a0) From 9f11257f6e4119cbc95531820acb88da2fa47245 Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 14:54:58 -0700 Subject: [PATCH 66/87] falls back to the configs timeouts if none is available in the state --- config/config.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/config/config.go b/config/config.go index 054c9c14c6..91435ebc74 100644 --- a/config/config.go +++ b/config/config.go @@ -1058,7 +1058,13 @@ func (cfg *ConsensusConfig) Propose(round int32) time.Duration { // ProposeWithCustomTimeout returns the amount of time to wait for a proposal func (cfg *ConsensusConfig) ProposeWithCustomTimeout(round int32, customTimeout time.Duration) time.Duration { fmt.Println("ProposeWithCustomTimeout called with", customTimeout.Seconds()) - return time.Duration(customTimeout.Nanoseconds()+cfg.TimeoutProposeDelta.Nanoseconds()*int64(round)) * time.Nanosecond + // this is to capture any unforeseen cases where the customTimeout is 0 + var timeoutPropose time.Duration + if customTimeout == 0 { + // falling back to default timeout + timeoutPropose = cfg.TimeoutPropose + } + return time.Duration(timeoutPropose.Nanoseconds()+cfg.TimeoutProposeDelta.Nanoseconds()*int64(round)) * time.Nanosecond } // Prevote returns the amount of time to wait for straggler votes after receiving any +2/3 prevotes @@ -1084,7 +1090,13 @@ func (cfg *ConsensusConfig) Commit(t time.Time) time.Time { func (cfg *ConsensusConfig) CommitWithCustomTimeout(t time.Time, customTimeout time.Duration) time.Time { fmt.Println("CommitWithCustomTimeout called with", customTimeout.Seconds()) - return t.Add(customTimeout) + // this is to capture any unforeseen cases where the customTimeout is 0 + var timeoutCommit time.Duration + if customTimeout == 0 { + // falling back to default timeout + timeoutCommit = cfg.TimeoutCommit + } + return t.Add(timeoutCommit) } // WalFile returns the full path to the write-ahead log file From aabf2c6ba988567ef9fcf9abd76d4f980f6ed1ee Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 15:26:12 -0700 Subject: [PATCH 67/87] clarifies why a test case is valid under the new implementation --- consensus/mempool_test.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/consensus/mempool_test.go b/consensus/mempool_test.go index beb91d154d..df069c8123 100644 --- a/consensus/mempool_test.go +++ b/consensus/mempool_test.go @@ -75,7 +75,7 @@ func TestMempoolProgressInHigherRound(t *testing.T) { timeoutCh := subscribe(cs.eventBus, types.EventQueryTimeoutPropose) cs.setProposal = func(proposal *types.Proposal) error { if cs.Height == 2 && cs.Round == 0 { - // dont set the proposal in round 0 so we timeout and + // don't set the proposal in round 0 so we timeout and // go to next round cs.Logger.Info("Ignoring set proposal at height 2, round 0") return nil @@ -91,7 +91,12 @@ func TestMempoolProgressInHigherRound(t *testing.T) { round = 0 ensureNewRound(newRoundCh, height, round) // first round at next height - deliverTxsRange(cs, 0, 1) // we deliver txs, but dont set a proposal so we get the next round + deliverTxsRange(cs, 0, 1) // we deliver txs, but don't set a proposal so we get the next round + // The following line checks if we proceed to the next round after cs.config.TimeoutPropose.Nanoseconds(). + // In the versioned timeout implementation, the timeout propose is version-dependent. + // However, in this test case, cs is created with an empty previous state, + // so there's no timeout propose in the previous state. + // Therefore, we fall back to the timeout propose in the config, making this test case valid. ensureNewTimeout(timeoutCh, height, round, cs.config.TimeoutPropose.Nanoseconds()) round++ // moving to the next round From 5e7abef20f37443a135de3dfb9d2a370a19e4cd2 Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 15:33:47 -0700 Subject: [PATCH 68/87] adds further clarifying comments about the tests that use the timeout propose in the cofig --- consensus/mempool_test.go | 9 ++++----- consensus/state_test.go | 8 ++++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/consensus/mempool_test.go b/consensus/mempool_test.go index df069c8123..d6c4e09e51 100644 --- a/consensus/mempool_test.go +++ b/consensus/mempool_test.go @@ -92,11 +92,10 @@ func TestMempoolProgressInHigherRound(t *testing.T) { ensureNewRound(newRoundCh, height, round) // first round at next height deliverTxsRange(cs, 0, 1) // we deliver txs, but don't set a proposal so we get the next round - // The following line checks if we proceed to the next round after cs.config.TimeoutPropose.Nanoseconds(). - // In the versioned timeout implementation, the timeout propose is version-dependent. - // However, in this test case, cs is created with an empty previous state, - // so there's no timeout propose in the previous state. - // Therefore, we fall back to the timeout propose in the config, making this test case valid. + // The use of cs.config.TimeoutPropose.Nanoseconds() as the timeout propose is acceptable in this test case, the following line. + // Even though timeouts are version-dependent, cs is created with an empty previous state in this scenario. + // As there's no timeout propose in the previous state, we default to the timeout propose in the config. + // This makes the test case valid. ensureNewTimeout(timeoutCh, height, round, cs.config.TimeoutPropose.Nanoseconds()) round++ // moving to the next round diff --git a/consensus/state_test.go b/consensus/state_test.go index 5b6f5c6545..9ae232d991 100644 --- a/consensus/state_test.go +++ b/consensus/state_test.go @@ -144,6 +144,10 @@ func TestStateEnterProposeNoPrivValidator(t *testing.T) { startTestRound(cs, height, round) // if we're not a validator, EnterPropose should timeout + // The use of cs.config.TimeoutPropose.Nanoseconds() as the timeout propose is acceptable in this test case. + // Even though timeouts are version-dependent, cs is created with an empty previous state in this scenario. + // As there's no timeout propose in the previous state, we default to the timeout propose in the config. + // This makes the test case valid. ensureNewTimeout(timeoutCh, height, round, cs.config.TimeoutPropose.Nanoseconds()) if cs.GetRoundState().Proposal != nil { @@ -179,6 +183,10 @@ func TestStateEnterProposeYesPrivValidator(t *testing.T) { } // if we're a validator, enterPropose should not timeout + // The use of cs.config.TimeoutPropose.Nanoseconds() as the timeout propose is acceptable in this test case. + // Even though timeouts are version-dependent, cs is created with an empty previous state in this scenario. + // As there's no timeout propose in the previous state, we default to the timeout propose in the config. + // This makes the test case valid. ensureNoNewTimeout(timeoutCh, cs.config.TimeoutPropose.Nanoseconds()) } From 98e3e13ebbefd73108625fb9d6fa64b355c1ea3f Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 15:38:25 -0700 Subject: [PATCH 69/87] comments on the new methods for Commit and Propose time calculation --- config/config.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index 91435ebc74..1c815a48c4 100644 --- a/config/config.go +++ b/config/config.go @@ -1055,7 +1055,10 @@ func (cfg *ConsensusConfig) Propose(round int32) time.Duration { ) * time.Nanosecond } -// ProposeWithCustomTimeout returns the amount of time to wait for a proposal +// ProposeWithCustomTimeout is identical to Propose. However, +// it calculates the amount of time to wait for a proposal using the supplied +// customTimeout. +// If customTimeout is 0, the default TimeoutCommit is used. func (cfg *ConsensusConfig) ProposeWithCustomTimeout(round int32, customTimeout time.Duration) time.Duration { fmt.Println("ProposeWithCustomTimeout called with", customTimeout.Seconds()) // this is to capture any unforeseen cases where the customTimeout is 0 @@ -1088,6 +1091,8 @@ func (cfg *ConsensusConfig) Commit(t time.Time) time.Time { return t.Add(cfg.TimeoutCommit) } +// CommitWithCustomTimeout is identical to Commit. However, it calculates the time for commit using the supplied customTimeout. +// If customTimeout is 0, the default TimeoutCommit is used. func (cfg *ConsensusConfig) CommitWithCustomTimeout(t time.Time, customTimeout time.Duration) time.Time { fmt.Println("CommitWithCustomTimeout called with", customTimeout.Seconds()) // this is to capture any unforeseen cases where the customTimeout is 0 @@ -1115,6 +1120,8 @@ func (cfg *ConsensusConfig) SetWalFile(walFile string) { // ValidateBasic performs basic validation (checking param bounds, etc.) and // returns an error if any check fails. func (cfg *ConsensusConfig) ValidateBasic() error { + // TODO we may want to remove this check if TimeoutPropose is removed from + // the config if cfg.TimeoutPropose < 0 { return errors.New("timeout_propose can't be negative") } @@ -1133,6 +1140,8 @@ func (cfg *ConsensusConfig) ValidateBasic() error { if cfg.TimeoutPrecommitDelta < 0 { return errors.New("timeout_precommit_delta can't be negative") } + // TODO we may want to remove this check if TimeoutCommit is removed from + // the config if cfg.TimeoutCommit < 0 { return errors.New("timeout_commit can't be negative") } From fc2fc7661f0f988af1a221d90b610fef7509f01b Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 15:53:50 -0700 Subject: [PATCH 70/87] deletes fmt statements --- config/config.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/config.go b/config/config.go index 1c815a48c4..5964d61980 100644 --- a/config/config.go +++ b/config/config.go @@ -1060,7 +1060,6 @@ func (cfg *ConsensusConfig) Propose(round int32) time.Duration { // customTimeout. // If customTimeout is 0, the default TimeoutCommit is used. func (cfg *ConsensusConfig) ProposeWithCustomTimeout(round int32, customTimeout time.Duration) time.Duration { - fmt.Println("ProposeWithCustomTimeout called with", customTimeout.Seconds()) // this is to capture any unforeseen cases where the customTimeout is 0 var timeoutPropose time.Duration if customTimeout == 0 { @@ -1094,7 +1093,6 @@ func (cfg *ConsensusConfig) Commit(t time.Time) time.Time { // CommitWithCustomTimeout is identical to Commit. However, it calculates the time for commit using the supplied customTimeout. // If customTimeout is 0, the default TimeoutCommit is used. func (cfg *ConsensusConfig) CommitWithCustomTimeout(t time.Time, customTimeout time.Duration) time.Time { - fmt.Println("CommitWithCustomTimeout called with", customTimeout.Seconds()) // this is to capture any unforeseen cases where the customTimeout is 0 var timeoutCommit time.Duration if customTimeout == 0 { From 30a663f3ed8803c98cd49f788f5a6cd307cb4bbb Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 15:55:09 -0700 Subject: [PATCH 71/87] deletes a todo --- config/config.go | 1 - 1 file changed, 1 deletion(-) diff --git a/config/config.go b/config/config.go index 5964d61980..290965b569 100644 --- a/config/config.go +++ b/config/config.go @@ -1085,7 +1085,6 @@ func (cfg *ConsensusConfig) Precommit(round int32) time.Duration { // Commit returns the amount of time to wait for straggler votes after receiving +2/3 precommits // for a single block (i.e., a commit). -// TODO endure this is not used anymore func (cfg *ConsensusConfig) Commit(t time.Time) time.Time { return t.Add(cfg.TimeoutCommit) } From d7e21f41a7ef261eab6ed56c602bd5303660e6ff Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 17:48:21 -0700 Subject: [PATCH 72/87] replaces Propose calls with ProposeWithCustomTimeout --- consensus/state_test.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/consensus/state_test.go b/consensus/state_test.go index 9ae232d991..e39443509a 100644 --- a/consensus/state_test.go +++ b/consensus/state_test.go @@ -318,7 +318,7 @@ func TestStateOversizedBlock(t *testing.T) { lockedRound = -1 // if the block is oversized cs1 should log an error with the block part message as it exceeds // the consensus params. The block is not added to cs.ProposalBlock so the node timeouts. - ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.Propose(round).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) // and then should send nil prevote and precommit regardless of whether other validators prevote and // precommit on it } @@ -505,7 +505,7 @@ func TestStateLockNoPOL(t *testing.T) { incrementRound(vs2) // now we're on a new round and not the proposer, so wait for timeout - ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.Propose(round).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) rs := cs1.GetRoundState() @@ -1037,7 +1037,7 @@ func TestStateLockPOLSafety1(t *testing.T) { */ // timeout of propose - ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.Propose(round).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) // finish prevote ensurePrevote(voteCh, height, round) @@ -1207,7 +1207,7 @@ func TestProposeValidBlock(t *testing.T) { t.Log("### ONTO ROUND 2") // timeout of propose - ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.Propose(round).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) ensurePrevote(voteCh, height, round) validatePrevote(t, cs1, round, vss[0], propBlockHash) @@ -1334,7 +1334,7 @@ func TestSetValidBlockOnDelayedProposal(t *testing.T) { startTestRound(cs1, cs1.Height, round) ensureNewRound(newRoundCh, height, round) - ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.Propose(round).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) ensurePrevote(voteCh, height, round) validatePrevote(t, cs1, round, vss[0], nil) @@ -1415,7 +1415,7 @@ func TestWaitingTimeoutProposeOnNewRound(t *testing.T) { rs := cs1.GetRoundState() assert.True(t, rs.Step == cstypes.RoundStepPropose) // P0 does not prevote before timeoutPropose expires - ensureNewTimeout(timeoutWaitCh, height, round, cs1.config.Propose(round).Nanoseconds()) + ensureNewTimeout(timeoutWaitCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) ensurePrevote(voteCh, height, round) validatePrevote(t, cs1, round, vss[0], nil) @@ -1479,7 +1479,7 @@ func TestWaitTimeoutProposeOnNilPolkaForTheCurrentRound(t *testing.T) { incrementRound(vss[1:]...) signAddVotes(cs1, cmtproto.PrevoteType, nil, types.PartSetHeader{}, vs2, vs3, vs4) - ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.Propose(round).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) ensurePrevote(voteCh, height, round) validatePrevote(t, cs1, round, vss[0], nil) @@ -1627,7 +1627,7 @@ func TestStartNextHeightCorrectlyAfterTimeout(t *testing.T) { cs1.txNotifier.(*fakeTxNotifier).Notify() - ensureNewTimeout(timeoutProposeCh, height+1, round, cs1.config.Propose(round).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height+1, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) rs = cs1.GetRoundState() assert.False( t, From d87237443c29b49fd1dffa2c7c6b3967f03fe215 Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 17:55:30 -0700 Subject: [PATCH 73/87] uses last state timeout for the tests --- consensus/state_test.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/consensus/state_test.go b/consensus/state_test.go index e39443509a..4671018525 100644 --- a/consensus/state_test.go +++ b/consensus/state_test.go @@ -318,7 +318,7 @@ func TestStateOversizedBlock(t *testing.T) { lockedRound = -1 // if the block is oversized cs1 should log an error with the block part message as it exceeds // the consensus params. The block is not added to cs.ProposalBlock so the node timeouts. - ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, cs1.state.TimeoutPropose).Nanoseconds()) // and then should send nil prevote and precommit regardless of whether other validators prevote and // precommit on it } @@ -505,7 +505,7 @@ func TestStateLockNoPOL(t *testing.T) { incrementRound(vs2) // now we're on a new round and not the proposer, so wait for timeout - ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, cs1.state.TimeoutPropose).Nanoseconds()) rs := cs1.GetRoundState() @@ -1037,7 +1037,7 @@ func TestStateLockPOLSafety1(t *testing.T) { */ // timeout of propose - ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, cs1.state.TimeoutPropose).Nanoseconds()) // finish prevote ensurePrevote(voteCh, height, round) @@ -1207,7 +1207,7 @@ func TestProposeValidBlock(t *testing.T) { t.Log("### ONTO ROUND 2") // timeout of propose - ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, cs1.state.TimeoutPropose).Nanoseconds()) ensurePrevote(voteCh, height, round) validatePrevote(t, cs1, round, vss[0], propBlockHash) @@ -1334,7 +1334,7 @@ func TestSetValidBlockOnDelayedProposal(t *testing.T) { startTestRound(cs1, cs1.Height, round) ensureNewRound(newRoundCh, height, round) - ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, cs1.state.TimeoutPropose).Nanoseconds()) ensurePrevote(voteCh, height, round) validatePrevote(t, cs1, round, vss[0], nil) @@ -1415,7 +1415,7 @@ func TestWaitingTimeoutProposeOnNewRound(t *testing.T) { rs := cs1.GetRoundState() assert.True(t, rs.Step == cstypes.RoundStepPropose) // P0 does not prevote before timeoutPropose expires - ensureNewTimeout(timeoutWaitCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) + ensureNewTimeout(timeoutWaitCh, height, round, cs1.config.ProposeWithCustomTimeout(round, cs1.state.TimeoutPropose).Nanoseconds()) ensurePrevote(voteCh, height, round) validatePrevote(t, cs1, round, vss[0], nil) @@ -1479,7 +1479,7 @@ func TestWaitTimeoutProposeOnNilPolkaForTheCurrentRound(t *testing.T) { incrementRound(vss[1:]...) signAddVotes(cs1, cmtproto.PrevoteType, nil, types.PartSetHeader{}, vs2, vs3, vs4) - ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height, round, cs1.config.ProposeWithCustomTimeout(round, cs1.state.TimeoutPropose).Nanoseconds()) ensurePrevote(voteCh, height, round) validatePrevote(t, cs1, round, vss[0], nil) @@ -1627,7 +1627,7 @@ func TestStartNextHeightCorrectlyAfterTimeout(t *testing.T) { cs1.txNotifier.(*fakeTxNotifier).Notify() - ensureNewTimeout(timeoutProposeCh, height+1, round, cs1.config.ProposeWithCustomTimeout(round, time.Duration(0)).Nanoseconds()) + ensureNewTimeout(timeoutProposeCh, height+1, round, cs1.config.ProposeWithCustomTimeout(round, cs1.state.TimeoutPropose).Nanoseconds()) rs = cs1.GetRoundState() assert.False( t, From 1776442dd7dbc20947c78dfb5990d8223b606c5c Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 17:55:39 -0700 Subject: [PATCH 74/87] removes some unused comments --- consensus/state.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index 3088a5d00d..d9c22b9995 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -1134,12 +1134,6 @@ func (cs *State) enterPropose(height int64, round int32) { }() // If we don't get the proposal and all block parts quick enough, enterPrevote - //if cs.config != nil { - // cs.Logger.Info("scheduling timeoutPropose", "timeout", - // cs.config.TimeoutPropose.Seconds()) - //} - - //cs.Logger.Info("scheduling timeoutPropose", "timeout", cs.state.TimeoutPropose) cs.scheduleTimeout(cs.config.ProposeWithCustomTimeout(round, cs.state.TimeoutPropose), height, round, cstypes.RoundStepPropose) From 621169757291fab32378173c18eb89e6b7e5a112 Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 18:15:14 -0700 Subject: [PATCH 75/87] implements ConsensusTimeoutsInfo for the light client --- light/rpc/client.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/light/rpc/client.go b/light/rpc/client.go index 0781097081..f2afa3c6d9 100644 --- a/light/rpc/client.go +++ b/light/rpc/client.go @@ -52,11 +52,6 @@ type Client struct { keyPathFn KeyPathFunc } -func (c *Client) ConsensusTimeoutsInfo(ctx context.Context, heightPtr int64) (*abci.TimeoutsInfo, error) { - //TODO implement me - panic("implement me") -} - var _ rpcclient.Client = (*Client)(nil) // Option allow you to tweak Client. @@ -261,6 +256,10 @@ func (c *Client) ConsensusParams(ctx context.Context, height *int64) (*ctypes.Re return res, nil } +func (c *Client) ConsensusTimeoutsInfo(ctx context.Context, height int64) (*abci.TimeoutsInfo, error) { + return c.next.ConsensusTimeoutsInfo(ctx, height) +} + func (c *Client) Health(ctx context.Context) (*ctypes.ResultHealth, error) { return c.next.Health(ctx) } From 122058b4b436f4f9a7d6d13533df66bbdefe63a8 Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 18:15:33 -0700 Subject: [PATCH 76/87] fixes some formatting inconsistencies --- consensus/state.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index d9c22b9995..ef8bff42bd 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -85,7 +85,7 @@ type State struct { config *cfg.ConsensusConfig privValidator types.PrivValidator // for signing votes - // blockStore blocks and commits + // store blocks and commits blockStore sm.BlockStore // create and execute blocks @@ -712,8 +712,6 @@ func (cs *State) updateToState(state sm.State) { cs.CommitRound = -1 cs.LastValidators = state.LastValidators cs.TriggeredTimeoutPrecommit = false - //cs.config.TimeoutPropose = state.GetTimeoutPropose() - //cs.config.TimeoutCommit = state.GetTimeoutCommit() cs.state = state @@ -1134,9 +1132,7 @@ func (cs *State) enterPropose(height int64, round int32) { }() // If we don't get the proposal and all block parts quick enough, enterPrevote - cs.scheduleTimeout(cs.config.ProposeWithCustomTimeout(round, cs.state.TimeoutPropose), - height, - round, cstypes.RoundStepPropose) + cs.scheduleTimeout(cs.config.ProposeWithCustomTimeout(round, cs.state.TimeoutPropose), height, round, cstypes.RoundStepPropose) // Nothing more to do if we're not a validator if cs.privValidator == nil { From f74d19b18a40e96ed8cc0851a40d4ceac9a1f0f4 Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 18:27:11 -0700 Subject: [PATCH 77/87] cleans up the code --- node/node.go | 14 +++----------- rpc/core/consensus.go | 5 ++--- state/state.go | 7 ------- state/store.go | 1 - 4 files changed, 5 insertions(+), 22 deletions(-) diff --git a/node/node.go b/node/node.go index b0ced22513..bd84aa642c 100644 --- a/node/node.go +++ b/node/node.go @@ -870,17 +870,11 @@ func NewNodeWithContext(ctx context.Context, if err != nil { return nil, fmt.Errorf("error during info call: %w", err) } - softwareVersion = resp.Version // TODO is this the same as celestia-app version + softwareVersion = resp.Version } - //resp, err := proxyApp.Query().InfoSync(proxy.RequestInfo) - //if err != nil { - // return nil, fmt.Errorf("error during info call: %w", err) - //} - // Determine whether we should do fast sync. This must happen after the handshake, since the - // app may modify the validator set, - //specifying ourselves as the only validator. + // app may modify the validator set, specifying ourselves as the only validator. fastSync := config.FastSyncMode && !onlyValidatorIsUs(state, pubKey) // the state certainly has the latest timeouts according // the app version lastBlock in the blockstore @@ -939,9 +933,7 @@ func NewNodeWithContext(ctx context.Context, privValidator, csMetrics, stateSync || fastSync, eventBus, consensusLogger, tracer, ) - logger.Info("Consensus reactor created", "timeout_propose", - consensusState.GetState().TimeoutPropose, "timeout_commit", - consensusState.GetState().TimeoutCommit) + logger.Info("Consensus reactor created", "timeout_propose", consensusState.GetState().TimeoutPropose, "timeout_commit", consensusState.GetState().TimeoutCommit) // Set up state sync reactor, and schedule a sync if requested. // FIXME The way we do phased startups (e.g. replay -> fast sync -> consensus) is very messy, // we should clean this whole thing up. See: diff --git a/rpc/core/consensus.go b/rpc/core/consensus.go index ae60b0bb80..6a82447764 100644 --- a/rpc/core/consensus.go +++ b/rpc/core/consensus.go @@ -88,9 +88,8 @@ func ConsensusState(ctx *rpctypes.Context) (*ctypes.ResultConsensusState, error) return &ctypes.ResultConsensusState{RoundState: bz}, err } -func ConsensusTimeoutsInfo(ctx *rpctypes.Context, - heightPtr int64) (*abci.TimeoutsInfo, error) { - return GetEnvironment().StateStore.LoadConsensusTimeoutsInfo(heightPtr) +func ConsensusTimeoutsInfo(ctx *rpctypes.Context, height int64) (*abci.TimeoutsInfo, error) { + return GetEnvironment().StateStore.LoadConsensusTimeoutsInfo(height) } // ConsensusParams gets the consensus parameters at the given block height. diff --git a/state/state.go b/state/state.go index 6197b9b656..a138fdfdfd 100644 --- a/state/state.go +++ b/state/state.go @@ -83,13 +83,6 @@ type State struct { TimeoutCommit time.Duration } -func (state *State) GetTimeoutPropose() time.Duration { - return state.TimeoutPropose -} -func (state *State) GetTimeoutCommit() time.Duration { - return state.TimeoutCommit -} - // Copy makes a copy of the State for mutating. func (state State) Copy() State { return State{ diff --git a/state/store.go b/state/store.go index 3f4e9ebc4a..0086e20b95 100644 --- a/state/store.go +++ b/state/store.go @@ -204,7 +204,6 @@ func (store dbStore) save(state State, key []byte) error { } // save next timeouts - // TODO write test for this if err := store.saveConsensusTimeoutsInfo(nextHeight, &abci.TimeoutsInfo{TimeoutPropose: state.TimeoutPropose, TimeoutCommit: state.TimeoutCommit}); err != nil { return err } From 0fd7f5ef2a5f382459cc06dc9c5434373f813f9d Mon Sep 17 00:00:00 2001 From: sanaz Date: Thu, 10 Oct 2024 21:37:56 -0700 Subject: [PATCH 78/87] clarifies a comment --- statesync/stateprovider.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/statesync/stateprovider.go b/statesync/stateprovider.go index 2dd1ce106d..04d71fe03d 100644 --- a/statesync/stateprovider.go +++ b/statesync/stateprovider.go @@ -194,7 +194,7 @@ func (s *lightClientStateProvider) State(ctx context.Context, height uint64) (sm state.ConsensusParams = result.ConsensusParams state.LastHeightConsensusParamsChanged = currentLightBlock.Height - // TODO assign timeouts + // TODO may need to assign timeouts? // state.TimeoutPropose // state.TimeoutCommit From 10be8b14bcb846d164abdd2b68d3102b7e1aa110 Mon Sep 17 00:00:00 2001 From: sanaz Date: Fri, 11 Oct 2024 13:41:54 -0700 Subject: [PATCH 79/87] sets the inital value of timeouts to the custom timeout --- config/config.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/config.go b/config/config.go index 290965b569..9229264365 100644 --- a/config/config.go +++ b/config/config.go @@ -1061,8 +1061,8 @@ func (cfg *ConsensusConfig) Propose(round int32) time.Duration { // If customTimeout is 0, the default TimeoutCommit is used. func (cfg *ConsensusConfig) ProposeWithCustomTimeout(round int32, customTimeout time.Duration) time.Duration { // this is to capture any unforeseen cases where the customTimeout is 0 - var timeoutPropose time.Duration - if customTimeout == 0 { + var timeoutPropose = customTimeout + if timeoutPropose == 0 { // falling back to default timeout timeoutPropose = cfg.TimeoutPropose } @@ -1093,8 +1093,8 @@ func (cfg *ConsensusConfig) Commit(t time.Time) time.Time { // If customTimeout is 0, the default TimeoutCommit is used. func (cfg *ConsensusConfig) CommitWithCustomTimeout(t time.Time, customTimeout time.Duration) time.Time { // this is to capture any unforeseen cases where the customTimeout is 0 - var timeoutCommit time.Duration - if customTimeout == 0 { + var timeoutCommit = customTimeout + if timeoutCommit == 0 { // falling back to default timeout timeoutCommit = cfg.TimeoutCommit } From 363058a623c98f80c7c9d4b5241862200d5fb4b1 Mon Sep 17 00:00:00 2001 From: sanaz Date: Fri, 11 Oct 2024 13:47:53 -0700 Subject: [PATCH 80/87] adds unttest for ProposeWithCustomTimeout and CommitWithCustomTimeout --- config/config_test.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/config/config_test.go b/config/config_test.go index 43f0a46c49..1508172e5f 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -190,3 +190,31 @@ func TestInstrumentationConfigValidateBasic(t *testing.T) { cfg.MaxOpenConnections = -1 assert.Error(t, cfg.ValidateBasic()) } + +func TestProposeWithCustomTimeout(t *testing.T) { + cfg := DefaultConsensusConfig() + + // customTimeout is 0, should fallback to default timeout + round := int32(1) + expectedTimeout := time.Duration(cfg.TimeoutPropose.Nanoseconds()+cfg.TimeoutProposeDelta.Nanoseconds()*int64(round)) * time.Nanosecond + assert.Equal(t, expectedTimeout, cfg.ProposeWithCustomTimeout(round, time.Duration(0))) + + // customTimeout is not 0 + customTimeout := 2 * time.Second + expectedTimeout = time.Duration(customTimeout.Nanoseconds()+cfg.TimeoutProposeDelta.Nanoseconds()*int64(round)) * time.Nanosecond + assert.Equal(t, expectedTimeout, cfg.ProposeWithCustomTimeout(round, customTimeout)) +} + +func TestCommitWithCustomTimeout(t *testing.T) { + cfg := DefaultConsensusConfig() + + // customTimeout is 0, should fallback to default timeout + inputTime := time.Now() + expectedTime := inputTime.Add(cfg.TimeoutCommit) + assert.Equal(t, expectedTime, cfg.CommitWithCustomTimeout(inputTime, time.Duration(0))) + + // customTimeout is not 0 + customTimeout := 2 * time.Second + expectedTime = inputTime.Add(customTimeout) + assert.Equal(t, expectedTime, cfg.CommitWithCustomTimeout(inputTime, customTimeout)) +} From 85e92f30bb1f911e88afc50f0f84a6699d2b2bc8 Mon Sep 17 00:00:00 2001 From: sanaz Date: Fri, 11 Oct 2024 14:20:33 -0700 Subject: [PATCH 81/87] clarifies what default means --- config/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.go b/config/config.go index 9229264365..872b2df89a 100644 --- a/config/config.go +++ b/config/config.go @@ -1058,7 +1058,7 @@ func (cfg *ConsensusConfig) Propose(round int32) time.Duration { // ProposeWithCustomTimeout is identical to Propose. However, // it calculates the amount of time to wait for a proposal using the supplied // customTimeout. -// If customTimeout is 0, the default TimeoutCommit is used. +// If customTimeout is 0, the TimeoutPropose from cfg is used. func (cfg *ConsensusConfig) ProposeWithCustomTimeout(round int32, customTimeout time.Duration) time.Duration { // this is to capture any unforeseen cases where the customTimeout is 0 var timeoutPropose = customTimeout @@ -1090,7 +1090,7 @@ func (cfg *ConsensusConfig) Commit(t time.Time) time.Time { } // CommitWithCustomTimeout is identical to Commit. However, it calculates the time for commit using the supplied customTimeout. -// If customTimeout is 0, the default TimeoutCommit is used. +// If customTimeout is 0, the TimeoutCommit from cfg is used. func (cfg *ConsensusConfig) CommitWithCustomTimeout(t time.Time, customTimeout time.Duration) time.Time { // this is to capture any unforeseen cases where the customTimeout is 0 var timeoutCommit = customTimeout From 5d399b5f442c5669f53c3f9c4f5914c0cab9f179 Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Oct 2024 11:53:08 -0500 Subject: [PATCH 82/87] chore: comment feedback @rootulp --- config/config_test.go | 11 +++++++++++ node/node.go | 4 +--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/config/config_test.go b/config/config_test.go index 43f0a46c49..1930387f5c 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -1,6 +1,7 @@ package config import ( + "fmt" "reflect" "testing" "time" @@ -190,3 +191,13 @@ func TestInstrumentationConfigValidateBasic(t *testing.T) { cfg.MaxOpenConnections = -1 assert.Error(t, cfg.ValidateBasic()) } + +func TestDebug(t *testing.T) { + cfg := DefaultConfig() + + timeout := cfg.Consensus.ProposeWithCustomTimeout(1, time.Second*10) + + pt := cfg.Consensus.Propose(1) + + fmt.Println(timeout, pt) +} diff --git a/node/node.go b/node/node.go index bd84aa642c..0d3336fcbc 100644 --- a/node/node.go +++ b/node/node.go @@ -875,9 +875,7 @@ func NewNodeWithContext(ctx context.Context, // Determine whether we should do fast sync. This must happen after the handshake, since the // app may modify the validator set, specifying ourselves as the only validator. - fastSync := config.FastSyncMode && !onlyValidatorIsUs(state, - pubKey) // the state certainly has the latest timeouts according - // the app version lastBlock in the blockstore + fastSync := config.FastSyncMode && !onlyValidatorIsUs(state, pubKey) logNodeStartupInfo(state, pubKey, logger, consensusLogger) From 081ecce8d37daf491721798a672734b8692d081d Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Oct 2024 12:23:42 -0500 Subject: [PATCH 83/87] chore: review feedback --- node/node.go | 1 - state/execution.go | 2 -- state/state.go | 2 +- state/state_test.go | 6 ++---- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/node/node.go b/node/node.go index 0d3336fcbc..07fee31740 100644 --- a/node/node.go +++ b/node/node.go @@ -893,7 +893,6 @@ func NewNodeWithContext(ctx context.Context, } // Make MempoolReactor - // TODO limit the proxyApp to Mempool only mempool, mempoolReactor := createMempoolAndMempoolReactor(config, proxyApp, state, memplMetrics, logger, tracer) // Make Evidence Reactor diff --git a/state/execution.go b/state/execution.go index 3407611a56..21aff937ae 100644 --- a/state/execution.go +++ b/state/execution.go @@ -277,8 +277,6 @@ func (blockExec *BlockExecutor) ApplyBlock( return state, 0, fmt.Errorf("commit failed for application: %v", err) } - blockExec.logger.Info("state updated in ApplyBlock", "height", block.Height, "app version in the header", block.Header.Version.App, "updated state timeout_commit", state.TimeoutCommit, "updated state timeout_propose", state.TimeoutPropose) - // Lock mempool, commit app state, update mempoool. appHash, retainHeight, err := blockExec.Commit(state, block, abciResponses.DeliverTxs) if err != nil { diff --git a/state/state.go b/state/state.go index a138fdfdfd..3354f3eb4e 100644 --- a/state/state.go +++ b/state/state.go @@ -78,7 +78,7 @@ type State struct { // the latest AppHash we've received from calling abci.Commit() AppHash []byte - // timeouts received from app, after abci EndBlock call, to be used in the next height + // timeouts received from app, after ABCI EndBlock call, to be used in the next height TimeoutPropose time.Duration TimeoutCommit time.Duration } diff --git a/state/state_test.go b/state/state_test.go index cc4cf16369..f10b5c0959 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -166,9 +166,7 @@ func TestStateSaveLoad(t *testing.T) { loadedState, state)) // the following assertions are just for additional assurance - assert.Equal(state.TimeoutCommit, loadedState.TimeoutCommit, - fmt.Sprintf("expected TimeoutCommit to be equal."+ - "\ngot: %v\nexpected: %v\n", loadedState.TimeoutCommit, state.TimeoutCommit)) + assert.Equal(state.TimeoutCommit, loadedState.TimeoutCommit) assert.Equal(state.TimeoutPropose, loadedState.TimeoutPropose, fmt.Sprintf("expected TimeoutPropose to be equal."+ "\ngot: %v\nexpected: %v\n", loadedState.TimeoutPropose, state.TimeoutPropose)) } @@ -203,7 +201,7 @@ func TestLoadConsensusTimeoutsInfo(t *testing.T) { err = stateStore.Save(state2) require.NoError(t, err) - // now try to retrieve saved sates from the store, focusing on timeouts + // now try to retrieve saved state from the store, focusing on timeouts // State saved with LastBlockHeight is saved for the next height, // hence using state1.LastBlockHeight + 1 to retrieve it From f12da04243134d7c7c320679fb27ceb867e3bddd Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Oct 2024 12:24:09 -0500 Subject: [PATCH 84/87] chore: remove rpc and timeouts from the state store --- light/rpc/client.go | 4 ---- node/node.go | 6 ----- rpc/client/http/http.go | 10 -------- rpc/client/interface.go | 2 -- rpc/client/local/local.go | 5 ---- rpc/client/mock/client.go | 5 ---- rpc/core/consensus.go | 5 ---- rpc/core/routes.go | 3 --- state/mocks/store.go | 7 ------ state/state_test.go | 47 -------------------------------------- state/store.go | 34 --------------------------- statesync/stateprovider.go | 4 ---- 12 files changed, 132 deletions(-) diff --git a/light/rpc/client.go b/light/rpc/client.go index f2afa3c6d9..7f7fc64b14 100644 --- a/light/rpc/client.go +++ b/light/rpc/client.go @@ -256,10 +256,6 @@ func (c *Client) ConsensusParams(ctx context.Context, height *int64) (*ctypes.Re return res, nil } -func (c *Client) ConsensusTimeoutsInfo(ctx context.Context, height int64) (*abci.TimeoutsInfo, error) { - return c.next.ConsensusTimeoutsInfo(ctx, height) -} - func (c *Client) Health(ctx context.Context) (*ctypes.ResultHealth, error) { return c.next.Health(ctx) } diff --git a/node/node.go b/node/node.go index 07fee31740..5402e34c1e 100644 --- a/node/node.go +++ b/node/node.go @@ -1388,12 +1388,6 @@ func (n *Node) ConsensusState() *cs.State { return n.consensusState } -// ConsensusStateTimeoutsByHeight returns the Node's timeouts info in -// ConsensusState at a given height. -func (n *Node) ConsensusStateTimeoutsByHeight(height int64) (*abci.TimeoutsInfo, error) { - return n.stateStore.LoadConsensusTimeoutsInfo(height) -} - // ConsensusReactor returns the Node's ConsensusReactor. func (n *Node) ConsensusReactor() *cs.Reactor { return n.consensusReactor diff --git a/rpc/client/http/http.go b/rpc/client/http/http.go index 70a8f17b87..7acb6a43c2 100644 --- a/rpc/client/http/http.go +++ b/rpc/client/http/http.go @@ -7,7 +7,6 @@ import ( "strings" "time" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/bytes" cmtjson "github.com/tendermint/tendermint/libs/json" "github.com/tendermint/tendermint/libs/log" @@ -389,15 +388,6 @@ func (c *baseRPCClient) BlockchainInfo( return result, nil } -func (c *baseRPCClient) ConsensusTimeoutsInfo(ctx context.Context, height int64) (*abci.TimeoutsInfo, error) { - result := new(abci.TimeoutsInfo) - _, err := c.caller.Call(ctx, "timeout", map[string]interface{}{"height": height}, result) - if err != nil { - return nil, err - } - return result, nil -} - func (c *baseRPCClient) Genesis(ctx context.Context) (*ctypes.ResultGenesis, error) { result := new(ctypes.ResultGenesis) _, err := c.caller.Call(ctx, "genesis", map[string]interface{}{}, result) diff --git a/rpc/client/interface.go b/rpc/client/interface.go index 4d6d3cb353..5fe6f75279 100644 --- a/rpc/client/interface.go +++ b/rpc/client/interface.go @@ -23,7 +23,6 @@ implementation. import ( "context" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/bytes" "github.com/tendermint/tendermint/libs/service" ctypes "github.com/tendermint/tendermint/rpc/core/types" @@ -117,7 +116,6 @@ type HistoryClient interface { Genesis(context.Context) (*ctypes.ResultGenesis, error) GenesisChunked(context.Context, uint) (*ctypes.ResultGenesisChunk, error) BlockchainInfo(ctx context.Context, minHeight, maxHeight int64) (*ctypes.ResultBlockchainInfo, error) - ConsensusTimeoutsInfo(ctx context.Context, height int64) (*abci.TimeoutsInfo, error) } // StatusClient provides access to general chain info. diff --git a/rpc/client/local/local.go b/rpc/client/local/local.go index a55d69e161..783f209d45 100644 --- a/rpc/client/local/local.go +++ b/rpc/client/local/local.go @@ -5,7 +5,6 @@ import ( "fmt" "time" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/bytes" "github.com/tendermint/tendermint/libs/log" cmtpubsub "github.com/tendermint/tendermint/libs/pubsub" @@ -128,10 +127,6 @@ func (c *Local) ConsensusParams(ctx context.Context, height *int64) (*ctypes.Res return core.ConsensusParams(c.ctx, height) } -func (c *Local) ConsensusTimeoutsInfo(_ context.Context, height int64) (*abci.TimeoutsInfo, error) { - return core.ConsensusTimeoutsInfo(c.ctx, height) -} - func (c *Local) Health(ctx context.Context) (*ctypes.ResultHealth, error) { return core.Health(c.ctx) } diff --git a/rpc/client/mock/client.go b/rpc/client/mock/client.go index 19b477025e..796d3ed3c7 100644 --- a/rpc/client/mock/client.go +++ b/rpc/client/mock/client.go @@ -18,7 +18,6 @@ import ( "context" "reflect" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/bytes" "github.com/tendermint/tendermint/libs/service" "github.com/tendermint/tendermint/rpc/client" @@ -132,10 +131,6 @@ func (c Client) ConsensusParams(ctx context.Context, height *int64) (*ctypes.Res return core.ConsensusParams(&rpctypes.Context{}, height) } -func (c Client) ConsensusTimeoutsInfo(_ context.Context, height int64) (*abci.TimeoutsInfo, error) { - return core.ConsensusTimeoutsInfo(&rpctypes.Context{}, height) -} - func (c Client) Health(ctx context.Context) (*ctypes.ResultHealth, error) { return core.Health(&rpctypes.Context{}) } diff --git a/rpc/core/consensus.go b/rpc/core/consensus.go index 6a82447764..1f303d3393 100644 --- a/rpc/core/consensus.go +++ b/rpc/core/consensus.go @@ -1,7 +1,6 @@ package core import ( - abci "github.com/tendermint/tendermint/abci/types" cm "github.com/tendermint/tendermint/consensus" cmtmath "github.com/tendermint/tendermint/libs/math" ctypes "github.com/tendermint/tendermint/rpc/core/types" @@ -88,10 +87,6 @@ func ConsensusState(ctx *rpctypes.Context) (*ctypes.ResultConsensusState, error) return &ctypes.ResultConsensusState{RoundState: bz}, err } -func ConsensusTimeoutsInfo(ctx *rpctypes.Context, height int64) (*abci.TimeoutsInfo, error) { - return GetEnvironment().StateStore.LoadConsensusTimeoutsInfo(height) -} - // ConsensusParams gets the consensus parameters at the given block height. // If no height is provided, it will fetch the latest consensus params. // More: https://docs.cometbft.com/v0.34/rpc/#/Info/consensus_params diff --git a/rpc/core/routes.go b/rpc/core/routes.go index 9d1845eb56..b2c8d69ee1 100644 --- a/rpc/core/routes.go +++ b/rpc/core/routes.go @@ -54,9 +54,6 @@ var Routes = map[string]*rpc.RPCFunc{ // evidence API "broadcast_evidence": rpc.NewRPCFunc(BroadcastEvidence, "evidence"), - - // get Timeouts by height - "timeout": rpc.NewRPCFunc(ConsensusTimeoutsInfo, "height"), } // AddUnsafeRoutes adds unsafe routes. diff --git a/state/mocks/store.go b/state/mocks/store.go index 20b92e8e06..b232f0df93 100644 --- a/state/mocks/store.go +++ b/state/mocks/store.go @@ -4,7 +4,6 @@ package mocks import ( mock "github.com/stretchr/testify/mock" - abci "github.com/tendermint/tendermint/abci/types" state "github.com/tendermint/tendermint/state" tendermintstate "github.com/tendermint/tendermint/proto/tendermint/state" @@ -19,12 +18,6 @@ type Store struct { mock.Mock } -func (_m *Store) LoadConsensusTimeoutsInfo(i int64) (*abci.TimeoutsInfo, error) { - //TODO implement me, retrieve the timeouts info from the store - res := abci.TimeoutsInfo{} - return &res, nil -} - // Bootstrap provides a mock function with given fields: _a0 func (_m *Store) Bootstrap(_a0 state.State) error { ret := _m.Called(_a0) diff --git a/state/state_test.go b/state/state_test.go index f10b5c0959..67c22cf29c 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -171,53 +171,6 @@ func TestStateSaveLoad(t *testing.T) { "\ngot: %v\nexpected: %v\n", loadedState.TimeoutPropose, state.TimeoutPropose)) } -// TestLoadConsensusTimeoutsInfo tests whether timeouts are properly saved -// while saving State to a db and can be retrieved using LoadConsensusTimeoutsInfo. -func TestLoadConsensusTimeoutsInfo(t *testing.T) { - tearDown, stateDB, state := setupTestCase(t) - defer tearDown(t) - stateStore := sm.NewStore(stateDB, sm.StoreOptions{ - DiscardABCIResponses: false, - }) - assert := assert.New(t) - - // add two states to the store - state1 := state.Copy() - state1.TimeoutCommit = 1 * time.Second - state1.TimeoutPropose = 2 * time.Second - // advance height to ensure timeouts are saved for a new height - state1.LastBlockHeight++ - state1.LastValidators = state.Validators - err := stateStore.Save(state1) - require.NoError(t, err) - - state2 := state.Copy() - // advance height by 2 to ensure timeouts are - // saved for a new height - state2.LastBlockHeight += 2 - state2.TimeoutCommit = 3 * time.Second - state2.TimeoutPropose = 4 * time.Second - state2.LastValidators = state.Validators - err = stateStore.Save(state2) - require.NoError(t, err) - - // now try to retrieve saved state from the store, focusing on timeouts - - // State saved with LastBlockHeight is saved for the next height, - // hence using state1.LastBlockHeight + 1 to retrieve it - loadedTimeoutsInfo1, err := stateStore.LoadConsensusTimeoutsInfo(state1.LastBlockHeight + 1) - require.NoError(t, err) - assert.Equal(state1.TimeoutCommit, loadedTimeoutsInfo1.TimeoutCommit, "expected TimeoutCommit to be equal") - assert.Equal(state1.TimeoutPropose, loadedTimeoutsInfo1.TimeoutPropose, "expected TimeoutPropose to be equal") - - // State saved with LastBlockHeight is saved for the next height, - // hence using state2.LastBlockHeight + 1 to retrieve it - loadedTimeoutsInfo2, err := stateStore.LoadConsensusTimeoutsInfo(state2.LastBlockHeight + 1) - require.NoError(t, err) - assert.Equal(state2.TimeoutCommit, loadedTimeoutsInfo2.TimeoutCommit, "expected TimeoutCommit to be equal") - assert.Equal(state2.TimeoutPropose, loadedTimeoutsInfo2.TimeoutPropose, "expected TimeoutPropose to be equal") -} - // TestABCIResponsesSaveLoad tests saving and loading ABCIResponses. func TestABCIResponsesSaveLoad1(t *testing.T) { tearDown, stateDB, state := setupTestCase(t) diff --git a/state/store.go b/state/store.go index 0086e20b95..db0d4a159d 100644 --- a/state/store.go +++ b/state/store.go @@ -70,8 +70,6 @@ type Store interface { LoadLastABCIResponse(int64) (*cmtstate.ABCIResponses, error) // LoadConsensusParams loads the consensus params for a given height LoadConsensusParams(int64) (cmtproto.ConsensusParams, error) - // LoadConsensusTimeoutsInfo loads timeouts info for a given height - LoadConsensusTimeoutsInfo(int64) (*abci.TimeoutsInfo, error) // Save overwrites the previous state with the updated one Save(State) error // SaveABCIResponses saves ABCIResponses for a given height @@ -203,11 +201,6 @@ func (store dbStore) save(state State, key []byte) error { return err } - // save next timeouts - if err := store.saveConsensusTimeoutsInfo(nextHeight, &abci.TimeoutsInfo{TimeoutPropose: state.TimeoutPropose, TimeoutCommit: state.TimeoutCommit}); err != nil { - return err - } - err := store.db.SetSync(key, state.Bytes()) if err != nil { return err @@ -625,22 +618,6 @@ func (store dbStore) LoadConsensusParams(height int64) (cmtproto.ConsensusParams return paramsInfo.ConsensusParams, nil } -func (store dbStore) LoadConsensusTimeoutsInfo(height int64) (*abci.TimeoutsInfo, error) { - buf, err := store.db.Get(calcTimeoutsKey(height)) - if err != nil { - return nil, err - } - if len(buf) == 0 { - return nil, errors.New("value retrieved from db is empty") - } - - timeoutsInfo := new(abci.TimeoutsInfo) - if err = timeoutsInfo.Unmarshal(buf); err != nil { - // DATA HAS BEEN CORRUPTED OR THE SPEC HAS CHANGED - cmtos.Exit(fmt.Sprintf(`LoadConsensusTimeouts: Data has been corrupted or its spec has changed:%v\n`, err)) - } - return timeoutsInfo, nil -} func (store dbStore) loadConsensusParamsInfo(height int64) (*cmtstate.ConsensusParamsInfo, error) { buf, err := store.db.Get(calcConsensusParamsKey(height)) if err != nil { @@ -661,17 +638,6 @@ func (store dbStore) loadConsensusParamsInfo(height int64) (*cmtstate.ConsensusP return paramsInfo, nil } -// saveConsensusTimeoutsInfo saves the timeouts info for the next block to disk. -// It should be called from s.Save(), right before the state itself is persisted. -func (store dbStore) saveConsensusTimeoutsInfo(height int64, timeoutsInfo *abci.TimeoutsInfo) error { - bz, err := timeoutsInfo.Marshal() - if err != nil { - return err - } - - return store.db.Set(calcTimeoutsKey(height), bz) -} - // saveConsensusParamsInfo persists the consensus params for the next block to disk. // It should be called from s.Save(), right before the state itself is persisted. // If the consensus params did not change after processing the latest block, diff --git a/statesync/stateprovider.go b/statesync/stateprovider.go index 04d71fe03d..3b7a9b0227 100644 --- a/statesync/stateprovider.go +++ b/statesync/stateprovider.go @@ -194,10 +194,6 @@ func (s *lightClientStateProvider) State(ctx context.Context, height uint64) (sm state.ConsensusParams = result.ConsensusParams state.LastHeightConsensusParamsChanged = currentLightBlock.Height - // TODO may need to assign timeouts? - // state.TimeoutPropose - // state.TimeoutCommit - return state, nil } From 12639d4aae7394824ea66df8190a16295e75018a Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Oct 2024 12:24:26 -0500 Subject: [PATCH 85/87] fix: use the timeouts passed from info --- statesync/syncer.go | 18 +++++++++++------- statesync/syncer_test.go | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/statesync/syncer.go b/statesync/syncer.go index 2f1ee85bda..89f66a9398 100644 --- a/statesync/syncer.go +++ b/statesync/syncer.go @@ -307,10 +307,14 @@ func (s *syncer) Sync(snapshot *snapshot, chunks *chunkQueue) (sm.State, *types. } // Verify app and app version - if err := s.verifyApp(snapshot, state.Version.Consensus.App); err != nil { + timeouts, err := s.verifyApp(snapshot, state.Version.Consensus.App) + if err != nil { return sm.State{}, nil, err } + state.TimeoutCommit = timeouts.TimeoutCommit + state.TimeoutPropose = timeouts.TimeoutPropose + // Done! 🎉 s.logger.Info("Snapshot restored", "height", snapshot.Height, "format", snapshot.Format, "hash", snapshot.Hash) @@ -484,10 +488,10 @@ func (s *syncer) requestChunk(snapshot *snapshot, chunk uint32) { } // verifyApp verifies the sync, checking the app hash, last block height and app version -func (s *syncer) verifyApp(snapshot *snapshot, appVersion uint64) error { +func (s *syncer) verifyApp(snapshot *snapshot, appVersion uint64) (abci.TimeoutsInfo, error) { resp, err := s.connQuery.InfoSync(proxy.RequestInfo) if err != nil { - return fmt.Errorf("failed to query ABCI app for appHash: %w", err) + return abci.TimeoutsInfo{}, fmt.Errorf("failed to query ABCI app for appHash: %w", err) } // sanity check that the app version in the block matches the application's own record @@ -495,14 +499,14 @@ func (s *syncer) verifyApp(snapshot *snapshot, appVersion uint64) error { if resp.AppVersion != appVersion { // An error here most likely means that the app hasn't inplemented state sync // or the Info call correctly - return fmt.Errorf("app version mismatch. Expected: %d, got: %d", + return abci.TimeoutsInfo{}, fmt.Errorf("app version mismatch. Expected: %d, got: %d", appVersion, resp.AppVersion) } if !bytes.Equal(snapshot.trustedAppHash, resp.LastBlockAppHash) { s.logger.Error("appHash verification failed", "expected", snapshot.trustedAppHash, "actual", resp.LastBlockAppHash) - return errVerifyFailed + return abci.TimeoutsInfo{}, errVerifyFailed } //nolint:gosec if uint64(resp.LastBlockHeight) != snapshot.Height { @@ -511,9 +515,9 @@ func (s *syncer) verifyApp(snapshot *snapshot, appVersion uint64) error { "expected", snapshot.Height, "actual", resp.LastBlockHeight, ) - return errVerifyFailed + return abci.TimeoutsInfo{}, errVerifyFailed } s.logger.Info("Verified ABCI app", "height", snapshot.Height, "appHash", snapshot.trustedAppHash) - return nil + return resp.Timeouts, nil } diff --git a/statesync/syncer_test.go b/statesync/syncer_test.go index 9aa5457650..9da872dce3 100644 --- a/statesync/syncer_test.go +++ b/statesync/syncer_test.go @@ -681,7 +681,7 @@ func TestSyncer_verifyApp(t *testing.T) { syncer := newSyncer(*cfg, log.NewNopLogger(), connSnapshot, connQuery, stateProvider, "") connQuery.On("InfoSync", proxy.RequestInfo).Return(tc.response, tc.err) - err := syncer.verifyApp(s, appVersion) + _, err := syncer.verifyApp(s, appVersion) unwrapped := errors.Unwrap(err) if unwrapped != nil { err = unwrapped From 1ef98d06153c3f2fc45ca5196ca8779dba0c7a7b Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Oct 2024 12:34:44 -0500 Subject: [PATCH 86/87] chore: linter --- state/store.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/state/store.go b/state/store.go index db0d4a159d..7b5ec202a0 100644 --- a/state/store.go +++ b/state/store.go @@ -37,10 +37,6 @@ func calcABCIResponsesKey(height int64) []byte { return []byte(fmt.Sprintf("abciResponsesKey:%v", height)) } -func calcTimeoutsKey(height int64) []byte { - return []byte(fmt.Sprintf("consensusTimeoutsKey:%v", height)) -} - //---------------------- var ( From 23e3fb130177647ee2a4de04f7d32b876dc37558 Mon Sep 17 00:00:00 2001 From: evan-forbes Date: Mon, 14 Oct 2024 12:47:25 -0500 Subject: [PATCH 87/87] chore: remaining two comments --- consensus/state.go | 9 +-------- node/node.go | 1 - 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index ef8bff42bd..18cf1b4be7 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -676,23 +676,16 @@ func (cs *State) updateToState(state sm.State) { // cs.StartTime = state.LastBlockTime.Add(timeoutCommit) if state.LastBlockHeight == 0 { - // state represents the genesis state, hence the StartTime should be set based on the state's TimeoutCommit - // we don't use cs.state.TimeoutCommit because that is zero + // Don't use cs.state.TimeoutCommit because that is zero cs.StartTime = cs.config.CommitWithCustomTimeout(cmttime.Now(), state.TimeoutCommit) } else { - // if state does not represent the genesis state, - // we use the cs.state.TimeoutCommit cs.StartTime = cs.config.CommitWithCustomTimeout(cmttime.Now(), cs.state.TimeoutCommit) } } else { if state.LastBlockHeight == 0 { - // state represents the genesis state, hence the StartTime should be set based on the state's TimeoutCommit - // we don't use cs.state.TimeoutCommit because that is zero cs.StartTime = cs.config.CommitWithCustomTimeout(cs.CommitTime, state.TimeoutCommit) } else { - // if state does not represent the genesis state, - // we use the cs.state.TimeoutCommit cs.StartTime = cs.config.CommitWithCustomTimeout(cs.CommitTime, cs.state.TimeoutCommit) } diff --git a/node/node.go b/node/node.go index 5402e34c1e..810d3264d4 100644 --- a/node/node.go +++ b/node/node.go @@ -949,7 +949,6 @@ func NewNodeWithContext(ctx context.Context, } // Setup Transport. - // TODO limit the proxyApp to Query only transport, peerFilters := createTransport(config, nodeInfo, nodeKey, proxyApp, tracer) // Setup Switch.