From 4ee7b8aa7b53b36f7a188024b7ee2beff4e46a9f Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Wed, 3 Jul 2019 15:37:48 -0400 Subject: [PATCH] storage: Make Put handle WriteTooOldError more like CPut CPut (used by INSERT) and Put (used by UPDATE) previously handled WriteTooOldErrors differently: CPut would return them immediately while Put would defer them to the end of the transaction. This commit makes Put work (mostly) like CPut. The major benefit of this change is that if the first statement of a transaction is an UPDATE, it will no longer be possible for it to return transaction-retry errors due to SQL-level automatic retries. (This was already true for INSERT. Note that an ON CONFLICT DO UPDATE clause acts like a standalone UPDATE in this respect) A potential downside is that UPDATE-heavy workloads experiencing high contention on many keys may have worse performance (up to O(n^2)). Updates #38591 Release note (sql change): The first statement of a transaction will no longer return a transaction-retry error if it is an UPDATE or DELETE (this was already true for INSERT). --- c-deps/libroach/protos/roachpb/api.pb.cc | 55 +- c-deps/libroach/protos/roachpb/api.pb.h | 31 +- pkg/kv/dist_sender_server_test.go | 61 + pkg/kv/txn_test.go | 15 +- pkg/roachpb/api.go | 7 + pkg/roachpb/api.pb.go | 1134 +++++++++-------- pkg/roachpb/api.proto | 7 + pkg/sql/err_count_test.go | 6 + .../intent_resolver_integration_test.go | 8 +- pkg/storage/replica_evaluate.go | 105 +- pkg/storage/replica_test.go | 16 +- pkg/storage/store_test.go | 4 +- 12 files changed, 835 insertions(+), 614 deletions(-) diff --git a/c-deps/libroach/protos/roachpb/api.pb.cc b/c-deps/libroach/protos/roachpb/api.pb.cc index c948e393c290..c95fbfc5df34 100644 --- a/c-deps/libroach/protos/roachpb/api.pb.cc +++ b/c-deps/libroach/protos/roachpb/api.pb.cc @@ -33588,6 +33588,7 @@ const int Header::kReturnRangeInfoFieldNumber; const int Header::kGatewayNodeIdFieldNumber; const int Header::kScanOptionsFieldNumber; const int Header::kAsyncConsensusFieldNumber; +const int Header::kDeferWriteTooOldErrorFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 Header::Header() @@ -33622,15 +33623,15 @@ Header::Header(const Header& from) scan_options_ = NULL; } ::memcpy(&range_id_, &from.range_id_, - static_cast(reinterpret_cast(&gateway_node_id_) - - reinterpret_cast(&range_id_)) + sizeof(gateway_node_id_)); + static_cast(reinterpret_cast(&defer_write_too_old_error_) - + reinterpret_cast(&range_id_)) + sizeof(defer_write_too_old_error_)); // @@protoc_insertion_point(copy_constructor:cockroach.roachpb.Header) } void Header::SharedCtor() { ::memset(×tamp_, 0, static_cast( - reinterpret_cast(&gateway_node_id_) - - reinterpret_cast(×tamp_)) + sizeof(gateway_node_id_)); + reinterpret_cast(&defer_write_too_old_error_) - + reinterpret_cast(×tamp_)) + sizeof(defer_write_too_old_error_)); } Header::~Header() { @@ -33677,8 +33678,8 @@ void Header::Clear() { } scan_options_ = NULL; ::memset(&range_id_, 0, static_cast( - reinterpret_cast(&gateway_node_id_) - - reinterpret_cast(&range_id_)) + sizeof(gateway_node_id_)); + reinterpret_cast(&defer_write_too_old_error_) - + reinterpret_cast(&range_id_)) + sizeof(defer_write_too_old_error_)); _internal_metadata_.Clear(); } @@ -33854,6 +33855,20 @@ bool Header::MergePartialFromCodedStream( break; } + // bool defer_write_too_old_error = 14; + case 14: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(112u /* 112 & 0xFF */)) { + + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>( + input, &defer_write_too_old_error_))); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -33940,6 +33955,11 @@ void Header::SerializeWithCachedSizes( ::google::protobuf::internal::WireFormatLite::WriteBool(13, this->async_consensus(), output); } + // bool defer_write_too_old_error = 14; + if (this->defer_write_too_old_error() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteBool(14, this->defer_write_too_old_error(), output); + } + output->WriteRaw((::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()).data(), static_cast((::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()).size())); // @@protoc_insertion_point(serialize_end:cockroach.roachpb.Header) @@ -34000,6 +34020,12 @@ size_t Header::ByteSizeLong() const { ::google::protobuf::internal::WireFormatLite::EnumSize(this->read_consistency()); } + if (this->gateway_node_id() != 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::Int32Size( + this->gateway_node_id()); + } + // bool distinct_spans = 9; if (this->distinct_spans() != 0) { total_size += 1 + 1; @@ -34015,10 +34041,9 @@ size_t Header::ByteSizeLong() const { total_size += 1 + 1; } - if (this->gateway_node_id() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->gateway_node_id()); + // bool defer_write_too_old_error = 14; + if (this->defer_write_too_old_error() != 0) { + total_size += 1 + 1; } int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); @@ -34062,6 +34087,9 @@ void Header::MergeFrom(const Header& from) { if (from.read_consistency() != 0) { set_read_consistency(from.read_consistency()); } + if (from.gateway_node_id() != 0) { + set_gateway_node_id(from.gateway_node_id()); + } if (from.distinct_spans() != 0) { set_distinct_spans(from.distinct_spans()); } @@ -34071,8 +34099,8 @@ void Header::MergeFrom(const Header& from) { if (from.async_consensus() != 0) { set_async_consensus(from.async_consensus()); } - if (from.gateway_node_id() != 0) { - set_gateway_node_id(from.gateway_node_id()); + if (from.defer_write_too_old_error() != 0) { + set_defer_write_too_old_error(from.defer_write_too_old_error()); } } @@ -34101,10 +34129,11 @@ void Header::InternalSwap(Header* other) { swap(user_priority_, other->user_priority_); swap(max_span_request_keys_, other->max_span_request_keys_); swap(read_consistency_, other->read_consistency_); + swap(gateway_node_id_, other->gateway_node_id_); swap(distinct_spans_, other->distinct_spans_); swap(return_range_info_, other->return_range_info_); swap(async_consensus_, other->async_consensus_); - swap(gateway_node_id_, other->gateway_node_id_); + swap(defer_write_too_old_error_, other->defer_write_too_old_error_); _internal_metadata_.Swap(&other->_internal_metadata_); } diff --git a/c-deps/libroach/protos/roachpb/api.pb.h b/c-deps/libroach/protos/roachpb/api.pb.h index 651202b1ec61..ecb495687aef 100644 --- a/c-deps/libroach/protos/roachpb/api.pb.h +++ b/c-deps/libroach/protos/roachpb/api.pb.h @@ -15090,6 +15090,11 @@ class Header : public ::google::protobuf::MessageLite /* @@protoc_insertion_poin ::cockroach::roachpb::ReadConsistencyType read_consistency() const; void set_read_consistency(::cockroach::roachpb::ReadConsistencyType value); + void clear_gateway_node_id(); + static const int kGatewayNodeIdFieldNumber = 11; + ::google::protobuf::int32 gateway_node_id() const; + void set_gateway_node_id(::google::protobuf::int32 value); + // bool distinct_spans = 9; void clear_distinct_spans(); static const int kDistinctSpansFieldNumber = 9; @@ -15108,10 +15113,11 @@ class Header : public ::google::protobuf::MessageLite /* @@protoc_insertion_poin bool async_consensus() const; void set_async_consensus(bool value); - void clear_gateway_node_id(); - static const int kGatewayNodeIdFieldNumber = 11; - ::google::protobuf::int32 gateway_node_id() const; - void set_gateway_node_id(::google::protobuf::int32 value); + // bool defer_write_too_old_error = 14; + void clear_defer_write_too_old_error(); + static const int kDeferWriteTooOldErrorFieldNumber = 14; + bool defer_write_too_old_error() const; + void set_defer_write_too_old_error(bool value); // @@protoc_insertion_point(class_scope:cockroach.roachpb.Header) private: @@ -15125,10 +15131,11 @@ class Header : public ::google::protobuf::MessageLite /* @@protoc_insertion_poin double user_priority_; ::google::protobuf::int64 max_span_request_keys_; int read_consistency_; + ::google::protobuf::int32 gateway_node_id_; bool distinct_spans_; bool return_range_info_; bool async_consensus_; - ::google::protobuf::int32 gateway_node_id_; + bool defer_write_too_old_error_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::protobuf_roachpb_2fapi_2eproto::TableStruct; }; @@ -31786,6 +31793,20 @@ inline void Header::set_async_consensus(bool value) { // @@protoc_insertion_point(field_set:cockroach.roachpb.Header.async_consensus) } +// bool defer_write_too_old_error = 14; +inline void Header::clear_defer_write_too_old_error() { + defer_write_too_old_error_ = false; +} +inline bool Header::defer_write_too_old_error() const { + // @@protoc_insertion_point(field_get:cockroach.roachpb.Header.defer_write_too_old_error) + return defer_write_too_old_error_; +} +inline void Header::set_defer_write_too_old_error(bool value) { + + defer_write_too_old_error_ = value; + // @@protoc_insertion_point(field_set:cockroach.roachpb.Header.defer_write_too_old_error) +} + // ------------------------------------------------------------------- // BatchRequest diff --git a/pkg/kv/dist_sender_server_test.go b/pkg/kv/dist_sender_server_test.go index 5459445fd1eb..f7fce3f290ea 100644 --- a/pkg/kv/dist_sender_server_test.go +++ b/pkg/kv/dist_sender_server_test.go @@ -2192,6 +2192,19 @@ func TestTxnCoordSenderRetries(t *testing.T) { retryable: func(ctx context.Context, txn *client.Txn) error { return txn.Put(ctx, "a", "put") }, + txnCoordRetry: true, + }, + { + name: "deferred write too old with put", + afterTxnStart: func(ctx context.Context, db *client.DB) error { + return db.Put(ctx, "a", "put") + }, + retryable: func(ctx context.Context, txn *client.Txn) error { + b := txn.NewBatch() + b.Header.DeferWriteTooOldError = true + b.Put("a", "put") + return txn.Run(ctx, b) + }, // This trivially succeeds as there are no refresh spans. }, { @@ -2510,6 +2523,20 @@ func TestTxnCoordSenderRetries(t *testing.T) { b := txn.NewBatch() b.Put("a", "put") b.Put("c", "put") + return txn.CommitInBatch(ctx, b) // put to c will return WriteTooOldError + }, + clientRetry: true, + }, + { + name: "multi-range batch with deferred write too old", + afterTxnStart: func(ctx context.Context, db *client.DB) error { + return db.Put(ctx, "c", "value") + }, + retryable: func(ctx context.Context, txn *client.Txn) error { + b := txn.NewBatch() + b.Header.DeferWriteTooOldError = true + b.Put("a", "put") + b.Put("c", "put") return txn.CommitInBatch(ctx, b) // both puts will succeed, et will retry }, // Parallel commits do not support the canForwardSerializableTimestamp @@ -2549,6 +2576,40 @@ func TestTxnCoordSenderRetries(t *testing.T) { }, clientRetry: true, // successful cput will still retry because of mixed success }, + { + name: "multi-range batch with deferred write too old and failed cput", + beforeTxnStart: func(ctx context.Context, db *client.DB) error { + return db.Put(ctx, "a", "orig") + }, + afterTxnStart: func(ctx context.Context, db *client.DB) error { + return db.Put(ctx, "a", "value") + }, + retryable: func(ctx context.Context, txn *client.Txn) error { + b := txn.NewBatch() + b.Header.DeferWriteTooOldError = true + b.CPut("a", "cput", "orig") + b.Put("c", "put") + return txn.CommitInBatch(ctx, b) + }, + clientRetry: true, // cput with write too old requires restart + }, + { + name: "multi-range batch with deferred write too old and successful cput", + beforeTxnStart: func(ctx context.Context, db *client.DB) error { + return db.Put(ctx, "a", "orig") + }, + afterTxnStart: func(ctx context.Context, db *client.DB) error { + return db.Put(ctx, "a", "orig") + }, + retryable: func(ctx context.Context, txn *client.Txn) error { + b := txn.NewBatch() + b.Header.DeferWriteTooOldError = true + b.CPut("a", "cput", "orig") + b.Put("c", "put") + return txn.CommitInBatch(ctx, b) + }, + clientRetry: true, // successful cput will still retry because of mixed success + }, { name: "cput within uncertainty interval", beforeTxnStart: func(ctx context.Context, db *client.DB) error { diff --git a/pkg/kv/txn_test.go b/pkg/kv/txn_test.go index e800327b640e..4732a3054d4b 100644 --- a/pkg/kv/txn_test.go +++ b/pkg/kv/txn_test.go @@ -156,14 +156,17 @@ func TestLostUpdate(t *testing.T) { t.Fatal("should experience just one restart") } + var newVal string if gr.Exists() && bytes.Equal(gr.ValueBytes(), []byte("hi")) { - if err := txn.Put(ctx, key, "correct"); err != nil { - t.Fatal(err) - } + newVal = "correct" } else { - if err := txn.Put(ctx, key, "oops!"); err != nil { - t.Fatal(err) - } + newVal = "oops!" + } + b := txn.NewBatch() + b.Header.DeferWriteTooOldError = true + b.Put(key, newVal) + if err := txn.Run(ctx, b); err != nil { + t.Fatal(err) } // Verify that the WriteTooOld boolean is set on the txn. proto := txn.Serialize() diff --git a/pkg/roachpb/api.go b/pkg/roachpb/api.go index f6009c250813..f191c9f66ab4 100644 --- a/pkg/roachpb/api.go +++ b/pkg/roachpb/api.go @@ -108,6 +108,13 @@ func IsReadOnly(args Request) bool { return (flags&isRead) != 0 && (flags&isWrite) == 0 } +// IsReadAndWrite returns true if the request both reads and writes +// (such as conditional puts). +func IsReadAndWrite(args Request) bool { + flags := args.flags() + return (flags&isRead) != 0 && (flags&isWrite) != 0 +} + // IsTransactional returns true if the request may be part of a // transaction. func IsTransactional(args Request) bool { diff --git a/pkg/roachpb/api.pb.go b/pkg/roachpb/api.pb.go index 562b82f3c3a0..64dfaaa1d047 100644 --- a/pkg/roachpb/api.pb.go +++ b/pkg/roachpb/api.pb.go @@ -70,7 +70,7 @@ func (x ReadConsistencyType) String() string { return proto.EnumName(ReadConsistencyType_name, int32(x)) } func (ReadConsistencyType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{0} + return fileDescriptor_api_95ac5de735b0e2a7, []int{0} } // ScanFormat is an enumeration of the available response formats for MVCCScan @@ -98,7 +98,7 @@ func (x ScanFormat) String() string { return proto.EnumName(ScanFormat_name, int32(x)) } func (ScanFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{1} + return fileDescriptor_api_95ac5de735b0e2a7, []int{1} } type ChecksumMode int32 @@ -145,7 +145,7 @@ func (x ChecksumMode) String() string { return proto.EnumName(ChecksumMode_name, int32(x)) } func (ChecksumMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{2} + return fileDescriptor_api_95ac5de735b0e2a7, []int{2} } // PushTxnType determines what action to take when pushing a transaction. @@ -176,7 +176,7 @@ func (x PushTxnType) String() string { return proto.EnumName(PushTxnType_name, int32(x)) } func (PushTxnType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{3} + return fileDescriptor_api_95ac5de735b0e2a7, []int{3} } type ExportStorageProvider int32 @@ -214,7 +214,7 @@ func (x ExportStorageProvider) String() string { return proto.EnumName(ExportStorageProvider_name, int32(x)) } func (ExportStorageProvider) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{4} + return fileDescriptor_api_95ac5de735b0e2a7, []int{4} } type MVCCFilter int32 @@ -237,7 +237,7 @@ func (x MVCCFilter) String() string { return proto.EnumName(MVCCFilter_name, int32(x)) } func (MVCCFilter) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{5} + return fileDescriptor_api_95ac5de735b0e2a7, []int{5} } type ResponseHeader_ResumeReason int32 @@ -269,7 +269,7 @@ func (x ResponseHeader_ResumeReason) String() string { return proto.EnumName(ResponseHeader_ResumeReason_name, int32(x)) } func (ResponseHeader_ResumeReason) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{2, 0} + return fileDescriptor_api_95ac5de735b0e2a7, []int{2, 0} } type CheckConsistencyResponse_Status int32 @@ -311,7 +311,7 @@ func (x CheckConsistencyResponse_Status) String() string { return proto.EnumName(CheckConsistencyResponse_Status_name, int32(x)) } func (CheckConsistencyResponse_Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{25, 0} + return fileDescriptor_api_95ac5de735b0e2a7, []int{25, 0} } // RangeInfo describes a range which executed a request. It contains @@ -325,7 +325,7 @@ func (m *RangeInfo) Reset() { *m = RangeInfo{} } func (m *RangeInfo) String() string { return proto.CompactTextString(m) } func (*RangeInfo) ProtoMessage() {} func (*RangeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{0} + return fileDescriptor_api_95ac5de735b0e2a7, []int{0} } func (m *RangeInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -368,7 +368,7 @@ func (m *RequestHeader) Reset() { *m = RequestHeader{} } func (m *RequestHeader) String() string { return proto.CompactTextString(m) } func (*RequestHeader) ProtoMessage() {} func (*RequestHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{1} + return fileDescriptor_api_95ac5de735b0e2a7, []int{1} } func (m *RequestHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -426,7 +426,7 @@ func (m *ResponseHeader) Reset() { *m = ResponseHeader{} } func (m *ResponseHeader) String() string { return proto.CompactTextString(m) } func (*ResponseHeader) ProtoMessage() {} func (*ResponseHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{2} + return fileDescriptor_api_95ac5de735b0e2a7, []int{2} } func (m *ResponseHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -460,7 +460,7 @@ func (m *GetRequest) Reset() { *m = GetRequest{} } func (m *GetRequest) String() string { return proto.CompactTextString(m) } func (*GetRequest) ProtoMessage() {} func (*GetRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{3} + return fileDescriptor_api_95ac5de735b0e2a7, []int{3} } func (m *GetRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -498,7 +498,7 @@ func (m *GetResponse) Reset() { *m = GetResponse{} } func (m *GetResponse) String() string { return proto.CompactTextString(m) } func (*GetResponse) ProtoMessage() {} func (*GetResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{4} + return fileDescriptor_api_95ac5de735b0e2a7, []int{4} } func (m *GetResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -541,7 +541,7 @@ func (m *PutRequest) Reset() { *m = PutRequest{} } func (m *PutRequest) String() string { return proto.CompactTextString(m) } func (*PutRequest) ProtoMessage() {} func (*PutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{5} + return fileDescriptor_api_95ac5de735b0e2a7, []int{5} } func (m *PutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -575,7 +575,7 @@ func (m *PutResponse) Reset() { *m = PutResponse{} } func (m *PutResponse) String() string { return proto.CompactTextString(m) } func (*PutResponse) ProtoMessage() {} func (*PutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{6} + return fileDescriptor_api_95ac5de735b0e2a7, []int{6} } func (m *PutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -629,7 +629,7 @@ func (m *ConditionalPutRequest) Reset() { *m = ConditionalPutRequest{} } func (m *ConditionalPutRequest) String() string { return proto.CompactTextString(m) } func (*ConditionalPutRequest) ProtoMessage() {} func (*ConditionalPutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{7} + return fileDescriptor_api_95ac5de735b0e2a7, []int{7} } func (m *ConditionalPutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -664,7 +664,7 @@ func (m *ConditionalPutResponse) Reset() { *m = ConditionalPutResponse{} func (m *ConditionalPutResponse) String() string { return proto.CompactTextString(m) } func (*ConditionalPutResponse) ProtoMessage() {} func (*ConditionalPutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{8} + return fileDescriptor_api_95ac5de735b0e2a7, []int{8} } func (m *ConditionalPutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -710,7 +710,7 @@ func (m *InitPutRequest) Reset() { *m = InitPutRequest{} } func (m *InitPutRequest) String() string { return proto.CompactTextString(m) } func (*InitPutRequest) ProtoMessage() {} func (*InitPutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{9} + return fileDescriptor_api_95ac5de735b0e2a7, []int{9} } func (m *InitPutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -744,7 +744,7 @@ func (m *InitPutResponse) Reset() { *m = InitPutResponse{} } func (m *InitPutResponse) String() string { return proto.CompactTextString(m) } func (*InitPutResponse) ProtoMessage() {} func (*InitPutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{10} + return fileDescriptor_api_95ac5de735b0e2a7, []int{10} } func (m *InitPutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -784,7 +784,7 @@ func (m *IncrementRequest) Reset() { *m = IncrementRequest{} } func (m *IncrementRequest) String() string { return proto.CompactTextString(m) } func (*IncrementRequest) ProtoMessage() {} func (*IncrementRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{11} + return fileDescriptor_api_95ac5de735b0e2a7, []int{11} } func (m *IncrementRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -821,7 +821,7 @@ func (m *IncrementResponse) Reset() { *m = IncrementResponse{} } func (m *IncrementResponse) String() string { return proto.CompactTextString(m) } func (*IncrementResponse) ProtoMessage() {} func (*IncrementResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{12} + return fileDescriptor_api_95ac5de735b0e2a7, []int{12} } func (m *IncrementResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -855,7 +855,7 @@ func (m *DeleteRequest) Reset() { *m = DeleteRequest{} } func (m *DeleteRequest) String() string { return proto.CompactTextString(m) } func (*DeleteRequest) ProtoMessage() {} func (*DeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{13} + return fileDescriptor_api_95ac5de735b0e2a7, []int{13} } func (m *DeleteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -889,7 +889,7 @@ func (m *DeleteResponse) Reset() { *m = DeleteResponse{} } func (m *DeleteResponse) String() string { return proto.CompactTextString(m) } func (*DeleteResponse) ProtoMessage() {} func (*DeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{14} + return fileDescriptor_api_95ac5de735b0e2a7, []int{14} } func (m *DeleteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -938,7 +938,7 @@ func (m *DeleteRangeRequest) Reset() { *m = DeleteRangeRequest{} } func (m *DeleteRangeRequest) String() string { return proto.CompactTextString(m) } func (*DeleteRangeRequest) ProtoMessage() {} func (*DeleteRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{15} + return fileDescriptor_api_95ac5de735b0e2a7, []int{15} } func (m *DeleteRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -975,7 +975,7 @@ func (m *DeleteRangeResponse) Reset() { *m = DeleteRangeResponse{} } func (m *DeleteRangeResponse) String() string { return proto.CompactTextString(m) } func (*DeleteRangeResponse) ProtoMessage() {} func (*DeleteRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{16} + return fileDescriptor_api_95ac5de735b0e2a7, []int{16} } func (m *DeleteRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1022,7 +1022,7 @@ func (m *ClearRangeRequest) Reset() { *m = ClearRangeRequest{} } func (m *ClearRangeRequest) String() string { return proto.CompactTextString(m) } func (*ClearRangeRequest) ProtoMessage() {} func (*ClearRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{17} + return fileDescriptor_api_95ac5de735b0e2a7, []int{17} } func (m *ClearRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1056,7 +1056,7 @@ func (m *ClearRangeResponse) Reset() { *m = ClearRangeResponse{} } func (m *ClearRangeResponse) String() string { return proto.CompactTextString(m) } func (*ClearRangeResponse) ProtoMessage() {} func (*ClearRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{18} + return fileDescriptor_api_95ac5de735b0e2a7, []int{18} } func (m *ClearRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1125,7 +1125,7 @@ func (m *ScanOptions) Reset() { *m = ScanOptions{} } func (m *ScanOptions) String() string { return proto.CompactTextString(m) } func (*ScanOptions) ProtoMessage() {} func (*ScanOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{19} + return fileDescriptor_api_95ac5de735b0e2a7, []int{19} } func (m *ScanOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1165,7 +1165,7 @@ func (m *ScanRequest) Reset() { *m = ScanRequest{} } func (m *ScanRequest) String() string { return proto.CompactTextString(m) } func (*ScanRequest) ProtoMessage() {} func (*ScanRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{20} + return fileDescriptor_api_95ac5de735b0e2a7, []int{20} } func (m *ScanRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1212,7 +1212,7 @@ func (m *ScanResponse) Reset() { *m = ScanResponse{} } func (m *ScanResponse) String() string { return proto.CompactTextString(m) } func (*ScanResponse) ProtoMessage() {} func (*ScanResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{21} + return fileDescriptor_api_95ac5de735b0e2a7, []int{21} } func (m *ScanResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1252,7 +1252,7 @@ func (m *ReverseScanRequest) Reset() { *m = ReverseScanRequest{} } func (m *ReverseScanRequest) String() string { return proto.CompactTextString(m) } func (*ReverseScanRequest) ProtoMessage() {} func (*ReverseScanRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{22} + return fileDescriptor_api_95ac5de735b0e2a7, []int{22} } func (m *ReverseScanRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1299,7 +1299,7 @@ func (m *ReverseScanResponse) Reset() { *m = ReverseScanResponse{} } func (m *ReverseScanResponse) String() string { return proto.CompactTextString(m) } func (*ReverseScanResponse) ProtoMessage() {} func (*ReverseScanResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{23} + return fileDescriptor_api_95ac5de735b0e2a7, []int{23} } func (m *ReverseScanResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1345,7 +1345,7 @@ func (m *CheckConsistencyRequest) Reset() { *m = CheckConsistencyRequest func (m *CheckConsistencyRequest) String() string { return proto.CompactTextString(m) } func (*CheckConsistencyRequest) ProtoMessage() {} func (*CheckConsistencyRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{24} + return fileDescriptor_api_95ac5de735b0e2a7, []int{24} } func (m *CheckConsistencyRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1382,7 +1382,7 @@ func (m *CheckConsistencyResponse) Reset() { *m = CheckConsistencyRespon func (m *CheckConsistencyResponse) String() string { return proto.CompactTextString(m) } func (*CheckConsistencyResponse) ProtoMessage() {} func (*CheckConsistencyResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{25} + return fileDescriptor_api_95ac5de735b0e2a7, []int{25} } func (m *CheckConsistencyResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1426,7 +1426,7 @@ func (m *CheckConsistencyResponse_Result) Reset() { *m = CheckConsistenc func (m *CheckConsistencyResponse_Result) String() string { return proto.CompactTextString(m) } func (*CheckConsistencyResponse_Result) ProtoMessage() {} func (*CheckConsistencyResponse_Result) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{25, 0} + return fileDescriptor_api_95ac5de735b0e2a7, []int{25, 0} } func (m *CheckConsistencyResponse_Result) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1474,7 +1474,7 @@ func (m *RecomputeStatsRequest) Reset() { *m = RecomputeStatsRequest{} } func (m *RecomputeStatsRequest) String() string { return proto.CompactTextString(m) } func (*RecomputeStatsRequest) ProtoMessage() {} func (*RecomputeStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{26} + return fileDescriptor_api_95ac5de735b0e2a7, []int{26} } func (m *RecomputeStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1510,7 +1510,7 @@ func (m *RecomputeStatsResponse) Reset() { *m = RecomputeStatsResponse{} func (m *RecomputeStatsResponse) String() string { return proto.CompactTextString(m) } func (*RecomputeStatsResponse) ProtoMessage() {} func (*RecomputeStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{27} + return fileDescriptor_api_95ac5de735b0e2a7, []int{27} } func (m *RecomputeStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1544,7 +1544,7 @@ func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) } func (*BeginTransactionRequest) ProtoMessage() {} func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{28} + return fileDescriptor_api_95ac5de735b0e2a7, []int{28} } func (m *BeginTransactionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1578,7 +1578,7 @@ func (m *BeginTransactionResponse) Reset() { *m = BeginTransactionRespon func (m *BeginTransactionResponse) String() string { return proto.CompactTextString(m) } func (*BeginTransactionResponse) ProtoMessage() {} func (*BeginTransactionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{29} + return fileDescriptor_api_95ac5de735b0e2a7, []int{29} } func (m *BeginTransactionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1666,7 +1666,7 @@ func (m *EndTransactionRequest) Reset() { *m = EndTransactionRequest{} } func (m *EndTransactionRequest) String() string { return proto.CompactTextString(m) } func (*EndTransactionRequest) ProtoMessage() {} func (*EndTransactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{30} + return fileDescriptor_api_95ac5de735b0e2a7, []int{30} } func (m *EndTransactionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1713,7 +1713,7 @@ func (m *EndTransactionResponse) Reset() { *m = EndTransactionResponse{} func (m *EndTransactionResponse) String() string { return proto.CompactTextString(m) } func (*EndTransactionResponse) ProtoMessage() {} func (*EndTransactionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{31} + return fileDescriptor_api_95ac5de735b0e2a7, []int{31} } func (m *EndTransactionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1774,7 +1774,7 @@ func (m *AdminSplitRequest) Reset() { *m = AdminSplitRequest{} } func (m *AdminSplitRequest) String() string { return proto.CompactTextString(m) } func (*AdminSplitRequest) ProtoMessage() {} func (*AdminSplitRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{32} + return fileDescriptor_api_95ac5de735b0e2a7, []int{32} } func (m *AdminSplitRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1809,7 +1809,7 @@ func (m *AdminSplitResponse) Reset() { *m = AdminSplitResponse{} } func (m *AdminSplitResponse) String() string { return proto.CompactTextString(m) } func (*AdminSplitResponse) ProtoMessage() {} func (*AdminSplitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{33} + return fileDescriptor_api_95ac5de735b0e2a7, []int{33} } func (m *AdminSplitResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1848,7 +1848,7 @@ func (m *AdminUnsplitRequest) Reset() { *m = AdminUnsplitRequest{} } func (m *AdminUnsplitRequest) String() string { return proto.CompactTextString(m) } func (*AdminUnsplitRequest) ProtoMessage() {} func (*AdminUnsplitRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{34} + return fileDescriptor_api_95ac5de735b0e2a7, []int{34} } func (m *AdminUnsplitRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1883,7 +1883,7 @@ func (m *AdminUnsplitResponse) Reset() { *m = AdminUnsplitResponse{} } func (m *AdminUnsplitResponse) String() string { return proto.CompactTextString(m) } func (*AdminUnsplitResponse) ProtoMessage() {} func (*AdminUnsplitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{35} + return fileDescriptor_api_95ac5de735b0e2a7, []int{35} } func (m *AdminUnsplitResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1925,7 +1925,7 @@ func (m *AdminMergeRequest) Reset() { *m = AdminMergeRequest{} } func (m *AdminMergeRequest) String() string { return proto.CompactTextString(m) } func (*AdminMergeRequest) ProtoMessage() {} func (*AdminMergeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{36} + return fileDescriptor_api_95ac5de735b0e2a7, []int{36} } func (m *AdminMergeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1960,7 +1960,7 @@ func (m *AdminMergeResponse) Reset() { *m = AdminMergeResponse{} } func (m *AdminMergeResponse) String() string { return proto.CompactTextString(m) } func (*AdminMergeResponse) ProtoMessage() {} func (*AdminMergeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{37} + return fileDescriptor_api_95ac5de735b0e2a7, []int{37} } func (m *AdminMergeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1998,7 +1998,7 @@ func (m *AdminTransferLeaseRequest) Reset() { *m = AdminTransferLeaseReq func (m *AdminTransferLeaseRequest) String() string { return proto.CompactTextString(m) } func (*AdminTransferLeaseRequest) ProtoMessage() {} func (*AdminTransferLeaseRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{38} + return fileDescriptor_api_95ac5de735b0e2a7, []int{38} } func (m *AdminTransferLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2031,7 +2031,7 @@ func (m *AdminTransferLeaseResponse) Reset() { *m = AdminTransferLeaseRe func (m *AdminTransferLeaseResponse) String() string { return proto.CompactTextString(m) } func (*AdminTransferLeaseResponse) ProtoMessage() {} func (*AdminTransferLeaseResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{39} + return fileDescriptor_api_95ac5de735b0e2a7, []int{39} } func (m *AdminTransferLeaseResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2083,7 +2083,7 @@ func (m *AdminChangeReplicasRequest) Reset() { *m = AdminChangeReplicasR func (m *AdminChangeReplicasRequest) String() string { return proto.CompactTextString(m) } func (*AdminChangeReplicasRequest) ProtoMessage() {} func (*AdminChangeReplicasRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{40} + return fileDescriptor_api_95ac5de735b0e2a7, []int{40} } func (m *AdminChangeReplicasRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2120,7 +2120,7 @@ func (m *AdminChangeReplicasResponse) Reset() { *m = AdminChangeReplicas func (m *AdminChangeReplicasResponse) String() string { return proto.CompactTextString(m) } func (*AdminChangeReplicasResponse) ProtoMessage() {} func (*AdminChangeReplicasResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{41} + return fileDescriptor_api_95ac5de735b0e2a7, []int{41} } func (m *AdminChangeReplicasResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2157,7 +2157,7 @@ func (m *AdminRelocateRangeRequest) Reset() { *m = AdminRelocateRangeReq func (m *AdminRelocateRangeRequest) String() string { return proto.CompactTextString(m) } func (*AdminRelocateRangeRequest) ProtoMessage() {} func (*AdminRelocateRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{42} + return fileDescriptor_api_95ac5de735b0e2a7, []int{42} } func (m *AdminRelocateRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2190,7 +2190,7 @@ func (m *AdminRelocateRangeResponse) Reset() { *m = AdminRelocateRangeRe func (m *AdminRelocateRangeResponse) String() string { return proto.CompactTextString(m) } func (*AdminRelocateRangeResponse) ProtoMessage() {} func (*AdminRelocateRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{43} + return fileDescriptor_api_95ac5de735b0e2a7, []int{43} } func (m *AdminRelocateRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2229,7 +2229,7 @@ func (m *HeartbeatTxnRequest) Reset() { *m = HeartbeatTxnRequest{} } func (m *HeartbeatTxnRequest) String() string { return proto.CompactTextString(m) } func (*HeartbeatTxnRequest) ProtoMessage() {} func (*HeartbeatTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{44} + return fileDescriptor_api_95ac5de735b0e2a7, []int{44} } func (m *HeartbeatTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2266,7 +2266,7 @@ func (m *HeartbeatTxnResponse) Reset() { *m = HeartbeatTxnResponse{} } func (m *HeartbeatTxnResponse) String() string { return proto.CompactTextString(m) } func (*HeartbeatTxnResponse) ProtoMessage() {} func (*HeartbeatTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{45} + return fileDescriptor_api_95ac5de735b0e2a7, []int{45} } func (m *HeartbeatTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2309,7 +2309,7 @@ func (m *GCRequest) Reset() { *m = GCRequest{} } func (m *GCRequest) String() string { return proto.CompactTextString(m) } func (*GCRequest) ProtoMessage() {} func (*GCRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{46} + return fileDescriptor_api_95ac5de735b0e2a7, []int{46} } func (m *GCRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2343,7 +2343,7 @@ func (m *GCRequest_GCKey) Reset() { *m = GCRequest_GCKey{} } func (m *GCRequest_GCKey) String() string { return proto.CompactTextString(m) } func (*GCRequest_GCKey) ProtoMessage() {} func (*GCRequest_GCKey) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{46, 0} + return fileDescriptor_api_95ac5de735b0e2a7, []int{46, 0} } func (m *GCRequest_GCKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2377,7 +2377,7 @@ func (m *GCResponse) Reset() { *m = GCResponse{} } func (m *GCResponse) String() string { return proto.CompactTextString(m) } func (*GCResponse) ProtoMessage() {} func (*GCResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{47} + return fileDescriptor_api_95ac5de735b0e2a7, []int{47} } func (m *GCResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2452,7 +2452,7 @@ func (m *PushTxnRequest) Reset() { *m = PushTxnRequest{} } func (m *PushTxnRequest) String() string { return proto.CompactTextString(m) } func (*PushTxnRequest) ProtoMessage() {} func (*PushTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{48} + return fileDescriptor_api_95ac5de735b0e2a7, []int{48} } func (m *PushTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2495,7 +2495,7 @@ func (m *PushTxnResponse) Reset() { *m = PushTxnResponse{} } func (m *PushTxnResponse) String() string { return proto.CompactTextString(m) } func (*PushTxnResponse) ProtoMessage() {} func (*PushTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{49} + return fileDescriptor_api_95ac5de735b0e2a7, []int{49} } func (m *PushTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2542,7 +2542,7 @@ func (m *RecoverTxnRequest) Reset() { *m = RecoverTxnRequest{} } func (m *RecoverTxnRequest) String() string { return proto.CompactTextString(m) } func (*RecoverTxnRequest) ProtoMessage() {} func (*RecoverTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{50} + return fileDescriptor_api_95ac5de735b0e2a7, []int{50} } func (m *RecoverTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2578,7 +2578,7 @@ func (m *RecoverTxnResponse) Reset() { *m = RecoverTxnResponse{} } func (m *RecoverTxnResponse) String() string { return proto.CompactTextString(m) } func (*RecoverTxnResponse) ProtoMessage() {} func (*RecoverTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{51} + return fileDescriptor_api_95ac5de735b0e2a7, []int{51} } func (m *RecoverTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2622,7 +2622,7 @@ func (m *QueryTxnRequest) Reset() { *m = QueryTxnRequest{} } func (m *QueryTxnRequest) String() string { return proto.CompactTextString(m) } func (*QueryTxnRequest) ProtoMessage() {} func (*QueryTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{52} + return fileDescriptor_api_95ac5de735b0e2a7, []int{52} } func (m *QueryTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2661,7 +2661,7 @@ func (m *QueryTxnResponse) Reset() { *m = QueryTxnResponse{} } func (m *QueryTxnResponse) String() string { return proto.CompactTextString(m) } func (*QueryTxnResponse) ProtoMessage() {} func (*QueryTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{53} + return fileDescriptor_api_95ac5de735b0e2a7, []int{53} } func (m *QueryTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2721,7 +2721,7 @@ func (m *QueryIntentRequest) Reset() { *m = QueryIntentRequest{} } func (m *QueryIntentRequest) String() string { return proto.CompactTextString(m) } func (*QueryIntentRequest) ProtoMessage() {} func (*QueryIntentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{54} + return fileDescriptor_api_95ac5de735b0e2a7, []int{54} } func (m *QueryIntentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2757,7 +2757,7 @@ func (m *QueryIntentResponse) Reset() { *m = QueryIntentResponse{} } func (m *QueryIntentResponse) String() string { return proto.CompactTextString(m) } func (*QueryIntentResponse) ProtoMessage() {} func (*QueryIntentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{55} + return fileDescriptor_api_95ac5de735b0e2a7, []int{55} } func (m *QueryIntentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2801,7 +2801,7 @@ func (m *ResolveIntentRequest) Reset() { *m = ResolveIntentRequest{} } func (m *ResolveIntentRequest) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRequest) ProtoMessage() {} func (*ResolveIntentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{56} + return fileDescriptor_api_95ac5de735b0e2a7, []int{56} } func (m *ResolveIntentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2836,7 +2836,7 @@ func (m *ResolveIntentResponse) Reset() { *m = ResolveIntentResponse{} } func (m *ResolveIntentResponse) String() string { return proto.CompactTextString(m) } func (*ResolveIntentResponse) ProtoMessage() {} func (*ResolveIntentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{57} + return fileDescriptor_api_95ac5de735b0e2a7, []int{57} } func (m *ResolveIntentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2884,7 +2884,7 @@ func (m *ResolveIntentRangeRequest) Reset() { *m = ResolveIntentRangeReq func (m *ResolveIntentRangeRequest) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRangeRequest) ProtoMessage() {} func (*ResolveIntentRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{58} + return fileDescriptor_api_95ac5de735b0e2a7, []int{58} } func (m *ResolveIntentRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2919,7 +2919,7 @@ func (m *ResolveIntentRangeResponse) Reset() { *m = ResolveIntentRangeRe func (m *ResolveIntentRangeResponse) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRangeResponse) ProtoMessage() {} func (*ResolveIntentRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{59} + return fileDescriptor_api_95ac5de735b0e2a7, []int{59} } func (m *ResolveIntentRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2956,7 +2956,7 @@ func (m *MergeRequest) Reset() { *m = MergeRequest{} } func (m *MergeRequest) String() string { return proto.CompactTextString(m) } func (*MergeRequest) ProtoMessage() {} func (*MergeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{60} + return fileDescriptor_api_95ac5de735b0e2a7, []int{60} } func (m *MergeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2990,7 +2990,7 @@ func (m *MergeResponse) Reset() { *m = MergeResponse{} } func (m *MergeResponse) String() string { return proto.CompactTextString(m) } func (*MergeResponse) ProtoMessage() {} func (*MergeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{61} + return fileDescriptor_api_95ac5de735b0e2a7, []int{61} } func (m *MergeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3035,7 +3035,7 @@ func (m *TruncateLogRequest) Reset() { *m = TruncateLogRequest{} } func (m *TruncateLogRequest) String() string { return proto.CompactTextString(m) } func (*TruncateLogRequest) ProtoMessage() {} func (*TruncateLogRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{62} + return fileDescriptor_api_95ac5de735b0e2a7, []int{62} } func (m *TruncateLogRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3069,7 +3069,7 @@ func (m *TruncateLogResponse) Reset() { *m = TruncateLogResponse{} } func (m *TruncateLogResponse) String() string { return proto.CompactTextString(m) } func (*TruncateLogResponse) ProtoMessage() {} func (*TruncateLogResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{63} + return fileDescriptor_api_95ac5de735b0e2a7, []int{63} } func (m *TruncateLogResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3113,7 +3113,7 @@ func (m *RequestLeaseRequest) Reset() { *m = RequestLeaseRequest{} } func (m *RequestLeaseRequest) String() string { return proto.CompactTextString(m) } func (*RequestLeaseRequest) ProtoMessage() {} func (*RequestLeaseRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{64} + return fileDescriptor_api_95ac5de735b0e2a7, []int{64} } func (m *RequestLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3162,7 +3162,7 @@ func (m *TransferLeaseRequest) Reset() { *m = TransferLeaseRequest{} } func (m *TransferLeaseRequest) String() string { return proto.CompactTextString(m) } func (*TransferLeaseRequest) ProtoMessage() {} func (*TransferLeaseRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{65} + return fileDescriptor_api_95ac5de735b0e2a7, []int{65} } func (m *TransferLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3199,7 +3199,7 @@ func (m *LeaseInfoRequest) Reset() { *m = LeaseInfoRequest{} } func (m *LeaseInfoRequest) String() string { return proto.CompactTextString(m) } func (*LeaseInfoRequest) ProtoMessage() {} func (*LeaseInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{66} + return fileDescriptor_api_95ac5de735b0e2a7, []int{66} } func (m *LeaseInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3236,7 +3236,7 @@ func (m *LeaseInfoResponse) Reset() { *m = LeaseInfoResponse{} } func (m *LeaseInfoResponse) String() string { return proto.CompactTextString(m) } func (*LeaseInfoResponse) ProtoMessage() {} func (*LeaseInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{67} + return fileDescriptor_api_95ac5de735b0e2a7, []int{67} } func (m *LeaseInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3271,7 +3271,7 @@ func (m *RequestLeaseResponse) Reset() { *m = RequestLeaseResponse{} } func (m *RequestLeaseResponse) String() string { return proto.CompactTextString(m) } func (*RequestLeaseResponse) ProtoMessage() {} func (*RequestLeaseResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{68} + return fileDescriptor_api_95ac5de735b0e2a7, []int{68} } func (m *RequestLeaseResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3321,7 +3321,7 @@ func (m *ComputeChecksumRequest) Reset() { *m = ComputeChecksumRequest{} func (m *ComputeChecksumRequest) String() string { return proto.CompactTextString(m) } func (*ComputeChecksumRequest) ProtoMessage() {} func (*ComputeChecksumRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{69} + return fileDescriptor_api_95ac5de735b0e2a7, []int{69} } func (m *ComputeChecksumRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3358,7 +3358,7 @@ func (m *ComputeChecksumResponse) Reset() { *m = ComputeChecksumResponse func (m *ComputeChecksumResponse) String() string { return proto.CompactTextString(m) } func (*ComputeChecksumResponse) ProtoMessage() {} func (*ComputeChecksumResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{70} + return fileDescriptor_api_95ac5de735b0e2a7, []int{70} } func (m *ComputeChecksumResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3397,7 +3397,7 @@ func (m *ExportStorage) Reset() { *m = ExportStorage{} } func (m *ExportStorage) String() string { return proto.CompactTextString(m) } func (*ExportStorage) ProtoMessage() {} func (*ExportStorage) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{71} + return fileDescriptor_api_95ac5de735b0e2a7, []int{71} } func (m *ExportStorage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3431,7 +3431,7 @@ func (m *ExportStorage_LocalFilePath) Reset() { *m = ExportStorage_Local func (m *ExportStorage_LocalFilePath) String() string { return proto.CompactTextString(m) } func (*ExportStorage_LocalFilePath) ProtoMessage() {} func (*ExportStorage_LocalFilePath) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{71, 0} + return fileDescriptor_api_95ac5de735b0e2a7, []int{71, 0} } func (m *ExportStorage_LocalFilePath) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3464,7 +3464,7 @@ func (m *ExportStorage_Http) Reset() { *m = ExportStorage_Http{} } func (m *ExportStorage_Http) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Http) ProtoMessage() {} func (*ExportStorage_Http) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{71, 1} + return fileDescriptor_api_95ac5de735b0e2a7, []int{71, 1} } func (m *ExportStorage_Http) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3503,7 +3503,7 @@ func (m *ExportStorage_S3) Reset() { *m = ExportStorage_S3{} } func (m *ExportStorage_S3) String() string { return proto.CompactTextString(m) } func (*ExportStorage_S3) ProtoMessage() {} func (*ExportStorage_S3) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{71, 2} + return fileDescriptor_api_95ac5de735b0e2a7, []int{71, 2} } func (m *ExportStorage_S3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3542,7 +3542,7 @@ func (m *ExportStorage_GCS) Reset() { *m = ExportStorage_GCS{} } func (m *ExportStorage_GCS) String() string { return proto.CompactTextString(m) } func (*ExportStorage_GCS) ProtoMessage() {} func (*ExportStorage_GCS) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{71, 3} + return fileDescriptor_api_95ac5de735b0e2a7, []int{71, 3} } func (m *ExportStorage_GCS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3578,7 +3578,7 @@ func (m *ExportStorage_Azure) Reset() { *m = ExportStorage_Azure{} } func (m *ExportStorage_Azure) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Azure) ProtoMessage() {} func (*ExportStorage_Azure) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{71, 4} + return fileDescriptor_api_95ac5de735b0e2a7, []int{71, 4} } func (m *ExportStorage_Azure) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3617,7 +3617,7 @@ func (m *ExportStorage_Workload) Reset() { *m = ExportStorage_Workload{} func (m *ExportStorage_Workload) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Workload) ProtoMessage() {} func (*ExportStorage_Workload) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{71, 5} + return fileDescriptor_api_95ac5de735b0e2a7, []int{71, 5} } func (m *ExportStorage_Workload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3657,7 +3657,7 @@ func (m *WriteBatchRequest) Reset() { *m = WriteBatchRequest{} } func (m *WriteBatchRequest) String() string { return proto.CompactTextString(m) } func (*WriteBatchRequest) ProtoMessage() {} func (*WriteBatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{72} + return fileDescriptor_api_95ac5de735b0e2a7, []int{72} } func (m *WriteBatchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3691,7 +3691,7 @@ func (m *WriteBatchResponse) Reset() { *m = WriteBatchResponse{} } func (m *WriteBatchResponse) String() string { return proto.CompactTextString(m) } func (*WriteBatchResponse) ProtoMessage() {} func (*WriteBatchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{73} + return fileDescriptor_api_95ac5de735b0e2a7, []int{73} } func (m *WriteBatchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3749,7 +3749,7 @@ func (m *ExportRequest) Reset() { *m = ExportRequest{} } func (m *ExportRequest) String() string { return proto.CompactTextString(m) } func (*ExportRequest) ProtoMessage() {} func (*ExportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{74} + return fileDescriptor_api_95ac5de735b0e2a7, []int{74} } func (m *ExportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3785,7 +3785,7 @@ func (m *BulkOpSummary) Reset() { *m = BulkOpSummary{} } func (m *BulkOpSummary) String() string { return proto.CompactTextString(m) } func (*BulkOpSummary) ProtoMessage() {} func (*BulkOpSummary) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{75} + return fileDescriptor_api_95ac5de735b0e2a7, []int{75} } func (m *BulkOpSummary) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3821,7 +3821,7 @@ func (m *ExportResponse) Reset() { *m = ExportResponse{} } func (m *ExportResponse) String() string { return proto.CompactTextString(m) } func (*ExportResponse) ProtoMessage() {} func (*ExportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{76} + return fileDescriptor_api_95ac5de735b0e2a7, []int{76} } func (m *ExportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3860,7 +3860,7 @@ func (m *ExportResponse_File) Reset() { *m = ExportResponse_File{} } func (m *ExportResponse_File) String() string { return proto.CompactTextString(m) } func (*ExportResponse_File) ProtoMessage() {} func (*ExportResponse_File) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{76, 0} + return fileDescriptor_api_95ac5de735b0e2a7, []int{76, 0} } func (m *ExportResponse_File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3910,7 +3910,7 @@ func (m *ImportRequest) Reset() { *m = ImportRequest{} } func (m *ImportRequest) String() string { return proto.CompactTextString(m) } func (*ImportRequest) ProtoMessage() {} func (*ImportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{77} + return fileDescriptor_api_95ac5de735b0e2a7, []int{77} } func (m *ImportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3945,7 +3945,7 @@ func (m *ImportRequest_File) Reset() { *m = ImportRequest_File{} } func (m *ImportRequest_File) String() string { return proto.CompactTextString(m) } func (*ImportRequest_File) ProtoMessage() {} func (*ImportRequest_File) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{77, 0} + return fileDescriptor_api_95ac5de735b0e2a7, []int{77, 0} } func (m *ImportRequest_File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3981,7 +3981,7 @@ func (m *ImportRequest_TableRekey) Reset() { *m = ImportRequest_TableRek func (m *ImportRequest_TableRekey) String() string { return proto.CompactTextString(m) } func (*ImportRequest_TableRekey) ProtoMessage() {} func (*ImportRequest_TableRekey) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{77, 1} + return fileDescriptor_api_95ac5de735b0e2a7, []int{77, 1} } func (m *ImportRequest_TableRekey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4016,7 +4016,7 @@ func (m *ImportResponse) Reset() { *m = ImportResponse{} } func (m *ImportResponse) String() string { return proto.CompactTextString(m) } func (*ImportResponse) ProtoMessage() {} func (*ImportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{78} + return fileDescriptor_api_95ac5de735b0e2a7, []int{78} } func (m *ImportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4054,7 +4054,7 @@ func (m *AdminScatterRequest) Reset() { *m = AdminScatterRequest{} } func (m *AdminScatterRequest) String() string { return proto.CompactTextString(m) } func (*AdminScatterRequest) ProtoMessage() {} func (*AdminScatterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{79} + return fileDescriptor_api_95ac5de735b0e2a7, []int{79} } func (m *AdminScatterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4089,7 +4089,7 @@ func (m *AdminScatterResponse) Reset() { *m = AdminScatterResponse{} } func (m *AdminScatterResponse) String() string { return proto.CompactTextString(m) } func (*AdminScatterResponse) ProtoMessage() {} func (*AdminScatterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{80} + return fileDescriptor_api_95ac5de735b0e2a7, []int{80} } func (m *AdminScatterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4122,7 +4122,7 @@ func (m *AdminScatterResponse_Range) Reset() { *m = AdminScatterResponse func (m *AdminScatterResponse_Range) String() string { return proto.CompactTextString(m) } func (*AdminScatterResponse_Range) ProtoMessage() {} func (*AdminScatterResponse_Range) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{80, 0} + return fileDescriptor_api_95ac5de735b0e2a7, []int{80, 0} } func (m *AdminScatterResponse_Range) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4158,7 +4158,7 @@ func (m *AddSSTableRequest) Reset() { *m = AddSSTableRequest{} } func (m *AddSSTableRequest) String() string { return proto.CompactTextString(m) } func (*AddSSTableRequest) ProtoMessage() {} func (*AddSSTableRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{81} + return fileDescriptor_api_95ac5de735b0e2a7, []int{81} } func (m *AddSSTableRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4192,7 +4192,7 @@ func (m *AddSSTableResponse) Reset() { *m = AddSSTableResponse{} } func (m *AddSSTableResponse) String() string { return proto.CompactTextString(m) } func (*AddSSTableResponse) ProtoMessage() {} func (*AddSSTableResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{82} + return fileDescriptor_api_95ac5de735b0e2a7, []int{82} } func (m *AddSSTableResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4236,7 +4236,7 @@ func (m *RefreshRequest) Reset() { *m = RefreshRequest{} } func (m *RefreshRequest) String() string { return proto.CompactTextString(m) } func (*RefreshRequest) ProtoMessage() {} func (*RefreshRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{83} + return fileDescriptor_api_95ac5de735b0e2a7, []int{83} } func (m *RefreshRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4270,7 +4270,7 @@ func (m *RefreshResponse) Reset() { *m = RefreshResponse{} } func (m *RefreshResponse) String() string { return proto.CompactTextString(m) } func (*RefreshResponse) ProtoMessage() {} func (*RefreshResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{84} + return fileDescriptor_api_95ac5de735b0e2a7, []int{84} } func (m *RefreshResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4310,7 +4310,7 @@ func (m *RefreshRangeRequest) Reset() { *m = RefreshRangeRequest{} } func (m *RefreshRangeRequest) String() string { return proto.CompactTextString(m) } func (*RefreshRangeRequest) ProtoMessage() {} func (*RefreshRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{85} + return fileDescriptor_api_95ac5de735b0e2a7, []int{85} } func (m *RefreshRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4344,7 +4344,7 @@ func (m *RefreshRangeResponse) Reset() { *m = RefreshRangeResponse{} } func (m *RefreshRangeResponse) String() string { return proto.CompactTextString(m) } func (*RefreshRangeResponse) ProtoMessage() {} func (*RefreshRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{86} + return fileDescriptor_api_95ac5de735b0e2a7, []int{86} } func (m *RefreshRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4396,7 +4396,7 @@ func (m *SubsumeRequest) Reset() { *m = SubsumeRequest{} } func (m *SubsumeRequest) String() string { return proto.CompactTextString(m) } func (*SubsumeRequest) ProtoMessage() {} func (*SubsumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{87} + return fileDescriptor_api_95ac5de735b0e2a7, []int{87} } func (m *SubsumeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4441,7 +4441,7 @@ func (m *SubsumeResponse) Reset() { *m = SubsumeResponse{} } func (m *SubsumeResponse) String() string { return proto.CompactTextString(m) } func (*SubsumeResponse) ProtoMessage() {} func (*SubsumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{88} + return fileDescriptor_api_95ac5de735b0e2a7, []int{88} } func (m *SubsumeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4476,7 +4476,7 @@ func (m *RangeStatsRequest) Reset() { *m = RangeStatsRequest{} } func (m *RangeStatsRequest) String() string { return proto.CompactTextString(m) } func (*RangeStatsRequest) ProtoMessage() {} func (*RangeStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{89} + return fileDescriptor_api_95ac5de735b0e2a7, []int{89} } func (m *RangeStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4515,7 +4515,7 @@ func (m *RangeStatsResponse) Reset() { *m = RangeStatsResponse{} } func (m *RangeStatsResponse) String() string { return proto.CompactTextString(m) } func (*RangeStatsResponse) ProtoMessage() {} func (*RangeStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{90} + return fileDescriptor_api_95ac5de735b0e2a7, []int{90} } func (m *RangeStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4597,7 +4597,7 @@ func (m *RequestUnion) Reset() { *m = RequestUnion{} } func (m *RequestUnion) String() string { return proto.CompactTextString(m) } func (*RequestUnion) ProtoMessage() {} func (*RequestUnion) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{91} + return fileDescriptor_api_95ac5de735b0e2a7, []int{91} } func (m *RequestUnion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6016,7 +6016,7 @@ func (m *ResponseUnion) Reset() { *m = ResponseUnion{} } func (m *ResponseUnion) String() string { return proto.CompactTextString(m) } func (*ResponseUnion) ProtoMessage() {} func (*ResponseUnion) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{92} + return fileDescriptor_api_95ac5de735b0e2a7, []int{92} } func (m *ResponseUnion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7417,13 +7417,20 @@ type Header struct { // be much more straightforward if all transactional requests were // idempotent. We could just re-issue requests. See #26915. AsyncConsensus bool `protobuf:"varint,13,opt,name=async_consensus,json=asyncConsensus,proto3" json:"async_consensus,omitempty"` + // WriteTooOldErrors can either be returned immediately or deferred + // to the end of the transaction. By default they are returned + // immediately to maximize the SQL-level first-statement retry + // ability. Set this flag to request deferred errors, which can + // improve performance under heavy contention when client-side + // retries are already inevitable. + DeferWriteTooOldError bool `protobuf:"varint,14,opt,name=defer_write_too_old_error,json=deferWriteTooOldError,proto3" json:"defer_write_too_old_error,omitempty"` } func (m *Header) Reset() { *m = Header{} } func (m *Header) String() string { return proto.CompactTextString(m) } func (*Header) ProtoMessage() {} func (*Header) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{93} + return fileDescriptor_api_95ac5de735b0e2a7, []int{93} } func (m *Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7459,7 +7466,7 @@ type BatchRequest struct { func (m *BatchRequest) Reset() { *m = BatchRequest{} } func (*BatchRequest) ProtoMessage() {} func (*BatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{94} + return fileDescriptor_api_95ac5de735b0e2a7, []int{94} } func (m *BatchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7496,7 +7503,7 @@ type BatchResponse struct { func (m *BatchResponse) Reset() { *m = BatchResponse{} } func (*BatchResponse) ProtoMessage() {} func (*BatchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{95} + return fileDescriptor_api_95ac5de735b0e2a7, []int{95} } func (m *BatchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7555,7 +7562,7 @@ func (m *BatchResponse_Header) Reset() { *m = BatchResponse_Header{} } func (m *BatchResponse_Header) String() string { return proto.CompactTextString(m) } func (*BatchResponse_Header) ProtoMessage() {} func (*BatchResponse_Header) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{95, 0} + return fileDescriptor_api_95ac5de735b0e2a7, []int{95, 0} } func (m *BatchResponse_Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7591,7 +7598,7 @@ func (m *RangeFeedRequest) Reset() { *m = RangeFeedRequest{} } func (m *RangeFeedRequest) String() string { return proto.CompactTextString(m) } func (*RangeFeedRequest) ProtoMessage() {} func (*RangeFeedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{96} + return fileDescriptor_api_95ac5de735b0e2a7, []int{96} } func (m *RangeFeedRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7627,7 +7634,7 @@ func (m *RangeFeedValue) Reset() { *m = RangeFeedValue{} } func (m *RangeFeedValue) String() string { return proto.CompactTextString(m) } func (*RangeFeedValue) ProtoMessage() {} func (*RangeFeedValue) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{97} + return fileDescriptor_api_95ac5de735b0e2a7, []int{97} } func (m *RangeFeedValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7668,7 +7675,7 @@ func (m *RangeFeedCheckpoint) Reset() { *m = RangeFeedCheckpoint{} } func (m *RangeFeedCheckpoint) String() string { return proto.CompactTextString(m) } func (*RangeFeedCheckpoint) ProtoMessage() {} func (*RangeFeedCheckpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{98} + return fileDescriptor_api_95ac5de735b0e2a7, []int{98} } func (m *RangeFeedCheckpoint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7705,7 +7712,7 @@ func (m *RangeFeedError) Reset() { *m = RangeFeedError{} } func (m *RangeFeedError) String() string { return proto.CompactTextString(m) } func (*RangeFeedError) ProtoMessage() {} func (*RangeFeedError) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{99} + return fileDescriptor_api_95ac5de735b0e2a7, []int{99} } func (m *RangeFeedError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7742,7 +7749,7 @@ func (m *RangeFeedEvent) Reset() { *m = RangeFeedEvent{} } func (m *RangeFeedEvent) String() string { return proto.CompactTextString(m) } func (*RangeFeedEvent) ProtoMessage() {} func (*RangeFeedEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_api_b8e0fb4b85efc941, []int{100} + return fileDescriptor_api_95ac5de735b0e2a7, []int{100} } func (m *RangeFeedEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15234,6 +15241,16 @@ func (m *Header) MarshalTo(dAtA []byte) (int, error) { } i++ } + if m.DeferWriteTooOldError { + dAtA[i] = 0x70 + i++ + if m.DeferWriteTooOldError { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } return i, nil } @@ -18366,6 +18383,9 @@ func (m *Header) Size() (n int) { if m.AsyncConsensus { n += 2 } + if m.DeferWriteTooOldError { + n += 2 + } return n } @@ -34270,6 +34290,26 @@ func (m *Header) Unmarshal(dAtA []byte) error { } } m.AsyncConsensus = bool(v != 0) + case 14: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DeferWriteTooOldError", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.DeferWriteTooOldError = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -35385,428 +35425,430 @@ var ( ErrIntOverflowApi = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_api_b8e0fb4b85efc941) } - -var fileDescriptor_api_b8e0fb4b85efc941 = []byte{ - // 6720 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x5b, 0x6c, 0x23, 0xc9, - 0x75, 0xb6, 0x9a, 0xa4, 0x28, 0xf2, 0xf0, 0xa2, 0x56, 0x69, 0x2e, 0x1c, 0xed, 0xae, 0xa4, 0xe1, - 0x5c, 0x77, 0x76, 0x57, 0xe3, 0x99, 0xf1, 0xda, 0xfe, 0x77, 0xed, 0xb5, 0x45, 0x8a, 0x33, 0xe4, - 0x68, 0x74, 0xd9, 0x26, 0x35, 0xeb, 0x59, 0xff, 0xfb, 0xb7, 0x5b, 0xdd, 0x25, 0xaa, 0x3d, 0x64, - 0x37, 0xa7, 0xbb, 0x39, 0x92, 0x06, 0xf8, 0x11, 0x20, 0x2f, 0x4e, 0x0c, 0xc3, 0xc8, 0x43, 0x10, - 0x04, 0x76, 0x82, 0x18, 0xb0, 0x81, 0x00, 0x0e, 0x62, 0xc4, 0x81, 0x81, 0x20, 0x41, 0x02, 0x3f, - 0x24, 0x0f, 0x0b, 0xc3, 0x0f, 0x8b, 0x20, 0x4e, 0x8c, 0x3c, 0x08, 0xc9, 0x38, 0x81, 0x8d, 0xbc, - 0xe6, 0x21, 0xc0, 0x3e, 0x04, 0x41, 0x5d, 0xfa, 0x42, 0xb2, 0x79, 0x91, 0xdc, 0x8b, 0x6c, 0x90, - 0x27, 0x76, 0x9f, 0xaa, 0x73, 0xba, 0x2e, 0xa7, 0x4e, 0x9d, 0xaf, 0xea, 0x54, 0x11, 0xe6, 0x2c, - 0x53, 0x51, 0xf7, 0x3b, 0xbb, 0x37, 0x95, 0x8e, 0xbe, 0xd2, 0xb1, 0x4c, 0xc7, 0x44, 0x73, 0xaa, - 0xa9, 0x3e, 0xa6, 0xe4, 0x15, 0x9e, 0xb8, 0x80, 0xdc, 0x5c, 0x9a, 0xe2, 0x28, 0x2c, 0xdb, 0xc2, - 0x19, 0x97, 0x86, 0x2d, 0xcb, 0xb4, 0x6c, 0x4e, 0x3d, 0xe7, 0x52, 0xdb, 0xd8, 0x51, 0x02, 0xb9, - 0x8b, 0xb6, 0x63, 0x5a, 0x4a, 0x13, 0xdf, 0xc4, 0x46, 0x53, 0x37, 0xdc, 0x1f, 0x92, 0xef, 0xa9, - 0xaa, 0xf2, 0x3c, 0x97, 0x46, 0xe5, 0xb9, 0xc3, 0x33, 0x15, 0xba, 0x8e, 0xde, 0xba, 0xb9, 0xdf, - 0x52, 0x6f, 0x3a, 0x7a, 0x1b, 0xdb, 0x8e, 0xd2, 0xee, 0xf0, 0x94, 0x65, 0x9a, 0xe2, 0x58, 0x8a, - 0xaa, 0x1b, 0xcd, 0x9b, 0x16, 0x56, 0x4d, 0x4b, 0xc3, 0x9a, 0x6c, 0x77, 0x14, 0xc3, 0x2d, 0x72, - 0xd3, 0x6c, 0x9a, 0xf4, 0xf1, 0x26, 0x79, 0x62, 0xd4, 0xe2, 0xaf, 0x41, 0x5a, 0x52, 0x8c, 0x26, - 0xae, 0x19, 0x7b, 0x26, 0xfa, 0x2c, 0x24, 0x34, 0x6c, 0xab, 0x05, 0x61, 0x59, 0xb8, 0x9e, 0xb9, - 0x5d, 0x5c, 0x19, 0x68, 0x8b, 0x15, 0x9a, 0x77, 0x0d, 0xdb, 0xaa, 0xa5, 0x77, 0x1c, 0xd3, 0x2a, - 0x25, 0xde, 0x3f, 0x5e, 0x9a, 0x92, 0x28, 0x17, 0xfa, 0x24, 0x4c, 0xb7, 0xb0, 0x62, 0xe3, 0x42, - 0x8c, 0xb2, 0x17, 0x42, 0xd8, 0x1f, 0x90, 0x74, 0xce, 0xc4, 0x32, 0x17, 0xff, 0x5a, 0x80, 0x9c, - 0x84, 0x9f, 0x74, 0xb1, 0xed, 0x54, 0xb1, 0xa2, 0x61, 0x0b, 0x5d, 0x80, 0xf8, 0x63, 0x7c, 0x54, - 0x88, 0x2f, 0x0b, 0xd7, 0xb3, 0xa5, 0x99, 0x0f, 0x8f, 0x97, 0xe2, 0xeb, 0xf8, 0x48, 0x22, 0x34, - 0xb4, 0x0c, 0x33, 0xd8, 0xd0, 0x64, 0x92, 0x9c, 0xe8, 0x4d, 0x4e, 0x62, 0x43, 0x5b, 0xc7, 0x47, - 0x48, 0x85, 0x94, 0x4d, 0xa4, 0x19, 0x2a, 0x2e, 0x4c, 0x2f, 0x0b, 0xd7, 0xa7, 0x4b, 0xf7, 0x3e, - 0x3c, 0x5e, 0x2a, 0x37, 0x75, 0x67, 0xbf, 0xbb, 0xbb, 0xa2, 0x9a, 0xed, 0x9b, 0x5e, 0xa9, 0xb4, - 0x5d, 0xff, 0xf9, 0x66, 0xe7, 0x71, 0xf3, 0xe6, 0x90, 0x1e, 0x58, 0x69, 0x1c, 0x1a, 0x75, 0xfc, - 0x44, 0xf2, 0x04, 0xbf, 0x91, 0xf8, 0xe5, 0xb7, 0x97, 0x84, 0xfb, 0x89, 0x94, 0x20, 0xc6, 0xee, - 0x27, 0x52, 0x31, 0x31, 0x5e, 0xfc, 0x7a, 0x1c, 0xf2, 0x12, 0xb6, 0x3b, 0xa6, 0x61, 0x63, 0x5e, - 0x8d, 0x4f, 0x40, 0xdc, 0x39, 0x34, 0x68, 0x35, 0x32, 0xb7, 0x17, 0x43, 0x1a, 0xa3, 0x61, 0x29, - 0x86, 0xad, 0xa8, 0x8e, 0x6e, 0x1a, 0x12, 0xc9, 0x8a, 0x3e, 0x03, 0x19, 0x0b, 0xdb, 0xdd, 0x36, - 0xa6, 0xdd, 0x46, 0x6b, 0x98, 0xb9, 0x7d, 0x3e, 0x84, 0xb3, 0xde, 0x51, 0x0c, 0x09, 0x58, 0x5e, - 0xf2, 0x8c, 0x2e, 0x40, 0xca, 0xe8, 0xb6, 0x49, 0xbb, 0xd8, 0xb4, 0xd6, 0x71, 0x69, 0xc6, 0xe8, - 0xb6, 0xd7, 0xf1, 0x91, 0x8d, 0xca, 0x90, 0xb1, 0x48, 0xa7, 0xc9, 0xba, 0xb1, 0x67, 0xda, 0x85, - 0xe4, 0x72, 0xfc, 0x7a, 0xe6, 0xf6, 0x8b, 0xc3, 0xba, 0x96, 0xa8, 0x01, 0xef, 0x1f, 0xb0, 0x5c, - 0x82, 0x8d, 0xea, 0x90, 0xe3, 0x25, 0xb3, 0xb0, 0x62, 0x9b, 0x46, 0x61, 0x66, 0x59, 0xb8, 0x9e, - 0xbf, 0xbd, 0x12, 0x26, 0xa6, 0xa7, 0x15, 0xc8, 0x6b, 0xb7, 0x8d, 0x25, 0xca, 0x25, 0x65, 0xad, - 0xc0, 0x5b, 0xf1, 0x11, 0x64, 0x83, 0xa9, 0x08, 0x41, 0x5e, 0xaa, 0xd4, 0x77, 0x36, 0x2a, 0xf2, - 0xce, 0xe6, 0xfa, 0xe6, 0xd6, 0x3b, 0x9b, 0xe2, 0x14, 0x3a, 0x03, 0x22, 0xa7, 0xad, 0x57, 0x1e, - 0xc9, 0x0f, 0x6a, 0x1b, 0xb5, 0x86, 0x28, 0xa0, 0x0b, 0x70, 0x96, 0x53, 0xa5, 0xd5, 0xcd, 0x7b, - 0x15, 0xb9, 0xb4, 0xb5, 0xb3, 0xb9, 0xb6, 0x2a, 0x3d, 0x12, 0x63, 0x0b, 0x89, 0xdf, 0xf8, 0xce, - 0xe2, 0x54, 0xf1, 0x21, 0xc0, 0x3d, 0xec, 0x70, 0xb5, 0x42, 0x25, 0x48, 0xee, 0xd3, 0xd2, 0x70, - 0xc5, 0x5e, 0x0e, 0x2d, 0x76, 0x40, 0x05, 0x4b, 0x29, 0xd2, 0x02, 0x1f, 0x1c, 0x2f, 0x09, 0x12, - 0xe7, 0x64, 0x5d, 0x5e, 0xfc, 0x91, 0x00, 0x19, 0x2a, 0x98, 0xd5, 0x11, 0x95, 0xfb, 0x24, 0x5f, - 0x1c, 0xdb, 0x20, 0x83, 0xa2, 0xd1, 0x0a, 0x4c, 0x3f, 0x55, 0x5a, 0xdd, 0x51, 0xe3, 0xe6, 0x21, - 0x49, 0x97, 0x58, 0x36, 0xf4, 0x26, 0x64, 0x75, 0xc3, 0xc1, 0x86, 0x23, 0x33, 0xb6, 0xf8, 0x18, - 0xb6, 0x0c, 0xcb, 0x4d, 0x5f, 0x8a, 0x7f, 0x21, 0x00, 0x6c, 0x77, 0xa3, 0x6c, 0x1a, 0x32, 0xee, - 0x27, 0x2a, 0xbf, 0x3b, 0xee, 0x59, 0x2d, 0xce, 0x41, 0x52, 0x37, 0x5a, 0xba, 0xc1, 0xca, 0x9f, - 0x92, 0xf8, 0x1b, 0x3a, 0x03, 0xd3, 0xbb, 0x2d, 0xdd, 0xd0, 0xa8, 0xfa, 0xa7, 0x24, 0xf6, 0xc2, - 0x9b, 0x5f, 0x82, 0x0c, 0x2d, 0x7b, 0x84, 0xad, 0x5f, 0xfc, 0x66, 0x0c, 0xce, 0x96, 0x4d, 0x43, - 0xd3, 0xc9, 0x38, 0x54, 0x5a, 0x1f, 0x8b, 0xb6, 0x79, 0x1d, 0xd2, 0xf8, 0xb0, 0x33, 0x61, 0xf7, - 0xa6, 0xf0, 0x61, 0x87, 0x3e, 0x85, 0x37, 0x1d, 0xfa, 0x24, 0x9c, 0x57, 0x5a, 0x2d, 0xf3, 0x40, - 0xd6, 0xf7, 0x64, 0xcd, 0xc4, 0xb6, 0x6c, 0x98, 0x8e, 0x8c, 0x0f, 0x75, 0xdb, 0xa1, 0xa6, 0x22, - 0x25, 0xcd, 0xd3, 0xe4, 0xda, 0xde, 0x9a, 0x89, 0xed, 0x4d, 0xd3, 0xa9, 0x90, 0x24, 0xde, 0xe0, - 0xef, 0xc1, 0xb9, 0xfe, 0xb6, 0x89, 0xb2, 0xed, 0xff, 0x56, 0x80, 0x7c, 0xcd, 0xd0, 0x9d, 0x8f, - 0x45, 0xa3, 0x7b, 0xad, 0x17, 0x0f, 0xb6, 0xde, 0x0d, 0x10, 0xf7, 0x14, 0xbd, 0xb5, 0x65, 0x34, - 0xcc, 0xf6, 0xae, 0xed, 0x98, 0x06, 0xb6, 0x79, 0xf3, 0x0e, 0xd0, 0x79, 0x9b, 0x3d, 0x84, 0x59, - 0xaf, 0x4e, 0x51, 0x36, 0xd6, 0x33, 0x10, 0x6b, 0x86, 0x6a, 0xe1, 0x36, 0x36, 0x22, 0x6d, 0xad, - 0x17, 0x21, 0xad, 0xbb, 0x72, 0x69, 0x8b, 0xc5, 0x25, 0x9f, 0xc0, 0xeb, 0xd4, 0x85, 0xb9, 0xc0, - 0xb7, 0xa3, 0x34, 0x7e, 0x2f, 0x40, 0xda, 0xc0, 0x07, 0xb2, 0xdf, 0x5f, 0x71, 0x29, 0x65, 0xe0, - 0x03, 0x66, 0xac, 0x1e, 0x41, 0x6e, 0x0d, 0xb7, 0xb0, 0x83, 0xa3, 0xb7, 0xe4, 0x3b, 0x90, 0x77, - 0x45, 0x47, 0xd9, 0x49, 0xbf, 0x2f, 0x00, 0xe2, 0x72, 0xc9, 0xec, 0x19, 0x65, 0x3f, 0x2d, 0x11, - 0xef, 0xc0, 0xe9, 0x5a, 0x06, 0x9b, 0xe6, 0x99, 0x96, 0x02, 0x23, 0xd1, 0x99, 0xde, 0xb7, 0xa8, - 0x89, 0xa0, 0x45, 0xf5, 0xbc, 0x15, 0xe2, 0xa7, 0x1c, 0xc0, 0x7c, 0x4f, 0xf1, 0xa2, 0xed, 0xca, - 0x04, 0x2d, 0x59, 0x6c, 0x39, 0x1e, 0xf4, 0xcc, 0x28, 0xb1, 0xf8, 0x1e, 0xcc, 0x95, 0x5b, 0x58, - 0xb1, 0xa2, 0x6e, 0x16, 0xde, 0x9d, 0x8f, 0x00, 0x05, 0xc5, 0x47, 0xd9, 0xa5, 0x3a, 0x64, 0xea, - 0xaa, 0x62, 0x6c, 0x75, 0x88, 0x11, 0xb4, 0xd1, 0x1d, 0x38, 0x67, 0x3b, 0x66, 0x47, 0x56, 0x1c, - 0x99, 0xf9, 0x55, 0xbb, 0x66, 0xd7, 0xd0, 0x14, 0xeb, 0x88, 0x7e, 0x23, 0x25, 0xcd, 0x93, 0xd4, - 0x55, 0x87, 0x16, 0xa4, 0xc4, 0x93, 0x48, 0xdf, 0xb5, 0x75, 0x43, 0x26, 0xee, 0x4f, 0xcb, 0xb1, - 0xb9, 0x9e, 0x43, 0x5b, 0x37, 0x24, 0x46, 0xe1, 0xb5, 0xf8, 0x8e, 0xc0, 0xbe, 0x15, 0xa5, 0xda, - 0xbc, 0x05, 0x19, 0x5b, 0x55, 0x0c, 0x79, 0xcf, 0xb4, 0xda, 0x8a, 0x43, 0x55, 0x23, 0x7f, 0xfb, - 0xa5, 0x30, 0xa7, 0x52, 0x55, 0x8c, 0xbb, 0x34, 0x93, 0x04, 0xb6, 0xf7, 0x1c, 0xd4, 0x9e, 0xfb, - 0x89, 0x54, 0x5c, 0x4c, 0x14, 0xff, 0x43, 0x80, 0x2c, 0x2b, 0x65, 0x94, 0xda, 0xf3, 0x3a, 0x24, - 0x2c, 0xf3, 0x80, 0x69, 0x4f, 0xe6, 0xf6, 0x0b, 0x21, 0x22, 0xd6, 0xf1, 0x51, 0xd0, 0x6c, 0xd3, - 0xec, 0xa8, 0x04, 0xdc, 0xbd, 0x91, 0x29, 0x77, 0x7c, 0x52, 0x6e, 0x60, 0x5c, 0x12, 0x91, 0x71, - 0x0d, 0x66, 0x77, 0x15, 0x47, 0xdd, 0x27, 0xfd, 0x43, 0x0b, 0x49, 0x4c, 0x7c, 0xfc, 0x7a, 0x56, - 0xca, 0x53, 0xb2, 0x5b, 0x74, 0xbb, 0xf8, 0x3d, 0x01, 0x90, 0x84, 0x9f, 0x62, 0xcb, 0xc6, 0x1f, - 0xff, 0x6e, 0xfa, 0x4f, 0x01, 0xe6, 0x7b, 0x0a, 0xfb, 0xbf, 0xad, 0xb7, 0x7e, 0x2a, 0xc0, 0xf9, - 0xf2, 0x3e, 0x56, 0x1f, 0x97, 0x4d, 0xc3, 0xd6, 0x6d, 0x07, 0x1b, 0xea, 0x51, 0x94, 0x5d, 0xf6, - 0x02, 0xa4, 0x0f, 0x74, 0x67, 0x5f, 0xd6, 0xf4, 0xbd, 0x3d, 0x3a, 0xa4, 0x53, 0x52, 0x8a, 0x10, - 0xd6, 0xf4, 0xbd, 0x3d, 0x74, 0x07, 0x12, 0x6d, 0x53, 0x63, 0xde, 0x5b, 0xfe, 0xf6, 0x52, 0x88, - 0x78, 0x5a, 0x34, 0xbb, 0xdb, 0xde, 0x30, 0x35, 0x2c, 0xd1, 0xcc, 0x68, 0x11, 0x40, 0x25, 0xd4, - 0x8e, 0xa9, 0x1b, 0x0e, 0xb7, 0xe2, 0x01, 0x0a, 0xb7, 0x12, 0xdf, 0x48, 0x40, 0x61, 0xb0, 0x5e, - 0x51, 0xf6, 0xee, 0x36, 0x24, 0x99, 0xa9, 0xe2, 0xfd, 0x7b, 0x7b, 0x58, 0xf1, 0x43, 0x4a, 0xb0, - 0xc2, 0x4c, 0x1a, 0xef, 0x38, 0x2e, 0x67, 0xe1, 0x2f, 0x05, 0x48, 0xb2, 0x04, 0x74, 0x0b, 0x52, - 0x1c, 0x90, 0x6a, 0xb4, 0x8c, 0xf1, 0xd2, 0xb9, 0xe7, 0xc7, 0x4b, 0x33, 0x0c, 0x7e, 0xae, 0x7d, - 0xe8, 0x3f, 0x4a, 0x33, 0x0c, 0x81, 0x6a, 0xa4, 0xa5, 0x6d, 0x47, 0xb1, 0x1c, 0x0a, 0xfc, 0x49, - 0x4b, 0x67, 0xa5, 0x14, 0x25, 0x10, 0xc4, 0x7f, 0x1f, 0x92, 0xb6, 0xa3, 0x38, 0x5d, 0x9b, 0xb7, - 0xf5, 0x89, 0x0a, 0x5b, 0xa7, 0x9c, 0x12, 0x97, 0x40, 0xa6, 0x50, 0x0d, 0x3b, 0x8a, 0xde, 0xa2, - 0x8d, 0x9f, 0x96, 0xf8, 0x5b, 0xf1, 0x5b, 0x02, 0x24, 0x59, 0x56, 0x74, 0x1e, 0xe6, 0x19, 0xe8, - 0xac, 0x6d, 0xae, 0x55, 0x1a, 0x15, 0x69, 0xa3, 0xb6, 0xb9, 0xda, 0xa8, 0x88, 0x53, 0xe8, 0x1c, - 0x20, 0x37, 0xa1, 0xbc, 0xb5, 0x59, 0xaf, 0xd5, 0x1b, 0x95, 0x4d, 0x02, 0x56, 0x09, 0x84, 0xa5, - 0xf4, 0x00, 0x35, 0x86, 0x2e, 0xc3, 0x72, 0x3f, 0x55, 0xae, 0x37, 0x56, 0x1b, 0x75, 0xb9, 0x52, - 0x6f, 0xd4, 0x36, 0x56, 0x1b, 0x95, 0x35, 0x31, 0x3e, 0x22, 0x17, 0xf9, 0x88, 0x24, 0x55, 0xca, - 0x0d, 0x31, 0x51, 0x7c, 0x06, 0x67, 0x25, 0xac, 0x9a, 0xed, 0x4e, 0xd7, 0xc1, 0xa4, 0x94, 0x76, - 0x94, 0x5a, 0x7e, 0x1e, 0x66, 0x34, 0xeb, 0x48, 0xb6, 0xba, 0x06, 0xd7, 0xf1, 0xa4, 0x66, 0x1d, - 0x49, 0x5d, 0x83, 0x2b, 0xe3, 0x9f, 0x09, 0x70, 0xae, 0xff, 0xe3, 0x51, 0xaa, 0xe2, 0x17, 0x21, - 0xa3, 0x68, 0x1a, 0xd6, 0x64, 0x0d, 0xb7, 0x1c, 0x85, 0x7b, 0xf4, 0xb7, 0x02, 0x92, 0xf8, 0xa2, - 0xcd, 0x0a, 0x5b, 0xad, 0x59, 0xf1, 0x16, 0x6d, 0x36, 0x1e, 0x96, 0xcb, 0xb4, 0x3c, 0x6b, 0x84, - 0xd1, 0xb5, 0x23, 0x54, 0x16, 0xa5, 0x14, 0x55, 0x38, 0x5f, 0xc2, 0x4d, 0xdd, 0x08, 0x2e, 0xc3, - 0x44, 0xee, 0x97, 0xc8, 0x50, 0x18, 0xfc, 0x48, 0x94, 0xde, 0xc9, 0x77, 0x13, 0x70, 0xb6, 0x62, - 0x68, 0x1f, 0x4d, 0x25, 0xc8, 0x78, 0x50, 0xcd, 0x76, 0x5b, 0x77, 0xdc, 0xbe, 0x67, 0x6f, 0xe8, - 0xff, 0x40, 0x4a, 0xc3, 0x8a, 0xe6, 0xc1, 0xf7, 0x4c, 0xcf, 0x54, 0xd5, 0x75, 0xf4, 0xd6, 0xca, - 0x7e, 0x4b, 0x5d, 0x69, 0xb8, 0x8b, 0x94, 0x92, 0x97, 0x1d, 0x7d, 0x19, 0xce, 0x13, 0x63, 0x6e, - 0x19, 0x4a, 0x4b, 0x66, 0xd2, 0x64, 0xc7, 0xd2, 0x9b, 0x4d, 0x6c, 0xf1, 0x05, 0xaf, 0xeb, 0x21, - 0xe5, 0xac, 0x71, 0x8e, 0x32, 0x65, 0x68, 0xb0, 0xfc, 0xd2, 0x59, 0x3d, 0x8c, 0x8c, 0xbe, 0xe0, - 0xad, 0x8f, 0xd8, 0x1d, 0xc5, 0xb0, 0x0b, 0xd3, 0xd4, 0x86, 0x0d, 0x5b, 0x47, 0xe3, 0x9a, 0xc1, - 0xe7, 0x25, 0x42, 0xb1, 0xd1, 0x4d, 0xe2, 0x6a, 0x3f, 0xe9, 0xea, 0x16, 0x96, 0x6f, 0x75, 0xd4, - 0x42, 0x92, 0xd4, 0xbd, 0x94, 0x7f, 0x7e, 0xbc, 0x04, 0x12, 0x23, 0xdf, 0xda, 0x2e, 0x13, 0xd7, - 0x9b, 0x3d, 0x77, 0x54, 0x74, 0x1d, 0x44, 0xc3, 0x94, 0x2d, 0xbc, 0x67, 0x61, 0x7b, 0x9f, 0x7f, - 0x36, 0x45, 0x5b, 0x2c, 0x6f, 0x98, 0x12, 0x23, 0x33, 0xd1, 0xe7, 0x20, 0xd9, 0x31, 0x75, 0xdb, - 0x34, 0x0a, 0x69, 0xd6, 0xa2, 0xec, 0x0d, 0xbd, 0x0d, 0xa2, 0x6e, 0xc8, 0x7b, 0x2d, 0xbd, 0xb9, - 0xef, 0xc8, 0x07, 0x96, 0xee, 0x60, 0xbb, 0x30, 0x47, 0x0b, 0x1e, 0xa6, 0x16, 0x75, 0xbe, 0x12, - 0xa9, 0xbd, 0x43, 0x72, 0xf2, 0x2a, 0xe4, 0x75, 0xe3, 0x2e, 0xe5, 0xa7, 0x44, 0xdb, 0x73, 0x09, - 0x66, 0xc4, 0x54, 0xf1, 0x5f, 0x05, 0x38, 0xd7, 0xaf, 0x26, 0x51, 0x0e, 0xd3, 0xeb, 0x20, 0x9a, - 0x06, 0x96, 0x3b, 0xfb, 0x8a, 0x8d, 0x79, 0xb7, 0xf2, 0xf9, 0x2b, 0x6f, 0x1a, 0x78, 0x9b, 0x90, - 0x59, 0x27, 0xa1, 0x6d, 0x98, 0xb3, 0x1d, 0xa5, 0xa9, 0x1b, 0x4d, 0xd9, 0x5b, 0xc3, 0xa6, 0x0b, - 0x11, 0xe3, 0x74, 0x88, 0xd7, 0x52, 0xe4, 0xdc, 0x1e, 0xbd, 0xc7, 0xe9, 0xf9, 0x07, 0x01, 0xe6, - 0x56, 0xb5, 0xb6, 0x6e, 0xd4, 0x3b, 0x2d, 0x3d, 0x52, 0x98, 0x7c, 0x19, 0xd2, 0x36, 0x91, 0xe9, - 0xcf, 0x41, 0x3e, 0xc4, 0x49, 0xd1, 0x14, 0x32, 0x19, 0x3d, 0x80, 0x59, 0x7c, 0xd8, 0xd1, 0x2d, - 0x85, 0x34, 0x31, 0xad, 0x20, 0xd7, 0xea, 0x89, 0xea, 0x96, 0xf7, 0x79, 0x49, 0x92, 0xd7, 0x83, - 0xa4, 0x66, 0x8f, 0x00, 0x05, 0x2b, 0x16, 0xa5, 0x0d, 0x91, 0x61, 0x9e, 0x8a, 0xde, 0x31, 0xec, - 0x88, 0x5b, 0x8d, 0x5b, 0xc1, 0x2f, 0xc1, 0x99, 0xde, 0x0f, 0x44, 0x59, 0xfa, 0xf7, 0x78, 0x8f, - 0x6f, 0x60, 0xeb, 0x23, 0x42, 0x96, 0x41, 0xf1, 0x51, 0x96, 0xfc, 0x6b, 0x02, 0x5c, 0xa0, 0xb2, - 0xe9, 0xb0, 0xdc, 0xc3, 0x16, 0xdd, 0x1e, 0x89, 0x52, 0x69, 0x2f, 0x41, 0xd2, 0x51, 0xac, 0x26, - 0x66, 0xf6, 0x7b, 0xba, 0x94, 0x21, 0xee, 0x55, 0xdd, 0x31, 0x2d, 0xe2, 0x5e, 0xf1, 0x24, 0x5e, - 0x4f, 0x05, 0x16, 0xc2, 0xca, 0x12, 0x65, 0x7d, 0xff, 0x34, 0xc6, 0xbf, 0x51, 0xde, 0x67, 0x30, - 0xbd, 0xd3, 0xd2, 0x55, 0x25, 0x52, 0x6f, 0xa5, 0x02, 0x19, 0x95, 0x0a, 0x97, 0x9d, 0xa3, 0x0e, - 0x5b, 0x50, 0xca, 0xdf, 0xbe, 0x1c, 0x2a, 0x88, 0x7e, 0x9c, 0x95, 0xa4, 0x71, 0xd4, 0xc1, 0xc4, - 0xd1, 0x76, 0x9f, 0xd1, 0x1a, 0xcc, 0xb0, 0xc6, 0x71, 0x31, 0xca, 0x08, 0x11, 0x74, 0xb4, 0xd2, - 0xcc, 0x7c, 0x14, 0xbb, 0xac, 0xe8, 0x73, 0x90, 0xc2, 0x87, 0x1d, 0x99, 0x6e, 0xa9, 0x25, 0x26, - 0xdd, 0x52, 0x93, 0x66, 0xf0, 0x61, 0x87, 0xbc, 0xf2, 0x7e, 0xf9, 0xa6, 0x00, 0x2f, 0x84, 0x36, - 0x5a, 0x94, 0xe6, 0xfb, 0x53, 0x7c, 0xe3, 0x2f, 0x36, 0x71, 0x29, 0x69, 0xfe, 0xe2, 0x1f, 0xb9, - 0x1a, 0x2c, 0xe1, 0x96, 0xa9, 0x2a, 0x1f, 0xc1, 0xaa, 0x57, 0xa0, 0x27, 0x62, 0xa7, 0xee, 0x89, - 0x3e, 0x15, 0xef, 0x2b, 0x6c, 0x94, 0x2a, 0xfe, 0x3b, 0x02, 0xcc, 0x57, 0xb1, 0x62, 0x39, 0xbb, - 0x58, 0x71, 0x1a, 0x87, 0x91, 0x3a, 0x63, 0xaf, 0x43, 0xdc, 0x30, 0x0f, 0x78, 0x1f, 0x4d, 0x34, - 0x9f, 0x90, 0xfc, 0xbe, 0x09, 0xee, 0x2d, 0x57, 0x94, 0xb5, 0xfe, 0x41, 0x1c, 0xd2, 0xf7, 0xca, - 0x51, 0xd6, 0xf5, 0xb3, 0x7c, 0x2d, 0x91, 0x8d, 0xbe, 0x30, 0x85, 0xf4, 0xbe, 0xb7, 0x72, 0xaf, - 0xbc, 0x8e, 0x8f, 0xdc, 0x65, 0x06, 0xc2, 0x85, 0x56, 0x21, 0xed, 0xec, 0x13, 0x9f, 0xcb, 0x6c, - 0x69, 0x27, 0x99, 0x7f, 0x7d, 0x2e, 0xd4, 0x82, 0xb3, 0xce, 0xa1, 0x41, 0x5d, 0x39, 0xb9, 0xa9, - 0xca, 0xbe, 0xb8, 0x89, 0x5c, 0x95, 0x05, 0x22, 0xee, 0xf9, 0xf1, 0x12, 0x6a, 0x1c, 0x1a, 0xc4, - 0xef, 0xbb, 0x57, 0x6e, 0xb8, 0x02, 0x24, 0xe4, 0x70, 0x9a, 0xea, 0xd1, 0x16, 0x1e, 0xc3, 0x34, - 0xad, 0x85, 0xbb, 0xf7, 0x2d, 0x84, 0xec, 0x7d, 0x93, 0x4a, 0x79, 0x0e, 0x53, 0xec, 0x24, 0x95, - 0x72, 0x09, 0x4c, 0x15, 0xb8, 0x42, 0xbc, 0x0d, 0x40, 0x9a, 0x30, 0x4a, 0x35, 0xf8, 0xf3, 0x38, - 0xe4, 0xb7, 0xbb, 0xf6, 0x7e, 0xc4, 0x7a, 0x5f, 0x06, 0xe8, 0x74, 0xed, 0x7d, 0x6c, 0xc9, 0xce, - 0xa1, 0xc1, 0x6b, 0x3e, 0x66, 0x3f, 0xdd, 0xad, 0x3a, 0xe3, 0x6b, 0x1c, 0x1a, 0x68, 0x8b, 0x0b, - 0xc1, 0xb2, 0xbf, 0x29, 0x7f, 0x63, 0x02, 0x18, 0xd9, 0x38, 0x34, 0x36, 0xb0, 0x87, 0x1f, 0x99, - 0x40, 0x4c, 0x04, 0x7e, 0x16, 0x66, 0xc8, 0x8b, 0xec, 0x98, 0x27, 0xd1, 0xb0, 0x24, 0xe1, 0x69, - 0x98, 0xe8, 0x4d, 0x48, 0x33, 0x6e, 0x32, 0x4b, 0x25, 0xe9, 0x2c, 0x15, 0x56, 0x25, 0xde, 0x9a, - 0x74, 0x7e, 0x4a, 0x51, 0x56, 0x32, 0x3b, 0x9d, 0x81, 0xe9, 0x3d, 0xd3, 0x52, 0x31, 0xdd, 0x85, - 0x4f, 0x49, 0xec, 0x05, 0xdd, 0x80, 0x39, 0xdd, 0x50, 0x5b, 0x5d, 0x5b, 0x7f, 0x8a, 0x65, 0xb7, - 0x68, 0x0c, 0x64, 0xcc, 0x7a, 0x09, 0x54, 0xa0, 0xe9, 0x39, 0x96, 0xd3, 0x62, 0xf2, 0x7e, 0x22, - 0x95, 0x12, 0xd3, 0xc5, 0x6f, 0x09, 0x30, 0xeb, 0xf5, 0x5d, 0x94, 0x53, 0x4b, 0xb9, 0xa7, 0xe1, - 0x4f, 0xde, 0x7b, 0xa4, 0xb1, 0x8b, 0x7f, 0x27, 0xc0, 0x9c, 0x84, 0x55, 0xf3, 0x29, 0xed, 0xcc, - 0x28, 0x95, 0xab, 0xc4, 0xa2, 0x34, 0x62, 0xa7, 0x54, 0x08, 0x1a, 0xb7, 0x71, 0x0b, 0xce, 0xe8, - 0x6d, 0x32, 0x03, 0xe9, 0x4e, 0xeb, 0x88, 0xa3, 0x1f, 0x07, 0xbb, 0x1b, 0x89, 0xf3, 0x7e, 0x5a, - 0xd9, 0x4d, 0xe2, 0x63, 0xf0, 0xbb, 0x74, 0x3d, 0xd9, 0xaf, 0x56, 0x94, 0xed, 0x5e, 0x83, 0x9c, - 0xc5, 0x44, 0x63, 0xed, 0xc4, 0x4d, 0x9f, 0xf5, 0x58, 0x49, 0xeb, 0x7f, 0x3f, 0x06, 0xb3, 0x6f, - 0x77, 0xb1, 0x75, 0xf4, 0x31, 0x6c, 0xfb, 0xab, 0x30, 0x7b, 0xa0, 0xe8, 0x8e, 0xbc, 0x67, 0x5a, - 0x72, 0xb7, 0xa3, 0x29, 0x8e, 0x1b, 0x4f, 0x90, 0x23, 0xe4, 0xbb, 0xa6, 0xb5, 0x43, 0x89, 0x08, - 0x03, 0x7a, 0x6c, 0x98, 0x07, 0x86, 0x4c, 0xc8, 0x14, 0x7c, 0x1e, 0x1a, 0x7c, 0xe1, 0xb8, 0xf4, - 0xe9, 0x7f, 0x3c, 0x5e, 0xba, 0x33, 0x51, 0x84, 0x10, 0x0d, 0xb2, 0xea, 0x76, 0x75, 0x6d, 0x65, - 0x67, 0xa7, 0xb6, 0x26, 0x89, 0x54, 0xe4, 0x3b, 0x4c, 0x62, 0xe3, 0xd0, 0x70, 0x1d, 0x8d, 0x0f, - 0x05, 0x10, 0xfd, 0x06, 0x8b, 0xb2, 0x57, 0x2b, 0x90, 0x79, 0xd2, 0xc5, 0x96, 0x7e, 0x8a, 0x3e, - 0x05, 0xce, 0x48, 0x8c, 0xd7, 0xbb, 0x90, 0xed, 0x69, 0x87, 0xf8, 0xaf, 0xd6, 0x0e, 0x99, 0x03, - 0xbf, 0x09, 0x8a, 0x3f, 0x11, 0x00, 0xd1, 0xca, 0xd7, 0xd8, 0x9a, 0xfd, 0xc7, 0x4c, 0x61, 0xae, - 0x83, 0x48, 0x63, 0xf6, 0x64, 0x7d, 0x4f, 0x6e, 0xeb, 0xb6, 0xad, 0x1b, 0x4d, 0xae, 0x31, 0x79, - 0x4a, 0xaf, 0xed, 0x6d, 0x30, 0x2a, 0xef, 0xcb, 0xff, 0x0f, 0xf3, 0x3d, 0xb5, 0x89, 0xb2, 0x37, - 0x2f, 0x42, 0x76, 0xcf, 0xec, 0x1a, 0x9a, 0xcc, 0x16, 0x9f, 0xf8, 0x22, 0x5b, 0x86, 0xd2, 0xd8, - 0xf7, 0x8a, 0x5f, 0x8d, 0xc1, 0x19, 0x09, 0xdb, 0x66, 0xeb, 0x29, 0x8e, 0xbe, 0x3d, 0xb7, 0x80, - 0x6f, 0xac, 0xc8, 0xbf, 0x4a, 0xb3, 0xa6, 0x99, 0x0c, 0x36, 0x29, 0xf6, 0xae, 0xc5, 0x5f, 0x1e, - 0xad, 0x99, 0x83, 0xab, 0xef, 0x7c, 0x6d, 0x2c, 0x11, 0x5c, 0x1b, 0xe3, 0x1d, 0xf1, 0x7f, 0xe1, - 0x6c, 0x5f, 0x43, 0x44, 0xe9, 0xbb, 0xfc, 0x7d, 0x0c, 0x2e, 0xf4, 0x8a, 0x8f, 0x1a, 0xc9, 0xfc, - 0xcf, 0x68, 0x6c, 0x54, 0x85, 0x5c, 0x5b, 0x37, 0x4e, 0xb7, 0x36, 0x97, 0x6d, 0xeb, 0x46, 0xa3, - 0xd7, 0xdb, 0x24, 0xa0, 0x2b, 0xac, 0x5d, 0xa3, 0xec, 0xbb, 0x6f, 0x08, 0x90, 0x8d, 0x7a, 0xf5, - 0xe7, 0x74, 0x41, 0x44, 0xbc, 0xce, 0x0d, 0xc8, 0x7d, 0x04, 0xcb, 0x45, 0x7f, 0x28, 0x00, 0x6a, - 0x58, 0x5d, 0x83, 0x40, 0xd7, 0x07, 0x66, 0x33, 0xca, 0xca, 0x9e, 0x81, 0x69, 0xdd, 0xd0, 0xf0, - 0x21, 0xad, 0x6c, 0x42, 0x62, 0x2f, 0x3d, 0x3b, 0x75, 0xf1, 0x89, 0x76, 0xea, 0x78, 0xfd, 0xdf, - 0x85, 0xf9, 0x9e, 0x82, 0x46, 0xd9, 0x0a, 0xdf, 0x8f, 0xc1, 0x3c, 0xaf, 0x4e, 0xe4, 0xcb, 0x65, - 0xa7, 0x8a, 0x60, 0x46, 0x9f, 0x03, 0xe8, 0x58, 0xf8, 0xa9, 0xcc, 0x58, 0xe3, 0x13, 0xb1, 0xa6, - 0x09, 0x07, 0x25, 0xa0, 0x2f, 0xc2, 0x2c, 0x19, 0x70, 0x1d, 0xcb, 0xec, 0x98, 0x36, 0x99, 0xd7, - 0xed, 0xc9, 0x00, 0xc5, 0xdc, 0xf3, 0xe3, 0xa5, 0xdc, 0x86, 0x6e, 0x6c, 0x73, 0xc6, 0x46, 0x5d, - 0x22, 0x23, 0xd7, 0x7b, 0x75, 0x9d, 0x91, 0x9f, 0x0a, 0x70, 0xe6, 0x23, 0x5b, 0x60, 0xfc, 0xef, - 0x68, 0x31, 0x6f, 0x3e, 0x10, 0xe9, 0x6b, 0xcd, 0xd8, 0x33, 0xa3, 0x5f, 0xf6, 0xfd, 0x86, 0x00, - 0x73, 0x01, 0xf1, 0x51, 0xce, 0xfa, 0xa7, 0x8b, 0x93, 0xff, 0x12, 0xf1, 0x03, 0x82, 0x6a, 0x1f, - 0xe5, 0xa0, 0xfa, 0x77, 0x01, 0xce, 0x95, 0xd9, 0x1e, 0xae, 0x1b, 0x96, 0x10, 0xa5, 0x96, 0x14, - 0x60, 0xe6, 0x29, 0xb6, 0x6c, 0xdd, 0x64, 0xf3, 0x5e, 0x4e, 0x72, 0x5f, 0xd1, 0x02, 0xa4, 0x6c, - 0x43, 0xe9, 0xd8, 0xfb, 0xa6, 0xbb, 0x5f, 0xe4, 0xbd, 0x7b, 0x21, 0x14, 0xd3, 0xa7, 0x0f, 0xa1, - 0x48, 0x86, 0x87, 0x50, 0xf0, 0x2d, 0x95, 0x1f, 0x0b, 0x70, 0x7e, 0xa0, 0xd6, 0x51, 0xf6, 0xf4, - 0x57, 0x20, 0xa3, 0x72, 0xc1, 0xc4, 0x86, 0xb2, 0x5d, 0xa3, 0x1a, 0xc9, 0x76, 0x4a, 0x4f, 0xfb, - 0xf9, 0xf1, 0x12, 0xb8, 0x45, 0xad, 0xad, 0xf1, 0x8a, 0x91, 0x67, 0xad, 0xf8, 0x0b, 0x80, 0x5c, - 0xe5, 0xb0, 0x63, 0x5a, 0x4e, 0x9d, 0x39, 0x12, 0x68, 0x0d, 0x52, 0x1d, 0xcb, 0x7c, 0xaa, 0xbb, - 0x95, 0xc8, 0x87, 0x6e, 0xad, 0xf6, 0xf0, 0x6c, 0xf3, 0xfc, 0x92, 0xc7, 0x89, 0x24, 0x48, 0x3f, - 0x30, 0x55, 0xa5, 0x75, 0x57, 0x6f, 0xb9, 0x1a, 0xbb, 0x32, 0x4e, 0xcc, 0x8a, 0xc7, 0xb1, 0xad, - 0x38, 0xfb, 0xee, 0x00, 0xf6, 0x88, 0xe8, 0x1e, 0xa4, 0xaa, 0x8e, 0xd3, 0x21, 0x89, 0x7c, 0xf4, - 0x5f, 0x19, 0x2b, 0x92, 0x30, 0x70, 0x49, 0x1e, 0x33, 0x92, 0x60, 0xee, 0x9e, 0x69, 0x36, 0x5b, - 0xb8, 0xdc, 0x32, 0xbb, 0x5a, 0xd9, 0x34, 0xf6, 0xf4, 0x26, 0xb7, 0x9e, 0x97, 0xc7, 0x4a, 0xbc, - 0x57, 0xae, 0x4b, 0x83, 0xec, 0xe8, 0xf3, 0x90, 0xaa, 0xdf, 0xe1, 0xa2, 0x98, 0xef, 0x73, 0x69, - 0xac, 0xa8, 0xfa, 0x1d, 0xc9, 0x63, 0x42, 0x55, 0xc8, 0xac, 0x3e, 0xeb, 0x5a, 0x98, 0xcb, 0x48, - 0x52, 0x19, 0x57, 0xc7, 0xca, 0xa0, 0x3c, 0x52, 0x90, 0x15, 0xbd, 0x0d, 0xf9, 0x77, 0x4c, 0xeb, - 0x71, 0xcb, 0x54, 0xdc, 0xba, 0xcd, 0x50, 0x61, 0x2f, 0x8f, 0x15, 0xe6, 0xb2, 0x49, 0x7d, 0x02, - 0x16, 0xbe, 0x08, 0xb9, 0x9e, 0xce, 0x41, 0x08, 0x12, 0x1d, 0xd2, 0x0f, 0x02, 0x0d, 0x78, 0xa1, - 0xcf, 0xe8, 0x35, 0x98, 0x31, 0x4c, 0x0d, 0xbb, 0x3a, 0x9b, 0x2b, 0x9d, 0x79, 0x7e, 0xbc, 0x94, - 0xdc, 0x34, 0x35, 0x36, 0xed, 0xf3, 0x27, 0x29, 0x49, 0x32, 0xb9, 0x93, 0xfe, 0xc2, 0x55, 0x48, - 0x90, 0x7e, 0x21, 0x83, 0x7d, 0x57, 0xb1, 0xf1, 0x8e, 0xa5, 0x73, 0x99, 0xee, 0x2b, 0xcf, 0xf7, - 0x37, 0x02, 0xc4, 0xea, 0x77, 0x88, 0xff, 0xb9, 0xdb, 0x55, 0x1f, 0x63, 0x87, 0xe7, 0xe2, 0x6f, - 0xd4, 0x2f, 0xb5, 0xf0, 0x9e, 0xce, 0x7c, 0x91, 0xb4, 0xc4, 0xdf, 0xd0, 0x4b, 0x00, 0x8a, 0xaa, - 0x62, 0xdb, 0x96, 0xdd, 0xc3, 0x41, 0x69, 0x29, 0xcd, 0x28, 0xeb, 0xf8, 0x88, 0xb0, 0xd9, 0x58, - 0xb5, 0xb0, 0xe3, 0x46, 0xee, 0xb0, 0x37, 0xc2, 0xe6, 0xe0, 0x76, 0x47, 0x76, 0xcc, 0xc7, 0xd8, - 0xa0, 0xfd, 0x99, 0x96, 0xd2, 0x84, 0xd2, 0x20, 0x04, 0x62, 0x7f, 0xb0, 0xa1, 0xf9, 0xc6, 0x22, - 0x2d, 0x79, 0xef, 0x44, 0xa4, 0x85, 0x9b, 0x3a, 0x3f, 0xed, 0x92, 0x96, 0xf8, 0x1b, 0xaf, 0xc6, - 0x37, 0x05, 0x88, 0xdf, 0x2b, 0xd7, 0x4f, 0x5c, 0x0f, 0x04, 0x09, 0xa5, 0xcb, 0xf5, 0x3e, 0x2d, - 0xd1, 0x67, 0x1a, 0xd2, 0xa6, 0xb7, 0x5a, 0x04, 0x8e, 0x77, 0x2c, 0xf3, 0x2b, 0x58, 0x75, 0x6b, - 0x91, 0xe7, 0xe4, 0x6d, 0x46, 0x45, 0xcb, 0x90, 0x51, 0x2d, 0xac, 0x61, 0xc3, 0xd1, 0x95, 0x96, - 0xcd, 0xab, 0x13, 0x24, 0xf1, 0xc2, 0x7d, 0x55, 0x80, 0x69, 0xaa, 0x48, 0xe8, 0x45, 0x48, 0xab, - 0xa6, 0xe1, 0x28, 0xba, 0xc1, 0xad, 0x40, 0x5a, 0xf2, 0x09, 0x43, 0x0b, 0x79, 0x11, 0xb2, 0x8a, - 0xaa, 0x9a, 0x5d, 0xc3, 0x91, 0x0d, 0xa5, 0x8d, 0x79, 0x61, 0x33, 0x9c, 0xb6, 0xa9, 0xb4, 0x31, - 0x5a, 0x02, 0xf7, 0xd5, 0x3b, 0x8e, 0x95, 0x96, 0x80, 0x93, 0xd6, 0xf1, 0x11, 0x2f, 0xc9, 0x8f, - 0x05, 0x48, 0xb9, 0x2a, 0x48, 0x0a, 0xd3, 0xc4, 0x06, 0xb6, 0x14, 0xc7, 0xf4, 0x0a, 0xe3, 0x11, - 0xfa, 0x67, 0x89, 0xb4, 0x3f, 0x4b, 0x9c, 0x81, 0x69, 0x47, 0xd9, 0x6d, 0xb9, 0xe5, 0x60, 0x2f, - 0x74, 0x19, 0xb4, 0xa5, 0x34, 0xd9, 0x2a, 0x4e, 0x5a, 0x62, 0x2f, 0xa4, 0x4a, 0x3c, 0x86, 0x92, - 0xb5, 0x0e, 0x7f, 0x23, 0xe5, 0x65, 0x61, 0x83, 0xbb, 0xb8, 0xa9, 0x1b, 0xb4, 0xb3, 0xe3, 0x12, - 0x50, 0x12, 0x8d, 0xd0, 0x41, 0x2f, 0x40, 0x9a, 0x65, 0xc0, 0x86, 0x46, 0x7b, 0x3c, 0x2e, 0xa5, - 0x28, 0xa1, 0xe2, 0x9e, 0x3f, 0xe1, 0xae, 0xc1, 0x1f, 0x0b, 0x30, 0xc7, 0xe2, 0x2e, 0x58, 0xbc, - 0x61, 0x74, 0xf3, 0xe4, 0x1b, 0x90, 0xd6, 0x14, 0x47, 0x61, 0xc7, 0xbf, 0x62, 0x23, 0x8f, 0x7f, - 0xb9, 0xa6, 0x90, 0xe4, 0xa7, 0x47, 0xc0, 0x10, 0x24, 0xc8, 0x33, 0x3b, 0x36, 0x27, 0xd1, 0x67, - 0x7f, 0x07, 0x3b, 0x58, 0xdc, 0x28, 0xfd, 0x86, 0x9f, 0xc5, 0xdd, 0x49, 0x27, 0xca, 0x66, 0xf8, - 0x02, 0xcc, 0x70, 0x30, 0xcc, 0x1b, 0x61, 0x79, 0x9c, 0xbd, 0x73, 0xf7, 0xfb, 0x38, 0x1b, 0x2a, - 0x01, 0xb0, 0x80, 0x41, 0x1a, 0x81, 0x11, 0x3f, 0xc1, 0x66, 0x09, 0x65, 0x23, 0x54, 0xb4, 0x09, - 0x99, 0xf6, 0x53, 0x55, 0x95, 0xf7, 0xf4, 0x96, 0xc3, 0x83, 0x93, 0xc2, 0x23, 0x72, 0x37, 0x1e, - 0x96, 0xcb, 0x77, 0x69, 0x26, 0x16, 0x23, 0xe4, 0xbf, 0x4b, 0x40, 0x24, 0xb0, 0x67, 0xf4, 0x2a, - 0xf0, 0x60, 0x7d, 0xd9, 0x76, 0x8f, 0xde, 0x94, 0x72, 0xcf, 0x8f, 0x97, 0xd2, 0x12, 0xa5, 0xd6, - 0xeb, 0x0d, 0x29, 0xcd, 0x32, 0xd4, 0x6d, 0x07, 0x5d, 0x82, 0x9c, 0xd9, 0xd6, 0x1d, 0xd9, 0x9d, - 0xe1, 0xb9, 0x2b, 0x93, 0x25, 0x44, 0xd7, 0x03, 0x40, 0x0d, 0xb8, 0x86, 0x0d, 0x32, 0x16, 0x68, - 0x3d, 0x59, 0x24, 0xba, 0xac, 0x3b, 0x6c, 0x3c, 0xc9, 0x66, 0xc7, 0xd1, 0xdb, 0xfa, 0x33, 0xba, - 0x2d, 0xca, 0xb7, 0x0a, 0x2e, 0xb1, 0xec, 0xa4, 0x7e, 0x34, 0x36, 0xbd, 0xc6, 0xf3, 0x6e, 0x05, - 0xb2, 0x72, 0xad, 0xf9, 0xba, 0x00, 0xb9, 0x52, 0xb7, 0xf5, 0x78, 0xab, 0x53, 0xef, 0xb6, 0xdb, - 0x8a, 0x75, 0x44, 0x06, 0x08, 0xd3, 0x4e, 0xfd, 0x19, 0x66, 0x91, 0x9b, 0x5c, 0xfd, 0xf4, 0x67, - 0x98, 0xa8, 0x1f, 0x0f, 0x08, 0x26, 0x74, 0x16, 0xed, 0x7b, 0x09, 0x72, 0x14, 0x48, 0xca, 0xd8, - 0x70, 0x2c, 0x1d, 0xb3, 0x75, 0x8a, 0xb8, 0x94, 0xa5, 0xc4, 0x0a, 0xa3, 0xa1, 0x2b, 0x90, 0xb7, - 0x8f, 0x6c, 0x07, 0xb7, 0x65, 0x76, 0x68, 0x95, 0xa1, 0x9f, 0xb8, 0x94, 0x63, 0x54, 0x89, 0x11, - 0x8b, 0x7f, 0x12, 0x87, 0xbc, 0xab, 0x69, 0x51, 0xba, 0x68, 0x25, 0x98, 0xde, 0xd3, 0x5b, 0xd8, - 0xdd, 0x5d, 0x1e, 0x3e, 0x4d, 0x7b, 0x21, 0xa3, 0x64, 0xe6, 0x74, 0x5d, 0x73, 0xca, 0x1a, 0x85, - 0xb6, 0x2d, 0x7c, 0x20, 0x40, 0x82, 0xfa, 0x46, 0xb7, 0x20, 0x41, 0x87, 0xbf, 0x30, 0xc9, 0xf0, - 0xa7, 0x59, 0xbd, 0x29, 0x3c, 0x16, 0x98, 0xc2, 0xc9, 0x7c, 0xb8, 0xaf, 0xbc, 0x7e, 0xeb, 0x36, - 0xd5, 0xb4, 0xac, 0xc4, 0xdf, 0x50, 0x89, 0xc6, 0x24, 0x98, 0x96, 0x83, 0x35, 0xee, 0x99, 0x84, - 0x0d, 0xae, 0x9e, 0x8e, 0x77, 0x4d, 0x8d, 0xcb, 0x87, 0x2e, 0x40, 0x9c, 0xa8, 0xf0, 0x0c, 0xdb, - 0xa4, 0x7c, 0x7e, 0xbc, 0x14, 0x27, 0xca, 0x4b, 0x68, 0xcc, 0xb1, 0xbe, 0x9f, 0x48, 0x25, 0xc4, - 0xe9, 0xe2, 0x0f, 0x13, 0x90, 0xab, 0xb5, 0xa3, 0x36, 0x0e, 0xab, 0xbd, 0x1d, 0x16, 0xe6, 0x38, - 0xf6, 0x7c, 0x34, 0xa4, 0xbf, 0x7a, 0xcc, 0x6c, 0xfc, 0x64, 0x66, 0xb6, 0x46, 0x9c, 0x02, 0x7e, - 0xce, 0x96, 0x7c, 0xff, 0x95, 0xb1, 0xdf, 0x6f, 0x90, 0x11, 0x27, 0x11, 0x1e, 0x3f, 0x26, 0x9a, - 0xee, 0x52, 0xbf, 0x45, 0x7d, 0x0f, 0xa6, 0x34, 0xc9, 0xc9, 0x95, 0x66, 0x06, 0x1b, 0x1a, 0x55, - 0x99, 0x43, 0xae, 0x31, 0x9f, 0x81, 0xb8, 0xa6, 0x8f, 0x6a, 0xd2, 0x30, 0x53, 0x49, 0x58, 0xc6, - 0x28, 0x4e, 0x22, 0xa8, 0x38, 0x41, 0xe0, 0xb4, 0xb0, 0x05, 0xe0, 0xd7, 0x0a, 0x2d, 0x43, 0xd2, - 0x6c, 0x69, 0x6e, 0x38, 0x77, 0xae, 0x94, 0x7e, 0x7e, 0xbc, 0x34, 0xbd, 0xd5, 0xd2, 0x6a, 0x6b, - 0xd2, 0xb4, 0xd9, 0xd2, 0x6a, 0x1a, 0x3d, 0x9e, 0x8c, 0x0f, 0x64, 0x2f, 0xc4, 0x24, 0x2b, 0xcd, - 0x18, 0xf8, 0xc0, 0x0f, 0x72, 0xf1, 0x84, 0x13, 0xb5, 0xf9, 0x03, 0x01, 0xf2, 0x6e, 0x0b, 0x46, - 0x3b, 0xd2, 0x53, 0x7a, 0x9b, 0x6b, 0x7e, 0xfc, 0x64, 0x9a, 0xef, 0xf2, 0xf1, 0x43, 0x54, 0x5f, - 0x13, 0x78, 0xc0, 0x5c, 0x5d, 0x55, 0x1c, 0x62, 0xe6, 0x23, 0x54, 0xef, 0x97, 0x41, 0xb4, 0x14, - 0x43, 0x33, 0xdb, 0xfa, 0x33, 0xcc, 0xd6, 0x47, 0x6c, 0xbe, 0x2d, 0x30, 0xeb, 0xd1, 0xe9, 0x02, - 0x80, 0xbb, 0xbc, 0xf3, 0x6f, 0x02, 0x0f, 0xae, 0xf3, 0x0a, 0x13, 0x65, 0xa3, 0xad, 0x43, 0x92, - 0x2e, 0xed, 0xb9, 0xc3, 0xed, 0xb5, 0x10, 0x21, 0x61, 0x5f, 0x67, 0xf1, 0x42, 0x9e, 0xc2, 0x53, - 0x11, 0x0b, 0x5f, 0x80, 0x69, 0x4a, 0x3e, 0x85, 0x8d, 0xe3, 0x2d, 0xff, 0x04, 0xe6, 0x56, 0x35, - 0xad, 0x5e, 0xe7, 0xda, 0x17, 0x5d, 0xb3, 0xbb, 0xde, 0x53, 0x2c, 0xcc, 0x7b, 0x0a, 0x7e, 0x32, - 0x4a, 0xef, 0xa9, 0x03, 0x79, 0x1e, 0x1b, 0x1c, 0xf1, 0x5a, 0x2e, 0x8d, 0x1f, 0xe6, 0x6a, 0xc3, - 0x5e, 0xfc, 0xb3, 0xa9, 0xde, 0x17, 0xa3, 0xac, 0x49, 0x17, 0xe6, 0x5d, 0xb9, 0x51, 0x6f, 0x9b, - 0x8c, 0xaa, 0x0e, 0x5d, 0x13, 0x0b, 0x7e, 0x36, 0xca, 0x3a, 0xfd, 0x8b, 0x00, 0xf9, 0x7a, 0x77, - 0x97, 0x5d, 0x50, 0x10, 0x65, 0x84, 0x62, 0xba, 0x85, 0xf7, 0x1c, 0xf9, 0x64, 0xf1, 0x76, 0xae, - 0x25, 0x22, 0xac, 0x84, 0x8a, 0x56, 0x01, 0x2c, 0x1a, 0x2b, 0x4e, 0xe5, 0xc4, 0x27, 0x8e, 0xdb, - 0x4b, 0x53, 0xae, 0x40, 0x7c, 0xe1, 0x0f, 0x63, 0x30, 0xeb, 0x55, 0x33, 0x4a, 0xd3, 0xf1, 0xff, - 0x80, 0x7a, 0xbf, 0xb2, 0xed, 0x28, 0x8e, 0xcd, 0x4b, 0xf8, 0xea, 0x49, 0x0e, 0x6e, 0x94, 0xe6, - 0x78, 0x14, 0x55, 0xda, 0x23, 0x49, 0x69, 0x22, 0x92, 0x3e, 0xa2, 0x15, 0x98, 0xa7, 0xf6, 0x51, - 0x56, 0x3a, 0x9d, 0x96, 0x8e, 0x35, 0x99, 0xed, 0x60, 0x24, 0xe8, 0x0e, 0xc6, 0x1c, 0x4d, 0x5a, - 0x65, 0x29, 0x35, 0xba, 0x9b, 0x71, 0x17, 0xb2, 0x7b, 0x16, 0xc6, 0xcf, 0xb0, 0x4c, 0xbd, 0xae, - 0x93, 0xec, 0x6b, 0x65, 0x18, 0x63, 0x9d, 0xf0, 0x71, 0x4b, 0xf4, 0x1e, 0xcc, 0xd1, 0xa6, 0x8d, - 0xfa, 0xbc, 0x0d, 0xef, 0x95, 0x5f, 0x08, 0x80, 0x82, 0xf2, 0x3f, 0xba, 0x8e, 0x89, 0x45, 0xde, - 0x31, 0xaf, 0x02, 0x62, 0xa1, 0x06, 0xb6, 0xdc, 0xc1, 0x96, 0x6c, 0x63, 0xd5, 0xe4, 0xa7, 0xea, - 0x05, 0x49, 0xe4, 0x29, 0xdb, 0xd8, 0xaa, 0x53, 0x7a, 0xf1, 0x7b, 0x17, 0x20, 0xcb, 0xdb, 0x64, - 0xc7, 0x20, 0x60, 0xff, 0x16, 0xc4, 0x9b, 0x7c, 0x35, 0x25, 0x13, 0x8a, 0xb7, 0xfc, 0x9b, 0x3d, - 0xaa, 0x53, 0x12, 0xc9, 0x4b, 0x58, 0x3a, 0x5d, 0x27, 0x24, 0x28, 0xce, 0x8f, 0xa3, 0x0a, 0xb2, - 0x74, 0xba, 0x0e, 0xaa, 0xc3, 0xac, 0xea, 0xdf, 0x6c, 0x20, 0x13, 0xf6, 0xf8, 0xd0, 0xe3, 0x27, - 0xa1, 0xf7, 0x43, 0x54, 0xa7, 0xa4, 0xbc, 0xda, 0x93, 0x80, 0xca, 0xc1, 0xa3, 0xf4, 0x89, 0xa1, - 0x6b, 0x87, 0xfd, 0xc7, 0xf8, 0xab, 0x53, 0x81, 0x13, 0xf7, 0xe8, 0x0d, 0x48, 0x6a, 0xf4, 0x88, - 0x36, 0xd7, 0xd0, 0x30, 0x25, 0xea, 0x39, 0x15, 0x5f, 0x9d, 0x92, 0x38, 0x07, 0xba, 0x0f, 0x59, - 0xf6, 0xc4, 0xce, 0x26, 0x73, 0xb7, 0xf2, 0xca, 0x70, 0x09, 0x01, 0x6b, 0x5d, 0x9d, 0x92, 0x32, - 0x9a, 0x4f, 0x45, 0x9f, 0x84, 0x84, 0xad, 0x2a, 0x06, 0x5f, 0x72, 0x5c, 0x1c, 0x72, 0x14, 0xd5, - 0x67, 0xa6, 0xb9, 0xd1, 0x23, 0x98, 0xa3, 0x0b, 0x2c, 0xb2, 0xe3, 0xef, 0x3c, 0xd3, 0xa3, 0x30, - 0xbd, 0x9b, 0xdd, 0x9e, 0xbb, 0x15, 0x7e, 0x02, 0xab, 0x3a, 0x25, 0x89, 0xbb, 0x7d, 0x49, 0xa4, - 0xcb, 0xa8, 0xbf, 0x1c, 0x10, 0x9c, 0x1e, 0xda, 0x65, 0xa1, 0x67, 0xa2, 0x48, 0x97, 0xe1, 0x9e, - 0x04, 0x74, 0x0f, 0x32, 0x0a, 0xf1, 0x5f, 0x64, 0x7a, 0x32, 0xa1, 0x00, 0x43, 0xd7, 0x8e, 0x07, - 0x4e, 0x95, 0x54, 0xe9, 0x71, 0x32, 0x97, 0xe8, 0x0b, 0x6a, 0x63, 0xab, 0x89, 0x0b, 0x99, 0xd1, - 0x82, 0x82, 0xdb, 0xd5, 0x9e, 0x20, 0x4a, 0x44, 0x1b, 0x90, 0xdb, 0x77, 0x23, 0x75, 0x69, 0xa8, - 0x40, 0x76, 0xe8, 0x02, 0x72, 0x48, 0xa4, 0x71, 0x75, 0x4a, 0xca, 0xee, 0x07, 0xc8, 0x68, 0x05, - 0x62, 0x4d, 0xb5, 0x90, 0xa3, 0x32, 0x5e, 0x1c, 0x15, 0x47, 0x5b, 0x9d, 0x92, 0x62, 0x4d, 0x95, - 0xa0, 0x12, 0x16, 0x3c, 0x78, 0x68, 0x14, 0xf2, 0x43, 0x8d, 0x4c, 0x6f, 0x98, 0x67, 0x75, 0x4a, - 0xa2, 0xc1, 0x90, 0xe4, 0x7b, 0xdb, 0x90, 0xb7, 0xd8, 0x7e, 0xbf, 0x1b, 0xd5, 0x22, 0x52, 0x29, - 0xd7, 0xc2, 0x4d, 0xd5, 0x40, 0x60, 0x4b, 0x75, 0x4a, 0xca, 0x59, 0x41, 0x3a, 0xfa, 0x32, 0x9c, - 0xe9, 0x95, 0xc8, 0x95, 0x7b, 0x6e, 0xc0, 0x72, 0x85, 0xcb, 0xed, 0xd5, 0x71, 0x64, 0x0d, 0x24, - 0xa2, 0x4f, 0xc3, 0x34, 0xeb, 0x35, 0x44, 0x45, 0x86, 0x6d, 0x35, 0xf5, 0x75, 0x18, 0xcb, 0x4f, - 0xc6, 0x9b, 0xc3, 0x37, 0xba, 0xe5, 0x96, 0xd9, 0x2c, 0xcc, 0x0f, 0x1d, 0x6f, 0x83, 0x1b, 0xf7, - 0x64, 0xbc, 0x39, 0x3e, 0x95, 0xf4, 0xbb, 0xc5, 0x52, 0xf8, 0xbe, 0xe8, 0x99, 0xa1, 0xfd, 0x1e, - 0xb2, 0xff, 0x5d, 0xa5, 0x41, 0x7b, 0x3e, 0x99, 0x14, 0xcd, 0x62, 0xa7, 0xbf, 0x65, 0x3a, 0x8c, - 0xcf, 0x0e, 0x2d, 0xda, 0xe0, 0x89, 0x76, 0x52, 0x34, 0xcb, 0xa7, 0xa2, 0x87, 0x20, 0xf2, 0x13, - 0x9e, 0xfe, 0x7a, 0xd4, 0xb9, 0xa1, 0x3b, 0x11, 0xe1, 0x1b, 0x89, 0xd5, 0x29, 0x69, 0x56, 0xed, - 0x4d, 0x21, 0xc6, 0x82, 0xca, 0x93, 0x55, 0xff, 0x68, 0x6e, 0xa1, 0x30, 0xd4, 0x58, 0x0c, 0x39, - 0xcc, 0x4d, 0x8c, 0x85, 0xda, 0x97, 0x44, 0xd4, 0x58, 0x37, 0x74, 0x87, 0x1a, 0xf6, 0x85, 0xa1, - 0x6a, 0xdc, 0x7b, 0xf9, 0x0c, 0x51, 0x63, 0x9d, 0x51, 0x88, 0x1a, 0x3b, 0x7c, 0xd3, 0x9c, 0x77, - 0xc7, 0x8b, 0x43, 0xd5, 0x38, 0x6c, 0x77, 0x9d, 0xa8, 0xb1, 0x13, 0xa4, 0x13, 0x35, 0x66, 0x06, - 0xa2, 0x4f, 0xee, 0x4b, 0x43, 0xd5, 0x78, 0xe8, 0xd9, 0x20, 0xa2, 0xc6, 0xca, 0x40, 0x22, 0x5a, - 0x03, 0x60, 0x1e, 0x91, 0x6e, 0xec, 0x99, 0x85, 0xc5, 0xa1, 0xf3, 0x4f, 0xff, 0xb6, 0x39, 0x99, - 0x7f, 0x5a, 0x2e, 0x8d, 0x18, 0x32, 0xea, 0x63, 0xcb, 0x74, 0xf1, 0xbb, 0xb0, 0x34, 0xd4, 0x90, - 0x0d, 0xac, 0x81, 0x13, 0x43, 0x76, 0xe0, 0x11, 0xc9, 0x44, 0xc6, 0x96, 0x8c, 0x0a, 0xcb, 0x63, - 0x96, 0x26, 0x02, 0x13, 0x19, 0xe3, 0x40, 0xab, 0x90, 0x26, 0x9e, 0xc2, 0x11, 0x35, 0x43, 0x17, - 0x87, 0x7a, 0xb7, 0x7d, 0x51, 0xa9, 0xd5, 0x29, 0x29, 0xf5, 0x84, 0x93, 0xc8, 0xe7, 0x19, 0x6e, - 0x2f, 0x14, 0x87, 0x7e, 0xbe, 0x67, 0xa5, 0x86, 0x7c, 0x9e, 0x71, 0x20, 0x15, 0xce, 0xb2, 0xbe, - 0xe2, 0x87, 0x89, 0x2c, 0x7e, 0xea, 0xa6, 0x70, 0x89, 0x8a, 0x1a, 0x8a, 0x82, 0x43, 0x0f, 0x36, - 0x55, 0xa7, 0xa4, 0x79, 0x65, 0x30, 0x95, 0x0c, 0x78, 0x3e, 0xf5, 0x30, 0xec, 0x5c, 0xb8, 0x3c, - 0x74, 0xc0, 0x87, 0xac, 0x36, 0x90, 0x01, 0xaf, 0x04, 0xc8, 0x6c, 0x02, 0xd2, 0x64, 0xdb, 0x66, - 0x5b, 0x25, 0x57, 0x46, 0x4c, 0x40, 0x7d, 0x08, 0x9a, 0x4d, 0x40, 0x5a, 0x9d, 0x71, 0x12, 0x41, - 0x6a, 0x0b, 0x2b, 0x16, 0x37, 0xb3, 0x57, 0x87, 0x0a, 0x1a, 0xb8, 0xd0, 0x85, 0x08, 0x52, 0x3d, - 0x22, 0x99, 0xb0, 0x2d, 0xf7, 0x68, 0x38, 0xf7, 0x36, 0xaf, 0x0d, 0x9d, 0xb0, 0x43, 0x4f, 0xb0, - 0x93, 0x09, 0xdb, 0xea, 0x49, 0x40, 0x9f, 0x83, 0x19, 0x7e, 0xce, 0xb6, 0x70, 0x7d, 0x84, 0x0f, - 0x1c, 0x84, 0xd5, 0x64, 0x5c, 0x73, 0x1e, 0x66, 0x65, 0xd9, 0x31, 0x5d, 0x56, 0xbd, 0x97, 0x47, - 0x58, 0xd9, 0x01, 0x44, 0xcb, 0xac, 0xac, 0x4f, 0x26, 0x56, 0x96, 0xe9, 0x29, 0x9f, 0xeb, 0x6e, - 0x0c, 0xb5, 0xb2, 0x83, 0x21, 0xb1, 0xc4, 0xca, 0x3e, 0xf1, 0xa9, 0xa4, 0x66, 0x36, 0x03, 0x62, - 0x85, 0x57, 0x86, 0xd6, 0xac, 0x17, 0x91, 0x92, 0x9a, 0x71, 0x1e, 0xd2, 0x6d, 0x2c, 0x5a, 0x8b, - 0xb5, 0xf4, 0xab, 0x43, 0xbb, 0x6d, 0x00, 0xb7, 0x54, 0xdd, 0xcb, 0xfe, 0x58, 0x0b, 0x7b, 0x86, - 0xca, 0xe2, 0xe7, 0xa4, 0x78, 0x4b, 0xbd, 0x36, 0xda, 0x50, 0x85, 0x1d, 0x01, 0xf3, 0x0c, 0x55, - 0x4f, 0x22, 0x2d, 0x2a, 0x0b, 0x30, 0xa7, 0xe3, 0x7b, 0x65, 0x78, 0x51, 0xfb, 0x63, 0xfe, 0x69, - 0x51, 0x3d, 0xa2, 0x3f, 0x84, 0xba, 0xec, 0x64, 0x69, 0xe1, 0xe6, 0xe8, 0x21, 0xd4, 0x7b, 0xc2, - 0xd5, 0x1b, 0x42, 0x9c, 0x5c, 0x9a, 0xe1, 0x31, 0x7f, 0xf7, 0x13, 0xa9, 0x59, 0x51, 0xbc, 0x9f, - 0x48, 0x9d, 0x17, 0x0b, 0xf7, 0x13, 0xa9, 0x0b, 0xe2, 0xc2, 0xfd, 0x44, 0xea, 0x05, 0xf1, 0xc5, - 0xe2, 0x6f, 0x5e, 0x80, 0x9c, 0x8b, 0xaf, 0x18, 0x5a, 0xb9, 0x1d, 0x44, 0x2b, 0x8b, 0xc3, 0xd0, - 0x0a, 0x47, 0x64, 0x1c, 0xae, 0xdc, 0x0e, 0xc2, 0x95, 0xc5, 0x61, 0x70, 0xc5, 0xe7, 0x21, 0x78, - 0xa5, 0x31, 0x0c, 0xaf, 0xbc, 0x3c, 0x01, 0x5e, 0xf1, 0x44, 0xf5, 0x03, 0x96, 0xb5, 0x41, 0xc0, - 0x72, 0x79, 0x34, 0x60, 0xf1, 0x44, 0x05, 0x10, 0xcb, 0x9b, 0x7d, 0x88, 0xe5, 0xe2, 0x08, 0xc4, - 0xe2, 0xf1, 0xbb, 0x90, 0x65, 0x3d, 0x14, 0xb2, 0x5c, 0x1d, 0x07, 0x59, 0x3c, 0x39, 0x3d, 0x98, - 0xe5, 0xf5, 0x1e, 0xcc, 0xb2, 0x34, 0x14, 0xb3, 0x78, 0xdc, 0x0c, 0xb4, 0xbc, 0x3b, 0x1c, 0xb4, - 0xbc, 0x32, 0x11, 0x68, 0xf1, 0xe4, 0x0d, 0xa2, 0x96, 0xc6, 0x30, 0xd4, 0xf2, 0xf2, 0x04, 0xa8, - 0xc5, 0xef, 0xb8, 0x3e, 0xd8, 0x52, 0x0d, 0x83, 0x2d, 0x57, 0xc6, 0xc0, 0x16, 0x4f, 0x5a, 0x10, - 0xb7, 0x54, 0xc3, 0x70, 0xcb, 0x95, 0x31, 0xb8, 0xa5, 0x4f, 0x12, 0x03, 0x2e, 0x9b, 0xe1, 0xc0, - 0xe5, 0xda, 0x58, 0xe0, 0xe2, 0x49, 0xeb, 0x45, 0x2e, 0x37, 0x03, 0xc8, 0xe5, 0xa5, 0x21, 0xc8, - 0xc5, 0x63, 0x25, 0xd0, 0xe5, 0xf3, 0x03, 0xd0, 0xa5, 0x38, 0x0a, 0xba, 0x78, 0xbc, 0x1e, 0x76, - 0x79, 0x7b, 0x08, 0x76, 0xb9, 0x3e, 0x1e, 0xbb, 0x78, 0xc2, 0xfa, 0xc0, 0x8b, 0x32, 0x12, 0xbc, - 0xbc, 0x36, 0x21, 0x78, 0xf1, 0xa4, 0x87, 0xa1, 0x97, 0xcf, 0xf4, 0xa2, 0x97, 0xe5, 0xe1, 0xe8, - 0xc5, 0x13, 0xc3, 0xe1, 0xcb, 0x7a, 0x28, 0x7c, 0xb9, 0x3a, 0x0e, 0xbe, 0xf8, 0x63, 0x2f, 0x88, - 0x5f, 0x36, 0xc3, 0xf1, 0xcb, 0xb5, 0xb1, 0xf8, 0xc5, 0xef, 0xfe, 0x1e, 0x00, 0xb3, 0x1e, 0x0a, - 0x60, 0xae, 0x8e, 0x03, 0x30, 0x7e, 0xe1, 0x82, 0x08, 0xe6, 0x9d, 0xa1, 0x08, 0xe6, 0xc6, 0x24, - 0x08, 0xc6, 0x13, 0x3a, 0x00, 0x61, 0xde, 0x1d, 0x0e, 0x61, 0x5e, 0x39, 0xc1, 0x45, 0x44, 0xa1, - 0x18, 0xe6, 0xf3, 0x03, 0x18, 0xa6, 0x38, 0x0a, 0xc3, 0xf8, 0xfa, 0xec, 0x82, 0x18, 0x65, 0x24, - 0xe4, 0x78, 0x6d, 0x42, 0xc8, 0xe1, 0x2b, 0x5f, 0x08, 0xe6, 0xa8, 0x84, 0x60, 0x8e, 0xcb, 0xa3, - 0x31, 0x87, 0x3f, 0x85, 0xf8, 0xa0, 0xa3, 0x1a, 0x06, 0x3a, 0xae, 0x8c, 0x01, 0x1d, 0xbe, 0x15, - 0x0a, 0xa0, 0x8e, 0x37, 0xfb, 0x50, 0xc7, 0xc5, 0xb1, 0x3b, 0xfa, 0x01, 0xd8, 0x51, 0x1a, 0x84, - 0x1d, 0x97, 0x46, 0xc2, 0x0e, 0x4f, 0x82, 0x8f, 0x3b, 0xde, 0xec, 0xc3, 0x1d, 0x17, 0x47, 0xe0, - 0x0e, 0xbf, 0x00, 0x1c, 0x78, 0x68, 0xa3, 0x81, 0xc7, 0xca, 0xa4, 0xc0, 0xc3, 0x13, 0x1c, 0x8a, - 0x3c, 0x36, 0xc3, 0x91, 0xc7, 0xb5, 0x09, 0x37, 0xf7, 0x06, 0xa0, 0x47, 0x35, 0x0c, 0x7a, 0x5c, - 0x19, 0x03, 0x3d, 0x82, 0x73, 0x88, 0x87, 0x3d, 0xaa, 0x61, 0xd8, 0xe3, 0xca, 0x18, 0xec, 0xe1, - 0x4b, 0x0a, 0x80, 0x8f, 0xc6, 0x30, 0xf0, 0xf1, 0xf2, 0x04, 0xe0, 0xc3, 0x9f, 0x77, 0xfb, 0xd0, - 0xc7, 0x5b, 0xfd, 0xe8, 0xa3, 0x38, 0x0a, 0x7d, 0xf8, 0x23, 0xd2, 0x85, 0x1f, 0x9b, 0xe1, 0xf0, - 0xe3, 0xda, 0x58, 0xf8, 0x11, 0x34, 0x92, 0x01, 0xfc, 0xb1, 0x1e, 0x8a, 0x3f, 0xae, 0x8e, 0xc3, - 0x1f, 0xbe, 0x91, 0x0c, 0x02, 0x90, 0xb7, 0xfa, 0x01, 0x48, 0x71, 0x14, 0x00, 0xf1, 0x2b, 0xe7, - 0x22, 0x90, 0x6a, 0x18, 0x02, 0xb9, 0x32, 0x06, 0x81, 0xf8, 0x9d, 0x17, 0x80, 0x20, 0xca, 0x48, - 0x08, 0xf2, 0xda, 0x84, 0x10, 0xa4, 0xcf, 0x70, 0xf5, 0x62, 0x90, 0x6a, 0x18, 0x06, 0xb9, 0x32, - 0x06, 0x83, 0x04, 0x0a, 0xeb, 0x83, 0x90, 0xcd, 0x70, 0x10, 0x72, 0x6d, 0x2c, 0x08, 0xe9, 0x1b, - 0x4d, 0x93, 0xa2, 0x90, 0xfb, 0x89, 0xd4, 0x8b, 0xe2, 0x4b, 0xc5, 0xbf, 0x9a, 0x86, 0x64, 0xd5, - 0x8d, 0x89, 0x09, 0x5c, 0x0d, 0x20, 0x9c, 0xe6, 0x6a, 0x00, 0xb4, 0x46, 0x14, 0x9b, 0x9a, 0x07, - 0x8e, 0x4b, 0x46, 0xdc, 0xb3, 0x31, 0xb0, 0x2d, 0xe9, 0xb2, 0x9e, 0xe2, 0xc4, 0x10, 0x7a, 0x1d, - 0x72, 0x5d, 0x1b, 0x5b, 0x72, 0xc7, 0xd2, 0x4d, 0x4b, 0x77, 0x58, 0x24, 0xa9, 0x50, 0x12, 0x3f, - 0x3c, 0x5e, 0xca, 0xee, 0xd8, 0xd8, 0xda, 0xe6, 0x74, 0x29, 0xdb, 0x0d, 0xbc, 0xb9, 0xb7, 0xeb, - 0x4f, 0x4f, 0x7e, 0xbb, 0xfe, 0xdb, 0x20, 0x5a, 0x58, 0xd1, 0x7a, 0x26, 0x6a, 0x76, 0xf2, 0x3e, - 0xdc, 0xa7, 0xa0, 0x21, 0xd3, 0x6e, 0x4e, 0x7a, 0x02, 0x7f, 0xd6, 0xea, 0x25, 0xa2, 0x5b, 0x70, - 0xb6, 0xad, 0x1c, 0xb2, 0x4b, 0x22, 0x5c, 0xdf, 0x87, 0xc6, 0x06, 0xa5, 0x68, 0x08, 0x1b, 0x6a, - 0x2b, 0x87, 0xf4, 0xaa, 0x7e, 0x96, 0x44, 0x2f, 0xe9, 0xbd, 0x02, 0x79, 0x4d, 0xb7, 0x1d, 0xdd, - 0x50, 0xdd, 0xeb, 0xc9, 0xd8, 0x11, 0xfd, 0x9c, 0x4b, 0x65, 0xd7, 0x84, 0xdd, 0x80, 0x39, 0x1e, - 0x2c, 0xe8, 0x5f, 0xde, 0x4f, 0xbd, 0xfc, 0x14, 0x29, 0x05, 0x49, 0xf0, 0xff, 0xb5, 0xa1, 0x0c, - 0xb3, 0x4d, 0xc5, 0xc1, 0x07, 0xca, 0x91, 0xec, 0x46, 0x6d, 0x67, 0xe8, 0x6d, 0x3f, 0x2f, 0x3c, - 0x3f, 0x5e, 0xca, 0xdd, 0x63, 0x49, 0x03, 0xc1, 0xdb, 0xb9, 0x66, 0x20, 0x41, 0x43, 0xab, 0x90, - 0xa5, 0xf7, 0x8f, 0x9a, 0xec, 0x9a, 0x5b, 0xee, 0xbb, 0x0f, 0xdb, 0xf5, 0xe1, 0x97, 0xe1, 0x4a, - 0xf4, 0xce, 0x52, 0xf7, 0x66, 0xdc, 0x6b, 0x30, 0xab, 0xd8, 0x47, 0x86, 0x4a, 0x5b, 0x18, 0x1b, - 0x76, 0xd7, 0xa6, 0xce, 0x7b, 0x4a, 0xca, 0x53, 0x72, 0xd9, 0xa5, 0xf2, 0x2b, 0xc9, 0x7e, 0x5b, - 0x80, 0x6c, 0x4f, 0x04, 0xed, 0x9b, 0x7d, 0x9b, 0x9b, 0x17, 0xc2, 0x81, 0xc3, 0xb0, 0xb0, 0xb0, - 0x14, 0xef, 0x01, 0x37, 0x54, 0x65, 0x69, 0xb8, 0xe3, 0x49, 0xa1, 0xbb, 0xbb, 0xa5, 0xee, 0xb2, - 0xbd, 0x91, 0xf8, 0xdd, 0x6f, 0x2f, 0x4d, 0x15, 0x7f, 0x19, 0x87, 0x5c, 0x6f, 0xa4, 0x6c, 0xad, - 0xaf, 0x5c, 0x61, 0x03, 0xbb, 0x87, 0x63, 0x65, 0xc4, 0x6d, 0x36, 0x69, 0xff, 0xd6, 0x52, 0x56, - 0xcc, 0xe5, 0x11, 0x5b, 0xb8, 0xc1, 0x72, 0xfa, 0x8c, 0x0b, 0x3f, 0x8a, 0x79, 0x23, 0x7f, 0x05, - 0xa6, 0xe9, 0xa9, 0x65, 0x5e, 0xb4, 0xb0, 0xb3, 0x44, 0x15, 0x92, 0x2e, 0xb1, 0x6c, 0xc4, 0x52, - 0x34, 0x4e, 0x75, 0x89, 0x88, 0x47, 0x38, 0xc5, 0xff, 0x5a, 0xf0, 0x8b, 0x6b, 0xa6, 0x4f, 0x76, - 0x71, 0x0d, 0xdb, 0xa2, 0x6d, 0xb5, 0xb0, 0xea, 0xf0, 0x3f, 0x32, 0x71, 0xff, 0xbd, 0xe2, 0x72, - 0xbf, 0x08, 0xfe, 0xb7, 0x27, 0x2b, 0x12, 0xff, 0xdb, 0x93, 0x40, 0xf4, 0x50, 0xde, 0x13, 0x41, - 0x07, 0x16, 0x8b, 0x31, 0xe3, 0x5d, 0xfd, 0xeb, 0x02, 0x88, 0x74, 0x18, 0xdd, 0xc5, 0x58, 0x8b, - 0x44, 0x0b, 0xdd, 0xc0, 0xa6, 0xd8, 0xc4, 0x81, 0x4d, 0x45, 0x05, 0xf2, 0x5e, 0x19, 0xd8, 0x35, - 0xfe, 0x23, 0xee, 0x80, 0x39, 0xd5, 0xa1, 0xd4, 0xe2, 0xef, 0x09, 0x30, 0xef, 0x7d, 0xa3, 0xec, - 0x9d, 0x85, 0x3a, 0x4d, 0xa8, 0xa9, 0x44, 0xff, 0xa2, 0x84, 0x20, 0x50, 0x7a, 0x50, 0x71, 0x22, - 0x0d, 0x42, 0x3c, 0x5a, 0x00, 0x38, 0xb2, 0xd5, 0x1a, 0x75, 0xfa, 0xe7, 0x25, 0xec, 0xd9, 0x2e, - 0xde, 0x0d, 0xb4, 0x00, 0x55, 0x56, 0x52, 0xcd, 0x89, 0xb4, 0xda, 0xad, 0x26, 0xcd, 0x5c, 0xfc, - 0x89, 0x10, 0x14, 0xf4, 0x94, 0x78, 0x34, 0x77, 0x20, 0xfe, 0x54, 0x69, 0x8d, 0x0a, 0x96, 0xe8, - 0x69, 0x7a, 0x89, 0xe4, 0x46, 0x77, 0x7b, 0x8e, 0x90, 0xc5, 0x86, 0xc3, 0xce, 0xc1, 0x26, 0x0d, - 0x1e, 0x35, 0x43, 0x9f, 0x76, 0x6b, 0x11, 0x1f, 0xff, 0xf9, 0xe0, 0x20, 0x7d, 0x23, 0xf1, 0xfe, - 0xb7, 0x97, 0x84, 0x1b, 0x75, 0x98, 0x0f, 0x99, 0x84, 0x50, 0x1e, 0x20, 0x70, 0x91, 0x2c, 0xff, - 0x87, 0x94, 0xd5, 0x35, 0x79, 0x67, 0xb3, 0xbc, 0xb5, 0xb1, 0x51, 0x6b, 0x34, 0x2a, 0x6b, 0xa2, - 0x80, 0x44, 0xc8, 0xf6, 0x5c, 0x43, 0xcb, 0xff, 0x18, 0xe5, 0xc6, 0xa7, 0x00, 0xfc, 0x0b, 0xa4, - 0x89, 0xac, 0xf5, 0xca, 0x23, 0xf9, 0xe1, 0xea, 0x83, 0x9d, 0x4a, 0x5d, 0x9c, 0x42, 0x08, 0xf2, - 0xa5, 0xd5, 0x46, 0xb9, 0x2a, 0x4b, 0x95, 0xfa, 0xf6, 0xd6, 0x66, 0xbd, 0x22, 0x0a, 0x9c, 0x6f, - 0x0d, 0xb2, 0xc1, 0xc3, 0x76, 0x68, 0x1e, 0x66, 0xcb, 0xd5, 0x4a, 0x79, 0x5d, 0x7e, 0x58, 0x5b, - 0x95, 0xdf, 0xde, 0xa9, 0xec, 0x54, 0xc4, 0x29, 0x5a, 0x34, 0x4a, 0xbc, 0xbb, 0xf3, 0xe0, 0x81, - 0x28, 0xa0, 0x59, 0xc8, 0xb0, 0x77, 0x7a, 0x65, 0xad, 0x18, 0xbb, 0xb1, 0x01, 0x99, 0xc0, 0x8d, - 0x36, 0xe4, 0x73, 0xdb, 0x3b, 0xf5, 0xaa, 0xdc, 0xa8, 0x6d, 0x54, 0xea, 0x8d, 0xd5, 0x8d, 0x6d, - 0x26, 0x83, 0xd2, 0x56, 0x4b, 0x5b, 0x52, 0x43, 0x14, 0xbc, 0xf7, 0xc6, 0xd6, 0x4e, 0xb9, 0xea, - 0xfd, 0xbf, 0x4b, 0x22, 0x15, 0x17, 0xe3, 0x37, 0x4c, 0x38, 0x1b, 0x7a, 0x7a, 0x0d, 0x65, 0x60, - 0x66, 0xc7, 0xa0, 0x77, 0x73, 0x88, 0x53, 0x28, 0x17, 0x38, 0xc0, 0x26, 0x0a, 0x28, 0xc5, 0x8e, - 0x29, 0x89, 0x31, 0x94, 0x84, 0x58, 0xfd, 0x8e, 0x18, 0x27, 0xc5, 0x0c, 0x9c, 0x02, 0x13, 0x13, - 0x28, 0xcd, 0x0f, 0xcf, 0x88, 0xd3, 0x28, 0xeb, 0x9f, 0x5e, 0x11, 0x93, 0x37, 0x2e, 0x42, 0x20, - 0xb8, 0x1f, 0x01, 0x24, 0x1f, 0x28, 0x0e, 0xb6, 0x1d, 0x71, 0x0a, 0xcd, 0x40, 0x7c, 0xb5, 0xd5, - 0x12, 0x85, 0xdb, 0x3f, 0x10, 0x20, 0xe5, 0xde, 0x56, 0x8a, 0x1e, 0xc0, 0x34, 0x03, 0xa5, 0x4b, - 0xc3, 0xa7, 0x0c, 0x6a, 0x75, 0x16, 0x96, 0xc7, 0xcd, 0x29, 0xc5, 0x29, 0xf4, 0x0e, 0xff, 0xab, - 0x26, 0xa2, 0x2f, 0xe8, 0xd2, 0x28, 0x6d, 0x72, 0xa5, 0x8e, 0x56, 0x39, 0x32, 0x42, 0x8a, 0x53, - 0x9f, 0x10, 0x4a, 0x2f, 0xbf, 0xff, 0xcf, 0x8b, 0x53, 0xef, 0x3f, 0x5f, 0x14, 0x3e, 0x78, 0xbe, - 0x28, 0xfc, 0xec, 0xf9, 0xa2, 0xf0, 0x4f, 0xcf, 0x17, 0x85, 0xdf, 0xfa, 0xf9, 0xe2, 0xd4, 0x07, - 0x3f, 0x5f, 0x9c, 0xfa, 0xd9, 0xcf, 0x17, 0xa7, 0xde, 0x9d, 0xe1, 0xdc, 0xbb, 0x49, 0xfa, 0xaf, - 0x51, 0x77, 0xfe, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x3f, 0xc2, 0xed, 0x75, 0x3a, 0x6b, 0x00, 0x00, +func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_api_95ac5de735b0e2a7) } + +var fileDescriptor_api_95ac5de735b0e2a7 = []byte{ + // 6752 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5d, 0x5b, 0x6c, 0x23, 0xd7, + 0x79, 0xd6, 0x90, 0x14, 0x45, 0xfe, 0xbc, 0x68, 0x74, 0xb4, 0x17, 0xae, 0x6c, 0x4b, 0x5a, 0xee, + 0xd5, 0x6b, 0x5b, 0x9b, 0xdd, 0x8d, 0x13, 0xd7, 0x4e, 0x9c, 0x88, 0x14, 0x77, 0xc9, 0xd5, 0xea, + 0xe2, 0x21, 0xb5, 0xce, 0x3a, 0x75, 0x27, 0xa3, 0x99, 0x23, 0x6a, 0xb2, 0xe4, 0x0c, 0x3d, 0x33, + 0x5c, 0x49, 0x0b, 0x14, 0x05, 0xfa, 0x92, 0x36, 0x08, 0x82, 0x3e, 0x14, 0x45, 0x91, 0xb4, 0x68, + 0x80, 0x04, 0x28, 0x90, 0xa2, 0x41, 0x53, 0x04, 0x28, 0x5a, 0x14, 0xc8, 0x43, 0xfb, 0x60, 0x04, + 0x79, 0x30, 0x8a, 0xa6, 0x0d, 0xfa, 0x20, 0xb4, 0x9b, 0x16, 0x09, 0xfa, 0xda, 0x87, 0x00, 0x7e, + 0x28, 0x8a, 0x73, 0x99, 0x0b, 0xc9, 0xe1, 0x45, 0xca, 0x18, 0x75, 0xd1, 0x27, 0xce, 0xfc, 0xe7, + 0xfc, 0xff, 0x9c, 0xcb, 0x7f, 0xfe, 0xf3, 0x7f, 0xe7, 0xfc, 0xe7, 0x10, 0xe6, 0x2c, 0x53, 0x51, + 0xf7, 0x3b, 0xbb, 0x37, 0x95, 0x8e, 0xbe, 0xd2, 0xb1, 0x4c, 0xc7, 0x44, 0x73, 0xaa, 0xa9, 0x3e, + 0xa6, 0xe4, 0x15, 0x9e, 0xb8, 0x80, 0xdc, 0x5c, 0x9a, 0xe2, 0x28, 0x2c, 0xdb, 0xc2, 0x19, 0x97, + 0x86, 0x2d, 0xcb, 0xb4, 0x6c, 0x4e, 0x3d, 0xe7, 0x52, 0xdb, 0xd8, 0x51, 0x02, 0xb9, 0x8b, 0xb6, + 0x63, 0x5a, 0x4a, 0x13, 0xdf, 0xc4, 0x46, 0x53, 0x37, 0xdc, 0x1f, 0x92, 0xef, 0x89, 0xaa, 0xf2, + 0x3c, 0x97, 0x46, 0xe5, 0xb9, 0xc3, 0x33, 0x15, 0xba, 0x8e, 0xde, 0xba, 0xb9, 0xdf, 0x52, 0x6f, + 0x3a, 0x7a, 0x1b, 0xdb, 0x8e, 0xd2, 0xee, 0xf0, 0x94, 0x65, 0x9a, 0xe2, 0x58, 0x8a, 0xaa, 0x1b, + 0xcd, 0x9b, 0x16, 0x56, 0x4d, 0x4b, 0xc3, 0x9a, 0x6c, 0x77, 0x14, 0xc3, 0x2d, 0x72, 0xd3, 0x6c, + 0x9a, 0xf4, 0xf1, 0x26, 0x79, 0x62, 0xd4, 0xe2, 0x6f, 0x41, 0x5a, 0x52, 0x8c, 0x26, 0xae, 0x19, + 0x7b, 0x26, 0xfa, 0x0c, 0x24, 0x34, 0x6c, 0xab, 0x05, 0x61, 0x59, 0xb8, 0x9e, 0xb9, 0x5d, 0x5c, + 0x19, 0x68, 0x8b, 0x15, 0x9a, 0x77, 0x0d, 0xdb, 0xaa, 0xa5, 0x77, 0x1c, 0xd3, 0x2a, 0x25, 0xde, + 0x3f, 0x5e, 0x9a, 0x92, 0x28, 0x17, 0xfa, 0x24, 0x4c, 0xb7, 0xb0, 0x62, 0xe3, 0x42, 0x8c, 0xb2, + 0x17, 0x42, 0xd8, 0x1f, 0x90, 0x74, 0xce, 0xc4, 0x32, 0x17, 0xff, 0x4e, 0x80, 0x9c, 0x84, 0xdf, + 0xeb, 0x62, 0xdb, 0xa9, 0x62, 0x45, 0xc3, 0x16, 0xba, 0x00, 0xf1, 0xc7, 0xf8, 0xa8, 0x10, 0x5f, + 0x16, 0xae, 0x67, 0x4b, 0x33, 0x1f, 0x1e, 0x2f, 0xc5, 0xd7, 0xf1, 0x91, 0x44, 0x68, 0x68, 0x19, + 0x66, 0xb0, 0xa1, 0xc9, 0x24, 0x39, 0xd1, 0x9b, 0x9c, 0xc4, 0x86, 0xb6, 0x8e, 0x8f, 0x90, 0x0a, + 0x29, 0x9b, 0x48, 0x33, 0x54, 0x5c, 0x98, 0x5e, 0x16, 0xae, 0x4f, 0x97, 0xee, 0x7d, 0x78, 0xbc, + 0x54, 0x6e, 0xea, 0xce, 0x7e, 0x77, 0x77, 0x45, 0x35, 0xdb, 0x37, 0xbd, 0x52, 0x69, 0xbb, 0xfe, + 0xf3, 0xcd, 0xce, 0xe3, 0xe6, 0xcd, 0x21, 0x3d, 0xb0, 0xd2, 0x38, 0x34, 0xea, 0xf8, 0x3d, 0xc9, + 0x13, 0xfc, 0x7a, 0xe2, 0x17, 0xdf, 0x5a, 0x12, 0xee, 0x27, 0x52, 0x82, 0x18, 0xbb, 0x9f, 0x48, + 0xc5, 0xc4, 0x78, 0xf1, 0x6b, 0x71, 0xc8, 0x4b, 0xd8, 0xee, 0x98, 0x86, 0x8d, 0x79, 0x35, 0x3e, + 0x01, 0x71, 0xe7, 0xd0, 0xa0, 0xd5, 0xc8, 0xdc, 0x5e, 0x0c, 0x69, 0x8c, 0x86, 0xa5, 0x18, 0xb6, + 0xa2, 0x3a, 0xba, 0x69, 0x48, 0x24, 0x2b, 0x7a, 0x0d, 0x32, 0x16, 0xb6, 0xbb, 0x6d, 0x4c, 0xbb, + 0x8d, 0xd6, 0x30, 0x73, 0xfb, 0x7c, 0x08, 0x67, 0xbd, 0xa3, 0x18, 0x12, 0xb0, 0xbc, 0xe4, 0x19, + 0x5d, 0x80, 0x94, 0xd1, 0x6d, 0x93, 0x76, 0xb1, 0x69, 0xad, 0xe3, 0xd2, 0x8c, 0xd1, 0x6d, 0xaf, + 0xe3, 0x23, 0x1b, 0x95, 0x21, 0x63, 0x91, 0x4e, 0x93, 0x75, 0x63, 0xcf, 0xb4, 0x0b, 0xc9, 0xe5, + 0xf8, 0xf5, 0xcc, 0xed, 0xe7, 0x87, 0x75, 0x2d, 0x51, 0x03, 0xde, 0x3f, 0x60, 0xb9, 0x04, 0x1b, + 0xd5, 0x21, 0xc7, 0x4b, 0x66, 0x61, 0xc5, 0x36, 0x8d, 0xc2, 0xcc, 0xb2, 0x70, 0x3d, 0x7f, 0x7b, + 0x25, 0x4c, 0x4c, 0x4f, 0x2b, 0x90, 0xd7, 0x6e, 0x1b, 0x4b, 0x94, 0x4b, 0xca, 0x5a, 0x81, 0xb7, + 0xe2, 0x23, 0xc8, 0x06, 0x53, 0x11, 0x82, 0xbc, 0x54, 0xa9, 0xef, 0x6c, 0x54, 0xe4, 0x9d, 0xcd, + 0xf5, 0xcd, 0xad, 0xb7, 0x37, 0xc5, 0x29, 0x74, 0x06, 0x44, 0x4e, 0x5b, 0xaf, 0x3c, 0x92, 0x1f, + 0xd4, 0x36, 0x6a, 0x0d, 0x51, 0x40, 0x17, 0xe0, 0x2c, 0xa7, 0x4a, 0xab, 0x9b, 0xf7, 0x2a, 0x72, + 0x69, 0x6b, 0x67, 0x73, 0x6d, 0x55, 0x7a, 0x24, 0xc6, 0x16, 0x12, 0xbf, 0xf3, 0xed, 0xc5, 0xa9, + 0xe2, 0x43, 0x80, 0x7b, 0xd8, 0xe1, 0x6a, 0x85, 0x4a, 0x90, 0xdc, 0xa7, 0xa5, 0xe1, 0x8a, 0xbd, + 0x1c, 0x5a, 0xec, 0x80, 0x0a, 0x96, 0x52, 0xa4, 0x05, 0x3e, 0x38, 0x5e, 0x12, 0x24, 0xce, 0xc9, + 0xba, 0xbc, 0xf8, 0x43, 0x01, 0x32, 0x54, 0x30, 0xab, 0x23, 0x2a, 0xf7, 0x49, 0xbe, 0x38, 0xb6, + 0x41, 0x06, 0x45, 0xa3, 0x15, 0x98, 0x7e, 0xa2, 0xb4, 0xba, 0xa3, 0xc6, 0xcd, 0x43, 0x92, 0x2e, + 0xb1, 0x6c, 0xe8, 0x0d, 0xc8, 0xea, 0x86, 0x83, 0x0d, 0x47, 0x66, 0x6c, 0xf1, 0x31, 0x6c, 0x19, + 0x96, 0x9b, 0xbe, 0x14, 0xff, 0x46, 0x00, 0xd8, 0xee, 0x46, 0xd9, 0x34, 0x64, 0xdc, 0x4f, 0x54, + 0x7e, 0x77, 0xdc, 0xb3, 0x5a, 0x9c, 0x83, 0xa4, 0x6e, 0xb4, 0x74, 0x83, 0x95, 0x3f, 0x25, 0xf1, + 0x37, 0x74, 0x06, 0xa6, 0x77, 0x5b, 0xba, 0xa1, 0x51, 0xf5, 0x4f, 0x49, 0xec, 0x85, 0x37, 0xbf, + 0x04, 0x19, 0x5a, 0xf6, 0x08, 0x5b, 0xbf, 0xf8, 0x8d, 0x18, 0x9c, 0x2d, 0x9b, 0x86, 0xa6, 0x93, + 0x71, 0xa8, 0xb4, 0x3e, 0x16, 0x6d, 0xf3, 0x2a, 0xa4, 0xf1, 0x61, 0x67, 0xc2, 0xee, 0x4d, 0xe1, + 0xc3, 0x0e, 0x7d, 0x0a, 0x6f, 0x3a, 0xf4, 0x49, 0x38, 0xaf, 0xb4, 0x5a, 0xe6, 0x81, 0xac, 0xef, + 0xc9, 0x9a, 0x89, 0x6d, 0xd9, 0x30, 0x1d, 0x19, 0x1f, 0xea, 0xb6, 0x43, 0x4d, 0x45, 0x4a, 0x9a, + 0xa7, 0xc9, 0xb5, 0xbd, 0x35, 0x13, 0xdb, 0x9b, 0xa6, 0x53, 0x21, 0x49, 0xbc, 0xc1, 0xdf, 0x85, + 0x73, 0xfd, 0x6d, 0x13, 0x65, 0xdb, 0xff, 0x83, 0x00, 0xf9, 0x9a, 0xa1, 0x3b, 0x1f, 0x8b, 0x46, + 0xf7, 0x5a, 0x2f, 0x1e, 0x6c, 0xbd, 0x1b, 0x20, 0xee, 0x29, 0x7a, 0x6b, 0xcb, 0x68, 0x98, 0xed, + 0x5d, 0xdb, 0x31, 0x0d, 0x6c, 0xf3, 0xe6, 0x1d, 0xa0, 0xf3, 0x36, 0x7b, 0x08, 0xb3, 0x5e, 0x9d, + 0xa2, 0x6c, 0xac, 0xa7, 0x20, 0xd6, 0x0c, 0xd5, 0xc2, 0x6d, 0x6c, 0x44, 0xda, 0x5a, 0xcf, 0x43, + 0x5a, 0x77, 0xe5, 0xd2, 0x16, 0x8b, 0x4b, 0x3e, 0x81, 0xd7, 0xa9, 0x0b, 0x73, 0x81, 0x6f, 0x47, + 0x69, 0xfc, 0x9e, 0x83, 0xb4, 0x81, 0x0f, 0x64, 0xbf, 0xbf, 0xe2, 0x52, 0xca, 0xc0, 0x07, 0xcc, + 0x58, 0x3d, 0x82, 0xdc, 0x1a, 0x6e, 0x61, 0x07, 0x47, 0x6f, 0xc9, 0x77, 0x20, 0xef, 0x8a, 0x8e, + 0xb2, 0x93, 0xfe, 0x58, 0x00, 0xc4, 0xe5, 0x92, 0xd9, 0x33, 0xca, 0x7e, 0x5a, 0x22, 0xde, 0x81, + 0xd3, 0xb5, 0x0c, 0x36, 0xcd, 0x33, 0x2d, 0x05, 0x46, 0xa2, 0x33, 0xbd, 0x6f, 0x51, 0x13, 0x41, + 0x8b, 0xea, 0x79, 0x2b, 0xc4, 0x4f, 0x39, 0x80, 0xf9, 0x9e, 0xe2, 0x45, 0xdb, 0x95, 0x09, 0x5a, + 0xb2, 0xd8, 0x72, 0x3c, 0xe8, 0x99, 0x51, 0x62, 0xf1, 0x5d, 0x98, 0x2b, 0xb7, 0xb0, 0x62, 0x45, + 0xdd, 0x2c, 0xbc, 0x3b, 0x1f, 0x01, 0x0a, 0x8a, 0x8f, 0xb2, 0x4b, 0x75, 0xc8, 0xd4, 0x55, 0xc5, + 0xd8, 0xea, 0x10, 0x23, 0x68, 0xa3, 0x3b, 0x70, 0xce, 0x76, 0xcc, 0x8e, 0xac, 0x38, 0x32, 0xf3, + 0xab, 0x76, 0xcd, 0xae, 0xa1, 0x29, 0xd6, 0x11, 0xfd, 0x46, 0x4a, 0x9a, 0x27, 0xa9, 0xab, 0x0e, + 0x2d, 0x48, 0x89, 0x27, 0x91, 0xbe, 0x6b, 0xeb, 0x86, 0x4c, 0xdc, 0x9f, 0x96, 0x63, 0x73, 0x3d, + 0x87, 0xb6, 0x6e, 0x48, 0x8c, 0xc2, 0x6b, 0xf1, 0x6d, 0x81, 0x7d, 0x2b, 0x4a, 0xb5, 0x79, 0x13, + 0x32, 0xb6, 0xaa, 0x18, 0xf2, 0x9e, 0x69, 0xb5, 0x15, 0x87, 0xaa, 0x46, 0xfe, 0xf6, 0x0b, 0x61, + 0x4e, 0xa5, 0xaa, 0x18, 0x77, 0x69, 0x26, 0x09, 0x6c, 0xef, 0x39, 0xa8, 0x3d, 0xf7, 0x13, 0xa9, + 0xb8, 0x98, 0x28, 0xfe, 0x52, 0x80, 0x2c, 0x2b, 0x65, 0x94, 0xda, 0xf3, 0x2a, 0x24, 0x2c, 0xf3, + 0x80, 0x69, 0x4f, 0xe6, 0xf6, 0x73, 0x21, 0x22, 0xd6, 0xf1, 0x51, 0xd0, 0x6c, 0xd3, 0xec, 0xa8, + 0x04, 0xdc, 0xbd, 0x91, 0x29, 0x77, 0x7c, 0x52, 0x6e, 0x60, 0x5c, 0x12, 0x91, 0x71, 0x0d, 0x66, + 0x77, 0x15, 0x47, 0xdd, 0x27, 0xfd, 0x43, 0x0b, 0x49, 0x4c, 0x7c, 0xfc, 0x7a, 0x56, 0xca, 0x53, + 0xb2, 0x5b, 0x74, 0xbb, 0xf8, 0x5d, 0x01, 0x90, 0x84, 0x9f, 0x60, 0xcb, 0xc6, 0x1f, 0xff, 0x6e, + 0xfa, 0x6f, 0x01, 0xe6, 0x7b, 0x0a, 0xfb, 0xff, 0xad, 0xb7, 0x7e, 0x22, 0xc0, 0xf9, 0xf2, 0x3e, + 0x56, 0x1f, 0x97, 0x4d, 0xc3, 0xd6, 0x6d, 0x07, 0x1b, 0xea, 0x51, 0x94, 0x5d, 0xf6, 0x1c, 0xa4, + 0x0f, 0x74, 0x67, 0x5f, 0xd6, 0xf4, 0xbd, 0x3d, 0x3a, 0xa4, 0x53, 0x52, 0x8a, 0x10, 0xd6, 0xf4, + 0xbd, 0x3d, 0x74, 0x07, 0x12, 0x6d, 0x53, 0x63, 0xde, 0x5b, 0xfe, 0xf6, 0x52, 0x88, 0x78, 0x5a, + 0x34, 0xbb, 0xdb, 0xde, 0x30, 0x35, 0x2c, 0xd1, 0xcc, 0x68, 0x11, 0x40, 0x25, 0xd4, 0x8e, 0xa9, + 0x1b, 0x0e, 0xb7, 0xe2, 0x01, 0x0a, 0xb7, 0x12, 0x5f, 0x4f, 0x40, 0x61, 0xb0, 0x5e, 0x51, 0xf6, + 0xee, 0x36, 0x24, 0x99, 0xa9, 0xe2, 0xfd, 0x7b, 0x7b, 0x58, 0xf1, 0x43, 0x4a, 0xb0, 0xc2, 0x4c, + 0x1a, 0xef, 0x38, 0x2e, 0x67, 0xe1, 0x6f, 0x05, 0x48, 0xb2, 0x04, 0x74, 0x0b, 0x52, 0x1c, 0x90, + 0x6a, 0xb4, 0x8c, 0xf1, 0xd2, 0xb9, 0x67, 0xc7, 0x4b, 0x33, 0x0c, 0x7e, 0xae, 0x7d, 0xe8, 0x3f, + 0x4a, 0x33, 0x0c, 0x81, 0x6a, 0xa4, 0xa5, 0x6d, 0x47, 0xb1, 0x1c, 0x0a, 0xfc, 0x49, 0x4b, 0x67, + 0xa5, 0x14, 0x25, 0x10, 0xc4, 0x7f, 0x1f, 0x92, 0xb6, 0xa3, 0x38, 0x5d, 0x9b, 0xb7, 0xf5, 0x89, + 0x0a, 0x5b, 0xa7, 0x9c, 0x12, 0x97, 0x40, 0xa6, 0x50, 0x0d, 0x3b, 0x8a, 0xde, 0xa2, 0x8d, 0x9f, + 0x96, 0xf8, 0x5b, 0xf1, 0x9b, 0x02, 0x24, 0x59, 0x56, 0x74, 0x1e, 0xe6, 0x19, 0xe8, 0xac, 0x6d, + 0xae, 0x55, 0x1a, 0x15, 0x69, 0xa3, 0xb6, 0xb9, 0xda, 0xa8, 0x88, 0x53, 0xe8, 0x1c, 0x20, 0x37, + 0xa1, 0xbc, 0xb5, 0x59, 0xaf, 0xd5, 0x1b, 0x95, 0x4d, 0x02, 0x56, 0x09, 0x84, 0xa5, 0xf4, 0x00, + 0x35, 0x86, 0x2e, 0xc3, 0x72, 0x3f, 0x55, 0xae, 0x37, 0x56, 0x1b, 0x75, 0xb9, 0x52, 0x6f, 0xd4, + 0x36, 0x56, 0x1b, 0x95, 0x35, 0x31, 0x3e, 0x22, 0x17, 0xf9, 0x88, 0x24, 0x55, 0xca, 0x0d, 0x31, + 0x51, 0x7c, 0x0a, 0x67, 0x25, 0xac, 0x9a, 0xed, 0x4e, 0xd7, 0xc1, 0xa4, 0x94, 0x76, 0x94, 0x5a, + 0x7e, 0x1e, 0x66, 0x34, 0xeb, 0x48, 0xb6, 0xba, 0x06, 0xd7, 0xf1, 0xa4, 0x66, 0x1d, 0x49, 0x5d, + 0x83, 0x2b, 0xe3, 0x5f, 0x09, 0x70, 0xae, 0xff, 0xe3, 0x51, 0xaa, 0xe2, 0x17, 0x20, 0xa3, 0x68, + 0x1a, 0xd6, 0x64, 0x0d, 0xb7, 0x1c, 0x85, 0x7b, 0xf4, 0xb7, 0x02, 0x92, 0xf8, 0xa2, 0xcd, 0x0a, + 0x5b, 0xad, 0x59, 0xf1, 0x16, 0x6d, 0x36, 0x1e, 0x96, 0xcb, 0xb4, 0x3c, 0x6b, 0x84, 0xd1, 0xb5, + 0x23, 0x54, 0x16, 0xa5, 0x14, 0x55, 0x38, 0x5f, 0xc2, 0x4d, 0xdd, 0x08, 0x2e, 0xc3, 0x44, 0xee, + 0x97, 0xc8, 0x50, 0x18, 0xfc, 0x48, 0x94, 0xde, 0xc9, 0x77, 0x12, 0x70, 0xb6, 0x62, 0x68, 0x1f, + 0x4d, 0x25, 0xc8, 0x78, 0x50, 0xcd, 0x76, 0x5b, 0x77, 0xdc, 0xbe, 0x67, 0x6f, 0xe8, 0xd7, 0x20, + 0xa5, 0x61, 0x45, 0xf3, 0xe0, 0x7b, 0xa6, 0x67, 0xaa, 0xea, 0x3a, 0x7a, 0x6b, 0x65, 0xbf, 0xa5, + 0xae, 0x34, 0xdc, 0x45, 0x4a, 0xc9, 0xcb, 0x8e, 0xbe, 0x04, 0xe7, 0x89, 0x31, 0xb7, 0x0c, 0xa5, + 0x25, 0x33, 0x69, 0xb2, 0x63, 0xe9, 0xcd, 0x26, 0xb6, 0xf8, 0x82, 0xd7, 0xf5, 0x90, 0x72, 0xd6, + 0x38, 0x47, 0x99, 0x32, 0x34, 0x58, 0x7e, 0xe9, 0xac, 0x1e, 0x46, 0x46, 0x9f, 0xf7, 0xd6, 0x47, + 0xec, 0x8e, 0x62, 0xd8, 0x85, 0x69, 0x6a, 0xc3, 0x86, 0xad, 0xa3, 0x71, 0xcd, 0xe0, 0xf3, 0x12, + 0xa1, 0xd8, 0xe8, 0x26, 0x71, 0xb5, 0xdf, 0xeb, 0xea, 0x16, 0x96, 0x6f, 0x75, 0xd4, 0x42, 0x92, + 0xd4, 0xbd, 0x94, 0x7f, 0x76, 0xbc, 0x04, 0x12, 0x23, 0xdf, 0xda, 0x2e, 0x13, 0xd7, 0x9b, 0x3d, + 0x77, 0x54, 0x74, 0x1d, 0x44, 0xc3, 0x94, 0x2d, 0xbc, 0x67, 0x61, 0x7b, 0x9f, 0x7f, 0x36, 0x45, + 0x5b, 0x2c, 0x6f, 0x98, 0x12, 0x23, 0x33, 0xd1, 0xe7, 0x20, 0xd9, 0x31, 0x75, 0xdb, 0x34, 0x0a, + 0x69, 0xd6, 0xa2, 0xec, 0x0d, 0xbd, 0x05, 0xa2, 0x6e, 0xc8, 0x7b, 0x2d, 0xbd, 0xb9, 0xef, 0xc8, + 0x07, 0x96, 0xee, 0x60, 0xbb, 0x30, 0x47, 0x0b, 0x1e, 0xa6, 0x16, 0x75, 0xbe, 0x12, 0xa9, 0xbd, + 0x4d, 0x72, 0xf2, 0x2a, 0xe4, 0x75, 0xe3, 0x2e, 0xe5, 0xa7, 0x44, 0xdb, 0x73, 0x09, 0x66, 0xc4, + 0x54, 0xf1, 0x3f, 0x04, 0x38, 0xd7, 0xaf, 0x26, 0x51, 0x0e, 0xd3, 0xeb, 0x20, 0x9a, 0x06, 0x96, + 0x3b, 0xfb, 0x8a, 0x8d, 0x79, 0xb7, 0xf2, 0xf9, 0x2b, 0x6f, 0x1a, 0x78, 0x9b, 0x90, 0x59, 0x27, + 0xa1, 0x6d, 0x98, 0xb3, 0x1d, 0xa5, 0xa9, 0x1b, 0x4d, 0xd9, 0x5b, 0xc3, 0xa6, 0x0b, 0x11, 0xe3, + 0x74, 0x88, 0xd7, 0x52, 0xe4, 0xdc, 0x1e, 0xbd, 0xc7, 0xe9, 0xf9, 0x67, 0x01, 0xe6, 0x56, 0xb5, + 0xb6, 0x6e, 0xd4, 0x3b, 0x2d, 0x3d, 0x52, 0x98, 0x7c, 0x19, 0xd2, 0x36, 0x91, 0xe9, 0xcf, 0x41, + 0x3e, 0xc4, 0x49, 0xd1, 0x14, 0x32, 0x19, 0x3d, 0x80, 0x59, 0x7c, 0xd8, 0xd1, 0x2d, 0x85, 0x34, + 0x31, 0xad, 0x20, 0xd7, 0xea, 0x89, 0xea, 0x96, 0xf7, 0x79, 0x49, 0x92, 0xd7, 0x83, 0xa4, 0x66, + 0x8f, 0x00, 0x05, 0x2b, 0x16, 0xa5, 0x0d, 0x91, 0x61, 0x9e, 0x8a, 0xde, 0x31, 0xec, 0x88, 0x5b, + 0x8d, 0x5b, 0xc1, 0x2f, 0xc2, 0x99, 0xde, 0x0f, 0x44, 0x59, 0xfa, 0x77, 0x79, 0x8f, 0x6f, 0x60, + 0xeb, 0x23, 0x42, 0x96, 0x41, 0xf1, 0x51, 0x96, 0xfc, 0xab, 0x02, 0x5c, 0xa0, 0xb2, 0xe9, 0xb0, + 0xdc, 0xc3, 0x16, 0xdd, 0x1e, 0x89, 0x52, 0x69, 0x2f, 0x41, 0xd2, 0x51, 0xac, 0x26, 0x66, 0xf6, + 0x7b, 0xba, 0x94, 0x21, 0xee, 0x55, 0xdd, 0x31, 0x2d, 0xe2, 0x5e, 0xf1, 0x24, 0x5e, 0x4f, 0x05, + 0x16, 0xc2, 0xca, 0x12, 0x65, 0x7d, 0xff, 0x32, 0xc6, 0xbf, 0x51, 0xde, 0x67, 0x30, 0xbd, 0xd3, + 0xd2, 0x55, 0x25, 0x52, 0x6f, 0xa5, 0x02, 0x19, 0x95, 0x0a, 0x97, 0x9d, 0xa3, 0x0e, 0x5b, 0x50, + 0xca, 0xdf, 0xbe, 0x1c, 0x2a, 0x88, 0x7e, 0x9c, 0x95, 0xa4, 0x71, 0xd4, 0xc1, 0xc4, 0xd1, 0x76, + 0x9f, 0xd1, 0x1a, 0xcc, 0xb0, 0xc6, 0x71, 0x31, 0xca, 0x08, 0x11, 0x74, 0xb4, 0xd2, 0xcc, 0x7c, + 0x14, 0xbb, 0xac, 0xe8, 0xb3, 0x90, 0xc2, 0x87, 0x1d, 0x99, 0x6e, 0xa9, 0x25, 0x26, 0xdd, 0x52, + 0x93, 0x66, 0xf0, 0x61, 0x87, 0xbc, 0xf2, 0x7e, 0xf9, 0x86, 0x00, 0xcf, 0x85, 0x36, 0x5a, 0x94, + 0xe6, 0xfb, 0x53, 0x7c, 0xe3, 0x2f, 0x36, 0x71, 0x29, 0x69, 0xfe, 0xe2, 0x9f, 0xb9, 0x1a, 0x2c, + 0xe1, 0x96, 0xa9, 0x2a, 0x1f, 0xc1, 0xaa, 0x57, 0xa0, 0x27, 0x62, 0xa7, 0xee, 0x89, 0x3e, 0x15, + 0xef, 0x2b, 0x6c, 0x94, 0x2a, 0xfe, 0x07, 0x02, 0xcc, 0x57, 0xb1, 0x62, 0x39, 0xbb, 0x58, 0x71, + 0x1a, 0x87, 0x91, 0x3a, 0x63, 0xaf, 0x42, 0xdc, 0x30, 0x0f, 0x78, 0x1f, 0x4d, 0x34, 0x9f, 0x90, + 0xfc, 0xbe, 0x09, 0xee, 0x2d, 0x57, 0x94, 0xb5, 0xfe, 0x7e, 0x1c, 0xd2, 0xf7, 0xca, 0x51, 0xd6, + 0xf5, 0x33, 0x7c, 0x2d, 0x91, 0x8d, 0xbe, 0x30, 0x85, 0xf4, 0xbe, 0xb7, 0x72, 0xaf, 0xbc, 0x8e, + 0x8f, 0xdc, 0x65, 0x06, 0xc2, 0x85, 0x56, 0x21, 0xed, 0xec, 0x13, 0x9f, 0xcb, 0x6c, 0x69, 0x27, + 0x99, 0x7f, 0x7d, 0x2e, 0xd4, 0x82, 0xb3, 0xce, 0xa1, 0x41, 0x5d, 0x39, 0xb9, 0xa9, 0xca, 0xbe, + 0xb8, 0x89, 0x5c, 0x95, 0x05, 0x22, 0xee, 0xd9, 0xf1, 0x12, 0x6a, 0x1c, 0x1a, 0xc4, 0xef, 0xbb, + 0x57, 0x6e, 0xb8, 0x02, 0x24, 0xe4, 0x70, 0x9a, 0xea, 0xd1, 0x16, 0x1e, 0xc3, 0x34, 0xad, 0x85, + 0xbb, 0xf7, 0x2d, 0x84, 0xec, 0x7d, 0x93, 0x4a, 0x79, 0x0e, 0x53, 0xec, 0x24, 0x95, 0x72, 0x09, + 0x4c, 0x15, 0xb8, 0x42, 0xbc, 0x05, 0x40, 0x9a, 0x30, 0x4a, 0x35, 0xf8, 0xeb, 0x38, 0xe4, 0xb7, + 0xbb, 0xf6, 0x7e, 0xc4, 0x7a, 0x5f, 0x06, 0xe8, 0x74, 0xed, 0x7d, 0x6c, 0xc9, 0xce, 0xa1, 0xc1, + 0x6b, 0x3e, 0x66, 0x3f, 0xdd, 0xad, 0x3a, 0xe3, 0x6b, 0x1c, 0x1a, 0x68, 0x8b, 0x0b, 0xc1, 0xb2, + 0xbf, 0x29, 0x7f, 0x63, 0x02, 0x18, 0xd9, 0x38, 0x34, 0x36, 0xb0, 0x87, 0x1f, 0x99, 0x40, 0x4c, + 0x04, 0x7e, 0x06, 0x66, 0xc8, 0x8b, 0xec, 0x98, 0x27, 0xd1, 0xb0, 0x24, 0xe1, 0x69, 0x98, 0xe8, + 0x0d, 0x48, 0x33, 0x6e, 0x32, 0x4b, 0x25, 0xe9, 0x2c, 0x15, 0x56, 0x25, 0xde, 0x9a, 0x74, 0x7e, + 0x4a, 0x51, 0x56, 0x32, 0x3b, 0x9d, 0x81, 0xe9, 0x3d, 0xd3, 0x52, 0x31, 0xdd, 0x85, 0x4f, 0x49, + 0xec, 0x05, 0xdd, 0x80, 0x39, 0xdd, 0x50, 0x5b, 0x5d, 0x5b, 0x7f, 0x82, 0x65, 0xb7, 0x68, 0x0c, + 0x64, 0xcc, 0x7a, 0x09, 0x54, 0xa0, 0xe9, 0x39, 0x96, 0xd3, 0x62, 0xf2, 0x7e, 0x22, 0x95, 0x12, + 0xd3, 0xc5, 0x6f, 0x0a, 0x30, 0xeb, 0xf5, 0x5d, 0x94, 0x53, 0x4b, 0xb9, 0xa7, 0xe1, 0x4f, 0xde, + 0x7b, 0xa4, 0xb1, 0x8b, 0xff, 0x28, 0xc0, 0x9c, 0x84, 0x55, 0xf3, 0x09, 0xed, 0xcc, 0x28, 0x95, + 0xab, 0xc4, 0xa2, 0x34, 0x62, 0xa7, 0x54, 0x08, 0x1a, 0xb7, 0x71, 0x0b, 0xce, 0xe8, 0x6d, 0x32, + 0x03, 0xe9, 0x4e, 0xeb, 0x88, 0xa3, 0x1f, 0x07, 0xbb, 0x1b, 0x89, 0xf3, 0x7e, 0x5a, 0xd9, 0x4d, + 0xe2, 0x63, 0xf0, 0x3b, 0x74, 0x3d, 0xd9, 0xaf, 0x56, 0x94, 0xed, 0x5e, 0x83, 0x9c, 0xc5, 0x44, + 0x63, 0xed, 0xc4, 0x4d, 0x9f, 0xf5, 0x58, 0x49, 0xeb, 0x7f, 0x2f, 0x06, 0xb3, 0x6f, 0x75, 0xb1, + 0x75, 0xf4, 0x31, 0x6c, 0xfb, 0xab, 0x30, 0x7b, 0xa0, 0xe8, 0x8e, 0xbc, 0x67, 0x5a, 0x72, 0xb7, + 0xa3, 0x29, 0x8e, 0x1b, 0x4f, 0x90, 0x23, 0xe4, 0xbb, 0xa6, 0xb5, 0x43, 0x89, 0x08, 0x03, 0x7a, + 0x6c, 0x98, 0x07, 0x86, 0x4c, 0xc8, 0x14, 0x7c, 0x1e, 0x1a, 0x7c, 0xe1, 0xb8, 0xf4, 0xe9, 0x7f, + 0x39, 0x5e, 0xba, 0x33, 0x51, 0x84, 0x10, 0x0d, 0xb2, 0xea, 0x76, 0x75, 0x6d, 0x65, 0x67, 0xa7, + 0xb6, 0x26, 0x89, 0x54, 0xe4, 0xdb, 0x4c, 0x62, 0xe3, 0xd0, 0x70, 0x1d, 0x8d, 0x0f, 0x05, 0x10, + 0xfd, 0x06, 0x8b, 0xb2, 0x57, 0x2b, 0x90, 0x79, 0xaf, 0x8b, 0x2d, 0xfd, 0x14, 0x7d, 0x0a, 0x9c, + 0x91, 0x18, 0xaf, 0x77, 0x20, 0xdb, 0xd3, 0x0e, 0xf1, 0x5f, 0xad, 0x1d, 0x32, 0x07, 0x7e, 0x13, + 0x14, 0x7f, 0x2c, 0x00, 0xa2, 0x95, 0xaf, 0xb1, 0x35, 0xfb, 0x8f, 0x99, 0xc2, 0x5c, 0x07, 0x91, + 0xc6, 0xec, 0xc9, 0xfa, 0x9e, 0xdc, 0xd6, 0x6d, 0x5b, 0x37, 0x9a, 0x5c, 0x63, 0xf2, 0x94, 0x5e, + 0xdb, 0xdb, 0x60, 0x54, 0xde, 0x97, 0xbf, 0x09, 0xf3, 0x3d, 0xb5, 0x89, 0xb2, 0x37, 0x2f, 0x42, + 0x76, 0xcf, 0xec, 0x1a, 0x9a, 0xcc, 0x16, 0x9f, 0xf8, 0x22, 0x5b, 0x86, 0xd2, 0xd8, 0xf7, 0x8a, + 0x5f, 0x89, 0xc1, 0x19, 0x09, 0xdb, 0x66, 0xeb, 0x09, 0x8e, 0xbe, 0x3d, 0xb7, 0x80, 0x6f, 0xac, + 0xc8, 0xbf, 0x4a, 0xb3, 0xa6, 0x99, 0x0c, 0x36, 0x29, 0xf6, 0xae, 0xc5, 0x5f, 0x1e, 0xad, 0x99, + 0x83, 0xab, 0xef, 0x7c, 0x6d, 0x2c, 0x11, 0x5c, 0x1b, 0xe3, 0x1d, 0xf1, 0xeb, 0x70, 0xb6, 0xaf, + 0x21, 0xa2, 0xf4, 0x5d, 0xfe, 0x29, 0x06, 0x17, 0x7a, 0xc5, 0x47, 0x8d, 0x64, 0xfe, 0x6f, 0x34, + 0x36, 0xaa, 0x42, 0xae, 0xad, 0x1b, 0xa7, 0x5b, 0x9b, 0xcb, 0xb6, 0x75, 0xa3, 0xd1, 0xeb, 0x6d, + 0x12, 0xd0, 0x15, 0xd6, 0xae, 0x51, 0xf6, 0xdd, 0xd7, 0x05, 0xc8, 0x46, 0xbd, 0xfa, 0x73, 0xba, + 0x20, 0x22, 0x5e, 0xe7, 0x06, 0xe4, 0x3e, 0x82, 0xe5, 0xa2, 0x3f, 0x15, 0x00, 0x35, 0xac, 0xae, + 0x41, 0xa0, 0xeb, 0x03, 0xb3, 0x19, 0x65, 0x65, 0xcf, 0xc0, 0xb4, 0x6e, 0x68, 0xf8, 0x90, 0x56, + 0x36, 0x21, 0xb1, 0x97, 0x9e, 0x9d, 0xba, 0xf8, 0x44, 0x3b, 0x75, 0xbc, 0xfe, 0xef, 0xc0, 0x7c, + 0x4f, 0x41, 0xa3, 0x6c, 0x85, 0xef, 0xc5, 0x60, 0x9e, 0x57, 0x27, 0xf2, 0xe5, 0xb2, 0x53, 0x45, + 0x30, 0xa3, 0xcf, 0x02, 0x74, 0x2c, 0xfc, 0x44, 0x66, 0xac, 0xf1, 0x89, 0x58, 0xd3, 0x84, 0x83, + 0x12, 0xd0, 0x17, 0x60, 0x96, 0x0c, 0xb8, 0x8e, 0x65, 0x76, 0x4c, 0x9b, 0xcc, 0xeb, 0xf6, 0x64, + 0x80, 0x62, 0xee, 0xd9, 0xf1, 0x52, 0x6e, 0x43, 0x37, 0xb6, 0x39, 0x63, 0xa3, 0x2e, 0x91, 0x91, + 0xeb, 0xbd, 0xba, 0xce, 0xc8, 0x4f, 0x04, 0x38, 0xf3, 0x91, 0x2d, 0x30, 0xfe, 0x6f, 0xb4, 0x98, + 0x37, 0x1f, 0x88, 0xf4, 0xb5, 0x66, 0xec, 0x99, 0xd1, 0x2f, 0xfb, 0x7e, 0x5d, 0x80, 0xb9, 0x80, + 0xf8, 0x28, 0x67, 0xfd, 0xd3, 0xc5, 0xc9, 0x7f, 0x91, 0xf8, 0x01, 0x41, 0xb5, 0x8f, 0x72, 0x50, + 0xfd, 0x97, 0x00, 0xe7, 0xca, 0x6c, 0x0f, 0xd7, 0x0d, 0x4b, 0x88, 0x52, 0x4b, 0x0a, 0x30, 0xf3, + 0x04, 0x5b, 0xb6, 0x6e, 0xb2, 0x79, 0x2f, 0x27, 0xb9, 0xaf, 0x68, 0x01, 0x52, 0xb6, 0xa1, 0x74, + 0xec, 0x7d, 0xd3, 0xdd, 0x2f, 0xf2, 0xde, 0xbd, 0x10, 0x8a, 0xe9, 0xd3, 0x87, 0x50, 0x24, 0xc3, + 0x43, 0x28, 0xf8, 0x96, 0xca, 0x8f, 0x04, 0x38, 0x3f, 0x50, 0xeb, 0x28, 0x7b, 0xfa, 0xcb, 0x90, + 0x51, 0xb9, 0x60, 0x62, 0x43, 0xd9, 0xae, 0x51, 0x8d, 0x64, 0x3b, 0xa5, 0xa7, 0xfd, 0xec, 0x78, + 0x09, 0xdc, 0xa2, 0xd6, 0xd6, 0x78, 0xc5, 0xc8, 0xb3, 0x56, 0xfc, 0x39, 0x40, 0xae, 0x72, 0xd8, + 0x31, 0x2d, 0xa7, 0xce, 0x1c, 0x09, 0xb4, 0x06, 0xa9, 0x8e, 0x65, 0x3e, 0xd1, 0xdd, 0x4a, 0xe4, + 0x43, 0xb7, 0x56, 0x7b, 0x78, 0xb6, 0x79, 0x7e, 0xc9, 0xe3, 0x44, 0x12, 0xa4, 0x1f, 0x98, 0xaa, + 0xd2, 0xba, 0xab, 0xb7, 0x5c, 0x8d, 0x5d, 0x19, 0x27, 0x66, 0xc5, 0xe3, 0xd8, 0x56, 0x9c, 0x7d, + 0x77, 0x00, 0x7b, 0x44, 0x74, 0x0f, 0x52, 0x55, 0xc7, 0xe9, 0x90, 0x44, 0x3e, 0xfa, 0xaf, 0x8c, + 0x15, 0x49, 0x18, 0xb8, 0x24, 0x8f, 0x19, 0x49, 0x30, 0x77, 0xcf, 0x34, 0x9b, 0x2d, 0x5c, 0x6e, + 0x99, 0x5d, 0xad, 0x6c, 0x1a, 0x7b, 0x7a, 0x93, 0x5b, 0xcf, 0xcb, 0x63, 0x25, 0xde, 0x2b, 0xd7, + 0xa5, 0x41, 0x76, 0xf4, 0x39, 0x48, 0xd5, 0xef, 0x70, 0x51, 0xcc, 0xf7, 0xb9, 0x34, 0x56, 0x54, + 0xfd, 0x8e, 0xe4, 0x31, 0xa1, 0x2a, 0x64, 0x56, 0x9f, 0x76, 0x2d, 0xcc, 0x65, 0x24, 0xa9, 0x8c, + 0xab, 0x63, 0x65, 0x50, 0x1e, 0x29, 0xc8, 0x8a, 0xde, 0x82, 0xfc, 0xdb, 0xa6, 0xf5, 0xb8, 0x65, + 0x2a, 0x6e, 0xdd, 0x66, 0xa8, 0xb0, 0x17, 0xc7, 0x0a, 0x73, 0xd9, 0xa4, 0x3e, 0x01, 0x0b, 0x5f, + 0x80, 0x5c, 0x4f, 0xe7, 0x20, 0x04, 0x89, 0x0e, 0xe9, 0x07, 0x81, 0x06, 0xbc, 0xd0, 0x67, 0xf4, + 0x0a, 0xcc, 0x18, 0xa6, 0x86, 0x5d, 0x9d, 0xcd, 0x95, 0xce, 0x3c, 0x3b, 0x5e, 0x4a, 0x6e, 0x9a, + 0x1a, 0x9b, 0xf6, 0xf9, 0x93, 0x94, 0x24, 0x99, 0xdc, 0x49, 0x7f, 0xe1, 0x2a, 0x24, 0x48, 0xbf, + 0x90, 0xc1, 0xbe, 0xab, 0xd8, 0x78, 0xc7, 0xd2, 0xb9, 0x4c, 0xf7, 0x95, 0xe7, 0xfb, 0x7b, 0x01, + 0x62, 0xf5, 0x3b, 0xc4, 0xff, 0xdc, 0xed, 0xaa, 0x8f, 0xb1, 0xc3, 0x73, 0xf1, 0x37, 0xea, 0x97, + 0x5a, 0x78, 0x4f, 0x67, 0xbe, 0x48, 0x5a, 0xe2, 0x6f, 0xe8, 0x05, 0x00, 0x45, 0x55, 0xb1, 0x6d, + 0xcb, 0xee, 0xe1, 0xa0, 0xb4, 0x94, 0x66, 0x94, 0x75, 0x7c, 0x44, 0xd8, 0x6c, 0xac, 0x5a, 0xd8, + 0x71, 0x23, 0x77, 0xd8, 0x1b, 0x61, 0x73, 0x70, 0xbb, 0x23, 0x3b, 0xe6, 0x63, 0x6c, 0xd0, 0xfe, + 0x4c, 0x4b, 0x69, 0x42, 0x69, 0x10, 0x02, 0xb1, 0x3f, 0xd8, 0xd0, 0x7c, 0x63, 0x91, 0x96, 0xbc, + 0x77, 0x22, 0xd2, 0xc2, 0x4d, 0x9d, 0x9f, 0x76, 0x49, 0x4b, 0xfc, 0x8d, 0x57, 0xe3, 0x1b, 0x02, + 0xc4, 0xef, 0x95, 0xeb, 0x27, 0xae, 0x07, 0x82, 0x84, 0xd2, 0xe5, 0x7a, 0x9f, 0x96, 0xe8, 0x33, + 0x0d, 0x69, 0xd3, 0x5b, 0x2d, 0x02, 0xc7, 0x3b, 0x96, 0xf9, 0x65, 0xac, 0xba, 0xb5, 0xc8, 0x73, + 0xf2, 0x36, 0xa3, 0xa2, 0x65, 0xc8, 0xa8, 0x16, 0xd6, 0xb0, 0xe1, 0xe8, 0x4a, 0xcb, 0xe6, 0xd5, + 0x09, 0x92, 0x78, 0xe1, 0xbe, 0x22, 0xc0, 0x34, 0x55, 0x24, 0xf4, 0x3c, 0xa4, 0x55, 0xd3, 0x70, + 0x14, 0xdd, 0xe0, 0x56, 0x20, 0x2d, 0xf9, 0x84, 0xa1, 0x85, 0xbc, 0x08, 0x59, 0x45, 0x55, 0xcd, + 0xae, 0xe1, 0xc8, 0x86, 0xd2, 0xc6, 0xbc, 0xb0, 0x19, 0x4e, 0xdb, 0x54, 0xda, 0x18, 0x2d, 0x81, + 0xfb, 0xea, 0x1d, 0xc7, 0x4a, 0x4b, 0xc0, 0x49, 0xeb, 0xf8, 0x88, 0x97, 0xe4, 0x47, 0x02, 0xa4, + 0x5c, 0x15, 0x24, 0x85, 0x69, 0x62, 0x03, 0x5b, 0x8a, 0x63, 0x7a, 0x85, 0xf1, 0x08, 0xfd, 0xb3, + 0x44, 0xda, 0x9f, 0x25, 0xce, 0xc0, 0xb4, 0xa3, 0xec, 0xb6, 0xdc, 0x72, 0xb0, 0x17, 0xba, 0x0c, + 0xda, 0x52, 0x9a, 0x6c, 0x15, 0x27, 0x2d, 0xb1, 0x17, 0x52, 0x25, 0x1e, 0x43, 0xc9, 0x5a, 0x87, + 0xbf, 0x91, 0xf2, 0xb2, 0xb0, 0xc1, 0x5d, 0xdc, 0xd4, 0x0d, 0xda, 0xd9, 0x71, 0x09, 0x28, 0x89, + 0x46, 0xe8, 0xa0, 0xe7, 0x20, 0xcd, 0x32, 0x60, 0x43, 0xa3, 0x3d, 0x1e, 0x97, 0x52, 0x94, 0x50, + 0x71, 0xcf, 0x9f, 0x70, 0xd7, 0xe0, 0xcf, 0x05, 0x98, 0x63, 0x71, 0x17, 0x2c, 0xde, 0x30, 0xba, + 0x79, 0xf2, 0x75, 0x48, 0x6b, 0x8a, 0xa3, 0xb0, 0xe3, 0x5f, 0xb1, 0x91, 0xc7, 0xbf, 0x5c, 0x53, + 0x48, 0xf2, 0xd3, 0x23, 0x60, 0x08, 0x12, 0xe4, 0x99, 0x1d, 0x9b, 0x93, 0xe8, 0xb3, 0xbf, 0x83, + 0x1d, 0x2c, 0x6e, 0x94, 0x7e, 0xc3, 0x4f, 0xe3, 0xee, 0xa4, 0x13, 0x65, 0x33, 0x7c, 0x1e, 0x66, + 0x38, 0x18, 0xe6, 0x8d, 0xb0, 0x3c, 0xce, 0xde, 0xb9, 0xfb, 0x7d, 0x9c, 0x0d, 0x95, 0x00, 0x58, + 0xc0, 0x20, 0x8d, 0xc0, 0x88, 0x9f, 0x60, 0xb3, 0x84, 0xb2, 0x11, 0x2a, 0xda, 0x84, 0x4c, 0xfb, + 0x89, 0xaa, 0xca, 0x7b, 0x7a, 0xcb, 0xe1, 0xc1, 0x49, 0xe1, 0x11, 0xb9, 0x1b, 0x0f, 0xcb, 0xe5, + 0xbb, 0x34, 0x13, 0x8b, 0x11, 0xf2, 0xdf, 0x25, 0x20, 0x12, 0xd8, 0x33, 0x7a, 0x19, 0x78, 0xb0, + 0xbe, 0x6c, 0xbb, 0x47, 0x6f, 0x4a, 0xb9, 0x67, 0xc7, 0x4b, 0x69, 0x89, 0x52, 0xeb, 0xf5, 0x86, + 0x94, 0x66, 0x19, 0xea, 0xb6, 0x83, 0x2e, 0x41, 0xce, 0x6c, 0xeb, 0x8e, 0xec, 0xce, 0xf0, 0xdc, + 0x95, 0xc9, 0x12, 0xa2, 0xeb, 0x01, 0xa0, 0x06, 0x5c, 0xc3, 0x06, 0x19, 0x0b, 0xb4, 0x9e, 0x2c, + 0x12, 0x5d, 0xd6, 0x1d, 0x36, 0x9e, 0x64, 0xb3, 0xe3, 0xe8, 0x6d, 0xfd, 0x29, 0xdd, 0x16, 0xe5, + 0x5b, 0x05, 0x97, 0x58, 0x76, 0x52, 0x3f, 0x1a, 0x9b, 0x5e, 0xe3, 0x79, 0xb7, 0x02, 0x59, 0xb9, + 0xd6, 0x7c, 0x4d, 0x80, 0x5c, 0xa9, 0xdb, 0x7a, 0xbc, 0xd5, 0xa9, 0x77, 0xdb, 0x6d, 0xc5, 0x3a, + 0x22, 0x03, 0x84, 0x69, 0xa7, 0xfe, 0x14, 0xb3, 0xc8, 0x4d, 0xae, 0x7e, 0xfa, 0x53, 0x4c, 0xd4, + 0x8f, 0x07, 0x04, 0x13, 0x3a, 0x8b, 0xf6, 0xbd, 0x04, 0x39, 0x0a, 0x24, 0x65, 0x6c, 0x38, 0x96, + 0x8e, 0xd9, 0x3a, 0x45, 0x5c, 0xca, 0x52, 0x62, 0x85, 0xd1, 0xd0, 0x15, 0xc8, 0xdb, 0x47, 0xb6, + 0x83, 0xdb, 0x32, 0x3b, 0xb4, 0xca, 0xd0, 0x4f, 0x5c, 0xca, 0x31, 0xaa, 0xc4, 0x88, 0xc5, 0xbf, + 0x88, 0x43, 0xde, 0xd5, 0xb4, 0x28, 0x5d, 0xb4, 0x12, 0x4c, 0xef, 0xe9, 0x2d, 0xec, 0xee, 0x2e, + 0x0f, 0x9f, 0xa6, 0xbd, 0x90, 0x51, 0x32, 0x73, 0xba, 0xae, 0x39, 0x65, 0x8d, 0x42, 0xdb, 0x16, + 0x3e, 0x10, 0x20, 0x41, 0x7d, 0xa3, 0x5b, 0x90, 0xa0, 0xc3, 0x5f, 0x98, 0x64, 0xf8, 0xd3, 0xac, + 0xde, 0x14, 0x1e, 0x0b, 0x4c, 0xe1, 0x64, 0x3e, 0xdc, 0x57, 0x5e, 0xbd, 0x75, 0x9b, 0x6a, 0x5a, + 0x56, 0xe2, 0x6f, 0xa8, 0x44, 0x63, 0x12, 0x4c, 0xcb, 0xc1, 0x1a, 0xf7, 0x4c, 0xc2, 0x06, 0x57, + 0x4f, 0xc7, 0xbb, 0xa6, 0xc6, 0xe5, 0x43, 0x17, 0x20, 0x4e, 0x54, 0x78, 0x86, 0x6d, 0x52, 0x3e, + 0x3b, 0x5e, 0x8a, 0x13, 0xe5, 0x25, 0x34, 0xe6, 0x58, 0xdf, 0x4f, 0xa4, 0x12, 0xe2, 0x74, 0xf1, + 0x07, 0x09, 0xc8, 0xd5, 0xda, 0x51, 0x1b, 0x87, 0xd5, 0xde, 0x0e, 0x0b, 0x73, 0x1c, 0x7b, 0x3e, + 0x1a, 0xd2, 0x5f, 0x3d, 0x66, 0x36, 0x7e, 0x32, 0x33, 0x5b, 0x23, 0x4e, 0x01, 0x3f, 0x67, 0x4b, + 0xbe, 0xff, 0xd2, 0xd8, 0xef, 0x37, 0xc8, 0x88, 0x93, 0x08, 0x8f, 0x1f, 0x13, 0x4d, 0x77, 0xa9, + 0xdf, 0xa4, 0xbe, 0x07, 0x53, 0x9a, 0xe4, 0xe4, 0x4a, 0x33, 0x83, 0x0d, 0x8d, 0xaa, 0xcc, 0x21, + 0xd7, 0x98, 0xd7, 0x20, 0xae, 0xe9, 0xa3, 0x9a, 0x34, 0xcc, 0x54, 0x12, 0x96, 0x31, 0x8a, 0x93, + 0x08, 0x2a, 0x4e, 0x10, 0x38, 0x2d, 0x6c, 0x01, 0xf8, 0xb5, 0x42, 0xcb, 0x90, 0x34, 0x5b, 0x9a, + 0x1b, 0xce, 0x9d, 0x2b, 0xa5, 0x9f, 0x1d, 0x2f, 0x4d, 0x6f, 0xb5, 0xb4, 0xda, 0x9a, 0x34, 0x6d, + 0xb6, 0xb4, 0x9a, 0x46, 0x8f, 0x27, 0xe3, 0x03, 0xd9, 0x0b, 0x31, 0xc9, 0x4a, 0x33, 0x06, 0x3e, + 0xf0, 0x83, 0x5c, 0x3c, 0xe1, 0x44, 0x6d, 0xfe, 0x44, 0x80, 0xbc, 0xdb, 0x82, 0xd1, 0x8e, 0xf4, + 0x94, 0xde, 0xe6, 0x9a, 0x1f, 0x3f, 0x99, 0xe6, 0xbb, 0x7c, 0xfc, 0x10, 0xd5, 0x57, 0x05, 0x1e, + 0x30, 0x57, 0x57, 0x15, 0x87, 0x98, 0xf9, 0x08, 0xd5, 0xfb, 0x45, 0x10, 0x2d, 0xc5, 0xd0, 0xcc, + 0xb6, 0xfe, 0x14, 0xb3, 0xf5, 0x11, 0x9b, 0x6f, 0x0b, 0xcc, 0x7a, 0x74, 0xba, 0x00, 0xe0, 0x2e, + 0xef, 0xfc, 0xa7, 0xc0, 0x83, 0xeb, 0xbc, 0xc2, 0x44, 0xd9, 0x68, 0xeb, 0x90, 0xa4, 0x4b, 0x7b, + 0xee, 0x70, 0x7b, 0x25, 0x44, 0x48, 0xd8, 0xd7, 0x59, 0xbc, 0x90, 0xa7, 0xf0, 0x54, 0xc4, 0xc2, + 0xe7, 0x61, 0x9a, 0x92, 0x4f, 0x61, 0xe3, 0x78, 0xcb, 0xbf, 0x07, 0x73, 0xab, 0x9a, 0x56, 0xaf, + 0x73, 0xed, 0x8b, 0xae, 0xd9, 0x5d, 0xef, 0x29, 0x16, 0xe6, 0x3d, 0x05, 0x3f, 0x19, 0xa5, 0xf7, + 0xd4, 0x81, 0x3c, 0x8f, 0x0d, 0x8e, 0x78, 0x2d, 0x97, 0xc6, 0x0f, 0x73, 0xb5, 0x61, 0x2f, 0xfe, + 0xd9, 0x54, 0xef, 0x8b, 0x51, 0xd6, 0xa4, 0x0b, 0xf3, 0xae, 0xdc, 0xa8, 0xb7, 0x4d, 0x46, 0x55, + 0x87, 0xae, 0x89, 0x05, 0x3f, 0x1b, 0x65, 0x9d, 0xfe, 0x5d, 0x80, 0x7c, 0xbd, 0xbb, 0xcb, 0x2e, + 0x28, 0x88, 0x32, 0x42, 0x31, 0xdd, 0xc2, 0x7b, 0x8e, 0x7c, 0xb2, 0x78, 0x3b, 0xd7, 0x12, 0x11, + 0x56, 0x42, 0x45, 0xab, 0x00, 0x16, 0x8d, 0x15, 0xa7, 0x72, 0xe2, 0x13, 0xc7, 0xed, 0xa5, 0x29, + 0x57, 0x20, 0xbe, 0xf0, 0x07, 0x31, 0x98, 0xf5, 0xaa, 0x19, 0xa5, 0xe9, 0xf8, 0x0d, 0xa0, 0xde, + 0xaf, 0x6c, 0x3b, 0x8a, 0x63, 0xf3, 0x12, 0xbe, 0x7c, 0x92, 0x83, 0x1b, 0xa5, 0x39, 0x1e, 0x45, + 0x95, 0xf6, 0x48, 0x52, 0x9a, 0x88, 0xa4, 0x8f, 0x68, 0x05, 0xe6, 0xa9, 0x7d, 0x94, 0x95, 0x4e, + 0xa7, 0xa5, 0x63, 0x4d, 0x66, 0x3b, 0x18, 0x09, 0xba, 0x83, 0x31, 0x47, 0x93, 0x56, 0x59, 0x4a, + 0x8d, 0xee, 0x66, 0xdc, 0x85, 0xec, 0x9e, 0x85, 0xf1, 0x53, 0x2c, 0x53, 0xaf, 0xeb, 0x24, 0xfb, + 0x5a, 0x19, 0xc6, 0x58, 0x27, 0x7c, 0xdc, 0x12, 0xbd, 0x0b, 0x73, 0xb4, 0x69, 0xa3, 0x3e, 0x6f, + 0xc3, 0x7b, 0xe5, 0xe7, 0x02, 0xa0, 0xa0, 0xfc, 0x8f, 0xae, 0x63, 0x62, 0x91, 0x77, 0xcc, 0xcb, + 0x80, 0x58, 0xa8, 0x81, 0x2d, 0x77, 0xb0, 0x25, 0xdb, 0x58, 0x35, 0xf9, 0xa9, 0x7a, 0x41, 0x12, + 0x79, 0xca, 0x36, 0xb6, 0xea, 0x94, 0x5e, 0xfc, 0xee, 0x05, 0xc8, 0xf2, 0x36, 0xd9, 0x31, 0x08, + 0xd8, 0xbf, 0x05, 0xf1, 0x26, 0x5f, 0x4d, 0xc9, 0x84, 0xe2, 0x2d, 0xff, 0x66, 0x8f, 0xea, 0x94, + 0x44, 0xf2, 0x12, 0x96, 0x4e, 0xd7, 0x09, 0x09, 0x8a, 0xf3, 0xe3, 0xa8, 0x82, 0x2c, 0x9d, 0xae, + 0x83, 0xea, 0x30, 0xab, 0xfa, 0x37, 0x1b, 0xc8, 0x84, 0x3d, 0x3e, 0xf4, 0xf8, 0x49, 0xe8, 0xfd, + 0x10, 0xd5, 0x29, 0x29, 0xaf, 0xf6, 0x24, 0xa0, 0x72, 0xf0, 0x28, 0x7d, 0x62, 0xe8, 0xda, 0x61, + 0xff, 0x31, 0xfe, 0xea, 0x54, 0xe0, 0xc4, 0x3d, 0x7a, 0x1d, 0x92, 0x1a, 0x3d, 0xa2, 0xcd, 0x35, + 0x34, 0x4c, 0x89, 0x7a, 0x4e, 0xc5, 0x57, 0xa7, 0x24, 0xce, 0x81, 0xee, 0x43, 0x96, 0x3d, 0xb1, + 0xb3, 0xc9, 0xdc, 0xad, 0xbc, 0x32, 0x5c, 0x42, 0xc0, 0x5a, 0x57, 0xa7, 0xa4, 0x8c, 0xe6, 0x53, + 0xd1, 0x27, 0x21, 0x61, 0xab, 0x8a, 0xc1, 0x97, 0x1c, 0x17, 0x87, 0x1c, 0x45, 0xf5, 0x99, 0x69, + 0x6e, 0xf4, 0x08, 0xe6, 0xe8, 0x02, 0x8b, 0xec, 0xf8, 0x3b, 0xcf, 0xf4, 0x28, 0x4c, 0xef, 0x66, + 0xb7, 0xe7, 0x6e, 0x85, 0x9f, 0xc0, 0xaa, 0x4e, 0x49, 0xe2, 0x6e, 0x5f, 0x12, 0xe9, 0x32, 0xea, + 0x2f, 0x07, 0x04, 0xa7, 0x87, 0x76, 0x59, 0xe8, 0x99, 0x28, 0xd2, 0x65, 0xb8, 0x27, 0x01, 0xdd, + 0x83, 0x8c, 0x42, 0xfc, 0x17, 0x99, 0x9e, 0x4c, 0x28, 0xc0, 0xd0, 0xb5, 0xe3, 0x81, 0x53, 0x25, + 0x55, 0x7a, 0x9c, 0xcc, 0x25, 0xfa, 0x82, 0xda, 0xd8, 0x6a, 0xe2, 0x42, 0x66, 0xb4, 0xa0, 0xe0, + 0x76, 0xb5, 0x27, 0x88, 0x12, 0xd1, 0x06, 0xe4, 0xf6, 0xdd, 0x48, 0x5d, 0x1a, 0x2a, 0x90, 0x1d, + 0xba, 0x80, 0x1c, 0x12, 0x69, 0x5c, 0x9d, 0x92, 0xb2, 0xfb, 0x01, 0x32, 0x5a, 0x81, 0x58, 0x53, + 0x2d, 0xe4, 0xa8, 0x8c, 0xe7, 0x47, 0xc5, 0xd1, 0x56, 0xa7, 0xa4, 0x58, 0x53, 0x25, 0xa8, 0x84, + 0x05, 0x0f, 0x1e, 0x1a, 0x85, 0xfc, 0x50, 0x23, 0xd3, 0x1b, 0xe6, 0x59, 0x9d, 0x92, 0x68, 0x30, + 0x24, 0xf9, 0xde, 0x36, 0xe4, 0x2d, 0xb6, 0xdf, 0xef, 0x46, 0xb5, 0x88, 0x54, 0xca, 0xb5, 0x70, + 0x53, 0x35, 0x10, 0xd8, 0x52, 0x9d, 0x92, 0x72, 0x56, 0x90, 0x8e, 0xbe, 0x04, 0x67, 0x7a, 0x25, + 0x72, 0xe5, 0x9e, 0x1b, 0xb0, 0x5c, 0xe1, 0x72, 0x7b, 0x75, 0x1c, 0x59, 0x03, 0x89, 0xe8, 0xd3, + 0x30, 0xcd, 0x7a, 0x0d, 0x51, 0x91, 0x61, 0x5b, 0x4d, 0x7d, 0x1d, 0xc6, 0xf2, 0x93, 0xf1, 0xe6, + 0xf0, 0x8d, 0x6e, 0xb9, 0x65, 0x36, 0x0b, 0xf3, 0x43, 0xc7, 0xdb, 0xe0, 0xc6, 0x3d, 0x19, 0x6f, + 0x8e, 0x4f, 0x25, 0xfd, 0x6e, 0xb1, 0x14, 0xbe, 0x2f, 0x7a, 0x66, 0x68, 0xbf, 0x87, 0xec, 0x7f, + 0x57, 0x69, 0xd0, 0x9e, 0x4f, 0x26, 0x45, 0xb3, 0xd8, 0xe9, 0x6f, 0x99, 0x0e, 0xe3, 0xb3, 0x43, + 0x8b, 0x36, 0x78, 0xa2, 0x9d, 0x14, 0xcd, 0xf2, 0xa9, 0xe8, 0x21, 0x88, 0xfc, 0x84, 0xa7, 0xbf, + 0x1e, 0x75, 0x6e, 0xe8, 0x4e, 0x44, 0xf8, 0x46, 0x62, 0x75, 0x4a, 0x9a, 0x55, 0x7b, 0x53, 0x88, + 0xb1, 0xa0, 0xf2, 0x64, 0xd5, 0x3f, 0x9a, 0x5b, 0x28, 0x0c, 0x35, 0x16, 0x43, 0x0e, 0x73, 0x13, + 0x63, 0xa1, 0xf6, 0x25, 0x11, 0x35, 0xd6, 0x0d, 0xdd, 0xa1, 0x86, 0x7d, 0x61, 0xa8, 0x1a, 0xf7, + 0x5e, 0x3e, 0x43, 0xd4, 0x58, 0x67, 0x14, 0xa2, 0xc6, 0x0e, 0xdf, 0x34, 0xe7, 0xdd, 0xf1, 0xfc, + 0x50, 0x35, 0x0e, 0xdb, 0x5d, 0x27, 0x6a, 0xec, 0x04, 0xe9, 0x44, 0x8d, 0x99, 0x81, 0xe8, 0x93, + 0xfb, 0xc2, 0x50, 0x35, 0x1e, 0x7a, 0x36, 0x88, 0xa8, 0xb1, 0x32, 0x90, 0x88, 0xd6, 0x00, 0x98, + 0x47, 0xa4, 0x1b, 0x7b, 0x66, 0x61, 0x71, 0xe8, 0xfc, 0xd3, 0xbf, 0x6d, 0x4e, 0xe6, 0x9f, 0x96, + 0x4b, 0x23, 0x86, 0x8c, 0xfa, 0xd8, 0x32, 0x5d, 0xfc, 0x2e, 0x2c, 0x0d, 0x35, 0x64, 0x03, 0x6b, + 0xe0, 0xc4, 0x90, 0x1d, 0x78, 0x44, 0x32, 0x91, 0xb1, 0x25, 0xa3, 0xc2, 0xf2, 0x98, 0xa5, 0x89, + 0xc0, 0x44, 0xc6, 0x38, 0xd0, 0x2a, 0xa4, 0x89, 0xa7, 0x70, 0x44, 0xcd, 0xd0, 0xc5, 0xa1, 0xde, + 0x6d, 0x5f, 0x54, 0x6a, 0x75, 0x4a, 0x4a, 0xbd, 0xc7, 0x49, 0xe4, 0xf3, 0x0c, 0xb7, 0x17, 0x8a, + 0x43, 0x3f, 0xdf, 0xb3, 0x52, 0x43, 0x3e, 0xcf, 0x38, 0x90, 0x0a, 0x67, 0x59, 0x5f, 0xf1, 0xc3, + 0x44, 0x16, 0x3f, 0x75, 0x53, 0xb8, 0x44, 0x45, 0x0d, 0x45, 0xc1, 0xa1, 0x07, 0x9b, 0xaa, 0x53, + 0xd2, 0xbc, 0x32, 0x98, 0x4a, 0x06, 0x3c, 0x9f, 0x7a, 0x18, 0x76, 0x2e, 0x5c, 0x1e, 0x3a, 0xe0, + 0x43, 0x56, 0x1b, 0xc8, 0x80, 0x57, 0x02, 0x64, 0x36, 0x01, 0x69, 0xb2, 0x6d, 0xb3, 0xad, 0x92, + 0x2b, 0x23, 0x26, 0xa0, 0x3e, 0x04, 0xcd, 0x26, 0x20, 0xad, 0xce, 0x38, 0x89, 0x20, 0xb5, 0x85, + 0x15, 0x8b, 0x9b, 0xd9, 0xab, 0x43, 0x05, 0x0d, 0x5c, 0xe8, 0x42, 0x04, 0xa9, 0x1e, 0x91, 0x4c, + 0xd8, 0x96, 0x7b, 0x34, 0x9c, 0x7b, 0x9b, 0xd7, 0x86, 0x4e, 0xd8, 0xa1, 0x27, 0xd8, 0xc9, 0x84, + 0x6d, 0xf5, 0x24, 0xa0, 0xcf, 0xc2, 0x0c, 0x3f, 0x67, 0x5b, 0xb8, 0x3e, 0xc2, 0x07, 0x0e, 0xc2, + 0x6a, 0x32, 0xae, 0x39, 0x0f, 0xb3, 0xb2, 0xec, 0x98, 0x2e, 0xab, 0xde, 0x8b, 0x23, 0xac, 0xec, + 0x00, 0xa2, 0x65, 0x56, 0xd6, 0x27, 0x13, 0x2b, 0xcb, 0xf4, 0x94, 0xcf, 0x75, 0x37, 0x86, 0x5a, + 0xd9, 0xc1, 0x90, 0x58, 0x62, 0x65, 0xdf, 0xf3, 0xa9, 0xa4, 0x66, 0x36, 0x03, 0x62, 0x85, 0x97, + 0x86, 0xd6, 0xac, 0x17, 0x91, 0x92, 0x9a, 0x71, 0x1e, 0xd2, 0x6d, 0x2c, 0x5a, 0x8b, 0xb5, 0xf4, + 0xcb, 0x43, 0xbb, 0x6d, 0x00, 0xb7, 0x54, 0xdd, 0xcb, 0xfe, 0x58, 0x0b, 0x7b, 0x86, 0xca, 0xe2, + 0xe7, 0xa4, 0x78, 0x4b, 0xbd, 0x32, 0xda, 0x50, 0x85, 0x1d, 0x01, 0xf3, 0x0c, 0x55, 0x4f, 0x22, + 0x2d, 0x2a, 0x0b, 0x30, 0xa7, 0xe3, 0x7b, 0x65, 0x78, 0x51, 0xfb, 0x63, 0xfe, 0x69, 0x51, 0x3d, + 0xa2, 0x3f, 0x84, 0xba, 0xec, 0x64, 0x69, 0xe1, 0xe6, 0xe8, 0x21, 0xd4, 0x7b, 0xc2, 0xd5, 0x1b, + 0x42, 0x9c, 0x5c, 0x9a, 0xe1, 0x31, 0x7f, 0xf7, 0x13, 0xa9, 0x59, 0x51, 0xbc, 0x9f, 0x48, 0x9d, + 0x17, 0x0b, 0xf7, 0x13, 0xa9, 0x0b, 0xe2, 0xc2, 0xfd, 0x44, 0xea, 0x39, 0xf1, 0xf9, 0xe2, 0xef, + 0x5e, 0x80, 0x9c, 0x8b, 0xaf, 0x18, 0x5a, 0xb9, 0x1d, 0x44, 0x2b, 0x8b, 0xc3, 0xd0, 0x0a, 0x47, + 0x64, 0x1c, 0xae, 0xdc, 0x0e, 0xc2, 0x95, 0xc5, 0x61, 0x70, 0xc5, 0xe7, 0x21, 0x78, 0xa5, 0x31, + 0x0c, 0xaf, 0xbc, 0x38, 0x01, 0x5e, 0xf1, 0x44, 0xf5, 0x03, 0x96, 0xb5, 0x41, 0xc0, 0x72, 0x79, + 0x34, 0x60, 0xf1, 0x44, 0x05, 0x10, 0xcb, 0x1b, 0x7d, 0x88, 0xe5, 0xe2, 0x08, 0xc4, 0xe2, 0xf1, + 0xbb, 0x90, 0x65, 0x3d, 0x14, 0xb2, 0x5c, 0x1d, 0x07, 0x59, 0x3c, 0x39, 0x3d, 0x98, 0xe5, 0xd5, + 0x1e, 0xcc, 0xb2, 0x34, 0x14, 0xb3, 0x78, 0xdc, 0x0c, 0xb4, 0xbc, 0x33, 0x1c, 0xb4, 0xbc, 0x34, + 0x11, 0x68, 0xf1, 0xe4, 0x0d, 0xa2, 0x96, 0xc6, 0x30, 0xd4, 0xf2, 0xe2, 0x04, 0xa8, 0xc5, 0xef, + 0xb8, 0x3e, 0xd8, 0x52, 0x0d, 0x83, 0x2d, 0x57, 0xc6, 0xc0, 0x16, 0x4f, 0x5a, 0x10, 0xb7, 0x54, + 0xc3, 0x70, 0xcb, 0x95, 0x31, 0xb8, 0xa5, 0x4f, 0x12, 0x03, 0x2e, 0x9b, 0xe1, 0xc0, 0xe5, 0xda, + 0x58, 0xe0, 0xe2, 0x49, 0xeb, 0x45, 0x2e, 0x37, 0x03, 0xc8, 0xe5, 0x85, 0x21, 0xc8, 0xc5, 0x63, + 0x25, 0xd0, 0xe5, 0x73, 0x03, 0xd0, 0xa5, 0x38, 0x0a, 0xba, 0x78, 0xbc, 0x1e, 0x76, 0x79, 0x6b, + 0x08, 0x76, 0xb9, 0x3e, 0x1e, 0xbb, 0x78, 0xc2, 0xfa, 0xc0, 0x8b, 0x32, 0x12, 0xbc, 0xbc, 0x32, + 0x21, 0x78, 0xf1, 0xa4, 0x87, 0xa1, 0x97, 0xd7, 0x7a, 0xd1, 0xcb, 0xf2, 0x70, 0xf4, 0xe2, 0x89, + 0xe1, 0xf0, 0x65, 0x3d, 0x14, 0xbe, 0x5c, 0x1d, 0x07, 0x5f, 0xfc, 0xb1, 0x17, 0xc4, 0x2f, 0x9b, + 0xe1, 0xf8, 0xe5, 0xda, 0x58, 0xfc, 0xe2, 0x77, 0x7f, 0x0f, 0x80, 0x59, 0x0f, 0x05, 0x30, 0x57, + 0xc7, 0x01, 0x18, 0xbf, 0x70, 0x41, 0x04, 0xf3, 0xf6, 0x50, 0x04, 0x73, 0x63, 0x12, 0x04, 0xe3, + 0x09, 0x1d, 0x80, 0x30, 0xef, 0x0c, 0x87, 0x30, 0x2f, 0x9d, 0xe0, 0x22, 0xa2, 0x50, 0x0c, 0xf3, + 0xb9, 0x01, 0x0c, 0x53, 0x1c, 0x85, 0x61, 0x7c, 0x7d, 0x76, 0x41, 0x8c, 0x32, 0x12, 0x72, 0xbc, + 0x32, 0x21, 0xe4, 0xf0, 0x95, 0x2f, 0x04, 0x73, 0x54, 0x42, 0x30, 0xc7, 0xe5, 0xd1, 0x98, 0xc3, + 0x9f, 0x42, 0x7c, 0xd0, 0x51, 0x0d, 0x03, 0x1d, 0x57, 0xc6, 0x80, 0x0e, 0xdf, 0x0a, 0x05, 0x50, + 0xc7, 0x1b, 0x7d, 0xa8, 0xe3, 0xe2, 0xd8, 0x1d, 0xfd, 0x00, 0xec, 0x28, 0x0d, 0xc2, 0x8e, 0x4b, + 0x23, 0x61, 0x87, 0x27, 0xc1, 0xc7, 0x1d, 0x6f, 0xf4, 0xe1, 0x8e, 0x8b, 0x23, 0x70, 0x87, 0x5f, + 0x00, 0x0e, 0x3c, 0xb4, 0xd1, 0xc0, 0x63, 0x65, 0x52, 0xe0, 0xe1, 0x09, 0x0e, 0x45, 0x1e, 0x9b, + 0xe1, 0xc8, 0xe3, 0xda, 0x84, 0x9b, 0x7b, 0x03, 0xd0, 0xa3, 0x1a, 0x06, 0x3d, 0xae, 0x8c, 0x81, + 0x1e, 0xc1, 0x39, 0xc4, 0xc3, 0x1e, 0xd5, 0x30, 0xec, 0x71, 0x65, 0x0c, 0xf6, 0xf0, 0x25, 0x05, + 0xc0, 0x47, 0x63, 0x18, 0xf8, 0x78, 0x71, 0x02, 0xf0, 0xe1, 0xcf, 0xbb, 0x7d, 0xe8, 0xe3, 0xcd, + 0x7e, 0xf4, 0x51, 0x1c, 0x85, 0x3e, 0xfc, 0x11, 0xe9, 0xc2, 0x8f, 0xcd, 0x70, 0xf8, 0x71, 0x6d, + 0x2c, 0xfc, 0x08, 0x1a, 0xc9, 0x00, 0xfe, 0x58, 0x0f, 0xc5, 0x1f, 0x57, 0xc7, 0xe1, 0x0f, 0xdf, + 0x48, 0x06, 0x01, 0xc8, 0x9b, 0xfd, 0x00, 0xa4, 0x38, 0x0a, 0x80, 0xf8, 0x95, 0x73, 0x11, 0x48, + 0x35, 0x0c, 0x81, 0x5c, 0x19, 0x83, 0x40, 0xfc, 0xce, 0x0b, 0x40, 0x10, 0x65, 0x24, 0x04, 0x79, + 0x65, 0x42, 0x08, 0xd2, 0x67, 0xb8, 0x7a, 0x31, 0x48, 0x35, 0x0c, 0x83, 0x5c, 0x19, 0x83, 0x41, + 0x02, 0x85, 0xf5, 0x41, 0xc8, 0x66, 0x38, 0x08, 0xb9, 0x36, 0x16, 0x84, 0xf4, 0x8d, 0xa6, 0x49, + 0x51, 0xc8, 0xfd, 0x44, 0xea, 0x79, 0xf1, 0x85, 0xe2, 0x2f, 0xa7, 0x21, 0x59, 0x75, 0x63, 0x62, + 0x02, 0x57, 0x03, 0x08, 0xa7, 0xb9, 0x1a, 0x00, 0xad, 0x11, 0xc5, 0xa6, 0xe6, 0x81, 0xe3, 0x92, + 0x11, 0xf7, 0x6c, 0x0c, 0x6c, 0x4b, 0xba, 0xac, 0xa7, 0x38, 0x31, 0x84, 0x5e, 0x85, 0x5c, 0xd7, + 0xc6, 0x96, 0xdc, 0xb1, 0x74, 0xd3, 0xd2, 0x1d, 0x16, 0x49, 0x2a, 0x94, 0xc4, 0x0f, 0x8f, 0x97, + 0xb2, 0x3b, 0x36, 0xb6, 0xb6, 0x39, 0x5d, 0xca, 0x76, 0x03, 0x6f, 0xee, 0xed, 0xfa, 0xd3, 0x93, + 0xdf, 0xae, 0xff, 0x16, 0x88, 0x16, 0x56, 0xb4, 0x9e, 0x89, 0x9a, 0x9d, 0xbc, 0x0f, 0xf7, 0x29, + 0x68, 0xc8, 0xb4, 0x9b, 0x93, 0x9e, 0xc0, 0x9f, 0xb5, 0x7a, 0x89, 0xe8, 0x16, 0x9c, 0x6d, 0x2b, + 0x87, 0xec, 0x92, 0x08, 0xd7, 0xf7, 0xa1, 0xb1, 0x41, 0x29, 0x1a, 0xc2, 0x86, 0xda, 0xca, 0x21, + 0xbd, 0xaa, 0x9f, 0x25, 0xd1, 0x4b, 0x7a, 0xaf, 0x40, 0x5e, 0xd3, 0x6d, 0x47, 0x37, 0x54, 0xf7, + 0x7a, 0x32, 0x76, 0x44, 0x3f, 0xe7, 0x52, 0xd9, 0x35, 0x61, 0x37, 0x60, 0x8e, 0x07, 0x0b, 0xfa, + 0x97, 0xf7, 0x53, 0x2f, 0x3f, 0x45, 0x4a, 0x41, 0x12, 0xfc, 0x7f, 0x6d, 0x28, 0xc3, 0x6c, 0x53, + 0x71, 0xf0, 0x81, 0x72, 0x24, 0xbb, 0x51, 0xdb, 0x19, 0x7a, 0xdb, 0xcf, 0x73, 0xcf, 0x8e, 0x97, + 0x72, 0xf7, 0x58, 0xd2, 0x40, 0xf0, 0x76, 0xae, 0x19, 0x48, 0xd0, 0xd0, 0x2a, 0x64, 0xe9, 0xfd, + 0xa3, 0x26, 0xbb, 0xe6, 0x96, 0xfb, 0xee, 0xc3, 0x76, 0x7d, 0xf8, 0x65, 0xb8, 0x12, 0xbd, 0xb3, + 0xd4, 0xbd, 0x19, 0xf7, 0x1a, 0xcc, 0x2a, 0xf6, 0x91, 0xa1, 0xd2, 0x16, 0xc6, 0x86, 0xdd, 0xb5, + 0xa9, 0xf3, 0x9e, 0x92, 0xf2, 0x94, 0x5c, 0x76, 0xa9, 0xe8, 0x35, 0xb8, 0xa0, 0x61, 0xe2, 0x8d, + 0xb0, 0x29, 0xdf, 0x31, 0x4d, 0xd9, 0x6c, 0x69, 0x32, 0x3d, 0x7e, 0x4b, 0x1d, 0xf7, 0x94, 0x74, + 0x96, 0x66, 0xa0, 0x93, 0x7d, 0xc3, 0x34, 0xb7, 0x5a, 0x5a, 0x85, 0x24, 0xf2, 0xcb, 0xcc, 0x7e, + 0x5f, 0x80, 0x6c, 0x4f, 0xec, 0xed, 0x1b, 0x7d, 0xdb, 0xa2, 0x17, 0xc2, 0x21, 0xc7, 0xb0, 0x80, + 0xb2, 0x14, 0xef, 0x3b, 0x37, 0xc8, 0x65, 0x69, 0xb8, 0xcb, 0x4a, 0x41, 0xbf, 0xbb, 0x19, 0xef, + 0xb2, 0xbd, 0x9e, 0xf8, 0xc3, 0x6f, 0x2d, 0x4d, 0x15, 0x7f, 0x11, 0x87, 0x5c, 0x6f, 0x8c, 0x6d, + 0xad, 0xaf, 0x5c, 0x61, 0x26, 0xa1, 0x87, 0x63, 0x65, 0xc4, 0x3d, 0x38, 0x69, 0xff, 0xbe, 0x53, + 0x56, 0xcc, 0xe5, 0x11, 0x9b, 0xbf, 0xc1, 0x72, 0xfa, 0x8c, 0x0b, 0x3f, 0x8c, 0x79, 0x36, 0x63, + 0x05, 0xa6, 0x59, 0x83, 0x0b, 0x43, 0x4f, 0x21, 0xd1, 0x36, 0x97, 0x58, 0x36, 0x62, 0x63, 0x1a, + 0xa7, 0xba, 0x7e, 0xc4, 0x23, 0x9c, 0xe2, 0x1f, 0x31, 0xf8, 0x95, 0x37, 0xd3, 0x27, 0xbb, 0xf2, + 0x86, 0x6d, 0xee, 0xb6, 0x5a, 0x58, 0x75, 0xf8, 0x5f, 0xa0, 0xb8, 0xff, 0x7b, 0x71, 0xb9, 0x5f, + 0x04, 0xff, 0xc3, 0x94, 0x15, 0x89, 0xff, 0x61, 0x4a, 0x20, 0xee, 0x28, 0xef, 0x89, 0xa0, 0x43, + 0x92, 0x45, 0xa7, 0xf1, 0xae, 0xfe, 0x6d, 0x01, 0x44, 0x3a, 0x00, 0xef, 0x62, 0xac, 0x45, 0xa2, + 0x85, 0x6e, 0x48, 0x54, 0x6c, 0xe2, 0x90, 0xa8, 0xa2, 0x02, 0x79, 0xaf, 0x0c, 0xec, 0x0f, 0x00, + 0x46, 0xdc, 0x1e, 0x73, 0xaa, 0xe3, 0xac, 0xc5, 0x3f, 0x12, 0x60, 0xde, 0xfb, 0x46, 0xd9, 0x3b, + 0x45, 0x75, 0x9a, 0x20, 0x55, 0x89, 0xfe, 0xb9, 0x09, 0xc1, 0xae, 0xf4, 0x88, 0xe3, 0x44, 0x1a, + 0x84, 0x78, 0x9c, 0x01, 0x70, 0x4c, 0xac, 0x35, 0xea, 0xf4, 0x6f, 0x4f, 0xd8, 0xb3, 0x5d, 0xbc, + 0x1b, 0x68, 0x01, 0xaa, 0xac, 0xa4, 0x9a, 0x13, 0x69, 0xb5, 0x5b, 0x4d, 0x9a, 0xb9, 0xf8, 0x63, + 0x21, 0x28, 0xe8, 0x09, 0xf1, 0x85, 0xee, 0x40, 0xfc, 0x89, 0xd2, 0x1a, 0x15, 0x66, 0xd1, 0xd3, + 0xf4, 0x12, 0xc9, 0x8d, 0xee, 0xf6, 0x1c, 0x3e, 0x8b, 0x0d, 0x07, 0xac, 0x83, 0x4d, 0x1a, 0x3c, + 0xa4, 0x86, 0x3e, 0xed, 0xd6, 0x22, 0x3e, 0xfe, 0xf3, 0xc1, 0x41, 0xfa, 0x7a, 0xe2, 0xfd, 0x6f, + 0x2d, 0x09, 0x37, 0xea, 0x30, 0x1f, 0x32, 0x7d, 0xa1, 0x3c, 0x40, 0xe0, 0x0a, 0x5a, 0xfe, 0xdf, + 0x2a, 0xab, 0x6b, 0xf2, 0xce, 0x66, 0x79, 0x6b, 0x63, 0xa3, 0xd6, 0x68, 0x54, 0xd6, 0x44, 0x01, + 0x89, 0x90, 0xed, 0xb9, 0xc0, 0x96, 0xff, 0xa5, 0xca, 0x8d, 0x4f, 0x01, 0xf8, 0x57, 0x4f, 0x13, + 0x59, 0xeb, 0x95, 0x47, 0xf2, 0xc3, 0xd5, 0x07, 0x3b, 0x95, 0xba, 0x38, 0x85, 0x10, 0xe4, 0x4b, + 0xab, 0x8d, 0x72, 0x55, 0x96, 0x2a, 0xf5, 0xed, 0xad, 0xcd, 0x7a, 0x45, 0x14, 0x38, 0xdf, 0x1a, + 0x64, 0x83, 0xc7, 0xf4, 0xd0, 0x3c, 0xcc, 0x96, 0xab, 0x95, 0xf2, 0xba, 0xfc, 0xb0, 0xb6, 0x2a, + 0xbf, 0xb5, 0x53, 0xd9, 0xa9, 0x88, 0x53, 0xb4, 0x68, 0x94, 0x78, 0x77, 0xe7, 0xc1, 0x03, 0x51, + 0x40, 0xb3, 0x90, 0x61, 0xef, 0xf4, 0xb2, 0x5b, 0x31, 0x76, 0x63, 0x03, 0x32, 0x81, 0xbb, 0x70, + 0xc8, 0xe7, 0xb6, 0x77, 0xea, 0x55, 0xb9, 0x51, 0xdb, 0xa8, 0xd4, 0x1b, 0xab, 0x1b, 0xdb, 0x4c, + 0x06, 0xa5, 0xad, 0x96, 0xb6, 0xa4, 0x86, 0x28, 0x78, 0xef, 0x8d, 0xad, 0x9d, 0x72, 0xd5, 0xfb, + 0x67, 0x98, 0x44, 0x2a, 0x2e, 0xc6, 0x6f, 0x98, 0x70, 0x36, 0xf4, 0xdc, 0x1b, 0xca, 0xc0, 0xcc, + 0x8e, 0x41, 0x6f, 0xf5, 0x10, 0xa7, 0x50, 0x2e, 0x70, 0xf4, 0x4d, 0x14, 0x50, 0x8a, 0x1d, 0x70, + 0x12, 0x63, 0x28, 0x09, 0xb1, 0xfa, 0x1d, 0x31, 0x4e, 0x8a, 0x19, 0x38, 0x3f, 0x26, 0x26, 0x50, + 0x9a, 0x1f, 0xbb, 0x11, 0xa7, 0x51, 0xd6, 0x3f, 0xf7, 0x22, 0x26, 0x6f, 0x5c, 0x84, 0xc0, 0xb1, + 0x00, 0x04, 0x90, 0x7c, 0xa0, 0x38, 0xd8, 0x76, 0xc4, 0x29, 0x34, 0x03, 0xf1, 0xd5, 0x56, 0x4b, + 0x14, 0x6e, 0x7f, 0x5f, 0x80, 0x94, 0x7b, 0xcf, 0x29, 0x7a, 0x00, 0xd3, 0x0c, 0xce, 0x2e, 0x0d, + 0x9f, 0x32, 0xa8, 0xd5, 0x59, 0x58, 0x1e, 0x37, 0xa7, 0x14, 0xa7, 0xd0, 0xdb, 0xfc, 0x4f, 0x9e, + 0x88, 0xbe, 0xa0, 0x4b, 0xa3, 0xb4, 0xc9, 0x95, 0x3a, 0x5a, 0xe5, 0xc8, 0x08, 0x29, 0x4e, 0x7d, + 0x42, 0x28, 0xbd, 0xf8, 0xfe, 0xbf, 0x2d, 0x4e, 0xbd, 0xff, 0x6c, 0x51, 0xf8, 0xe0, 0xd9, 0xa2, + 0xf0, 0xd3, 0x67, 0x8b, 0xc2, 0xbf, 0x3e, 0x5b, 0x14, 0x7e, 0xef, 0x67, 0x8b, 0x53, 0x1f, 0xfc, + 0x6c, 0x71, 0xea, 0xa7, 0x3f, 0x5b, 0x9c, 0x7a, 0x67, 0x86, 0x73, 0xef, 0x26, 0xe9, 0xff, 0x4d, + 0xdd, 0xf9, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xa6, 0xa8, 0xb5, 0x74, 0x6b, 0x00, 0x00, } diff --git a/pkg/roachpb/api.proto b/pkg/roachpb/api.proto index 1b82505c68bf..b5ac7084b9e2 100644 --- a/pkg/roachpb/api.proto +++ b/pkg/roachpb/api.proto @@ -1715,6 +1715,13 @@ message Header { // be much more straightforward if all transactional requests were // idempotent. We could just re-issue requests. See #26915. bool async_consensus = 13; + // WriteTooOldErrors can either be returned immediately or deferred + // to the end of the transaction. By default they are returned + // immediately to maximize the SQL-level first-statement retry + // ability. Set this flag to request deferred errors, which can + // improve performance under heavy contention when client-side + // retries are already inevitable. + bool defer_write_too_old_error = 14; } diff --git a/pkg/sql/err_count_test.go b/pkg/sql/err_count_test.go index 6a3af3cefb9a..50066f39711d 100644 --- a/pkg/sql/err_count_test.go +++ b/pkg/sql/err_count_test.go @@ -126,6 +126,12 @@ func TestTransactionRetryErrorCounts(t *testing.T) { for _, txn := range []*gosql.Tx{txn1, txn2} { if _, err := txn.Exec("UPDATE accounts SET balance = balance - 100 WHERE id = 1"); err != nil { + if pqErr, ok := err.(*pq.Error); ok && pqErr.Code == "40001" { + if err := txn.Rollback(); err != nil { + t.Fatal(err) + } + return + } t.Fatal(err) } if err := txn.Commit(); err != nil && err.(*pq.Error).Code != "40001" { diff --git a/pkg/storage/intent_resolver_integration_test.go b/pkg/storage/intent_resolver_integration_test.go index 131ae197e6dc..ae19480c35af 100644 --- a/pkg/storage/intent_resolver_integration_test.go +++ b/pkg/storage/intent_resolver_integration_test.go @@ -387,7 +387,9 @@ func TestContendedIntentChangesOnRetry(t *testing.T) { // Write keyB to create a cycle with txn3. putB := putArgs(keyB, []byte("value")) assignSeqNumsForReqs(txn1, &putB) - repl, pErr := client.SendWrappedWith(ctx, store.TestSender(), roachpb.Header{Txn: txn1}, &putB) + repl, pErr := client.SendWrappedWith(ctx, store.TestSender(), roachpb.Header{ + Txn: txn1, DeferWriteTooOldError: true, + }, &putB) if pErr != nil { txnCh1 <- pErr.GoError() return @@ -455,7 +457,9 @@ func TestContendedIntentPushedByHighPriorityScan(t *testing.T) { go func() { put := putArgs(keyA, []byte("value")) assignSeqNumsForReqs(txn2, &put) - if _, pErr := client.SendWrappedWith(ctx, store.TestSender(), roachpb.Header{Txn: txn2}, &put); pErr != nil { + if _, pErr := client.SendWrappedWith(ctx, store.TestSender(), roachpb.Header{ + Txn: txn2, DeferWriteTooOldError: true, + }, &put); pErr != nil { txnCh2 <- pErr.GoError() return } diff --git a/pkg/storage/replica_evaluate.go b/pkg/storage/replica_evaluate.go index aedc93fd071a..722bed39f3a2 100644 --- a/pkg/storage/replica_evaluate.go +++ b/pkg/storage/replica_evaluate.go @@ -191,8 +191,50 @@ func evaluateBatch( } var result result.Result + + // WriteTooOldErrors are unique: When one is returned, we also lay + // down an intent at our new proposed timestamp. We have the option + // of continuing past a WriteTooOldError to the end of the + // transaction (at which point the txn.WriteTooOld flag will trigger + // a RefreshSpan and possibly a client-side retry). + // + // Within a batch, there's no downside to continuing past the + // WriteTooOldError, so we at least defer returning the error to the + // end of the batch. + // + // Across batches, it's more complicated. We want to avoid + // client-side retries whenever possible. However, if a client-side + // retry is inevitable, it's probably best to continue and lay down + // as many intents as possible before that retry (this can avoid n^2 + // behavior in some scenarios with high contention on multiple keys, + // although we haven't verified this in practice). + // + // The SQL layer will transparently retry on the server side if + // we're in the first statement in a transaction. If we're in a + // first statement, we want to return WriteTooOldErrors immediately + // to take advantage of this. We don't have this information + // available at this level currently, so we err on the side of + // returning the WriteTooOldError immediately to get the server-side + // retry when it is available. + // + // TODO(bdarnell): Plumb the SQL CanAutoRetry field through to + // !ba.Header.DeferWriteTooOldError. + // + // A more subtle heuristic is also possible: If we get a + // WriteTooOldError while writing to a key that we have already read + // (either earlier in the transaction, or as a part of the same + // operation for a ConditionalPut, Increment, or InitPut), a + // WriteTooOldError that is deferred to the end of the transaction + // is guarantee to result in a failed RefreshSpans and therefore a + // client-side retry. In some cases it may be possible to + // successfully retry at the TxnCoordSender, avoiding the + // client-side retry (this is likely for Increment, but unlikely for + // the others). In such cases, we may want to return the + // WriteTooOldError even if the SQL CanAutoRetry is false. As of + // this writing, nearly all writes issued by SQL are preceded by + // reads of the same key. var writeTooOldErr *roachpb.Error - returnWriteTooOldErr := true + mustReturnWriteTooOldErr := false for index, union := range ba.Requests { // Execute the command. @@ -243,49 +285,28 @@ func evaluateBatch( writeTooOldErr.GetDetail().(*roachpb.WriteTooOldError).ActualTimestamp.Forward(tErr.ActualTimestamp) } else { writeTooOldErr = pErr - // For transactions, we want to swallow the write too old error - // and just move the transaction timestamp forward and set the - // WriteTooOld flag. See below for exceptions. - if ba.Txn != nil { - returnWriteTooOldErr = false - } } - // Set the flag to return a WriteTooOldError with the max timestamp - // encountered evaluating the entire batch on cput and inc requests. - // Because both of these requests must have their keys refreshed on - // commit with Transaction.WriteTooOld is true, and that refresh will - // fail, we'd be otherwise guaranteed to do a client-side retry. - // Returning an error allows a txn-coord-side retry. - switch args.(type) { - case *roachpb.ConditionalPutRequest: - // Conditional puts are an exception. Here, it makes less sense to - // continue because it's likely that the cput will fail on retry (a - // newer value is less likely to match the expected value). It's - // better to return the WriteTooOldError directly, allowing the txn - // coord sender to retry if it can refresh all other spans encountered - // already during the transaction, and then, if the cput results in a - // condition failed error, report that back to the client instead of a - // retryable error. - returnWriteTooOldErr = true - case *roachpb.IncrementRequest: - // Increments are an exception for similar reasons. If we wait until - // commit, we'll need a client-side retry, so we return immediately - // to see if we can do a txn coord sender retry instead. - returnWriteTooOldErr = true - case *roachpb.InitPutRequest: - // Init puts are also an exception. There's no reason to believe they - // will succeed on a retry, so better to short circuit and return the - // write too old error. - returnWriteTooOldErr = true + + // Requests which are both read and write are not currently + // accounted for in RefreshSpans, so they rely on eager + // returning of WriteTooOldErrors. + // TODO(bdarnell): add read+write requests to the read refresh spans + // in TxnCoordSender, and then I think this can go away. + if roachpb.IsReadAndWrite(args) { + mustReturnWriteTooOldErr = true } + if ba.Txn != nil { ba.Txn.Timestamp.Forward(tErr.ActualTimestamp) ba.Txn.WriteTooOld = true } + // Clear pErr; we're done processing it by having moved the // batch or txn timestamps forward and set WriteTooOld if this - // is a transactional write. The EndTransaction will detect - // this pushed timestamp and return a TransactionRetryError. + // is a transactional write. If we don't return the + // WriteTooOldError from this method, we will detect the + // pushed timestamp at commit time and refresh or retry the + // transaction. pErr = nil default: return nil, result, pErr @@ -311,9 +332,19 @@ func evaluateBatch( } } + // If there was an EndTransaction in the batch that finalized the transaction, + // the WriteTooOld status has been fully processed and we can discard the error. + if ba.Txn != nil && ba.Txn.Status.IsFinalized() { + writeTooOldErr = nil + } else if ba.Txn == nil { + // Non-transactional requests are unable to defer WriteTooOldErrors + // because there is no where to defer them to. + mustReturnWriteTooOldErr = true + } + // If there's a write too old error, return now that we've found // the high water timestamp for retries. - if writeTooOldErr != nil && returnWriteTooOldErr { + if writeTooOldErr != nil && (mustReturnWriteTooOldErr || !ba.Header.DeferWriteTooOldError) { return nil, result, writeTooOldErr } diff --git a/pkg/storage/replica_test.go b/pkg/storage/replica_test.go index c0b4e0f34982..75ec8670a87a 100644 --- a/pkg/storage/replica_test.go +++ b/pkg/storage/replica_test.go @@ -4168,9 +4168,17 @@ func TestBatchRetryCantCommitIntents(t *testing.T) { t.Errorf("unexpected error reading key: %s", pErr) } - // Send a put for keyB; this currently succeeds as there's nothing to detect - // the retry. - if _, pErr = tc.SendWrappedWith(roachpb.Header{Txn: putTxn}, &putB); pErr != nil { + // Send a put for keyB; by default this fails with a WriteTooOldError. + _, pErr = tc.SendWrappedWith(roachpb.Header{Txn: putTxn}, &putB) + if _, ok := pErr.GetDetail().(*roachpb.WriteTooOldError); !ok { + t.Errorf("expected WriteTooOldError, got: %v", pErr) + } + + // Try again with DeferWriteTooOldError. This currently succeeds + // (with a pushed timestamp) as there's nothing to detect the retry. + if _, pErr = tc.SendWrappedWith(roachpb.Header{ + Txn: putTxn, DeferWriteTooOldError: true, + }, &putB); pErr != nil { t.Error(pErr) } @@ -4186,7 +4194,7 @@ func TestBatchRetryCantCommitIntents(t *testing.T) { t.Errorf("expected %s; got %v", expErr, pErr) } - // Expect that keyB intent did not get written! + // Expect that keyB intent got written! gArgs = getArgs(keyB) _, pErr = tc.SendWrapped(&gArgs) if _, ok := pErr.GetDetail().(*roachpb.WriteIntentError); !ok { diff --git a/pkg/storage/store_test.go b/pkg/storage/store_test.go index 65af52d8de2e..2ef79d58bdac 100644 --- a/pkg/storage/store_test.go +++ b/pkg/storage/store_test.go @@ -1575,6 +1575,7 @@ func TestStoreResolveWriteIntent(t *testing.T) { manual.Increment(100) // Now, try a put using the pusher's txn. h.Txn = pusher + h.DeferWriteTooOldError = true resultCh := make(chan *roachpb.Error, 1) go func() { _, pErr := client.SendWrappedWith(context.Background(), store.TestSender(), h, &pArgs) @@ -1762,7 +1763,8 @@ func TestStoreResolveWriteIntentPushOnRead(t *testing.T) { { args := putArgs(key, []byte("value2")) assignSeqNumsForReqs(pushee, &args) - if _, pErr := client.SendWrappedWith(ctx, store.TestSender(), roachpb.Header{Txn: pushee}, &args); pErr != nil { + h := roachpb.Header{Txn: pushee, DeferWriteTooOldError: true} + if _, pErr := client.SendWrappedWith(ctx, store.TestSender(), h, &args); pErr != nil { t.Fatal(pErr) } }