From 1e9d9abc359db2817f4600b976aef5a05e650307 Mon Sep 17 00:00:00 2001 From: Eric Hoffman <eric@dgraph.io> Date: Thu, 24 May 2018 14:56:10 -0700 Subject: [PATCH] WIP: change server path to allow tls certs to be pushed through zero http to all the current and future alphas --- dgraph/cmd/server/run.go | 62 +- dgraph/cmd/zero/http.go | 10 + dgraph/cmd/zero/raft.go | 6 +- dgraph/cmd/zero/run.go | 1 + dgraph/cmd/zero/zero.go | 6 + protos/intern/internal.pb.go | 1395 +++++++++++++++++----------------- protos/internal.proto | 4 +- worker/groups.go | 12 +- x/tls_helper.go | 195 +++-- 9 files changed, 884 insertions(+), 807 deletions(-) diff --git a/dgraph/cmd/server/run.go b/dgraph/cmd/server/run.go index da9bfcca..326e592e 100644 --- a/dgraph/cmd/server/run.go +++ b/dgraph/cmd/server/run.go @@ -110,10 +110,6 @@ func init() { "Limit for the maximum number of edges that can be returned in a query."+ " This is only useful for shortest path queries.") - // TLS configurations - x.RegisterTLSFlags(flag) - flag.String("tls_client_auth", "", "Enable TLS client authentication") - flag.String("tls_ca_certs", "", "CA Certs file path.") tlsConf.ConfigType = x.TLSServerConfig //Custom plugins. @@ -161,31 +157,22 @@ func storeStatsHandler(w http.ResponseWriter, r *http.Request) { w.Write([]byte("</pre>")) } -func setupListener(addr string, port int) (listener net.Listener, err error) { - var reload func() +// really not lambda +func setupListener(addr string, port int) (listener net.Listener, reload func([]byte), err error) { + var r func([]byte) laddr := fmt.Sprintf("%s:%d", addr, port) if !tlsConf.CertRequired { listener, err = net.Listen("tcp", laddr) } else { var tlsCfg *tls.Config - tlsCfg, reload, err = x.GenerateTLSConfig(tlsConf) + // this just closes over nothing, seems wrong + tlsCfg, r, err = x.GenerateTLSConfigServer(tlsConf) if err != nil { - return nil, err + return nil, nil, err } listener, err = tls.Listen("tcp", laddr, tlsCfg) } - go func() { - sigChan := make(chan os.Signal, 1) - signal.Notify(sigChan, syscall.SIGHUP) - for range sigChan { - log.Println("SIGHUP signal received") - if reload != nil { - reload() - log.Println("TLS certificates and CAs reloaded") - } - } - }() - return listener, err + return listener, r, err } func serveGRPC(l net.Listener, wg *sync.WaitGroup) { @@ -218,7 +205,7 @@ func serveHTTP(l net.Listener, wg *sync.WaitGroup) { } } -func setupServer() { +func setupServer(kchan chan []byte) { go worker.RunServer(bindall) // For intern.communication. laddr := "localhost" @@ -226,16 +213,28 @@ func setupServer() { laddr = "0.0.0.0" } - httpListener, err := setupListener(laddr, httpPort()) + httpListener, reloadKeysHttp, err := setupListener(laddr, httpPort()) if err != nil { log.Fatal(err) } - grpcListener, err := setupListener(laddr, grpcPort()) + grpcListener, reloadKeysGRPC, err := setupListener(laddr, grpcPort()) if err != nil { log.Fatal(err) } + go func() { + for { + kinfo := <- kchan + if reloadKeysHttp != nil { + reloadKeysHttp(kinfo) + } + if reloadKeysGRPC != nil { + reloadKeysGRPC(kinfo) + } + } + } () + http.HandleFunc("/query", queryHandler) http.HandleFunc("/query/", queryHandler) http.HandleFunc("/mutate", mutationHandler) @@ -253,7 +252,7 @@ func setupServer() { http.HandleFunc("/", homeHandler) http.HandleFunc("/ui/keywords", keywordHandler) - // Initilize the servers. + // Initialize the servers. var wg sync.WaitGroup wg.Add(3) go serveGRPC(grpcListener, &wg) @@ -295,10 +294,9 @@ func run() { x.Config.PortOffset = Server.Conf.GetInt("port_offset") bindall = Server.Conf.GetBool("bindall") - x.LoadTLSConfig(&tlsConf, Server.Conf) - tlsConf.ClientAuth = Server.Conf.GetString("tls_client_auth") - tlsConf.ClientCACerts = Server.Conf.GetString("tls_ca_certs") - + // configure + tlsConf.CertRequired = true; + edgraph.SetConfiguration(config) setupCustomTokenizers() x.Init(edgraph.Config.DebugMode) @@ -351,8 +349,12 @@ func run() { }() _ = numShutDownSig + keyupdate := make(chan []byte); + // Setup external communication. - go worker.StartRaftNodes(edgraph.State.WALstore, bindall) - setupServer() + go worker.StartRaftNodes(edgraph.State.WALstore, bindall, keyupdate) + + setupServer(keyupdate) + // setup server doesn't actually return here worker.BlockingStop() } diff --git a/dgraph/cmd/zero/http.go b/dgraph/cmd/zero/http.go index 3cc8686a..78e9542b 100644 --- a/dgraph/cmd/zero/http.go +++ b/dgraph/cmd/zero/http.go @@ -12,6 +12,7 @@ import ( "fmt" "log" "net" + "io/ioutil" "net/http" "strconv" "sync" @@ -151,6 +152,15 @@ func (st *state) getState(w http.ResponseWriter, r *http.Request) { } } +func (st *state) reKey(w http.ResponseWriter, r *http.Request) { + // verify that this is a post method, handle error on body read + jsonKeyContents, _ := ioutil.ReadAll(r.Body) + // what do we use the context here for? + st.zero.setKeys(context.Background(), jsonKeyContents) + // better status here? + w.Write([]byte{}) +} + func (st *state) serveHTTP(l net.Listener, wg *sync.WaitGroup) { srv := &http.Server{ ReadTimeout: 10 * time.Second, diff --git a/dgraph/cmd/zero/raft.go b/dgraph/cmd/zero/raft.go index 9a07f921..e2a9ce37 100644 --- a/dgraph/cmd/zero/raft.go +++ b/dgraph/cmd/zero/raft.go @@ -366,7 +366,11 @@ func (n *node) applyProposal(e raftpb.Entry) (uint32, error) { if p.Txn != nil { n.server.orc.updateCommitStatus(e.Index, p.Txn) } - + if p.Tls != "" { + // lock? + n.server.state.TlsInfo = []byte(p.Tls) + } + return p.Id, nil } diff --git a/dgraph/cmd/zero/run.go b/dgraph/cmd/zero/run.go index 83dfec35..6c2f1248 100644 --- a/dgraph/cmd/zero/run.go +++ b/dgraph/cmd/zero/run.go @@ -170,6 +170,7 @@ func run() { http.HandleFunc("/state", st.getState) http.HandleFunc("/removeNode", st.removeNode) http.HandleFunc("/moveTablet", st.moveTablet) + http.HandleFunc("/rekey", st.reKey) // Open raft write-ahead log and initialize raft node. x.Checkf(os.MkdirAll(opts.w, 0700), "Error while creating WAL dir.") diff --git a/dgraph/cmd/zero/zero.go b/dgraph/cmd/zero/zero.go index 4407796a..a574ff26 100644 --- a/dgraph/cmd/zero/zero.go +++ b/dgraph/cmd/zero/zero.go @@ -311,6 +311,12 @@ func (s *Server) createProposals(dst *intern.Group) ([]*intern.ZeroProposal, err return res, nil } +func (s *Server) setKeys(ctx context.Context, keyInfo []byte) error { + zp := &intern.ZeroProposal{} + zp.Tls = string(keyInfo) + return s.Node.proposeAndWait(ctx, zp) +} + // Its users responsibility to ensure that node doesn't come back again before calling the api. func (s *Server) removeNode(ctx context.Context, nodeId uint64, groupId uint32) error { if groupId == 0 { diff --git a/protos/intern/internal.pb.go b/protos/intern/internal.pb.go index ff282f57..f1a97194 100644 --- a/protos/intern/internal.pb.go +++ b/protos/intern/internal.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: internal.proto -// DO NOT EDIT! /* Package intern is a generated protocol buffer package. @@ -59,10 +58,10 @@ import fmt "fmt" import math "math" import api "github.com/dgraph-io/dgo/protos/api" -import ( - context "golang.org/x/net/context" - grpc "google.golang.org/grpc" -) +import context "golang.org/x/net/context" +import grpc "google.golang.org/grpc" + +import binary "encoding/binary" import io "io" @@ -760,6 +759,7 @@ type ZeroProposal struct { MaxTxnTs uint64 `protobuf:"varint,5,opt,name=maxTxnTs,proto3" json:"maxTxnTs,omitempty"` MaxRaftId uint64 `protobuf:"varint,6,opt,name=maxRaftId,proto3" json:"maxRaftId,omitempty"` Txn *api.TxnContext `protobuf:"bytes,7,opt,name=txn" json:"txn,omitempty"` + Tls string `protobuf:"bytes,8,opt,name=tls,proto3" json:"tls,omitempty"` } func (m *ZeroProposal) Reset() { *m = ZeroProposal{} } @@ -816,6 +816,13 @@ func (m *ZeroProposal) GetTxn() *api.TxnContext { return nil } +func (m *ZeroProposal) GetTls() string { + if m != nil { + return m.Tls + } + return "" +} + // MembershipState is used to pack together the current membership state of all the nodes // in the caller server; and the membership updates recorded by the callee server since // the provided lastUpdate. @@ -827,6 +834,7 @@ type MembershipState struct { MaxTxnTs uint64 `protobuf:"varint,5,opt,name=maxTxnTs,proto3" json:"maxTxnTs,omitempty"` MaxRaftId uint64 `protobuf:"varint,6,opt,name=maxRaftId,proto3" json:"maxRaftId,omitempty"` Removed []*Member `protobuf:"bytes,7,rep,name=removed" json:"removed,omitempty"` + TlsInfo []byte `protobuf:"bytes,8,opt,name=tlsInfo,proto3" json:"tlsInfo,omitempty"` } func (m *MembershipState) Reset() { *m = MembershipState{} } @@ -883,6 +891,13 @@ func (m *MembershipState) GetRemoved() []*Member { return nil } +func (m *MembershipState) GetTlsInfo() []byte { + if m != nil { + return m.TlsInfo + } + return nil +} + type ConnectionState struct { Member *Member `protobuf:"bytes,1,opt,name=member" json:"member,omitempty"` State *MembershipState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` @@ -2849,22 +2864,8 @@ func (m *List) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintInternal(dAtA, i, uint64(len(m.Uids)*8)) for _, num := range m.Uids { - dAtA[i] = uint8(num) - i++ - dAtA[i] = uint8(num >> 8) - i++ - dAtA[i] = uint8(num >> 16) - i++ - dAtA[i] = uint8(num >> 24) - i++ - dAtA[i] = uint8(num >> 32) - i++ - dAtA[i] = uint8(num >> 40) - i++ - dAtA[i] = uint8(num >> 48) - i++ - dAtA[i] = uint8(num >> 56) - i++ + binary.LittleEndian.PutUint64(dAtA[i:], uint64(num)) + i += 8 } } return i, nil @@ -2987,7 +2988,8 @@ func (m *Query) MarshalTo(dAtA []byte) (int, error) { if m.AfterUid != 0 { dAtA[i] = 0x19 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.AfterUid)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.AfterUid)) + i += 8 } if m.DoCount { dAtA[i] = 0x20 @@ -3427,7 +3429,8 @@ func (m *RaftContext) MarshalTo(dAtA []byte) (int, error) { if m.Id != 0 { dAtA[i] = 0x9 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.Id)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.Id)) + i += 8 } if m.Group != 0 { dAtA[i] = 0x10 @@ -3466,7 +3469,8 @@ func (m *Member) MarshalTo(dAtA []byte) (int, error) { if m.Id != 0 { dAtA[i] = 0x9 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.Id)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.Id)) + i += 8 } if m.GroupId != 0 { dAtA[i] = 0x10 @@ -3655,6 +3659,12 @@ func (m *ZeroProposal) MarshalTo(dAtA []byte) (int, error) { } i += n15 } + if len(m.Tls) > 0 { + dAtA[i] = 0x42 + i++ + i = encodeVarintInternal(dAtA, i, uint64(len(m.Tls))) + i += copy(dAtA[i:], m.Tls) + } return i, nil } @@ -3759,6 +3769,12 @@ func (m *MembershipState) MarshalTo(dAtA []byte) (int, error) { i += n } } + if len(m.TlsInfo) > 0 { + dAtA[i] = 0x42 + i++ + i = encodeVarintInternal(dAtA, i, uint64(len(m.TlsInfo))) + i += copy(dAtA[i:], m.TlsInfo) + } return i, nil } @@ -3887,7 +3903,8 @@ func (m *DirectedEdge) MarshalTo(dAtA []byte) (int, error) { if m.Entity != 0 { dAtA[i] = 0x9 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.Entity)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.Entity)) + i += 8 } if len(m.Attr) > 0 { dAtA[i] = 0x12 @@ -3909,7 +3926,8 @@ func (m *DirectedEdge) MarshalTo(dAtA []byte) (int, error) { if m.ValueId != 0 { dAtA[i] = 0x29 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.ValueId)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.ValueId)) + i += 8 } if len(m.Label) > 0 { dAtA[i] = 0x32 @@ -4211,7 +4229,8 @@ func (m *Posting) MarshalTo(dAtA []byte) (int, error) { if m.Uid != 0 { dAtA[i] = 0x9 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.Uid)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.Uid)) + i += 8 } if len(m.Value) > 0 { dAtA[i] = 0x12 @@ -4735,7 +4754,8 @@ func (m *MapEntry) MarshalTo(dAtA []byte) (int, error) { if m.Uid != 0 { dAtA[i] = 0x11 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.Uid)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.Uid)) + i += 8 } if m.Posting != nil { dAtA[i] = 0x1a @@ -5001,24 +5021,6 @@ func (m *SnapshotMeta) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func encodeFixed64Internal(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Internal(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintInternal(dAtA []byte, offset int, v uint64) int { for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) @@ -5363,6 +5365,10 @@ func (m *ZeroProposal) Size() (n int) { l = m.Txn.Size() n += 1 + l + sovInternal(uint64(l)) } + l = len(m.Tls) + if l > 0 { + n += 1 + l + sovInternal(uint64(l)) + } return n } @@ -5413,6 +5419,10 @@ func (m *MembershipState) Size() (n int) { n += 1 + l + sovInternal(uint64(l)) } } + l = len(m.TlsInfo) + if l > 0 { + n += 1 + l + sovInternal(uint64(l)) + } return n } @@ -5998,7 +6008,15 @@ func (m *List) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: - if wireType == 2 { + if wireType == 1 { + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + m.Uids = append(m.Uids, v) + } else if wireType == 2 { var packedLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { @@ -6026,32 +6044,10 @@ func (m *List) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + v = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - v = uint64(dAtA[iNdEx-8]) - v |= uint64(dAtA[iNdEx-7]) << 8 - v |= uint64(dAtA[iNdEx-6]) << 16 - v |= uint64(dAtA[iNdEx-5]) << 24 - v |= uint64(dAtA[iNdEx-4]) << 32 - v |= uint64(dAtA[iNdEx-3]) << 40 - v |= uint64(dAtA[iNdEx-2]) << 48 - v |= uint64(dAtA[iNdEx-1]) << 56 m.Uids = append(m.Uids, v) } - } else if wireType == 1 { - var v uint64 - if (iNdEx + 8) > l { - return io.ErrUnexpectedEOF - } - iNdEx += 8 - v = uint64(dAtA[iNdEx-8]) - v |= uint64(dAtA[iNdEx-7]) << 8 - v |= uint64(dAtA[iNdEx-6]) << 16 - v |= uint64(dAtA[iNdEx-5]) << 24 - v |= uint64(dAtA[iNdEx-4]) << 32 - v |= uint64(dAtA[iNdEx-3]) << 40 - v |= uint64(dAtA[iNdEx-2]) << 48 - v |= uint64(dAtA[iNdEx-1]) << 56 - m.Uids = append(m.Uids, v) } else { return fmt.Errorf("proto: wrong wireType = %d for field Uids", wireType) } @@ -6399,15 +6395,8 @@ func (m *Query) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.AfterUid = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.AfterUid = uint64(dAtA[iNdEx-8]) - m.AfterUid |= uint64(dAtA[iNdEx-7]) << 8 - m.AfterUid |= uint64(dAtA[iNdEx-6]) << 16 - m.AfterUid |= uint64(dAtA[iNdEx-5]) << 24 - m.AfterUid |= uint64(dAtA[iNdEx-4]) << 32 - m.AfterUid |= uint64(dAtA[iNdEx-3]) << 40 - m.AfterUid |= uint64(dAtA[iNdEx-2]) << 48 - m.AfterUid |= uint64(dAtA[iNdEx-1]) << 56 case 4: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field DoCount", wireType) @@ -6925,7 +6914,24 @@ func (m *Result) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: - if wireType == 2 { + if wireType == 0 { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (uint32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Counts = append(m.Counts, v) + } else if wireType == 2 { var packedLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { @@ -6966,23 +6972,6 @@ func (m *Result) Unmarshal(dAtA []byte) error { } m.Counts = append(m.Counts, v) } - } else if wireType == 0 { - var v uint32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Counts = append(m.Counts, v) } else { return fmt.Errorf("proto: wrong wireType = %d for field Counts", wireType) } @@ -7623,15 +7612,8 @@ func (m *RaftContext) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.Id = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.Id = uint64(dAtA[iNdEx-8]) - m.Id |= uint64(dAtA[iNdEx-7]) << 8 - m.Id |= uint64(dAtA[iNdEx-6]) << 16 - m.Id |= uint64(dAtA[iNdEx-5]) << 24 - m.Id |= uint64(dAtA[iNdEx-4]) << 32 - m.Id |= uint64(dAtA[iNdEx-3]) << 40 - m.Id |= uint64(dAtA[iNdEx-2]) << 48 - m.Id |= uint64(dAtA[iNdEx-1]) << 56 case 2: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) @@ -7757,15 +7739,8 @@ func (m *Member) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.Id = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.Id = uint64(dAtA[iNdEx-8]) - m.Id |= uint64(dAtA[iNdEx-7]) << 8 - m.Id |= uint64(dAtA[iNdEx-6]) << 16 - m.Id |= uint64(dAtA[iNdEx-5]) << 24 - m.Id |= uint64(dAtA[iNdEx-4]) << 32 - m.Id |= uint64(dAtA[iNdEx-3]) << 40 - m.Id |= uint64(dAtA[iNdEx-2]) << 48 - m.Id |= uint64(dAtA[iNdEx-1]) << 56 case 2: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field GroupId", wireType) @@ -7969,41 +7944,14 @@ func (m *Group) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var mapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } if m.Members == nil { m.Members = make(map[uint64]*Member) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey uint64 + var mapvalue *Member + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowInternal @@ -8013,46 +7961,74 @@ func (m *Group) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + if postmsgIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapvalue = &Member{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipInternal(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthInternal + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &Member{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Members[mapkey] = mapvalue - } else { - var mapvalue *Member - m.Members[mapkey] = mapvalue } + m.Members[mapkey] = mapvalue iNdEx = postIndex case 2: if wireType != 2 { @@ -8080,51 +8056,14 @@ func (m *Group) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthInternal - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Tablets == nil { m.Tablets = make(map[string]*Tablet) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue *Tablet + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowInternal @@ -8134,46 +8073,85 @@ func (m *Group) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthInternal + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &Tablet{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipInternal(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthInternal + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &Tablet{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Tablets[mapkey] = mapvalue - } else { - var mapvalue *Tablet - m.Tablets[mapkey] = mapvalue } + m.Tablets[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -8400,27 +8378,56 @@ func (m *ZeroProposal) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipInternal(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthInternal - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tls", wireType) } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthInternal + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Tls = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipInternal(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthInternal + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MembershipState) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -8495,41 +8502,14 @@ func (m *MembershipState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var mapkey uint32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } if m.Groups == nil { m.Groups = make(map[uint32]*Group) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey uint32 + var mapvalue *Group + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowInternal @@ -8539,46 +8519,74 @@ func (m *MembershipState) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (uint32(b) & 0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + if postmsgIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapvalue = &Group{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipInternal(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthInternal + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &Group{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Groups[mapkey] = mapvalue - } else { - var mapvalue *Group - m.Groups[mapkey] = mapvalue } + m.Groups[mapkey] = mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -8606,41 +8614,14 @@ func (m *MembershipState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var mapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } if m.Zeros == nil { m.Zeros = make(map[uint64]*Member) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey uint64 + var mapvalue *Member + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowInternal @@ -8650,46 +8631,74 @@ func (m *MembershipState) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + if postmsgIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapvalue = &Member{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipInternal(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthInternal + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &Member{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Zeros[mapkey] = mapvalue - } else { - var mapvalue *Member - m.Zeros[mapkey] = mapvalue } + m.Zeros[mapkey] = mapvalue iNdEx = postIndex case 4: if wireType != 0 { @@ -8779,6 +8788,37 @@ func (m *MembershipState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TlsInfo", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthInternal + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TlsInfo = append(m.TlsInfo[:0], dAtA[iNdEx:postIndex]...) + if m.TlsInfo == nil { + m.TlsInfo = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipInternal(dAtA[iNdEx:]) @@ -9149,15 +9189,8 @@ func (m *DirectedEdge) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.Entity = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.Entity = uint64(dAtA[iNdEx-8]) - m.Entity |= uint64(dAtA[iNdEx-7]) << 8 - m.Entity |= uint64(dAtA[iNdEx-6]) << 16 - m.Entity |= uint64(dAtA[iNdEx-5]) << 24 - m.Entity |= uint64(dAtA[iNdEx-4]) << 32 - m.Entity |= uint64(dAtA[iNdEx-3]) << 40 - m.Entity |= uint64(dAtA[iNdEx-2]) << 48 - m.Entity |= uint64(dAtA[iNdEx-1]) << 56 case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Attr", wireType) @@ -9245,15 +9278,8 @@ func (m *DirectedEdge) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.ValueId = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.ValueId = uint64(dAtA[iNdEx-8]) - m.ValueId |= uint64(dAtA[iNdEx-7]) << 8 - m.ValueId |= uint64(dAtA[iNdEx-6]) << 16 - m.ValueId |= uint64(dAtA[iNdEx-5]) << 24 - m.ValueId |= uint64(dAtA[iNdEx-4]) << 32 - m.ValueId |= uint64(dAtA[iNdEx-3]) << 40 - m.ValueId |= uint64(dAtA[iNdEx-2]) << 48 - m.ValueId |= uint64(dAtA[iNdEx-1]) << 56 case 6: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Label", wireType) @@ -10191,15 +10217,8 @@ func (m *Posting) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.Uid = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.Uid = uint64(dAtA[iNdEx-8]) - m.Uid |= uint64(dAtA[iNdEx-7]) << 8 - m.Uid |= uint64(dAtA[iNdEx-6]) << 16 - m.Uid |= uint64(dAtA[iNdEx-5]) << 24 - m.Uid |= uint64(dAtA[iNdEx-4]) << 32 - m.Uid |= uint64(dAtA[iNdEx-3]) << 40 - m.Uid |= uint64(dAtA[iNdEx-2]) << 48 - m.Uid |= uint64(dAtA[iNdEx-1]) << 56 case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) @@ -11753,15 +11772,8 @@ func (m *MapEntry) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.Uid = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.Uid = uint64(dAtA[iNdEx-8]) - m.Uid |= uint64(dAtA[iNdEx-7]) << 8 - m.Uid |= uint64(dAtA[iNdEx-6]) << 16 - m.Uid |= uint64(dAtA[iNdEx-5]) << 24 - m.Uid |= uint64(dAtA[iNdEx-4]) << 32 - m.Uid |= uint64(dAtA[iNdEx-3]) << 40 - m.Uid |= uint64(dAtA[iNdEx-2]) << 48 - m.Uid |= uint64(dAtA[iNdEx-1]) << 56 case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Posting", wireType) @@ -12147,41 +12159,14 @@ func (m *OracleDelta) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var mapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } if m.Commits == nil { m.Commits = make(map[uint64]uint64) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey uint64 + var mapvalue uint64 + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowInternal @@ -12191,12 +12176,62 @@ func (m *OracleDelta) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - var mapvalue uint64 + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else { + iNdEx = entryPreIndex + skippy, err := skipInternal(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthInternal + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Commits[mapkey] = mapvalue + iNdEx = postIndex + case 2: + if wireType == 0 { + var v uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowInternal @@ -12206,19 +12241,13 @@ func (m *OracleDelta) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - mapvalue |= (uint64(b) & 0x7F) << shift + v |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - m.Commits[mapkey] = mapvalue - } else { - var mapvalue uint64 - m.Commits[mapkey] = mapvalue - } - iNdEx = postIndex - case 2: - if wireType == 2 { + m.Aborts = append(m.Aborts, v) + } else if wireType == 2 { var packedLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { @@ -12259,23 +12288,6 @@ func (m *OracleDelta) Unmarshal(dAtA []byte) error { } m.Aborts = append(m.Aborts, v) } - } else if wireType == 0 { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Aborts = append(m.Aborts, v) } else { return fmt.Errorf("proto: wrong wireType = %d for field Aborts", wireType) } @@ -12349,7 +12361,24 @@ func (m *TxnTimestamps) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: - if wireType == 2 { + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Ts = append(m.Ts, v) + } else if wireType == 2 { var packedLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { @@ -12390,23 +12419,6 @@ func (m *TxnTimestamps) Unmarshal(dAtA []byte) error { } m.Ts = append(m.Ts, v) } - } else if wireType == 0 { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Ts = append(m.Ts, v) } else { return fmt.Errorf("proto: wrong wireType = %d for field Ts", wireType) } @@ -12766,194 +12778,195 @@ var ( func init() { proto.RegisterFile("internal.proto", fileDescriptorInternal) } var fileDescriptorInternal = []byte{ - // 3013 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x39, 0xcb, 0x6e, 0x23, 0xc7, - 0xb5, 0xec, 0x26, 0xd9, 0x6c, 0x1e, 0x92, 0x1a, 0xba, 0x3c, 0x9e, 0xa1, 0x69, 0x5f, 0x59, 0xae, - 0xf1, 0xf5, 0xc8, 0x2f, 0xd9, 0x23, 0x8f, 0x1f, 0x77, 0xee, 0xf5, 0x0d, 0x64, 0x91, 0x1a, 0xd3, - 0xa3, 0x97, 0x8b, 0x94, 0x1c, 0x67, 0x11, 0xa2, 0xc4, 0x2e, 0x51, 0x0d, 0x35, 0xbb, 0xdb, 0x5d, - 0x4d, 0x81, 0xf2, 0x32, 0xbb, 0x20, 0x3f, 0xe0, 0x75, 0x80, 0xec, 0x02, 0x04, 0xc8, 0x32, 0x8b, - 0xac, 0x12, 0x20, 0x8b, 0x00, 0x49, 0xfe, 0x20, 0x71, 0x36, 0x41, 0xb2, 0xca, 0x1f, 0x04, 0xf5, - 0xe8, 0x07, 0x29, 0x8e, 0x2c, 0xe4, 0xb1, 0x62, 0x9f, 0x53, 0xe7, 0xd4, 0xe3, 0xbc, 0xcf, 0x21, - 0xac, 0xb8, 0x7e, 0xcc, 0x22, 0x9f, 0x7a, 0x1b, 0x61, 0x14, 0xc4, 0x01, 0xb2, 0x14, 0xdc, 0xae, - 0xd2, 0xd0, 0x55, 0x28, 0xdc, 0x86, 0xd2, 0xae, 0xcb, 0x63, 0x84, 0xa0, 0x34, 0x75, 0x1d, 0xde, - 0x32, 0xd6, 0x8a, 0xeb, 0x16, 0x91, 0xdf, 0xf8, 0x33, 0xa8, 0x0e, 0x28, 0x3f, 0x3f, 0xa6, 0xde, - 0x94, 0xa1, 0x26, 0x14, 0x2f, 0xa8, 0xd7, 0x32, 0xd6, 0x8c, 0xf5, 0x3a, 0x11, 0x9f, 0x68, 0x13, - 0xec, 0x0b, 0xea, 0x0d, 0xe3, 0xcb, 0x90, 0xb5, 0xcc, 0x35, 0x63, 0x7d, 0x65, 0xf3, 0xee, 0x86, - 0x3a, 0x60, 0xe3, 0x30, 0xe0, 0xb1, 0xeb, 0x8f, 0x37, 0x8e, 0xa9, 0x37, 0xb8, 0x0c, 0x19, 0xa9, - 0x5c, 0xa8, 0x0f, 0x7c, 0x00, 0xb5, 0x7e, 0x34, 0xda, 0x99, 0xfa, 0xa3, 0xd8, 0x0d, 0x7c, 0x71, - 0xaa, 0x4f, 0x27, 0x4c, 0xee, 0x5a, 0x25, 0xf2, 0x5b, 0xe0, 0x68, 0x34, 0xe6, 0xad, 0xe2, 0x5a, - 0x51, 0xe0, 0xc4, 0x37, 0x6a, 0x41, 0xc5, 0xe5, 0xdb, 0xc1, 0xd4, 0x8f, 0x5b, 0xa5, 0x35, 0x63, - 0xdd, 0x26, 0x09, 0x88, 0x7f, 0x5a, 0x84, 0xf2, 0x67, 0x53, 0x16, 0x5d, 0x4a, 0xbe, 0x38, 0x8e, - 0x92, 0xbd, 0xc4, 0x37, 0xba, 0x0d, 0x65, 0x8f, 0xfa, 0x63, 0xde, 0x32, 0xe5, 0x66, 0x0a, 0x40, - 0x2f, 0x40, 0x95, 0x9e, 0xc6, 0x2c, 0x1a, 0x4e, 0x5d, 0xa7, 0x55, 0x5c, 0x33, 0xd6, 0x2d, 0x62, - 0x4b, 0xc4, 0x91, 0xeb, 0xa0, 0xe7, 0xc1, 0x76, 0x82, 0xe1, 0x28, 0x7f, 0x96, 0x13, 0xc8, 0xb3, - 0xd0, 0x7d, 0xb0, 0xa7, 0xae, 0x33, 0xf4, 0x5c, 0x1e, 0xb7, 0xca, 0x6b, 0xc6, 0x7a, 0x6d, 0xb3, - 0x9e, 0x3c, 0x58, 0xc8, 0x90, 0x54, 0xa6, 0xae, 0x23, 0x85, 0xb9, 0x01, 0x36, 0x8f, 0x46, 0xc3, - 0xd3, 0xa9, 0x3f, 0x6a, 0x59, 0x92, 0xf0, 0xd9, 0x84, 0x30, 0xf7, 0x7a, 0x52, 0xe1, 0x0a, 0x10, - 0xcf, 0x8b, 0xd8, 0x05, 0x8b, 0x38, 0x6b, 0x55, 0xd4, 0x91, 0x1a, 0x44, 0x0f, 0xa1, 0x76, 0x4a, - 0x47, 0x2c, 0x1e, 0x86, 0x34, 0xa2, 0x93, 0x96, 0x3d, 0xbf, 0xd9, 0x8e, 0x58, 0x3a, 0x14, 0x2b, - 0x9c, 0xc0, 0x69, 0x0a, 0xa0, 0x0f, 0xa0, 0x21, 0x21, 0x3e, 0x3c, 0x75, 0xbd, 0x98, 0x45, 0xad, - 0xaa, 0xe4, 0x43, 0x29, 0x9f, 0xc4, 0x0e, 0x22, 0xc6, 0x48, 0x5d, 0x11, 0x2a, 0x0c, 0xfa, 0x2f, - 0x00, 0x36, 0x0b, 0xa9, 0xef, 0x0c, 0xa9, 0xe7, 0xb5, 0x40, 0xde, 0xa5, 0xaa, 0x30, 0x5b, 0x9e, - 0x87, 0xee, 0x8a, 0x7b, 0x52, 0x67, 0x18, 0xf3, 0x56, 0x63, 0xcd, 0x58, 0x2f, 0x11, 0x4b, 0x80, - 0x03, 0x2e, 0x24, 0xe3, 0xb9, 0xfe, 0x50, 0x40, 0xad, 0x15, 0x2d, 0x19, 0x61, 0x63, 0xbb, 0xae, - 0x4f, 0x18, 0x75, 0x48, 0xc5, 0x53, 0x1f, 0xf8, 0x7d, 0xa8, 0x4a, 0x73, 0x92, 0x62, 0x7a, 0x0d, - 0xac, 0x0b, 0x01, 0x28, 0xab, 0xab, 0x6d, 0x3e, 0x93, 0xdc, 0x2f, 0xb5, 0x3a, 0xa2, 0x09, 0xf0, - 0x2a, 0xd8, 0xbb, 0xd4, 0x1f, 0x27, 0xa6, 0x2a, 0xf4, 0x28, 0x99, 0xaa, 0x44, 0x7e, 0xe3, 0x3f, - 0x98, 0x60, 0x11, 0xc6, 0xa7, 0x5e, 0x8c, 0xde, 0x00, 0x10, 0x5a, 0x9a, 0xd0, 0x38, 0x72, 0x67, - 0x7a, 0xe7, 0x79, 0x3d, 0x55, 0xa7, 0xae, 0xb3, 0x27, 0x97, 0xd1, 0x43, 0xa8, 0xcb, 0x13, 0x12, - 0x72, 0x73, 0xfe, 0x22, 0xe9, 0x5d, 0x49, 0x4d, 0x92, 0x69, 0xae, 0x3b, 0x60, 0x49, 0x03, 0x51, - 0x46, 0xda, 0x20, 0x1a, 0x42, 0xff, 0xad, 0x3d, 0x8e, 0xb3, 0x51, 0x3c, 0x74, 0x18, 0x4f, 0x2c, - 0xa8, 0x91, 0x62, 0x3b, 0x8c, 0xc7, 0xe8, 0x3d, 0x50, 0x52, 0x4f, 0x0e, 0x2d, 0xcb, 0x43, 0xd1, - 0x9c, 0x56, 0xb9, 0x3a, 0x55, 0xd2, 0xe9, 0x53, 0x1f, 0x40, 0x4d, 0xbc, 0x35, 0xe1, 0xb2, 0x24, - 0x57, 0x33, 0x7d, 0x99, 0x16, 0x0f, 0x01, 0x41, 0xa4, 0x59, 0x84, 0xa8, 0x84, 0xb5, 0x2a, 0xab, - 0x92, 0xdf, 0x37, 0xd7, 0x55, 0x17, 0xca, 0x07, 0x91, 0xc3, 0xa2, 0xa5, 0x9e, 0x85, 0xa0, 0xe4, - 0x30, 0x3e, 0x92, 0x8e, 0x6f, 0x13, 0xf9, 0x9d, 0x79, 0x5b, 0x31, 0xe7, 0x6d, 0xf8, 0x77, 0x06, - 0xd4, 0xfa, 0x41, 0x14, 0xef, 0x31, 0xce, 0xe9, 0x98, 0xa1, 0x7b, 0x50, 0x0e, 0xc4, 0xb6, 0x5a, - 0x35, 0x8d, 0xe4, 0x01, 0xf2, 0x2c, 0xa2, 0xd6, 0x16, 0x94, 0x68, 0x5e, 0xaf, 0xc4, 0xdb, 0x50, - 0x56, 0xfe, 0x2a, 0x7c, 0xb9, 0x4c, 0x14, 0x20, 0x94, 0x14, 0x9c, 0x9e, 0x72, 0xa6, 0x94, 0x50, - 0x26, 0x1a, 0xfa, 0x37, 0x18, 0xf1, 0x09, 0x80, 0x78, 0xd0, 0x3f, 0x63, 0x6f, 0x37, 0x3e, 0xe3, - 0x0c, 0x6a, 0x84, 0x9e, 0xc6, 0xdb, 0x81, 0x1f, 0xb3, 0x59, 0x8c, 0x56, 0xc0, 0x74, 0x1d, 0xa9, - 0x00, 0x8b, 0x98, 0xae, 0x23, 0x9e, 0x3c, 0x8e, 0x82, 0x69, 0x28, 0xe5, 0xdf, 0x20, 0x0a, 0x90, - 0x8a, 0x72, 0x9c, 0x48, 0xca, 0x41, 0x28, 0xca, 0x71, 0x22, 0xf4, 0x12, 0xd4, 0xb8, 0x4f, 0x43, - 0x7e, 0x16, 0xc4, 0xe2, 0xc9, 0x25, 0xf9, 0x64, 0x48, 0x50, 0x03, 0x8e, 0x7f, 0x6d, 0x80, 0xb5, - 0xc7, 0x26, 0x27, 0x2c, 0xba, 0x72, 0xca, 0xf3, 0x60, 0xcb, 0x8d, 0x87, 0xae, 0xa3, 0x0f, 0xaa, - 0x48, 0xb8, 0xe7, 0x2c, 0x3d, 0xea, 0x0e, 0x58, 0x1e, 0xa3, 0x42, 0xb5, 0xca, 0xec, 0x35, 0x24, - 0x24, 0x4e, 0x27, 0x43, 0x47, 0xbc, 0xb9, 0xac, 0x16, 0xe8, 0xa4, 0xc3, 0xa8, 0x23, 0xee, 0xe6, - 0x51, 0x1e, 0x0f, 0xa7, 0xa1, 0x43, 0x63, 0x26, 0x43, 0x65, 0x49, 0xd8, 0x2f, 0x8f, 0x8f, 0x24, - 0x06, 0xbd, 0x0e, 0xcf, 0x8c, 0xbc, 0x29, 0x17, 0xb1, 0xda, 0xf5, 0x4f, 0x83, 0x61, 0xe0, 0x7b, - 0x97, 0x52, 0x6b, 0x36, 0xb9, 0xa5, 0x17, 0x7a, 0xfe, 0x69, 0x70, 0xe0, 0x7b, 0x97, 0xf8, 0x47, - 0x26, 0x94, 0x1f, 0x4b, 0x31, 0x3c, 0x84, 0xca, 0x44, 0x3e, 0x28, 0x09, 0x2c, 0xed, 0x44, 0x1d, - 0x72, 0x7d, 0x43, 0xbd, 0x96, 0x77, 0xfd, 0x38, 0xba, 0x24, 0x09, 0xa9, 0xe0, 0x8a, 0xe9, 0x89, - 0xc7, 0x62, 0xae, 0xed, 0x6d, 0x81, 0x6b, 0xa0, 0x16, 0x35, 0x97, 0x26, 0x6d, 0x7f, 0x0a, 0xf5, - 0xfc, 0x76, 0x22, 0x4d, 0x9e, 0xb3, 0x4b, 0x29, 0xc3, 0x12, 0x11, 0x9f, 0xe8, 0x15, 0x28, 0xcb, - 0xd8, 0x21, 0x25, 0x58, 0xdb, 0x5c, 0x49, 0x76, 0x55, 0x6c, 0x44, 0x2d, 0x3e, 0x32, 0x3f, 0x34, - 0xc4, 0x5e, 0xf9, 0x43, 0xf2, 0x7b, 0x55, 0xaf, 0xdf, 0x4b, 0xb1, 0xe5, 0xf6, 0xc2, 0x7f, 0x33, - 0xa0, 0xfe, 0x3d, 0x16, 0x05, 0x87, 0x51, 0x10, 0x06, 0x9c, 0x7a, 0x39, 0xdd, 0x36, 0xa4, 0x6e, - 0x5f, 0x05, 0x4b, 0xbd, 0xfc, 0x29, 0xf7, 0xd2, 0xab, 0x82, 0x4e, 0xbd, 0x55, 0xaa, 0xfa, 0xea, - 0x99, 0x7a, 0x15, 0xad, 0x02, 0x4c, 0xe8, 0x6c, 0x97, 0x51, 0xce, 0x7a, 0x4e, 0x62, 0x66, 0x19, - 0x06, 0xb5, 0xc1, 0x9e, 0xd0, 0xd9, 0x60, 0xe6, 0x0f, 0xb8, 0xb4, 0x82, 0x12, 0x49, 0x61, 0xf4, - 0x22, 0x54, 0x27, 0x74, 0x26, 0xec, 0xbd, 0xe7, 0x68, 0x2b, 0xc8, 0x10, 0xe8, 0x65, 0x28, 0xc6, - 0x33, 0x5f, 0xc6, 0xb0, 0xda, 0xe6, 0x2d, 0xe9, 0x2e, 0x83, 0x99, 0xaf, 0x3d, 0x83, 0x88, 0x35, - 0xfc, 0x8b, 0x22, 0xdc, 0xd2, 0x6a, 0x38, 0x73, 0xc3, 0x7e, 0x2c, 0x6c, 0xa7, 0x05, 0x15, 0x19, - 0x08, 0x58, 0xa4, 0xb5, 0x91, 0x80, 0xe8, 0x7f, 0xc1, 0x92, 0x66, 0x9c, 0x28, 0xfa, 0xde, 0xfc, - 0xd3, 0xd3, 0x2d, 0x94, 0xe2, 0xb5, 0xc6, 0x35, 0x0b, 0xfa, 0x10, 0xca, 0x5f, 0xb1, 0x28, 0x50, - 0x41, 0xae, 0xb6, 0x89, 0x9f, 0xc6, 0x2b, 0x84, 0xaf, 0x59, 0x15, 0xc3, 0x7f, 0x50, 0x42, 0xeb, - 0x22, 0xa4, 0x4d, 0x82, 0x0b, 0xe6, 0xb4, 0x2a, 0xf2, 0x56, 0x8b, 0xca, 0x4c, 0x96, 0xdb, 0x9f, - 0x40, 0x2d, 0xf7, 0xa8, 0xbc, 0x85, 0x35, 0x94, 0x85, 0xdd, 0x9b, 0xb7, 0xb0, 0xc6, 0x9c, 0x0f, - 0xe4, 0x8d, 0xf5, 0x13, 0x80, 0xec, 0x89, 0xff, 0x8a, 0xd9, 0xe3, 0x1f, 0x1a, 0x70, 0x6b, 0x3b, - 0xf0, 0x7d, 0x26, 0xab, 0x22, 0xa5, 0xbc, 0xcc, 0x3a, 0x8d, 0x6b, 0xad, 0xf3, 0x2d, 0x28, 0x73, - 0xc1, 0xa0, 0x4f, 0xb9, 0xfb, 0x14, 0x6d, 0x10, 0x45, 0x25, 0x02, 0xce, 0x84, 0xce, 0x86, 0x21, - 0xf3, 0x1d, 0xd7, 0x1f, 0x4b, 0x8b, 0x56, 0x3a, 0x38, 0x54, 0x18, 0xfc, 0x63, 0x03, 0x2c, 0x65, - 0xd8, 0x73, 0xc1, 0xcf, 0x98, 0x0f, 0x7e, 0x2f, 0x42, 0x35, 0x8c, 0x98, 0xe3, 0x8e, 0x92, 0x93, - 0xab, 0x24, 0x43, 0x88, 0xd8, 0x7c, 0x1a, 0x44, 0x23, 0x26, 0xb7, 0xb7, 0x89, 0x02, 0x44, 0xd1, - 0x29, 0xd3, 0x8e, 0x0c, 0x61, 0x2a, 0x3e, 0xda, 0x02, 0x21, 0x62, 0x97, 0x60, 0xe1, 0x21, 0x1d, - 0xa9, 0xf2, 0xaf, 0x48, 0x14, 0x20, 0xe2, 0xa9, 0xd2, 0x9b, 0xac, 0xfb, 0x6c, 0xa2, 0x21, 0xfc, - 0x73, 0x13, 0xea, 0x1d, 0x37, 0x62, 0xa3, 0x98, 0x39, 0x5d, 0x67, 0x2c, 0x09, 0x99, 0x1f, 0xbb, - 0xf1, 0xa5, 0x8e, 0xdd, 0x1a, 0x4a, 0x13, 0xb7, 0x39, 0x5f, 0x12, 0x2b, 0xbd, 0x14, 0x65, 0x25, - 0xaf, 0x00, 0xf4, 0x3e, 0x80, 0xaa, 0x83, 0x64, 0x35, 0x5f, 0xba, 0xbe, 0x9a, 0xaf, 0x4a, 0x52, - 0xf1, 0x29, 0x84, 0xa4, 0xf8, 0x5c, 0x15, 0xdb, 0x2d, 0x59, 0xea, 0x4f, 0x85, 0x39, 0xcb, 0x6a, - 0xe0, 0x84, 0x79, 0xd2, 0x5c, 0x65, 0x35, 0x70, 0xc2, 0xbc, 0xb4, 0x78, 0xab, 0xa8, 0x2b, 0x89, - 0x6f, 0x74, 0x1f, 0xcc, 0x20, 0x94, 0x6f, 0xcc, 0x1d, 0x9a, 0x7f, 0xe0, 0xc6, 0x41, 0x48, 0xcc, - 0x20, 0x44, 0x18, 0x2c, 0x55, 0xae, 0xb6, 0xaa, 0xd2, 0xcc, 0x41, 0x06, 0x03, 0x59, 0x2f, 0x11, - 0xbd, 0x82, 0xef, 0x80, 0x79, 0x10, 0xa2, 0x0a, 0x14, 0xfb, 0xdd, 0x41, 0xb3, 0x20, 0x3e, 0x3a, - 0xdd, 0xdd, 0xa6, 0x81, 0xff, 0x6a, 0x40, 0x75, 0x6f, 0x1a, 0x53, 0x61, 0x63, 0xfc, 0x3a, 0xe5, - 0x3e, 0x0f, 0x36, 0x8f, 0x69, 0x24, 0xb3, 0xa5, 0xa9, 0x02, 0x87, 0x84, 0x07, 0x1c, 0xbd, 0x0e, - 0x65, 0xe6, 0x8c, 0x59, 0xe2, 0xfb, 0xb7, 0x97, 0xdd, 0x95, 0x28, 0x12, 0xf4, 0x26, 0x58, 0x7c, - 0x74, 0xc6, 0x26, 0xb4, 0x55, 0x9a, 0x27, 0xee, 0x4b, 0xac, 0x4a, 0x70, 0x44, 0xd3, 0xc8, 0xae, - 0x23, 0x0a, 0x42, 0x59, 0x76, 0x97, 0x75, 0xd7, 0x11, 0x05, 0xa1, 0x28, 0xba, 0x37, 0xe1, 0x39, - 0x77, 0xec, 0x07, 0x11, 0x1b, 0xba, 0xbe, 0xc3, 0x66, 0xc3, 0x51, 0xe0, 0x9f, 0x7a, 0xee, 0x28, - 0x96, 0x72, 0xb5, 0xc9, 0xb3, 0x6a, 0xb1, 0x27, 0xd6, 0xb6, 0xf5, 0x12, 0xbe, 0x0f, 0xd5, 0x27, - 0xec, 0x52, 0x56, 0xaf, 0x1c, 0xb5, 0xc1, 0x3c, 0xbf, 0xd0, 0x99, 0x10, 0x92, 0x5b, 0x3c, 0x39, - 0x26, 0xe6, 0xf9, 0x05, 0xfe, 0xda, 0x04, 0x3b, 0x4d, 0x11, 0xf7, 0xa0, 0xe1, 0xb0, 0x30, 0x62, - 0xc2, 0x8a, 0x9d, 0x4c, 0x32, 0xf5, 0x0c, 0xd9, 0x73, 0xd0, 0xdb, 0x50, 0x9d, 0x24, 0x62, 0xd4, - 0x5e, 0x97, 0x96, 0xcb, 0xa9, 0x7c, 0x49, 0x46, 0x83, 0xde, 0x81, 0x5a, 0x3c, 0xf3, 0xc5, 0xb5, - 0x45, 0xbc, 0xd6, 0x59, 0xe4, 0x4a, 0x18, 0x87, 0x38, 0xfd, 0xd6, 0x17, 0x2e, 0x2d, 0xbb, 0x70, - 0xe6, 0xf0, 0xe5, 0x1b, 0x39, 0xfc, 0x7d, 0xb8, 0x35, 0xf2, 0x18, 0xf5, 0x87, 0x99, 0xbf, 0x2a, - 0x73, 0x5c, 0x91, 0xe8, 0xc3, 0xd4, 0x69, 0x75, 0x00, 0xab, 0xa4, 0xb9, 0x16, 0xbf, 0x0c, 0xc5, - 0x27, 0xc7, 0xfd, 0x6b, 0xa5, 0xf7, 0x7d, 0x30, 0x9f, 0x1c, 0xe7, 0x63, 0x5f, 0x5d, 0xc5, 0x3e, - 0xdd, 0x2b, 0x9b, 0x59, 0xaf, 0xdc, 0x06, 0x7b, 0xca, 0x59, 0xb4, 0xc7, 0x62, 0xaa, 0x1d, 0x2f, - 0x85, 0x45, 0xa2, 0x12, 0xcd, 0x9e, 0x1b, 0xf8, 0x3a, 0x29, 0x24, 0x20, 0xfe, 0x7b, 0x11, 0x2a, - 0xda, 0xf9, 0xc4, 0x9e, 0xd3, 0xb4, 0x38, 0x13, 0x9f, 0x99, 0x27, 0x9b, 0x79, 0x4f, 0xce, 0x77, - 0xe5, 0xc5, 0x9b, 0x75, 0xe5, 0xe8, 0xff, 0xa1, 0x1e, 0xaa, 0xb5, 0xbc, 0xff, 0xbf, 0xb0, 0xc8, - 0xa7, 0x7f, 0x25, 0x6f, 0x2d, 0xcc, 0x00, 0x61, 0xbd, 0xb2, 0x33, 0x89, 0xe9, 0x58, 0xea, 0xa5, - 0x4e, 0x2a, 0x02, 0x1e, 0xd0, 0xf1, 0x53, 0xa2, 0xc0, 0x0d, 0x1c, 0x59, 0x14, 0x2c, 0x41, 0xd8, - 0xaa, 0xab, 0x82, 0x25, 0x08, 0xe7, 0xfc, 0xb2, 0x31, 0xef, 0x97, 0x2f, 0x40, 0x75, 0x14, 0x4c, - 0x26, 0xae, 0x5c, 0x5b, 0x51, 0xa9, 0x53, 0x21, 0x06, 0x1c, 0x7f, 0x05, 0x15, 0xfd, 0x60, 0x54, - 0x83, 0x4a, 0xa7, 0xbb, 0xb3, 0x75, 0xb4, 0x2b, 0x22, 0x03, 0x80, 0xf5, 0x71, 0x6f, 0x7f, 0x8b, - 0x7c, 0xd1, 0x34, 0x44, 0x94, 0xe8, 0xed, 0x0f, 0x9a, 0x26, 0xaa, 0x42, 0x79, 0x67, 0xf7, 0x60, - 0x6b, 0xd0, 0x2c, 0x22, 0x1b, 0x4a, 0x1f, 0x1f, 0x1c, 0xec, 0x36, 0x4b, 0xa8, 0x0e, 0x76, 0x67, - 0x6b, 0xd0, 0x1d, 0xf4, 0xf6, 0xba, 0xcd, 0xb2, 0xa0, 0x7d, 0xdc, 0x3d, 0x68, 0x5a, 0xe2, 0xe3, - 0xa8, 0xd7, 0x69, 0x56, 0xc4, 0xfa, 0xe1, 0x56, 0xbf, 0xff, 0xf9, 0x01, 0xe9, 0x34, 0x6d, 0xb1, - 0x6f, 0x7f, 0x40, 0x7a, 0xfb, 0x8f, 0x9b, 0x55, 0xfc, 0x00, 0x6a, 0x39, 0xa1, 0x09, 0x0e, 0xd2, - 0xdd, 0x69, 0x16, 0xc4, 0x31, 0xc7, 0x5b, 0xbb, 0x47, 0xdd, 0xa6, 0x81, 0x56, 0x00, 0xe4, 0xe7, - 0x70, 0x77, 0x6b, 0xff, 0x71, 0xd3, 0xc4, 0x3f, 0x30, 0x52, 0x1e, 0xd9, 0xed, 0xbe, 0x01, 0xb6, - 0x16, 0x75, 0x52, 0xcd, 0xde, 0x5a, 0xd0, 0x0b, 0x49, 0x09, 0x84, 0x99, 0x8d, 0xce, 0xd8, 0xe8, - 0x9c, 0x4f, 0x27, 0xda, 0x2a, 0x52, 0x58, 0x35, 0xad, 0x42, 0x26, 0x3a, 0xed, 0x69, 0x28, 0x9d, - 0xfc, 0x94, 0x24, 0xbd, 0x9a, 0xfc, 0x3c, 0x04, 0xc8, 0x66, 0x0b, 0x4b, 0xea, 0xd0, 0xdb, 0x50, - 0xa6, 0x9e, 0x4b, 0xb9, 0xce, 0x2c, 0x0a, 0xc0, 0x04, 0x6a, 0xb9, 0x89, 0x84, 0x50, 0x18, 0xf5, - 0xbc, 0xe1, 0x39, 0xbb, 0xe4, 0x92, 0xd7, 0x26, 0x15, 0xea, 0x79, 0x4f, 0xd8, 0x25, 0x47, 0xeb, - 0x50, 0x56, 0x03, 0x0d, 0x73, 0x49, 0xeb, 0x2b, 0xd9, 0x89, 0x22, 0xc0, 0x6f, 0x82, 0xa5, 0xfa, - 0xe1, 0x9c, 0xcd, 0x18, 0x4f, 0x0d, 0xfe, 0x1f, 0xe9, 0x7b, 0xcb, 0xee, 0x19, 0xbd, 0xad, 0x87, - 0x27, 0x5c, 0x8d, 0x6c, 0x8c, 0xf9, 0xd2, 0x48, 0x11, 0xea, 0xb9, 0x89, 0x64, 0xc0, 0x1d, 0xb0, - 0xaf, 0x1d, 0x4d, 0x69, 0x41, 0x98, 0x99, 0x20, 0x96, 0x0c, 0xab, 0x70, 0x04, 0x90, 0x0d, 0x58, - 0xb4, 0x19, 0xab, 0x5d, 0x84, 0x19, 0x6f, 0x08, 0x15, 0xb9, 0x9e, 0x13, 0x31, 0xff, 0xca, 0xeb, - 0xb3, 0xb1, 0x4c, 0x4a, 0x83, 0x5e, 0x81, 0x92, 0x9c, 0x23, 0xa9, 0xb8, 0x99, 0xb6, 0xfb, 0xe9, - 0x10, 0x49, 0xae, 0xe2, 0x13, 0x68, 0xa8, 0xbc, 0x42, 0xd8, 0x97, 0x53, 0xc6, 0xaf, 0xad, 0x5e, - 0x56, 0x01, 0xd2, 0x68, 0x98, 0x4c, 0xc6, 0x72, 0x18, 0x61, 0x28, 0xa7, 0x2e, 0xf3, 0x9c, 0xe4, - 0x55, 0x1a, 0xc2, 0x1f, 0x40, 0x3d, 0x39, 0x43, 0x36, 0xbe, 0xf7, 0xd3, 0x0c, 0x97, 0xd8, 0xa5, - 0x50, 0x88, 0x22, 0xd9, 0x0f, 0x9c, 0x34, 0xb9, 0xe1, 0x3f, 0x99, 0x09, 0xa7, 0x6e, 0xeb, 0xe6, - 0xea, 0x27, 0x63, 0xb1, 0x7e, 0x9a, 0xaf, 0x45, 0xcc, 0x1b, 0xd7, 0x22, 0xff, 0x07, 0x55, 0x47, - 0x26, 0x62, 0xf7, 0x22, 0x09, 0x7d, 0xab, 0xcb, 0x92, 0xae, 0x4e, 0xd7, 0xee, 0x05, 0x23, 0x19, - 0x83, 0xb8, 0x53, 0x1c, 0x9c, 0x33, 0xdf, 0xfd, 0x4a, 0xf6, 0xaf, 0xe2, 0xe1, 0x19, 0x22, 0x1b, - 0x31, 0xa8, 0xe4, 0xac, 0x47, 0x0c, 0xc9, 0x78, 0xc5, 0xca, 0x8d, 0x57, 0xee, 0x80, 0x35, 0x0d, - 0x39, 0x8b, 0xe2, 0xa4, 0x68, 0x53, 0x50, 0x5a, 0xf8, 0x54, 0x35, 0x2d, 0xf5, 0xc7, 0xf8, 0x7f, - 0xa0, 0x9a, 0xde, 0x45, 0xc4, 0x9b, 0xfd, 0x83, 0xfd, 0xae, 0x8a, 0x0e, 0xbd, 0xfd, 0x4e, 0xf7, - 0xbb, 0x4d, 0x43, 0x44, 0x2c, 0xd2, 0x3d, 0xee, 0x92, 0x7e, 0xb7, 0x69, 0x8a, 0xc8, 0xd2, 0xe9, - 0xee, 0x76, 0x07, 0xdd, 0x66, 0xf1, 0xd3, 0x92, 0x5d, 0x69, 0xda, 0xc4, 0x66, 0xb3, 0xd0, 0x73, - 0x47, 0x6e, 0x8c, 0xbf, 0x00, 0x7b, 0x8f, 0x86, 0x57, 0x8a, 0xf1, 0x2c, 0x21, 0x4d, 0x75, 0x0f, - 0xaf, 0x93, 0xc7, 0x6b, 0x50, 0xd1, 0x51, 0x23, 0xcd, 0xc8, 0x0b, 0x51, 0x25, 0x59, 0xc7, 0x3f, - 0x33, 0xe0, 0xf6, 0x5e, 0x70, 0xc1, 0xd2, 0x64, 0x79, 0x48, 0x2f, 0xbd, 0x80, 0x3a, 0xdf, 0xa2, - 0xc6, 0x57, 0xe1, 0x16, 0x0f, 0xa6, 0xd1, 0x88, 0x0d, 0x17, 0x66, 0x08, 0x0d, 0x85, 0x7e, 0xac, - 0xcd, 0x11, 0x8b, 0xaa, 0x83, 0xc7, 0x19, 0x55, 0x51, 0x52, 0xd5, 0x04, 0x32, 0xa1, 0x49, 0xb3, - 0x7e, 0xe9, 0x26, 0x59, 0x1f, 0xff, 0xd6, 0x80, 0x46, 0x77, 0x16, 0x06, 0x51, 0x9c, 0x5c, 0xf5, - 0x39, 0x51, 0x4a, 0x7f, 0x99, 0x38, 0x43, 0x89, 0x94, 0x23, 0xf6, 0x65, 0xef, 0xda, 0x01, 0xc7, - 0x43, 0xb0, 0xc4, 0x66, 0x53, 0xae, 0x4d, 0xe9, 0xc5, 0xe4, 0xcc, 0xb9, 0x8d, 0x37, 0xfa, 0x92, - 0x86, 0x68, 0xda, 0xfc, 0x70, 0xa9, 0x94, 0x1f, 0x2e, 0xe1, 0x47, 0x60, 0x29, 0xd2, 0x9c, 0x9e, - 0x6b, 0x50, 0xe9, 0x1f, 0x6d, 0x6f, 0x77, 0xfb, 0xfd, 0xa6, 0x81, 0x1a, 0x50, 0xed, 0x1c, 0x1d, - 0xee, 0xf6, 0xb6, 0xb7, 0x06, 0x5a, 0xd7, 0x3b, 0x5b, 0xbd, 0xdd, 0x6e, 0xa7, 0x59, 0xc4, 0xbf, - 0x34, 0xa0, 0x76, 0x10, 0xd1, 0x91, 0xc7, 0x3a, 0xcc, 0x8b, 0x29, 0x7a, 0x24, 0x3a, 0x5b, 0x11, - 0xbb, 0x93, 0x50, 0xb8, 0x96, 0xcd, 0xd0, 0x52, 0xaa, 0x8d, 0x6d, 0x45, 0xa2, 0xe7, 0x15, 0x9a, - 0x41, 0x98, 0x27, 0x3d, 0x09, 0x22, 0x3d, 0xe4, 0x28, 0x11, 0x0d, 0x7d, 0x6b, 0x67, 0xd4, 0x7e, - 0x04, 0xf5, 0xfc, 0x8e, 0x4b, 0x3a, 0xbe, 0xb9, 0x7a, 0xa4, 0x94, 0xef, 0xf0, 0x5e, 0x82, 0x86, - 0x68, 0x63, 0xdd, 0x09, 0xe3, 0x31, 0x9d, 0x84, 0x32, 0xb7, 0xeb, 0xcb, 0x97, 0x88, 0x19, 0x73, - 0xfc, 0x2a, 0xd4, 0x0f, 0x19, 0x8b, 0x08, 0xe3, 0x61, 0xe0, 0x73, 0xd9, 0xd0, 0x68, 0xe1, 0xab, - 0xc4, 0xa1, 0x21, 0x7c, 0x17, 0x8a, 0xfb, 0xd3, 0x49, 0xfe, 0xbf, 0x88, 0x92, 0xac, 0xaf, 0xf0, - 0x0e, 0xd4, 0xfb, 0x7a, 0xa4, 0x25, 0x6b, 0x2a, 0x51, 0x11, 0x78, 0x2e, 0xf3, 0x65, 0x45, 0x60, - 0xe8, 0x8a, 0x40, 0x22, 0x06, 0xfc, 0x1a, 0xad, 0x6f, 0xfe, 0xca, 0x80, 0x92, 0x68, 0xaa, 0x45, - 0xd8, 0xed, 0x8e, 0xce, 0x02, 0xa4, 0xc6, 0x73, 0x5a, 0xdb, 0xed, 0x39, 0x08, 0x17, 0xd0, 0x1b, - 0x6a, 0x4a, 0x97, 0x8c, 0x36, 0xaf, 0x27, 0xde, 0x84, 0xda, 0xa7, 0x81, 0xeb, 0x6f, 0xab, 0xb9, - 0x15, 0x4a, 0xa7, 0xf8, 0xb9, 0x39, 0xdf, 0x15, 0x9e, 0xf7, 0xc0, 0xea, 0x71, 0x21, 0x9a, 0xe5, - 0xe4, 0x69, 0x53, 0x91, 0x97, 0x1e, 0x2e, 0x6c, 0xfe, 0xa4, 0x08, 0x25, 0xd1, 0x9d, 0xa3, 0x87, - 0x50, 0xd1, 0xad, 0x35, 0x5a, 0x68, 0xa1, 0xdb, 0xa9, 0x13, 0x2d, 0xf4, 0xde, 0xb8, 0x80, 0xde, - 0x07, 0x4b, 0x47, 0xea, 0xf9, 0xfe, 0xbf, 0xfd, 0x34, 0xc7, 0xc3, 0x85, 0x75, 0xe3, 0x1d, 0x03, - 0xbd, 0x0d, 0x96, 0xb2, 0xc0, 0x05, 0x49, 0x3c, 0xbb, 0xc4, 0x3e, 0x71, 0x41, 0x32, 0xd4, 0xfa, - 0x67, 0xc1, 0xd4, 0x73, 0xfa, 0x2c, 0xba, 0x60, 0x68, 0x61, 0xb6, 0xd4, 0x5e, 0x80, 0x71, 0x01, - 0xbd, 0x05, 0xb0, 0xc5, 0xb9, 0x3b, 0xf6, 0x8f, 0x5c, 0x87, 0xa3, 0x5a, 0xb2, 0xbe, 0x3f, 0x9d, - 0xb4, 0x9b, 0xf2, 0x48, 0xb5, 0x2a, 0x3a, 0x15, 0xae, 0xc8, 0x73, 0x56, 0xf7, 0xad, 0xe4, 0xef, - 0x42, 0x43, 0xd9, 0xf8, 0x41, 0xb4, 0x25, 0xdc, 0x02, 0x2d, 0xb6, 0x29, 0xed, 0x45, 0x04, 0x2e, - 0xa0, 0x47, 0x60, 0x0f, 0xa2, 0x4b, 0x45, 0xff, 0x5c, 0x7a, 0xe1, 0xbc, 0xb9, 0xb7, 0x97, 0xa3, - 0x71, 0x61, 0xf3, 0x2f, 0x45, 0xb0, 0x3e, 0x0f, 0xa2, 0x73, 0x16, 0xa1, 0x0d, 0xb0, 0x64, 0xfb, - 0xc4, 0xd0, 0xd5, 0x76, 0x6a, 0xd9, 0xb1, 0x6f, 0x42, 0x55, 0x0a, 0x6d, 0x40, 0xf9, 0x79, 0xa6, - 0x26, 0xf9, 0x57, 0x58, 0x26, 0x37, 0x95, 0xa9, 0x71, 0x01, 0x7d, 0x07, 0xee, 0xa4, 0xe1, 0x7b, - 0xcb, 0x77, 0x54, 0x3a, 0xec, 0xd0, 0x98, 0xa2, 0xac, 0x2f, 0xcd, 0xf9, 0x4f, 0xbb, 0x96, 0x75, - 0x3a, 0x7d, 0xa9, 0xa9, 0x07, 0x50, 0xea, 0x8b, 0x17, 0x66, 0x7f, 0x64, 0x65, 0x23, 0xfd, 0x36, - 0xca, 0x23, 0xd3, 0x33, 0x3f, 0x00, 0x4b, 0x9d, 0x93, 0x89, 0x65, 0xae, 0x46, 0x69, 0xdf, 0x5e, - 0x44, 0x6b, 0xc6, 0xfb, 0x60, 0xef, 0xb9, 0xbe, 0x1a, 0x7c, 0xcd, 0x1b, 0x52, 0x5e, 0x83, 0xb8, - 0x80, 0x3e, 0x04, 0x4b, 0x45, 0xe3, 0xec, 0x84, 0xb9, 0xe8, 0xdc, 0x5e, 0x8e, 0xc6, 0x05, 0xf4, - 0x00, 0x9a, 0x84, 0x8d, 0x98, 0x9b, 0xcb, 0x6a, 0x28, 0xff, 0xe6, 0x45, 0x47, 0x5c, 0x37, 0xd0, - 0x47, 0xd0, 0x98, 0xcb, 0x82, 0x28, 0xcd, 0x08, 0xcb, 0x92, 0xe3, 0xe2, 0x06, 0x1f, 0x37, 0x7f, - 0xf3, 0xcd, 0xaa, 0xf1, 0xfb, 0x6f, 0x56, 0x8d, 0x3f, 0x7e, 0xb3, 0x6a, 0x7c, 0xfd, 0xe7, 0xd5, - 0xc2, 0x89, 0x25, 0xff, 0x81, 0x7d, 0xf7, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x6c, 0x30, 0xc1, - 0x11, 0xa6, 0x1d, 0x00, 0x00, + // 3036 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x39, 0xcb, 0x6e, 0x23, 0xc7, + 0xb5, 0xea, 0x26, 0xd9, 0x6c, 0x1e, 0x92, 0x1a, 0xba, 0x3c, 0x9e, 0xa1, 0x69, 0x5f, 0x59, 0xee, + 0xf1, 0xf5, 0xc8, 0x2f, 0xd9, 0x23, 0x8f, 0x1f, 0x77, 0xee, 0xf5, 0x0d, 0x64, 0x91, 0x33, 0xa6, + 0x47, 0x2f, 0x17, 0xa9, 0x71, 0x9c, 0x45, 0x88, 0x12, 0xbb, 0xa4, 0x69, 0xa8, 0xd9, 0xdd, 0xee, + 0x6a, 0x0a, 0x94, 0x97, 0xd9, 0x05, 0xf9, 0x01, 0xaf, 0x03, 0x64, 0x17, 0x20, 0x40, 0x3e, 0x20, + 0xab, 0x04, 0xc8, 0x22, 0x40, 0x12, 0x20, 0x1f, 0x90, 0x38, 0x9b, 0x20, 0xbb, 0x7c, 0x40, 0x80, + 0xa0, 0x4e, 0x55, 0x3f, 0xc8, 0xe1, 0xc8, 0x42, 0x1e, 0x2b, 0xf6, 0x39, 0x75, 0x4e, 0x3d, 0xce, + 0xfb, 0x1c, 0xc2, 0xaa, 0x17, 0x24, 0x3c, 0x0e, 0x98, 0xbf, 0x19, 0xc5, 0x61, 0x12, 0x12, 0x4b, + 0xc1, 0x9d, 0x1a, 0x8b, 0x3c, 0x85, 0x72, 0x3a, 0x50, 0xde, 0xf5, 0x44, 0x42, 0x08, 0x94, 0xa7, + 0x9e, 0x2b, 0xda, 0xc6, 0x7a, 0x69, 0xc3, 0xa2, 0xf8, 0xed, 0x7c, 0x06, 0xb5, 0x21, 0x13, 0x67, + 0x8f, 0x98, 0x3f, 0xe5, 0xa4, 0x05, 0xa5, 0x73, 0xe6, 0xb7, 0x8d, 0x75, 0x63, 0xa3, 0x41, 0xe5, + 0x27, 0xd9, 0x02, 0xfb, 0x9c, 0xf9, 0xa3, 0xe4, 0x22, 0xe2, 0x6d, 0x73, 0xdd, 0xd8, 0x58, 0xdd, + 0xba, 0xb9, 0xa9, 0x0e, 0xd8, 0x3c, 0x0c, 0x45, 0xe2, 0x05, 0xa7, 0x9b, 0x8f, 0x98, 0x3f, 0xbc, + 0x88, 0x38, 0xad, 0x9e, 0xab, 0x0f, 0xe7, 0x00, 0xea, 0x83, 0x78, 0x7c, 0x7f, 0x1a, 0x8c, 0x13, + 0x2f, 0x0c, 0xe4, 0xa9, 0x01, 0x9b, 0x70, 0xdc, 0xb5, 0x46, 0xf1, 0x5b, 0xe2, 0x58, 0x7c, 0x2a, + 0xda, 0xa5, 0xf5, 0x92, 0xc4, 0xc9, 0x6f, 0xd2, 0x86, 0xaa, 0x27, 0x76, 0xc2, 0x69, 0x90, 0xb4, + 0xcb, 0xeb, 0xc6, 0x86, 0x4d, 0x53, 0xd0, 0xf9, 0x69, 0x09, 0x2a, 0x9f, 0x4d, 0x79, 0x7c, 0x81, + 0x7c, 0x49, 0x12, 0xa7, 0x7b, 0xc9, 0x6f, 0x72, 0x1d, 0x2a, 0x3e, 0x0b, 0x4e, 0x45, 0xdb, 0xc4, + 0xcd, 0x14, 0x40, 0x5e, 0x80, 0x1a, 0x3b, 0x49, 0x78, 0x3c, 0x9a, 0x7a, 0x6e, 0xbb, 0xb4, 0x6e, + 0x6c, 0x58, 0xd4, 0x46, 0xc4, 0x91, 0xe7, 0x92, 0xe7, 0xc1, 0x76, 0xc3, 0xd1, 0xb8, 0x78, 0x96, + 0x1b, 0xe2, 0x59, 0xe4, 0x36, 0xd8, 0x53, 0xcf, 0x1d, 0xf9, 0x9e, 0x48, 0xda, 0x95, 0x75, 0x63, + 0xa3, 0xbe, 0xd5, 0x48, 0x1f, 0x2c, 0x65, 0x48, 0xab, 0x53, 0xcf, 0x45, 0x61, 0x6e, 0x82, 0x2d, + 0xe2, 0xf1, 0xe8, 0x64, 0x1a, 0x8c, 0xdb, 0x16, 0x12, 0x3e, 0x9b, 0x12, 0x16, 0x5e, 0x4f, 0xab, + 0x42, 0x01, 0xf2, 0x79, 0x31, 0x3f, 0xe7, 0xb1, 0xe0, 0xed, 0xaa, 0x3a, 0x52, 0x83, 0xe4, 0x2e, + 0xd4, 0x4f, 0xd8, 0x98, 0x27, 0xa3, 0x88, 0xc5, 0x6c, 0xd2, 0xb6, 0xe7, 0x37, 0xbb, 0x2f, 0x97, + 0x0e, 0xe5, 0x8a, 0xa0, 0x70, 0x92, 0x01, 0xe4, 0x03, 0x68, 0x22, 0x24, 0x46, 0x27, 0x9e, 0x9f, + 0xf0, 0xb8, 0x5d, 0x43, 0x3e, 0x92, 0xf1, 0x21, 0x76, 0x18, 0x73, 0x4e, 0x1b, 0x8a, 0x50, 0x61, + 0xc8, 0x7f, 0x01, 0xf0, 0x59, 0xc4, 0x02, 0x77, 0xc4, 0x7c, 0xbf, 0x0d, 0x78, 0x97, 0x9a, 0xc2, + 0x6c, 0xfb, 0x3e, 0xb9, 0x29, 0xef, 0xc9, 0xdc, 0x51, 0x22, 0xda, 0xcd, 0x75, 0x63, 0xa3, 0x4c, + 0x2d, 0x09, 0x0e, 0x85, 0x94, 0x8c, 0xef, 0x05, 0x23, 0x09, 0xb5, 0x57, 0xb5, 0x64, 0xa4, 0x8d, + 0xed, 0x7a, 0x01, 0xe5, 0xcc, 0xa5, 0x55, 0x5f, 0x7d, 0x38, 0xef, 0x43, 0x0d, 0xcd, 0x09, 0xc5, + 0xf4, 0x1a, 0x58, 0xe7, 0x12, 0x50, 0x56, 0x57, 0xdf, 0x7a, 0x26, 0xbd, 0x5f, 0x66, 0x75, 0x54, + 0x13, 0x38, 0x6b, 0x60, 0xef, 0xb2, 0xe0, 0x34, 0x35, 0x55, 0xa9, 0x47, 0x64, 0xaa, 0x51, 0xfc, + 0x76, 0x7e, 0x6f, 0x82, 0x45, 0xb9, 0x98, 0xfa, 0x09, 0x79, 0x03, 0x40, 0x6a, 0x69, 0xc2, 0x92, + 0xd8, 0x9b, 0xe9, 0x9d, 0xe7, 0xf5, 0x54, 0x9b, 0x7a, 0xee, 0x1e, 0x2e, 0x93, 0xbb, 0xd0, 0xc0, + 0x13, 0x52, 0x72, 0x73, 0xfe, 0x22, 0xd9, 0x5d, 0x69, 0x1d, 0xc9, 0x34, 0xd7, 0x0d, 0xb0, 0xd0, + 0x40, 0x94, 0x91, 0x36, 0xa9, 0x86, 0xc8, 0x7f, 0x6b, 0x8f, 0x13, 0x7c, 0x9c, 0x8c, 0x5c, 0x2e, + 0x52, 0x0b, 0x6a, 0x66, 0xd8, 0x2e, 0x17, 0x09, 0x79, 0x0f, 0x94, 0xd4, 0xd3, 0x43, 0x2b, 0x78, + 0x28, 0x99, 0xd3, 0xaa, 0x50, 0xa7, 0x22, 0x9d, 0x3e, 0xf5, 0x0e, 0xd4, 0xe5, 0x5b, 0x53, 0x2e, + 0x0b, 0xb9, 0x5a, 0xd9, 0xcb, 0xb4, 0x78, 0x28, 0x48, 0x22, 0xcd, 0x22, 0x45, 0x25, 0xad, 0x55, + 0x59, 0x15, 0x7e, 0x5f, 0x5d, 0x57, 0x3d, 0xa8, 0x1c, 0xc4, 0x2e, 0x8f, 0x97, 0x7a, 0x16, 0x81, + 0xb2, 0xcb, 0xc5, 0x18, 0x1d, 0xdf, 0xa6, 0xf8, 0x9d, 0x7b, 0x5b, 0xa9, 0xe0, 0x6d, 0xce, 0x6f, + 0x0d, 0xa8, 0x0f, 0xc2, 0x38, 0xd9, 0xe3, 0x42, 0xb0, 0x53, 0x4e, 0x6e, 0x41, 0x25, 0x94, 0xdb, + 0x6a, 0xd5, 0x34, 0xd3, 0x07, 0xe0, 0x59, 0x54, 0xad, 0x2d, 0x28, 0xd1, 0xbc, 0x5c, 0x89, 0xd7, + 0xa1, 0xa2, 0xfc, 0x55, 0xfa, 0x72, 0x85, 0x2a, 0x40, 0x2a, 0x29, 0x3c, 0x39, 0x11, 0x5c, 0x29, + 0xa1, 0x42, 0x35, 0xf4, 0x6f, 0x30, 0xe2, 0x63, 0x00, 0xf9, 0xa0, 0x7f, 0xc6, 0xde, 0xae, 0x7c, + 0xc6, 0x63, 0xa8, 0x53, 0x76, 0x92, 0xec, 0x84, 0x41, 0xc2, 0x67, 0x09, 0x59, 0x05, 0xd3, 0x73, + 0x51, 0x01, 0x16, 0x35, 0x3d, 0x57, 0x3e, 0xf9, 0x34, 0x0e, 0xa7, 0x11, 0xca, 0xbf, 0x49, 0x15, + 0x80, 0x8a, 0x72, 0xdd, 0x18, 0xe5, 0x20, 0x15, 0xe5, 0xba, 0x31, 0x79, 0x09, 0xea, 0x22, 0x60, + 0x91, 0x78, 0x1c, 0x26, 0xf2, 0xc9, 0x65, 0x7c, 0x32, 0xa4, 0xa8, 0xa1, 0x70, 0x7e, 0x65, 0x80, + 0xb5, 0xc7, 0x27, 0xc7, 0x3c, 0x7e, 0xe2, 0x94, 0xe7, 0xc1, 0xc6, 0x8d, 0x47, 0x9e, 0xab, 0x0f, + 0xaa, 0x22, 0xdc, 0x77, 0x97, 0x1e, 0x75, 0x03, 0x2c, 0x9f, 0x33, 0xa9, 0x5a, 0x65, 0xf6, 0x1a, + 0x92, 0x12, 0x67, 0x93, 0x91, 0x2b, 0xdf, 0x5c, 0x51, 0x0b, 0x6c, 0xd2, 0xe5, 0xcc, 0x95, 0x77, + 0xf3, 0x99, 0x48, 0x46, 0xd3, 0xc8, 0x65, 0x09, 0xc7, 0x50, 0x59, 0x96, 0xf6, 0x2b, 0x92, 0x23, + 0xc4, 0x90, 0xd7, 0xe1, 0x99, 0xb1, 0x3f, 0x15, 0x32, 0x56, 0x7b, 0xc1, 0x49, 0x38, 0x0a, 0x03, + 0xff, 0x02, 0xb5, 0x66, 0xd3, 0x6b, 0x7a, 0xa1, 0x1f, 0x9c, 0x84, 0x07, 0x81, 0x7f, 0xe1, 0xfc, + 0xc8, 0x84, 0xca, 0x03, 0x14, 0xc3, 0x5d, 0xa8, 0x4e, 0xf0, 0x41, 0x69, 0x60, 0xe9, 0xa4, 0xea, + 0xc0, 0xf5, 0x4d, 0xf5, 0x5a, 0xd1, 0x0b, 0x92, 0xf8, 0x82, 0xa6, 0xa4, 0x92, 0x2b, 0x61, 0xc7, + 0x3e, 0x4f, 0x84, 0xb6, 0xb7, 0x05, 0xae, 0xa1, 0x5a, 0xd4, 0x5c, 0x9a, 0xb4, 0xf3, 0x29, 0x34, + 0x8a, 0xdb, 0xc9, 0x34, 0x79, 0xc6, 0x2f, 0x50, 0x86, 0x65, 0x2a, 0x3f, 0xc9, 0x2b, 0x50, 0xc1, + 0xd8, 0x81, 0x12, 0xac, 0x6f, 0xad, 0xa6, 0xbb, 0x2a, 0x36, 0xaa, 0x16, 0xef, 0x99, 0x1f, 0x1a, + 0x72, 0xaf, 0xe2, 0x21, 0xc5, 0xbd, 0x6a, 0x97, 0xef, 0xa5, 0xd8, 0x0a, 0x7b, 0x39, 0x7f, 0x37, + 0xa0, 0xf1, 0x3d, 0x1e, 0x87, 0x87, 0x71, 0x18, 0x85, 0x82, 0xf9, 0x05, 0xdd, 0x36, 0x51, 0xb7, + 0xaf, 0x82, 0xa5, 0x5e, 0xfe, 0x94, 0x7b, 0xe9, 0x55, 0x49, 0xa7, 0xde, 0x8a, 0xaa, 0x7e, 0xf2, + 0x4c, 0xbd, 0x4a, 0xd6, 0x00, 0x26, 0x6c, 0xb6, 0xcb, 0x99, 0xe0, 0x7d, 0x37, 0x35, 0xb3, 0x1c, + 0x43, 0x3a, 0x60, 0x4f, 0xd8, 0x6c, 0x38, 0x0b, 0x86, 0x02, 0xad, 0xa0, 0x4c, 0x33, 0x98, 0xbc, + 0x08, 0xb5, 0x09, 0x9b, 0x49, 0x7b, 0xef, 0xbb, 0xda, 0x0a, 0x72, 0x04, 0x79, 0x19, 0x4a, 0xc9, + 0x2c, 0xc0, 0x18, 0x56, 0xdf, 0xba, 0x86, 0xee, 0x32, 0x9c, 0x05, 0xda, 0x33, 0xa8, 0x5c, 0x93, + 0x92, 0x4a, 0x7c, 0x81, 0xe9, 0xb1, 0x46, 0xe5, 0xa7, 0xf3, 0x87, 0x12, 0x5c, 0xd3, 0x8a, 0x79, + 0xec, 0x45, 0x83, 0x44, 0x5a, 0x53, 0x1b, 0xaa, 0x18, 0x1a, 0x78, 0xac, 0xf5, 0x93, 0x82, 0xe4, + 0x7f, 0xc1, 0x42, 0xc3, 0x4e, 0x55, 0x7f, 0x6b, 0x5e, 0x18, 0xd9, 0x16, 0xca, 0x14, 0xb4, 0x0d, + 0x68, 0x16, 0xf2, 0x21, 0x54, 0xbe, 0xe2, 0x71, 0xa8, 0xc2, 0x5e, 0x7d, 0xcb, 0x79, 0x1a, 0xaf, + 0x54, 0x87, 0x66, 0x55, 0x0c, 0xff, 0x41, 0x99, 0x6d, 0xc8, 0x20, 0x37, 0x09, 0xcf, 0xb9, 0xdb, + 0xae, 0xe2, 0xad, 0x16, 0xd5, 0x9b, 0x2e, 0x4b, 0xa1, 0x24, 0xbe, 0x90, 0x5e, 0x84, 0xe2, 0x6b, + 0xd0, 0x14, 0xec, 0x7c, 0x02, 0xf5, 0xc2, 0x73, 0x8b, 0xd6, 0xd8, 0x54, 0xd6, 0x78, 0x6b, 0xde, + 0x1a, 0x9b, 0x73, 0xfe, 0x52, 0x34, 0xec, 0x4f, 0x00, 0xf2, 0xc7, 0xff, 0x2b, 0x2e, 0xe2, 0xfc, + 0xd0, 0x80, 0x6b, 0x3b, 0x61, 0x10, 0x70, 0xac, 0xa0, 0x94, 0x5a, 0x73, 0x4b, 0x36, 0x2e, 0xb5, + 0xe4, 0xb7, 0xa0, 0x22, 0x24, 0x83, 0x3e, 0xe5, 0xe6, 0x53, 0xf4, 0x44, 0x15, 0x95, 0x0c, 0x4e, + 0x13, 0x36, 0x1b, 0x45, 0x3c, 0x70, 0xbd, 0xe0, 0x14, 0xad, 0x5f, 0x69, 0xe7, 0x50, 0x61, 0x9c, + 0x1f, 0x1b, 0x60, 0x29, 0x27, 0x98, 0x0b, 0x94, 0xc6, 0x7c, 0xa0, 0x7c, 0x11, 0x6a, 0x51, 0xcc, + 0x5d, 0x6f, 0x9c, 0x9e, 0x5c, 0xa3, 0x39, 0x42, 0xc6, 0xf1, 0x93, 0x30, 0x1e, 0x73, 0xdc, 0xde, + 0xa6, 0x0a, 0x90, 0x05, 0x2a, 0xa6, 0x28, 0x0c, 0x77, 0x2a, 0x96, 0xda, 0x12, 0x21, 0xe3, 0x9c, + 0x64, 0x11, 0x11, 0x1b, 0xab, 0x52, 0xb1, 0x44, 0x15, 0x20, 0x63, 0xaf, 0xd2, 0x28, 0x6a, 0xd1, + 0xa6, 0x1a, 0x72, 0x7e, 0x6e, 0x42, 0xa3, 0xeb, 0xc5, 0x7c, 0x9c, 0x70, 0xb7, 0xe7, 0x9e, 0x22, + 0x21, 0x0f, 0x12, 0x2f, 0xb9, 0xd0, 0x71, 0x5e, 0x43, 0x59, 0x92, 0x37, 0xe7, 0xcb, 0x67, 0xa5, + 0x97, 0x12, 0x5a, 0x86, 0x02, 0xc8, 0xfb, 0x00, 0xaa, 0x66, 0xc2, 0xca, 0xbf, 0x7c, 0x79, 0xe5, + 0x5f, 0x43, 0x52, 0xf9, 0x29, 0x85, 0xa4, 0xf8, 0x3c, 0x95, 0x07, 0x2c, 0x6c, 0x0b, 0xa6, 0xd2, + 0xd0, 0xb1, 0x72, 0x38, 0xe6, 0x3e, 0x1a, 0x32, 0x56, 0x0e, 0xc7, 0xdc, 0xcf, 0x0a, 0xbd, 0xaa, + 0xba, 0x92, 0xfc, 0x26, 0xb7, 0xc1, 0x0c, 0x23, 0x7c, 0x63, 0xe1, 0xd0, 0xe2, 0x03, 0x37, 0x0f, + 0x22, 0x6a, 0x86, 0x11, 0x71, 0xc0, 0x52, 0xa5, 0x6d, 0xbb, 0x86, 0x0e, 0x00, 0x18, 0x38, 0xb0, + 0xb6, 0xa2, 0x7a, 0xc5, 0xb9, 0x01, 0xe6, 0x41, 0x44, 0xaa, 0x50, 0x1a, 0xf4, 0x86, 0xad, 0x15, + 0xf9, 0xd1, 0xed, 0xed, 0xb6, 0x0c, 0xe7, 0xaf, 0x06, 0xd4, 0xf6, 0xa6, 0x09, 0x93, 0x36, 0x26, + 0x2e, 0x53, 0xee, 0xf3, 0x60, 0x8b, 0x84, 0xc5, 0x98, 0x59, 0x4d, 0x15, 0x52, 0x10, 0x1e, 0x0a, + 0xf2, 0x3a, 0x54, 0xb8, 0x7b, 0xca, 0xd3, 0xa8, 0x70, 0x7d, 0xd9, 0x5d, 0xa9, 0x22, 0x21, 0x6f, + 0x82, 0x25, 0xc6, 0x8f, 0xf9, 0x84, 0xb5, 0xcb, 0xf3, 0xc4, 0x03, 0xc4, 0xaa, 0x64, 0x48, 0x35, + 0x0d, 0x76, 0x28, 0x71, 0x18, 0x61, 0x89, 0x5e, 0xd1, 0x1d, 0x4a, 0x1c, 0x46, 0xb2, 0x40, 0xdf, + 0x82, 0xe7, 0xbc, 0xd3, 0x20, 0x8c, 0xf9, 0xc8, 0x0b, 0x5c, 0x3e, 0x1b, 0x8d, 0xc3, 0xe0, 0xc4, + 0xf7, 0xc6, 0x09, 0xca, 0xd5, 0xa6, 0xcf, 0xaa, 0xc5, 0xbe, 0x5c, 0xdb, 0xd1, 0x4b, 0xce, 0x6d, + 0xa8, 0x3d, 0xe4, 0x17, 0x58, 0xe9, 0x0a, 0xd2, 0x01, 0xf3, 0xec, 0x5c, 0x67, 0x4d, 0x48, 0x6f, + 0xf1, 0xf0, 0x11, 0x35, 0xcf, 0xce, 0x9d, 0xaf, 0x4d, 0xb0, 0xb3, 0x74, 0x72, 0x0b, 0x9a, 0x2e, + 0x8f, 0x62, 0x2e, 0xad, 0xd8, 0xcd, 0x25, 0xd3, 0xc8, 0x91, 0x7d, 0x97, 0xbc, 0x0d, 0xb5, 0x49, + 0x2a, 0x46, 0xed, 0x75, 0x59, 0x69, 0x9d, 0xc9, 0x97, 0xe6, 0x34, 0xe4, 0x1d, 0xa8, 0x27, 0xb3, + 0x40, 0x5e, 0x5b, 0xc6, 0x76, 0x9d, 0x71, 0x9e, 0x08, 0xf9, 0x90, 0x64, 0xdf, 0xfa, 0xc2, 0xe5, + 0x65, 0x17, 0xce, 0x1d, 0xbe, 0x72, 0x25, 0x87, 0xbf, 0x0d, 0xd7, 0xc6, 0x3e, 0x67, 0xc1, 0x28, + 0xf7, 0x57, 0x65, 0x8e, 0xab, 0x88, 0x3e, 0xcc, 0x9c, 0x56, 0x07, 0xb0, 0x6a, 0x96, 0x97, 0x9d, + 0x97, 0xa1, 0xf4, 0xf0, 0xd1, 0xe0, 0x52, 0xe9, 0x7d, 0x1f, 0xcc, 0x87, 0x8f, 0x8a, 0xb1, 0xaf, + 0xa1, 0x62, 0x9f, 0xee, 0xab, 0xcd, 0xbc, 0xaf, 0xee, 0x80, 0x3d, 0x15, 0x3c, 0xde, 0xe3, 0x09, + 0xd3, 0x8e, 0x97, 0xc1, 0x32, 0x5a, 0xcb, 0xc6, 0xd0, 0x0b, 0x03, 0x9d, 0x2e, 0x52, 0xd0, 0xf9, + 0x5b, 0x09, 0xaa, 0xda, 0xf9, 0xe4, 0x9e, 0xd3, 0xac, 0x90, 0x93, 0x9f, 0xb9, 0x27, 0x9b, 0x45, + 0x4f, 0x2e, 0x76, 0xf0, 0xa5, 0xab, 0x75, 0xf0, 0xe4, 0xff, 0xa1, 0x11, 0xa9, 0xb5, 0xa2, 0xff, + 0xbf, 0xb0, 0xc8, 0xa7, 0x7f, 0x91, 0xb7, 0x1e, 0xe5, 0x80, 0xb4, 0x5e, 0xec, 0x62, 0x12, 0x76, + 0x8a, 0x7a, 0x69, 0xd0, 0xaa, 0x84, 0x87, 0xec, 0xf4, 0x29, 0x51, 0xe0, 0x0a, 0x8e, 0x2c, 0x8b, + 0x9b, 0x30, 0x6a, 0x37, 0x54, 0x71, 0x13, 0x46, 0x73, 0x7e, 0xd9, 0x9c, 0xf7, 0xcb, 0x17, 0xa0, + 0x36, 0x0e, 0x27, 0x13, 0x0f, 0xd7, 0x56, 0x55, 0x52, 0x55, 0x88, 0xa1, 0x70, 0xbe, 0x82, 0xaa, + 0x7e, 0x30, 0xa9, 0x43, 0xb5, 0xdb, 0xbb, 0xbf, 0x7d, 0xb4, 0x2b, 0x23, 0x03, 0x80, 0xf5, 0x71, + 0x7f, 0x7f, 0x9b, 0x7e, 0xd1, 0x32, 0x64, 0x94, 0xe8, 0xef, 0x0f, 0x5b, 0x26, 0xa9, 0x41, 0xe5, + 0xfe, 0xee, 0xc1, 0xf6, 0xb0, 0x55, 0x22, 0x36, 0x94, 0x3f, 0x3e, 0x38, 0xd8, 0x6d, 0x95, 0x49, + 0x03, 0xec, 0xee, 0xf6, 0xb0, 0x37, 0xec, 0xef, 0xf5, 0x5a, 0x15, 0x49, 0xfb, 0xa0, 0x77, 0xd0, + 0xb2, 0xe4, 0xc7, 0x51, 0xbf, 0xdb, 0xaa, 0xca, 0xf5, 0xc3, 0xed, 0xc1, 0xe0, 0xf3, 0x03, 0xda, + 0x6d, 0xd9, 0x72, 0xdf, 0xc1, 0x90, 0xf6, 0xf7, 0x1f, 0xb4, 0x6a, 0xce, 0x1d, 0xa8, 0x17, 0x84, + 0x26, 0x39, 0x68, 0xef, 0x7e, 0x6b, 0x45, 0x1e, 0xf3, 0x68, 0x7b, 0xf7, 0xa8, 0xd7, 0x32, 0xc8, + 0x2a, 0x00, 0x7e, 0x8e, 0x76, 0xb7, 0xf7, 0x1f, 0xb4, 0x4c, 0xe7, 0x07, 0x46, 0xc6, 0x83, 0x9d, + 0xf1, 0x1b, 0x60, 0x6b, 0x51, 0xa7, 0x95, 0xef, 0xb5, 0x05, 0xbd, 0xd0, 0x8c, 0x40, 0x9a, 0xd9, + 0xf8, 0x31, 0x1f, 0x9f, 0x89, 0xe9, 0x44, 0x5b, 0x45, 0x06, 0xab, 0x06, 0x57, 0xca, 0x44, 0xa7, + 0x3d, 0x0d, 0x65, 0x53, 0xa2, 0x32, 0xd2, 0xab, 0x29, 0xd1, 0x5d, 0x80, 0x7c, 0x0e, 0xb1, 0xa4, + 0x66, 0xbd, 0x0e, 0x15, 0xe6, 0x7b, 0x4c, 0xe8, 0xcc, 0xa2, 0x00, 0x87, 0x42, 0xbd, 0x30, 0xbd, + 0x90, 0x0a, 0x63, 0xbe, 0x3f, 0x3a, 0xe3, 0x17, 0x02, 0x79, 0x6d, 0x5a, 0x65, 0xbe, 0xff, 0x90, + 0x5f, 0x08, 0xb2, 0x01, 0x15, 0x35, 0xfc, 0x30, 0x97, 0xb4, 0xc9, 0xc8, 0x4e, 0x15, 0x81, 0xf3, + 0x26, 0x58, 0xaa, 0x77, 0x2e, 0xd8, 0x8c, 0xf1, 0xd4, 0xe0, 0xff, 0x91, 0xbe, 0x37, 0x76, 0xda, + 0xe4, 0x6d, 0x3d, 0x68, 0x11, 0x6a, 0xbc, 0x63, 0xcc, 0x17, 0x4d, 0x8a, 0x50, 0xcf, 0x58, 0x90, + 0xc1, 0xe9, 0x82, 0x7d, 0xe9, 0x18, 0x4b, 0x0b, 0xc2, 0xcc, 0x05, 0xb1, 0x64, 0xb0, 0xe5, 0xc4, + 0x00, 0xf9, 0x30, 0x46, 0x9b, 0xb1, 0xda, 0x45, 0x9a, 0xf1, 0xa6, 0x54, 0x91, 0xe7, 0xbb, 0x31, + 0x0f, 0x9e, 0x78, 0x7d, 0x3e, 0xc2, 0xc9, 0x68, 0xc8, 0x2b, 0x50, 0xc6, 0x99, 0x93, 0x8a, 0x9b, + 0xd9, 0x68, 0x20, 0x1b, 0x38, 0xe1, 0xaa, 0x73, 0x0c, 0x4d, 0x95, 0x57, 0x28, 0xff, 0x72, 0xca, + 0xc5, 0xa5, 0xd5, 0xcb, 0x1a, 0x40, 0x16, 0x0d, 0xd3, 0x29, 0x5a, 0x01, 0x23, 0x0d, 0xe5, 0xc4, + 0xe3, 0xbe, 0x9b, 0xbe, 0x4a, 0x43, 0xce, 0x07, 0xd0, 0x48, 0xcf, 0xc0, 0x26, 0xf9, 0x76, 0x96, + 0xe1, 0x52, 0xbb, 0x94, 0x0a, 0x51, 0x24, 0xfb, 0xa1, 0x9b, 0x25, 0x37, 0xe7, 0x4f, 0x66, 0xca, + 0xa9, 0x5b, 0xc0, 0xb9, 0xfa, 0xc9, 0x58, 0xac, 0x9f, 0xe6, 0x6b, 0x11, 0xf3, 0xca, 0xb5, 0xc8, + 0xff, 0x41, 0xcd, 0xc5, 0x44, 0xec, 0x9d, 0xa7, 0xa1, 0x6f, 0x6d, 0x59, 0xd2, 0xd5, 0xe9, 0xda, + 0x3b, 0xe7, 0x34, 0x67, 0x90, 0x77, 0x4a, 0xc2, 0x33, 0x1e, 0x78, 0x5f, 0x61, 0xaf, 0x2b, 0x1f, + 0x9e, 0x23, 0xf2, 0x71, 0x84, 0x4a, 0xce, 0x7a, 0x1c, 0x91, 0x8e, 0x62, 0xac, 0xc2, 0x28, 0xe6, + 0x06, 0x58, 0xd3, 0x48, 0xf0, 0x38, 0x49, 0x8b, 0x36, 0x05, 0x65, 0x85, 0x4f, 0x4d, 0xd3, 0xb2, + 0xe0, 0xd4, 0xf9, 0x1f, 0xa8, 0x65, 0x77, 0x91, 0xf1, 0x66, 0xff, 0x60, 0xbf, 0xa7, 0xa2, 0x43, + 0x7f, 0xbf, 0xdb, 0xfb, 0x6e, 0xcb, 0x90, 0x11, 0x8b, 0xf6, 0x1e, 0xf5, 0xe8, 0xa0, 0xd7, 0x32, + 0x65, 0x64, 0xe9, 0xf6, 0x76, 0x7b, 0xc3, 0x5e, 0xab, 0xf4, 0x69, 0xd9, 0xae, 0xb6, 0x6c, 0x6a, + 0xf3, 0x59, 0xe4, 0x7b, 0x63, 0x2f, 0x71, 0xbe, 0x00, 0x7b, 0x8f, 0x45, 0x4f, 0x14, 0xe3, 0x79, + 0x42, 0x9a, 0xea, 0x7e, 0x5f, 0x27, 0x8f, 0xd7, 0xa0, 0xaa, 0xa3, 0x46, 0x96, 0x91, 0x17, 0xa2, + 0x4a, 0xba, 0xee, 0xfc, 0xcc, 0x80, 0xeb, 0x7b, 0xe1, 0x39, 0xcf, 0x92, 0xe5, 0x21, 0xbb, 0xf0, + 0x43, 0xe6, 0x7e, 0x8b, 0x1a, 0x5f, 0x85, 0x6b, 0x22, 0x9c, 0xc6, 0x63, 0x3e, 0x5a, 0x98, 0x37, + 0x34, 0x15, 0xfa, 0x81, 0x36, 0x47, 0x47, 0x56, 0x1d, 0x22, 0xc9, 0xa9, 0x4a, 0x48, 0x55, 0x97, + 0xc8, 0x94, 0x26, 0xcb, 0xfa, 0xe5, 0xab, 0x64, 0x7d, 0xe7, 0x37, 0x06, 0x34, 0x7b, 0xb3, 0x28, + 0x8c, 0x93, 0xf4, 0xaa, 0xcf, 0xc9, 0x52, 0xfa, 0xcb, 0xd4, 0x19, 0xca, 0xb4, 0x12, 0xf3, 0x2f, + 0xfb, 0x97, 0x0e, 0x43, 0xee, 0x82, 0x25, 0x37, 0x9b, 0x0a, 0x6d, 0x4a, 0x2f, 0xa6, 0x67, 0xce, + 0x6d, 0xbc, 0x39, 0x40, 0x1a, 0xaa, 0x69, 0x8b, 0x83, 0xa8, 0x72, 0x71, 0x10, 0xe5, 0xdc, 0x03, + 0x4b, 0x91, 0x16, 0xf4, 0x5c, 0x87, 0xea, 0xe0, 0x68, 0x67, 0xa7, 0x37, 0x18, 0xb4, 0x0c, 0xd2, + 0x84, 0x5a, 0xf7, 0xe8, 0x70, 0xb7, 0xbf, 0xb3, 0x3d, 0xd4, 0xba, 0xbe, 0xbf, 0xdd, 0xdf, 0xed, + 0x75, 0x5b, 0x25, 0xe7, 0x17, 0x06, 0xd4, 0x0f, 0x62, 0x36, 0xf6, 0x79, 0x97, 0xfb, 0x09, 0x23, + 0xf7, 0x64, 0xcf, 0x2b, 0x63, 0x77, 0x1a, 0x0a, 0xd7, 0xf3, 0x79, 0x5b, 0x46, 0xb5, 0xb9, 0xa3, + 0x48, 0xf4, 0x6c, 0x43, 0x33, 0x48, 0xf3, 0x64, 0xc7, 0x61, 0xac, 0x07, 0x22, 0x65, 0xaa, 0xa1, + 0x6f, 0xed, 0x8c, 0x3a, 0xf7, 0xa0, 0x51, 0xdc, 0x71, 0x49, 0xc7, 0x37, 0x57, 0x8f, 0x94, 0x8b, + 0x1d, 0xde, 0x4b, 0xd0, 0x94, 0x0d, 0xae, 0x37, 0xe1, 0x22, 0x61, 0x93, 0x08, 0x73, 0xbb, 0xbe, + 0x7c, 0x99, 0x9a, 0x89, 0x70, 0x5e, 0x85, 0xc6, 0x21, 0xe7, 0x31, 0xe5, 0x22, 0x0a, 0x03, 0x81, + 0x0d, 0x8d, 0x16, 0xbe, 0x4a, 0x1c, 0x1a, 0x72, 0x6e, 0x42, 0x69, 0x7f, 0x3a, 0x29, 0xfe, 0x6f, + 0x51, 0xc6, 0xfa, 0xca, 0xb9, 0x0f, 0x8d, 0x81, 0x1e, 0x7f, 0x61, 0x4d, 0x25, 0x2b, 0x02, 0xdf, + 0xe3, 0x01, 0x56, 0x04, 0x86, 0xae, 0x08, 0x10, 0x31, 0x14, 0x97, 0x68, 0x7d, 0xeb, 0x97, 0x06, + 0x94, 0x65, 0xbb, 0x2d, 0xc3, 0x6e, 0x6f, 0xfc, 0x38, 0x24, 0x6a, 0x94, 0xa7, 0xb5, 0xdd, 0x99, + 0x83, 0x9c, 0x15, 0xf2, 0x86, 0x9a, 0xe8, 0xa5, 0x63, 0xd0, 0xcb, 0x89, 0xb7, 0xa0, 0xfe, 0x69, + 0xe8, 0x05, 0x3b, 0x6a, 0xc6, 0x45, 0xb2, 0x89, 0x7f, 0x61, 0x26, 0xf8, 0x04, 0xcf, 0x7b, 0x60, + 0xf5, 0x85, 0x14, 0xcd, 0x72, 0xf2, 0xac, 0xa9, 0x28, 0x4a, 0xcf, 0x59, 0xd9, 0xfa, 0x49, 0x09, + 0xca, 0xb2, 0x3b, 0x27, 0x77, 0xa1, 0xaa, 0x5b, 0x6b, 0xb2, 0xd0, 0x42, 0x77, 0x32, 0x27, 0x5a, + 0xe8, 0xbd, 0x9d, 0x15, 0xf2, 0x3e, 0x58, 0x3a, 0x52, 0xcf, 0xf7, 0xff, 0x9d, 0xa7, 0x39, 0x9e, + 0xb3, 0xb2, 0x61, 0xbc, 0x63, 0x90, 0xb7, 0xc1, 0x52, 0x16, 0xb8, 0x20, 0x89, 0x67, 0x97, 0xd8, + 0xa7, 0xb3, 0x82, 0x0c, 0xf5, 0xc1, 0xe3, 0x70, 0xea, 0xbb, 0x03, 0x1e, 0x9f, 0x73, 0xb2, 0x30, + 0x87, 0xea, 0x2c, 0xc0, 0xce, 0x0a, 0x79, 0x0b, 0x60, 0x5b, 0x08, 0xef, 0x34, 0x38, 0xf2, 0x5c, + 0x41, 0xea, 0xe9, 0xfa, 0xfe, 0x74, 0xd2, 0x69, 0xe1, 0x91, 0x6a, 0x55, 0x76, 0x2a, 0x42, 0x91, + 0x17, 0xac, 0xee, 0x5b, 0xc9, 0xdf, 0x85, 0xa6, 0xb2, 0xf1, 0x83, 0x78, 0x5b, 0xba, 0x05, 0x59, + 0x6c, 0x53, 0x3a, 0x8b, 0x08, 0x67, 0x85, 0xdc, 0x03, 0x7b, 0x18, 0x5f, 0x28, 0xfa, 0xe7, 0xb2, + 0x0b, 0x17, 0xcd, 0xbd, 0xb3, 0x1c, 0xed, 0xac, 0x6c, 0xfd, 0xa5, 0x04, 0xd6, 0xe7, 0x61, 0x7c, + 0xc6, 0x63, 0xb2, 0x09, 0x16, 0xb6, 0x4f, 0x9c, 0x3c, 0xd9, 0x4e, 0x2d, 0x3b, 0xf6, 0x4d, 0xa8, + 0xa1, 0xd0, 0x86, 0x4c, 0x9c, 0xe5, 0x6a, 0xc2, 0xbf, 0xcd, 0x72, 0xb9, 0xa9, 0x4c, 0xed, 0xac, + 0x90, 0xef, 0xc0, 0x8d, 0x2c, 0x7c, 0x6f, 0x07, 0xae, 0x4a, 0x87, 0x5d, 0x96, 0x30, 0x92, 0xf7, + 0xa5, 0x05, 0xff, 0xe9, 0xd4, 0xf3, 0x4e, 0x67, 0x80, 0x9a, 0xba, 0x03, 0xe5, 0x81, 0x7c, 0x61, + 0xfe, 0xa7, 0x57, 0x3e, 0xfe, 0xef, 0x90, 0x22, 0x32, 0x3b, 0xf3, 0x03, 0xb0, 0xd4, 0x39, 0xb9, + 0x58, 0xe6, 0x6a, 0x94, 0xce, 0xf5, 0x45, 0xb4, 0x66, 0xbc, 0x0d, 0xf6, 0x9e, 0x17, 0xa8, 0x91, + 0xd8, 0xbc, 0x21, 0x15, 0x35, 0xe8, 0xac, 0x90, 0x0f, 0xc1, 0x52, 0xd1, 0x38, 0x3f, 0x61, 0x2e, + 0x3a, 0x77, 0x96, 0xa3, 0x9d, 0x15, 0x72, 0x07, 0x5a, 0x94, 0x8f, 0xb9, 0x57, 0xc8, 0x6a, 0xa4, + 0xf8, 0xe6, 0x45, 0x47, 0xdc, 0x30, 0xc8, 0x47, 0xd0, 0x9c, 0xcb, 0x82, 0x24, 0xcb, 0x08, 0xcb, + 0x92, 0xe3, 0xe2, 0x06, 0x1f, 0xb7, 0x7e, 0xfd, 0xcd, 0x9a, 0xf1, 0xbb, 0x6f, 0xd6, 0x8c, 0x3f, + 0x7e, 0xb3, 0x66, 0x7c, 0xfd, 0xe7, 0xb5, 0x95, 0x63, 0x0b, 0xff, 0xad, 0x7d, 0xf7, 0x1f, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x6f, 0x97, 0x89, 0x1a, 0xd2, 0x1d, 0x00, 0x00, } diff --git a/protos/internal.proto b/protos/internal.proto index f0a8545a..93a1f2c6 100644 --- a/protos/internal.proto +++ b/protos/internal.proto @@ -134,6 +134,7 @@ message ZeroProposal { uint64 maxTxnTs = 5; uint64 maxRaftId = 6; api.TxnContext txn = 7; + string tls = 8; } // MembershipState is used to pack together the current membership state of all the nodes @@ -147,6 +148,7 @@ message MembershipState { uint64 maxTxnTs = 5; uint64 maxRaftId = 6; repeated Member removed = 7; + bytes tlsInfo = 8; } message ConnectionState { @@ -200,7 +202,7 @@ message Proposal { repeated KV kv = 4; MembershipState state = 5; string clean_predicate = 6; // Delete the predicate which was moved to other group. - string key = 7; + string key = 7; } message KVS { diff --git a/worker/groups.go b/worker/groups.go index 80c62c74..493f65bb 100644 --- a/worker/groups.go +++ b/worker/groups.go @@ -39,6 +39,7 @@ type groupi struct { tablets map[string]*intern.Tablet triggerCh chan struct{} // Used to trigger membership sync delPred chan struct{} // Ensures that predicate move doesn't happen when deletion is ongoing. + newkeys chan []byte } var gr *groupi @@ -51,10 +52,10 @@ func groups() *groupi { // and either start or restart RAFT nodes. // This function triggers RAFT nodes to be created, and is the entrace to the RAFT // world from main.go. -func StartRaftNodes(walStore *badger.ManagedDB, bindall bool) { +func StartRaftNodes(walStore *badger.ManagedDB, bindall bool, newkeys chan []byte) { gr = new(groupi) gr.ctx, gr.cancel = context.WithCancel(context.Background()) - + gr.newkeys = newkeys if len(Config.MyAddr) == 0 { Config.MyAddr = fmt.Sprintf("localhost:%d", workerPort()) } else { @@ -236,6 +237,8 @@ func UpdateMembershipState(ctx context.Context) error { return nil } + + func (g *groupi) applyState(state *intern.MembershipState) { x.AssertTrue(state != nil) g.Lock() @@ -247,6 +250,11 @@ func (g *groupi) applyState(state *intern.MembershipState) { return } + if state.TlsInfo != nil { + fmt.Println("got new tls keys", g.newkeys) + g.newkeys <- state.TlsInfo + } + g.state = state // While restarting we fill Node information after retrieving initial state. diff --git a/x/tls_helper.go b/x/tls_helper.go index 89d10140..283fa456 100644 --- a/x/tls_helper.go +++ b/x/tls_helper.go @@ -11,6 +11,7 @@ import ( "crypto/tls" "crypto/x509" "encoding/pem" + "encoding/json" "fmt" "io/ioutil" "strings" @@ -91,53 +92,37 @@ func generateCertPool(certPath string, useSystemCA bool) (*x509.CertPool, error) return pool, nil } -func parseCertificate(required bool, certPath string, certKeyPath string, certKeyPass string) (*tls.Certificate, error) { - if len(certKeyPath) > 0 || len(certPath) > 0 || required { - // Load key - keyFile, err := ioutil.ReadFile(certKeyPath) - if err != nil { - return nil, err - } - - var certKey []byte - if block, _ := pem.Decode(keyFile); block != nil { - if x509.IsEncryptedPEMBlock(block) { - decryptKey, err := x509.DecryptPEMBlock(block, []byte(certKeyPass)) - if err != nil { - return nil, err - } - - privKey, err := x509.ParsePKCS1PrivateKey(decryptKey) - if err != nil { - return nil, err - } - - certKey = pem.EncodeToMemory(&pem.Block{ - Type: "RSA PRIVATE KEY", - Bytes: x509.MarshalPKCS1PrivateKey(privKey), - }) - } else { - certKey = pem.EncodeToMemory(block) - } - } else { - return nil, fmt.Errorf("Invalid Cert Key") - } - - // Load cert - certFile, err := ioutil.ReadFile(certPath) - if err != nil { - return nil, err - } - - // Load certificate, pair cert/key - certificate, err := tls.X509KeyPair(certFile, certKey) - if err != nil { - return nil, fmt.Errorf("Error reading certificate {cert: '%s', key: '%s'}\n%s", certPath, certKeyPath, err) - } - - return &certificate, nil - } - return nil, nil +func parseCertificate(cert []byte, certKey []byte, certKeyPass string) (*tls.Certificate, error) { + if block, _ := pem.Decode(certKey); block != nil { + if true { + decryptKey, err := x509.DecryptPEMBlock(block, []byte(certKeyPass)) + if err != nil { + return nil, err + } + + privKey, err := x509.ParsePKCS1PrivateKey(decryptKey) + if err != nil { + return nil, err + } + + certKey = pem.EncodeToMemory(&pem.Block{ + Type: "RSA PRIVATE KEY", + Bytes: x509.MarshalPKCS1PrivateKey(privKey), + }) + } else { + certKey = pem.EncodeToMemory(block) + } + } else { + return nil, fmt.Errorf("Invalid Cert Key") + } + + // Load certificate, pair cert/key + certificate, err := tls.X509KeyPair(cert, certKey) + if err != nil { + return nil, fmt.Errorf("Error installing certificates", err) + } + + return &certificate, nil } func setupVersion(cfg *tls.Config, minVersion string, maxVersion string) error { @@ -194,27 +179,24 @@ func setupClientAuth(authType string) (tls.ClientAuthType, error) { // configuration provided. If the ConfigType provided in TLSHelperConfig is // TLSServerConfig, it's return a reload function. If any problem is found, an // error is returned -func GenerateTLSConfig(config TLSHelperConfig) (tlsCfg *tls.Config, reloadConfig func(), err error) { - wrapper := new(wrapperTLSConfig) + +func GenerateTLSConfigServer(config TLSHelperConfig) (tlsCfg *tls.Config, reloadConfig func([]byte), err error) { + wrapper := new(wrapperTLSConfig) tlsCfg = new(tls.Config) wrapper.config = tlsCfg + wrapper.cert = &wrapperCert{} + tlsCfg.GetCertificate = wrapper.getCertificate + tlsCfg.VerifyPeerCertificate = wrapper.verifyPeerCertificate + wrapper.helperConfig = &config + return wrapper.config, wrapper.reloadConfigJson, nil +} - cert, err := parseCertificate(config.CertRequired, config.Cert, config.Key, config.KeyPassphrase) - if err != nil { - return nil, nil, err - } - - if cert != nil { - switch config.ConfigType { - case TLSClientConfig: - tlsCfg.Certificates = []tls.Certificate{*cert} - tlsCfg.BuildNameToCertificate() - case TLSServerConfig: - wrapper.cert = &wrapperCert{cert: cert} - tlsCfg.GetCertificate = wrapper.getCertificate - tlsCfg.VerifyPeerCertificate = wrapper.verifyPeerCertificate - } - } +// different one for server and client +func GenerateTLSConfig(config TLSHelperConfig) (tlsCfg *tls.Config, reloadConfig func([]byte), err error) { + wrapper := new(wrapperTLSConfig) + tlsCfg = new(tls.Config) + wrapper.config = tlsCfg + wrapper.reloadConfig() auth, err := setupClientAuth(config.ClientAuth) if err != nil { @@ -241,6 +223,7 @@ func GenerateTLSConfig(config TLSHelperConfig) (tlsCfg *tls.Config, reloadConfig } // Configure Root CAs + // xxx - should never use the system certs if len(config.RootCACerts) > 0 || config.UseSystemRootCACerts { pool, err := generateCertPool(config.RootCACerts, config.UseSystemRootCACerts) if err != nil { @@ -272,7 +255,7 @@ func GenerateTLSConfig(config TLSHelperConfig) (tlsCfg *tls.Config, reloadConfig } wrapper.helperConfig = &config - return tlsCfg, wrapper.reloadConfig, nil + return tlsCfg, wrapper.reloadConfigJson, nil } type wrapperCert struct { @@ -346,28 +329,76 @@ func (c *wrapperTLSConfig) verifyPeerCertificate(rawCerts [][]byte, verifiedChai return nil } -func (c *wrapperTLSConfig) reloadConfig() { - c.mutex.Lock() - defer c.mutex.Unlock() +// move me please, need to be visible by the populator +type TlsInfo struct { + Cert string `json:"cert"` + CertKey string `json:"certKey"` + CertKeyPassPhrase string `json:"certKeyPassPhrase"` +} - // Loading new certificate - cert, err := parseCertificate(c.helperConfig.CertRequired, c.helperConfig.Cert, c.helperConfig.Key, c.helperConfig.KeyPassphrase) - if err != nil { - Printf("Error reloading certificate. %s\nUsing current certificate\n", err.Error()) - } else if cert != nil { - if c.helperConfig.ConfigType == TLSServerConfig { +func (c *wrapperTLSConfig) reloadConfigJson(jsonKeys []byte) { + c.mutex.Lock() + defer c.mutex.Unlock() + ti := &TlsInfo{} + err := json.Unmarshal(jsonKeys, ti) + + if err != nil { + fmt.Println("json key unmarshal error", string(jsonKeys), ti, c.helperConfig) + } + + if c.helperConfig.CertRequired { + cert, err := parseCertificate( []byte(ti.Cert), []byte(ti.CertKey), ti.CertKeyPassPhrase) + if err != nil { + Printf("Error reloading certificate. %s\nUsing current certificate\n", err.Error()) + } else if cert != nil { c.cert.Lock() c.cert.cert = cert c.cert.Unlock() } - } + } +} - // Configure Client CAs - if len(c.helperConfig.ClientCACerts) > 0 || c.helperConfig.UseSystemClientCACerts { - pool, err := generateCertPool(c.helperConfig.ClientCACerts, c.helperConfig.UseSystemClientCACerts) - if err != nil { - Printf("Error reloading CAs. %s\nUsing current Client CAs\n", err.Error()) - } else { +func (c *wrapperTLSConfig) reloadConfig() { + c.mutex.Lock() + defer c.mutex.Unlock() + + if c.helperConfig.CertRequired { + // Load cert + certText, err := ioutil.ReadFile(c.helperConfig.Cert) + if err != nil { + // log + fmt.Println("couldn't load cert file") + } + + // Load private key associated with cert + key, err := ioutil.ReadFile(c.helperConfig.Key) + if err != nil { + fmt.Println("couldn't load key file") + } + + // Loading new certificate + cert, err := parseCertificate(certText, key, c.helperConfig.KeyPassphrase) + if err != nil { + Printf("Error reloading certificate. %s\nUsing current certificate\n", err.Error()) + } else if cert != nil { + if c.helperConfig.ConfigType == TLSServerConfig { + c.cert.Lock() + c.cert.cert = cert + c.cert.Unlock() + } + } + if c.helperConfig.ConfigType == TLSClientConfig { + c.config.Certificates = []tls.Certificate{*cert} + c.config.BuildNameToCertificate() + } + } + + // Configure Client CAs - is this server or client? + if len(c.helperConfig.ClientCACerts) > 0 || c.helperConfig.UseSystemClientCACerts { + pool, err := generateCertPool(c.helperConfig.ClientCACerts, c.helperConfig.UseSystemClientCACerts) + if err != nil { + Printf("Error reloading CAs. %s\nUsing current Client CAs\n", err.Error()) + } else { c.clientCAPool.Lock() c.clientCAPool.pool = pool c.clientCAPool.Unlock() -- GitLab