mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-10-31 14:27:40 +00:00 
			
		
		
		
	v1.4.0 (#86)
This commit is contained in:
		
							parent
							
								
									ae7c14fc2a
								
							
						
					
					
						commit
						7ad553fd62
					
				| @ -868,29 +868,30 @@ func logoVersion(width int) string { | |||||||
| 		out += " ###########                     ##############                      ##########&\n" | 		out += " ###########                     ##############                      ##########&\n" | ||||||
| 		out += " ##########                      ##############                       ##########\n" | 		out += " ##########                      ##############                       ##########\n" | ||||||
| 		out += "%##########                        ##########                         ##########\n" | 		out += "%##########                        ##########                         ##########\n" | ||||||
| 		out += "##########&                                                           ##########\n" | 		out += "##########                                                            ##########\n" | ||||||
| 		out += "##########                                                            &#########\n" | 		out += "##########                                                            &#########\n" | ||||||
| 		out += "##########&                   #######      #######                    ##########\n" | 		out += "##########                    #######      #######                    ##########\n" | ||||||
| 		out += " ##########                &#########################                 ##########\n" | 		out += "%#########                 &#########################                 ##########\n" | ||||||
| 		out += " ##########              ##############% ##############              &##########\n" | 		out += " ##########              ##############% ##############              &##########\n" | ||||||
| 		out += " %##########          &##############      ###############           ##########\n" | 		out += " '         '          &##############      ###############           ##########\n" | ||||||
| 		out += "  ###########       ###############           ##############%       ###########\n" | 		out += "  '         '       ###############           ##############%       ###########\n" | ||||||
| 		out += "   ###########&       ##########                ###############       ########\n" | 		out += "   '         '.       ##########                ###############       ########\n" | ||||||
| 		out += "    ############         #####                     ##############%       ####\n" | 		out += "    '.         .         #####                     ##############%       ####\n" | ||||||
| 		out += "      ############                                   ###############\n" | 		out += "      '         '.                                   ###############\n" | ||||||
| 		out += "       ##############                                   ##############%\n" | 		out += "       '.         '..                                   ##############%\n" | ||||||
| 		out += "         ###############                                  ###############\n" | 		out += "         '.          '-.                                  ###############\n" | ||||||
| 		out += "           #################&                                ##############%\n" | 		out += "           '-.          ''-..                      ..        ##############%\n" | ||||||
| 		out += "              #########################&&&#############        ###############\n" | 		out += "              '-.            ''---............----'  '.        ###############\n" | ||||||
| 		out += "                 ########################################%        ############\n" | 		out += "                 '-..                                  '.        ############\n" | ||||||
| 		out += "                     #######################################        ########\n" | 		out += "                     ''-..                             ..'         ########\n" | ||||||
| 		out += "                          #############################                ##\n" | 		out += "                          ''---..              ...---''               ##\n" | ||||||
|  | 		out += "                                 ''----------''\n" | ||||||
| 		out += " \n" | 		out += " \n" | ||||||
| 		out += "                         Quilibrium Node - v1.3.0 – Dawn\n" | 		out += "                        Quilibrium Node - v1.4.0 – Sunset\n" | ||||||
| 		out += " \n" | 		out += " \n" | ||||||
| 		out += "                                   DB Console\n" | 		out += "                                   DB Console\n" | ||||||
| 	} else { | 	} else { | ||||||
| 		out = "Quilibrium Node - v1.3.0 – Dawn - DB Console\n" | 		out = "Quilibrium Node - v1.4.0 – Sunset - DB Console\n" | ||||||
| 	} | 	} | ||||||
| 	return out | 	return out | ||||||
| } | } | ||||||
|  | |||||||
| @ -14,6 +14,7 @@ import ( | |||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony" | 	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/keys" | 	"source.quilibrium.com/quilibrium/monorepo/node/keys" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/p2p" | 	"source.quilibrium.com/quilibrium/monorepo/node/p2p" | ||||||
|  | 	"source.quilibrium.com/quilibrium/monorepo/node/protobufs" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/store" | 	"source.quilibrium.com/quilibrium/monorepo/node/store" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| @ -72,7 +73,7 @@ var consensusSet = wire.NewSet( | |||||||
| 	), | 	), | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func NewNode(*config.Config) (*Node, error) { | func NewNode(*config.Config, *protobufs.SelfTestReport) (*Node, error) { | ||||||
| 	panic(wire.Build( | 	panic(wire.Build( | ||||||
| 		loggerSet, | 		loggerSet, | ||||||
| 		keyManagerSet, | 		keyManagerSet, | ||||||
|  | |||||||
| @ -17,12 +17,13 @@ import ( | |||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony" | 	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/keys" | 	"source.quilibrium.com/quilibrium/monorepo/node/keys" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/p2p" | 	"source.quilibrium.com/quilibrium/monorepo/node/p2p" | ||||||
|  | 	"source.quilibrium.com/quilibrium/monorepo/node/protobufs" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/store" | 	"source.quilibrium.com/quilibrium/monorepo/node/store" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // Injectors from wire.go:
 | // Injectors from wire.go:
 | ||||||
| 
 | 
 | ||||||
| func NewNode(configConfig *config.Config) (*Node, error) { | func NewNode(configConfig *config.Config, selfTestReport *protobufs.SelfTestReport) (*Node, error) { | ||||||
| 	zapLogger := logger() | 	zapLogger := logger() | ||||||
| 	dbConfig := configConfig.DB | 	dbConfig := configConfig.DB | ||||||
| 	pebbleDB := store.NewPebbleDB(dbConfig) | 	pebbleDB := store.NewPebbleDB(dbConfig) | ||||||
| @ -37,7 +38,7 @@ func NewNode(configConfig *config.Config) (*Node, error) { | |||||||
| 	masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver) | 	masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver) | ||||||
| 	pebbleKeyStore := store.NewPebbleKeyStore(pebbleDB, zapLogger) | 	pebbleKeyStore := store.NewPebbleKeyStore(pebbleDB, zapLogger) | ||||||
| 	ceremonyExecutionEngine := ceremony.NewCeremonyExecutionEngine(zapLogger, engineConfig, fileKeyManager, blossomSub, wesolowskiFrameProver, kzgInclusionProver, pebbleClockStore, masterTimeReel, pebbleKeyStore) | 	ceremonyExecutionEngine := ceremony.NewCeremonyExecutionEngine(zapLogger, engineConfig, fileKeyManager, blossomSub, wesolowskiFrameProver, kzgInclusionProver, pebbleClockStore, masterTimeReel, pebbleKeyStore) | ||||||
| 	masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel) | 	masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel, selfTestReport) | ||||||
| 	node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, ceremonyExecutionEngine, masterClockConsensusEngine) | 	node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, ceremonyExecutionEngine, masterClockConsensusEngine) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
|  | |||||||
| @ -282,6 +282,7 @@ func (e *CeremonyDataClockConsensusEngine) Start() <-chan error { | |||||||
| 
 | 
 | ||||||
| 		if err := e.pubSub.StartDirectChannelListener( | 		if err := e.pubSub.StartDirectChannelListener( | ||||||
| 			e.pubSub.GetPeerID(), | 			e.pubSub.GetPeerID(), | ||||||
|  | 			"", | ||||||
| 			server, | 			server, | ||||||
| 		); err != nil { | 		); err != nil { | ||||||
| 			panic(err) | 			panic(err) | ||||||
|  | |||||||
| @ -185,7 +185,7 @@ func (e *CeremonyDataClockConsensusEngine) sync( | |||||||
| ) (*protobufs.ClockFrame, error) { | ) (*protobufs.ClockFrame, error) { | ||||||
| 	latest := currentLatest | 	latest := currentLatest | ||||||
| 	e.logger.Info("polling peer for new frames", zap.Binary("peer_id", peerId)) | 	e.logger.Info("polling peer for new frames", zap.Binary("peer_id", peerId)) | ||||||
| 	cc, err := e.pubSub.GetDirectChannel(peerId) | 	cc, err := e.pubSub.GetDirectChannel(peerId, "") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		e.logger.Error( | 		e.logger.Error( | ||||||
| 			"could not establish direct channel", | 			"could not establish direct channel", | ||||||
|  | |||||||
| @ -6,6 +6,7 @@ import ( | |||||||
| 	"io" | 	"io" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
|  | 	"github.com/mr-tron/base58" | ||||||
| 	"github.com/pkg/errors" | 	"github.com/pkg/errors" | ||||||
| 	"go.uber.org/zap" | 	"go.uber.org/zap" | ||||||
| 	"google.golang.org/grpc" | 	"google.golang.org/grpc" | ||||||
| @ -645,6 +646,7 @@ func (e *svr) GetPublicChannel( | |||||||
| 
 | 
 | ||||||
| func (e *CeremonyDataClockConsensusEngine) GetPublicChannelForProvingKey( | func (e *CeremonyDataClockConsensusEngine) GetPublicChannelForProvingKey( | ||||||
| 	initiator bool, | 	initiator bool, | ||||||
|  | 	peerID []byte, | ||||||
| 	provingKey []byte, | 	provingKey []byte, | ||||||
| ) (p2p.PublicChannelClient, error) { | ) (p2p.PublicChannelClient, error) { | ||||||
| 	if initiator { | 	if initiator { | ||||||
| @ -664,7 +666,8 @@ func (e *CeremonyDataClockConsensusEngine) GetPublicChannelForProvingKey( | |||||||
| 			protobufs.RegisterCeremonyServiceServer(server, s) | 			protobufs.RegisterCeremonyServiceServer(server, s) | ||||||
| 
 | 
 | ||||||
| 			if err := e.pubSub.StartDirectChannelListener( | 			if err := e.pubSub.StartDirectChannelListener( | ||||||
| 				provingKey, | 				peerID, | ||||||
|  | 				base58.Encode(provingKey), | ||||||
| 				server, | 				server, | ||||||
| 			); err != nil { | 			); err != nil { | ||||||
| 				e.logger.Error( | 				e.logger.Error( | ||||||
| @ -684,7 +687,7 @@ func (e *CeremonyDataClockConsensusEngine) GetPublicChannelForProvingKey( | |||||||
| 			) | 			) | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		cc, err := e.pubSub.GetDirectChannel(provingKey) | 		cc, err := e.pubSub.GetDirectChannel(peerID, base58.Encode(provingKey)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			e.logger.Error( | 			e.logger.Error( | ||||||
| 				"could not get public channel for proving key", | 				"could not get public channel for proving key", | ||||||
|  | |||||||
| @ -51,13 +51,13 @@ type DataConsensusEngine interface { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func GetMinimumVersionCutoff() time.Time { | func GetMinimumVersionCutoff() time.Time { | ||||||
| 	return time.Date(2024, time.February, 28, 7, 0, 0, 0, time.UTC) | 	return time.Date(2024, time.March, 1, 7, 0, 0, 0, time.UTC) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func GetMinimumVersion() []byte { | func GetMinimumVersion() []byte { | ||||||
| 	return []byte{0x01, 0x03, 0x00} | 	return []byte{0x01, 0x04, 0x00} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func GetVersion() []byte { | func GetVersion() []byte { | ||||||
| 	return []byte{0x01, 0x03, 0x00} | 	return []byte{0x01, 0x04, 0x00} | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,9 +1,15 @@ | |||||||
| package master | package master | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"context" | ||||||
|  | 	"crypto/rand" | ||||||
|  | 	"encoding/binary" | ||||||
| 	"strings" | 	"strings" | ||||||
|  | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"github.com/iden3/go-iden3-crypto/poseidon" | 	"github.com/iden3/go-iden3-crypto/poseidon" | ||||||
|  | 	"github.com/mr-tron/base58" | ||||||
| 	"github.com/pkg/errors" | 	"github.com/pkg/errors" | ||||||
| 	"go.uber.org/zap" | 	"go.uber.org/zap" | ||||||
| 	"golang.org/x/sync/errgroup" | 	"golang.org/x/sync/errgroup" | ||||||
| @ -76,6 +82,13 @@ func (e *MasterClockConsensusEngine) handleMessage(message *pb.Message) error { | |||||||
| 		); err != nil { | 		); err != nil { | ||||||
| 			return errors.Wrap(err, "handle message") | 			return errors.Wrap(err, "handle message") | ||||||
| 		} | 		} | ||||||
|  | 	case protobufs.SelfTestReportType: | ||||||
|  | 		if err := e.handleSelfTestReport( | ||||||
|  | 			message.From, | ||||||
|  | 			any, | ||||||
|  | 		); err != nil { | ||||||
|  | 			return errors.Wrap(err, "handle message") | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return nil | 	return nil | ||||||
| @ -119,6 +132,154 @@ func (e *MasterClockConsensusEngine) handleClockFrameData( | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (e *MasterClockConsensusEngine) handleSelfTestReport( | ||||||
|  | 	peerID []byte, | ||||||
|  | 	any *anypb.Any, | ||||||
|  | ) error { | ||||||
|  | 	if bytes.Equal(peerID, e.pubSub.GetPeerID()) { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	report := &protobufs.SelfTestReport{} | ||||||
|  | 	if err := any.UnmarshalTo(report); err != nil { | ||||||
|  | 		return errors.Wrap(err, "handle self test report") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	e.peerMapMx.Lock() | ||||||
|  | 	if _, ok := e.peerMap[string(peerID)]; !ok { | ||||||
|  | 		e.peerMapMx.Unlock() | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 	e.peerMap[string(peerID)] = report | ||||||
|  | 	e.peerMapMx.Unlock() | ||||||
|  | 
 | ||||||
|  | 	memory := binary.BigEndian.Uint64(report.Memory) | ||||||
|  | 	e.logger.Info( | ||||||
|  | 		"received self test report", | ||||||
|  | 		zap.String("peer_id", base58.Encode(peerID)), | ||||||
|  | 		zap.Uint32("difficulty", report.Difficulty), | ||||||
|  | 		zap.Int64("difficulty_metric", report.DifficultyMetric), | ||||||
|  | 		zap.Int64("commit_16_metric", report.Commit_16Metric), | ||||||
|  | 		zap.Int64("commit_128_metric", report.Commit_128Metric), | ||||||
|  | 		zap.Int64("commit_1024_metric", report.Commit_1024Metric), | ||||||
|  | 		zap.Int64("commit_65536_metric", report.Commit_65536Metric), | ||||||
|  | 		zap.Int64("proof_16_metric", report.Proof_16Metric), | ||||||
|  | 		zap.Int64("proof_128_metric", report.Proof_128Metric), | ||||||
|  | 		zap.Int64("proof_1024_metric", report.Proof_1024Metric), | ||||||
|  | 		zap.Int64("proof_65536_metric", report.Proof_65536Metric), | ||||||
|  | 		zap.Uint32("cores", report.Cores), | ||||||
|  | 		zap.Uint64("memory", memory), | ||||||
|  | 		zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)), | ||||||
|  | 	) | ||||||
|  | 
 | ||||||
|  | 	if report.Cores < 3 || memory < 16000000000 { | ||||||
|  | 		e.logger.Info( | ||||||
|  | 			"peer reported invalid configuration", | ||||||
|  | 			zap.String("peer_id", base58.Encode(peerID)), | ||||||
|  | 			zap.Uint32("difficulty", report.Difficulty), | ||||||
|  | 			zap.Int64("difficulty_metric", report.DifficultyMetric), | ||||||
|  | 			zap.Int64("commit_16_metric", report.Commit_16Metric), | ||||||
|  | 			zap.Int64("commit_128_metric", report.Commit_128Metric), | ||||||
|  | 			zap.Int64("commit_1024_metric", report.Commit_1024Metric), | ||||||
|  | 			zap.Int64("commit_65536_metric", report.Commit_65536Metric), | ||||||
|  | 			zap.Int64("proof_16_metric", report.Proof_16Metric), | ||||||
|  | 			zap.Int64("proof_128_metric", report.Proof_128Metric), | ||||||
|  | 			zap.Int64("proof_1024_metric", report.Proof_1024Metric), | ||||||
|  | 			zap.Int64("proof_65536_metric", report.Proof_65536Metric), | ||||||
|  | 			zap.Uint32("cores", report.Cores), | ||||||
|  | 			zap.Uint64("memory", memory), | ||||||
|  | 			zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)), | ||||||
|  | 		) | ||||||
|  | 
 | ||||||
|  | 		// tag: dusk – nuke this peer for now
 | ||||||
|  | 		e.pubSub.SetPeerScore(peerID, -1000) | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	cc, err := e.pubSub.GetDirectChannel(peerID, "validation") | ||||||
|  | 	if err != nil { | ||||||
|  | 		e.logger.Error( | ||||||
|  | 			"could not connect for validation", | ||||||
|  | 			zap.String("peer_id", base58.Encode(peerID)), | ||||||
|  | 			zap.Uint32("difficulty", report.Difficulty), | ||||||
|  | 			zap.Int64("difficulty_metric", report.DifficultyMetric), | ||||||
|  | 			zap.Int64("commit_16_metric", report.Commit_16Metric), | ||||||
|  | 			zap.Int64("commit_128_metric", report.Commit_128Metric), | ||||||
|  | 			zap.Int64("commit_1024_metric", report.Commit_1024Metric), | ||||||
|  | 			zap.Int64("commit_65536_metric", report.Commit_65536Metric), | ||||||
|  | 			zap.Int64("proof_16_metric", report.Proof_16Metric), | ||||||
|  | 			zap.Int64("proof_128_metric", report.Proof_128Metric), | ||||||
|  | 			zap.Int64("proof_1024_metric", report.Proof_1024Metric), | ||||||
|  | 			zap.Int64("proof_65536_metric", report.Proof_65536Metric), | ||||||
|  | 			zap.Uint32("cores", report.Cores), | ||||||
|  | 			zap.Uint64("memory", memory), | ||||||
|  | 			zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)), | ||||||
|  | 		) | ||||||
|  | 		return errors.Wrap(err, "handle self test report") | ||||||
|  | 	} | ||||||
|  | 	client := protobufs.NewValidationServiceClient(cc) | ||||||
|  | 	verification := make([]byte, 1048576) | ||||||
|  | 	rand.Read(verification) | ||||||
|  | 	start := time.Now().UnixMilli() | ||||||
|  | 	validation, err := client.PerformValidation( | ||||||
|  | 		context.Background(), | ||||||
|  | 		&protobufs.ValidationMessage{ | ||||||
|  | 			Validation: verification, | ||||||
|  | 		}, | ||||||
|  | 	) | ||||||
|  | 	end := time.Now().UnixMilli() | ||||||
|  | 	if err != nil { | ||||||
|  | 		cc.Close() | ||||||
|  | 		return errors.Wrap(err, "handle self test report") | ||||||
|  | 	} | ||||||
|  | 	cc.Close() | ||||||
|  | 
 | ||||||
|  | 	if !bytes.Equal(verification, validation.Validation) { | ||||||
|  | 		e.logger.Error( | ||||||
|  | 			"provided invalid verification", | ||||||
|  | 			zap.String("peer_id", base58.Encode(peerID)), | ||||||
|  | 			zap.Uint32("difficulty", report.Difficulty), | ||||||
|  | 			zap.Int64("difficulty_metric", report.DifficultyMetric), | ||||||
|  | 			zap.Int64("commit_16_metric", report.Commit_16Metric), | ||||||
|  | 			zap.Int64("commit_128_metric", report.Commit_128Metric), | ||||||
|  | 			zap.Int64("commit_1024_metric", report.Commit_1024Metric), | ||||||
|  | 			zap.Int64("commit_65536_metric", report.Commit_65536Metric), | ||||||
|  | 			zap.Int64("proof_16_metric", report.Proof_16Metric), | ||||||
|  | 			zap.Int64("proof_128_metric", report.Proof_128Metric), | ||||||
|  | 			zap.Int64("proof_1024_metric", report.Proof_1024Metric), | ||||||
|  | 			zap.Int64("proof_65536_metric", report.Proof_65536Metric), | ||||||
|  | 			zap.Uint32("cores", report.Cores), | ||||||
|  | 			zap.Uint64("memory", memory), | ||||||
|  | 			zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)), | ||||||
|  | 		) | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if end-start > 2000 { | ||||||
|  | 		e.logger.Error( | ||||||
|  | 			"slow bandwidth, scoring out", | ||||||
|  | 			zap.String("peer_id", base58.Encode(peerID)), | ||||||
|  | 			zap.Uint32("difficulty", report.Difficulty), | ||||||
|  | 			zap.Int64("difficulty_metric", report.DifficultyMetric), | ||||||
|  | 			zap.Int64("commit_16_metric", report.Commit_16Metric), | ||||||
|  | 			zap.Int64("commit_128_metric", report.Commit_128Metric), | ||||||
|  | 			zap.Int64("commit_1024_metric", report.Commit_1024Metric), | ||||||
|  | 			zap.Int64("commit_65536_metric", report.Commit_65536Metric), | ||||||
|  | 			zap.Int64("proof_16_metric", report.Proof_16Metric), | ||||||
|  | 			zap.Int64("proof_128_metric", report.Proof_128Metric), | ||||||
|  | 			zap.Int64("proof_1024_metric", report.Proof_1024Metric), | ||||||
|  | 			zap.Int64("proof_65536_metric", report.Proof_65536Metric), | ||||||
|  | 			zap.Uint32("cores", report.Cores), | ||||||
|  | 			zap.Uint64("memory", memory), | ||||||
|  | 			zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)), | ||||||
|  | 		) | ||||||
|  | 		// tag: dusk – nuke this peer for now
 | ||||||
|  | 		e.pubSub.SetPeerScore(peerID, -1000) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (e *MasterClockConsensusEngine) publishProof( | func (e *MasterClockConsensusEngine) publishProof( | ||||||
| 	frame *protobufs.ClockFrame, | 	frame *protobufs.ClockFrame, | ||||||
| ) error { | ) error { | ||||||
|  | |||||||
| @ -1,12 +1,14 @@ | |||||||
| package master | package master | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"context" | ||||||
| 	"encoding/hex" | 	"encoding/hex" | ||||||
| 	"sync" | 	"sync" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"github.com/pkg/errors" | 	"github.com/pkg/errors" | ||||||
| 	"go.uber.org/zap" | 	"go.uber.org/zap" | ||||||
|  | 	"google.golang.org/grpc" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/config" | 	"source.quilibrium.com/quilibrium/monorepo/node/config" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/consensus" | 	"source.quilibrium.com/quilibrium/monorepo/node/consensus" | ||||||
| 	qtime "source.quilibrium.com/quilibrium/monorepo/node/consensus/time" | 	qtime "source.quilibrium.com/quilibrium/monorepo/node/consensus/time" | ||||||
| @ -27,6 +29,8 @@ const ( | |||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| type MasterClockConsensusEngine struct { | type MasterClockConsensusEngine struct { | ||||||
|  | 	*protobufs.UnimplementedValidationServiceServer | ||||||
|  | 
 | ||||||
| 	difficulty          uint32 | 	difficulty          uint32 | ||||||
| 	logger              *zap.Logger | 	logger              *zap.Logger | ||||||
| 	state               consensus.EngineState | 	state               consensus.EngineState | ||||||
| @ -48,6 +52,9 @@ type MasterClockConsensusEngine struct { | |||||||
| 	historicFrames   []*protobufs.ClockFrame | 	historicFrames   []*protobufs.ClockFrame | ||||||
| 	clockStore       store.ClockStore | 	clockStore       store.ClockStore | ||||||
| 	masterTimeReel   *qtime.MasterTimeReel | 	masterTimeReel   *qtime.MasterTimeReel | ||||||
|  | 	report           *protobufs.SelfTestReport | ||||||
|  | 	peerMapMx        sync.Mutex | ||||||
|  | 	peerMap          map[string]*protobufs.SelfTestReport | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var _ consensus.ConsensusEngine = (*MasterClockConsensusEngine)(nil) | var _ consensus.ConsensusEngine = (*MasterClockConsensusEngine)(nil) | ||||||
| @ -60,6 +67,7 @@ func NewMasterClockConsensusEngine( | |||||||
| 	pubSub p2p.PubSub, | 	pubSub p2p.PubSub, | ||||||
| 	frameProver crypto.FrameProver, | 	frameProver crypto.FrameProver, | ||||||
| 	masterTimeReel *qtime.MasterTimeReel, | 	masterTimeReel *qtime.MasterTimeReel, | ||||||
|  | 	report *protobufs.SelfTestReport, | ||||||
| ) *MasterClockConsensusEngine { | ) *MasterClockConsensusEngine { | ||||||
| 	if logger == nil { | 	if logger == nil { | ||||||
| 		panic(errors.New("logger is nil")) | 		panic(errors.New("logger is nil")) | ||||||
| @ -104,8 +112,12 @@ func NewMasterClockConsensusEngine( | |||||||
| 		clockStore:          clockStore, | 		clockStore:          clockStore, | ||||||
| 		frameProver:         frameProver, | 		frameProver:         frameProver, | ||||||
| 		masterTimeReel:      masterTimeReel, | 		masterTimeReel:      masterTimeReel, | ||||||
|  | 		report:              report, | ||||||
|  | 		peerMap:             map[string]*protobufs.SelfTestReport{}, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	e.peerMap[string(e.pubSub.GetPeerID())] = report | ||||||
|  | 
 | ||||||
| 	if e.filter, err = hex.DecodeString(engineConfig.Filter); err != nil { | 	if e.filter, err = hex.DecodeString(engineConfig.Filter); err != nil { | ||||||
| 		panic(errors.Wrap(err, "could not parse filter value")) | 		panic(errors.Wrap(err, "could not parse filter value")) | ||||||
| 	} | 	} | ||||||
| @ -141,6 +153,22 @@ func (e *MasterClockConsensusEngine) Start() <-chan error { | |||||||
| 
 | 
 | ||||||
| 	e.state = consensus.EngineStateCollecting | 	e.state = consensus.EngineStateCollecting | ||||||
| 
 | 
 | ||||||
|  | 	go func() { | ||||||
|  | 		server := grpc.NewServer( | ||||||
|  | 			grpc.MaxSendMsgSize(600*1024*1024), | ||||||
|  | 			grpc.MaxRecvMsgSize(600*1024*1024), | ||||||
|  | 		) | ||||||
|  | 		protobufs.RegisterValidationServiceServer(server, e) | ||||||
|  | 
 | ||||||
|  | 		if err := e.pubSub.StartDirectChannelListener( | ||||||
|  | 			e.pubSub.GetPeerID(), | ||||||
|  | 			"validation", | ||||||
|  | 			server, | ||||||
|  | 		); err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 	}() | ||||||
|  | 
 | ||||||
| 	go func() { | 	go func() { | ||||||
| 		for { | 		for { | ||||||
| 			e.logger.Info( | 			e.logger.Info( | ||||||
| @ -152,6 +180,18 @@ func (e *MasterClockConsensusEngine) Start() <-chan error { | |||||||
| 		} | 		} | ||||||
| 	}() | 	}() | ||||||
| 
 | 
 | ||||||
|  | 	go func() { | ||||||
|  | 		for { | ||||||
|  | 			time.Sleep(30 * time.Second) | ||||||
|  | 
 | ||||||
|  | 			e.logger.Info("broadcasting self-test info") | ||||||
|  | 
 | ||||||
|  | 			if err := e.publishMessage(e.filter, e.report); err != nil { | ||||||
|  | 				e.logger.Debug("error publishing message", zap.Error(err)) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}() | ||||||
|  | 
 | ||||||
| 	go func() { | 	go func() { | ||||||
| 		newFrameCh := e.masterTimeReel.NewFrameCh() | 		newFrameCh := e.masterTimeReel.NewFrameCh() | ||||||
| 
 | 
 | ||||||
| @ -197,6 +237,13 @@ func (e *MasterClockConsensusEngine) Start() <-chan error { | |||||||
| 	return errChan | 	return errChan | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (e *MasterClockConsensusEngine) PerformValidation( | ||||||
|  | 	ctx context.Context, | ||||||
|  | 	msg *protobufs.ValidationMessage, | ||||||
|  | ) (*protobufs.ValidationMessage, error) { | ||||||
|  | 	return msg, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (e *MasterClockConsensusEngine) Stop(force bool) <-chan error { | func (e *MasterClockConsensusEngine) Stop(force bool) <-chan error { | ||||||
| 	e.logger.Info("stopping consensus engine") | 	e.logger.Info("stopping consensus engine") | ||||||
| 	e.state = consensus.EngineStateStopping | 	e.state = consensus.EngineStateStopping | ||||||
|  | |||||||
| @ -88,6 +88,7 @@ func TestCeremonyTransitions(t *testing.T) { | |||||||
| 		SignedPreKey: &protobufs.X448PublicKey{ | 		SignedPreKey: &protobufs.X448PublicKey{ | ||||||
| 			KeyValue: spkPub, | 			KeyValue: spkPub, | ||||||
| 		}, | 		}, | ||||||
|  | 		PeerId: []byte{}, | ||||||
| 	} | 	} | ||||||
| 	sig, err := join.SignWithProverKey(proverKey) | 	sig, err := join.SignWithProverKey(proverKey) | ||||||
| 	require.NoError(t, err) | 	require.NoError(t, err) | ||||||
|  | |||||||
| @ -893,6 +893,7 @@ func (e *CeremonyExecutionEngine) announceJoin( | |||||||
| 		SignedPreKey: &protobufs.X448PublicKey{ | 		SignedPreKey: &protobufs.X448PublicKey{ | ||||||
| 			KeyValue: g.Mul(spk).ToAffineCompressed(), | 			KeyValue: g.Mul(spk).ToAffineCompressed(), | ||||||
| 		}, | 		}, | ||||||
|  | 		PeerId: e.pubSub.GetPeerID(), | ||||||
| 	} | 	} | ||||||
| 	sig, err := join.SignWithProverKey(e.provingKey) | 	sig, err := join.SignWithProverKey(e.provingKey) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @ -949,6 +950,7 @@ func (e *CeremonyExecutionEngine) connectToActivePeers( | |||||||
| 
 | 
 | ||||||
| 			client, err := e.clock.GetPublicChannelForProvingKey( | 			client, err := e.clock.GetPublicChannelForProvingKey( | ||||||
| 				i > position, | 				i > position, | ||||||
|  | 				p.PeerId, | ||||||
| 				p.PublicKeySignatureEd448.PublicKey.KeyValue, | 				p.PublicKeySignatureEd448.PublicKey.KeyValue, | ||||||
| 			) | 			) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| @ -1052,6 +1054,7 @@ func (e *CeremonyExecutionEngine) participateRound( | |||||||
| 			)]; !ok { | 			)]; !ok { | ||||||
| 				client, err := e.clock.GetPublicChannelForProvingKey( | 				client, err := e.clock.GetPublicChannelForProvingKey( | ||||||
| 					initiator, | 					initiator, | ||||||
|  | 					p.PeerId, | ||||||
| 					p.PublicKeySignatureEd448.PublicKey.KeyValue, | 					p.PublicKeySignatureEd448.PublicKey.KeyValue, | ||||||
| 				) | 				) | ||||||
| 				if err != nil { | 				if err != nil { | ||||||
|  | |||||||
							
								
								
									
										221
									
								
								node/main.go
									
									
									
									
									
								
							
							
						
						
									
										221
									
								
								node/main.go
									
									
									
									
									
								
							| @ -3,6 +3,8 @@ | |||||||
| package main | package main | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"crypto/rand" | ||||||
|  | 	"encoding/binary" | ||||||
| 	"encoding/hex" | 	"encoding/hex" | ||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| @ -11,17 +13,23 @@ import ( | |||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" | 	"os/signal" | ||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
|  | 	"runtime" | ||||||
| 	"runtime/pprof" | 	"runtime/pprof" | ||||||
| 	"syscall" | 	"syscall" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
|  | 	"go.uber.org/zap" | ||||||
|  | 	"google.golang.org/protobuf/proto" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/protobufs" | 	"source.quilibrium.com/quilibrium/monorepo/node/protobufs" | ||||||
|  | 	"source.quilibrium.com/quilibrium/monorepo/node/utils" | ||||||
| 
 | 
 | ||||||
| 	"github.com/libp2p/go-libp2p/core/crypto" | 	"github.com/libp2p/go-libp2p/core/crypto" | ||||||
| 	"github.com/libp2p/go-libp2p/core/peer" | 	"github.com/libp2p/go-libp2p/core/peer" | ||||||
|  | 	"github.com/pbnjay/memory" | ||||||
| 	"github.com/pkg/errors" | 	"github.com/pkg/errors" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/app" | 	"source.quilibrium.com/quilibrium/monorepo/node/app" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/config" | 	"source.quilibrium.com/quilibrium/monorepo/node/config" | ||||||
|  | 	qcrypto "source.quilibrium.com/quilibrium/monorepo/node/crypto" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/crypto/kzg" | 	"source.quilibrium.com/quilibrium/monorepo/node/crypto/kzg" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony/application" | 	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony/application" | ||||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/rpc" | 	"source.quilibrium.com/quilibrium/monorepo/node/rpc" | ||||||
| @ -157,7 +165,9 @@ func main() { | |||||||
| 	fmt.Println("Loading ceremony state and starting node...") | 	fmt.Println("Loading ceremony state and starting node...") | ||||||
| 	kzg.Init() | 	kzg.Init() | ||||||
| 
 | 
 | ||||||
| 	node, err := app.NewNode(nodeConfig) | 	report := RunSelfTestIfNeeded(*configDirectory, nodeConfig) | ||||||
|  | 
 | ||||||
|  | 	node, err := app.NewNode(nodeConfig, report) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		panic(err) | 		panic(err) | ||||||
| 	} | 	} | ||||||
| @ -190,6 +200,182 @@ func main() { | |||||||
| 	node.Stop() | 	node.Stop() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func RunSelfTestIfNeeded( | ||||||
|  | 	configDir string, | ||||||
|  | 	nodeConfig *config.Config, | ||||||
|  | ) *protobufs.SelfTestReport { | ||||||
|  | 	logger, _ := zap.NewProduction() | ||||||
|  | 
 | ||||||
|  | 	cores := runtime.GOMAXPROCS(0) | ||||||
|  | 	memory := memory.TotalMemory() | ||||||
|  | 	f, err := os.Stat(filepath.Join(configDir, "SELF_TEST")) | ||||||
|  | 
 | ||||||
|  | 	if f != nil { | ||||||
|  | 		if f.Size() != 0 { | ||||||
|  | 			report := &protobufs.SelfTestReport{} | ||||||
|  | 
 | ||||||
|  | 			selfTestBytes, err := os.ReadFile(filepath.Join(configDir, "SELF_TEST")) | ||||||
|  | 			if err != nil { | ||||||
|  | 				panic(err) | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			err = proto.Unmarshal(selfTestBytes, report) | ||||||
|  | 			if err != nil { | ||||||
|  | 				panic(err) | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if report.Cores == uint32(cores) && | ||||||
|  | 				binary.BigEndian.Uint64(report.Memory) == memory { | ||||||
|  | 				return report | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		logger.Info("no self-test report found, generating") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	report := &protobufs.SelfTestReport{} | ||||||
|  | 	difficulty := nodeConfig.Engine.Difficulty | ||||||
|  | 	if difficulty == 0 { | ||||||
|  | 		difficulty = 10000 | ||||||
|  | 	} | ||||||
|  | 	report.Difficulty = difficulty | ||||||
|  | 
 | ||||||
|  | 	frameProver := qcrypto.NewWesolowskiFrameProver(logger) | ||||||
|  | 
 | ||||||
|  | 	logger.Info("generating difficulty metric") | ||||||
|  | 
 | ||||||
|  | 	start := time.Now().UnixMilli() | ||||||
|  | 	_, err = frameProver.ProveMasterClockFrame( | ||||||
|  | 		&protobufs.ClockFrame{ | ||||||
|  | 			Filter:         []byte{0x00}, | ||||||
|  | 			FrameNumber:    0, | ||||||
|  | 			Timestamp:      0, | ||||||
|  | 			Difficulty:     difficulty, | ||||||
|  | 			ParentSelector: []byte{0x00}, | ||||||
|  | 			Input:          make([]byte, 516), | ||||||
|  | 			Output:         make([]byte, 516), | ||||||
|  | 		}, | ||||||
|  | 		0, | ||||||
|  | 		difficulty, | ||||||
|  | 	) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	end := time.Now().UnixMilli() | ||||||
|  | 	report.DifficultyMetric = end - start | ||||||
|  | 
 | ||||||
|  | 	logger.Info("generating entropy for commit/proof sizes") | ||||||
|  | 
 | ||||||
|  | 	p16bytes := make([]byte, 1024) | ||||||
|  | 	p128bytes := make([]byte, 8192) | ||||||
|  | 	p1024bytes := make([]byte, 65536) | ||||||
|  | 	p65536bytes := make([]byte, 4194304) | ||||||
|  | 	rand.Read(p16bytes) | ||||||
|  | 	rand.Read(p128bytes) | ||||||
|  | 	rand.Read(p1024bytes) | ||||||
|  | 	rand.Read(p65536bytes) | ||||||
|  | 	kzgProver := kzg.DefaultKZGProver() | ||||||
|  | 
 | ||||||
|  | 	p16, _ := kzgProver.BytesToPolynomial(p16bytes) | ||||||
|  | 	p128, _ := kzgProver.BytesToPolynomial(p128bytes) | ||||||
|  | 	p1024, _ := kzgProver.BytesToPolynomial(p1024bytes) | ||||||
|  | 	p65536, _ := kzgProver.BytesToPolynomial(p65536bytes) | ||||||
|  | 
 | ||||||
|  | 	logger.Info("generating 16 degree commitment metric") | ||||||
|  | 	start = time.Now().UnixMilli() | ||||||
|  | 	c16, err := kzgProver.Commit(p16) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	end = time.Now().UnixMilli() | ||||||
|  | 	report.Commit_16Metric = end - start | ||||||
|  | 
 | ||||||
|  | 	logger.Info("generating 128 degree commitment metric") | ||||||
|  | 	start = time.Now().UnixMilli() | ||||||
|  | 	c128, err := kzgProver.Commit(p128) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	end = time.Now().UnixMilli() | ||||||
|  | 	report.Commit_128Metric = end - start | ||||||
|  | 
 | ||||||
|  | 	logger.Info("generating 1024 degree commitment metric") | ||||||
|  | 	start = time.Now().UnixMilli() | ||||||
|  | 	c1024, err := kzgProver.Commit(p1024) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	end = time.Now().UnixMilli() | ||||||
|  | 	report.Commit_1024Metric = end - start | ||||||
|  | 
 | ||||||
|  | 	logger.Info("generating 65536 degree commitment metric") | ||||||
|  | 	start = time.Now().UnixMilli() | ||||||
|  | 	c65536, err := kzgProver.Commit(p65536) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	end = time.Now().UnixMilli() | ||||||
|  | 	report.Commit_65536Metric = end - start | ||||||
|  | 
 | ||||||
|  | 	logger.Info("generating 16 degree proof metric") | ||||||
|  | 	start = time.Now().UnixMilli() | ||||||
|  | 	_, err = kzgProver.Prove(p16, c16, p16[0]) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	end = time.Now().UnixMilli() | ||||||
|  | 	report.Proof_16Metric = end - start | ||||||
|  | 
 | ||||||
|  | 	logger.Info("generating 128 degree proof metric") | ||||||
|  | 	start = time.Now().UnixMilli() | ||||||
|  | 	_, err = kzgProver.Prove(p128, c128, p128[0]) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	end = time.Now().UnixMilli() | ||||||
|  | 	report.Proof_128Metric = end - start | ||||||
|  | 
 | ||||||
|  | 	logger.Info("generating 1024 degree proof metric") | ||||||
|  | 	start = time.Now().UnixMilli() | ||||||
|  | 	_, err = kzgProver.Prove(p1024, c1024, p1024[0]) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	end = time.Now().UnixMilli() | ||||||
|  | 	report.Proof_1024Metric = end - start | ||||||
|  | 
 | ||||||
|  | 	logger.Info("generating 65536 degree proof metric") | ||||||
|  | 	start = time.Now().UnixMilli() | ||||||
|  | 	_, err = kzgProver.Prove(p65536, c65536, p65536[0]) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	end = time.Now().UnixMilli() | ||||||
|  | 	report.Proof_65536Metric = end - start | ||||||
|  | 
 | ||||||
|  | 	report.Cores = uint32(cores) | ||||||
|  | 	report.Memory = binary.BigEndian.AppendUint64([]byte{}, memory) | ||||||
|  | 	disk := utils.GetDiskSpace(nodeConfig.DB.Path) | ||||||
|  | 	report.Storage = binary.BigEndian.AppendUint64([]byte{}, disk) | ||||||
|  | 	logger.Info("writing report") | ||||||
|  | 
 | ||||||
|  | 	// tag: dusk – capabilities report in v1.5
 | ||||||
|  | 	reportBytes, err := proto.Marshal(report) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	err = os.WriteFile( | ||||||
|  | 		filepath.Join(configDir, "SELF_TEST"), | ||||||
|  | 		reportBytes, | ||||||
|  | 		fs.FileMode(0600), | ||||||
|  | 	) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return report | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func clearIfTestData(configDir string, nodeConfig *config.Config) { | func clearIfTestData(configDir string, nodeConfig *config.Config) { | ||||||
| 	_, err := os.Stat(filepath.Join(configDir, "RELEASE_VERSION")) | 	_, err := os.Stat(filepath.Join(configDir, "RELEASE_VERSION")) | ||||||
| 	if os.IsNotExist(err) { | 	if os.IsNotExist(err) { | ||||||
| @ -286,26 +472,27 @@ func printLogo() { | |||||||
| 	fmt.Println(" ###########                     ##############                      ##########&") | 	fmt.Println(" ###########                     ##############                      ##########&") | ||||||
| 	fmt.Println(" ##########                      ##############                       ##########") | 	fmt.Println(" ##########                      ##############                       ##########") | ||||||
| 	fmt.Println("%##########                        ##########                         ##########") | 	fmt.Println("%##########                        ##########                         ##########") | ||||||
| 	fmt.Println("##########&                                                           ##########") | 	fmt.Println("##########                                                            ##########") | ||||||
| 	fmt.Println("##########                                                            &#########") | 	fmt.Println("##########                                                            &#########") | ||||||
| 	fmt.Println("##########&                   #######      #######                    ##########") | 	fmt.Println("##########                    #######      #######                    ##########") | ||||||
| 	fmt.Println(" ##########                &#########################                 ##########") | 	fmt.Println("%#########                 &#########################                 ##########") | ||||||
| 	fmt.Println(" ##########              ##############% ##############              &##########") | 	fmt.Println(" ##########              ##############% ##############              &##########") | ||||||
| 	fmt.Println(" %##########          &##############      ###############           ##########") | 	fmt.Println(" '         '          &##############      ###############           ##########") | ||||||
| 	fmt.Println("  ###########       ###############           ##############%       ###########") | 	fmt.Println("  '         '       ###############           ##############%       ###########") | ||||||
| 	fmt.Println("   ###########&       ##########                ###############       ########") | 	fmt.Println("   '         '.       ##########                ###############       ########") | ||||||
| 	fmt.Println("    ############         #####                     ##############%       ####") | 	fmt.Println("    '.         .         #####                     ##############%       ####") | ||||||
| 	fmt.Println("      ############                                   ###############") | 	fmt.Println("      '         '.                                   ###############") | ||||||
| 	fmt.Println("       ##############                                   ##############%") | 	fmt.Println("       '.         '..                                   ##############%") | ||||||
| 	fmt.Println("         ###############                                  ###############") | 	fmt.Println("         '.          '-.                                  ###############") | ||||||
| 	fmt.Println("           #################&                                ##############%") | 	fmt.Println("           '-.          ''-..                      ..        ##############%") | ||||||
| 	fmt.Println("              #########################&&&#############        ###############") | 	fmt.Println("              '-.            ''---............----'  '.        ###############") | ||||||
| 	fmt.Println("                 ########################################%        ############") | 	fmt.Println("                 '-..                                  '.        ############") | ||||||
| 	fmt.Println("                     #######################################        ########") | 	fmt.Println("                     ''-..                             ..'         ########") | ||||||
| 	fmt.Println("                          #############################                ##") | 	fmt.Println("                          ''---..              ...---''               ##") | ||||||
|  | 	fmt.Println("                                 ''----------''") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func printVersion() { | func printVersion() { | ||||||
| 	fmt.Println(" ") | 	fmt.Println(" ") | ||||||
| 	fmt.Println("                         Quilibrium Node - v1.3.0 – Dawn") | 	fmt.Println("                       Quilibrium Node - v1.4.0 – Sunset") | ||||||
| } | } | ||||||
|  | |||||||
| @ -297,7 +297,7 @@ func initDHT( | |||||||
| 	logger.Info("establishing dht") | 	logger.Info("establishing dht") | ||||||
| 	var kademliaDHT *dht.IpfsDHT | 	var kademliaDHT *dht.IpfsDHT | ||||||
| 	var err error | 	var err error | ||||||
| 	if isBootstrapPeer { | 	if !isBootstrapPeer { | ||||||
| 		kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeServer)) | 		kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeServer)) | ||||||
| 	} else { | 	} else { | ||||||
| 		kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeAuto)) | 		kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeAuto)) | ||||||
| @ -328,12 +328,13 @@ func initDHT( | |||||||
| 			go func() { | 			go func() { | ||||||
| 				defer wg.Done() | 				defer wg.Done() | ||||||
| 				if err := h.Connect(ctx, *peerinfo); err != nil { | 				if err := h.Connect(ctx, *peerinfo); err != nil { | ||||||
| 					logger.Debug("error while connecting to dht peer", zap.Error(err)) | 					logger.Info("error while connecting to dht peer", zap.Error(err)) | ||||||
| 				} | 				} else { | ||||||
| 					logger.Info( | 					logger.Info( | ||||||
| 						"connected to peer", | 						"connected to peer", | ||||||
| 						zap.String("peer_id", peerinfo.ID.String()), | 						zap.String("peer_id", peerinfo.ID.String()), | ||||||
| 					) | 					) | ||||||
|  | 				} | ||||||
| 			}() | 			}() | ||||||
| 		} | 		} | ||||||
| 		wg.Wait() | 		wg.Wait() | ||||||
| @ -422,12 +423,13 @@ func (b *BlossomSub) GetMultiaddrOfPeer(peerId []byte) string { | |||||||
| 
 | 
 | ||||||
| func (b *BlossomSub) StartDirectChannelListener( | func (b *BlossomSub) StartDirectChannelListener( | ||||||
| 	key []byte, | 	key []byte, | ||||||
|  | 	purpose string, | ||||||
| 	server *grpc.Server, | 	server *grpc.Server, | ||||||
| ) error { | ) error { | ||||||
| 	bind, err := gostream.Listen( | 	bind, err := gostream.Listen( | ||||||
| 		b.h, | 		b.h, | ||||||
| 		protocol.ID( | 		protocol.ID( | ||||||
| 			"/p2p/direct-channel/"+base58.Encode(key), | 			"/p2p/direct-channel/"+base58.Encode(key)+purpose, | ||||||
| 		), | 		), | ||||||
| 	) | 	) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @ -437,7 +439,7 @@ func (b *BlossomSub) StartDirectChannelListener( | |||||||
| 	return errors.Wrap(server.Serve(bind), "start direct channel listener") | 	return errors.Wrap(server.Serve(bind), "start direct channel listener") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (b *BlossomSub) GetDirectChannel(key []byte) ( | func (b *BlossomSub) GetDirectChannel(key []byte, purpose string) ( | ||||||
| 	dialCtx *grpc.ClientConn, | 	dialCtx *grpc.ClientConn, | ||||||
| 	err error, | 	err error, | ||||||
| ) { | ) { | ||||||
| @ -468,7 +470,7 @@ func (b *BlossomSub) GetDirectChannel(key []byte) ( | |||||||
| 					b.h, | 					b.h, | ||||||
| 					peer.ID(key), | 					peer.ID(key), | ||||||
| 					protocol.ID( | 					protocol.ID( | ||||||
| 						"/p2p/direct-channel/"+peer.ID(id).String(), | 						"/p2p/direct-channel/"+peer.ID(id).String()+purpose, | ||||||
| 					), | 					), | ||||||
| 				) | 				) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -19,9 +19,10 @@ type PubSub interface { | |||||||
| 	GetMultiaddrOfPeer(peerId []byte) string | 	GetMultiaddrOfPeer(peerId []byte) string | ||||||
| 	StartDirectChannelListener( | 	StartDirectChannelListener( | ||||||
| 		key []byte, | 		key []byte, | ||||||
|  | 		purpose string, | ||||||
| 		server *grpc.Server, | 		server *grpc.Server, | ||||||
| 	) error | 	) error | ||||||
| 	GetDirectChannel(peerId []byte) (*grpc.ClientConn, error) | 	GetDirectChannel(peerId []byte, purpose string) (*grpc.ClientConn, error) | ||||||
| 	GetNetworkInfo() *protobufs.NetworkInfoResponse | 	GetNetworkInfo() *protobufs.NetworkInfoResponse | ||||||
| 	SignMessage(msg []byte) ([]byte, error) | 	SignMessage(msg []byte) ([]byte, error) | ||||||
| 	GetPublicKey() []byte | 	GetPublicKey() []byte | ||||||
|  | |||||||
| @ -14,6 +14,7 @@ func (j *CeremonyLobbyJoin) VerifySignature() error { | |||||||
| 	b := binary.BigEndian.AppendUint64([]byte("join"), j.FrameNumber) | 	b := binary.BigEndian.AppendUint64([]byte("join"), j.FrameNumber) | ||||||
| 	b = append(b, j.IdentityKey.KeyValue...) | 	b = append(b, j.IdentityKey.KeyValue...) | ||||||
| 	b = append(b, j.SignedPreKey.KeyValue...) | 	b = append(b, j.SignedPreKey.KeyValue...) | ||||||
|  | 	b = append(b, j.PeerId...) | ||||||
| 
 | 
 | ||||||
| 	if !ed448.Verify( | 	if !ed448.Verify( | ||||||
| 		j.PublicKeySignatureEd448.PublicKey.KeyValue, | 		j.PublicKeySignatureEd448.PublicKey.KeyValue, | ||||||
| @ -33,6 +34,7 @@ func (j *CeremonyLobbyJoin) SignWithProverKey( | |||||||
| 	b := binary.BigEndian.AppendUint64([]byte("join"), j.FrameNumber) | 	b := binary.BigEndian.AppendUint64([]byte("join"), j.FrameNumber) | ||||||
| 	b = append(b, j.IdentityKey.KeyValue...) | 	b = append(b, j.IdentityKey.KeyValue...) | ||||||
| 	b = append(b, j.SignedPreKey.KeyValue...) | 	b = append(b, j.SignedPreKey.KeyValue...) | ||||||
|  | 	b = append(b, j.PeerId...) | ||||||
| 
 | 
 | ||||||
| 	// Non edwards signing variants need support to specify hash, edwards variants
 | 	// Non edwards signing variants need support to specify hash, edwards variants
 | ||||||
| 	// demand Hash(0) because it does SHA512 under the hood.
 | 	// demand Hash(0) because it does SHA512 under the hood.
 | ||||||
|  | |||||||
| @ -571,6 +571,7 @@ type CeremonyLobbyJoin struct { | |||||||
| 	IdentityKey             *X448PublicKey  `protobuf:"bytes,2,opt,name=identity_key,json=identityKey,proto3" json:"identity_key,omitempty"` | 	IdentityKey             *X448PublicKey  `protobuf:"bytes,2,opt,name=identity_key,json=identityKey,proto3" json:"identity_key,omitempty"` | ||||||
| 	SignedPreKey            *X448PublicKey  `protobuf:"bytes,3,opt,name=signed_pre_key,json=signedPreKey,proto3" json:"signed_pre_key,omitempty"` | 	SignedPreKey            *X448PublicKey  `protobuf:"bytes,3,opt,name=signed_pre_key,json=signedPreKey,proto3" json:"signed_pre_key,omitempty"` | ||||||
| 	PublicKeySignatureEd448 *Ed448Signature `protobuf:"bytes,4,opt,name=public_key_signature_ed448,json=publicKeySignatureEd448,proto3" json:"public_key_signature_ed448,omitempty"` | 	PublicKeySignatureEd448 *Ed448Signature `protobuf:"bytes,4,opt,name=public_key_signature_ed448,json=publicKeySignatureEd448,proto3" json:"public_key_signature_ed448,omitempty"` | ||||||
|  | 	PeerId                  []byte          `protobuf:"bytes,5,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (x *CeremonyLobbyJoin) Reset() { | func (x *CeremonyLobbyJoin) Reset() { | ||||||
| @ -633,6 +634,13 @@ func (x *CeremonyLobbyJoin) GetPublicKeySignatureEd448() *Ed448Signature { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (x *CeremonyLobbyJoin) GetPeerId() []byte { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.PeerId | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| type CeremonyLobbyStateTransition struct { | type CeremonyLobbyStateTransition struct { | ||||||
| 	state         protoimpl.MessageState | 	state         protoimpl.MessageState | ||||||
| 	sizeCache     protoimpl.SizeCache | 	sizeCache     protoimpl.SizeCache | ||||||
| @ -1701,7 +1709,7 @@ var file_ceremony_proto_rawDesc = []byte{ | |||||||
| 	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, | 	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, | ||||||
| 	0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, | 	0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, | ||||||
| 	0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, | 	0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, | ||||||
| 	0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0xb5, 0x02, 0x0a, 0x11, 0x43, 0x65, 0x72, | 	0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0xce, 0x02, 0x0a, 0x11, 0x43, 0x65, 0x72, | ||||||
| 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x21, | 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x21, | ||||||
| 	0x0a, 0x0c, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, | 	0x0a, 0x0c, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, | ||||||
| 	0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, | 	0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, | ||||||
| @ -1721,250 +1729,252 @@ var file_ceremony_proto_rawDesc = []byte{ | |||||||
| 	0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x53, 0x69, | 	0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x53, 0x69, | ||||||
| 	0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x17, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, | 	0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x17, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, | ||||||
| 	0x65, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x45, 0x64, 0x34, 0x34, 0x38, | 	0x65, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x45, 0x64, 0x34, 0x34, 0x38, | ||||||
| 	0x22, 0x68, 0x0a, 0x1c, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, | 	0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, | ||||||
| 	0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, | 	0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x1c, 0x43, 0x65, 0x72, | ||||||
| 	0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20, | 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x54, | ||||||
| 	0x03, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x12, 0x2b, 0x0a, | 	0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, | ||||||
| 	0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x70, 0x75, | 	0x65, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, | ||||||
| 	0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, | 	0x70, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, | ||||||
| 	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x11, 0x43, | 	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, | ||||||
| 	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, | 	0x0c, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, | ||||||
| 	0x12, 0x5f, 0x0a, 0x13, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, | 	0x75, 0x74, 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x11, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, | ||||||
| 	0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, | 	0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x6a, 0x6f, 0x69, | ||||||
| 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | 	0x6e, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, | ||||||
| 	0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, | 	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, | ||||||
| 	0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x12, 0x6a, |  | ||||||
| 	0x6f, 0x69, 0x6e, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, |  | ||||||
| 	0x73, 0x12, 0x5e, 0x0a, 0x16, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x70, |  | ||||||
| 	0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, |  | ||||||
| 	0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, |  | ||||||
| 	0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, |  | ||||||
| 	0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x70, 0x72, 0x65, 0x66, |  | ||||||
| 	0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, |  | ||||||
| 	0x73, 0x22, 0xe5, 0x04, 0x0a, 0x17, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x49, 0x6e, |  | ||||||
| 	0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, |  | ||||||
| 	0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, |  | ||||||
| 	0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, |  | ||||||
| 	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, |  | ||||||
| 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, |  | ||||||
| 	0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x12, 0x61, 0x63, 0x74, 0x69, |  | ||||||
| 	0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x81, |  | ||||||
| 	0x01, 0x0a, 0x1f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x70, |  | ||||||
| 	0x72, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, |  | ||||||
| 	0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, |  | ||||||
| 	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, |  | ||||||
| 	0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53, |  | ||||||
| 	0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, |  | ||||||
| 	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, |  | ||||||
| 	0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, |  | ||||||
| 	0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x70, |  | ||||||
| 	0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, |  | ||||||
| 	0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, |  | ||||||
| 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, |  | ||||||
| 	0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, |  | ||||||
| 	0x6d, 0x6f, 0x6e, 0x79, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x65, |  | ||||||
| 	0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x64, 0x72, |  | ||||||
| 	0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, |  | ||||||
| 	0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7a, 0x0a, 0x20, |  | ||||||
| 	0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, |  | ||||||
| 	0x5f, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, |  | ||||||
| 	0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, |  | ||||||
| 	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, | 	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, | ||||||
| 	0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x41, 0x64, 0x76, | 	0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, | ||||||
| 	0x61, 0x6e, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x1d, 0x74, 0x72, 0x61, 0x6e, 0x73, | 	0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x12, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x50, 0x61, | ||||||
| 	0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, | 	0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x16, 0x70, 0x72, | ||||||
| 	0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74, | 	0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, | ||||||
| 	0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, | 	0x61, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, | ||||||
| 	0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, | 	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, | ||||||
| 	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, | 	0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, | ||||||
| 	0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, | 	0x4b, 0x65, 0x79, 0x52, 0x15, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x61, | ||||||
| 	0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x72, | 	0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0xe5, 0x04, 0x0a, 0x17, 0x43, | ||||||
| 	0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x88, 0x05, 0x0a, 0x17, 0x43, 0x65, | 	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, | ||||||
| 	0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x69, 0x6e, 0x67, | 	0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, | ||||||
| 	0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, | 	0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, | ||||||
| 	0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, | 	0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, | ||||||
| 	0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, | 	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, | ||||||
| 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, | 	0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, | ||||||
| 	0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, | 	0x6f, 0x69, 0x6e, 0x52, 0x12, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, | ||||||
| 	0x69, 0x6e, 0x52, 0x12, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, | 	0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x1f, 0x6c, 0x61, 0x74, 0x65, | ||||||
| 	0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x1f, 0x6c, 0x61, 0x74, 0x65, 0x73, | 	0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, | ||||||
| 	0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x74, | 	0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, | ||||||
| 	0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, | 	0x0b, 0x32, 0x3a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, | ||||||
| 	0x32, 0x3a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, |  | ||||||
| 	0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, |  | ||||||
| 	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, |  | ||||||
| 	0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x6c, 0x61, |  | ||||||
| 	0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, |  | ||||||
| 	0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20, 0x64, |  | ||||||
| 	0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, |  | ||||||
| 	0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, |  | ||||||
| 	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, |  | ||||||
| 	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, |  | ||||||
| 	0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x44, 0x72, 0x6f, 0x70, |  | ||||||
| 	0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, |  | ||||||
| 	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, |  | ||||||
| 	0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, |  | ||||||
| 	0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, |  | ||||||
| 	0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, |  | ||||||
| 	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, |  | ||||||
| 	0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, |  | ||||||
| 	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, |  | ||||||
| 	0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, |  | ||||||
| 	0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, |  | ||||||
| 	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, |  | ||||||
| 	0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, |  | ||||||
| 	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x06, 0x73, 0x68, 0x61, |  | ||||||
| 	0x72, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, |  | ||||||
| 	0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x06, |  | ||||||
| 	0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, |  | ||||||
| 	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, |  | ||||||
| 	0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e, |  | ||||||
| 	0x65, 0x78, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, |  | ||||||
| 	0x61, 0x6e, 0x74, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x17, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, |  | ||||||
| 	0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, |  | ||||||
| 	0x12, 0x4f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, |  | ||||||
| 	0x0b, 0x32, 0x35, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, |  | ||||||
| 	0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, | 	0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, | ||||||
| 	0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, | 	0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, | ||||||
| 	0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, | 	0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x6c, | ||||||
| 	0x73, 0x12, 0x5e, 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, | 	0x61, 0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, | ||||||
| 	0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, | 	0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20, | ||||||
| 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | 	0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, | ||||||
| 	0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, | 	0x61, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, | ||||||
| 	0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x11, | 	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, | ||||||
| 	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, | 	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, | ||||||
| 	0x74, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, | 	0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x44, 0x72, 0x6f, | ||||||
| 	0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, | 	0x70, 0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, | ||||||
|  | 	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, | ||||||
|  | 	0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, | ||||||
|  | 	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7a, 0x0a, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, | ||||||
|  | 	0x69, 0x70, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, | ||||||
|  | 	0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, | ||||||
|  | 	0x31, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, | ||||||
|  | 	0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, | ||||||
|  | 	0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x6f, 0x75, | ||||||
|  | 	0x6e, 0x64, 0x52, 0x1d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x6f, | ||||||
|  | 	0x75, 0x6e, 0x64, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, | ||||||
|  | 	0x73, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, | ||||||
|  | 	0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, | ||||||
| 	0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, | 	0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, | ||||||
| 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, | 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, | ||||||
| 	0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78, | 	0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78, | ||||||
| 	0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, | 	0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, | ||||||
| 	0x74, 0x73, 0x22, 0x62, 0x0a, 0x18, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65, | 	0x74, 0x73, 0x22, 0x88, 0x05, 0x0a, 0x17, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x46, | ||||||
| 	0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x12, 0x46, | 	0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, | ||||||
| 	0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, | 	0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, | ||||||
| 	0x0b, 0x32, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, | 	0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, | ||||||
| 	0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, | 	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, | ||||||
| 	0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72, 0x52, 0x08, 0x70, 0x65, | 	0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, | ||||||
| 	0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xfe, 0x01, 0x0a, 0x0c, 0x43, 0x65, 0x72, 0x65, 0x6d, | 	0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x12, 0x61, 0x63, 0x74, | ||||||
| 	0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, | 	0x69, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, | ||||||
| 	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, | 	0x81, 0x01, 0x0a, 0x1f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, | ||||||
| 	0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, | 	0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, | ||||||
| 	0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1b, | 	0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x71, 0x75, 0x69, 0x6c, | ||||||
| 	0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, |  | ||||||
| 	0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, |  | ||||||
| 	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, |  | ||||||
| 	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, |  | ||||||
| 	0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, |  | ||||||
| 	0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, |  | ||||||
| 	0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, |  | ||||||
| 	0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, |  | ||||||
| 	0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, |  | ||||||
| 	0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, |  | ||||||
| 	0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, |  | ||||||
| 	0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0xe0, 0x02, 0x0a, 0x16, 0x43, 0x65, 0x72, 0x65, |  | ||||||
| 	0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, |  | ||||||
| 	0x6e, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, |  | ||||||
| 	0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x66, |  | ||||||
| 	0x72, 0x6f, 0x6d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26, |  | ||||||
| 	0x0a, 0x0f, 0x74, 0x6f, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, |  | ||||||
| 	0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x6f, 0x46, 0x72, 0x61, 0x6d, 0x65, |  | ||||||
| 	0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x16, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, |  | ||||||
| 	0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, |  | ||||||
| 	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, |  | ||||||
| 	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, |  | ||||||
| 	0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x14, 0x74, 0x72, |  | ||||||
| 	0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, |  | ||||||
| 	0x65, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x04, 0x20, 0x03, |  | ||||||
| 	0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, |  | ||||||
| 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, |  | ||||||
| 	0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, |  | ||||||
| 	0x4d, 0x61, 0x70, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x12, 0x4d, 0x0a, 0x08, 0x73, |  | ||||||
| 	0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, |  | ||||||
| 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, |  | ||||||
| 	0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c, |  | ||||||
| 	0x75, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, |  | ||||||
| 	0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x24, 0x43, |  | ||||||
| 	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, |  | ||||||
| 	0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, |  | ||||||
| 	0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, |  | ||||||
| 	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, |  | ||||||
| 	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, |  | ||||||
| 	0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x72, 0x65, |  | ||||||
| 	0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, |  | ||||||
| 	0x67, 0x68, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, |  | ||||||
| 	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, |  | ||||||
| 	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, |  | ||||||
| 	0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, |  | ||||||
| 	0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e, 0x0a, |  | ||||||
| 	0x0c, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xda, 0x01, |  | ||||||
| 	0x0a, 0x25, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, |  | ||||||
| 	0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, |  | ||||||
| 	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, |  | ||||||
| 	0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, |  | ||||||
| 	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, |  | ||||||
| 	0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, |  | ||||||
| 	0x73, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, |  | ||||||
| 	0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, |  | ||||||
| 	0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x71, 0x75, 0x69, 0x6c, |  | ||||||
| 	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, | 	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, | ||||||
| 	0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, | 	0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, | ||||||
| 	0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x00, | 	0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, | ||||||
| 	0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x79, | 	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x65, | ||||||
| 	0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x12, 0x49, | 	0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, | ||||||
| 	0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x4d, 0x61, | 	0x6f, 0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, | ||||||
| 	0x70, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, | 	0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, | ||||||
| 	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x43, 0x6f, | 	0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, | ||||||
| 	0x6d, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, |  | ||||||
| 	0x01, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x56, 0x0a, 0x0b, 0x63, 0x6f, |  | ||||||
| 	0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, |  | ||||||
| 	0x34, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, |  | ||||||
| 	0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, |  | ||||||
| 	0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, |  | ||||||
| 	0x74, 0x73, 0x4d, 0x61, 0x70, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, |  | ||||||
| 	0x74, 0x73, 0x22, 0x3e, 0x0a, 0x14, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x53, |  | ||||||
| 	0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, |  | ||||||
| 	0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, |  | ||||||
| 	0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, |  | ||||||
| 	0x74, 0x61, 0x22, 0x7b, 0x0a, 0x17, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, |  | ||||||
| 	0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x1e, 0x0a, |  | ||||||
| 	0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, |  | ||||||
| 	0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, |  | ||||||
| 	0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, |  | ||||||
| 	0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x67, 0x6d, |  | ||||||
| 	0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, |  | ||||||
| 	0x52, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x32, |  | ||||||
| 	0xb6, 0x03, 0x0a, 0x0f, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53, 0x65, 0x72, 0x76, |  | ||||||
| 	0x69, 0x63, 0x65, 0x12, 0x7e, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, |  | ||||||
| 	0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2c, |  | ||||||
| 	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, | 	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, | ||||||
| 	0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, | 	0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, | ||||||
| 	0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x71, | 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, | ||||||
| 	0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, | 	0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x64, | ||||||
| 	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, | 	0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, | ||||||
|  | 	0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, | ||||||
|  | 	0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, | ||||||
|  | 	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, | ||||||
|  | 	0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, | ||||||
|  | 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, | ||||||
|  | 	0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x4c, | ||||||
|  | 	0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, | ||||||
|  | 	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, | ||||||
|  | 	0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, | ||||||
|  | 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, | ||||||
|  | 	0x68, 0x61, 0x72, 0x65, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x17, | ||||||
|  | 	0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, | ||||||
|  | 	0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, | ||||||
|  | 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | ||||||
|  | 	0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, | ||||||
|  | 	0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x6f, 0x75, 0x6e, | ||||||
|  | 	0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0xab, 0x02, | ||||||
|  | 	0x0a, 0x17, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, | ||||||
|  | 	0x74, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, | ||||||
|  | 	0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x71, 0x75, 0x69, | ||||||
|  | 	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, | ||||||
|  | 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, | ||||||
|  | 	0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, | ||||||
|  | 	0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x12, 0x75, 0x70, | ||||||
|  | 	0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, | ||||||
|  | 	0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, | ||||||
|  | 	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, | ||||||
|  | 	0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, | ||||||
|  | 	0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, | ||||||
|  | 	0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, | ||||||
|  | 	0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, | ||||||
|  | 	0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, | ||||||
|  | 	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, | ||||||
|  | 	0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, | ||||||
|  | 	0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50, | ||||||
|  | 	0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x62, 0x0a, 0x18, 0x43, | ||||||
|  | 	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x41, | ||||||
|  | 	0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, | ||||||
|  | 	0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x71, 0x75, 0x69, | ||||||
|  | 	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, | ||||||
|  | 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, | ||||||
|  | 	0x79, 0x50, 0x65, 0x65, 0x72, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, | ||||||
|  | 	0xfe, 0x01, 0x0a, 0x0c, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72, | ||||||
|  | 	0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, | ||||||
|  | 	0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x75, 0x6c, | ||||||
|  | 	0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x75, | ||||||
|  | 	0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x66, | ||||||
|  | 	0x72, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x46, | ||||||
|  | 	0x72, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, | ||||||
|  | 	0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, | ||||||
|  | 	0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, | ||||||
|  | 	0x01, 0x28, 0x0c, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, | ||||||
|  | 	0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, | ||||||
|  | 	0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, | ||||||
|  | 	0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, | ||||||
|  | 	0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, | ||||||
|  | 	0x61, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, | ||||||
|  | 	0x0c, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, | ||||||
|  | 	0x22, 0xe0, 0x02, 0x0a, 0x16, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, | ||||||
|  | 	0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x66, | ||||||
|  | 	0x72, 0x6f, 0x6d, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, | ||||||
|  | 	0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x66, 0x72, 0x6f, 0x6d, 0x46, 0x72, 0x61, 0x6d, | ||||||
|  | 	0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6f, 0x5f, 0x66, 0x72, | ||||||
|  | 	0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, | ||||||
|  | 	0x52, 0x0d, 0x74, 0x6f, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, | ||||||
|  | 	0x5a, 0x0a, 0x16, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x6f, | ||||||
|  | 	0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, | ||||||
|  | 	0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, | ||||||
|  | 	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, | ||||||
|  | 	0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x14, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, | ||||||
|  | 	0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x70, | ||||||
|  | 	0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x71, 0x75, | ||||||
|  | 	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, | ||||||
|  | 	0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, | ||||||
|  | 	0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x52, 0x06, 0x70, 0x72, | ||||||
|  | 	0x6f, 0x6f, 0x66, 0x73, 0x12, 0x4d, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, | ||||||
|  | 	0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, | ||||||
|  | 	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, | ||||||
|  | 	0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, | ||||||
|  | 	0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, | ||||||
|  | 	0x6e, 0x74, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x24, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, | ||||||
|  | 	0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, | ||||||
|  | 	0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x09, | ||||||
|  | 	0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, | ||||||
|  | 	0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, | ||||||
|  | 	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, | ||||||
|  | 	0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, | ||||||
|  | 	0x00, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x48, 0x0a, 0x07, | ||||||
|  | 	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, | ||||||
|  | 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | ||||||
|  | 	0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, | ||||||
|  | 	0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, | ||||||
|  | 	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, | ||||||
|  | 	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xda, 0x01, 0x0a, 0x25, 0x43, 0x65, 0x72, 0x65, 0x6d, | ||||||
| 	0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, | 	0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, | ||||||
| 	0x63, 0x30, 0x01, 0x12, 0xaa, 0x01, 0x0a, 0x1d, 0x4e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, | 	0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, | ||||||
| 	0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x46, | 	0x12, 0x4e, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, | ||||||
| 	0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x41, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, | 	0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, | ||||||
|  | 	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, | ||||||
|  | 	0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, | ||||||
|  | 	0x67, 0x68, 0x74, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, | ||||||
|  | 	0x12, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, | ||||||
|  | 	0x28, 0x0b, 0x32, 0x33, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, | ||||||
|  | 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, | ||||||
|  | 	0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, | ||||||
|  | 	0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, | ||||||
|  | 	0x6e, 0x73, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x73, 0x73, | ||||||
|  | 	0x61, 0x67, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, | ||||||
|  | 	0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x72, | ||||||
|  | 	0x61, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, | ||||||
|  | 	0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, | ||||||
|  | 	0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x72, | ||||||
|  | 	0x6f, 0x6f, 0x66, 0x12, 0x56, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, | ||||||
|  | 	0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, | ||||||
|  | 	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, | ||||||
|  | 	0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, | ||||||
|  | 	0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x52, 0x0b, | ||||||
|  | 	0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3e, 0x0a, 0x14, 0x49, | ||||||
|  | 	0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, | ||||||
|  | 	0x4d, 0x61, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, | ||||||
|  | 	0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, | ||||||
|  | 	0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7b, 0x0a, 0x17, 0x49, | ||||||
|  | 	0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, | ||||||
|  | 	0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, | ||||||
|  | 	0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, | ||||||
|  | 	0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, | ||||||
|  | 	0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, | ||||||
|  | 	0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, | ||||||
|  | 	0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, | ||||||
|  | 	0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x32, 0xb6, 0x03, 0x0a, 0x0f, 0x43, 0x65, 0x72, | ||||||
|  | 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7e, 0x0a, 0x17, | ||||||
|  | 	0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, | ||||||
|  | 	0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, | ||||||
|  | 	0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, | ||||||
|  | 	0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, | ||||||
|  | 	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, | ||||||
| 	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, | 	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, | ||||||
| 	0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, | 	0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, | ||||||
| 	0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, | 	0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x30, 0x01, 0x12, 0xaa, 0x01, 0x0a, | ||||||
| 	0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x42, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, | 	0x1d, 0x4e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, | ||||||
| 	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, | 	0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x41, | ||||||
| 	0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, | 	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, | ||||||
| 	0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, | 	0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, | ||||||
| 	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x01, 0x30, 0x01, | 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, | ||||||
| 	0x12, 0x76, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x68, 0x61, | 	0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, | ||||||
| 	0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, | 	0x65, 0x1a, 0x42, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, | ||||||
| 	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, | 	0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, | ||||||
| 	0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, | 	0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, | ||||||
| 	0x6c, 0x6f, 0x70, 0x65, 0x1a, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, | 	0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, | ||||||
| 	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, | 	0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x76, 0x0a, 0x10, 0x47, 0x65, 0x74, | ||||||
| 	0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, | 	0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x2e, | ||||||
| 	0x6c, 0x6f, 0x70, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72, | 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | ||||||
| 	0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f, | 	0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, | ||||||
| 	0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e, | 	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x1a, 0x2e, 0x2e, | ||||||
| 	0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, | 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | ||||||
| 	0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | 	0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, | ||||||
|  | 	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x28, 0x01, 0x30, | ||||||
|  | 	0x01, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, | ||||||
|  | 	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, | ||||||
|  | 	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, | ||||||
|  | 	0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, | ||||||
|  | 	0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
|  | |||||||
| @ -92,6 +92,7 @@ message CeremonyLobbyJoin { | |||||||
|   quilibrium.node.keys.pb.X448PublicKey identity_key = 2; |   quilibrium.node.keys.pb.X448PublicKey identity_key = 2; | ||||||
|   quilibrium.node.keys.pb.X448PublicKey signed_pre_key = 3; |   quilibrium.node.keys.pb.X448PublicKey signed_pre_key = 3; | ||||||
|   quilibrium.node.keys.pb.Ed448Signature public_key_signature_ed448 = 4; |   quilibrium.node.keys.pb.Ed448Signature public_key_signature_ed448 = 4; | ||||||
|  |   bytes peer_id = 5; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| message CeremonyLobbyStateTransition { | message CeremonyLobbyStateTransition { | ||||||
|  | |||||||
| @ -974,6 +974,295 @@ func (x *TokenInfoResponse) GetUnconfirmedOwnedTokens() []byte { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | type Capability struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  | 
 | ||||||
|  | 	// A general protocol identifier as a uint32 – this is expected to rarely
 | ||||||
|  | 	// iterate, and should be uniquely identifying both protocol and version.
 | ||||||
|  | 	// Pragmatically speaking, this implies that the least significant byte
 | ||||||
|  | 	// specifies version (which should iterate most minimally), and the three most
 | ||||||
|  | 	// significant bytes should specify protocol. Recipients SHOULD ignore
 | ||||||
|  | 	// messages with incompatible protocol identifiers, but also SHOULD warn on
 | ||||||
|  | 	// identifiers with versions higher than the supported protocol. A large
 | ||||||
|  | 	// number of unsupported protocol messages may indicate spam/some other
 | ||||||
|  | 	// attack, whereas a large number of unsupported protocol versions may
 | ||||||
|  | 	// indicate an out of date client, respective to which side is the maximum of
 | ||||||
|  | 	// the version number.
 | ||||||
|  | 	ProtocolIdentifier uint32 `protobuf:"varint,1,opt,name=protocol_identifier,json=protocolIdentifier,proto3" json:"protocol_identifier,omitempty"` | ||||||
|  | 	// An optional bundle of information specific to the capability – used for
 | ||||||
|  | 	// extensibility in negotiating variations of a protocol – e.g. Triple-Ratchet
 | ||||||
|  | 	// but only for certain curve types.
 | ||||||
|  | 	AdditionalMetadata []byte `protobuf:"bytes,2,opt,name=additional_metadata,json=additionalMetadata,proto3" json:"additional_metadata,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *Capability) Reset() { | ||||||
|  | 	*x = Capability{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_node_proto_msgTypes[17] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *Capability) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (*Capability) ProtoMessage() {} | ||||||
|  | 
 | ||||||
|  | func (x *Capability) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_node_proto_msgTypes[17] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Deprecated: Use Capability.ProtoReflect.Descriptor instead.
 | ||||||
|  | func (*Capability) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_node_proto_rawDescGZIP(), []int{17} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *Capability) GetProtocolIdentifier() uint32 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.ProtocolIdentifier | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *Capability) GetAdditionalMetadata() []byte { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.AdditionalMetadata | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type SelfTestReport struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  | 
 | ||||||
|  | 	// The difficulty the self test was conducted under
 | ||||||
|  | 	Difficulty uint32 `protobuf:"varint,1,opt,name=difficulty,proto3" json:"difficulty,omitempty"` | ||||||
|  | 	// The resulting local time of computing the VDF test under the difficulty
 | ||||||
|  | 	DifficultyMetric int64 `protobuf:"varint,2,opt,name=difficulty_metric,json=difficultyMetric,proto3" json:"difficulty_metric,omitempty"` | ||||||
|  | 	// The resulting local time of computing a KZG commitment for a 16 degree
 | ||||||
|  | 	// polynomial
 | ||||||
|  | 	Commit_16Metric int64 `protobuf:"varint,3,opt,name=commit_16_metric,json=commit16Metric,proto3" json:"commit_16_metric,omitempty"` | ||||||
|  | 	// The resulting local time of computing a KZG commitment for a 128 degree
 | ||||||
|  | 	// polynomial
 | ||||||
|  | 	Commit_128Metric int64 `protobuf:"varint,4,opt,name=commit_128_metric,json=commit128Metric,proto3" json:"commit_128_metric,omitempty"` | ||||||
|  | 	// The resulting local time of computing a KZG commitment for a 1024 degree
 | ||||||
|  | 	// polynomial
 | ||||||
|  | 	Commit_1024Metric int64 `protobuf:"varint,5,opt,name=commit_1024_metric,json=commit1024Metric,proto3" json:"commit_1024_metric,omitempty"` | ||||||
|  | 	// The resulting local time of computing a KZG commitment for a 65536 degree
 | ||||||
|  | 	// polynomial
 | ||||||
|  | 	Commit_65536Metric int64 `protobuf:"varint,6,opt,name=commit_65536_metric,json=commit65536Metric,proto3" json:"commit_65536_metric,omitempty"` | ||||||
|  | 	// The resulting local time of computing a KZG proof for a 16 degree
 | ||||||
|  | 	// polynomial
 | ||||||
|  | 	Proof_16Metric int64 `protobuf:"varint,7,opt,name=proof_16_metric,json=proof16Metric,proto3" json:"proof_16_metric,omitempty"` | ||||||
|  | 	// The resulting local time of computing a KZG proof for a 128 degree
 | ||||||
|  | 	// polynomial
 | ||||||
|  | 	Proof_128Metric int64 `protobuf:"varint,8,opt,name=proof_128_metric,json=proof128Metric,proto3" json:"proof_128_metric,omitempty"` | ||||||
|  | 	// The resulting local time of computing a KZG proof for a 1024 degree
 | ||||||
|  | 	// polynomial
 | ||||||
|  | 	Proof_1024Metric int64 `protobuf:"varint,9,opt,name=proof_1024_metric,json=proof1024Metric,proto3" json:"proof_1024_metric,omitempty"` | ||||||
|  | 	// The resulting local time of computing a KZG proof for a 65536 degree
 | ||||||
|  | 	// polynomial
 | ||||||
|  | 	Proof_65536Metric int64 `protobuf:"varint,10,opt,name=proof_65536_metric,json=proof65536Metric,proto3" json:"proof_65536_metric,omitempty"` | ||||||
|  | 	// The number of reported accessible cores
 | ||||||
|  | 	Cores uint32 `protobuf:"varint,11,opt,name=cores,proto3" json:"cores,omitempty"` | ||||||
|  | 	// The total available memory
 | ||||||
|  | 	Memory []byte `protobuf:"bytes,12,opt,name=memory,proto3" json:"memory,omitempty"` | ||||||
|  | 	// The total available storage
 | ||||||
|  | 	Storage []byte `protobuf:"bytes,13,opt,name=storage,proto3" json:"storage,omitempty"` | ||||||
|  | 	// The list of supported capabilities
 | ||||||
|  | 	Capabilities []*Capability `protobuf:"bytes,14,rep,name=capabilities,proto3" json:"capabilities,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) Reset() { | ||||||
|  | 	*x = SelfTestReport{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_node_proto_msgTypes[18] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (*SelfTestReport) ProtoMessage() {} | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_node_proto_msgTypes[18] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Deprecated: Use SelfTestReport.ProtoReflect.Descriptor instead.
 | ||||||
|  | func (*SelfTestReport) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_node_proto_rawDescGZIP(), []int{18} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetDifficulty() uint32 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Difficulty | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetDifficultyMetric() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.DifficultyMetric | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetCommit_16Metric() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Commit_16Metric | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetCommit_128Metric() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Commit_128Metric | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetCommit_1024Metric() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Commit_1024Metric | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetCommit_65536Metric() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Commit_65536Metric | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetProof_16Metric() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Proof_16Metric | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetProof_128Metric() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Proof_128Metric | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetProof_1024Metric() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Proof_1024Metric | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetProof_65536Metric() int64 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Proof_65536Metric | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetCores() uint32 { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Cores | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetMemory() []byte { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Memory | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetStorage() []byte { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Storage | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *SelfTestReport) GetCapabilities() []*Capability { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Capabilities | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type ValidationMessage struct { | ||||||
|  | 	state         protoimpl.MessageState | ||||||
|  | 	sizeCache     protoimpl.SizeCache | ||||||
|  | 	unknownFields protoimpl.UnknownFields | ||||||
|  | 
 | ||||||
|  | 	Validation []byte `protobuf:"bytes,1,opt,name=validation,proto3" json:"validation,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *ValidationMessage) Reset() { | ||||||
|  | 	*x = ValidationMessage{} | ||||||
|  | 	if protoimpl.UnsafeEnabled { | ||||||
|  | 		mi := &file_node_proto_msgTypes[19] | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		ms.StoreMessageInfo(mi) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *ValidationMessage) String() string { | ||||||
|  | 	return protoimpl.X.MessageStringOf(x) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (*ValidationMessage) ProtoMessage() {} | ||||||
|  | 
 | ||||||
|  | func (x *ValidationMessage) ProtoReflect() protoreflect.Message { | ||||||
|  | 	mi := &file_node_proto_msgTypes[19] | ||||||
|  | 	if protoimpl.UnsafeEnabled && x != nil { | ||||||
|  | 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | ||||||
|  | 		if ms.LoadMessageInfo() == nil { | ||||||
|  | 			ms.StoreMessageInfo(mi) | ||||||
|  | 		} | ||||||
|  | 		return ms | ||||||
|  | 	} | ||||||
|  | 	return mi.MessageOf(x) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Deprecated: Use ValidationMessage.ProtoReflect.Descriptor instead.
 | ||||||
|  | func (*ValidationMessage) Descriptor() ([]byte, []int) { | ||||||
|  | 	return file_node_proto_rawDescGZIP(), []int{19} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *ValidationMessage) GetValidation() []byte { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Validation | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| var File_node_proto protoreflect.FileDescriptor | var File_node_proto protoreflect.FileDescriptor | ||||||
| 
 | 
 | ||||||
| var file_node_proto_rawDesc = []byte{ | var file_node_proto_rawDesc = []byte{ | ||||||
| @ -1097,64 +1386,120 @@ var file_node_proto_rawDesc = []byte{ | |||||||
| 	0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x74, | 	0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x74, | ||||||
| 	0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x75, 0x6e, 0x63, | 	0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x75, 0x6e, 0x63, | ||||||
| 	0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x6b, | 	0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x6b, | ||||||
| 	0x65, 0x6e, 0x73, 0x32, 0x80, 0x05, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, | 	0x65, 0x6e, 0x73, 0x22, 0x6e, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, | ||||||
| 	0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, | 	0x79, 0x12, 0x2f, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5f, 0x69, 0x64, | ||||||
| 	0x12, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, | 	0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, | ||||||
| 	0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, | 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, | ||||||
| 	0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x71, 0x75, | 	0x65, 0x72, 0x12, 0x2f, 0x0a, 0x13, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, | ||||||
| 	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, | 	0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, | ||||||
| 	0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, | 	0x12, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, | ||||||
| 	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, | 	0x61, 0x74, 0x61, 0x22, 0xce, 0x04, 0x0a, 0x0e, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74, | ||||||
| 	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, | 	0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, | ||||||
| 	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, | 	0x75, 0x6c, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, | ||||||
| 	0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, | 	0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, | ||||||
| 	0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, | 	0x75, 0x6c, 0x74, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, | ||||||
| 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x61, | 	0x03, 0x52, 0x10, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x4d, 0x65, 0x74, | ||||||
| 	0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, | 	0x72, 0x69, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x36, | ||||||
| 	0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, | 	0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, | ||||||
|  | 	0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a, | ||||||
|  | 	0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65, 0x74, 0x72, | ||||||
|  | 	0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, | ||||||
|  | 	0x31, 0x32, 0x38, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x6d, | ||||||
|  | 	0x6d, 0x69, 0x74, 0x5f, 0x31, 0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, | ||||||
|  | 	0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x30, 0x32, | ||||||
|  | 	0x34, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x69, | ||||||
|  | 	0x74, 0x5f, 0x36, 0x35, 0x35, 0x33, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x06, | ||||||
|  | 	0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x36, 0x35, 0x35, 0x33, | ||||||
|  | 	0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x6f, 0x66, | ||||||
|  | 	0x5f, 0x31, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, | ||||||
|  | 	0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, | ||||||
|  | 	0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65, 0x74, | ||||||
|  | 	0x72, 0x69, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, | ||||||
|  | 	0x31, 0x32, 0x38, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x6f, | ||||||
|  | 	0x6f, 0x66, 0x5f, 0x31, 0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x09, | ||||||
|  | 	0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x30, 0x32, 0x34, 0x4d, | ||||||
|  | 	0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x36, | ||||||
|  | 	0x35, 0x35, 0x33, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, | ||||||
|  | 	0x03, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x36, 0x35, 0x35, 0x33, 0x36, 0x4d, 0x65, 0x74, | ||||||
|  | 	0x72, 0x69, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, | ||||||
|  | 	0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d, | ||||||
|  | 	0x6f, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, | ||||||
|  | 	0x79, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, | ||||||
|  | 	0x28, 0x0c, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x63, | ||||||
|  | 	0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, | ||||||
|  | 	0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, | ||||||
|  | 	0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x70, 0x61, | ||||||
|  | 	0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, | ||||||
|  | 	0x74, 0x69, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, | ||||||
|  | 	0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x61, 0x6c, | ||||||
|  | 	0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x76, | ||||||
|  | 	0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x80, 0x01, 0x0a, 0x11, 0x56, 0x61, | ||||||
|  | 	0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, | ||||||
|  | 	0x6b, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, | ||||||
|  | 	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, | ||||||
|  | 	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x56, | ||||||
|  | 	0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, | ||||||
|  | 	0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, | ||||||
|  | 	0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, | ||||||
|  | 	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x80, 0x05, 0x0a, | ||||||
|  | 	0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x09, | ||||||
|  | 	0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, | ||||||
|  | 	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, | ||||||
|  | 	0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, | ||||||
|  | 	0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, | ||||||
|  | 	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, | ||||||
|  | 	0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, | ||||||
|  | 	0x0c, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, | ||||||
| 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | ||||||
| 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, | 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, | ||||||
|  | 	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, | ||||||
|  | 	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, | ||||||
|  | 	0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, | ||||||
|  | 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x65, | ||||||
|  | 	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, | ||||||
|  | 	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, | ||||||
|  | 	0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, | ||||||
|  | 	0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, | ||||||
|  | 	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, | ||||||
|  | 	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, | ||||||
|  | 	0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, | ||||||
|  | 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | ||||||
|  | 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, | ||||||
| 	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69, | 	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69, | ||||||
| 	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, | 	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, | ||||||
| 	0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, | 	0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, | ||||||
| 	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, | 	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, | ||||||
| 	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, | 	0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, | ||||||
| 	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, | 	0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, | ||||||
| 	0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, | 	0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, | ||||||
| 	0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, | 	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, | ||||||
| 	0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, | 	0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, | ||||||
| 	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e, | 	0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, | ||||||
| 	0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, | 	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, | ||||||
| 	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, | 	0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, | ||||||
| 	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, |  | ||||||
| 	0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, |  | ||||||
| 	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, |  | ||||||
| 	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, |  | ||||||
| 	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, |  | ||||||
| 	0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, |  | ||||||
| 	0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, |  | ||||||
| 	0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, |  | ||||||
| 	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, |  | ||||||
| 	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, |  | ||||||
| 	0x65, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, |  | ||||||
| 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xcf, 0x01, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x53, |  | ||||||
| 	0x74, 0x61, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, |  | ||||||
| 	0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, |  | ||||||
| 	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, |  | ||||||
| 	0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, |  | ||||||
| 	0x1a, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, |  | ||||||
| 	0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x52, 0x65, |  | ||||||
| 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x50, 0x65, 0x65, |  | ||||||
| 	0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, |  | ||||||
| 	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, | 	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, | ||||||
| 	0x50, 0x75, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, | 	0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, | ||||||
| 	0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, | 	0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, | ||||||
| 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, | 	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x6f, | ||||||
| 	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72, | 	0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, | ||||||
| 	0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f, | 	0xcf, 0x01, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x60, 0x0a, | ||||||
| 	0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e, | 	0x0b, 0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, | ||||||
| 	0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, | 	0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, | ||||||
| 	0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | 	0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, | ||||||
|  | 	0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, | ||||||
|  | 	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, | ||||||
|  | 	0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, | ||||||
|  | 	0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, | ||||||
|  | 	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, | ||||||
|  | 	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x65, 0x65, 0x72, | ||||||
|  | 	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71, 0x75, | ||||||
|  | 	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, | ||||||
|  | 	0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, | ||||||
|  | 	0x65, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, | ||||||
|  | 	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, | ||||||
|  | 	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, | ||||||
|  | 	0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, | ||||||
|  | 	0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
| @ -1169,7 +1514,7 @@ func file_node_proto_rawDescGZIP() []byte { | |||||||
| 	return file_node_proto_rawDescData | 	return file_node_proto_rawDescData | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var file_node_proto_msgTypes = make([]protoimpl.MessageInfo, 17) | var file_node_proto_msgTypes = make([]protoimpl.MessageInfo, 20) | ||||||
| var file_node_proto_goTypes = []interface{}{ | var file_node_proto_goTypes = []interface{}{ | ||||||
| 	(*GetFramesRequest)(nil),      // 0: quilibrium.node.node.pb.GetFramesRequest
 | 	(*GetFramesRequest)(nil),      // 0: quilibrium.node.node.pb.GetFramesRequest
 | ||||||
| 	(*GetFrameInfoRequest)(nil),   // 1: quilibrium.node.node.pb.GetFrameInfoRequest
 | 	(*GetFrameInfoRequest)(nil),   // 1: quilibrium.node.node.pb.GetFrameInfoRequest
 | ||||||
| @ -1188,37 +1533,43 @@ var file_node_proto_goTypes = []interface{}{ | |||||||
| 	(*NetworkInfoResponse)(nil),   // 14: quilibrium.node.node.pb.NetworkInfoResponse
 | 	(*NetworkInfoResponse)(nil),   // 14: quilibrium.node.node.pb.NetworkInfoResponse
 | ||||||
| 	(*GetTokenInfoRequest)(nil),   // 15: quilibrium.node.node.pb.GetTokenInfoRequest
 | 	(*GetTokenInfoRequest)(nil),   // 15: quilibrium.node.node.pb.GetTokenInfoRequest
 | ||||||
| 	(*TokenInfoResponse)(nil),     // 16: quilibrium.node.node.pb.TokenInfoResponse
 | 	(*TokenInfoResponse)(nil),     // 16: quilibrium.node.node.pb.TokenInfoResponse
 | ||||||
| 	(*ClockFrame)(nil),            // 17: quilibrium.node.clock.pb.ClockFrame
 | 	(*Capability)(nil),            // 17: quilibrium.node.node.pb.Capability
 | ||||||
|  | 	(*SelfTestReport)(nil),        // 18: quilibrium.node.node.pb.SelfTestReport
 | ||||||
|  | 	(*ValidationMessage)(nil),     // 19: quilibrium.node.node.pb.ValidationMessage
 | ||||||
|  | 	(*ClockFrame)(nil),            // 20: quilibrium.node.clock.pb.ClockFrame
 | ||||||
| } | } | ||||||
| var file_node_proto_depIdxs = []int32{ | var file_node_proto_depIdxs = []int32{ | ||||||
| 	17, // 0: quilibrium.node.node.pb.FramesResponse.truncated_clock_frames:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 	20, // 0: quilibrium.node.node.pb.FramesResponse.truncated_clock_frames:type_name -> quilibrium.node.clock.pb.ClockFrame
 | ||||||
| 	17, // 1: quilibrium.node.node.pb.FrameInfoResponse.clock_frame:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 	20, // 1: quilibrium.node.node.pb.FrameInfoResponse.clock_frame:type_name -> quilibrium.node.clock.pb.ClockFrame
 | ||||||
| 	7,  // 2: quilibrium.node.node.pb.PeerInfoResponse.peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 	7,  // 2: quilibrium.node.node.pb.PeerInfoResponse.peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | ||||||
| 	7,  // 3: quilibrium.node.node.pb.PeerInfoResponse.uncooperative_peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 	7,  // 3: quilibrium.node.node.pb.PeerInfoResponse.uncooperative_peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | ||||||
| 	7,  // 4: quilibrium.node.node.pb.PutPeerInfoRequest.peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 	7,  // 4: quilibrium.node.node.pb.PutPeerInfoRequest.peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | ||||||
| 	7,  // 5: quilibrium.node.node.pb.PutPeerInfoRequest.uncooperative_peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 	7,  // 5: quilibrium.node.node.pb.PutPeerInfoRequest.uncooperative_peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | ||||||
| 	9,  // 6: quilibrium.node.node.pb.NetworkInfoResponse.network_info:type_name -> quilibrium.node.node.pb.NetworkInfo
 | 	9,  // 6: quilibrium.node.node.pb.NetworkInfoResponse.network_info:type_name -> quilibrium.node.node.pb.NetworkInfo
 | ||||||
| 	0,  // 7: quilibrium.node.node.pb.NodeService.GetFrames:input_type -> quilibrium.node.node.pb.GetFramesRequest
 | 	17, // 7: quilibrium.node.node.pb.SelfTestReport.capabilities:type_name -> quilibrium.node.node.pb.Capability
 | ||||||
| 	1,  // 8: quilibrium.node.node.pb.NodeService.GetFrameInfo:input_type -> quilibrium.node.node.pb.GetFrameInfoRequest
 | 	19, // 8: quilibrium.node.node.pb.ValidationService.PerformValidation:input_type -> quilibrium.node.node.pb.ValidationMessage
 | ||||||
| 	2,  // 9: quilibrium.node.node.pb.NodeService.GetPeerInfo:input_type -> quilibrium.node.node.pb.GetPeerInfoRequest
 | 	0,  // 9: quilibrium.node.node.pb.NodeService.GetFrames:input_type -> quilibrium.node.node.pb.GetFramesRequest
 | ||||||
| 	3,  // 10: quilibrium.node.node.pb.NodeService.GetNodeInfo:input_type -> quilibrium.node.node.pb.GetNodeInfoRequest
 | 	1,  // 10: quilibrium.node.node.pb.NodeService.GetFrameInfo:input_type -> quilibrium.node.node.pb.GetFrameInfoRequest
 | ||||||
| 	4,  // 11: quilibrium.node.node.pb.NodeService.GetNetworkInfo:input_type -> quilibrium.node.node.pb.GetNetworkInfoRequest
 | 	2,  // 11: quilibrium.node.node.pb.NodeService.GetPeerInfo:input_type -> quilibrium.node.node.pb.GetPeerInfoRequest
 | ||||||
| 	15, // 12: quilibrium.node.node.pb.NodeService.GetTokenInfo:input_type -> quilibrium.node.node.pb.GetTokenInfoRequest
 | 	3,  // 12: quilibrium.node.node.pb.NodeService.GetNodeInfo:input_type -> quilibrium.node.node.pb.GetNodeInfoRequest
 | ||||||
| 	12, // 13: quilibrium.node.node.pb.NodeStats.PutNodeInfo:input_type -> quilibrium.node.node.pb.PutNodeInfoRequest
 | 	4,  // 13: quilibrium.node.node.pb.NodeService.GetNetworkInfo:input_type -> quilibrium.node.node.pb.GetNetworkInfoRequest
 | ||||||
| 	11, // 14: quilibrium.node.node.pb.NodeStats.PutPeerInfo:input_type -> quilibrium.node.node.pb.PutPeerInfoRequest
 | 	15, // 14: quilibrium.node.node.pb.NodeService.GetTokenInfo:input_type -> quilibrium.node.node.pb.GetTokenInfoRequest
 | ||||||
| 	5,  // 15: quilibrium.node.node.pb.NodeService.GetFrames:output_type -> quilibrium.node.node.pb.FramesResponse
 | 	12, // 15: quilibrium.node.node.pb.NodeStats.PutNodeInfo:input_type -> quilibrium.node.node.pb.PutNodeInfoRequest
 | ||||||
| 	6,  // 16: quilibrium.node.node.pb.NodeService.GetFrameInfo:output_type -> quilibrium.node.node.pb.FrameInfoResponse
 | 	11, // 16: quilibrium.node.node.pb.NodeStats.PutPeerInfo:input_type -> quilibrium.node.node.pb.PutPeerInfoRequest
 | ||||||
| 	8,  // 17: quilibrium.node.node.pb.NodeService.GetPeerInfo:output_type -> quilibrium.node.node.pb.PeerInfoResponse
 | 	19, // 17: quilibrium.node.node.pb.ValidationService.PerformValidation:output_type -> quilibrium.node.node.pb.ValidationMessage
 | ||||||
| 	10, // 18: quilibrium.node.node.pb.NodeService.GetNodeInfo:output_type -> quilibrium.node.node.pb.NodeInfoResponse
 | 	5,  // 18: quilibrium.node.node.pb.NodeService.GetFrames:output_type -> quilibrium.node.node.pb.FramesResponse
 | ||||||
| 	14, // 19: quilibrium.node.node.pb.NodeService.GetNetworkInfo:output_type -> quilibrium.node.node.pb.NetworkInfoResponse
 | 	6,  // 19: quilibrium.node.node.pb.NodeService.GetFrameInfo:output_type -> quilibrium.node.node.pb.FrameInfoResponse
 | ||||||
| 	16, // 20: quilibrium.node.node.pb.NodeService.GetTokenInfo:output_type -> quilibrium.node.node.pb.TokenInfoResponse
 | 	8,  // 20: quilibrium.node.node.pb.NodeService.GetPeerInfo:output_type -> quilibrium.node.node.pb.PeerInfoResponse
 | ||||||
| 	13, // 21: quilibrium.node.node.pb.NodeStats.PutNodeInfo:output_type -> quilibrium.node.node.pb.PutResponse
 | 	10, // 21: quilibrium.node.node.pb.NodeService.GetNodeInfo:output_type -> quilibrium.node.node.pb.NodeInfoResponse
 | ||||||
| 	13, // 22: quilibrium.node.node.pb.NodeStats.PutPeerInfo:output_type -> quilibrium.node.node.pb.PutResponse
 | 	14, // 22: quilibrium.node.node.pb.NodeService.GetNetworkInfo:output_type -> quilibrium.node.node.pb.NetworkInfoResponse
 | ||||||
| 	15, // [15:23] is the sub-list for method output_type
 | 	16, // 23: quilibrium.node.node.pb.NodeService.GetTokenInfo:output_type -> quilibrium.node.node.pb.TokenInfoResponse
 | ||||||
| 	7,  // [7:15] is the sub-list for method input_type
 | 	13, // 24: quilibrium.node.node.pb.NodeStats.PutNodeInfo:output_type -> quilibrium.node.node.pb.PutResponse
 | ||||||
| 	7,  // [7:7] is the sub-list for extension type_name
 | 	13, // 25: quilibrium.node.node.pb.NodeStats.PutPeerInfo:output_type -> quilibrium.node.node.pb.PutResponse
 | ||||||
| 	7,  // [7:7] is the sub-list for extension extendee
 | 	17, // [17:26] is the sub-list for method output_type
 | ||||||
| 	0,  // [0:7] is the sub-list for field type_name
 | 	8,  // [8:17] is the sub-list for method input_type
 | ||||||
|  | 	8,  // [8:8] is the sub-list for extension type_name
 | ||||||
|  | 	8,  // [8:8] is the sub-list for extension extendee
 | ||||||
|  | 	0,  // [0:8] is the sub-list for field type_name
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func init() { file_node_proto_init() } | func init() { file_node_proto_init() } | ||||||
| @ -1432,6 +1783,42 @@ func file_node_proto_init() { | |||||||
| 				return nil | 				return nil | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | 		file_node_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*Capability); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_node_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*SelfTestReport); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_node_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { | ||||||
|  | 			switch v := v.(*ValidationMessage); i { | ||||||
|  | 			case 0: | ||||||
|  | 				return &v.state | ||||||
|  | 			case 1: | ||||||
|  | 				return &v.sizeCache | ||||||
|  | 			case 2: | ||||||
|  | 				return &v.unknownFields | ||||||
|  | 			default: | ||||||
|  | 				return nil | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	type x struct{} | 	type x struct{} | ||||||
| 	out := protoimpl.TypeBuilder{ | 	out := protoimpl.TypeBuilder{ | ||||||
| @ -1439,9 +1826,9 @@ func file_node_proto_init() { | |||||||
| 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | ||||||
| 			RawDescriptor: file_node_proto_rawDesc, | 			RawDescriptor: file_node_proto_rawDesc, | ||||||
| 			NumEnums:      0, | 			NumEnums:      0, | ||||||
| 			NumMessages:   17, | 			NumMessages:   20, | ||||||
| 			NumExtensions: 0, | 			NumExtensions: 0, | ||||||
| 			NumServices:   2, | 			NumServices:   3, | ||||||
| 		}, | 		}, | ||||||
| 		GoTypes:           file_node_proto_goTypes, | 		GoTypes:           file_node_proto_goTypes, | ||||||
| 		DependencyIndexes: file_node_proto_depIdxs, | 		DependencyIndexes: file_node_proto_depIdxs, | ||||||
|  | |||||||
| @ -31,6 +31,40 @@ var _ = runtime.String | |||||||
| var _ = utilities.NewDoubleArray | var _ = utilities.NewDoubleArray | ||||||
| var _ = metadata.Join | var _ = metadata.Join | ||||||
| 
 | 
 | ||||||
|  | func request_ValidationService_PerformValidation_0(ctx context.Context, marshaler runtime.Marshaler, client ValidationServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq ValidationMessage | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  | 
 | ||||||
|  | 	newReader, berr := utilities.IOReaderFactory(req.Body) | ||||||
|  | 	if berr != nil { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) | ||||||
|  | 	} | ||||||
|  | 	if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	msg, err := client.PerformValidation(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | ||||||
|  | 	return msg, metadata, err | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func local_request_ValidationService_PerformValidation_0(ctx context.Context, marshaler runtime.Marshaler, server ValidationServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
|  | 	var protoReq ValidationMessage | ||||||
|  | 	var metadata runtime.ServerMetadata | ||||||
|  | 
 | ||||||
|  | 	newReader, berr := utilities.IOReaderFactory(req.Body) | ||||||
|  | 	if berr != nil { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) | ||||||
|  | 	} | ||||||
|  | 	if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { | ||||||
|  | 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	msg, err := server.PerformValidation(ctx, &protoReq) | ||||||
|  | 	return msg, metadata, err | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func request_NodeService_GetFrames_0(ctx context.Context, marshaler runtime.Marshaler, client NodeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | func request_NodeService_GetFrames_0(ctx context.Context, marshaler runtime.Marshaler, client NodeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||||
| 	var protoReq GetFramesRequest | 	var protoReq GetFramesRequest | ||||||
| 	var metadata runtime.ServerMetadata | 	var metadata runtime.ServerMetadata | ||||||
| @ -303,6 +337,40 @@ func local_request_NodeStats_PutPeerInfo_0(ctx context.Context, marshaler runtim | |||||||
| 
 | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // RegisterValidationServiceHandlerServer registers the http handlers for service ValidationService to "mux".
 | ||||||
|  | // UnaryRPC     :call ValidationServiceServer directly.
 | ||||||
|  | // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | ||||||
|  | // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterValidationServiceHandlerFromEndpoint instead.
 | ||||||
|  | func RegisterValidationServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ValidationServiceServer) error { | ||||||
|  | 
 | ||||||
|  | 	mux.Handle("POST", pattern_ValidationService_PerformValidation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		var stream runtime.ServerTransportStream | ||||||
|  | 		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		var err error | ||||||
|  | 		var annotatedContext context.Context | ||||||
|  | 		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/quilibrium.node.node.pb.ValidationService/PerformValidation", runtime.WithHTTPPathPattern("/quilibrium.node.node.pb.ValidationService/PerformValidation")) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := local_request_ValidationService_PerformValidation_0(annotatedContext, inboundMarshaler, server, req, pathParams) | ||||||
|  | 		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | ||||||
|  | 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		forward_ValidationService_PerformValidation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  | 
 | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // RegisterNodeServiceHandlerServer registers the http handlers for service NodeService to "mux".
 | // RegisterNodeServiceHandlerServer registers the http handlers for service NodeService to "mux".
 | ||||||
| // UnaryRPC     :call NodeServiceServer directly.
 | // UnaryRPC     :call NodeServiceServer directly.
 | ||||||
| // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | ||||||
| @ -521,6 +589,77 @@ func RegisterNodeStatsHandlerServer(ctx context.Context, mux *runtime.ServeMux, | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // RegisterValidationServiceHandlerFromEndpoint is same as RegisterValidationServiceHandler but
 | ||||||
|  | // automatically dials to "endpoint" and closes the connection when "ctx" gets done.
 | ||||||
|  | func RegisterValidationServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { | ||||||
|  | 	conn, err := grpc.DialContext(ctx, endpoint, opts...) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	defer func() { | ||||||
|  | 		if err != nil { | ||||||
|  | 			if cerr := conn.Close(); cerr != nil { | ||||||
|  | 				grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) | ||||||
|  | 			} | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		go func() { | ||||||
|  | 			<-ctx.Done() | ||||||
|  | 			if cerr := conn.Close(); cerr != nil { | ||||||
|  | 				grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) | ||||||
|  | 			} | ||||||
|  | 		}() | ||||||
|  | 	}() | ||||||
|  | 
 | ||||||
|  | 	return RegisterValidationServiceHandler(ctx, mux, conn) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // RegisterValidationServiceHandler registers the http handlers for service ValidationService to "mux".
 | ||||||
|  | // The handlers forward requests to the grpc endpoint over "conn".
 | ||||||
|  | func RegisterValidationServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { | ||||||
|  | 	return RegisterValidationServiceHandlerClient(ctx, mux, NewValidationServiceClient(conn)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // RegisterValidationServiceHandlerClient registers the http handlers for service ValidationService
 | ||||||
|  | // to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ValidationServiceClient".
 | ||||||
|  | // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ValidationServiceClient"
 | ||||||
|  | // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
 | ||||||
|  | // "ValidationServiceClient" to call the correct interceptors.
 | ||||||
|  | func RegisterValidationServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ValidationServiceClient) error { | ||||||
|  | 
 | ||||||
|  | 	mux.Handle("POST", pattern_ValidationService_PerformValidation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||||
|  | 		ctx, cancel := context.WithCancel(req.Context()) | ||||||
|  | 		defer cancel() | ||||||
|  | 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||||
|  | 		var err error | ||||||
|  | 		var annotatedContext context.Context | ||||||
|  | 		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/quilibrium.node.node.pb.ValidationService/PerformValidation", runtime.WithHTTPPathPattern("/quilibrium.node.node.pb.ValidationService/PerformValidation")) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		resp, md, err := request_ValidationService_PerformValidation_0(annotatedContext, inboundMarshaler, client, req, pathParams) | ||||||
|  | 		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) | ||||||
|  | 		if err != nil { | ||||||
|  | 			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		forward_ValidationService_PerformValidation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||||
|  | 
 | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | var ( | ||||||
|  | 	pattern_ValidationService_PerformValidation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.node.pb.ValidationService", "PerformValidation"}, "")) | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var ( | ||||||
|  | 	forward_ValidationService_PerformValidation_0 = runtime.ForwardResponseMessage | ||||||
|  | ) | ||||||
|  | 
 | ||||||
| // RegisterNodeServiceHandlerFromEndpoint is same as RegisterNodeServiceHandler but
 | // RegisterNodeServiceHandlerFromEndpoint is same as RegisterNodeServiceHandler but
 | ||||||
| // automatically dials to "endpoint" and closes the connection when "ctx" gets done.
 | // automatically dials to "endpoint" and closes the connection when "ctx" gets done.
 | ||||||
| func RegisterNodeServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { | func RegisterNodeServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { | ||||||
|  | |||||||
| @ -96,6 +96,72 @@ message TokenInfoResponse { | |||||||
|   bytes unconfirmed_owned_tokens = 4; |   bytes unconfirmed_owned_tokens = 4; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | message Capability { | ||||||
|  |   // A general protocol identifier as a uint32 – this is expected to rarely | ||||||
|  |   // iterate, and should be uniquely identifying both protocol and version. | ||||||
|  |   // Pragmatically speaking, this implies that the least significant byte | ||||||
|  |   // specifies version (which should iterate most minimally), and the three most | ||||||
|  |   // significant bytes should specify protocol. Recipients SHOULD ignore | ||||||
|  |   // messages with incompatible protocol identifiers, but also SHOULD warn on | ||||||
|  |   // identifiers with versions higher than the supported protocol. A large | ||||||
|  |   // number of unsupported protocol messages may indicate spam/some other | ||||||
|  |   // attack, whereas a large number of unsupported protocol versions may | ||||||
|  |   // indicate an out of date client, respective to which side is the maximum of | ||||||
|  |   // the version number. | ||||||
|  |   uint32 protocol_identifier = 1; | ||||||
|  |   // An optional bundle of information specific to the capability – used for | ||||||
|  |   // extensibility in negotiating variations of a protocol – e.g. Triple-Ratchet | ||||||
|  |   // but only for certain curve types. | ||||||
|  |   bytes additional_metadata = 2; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message SelfTestReport { | ||||||
|  |   // The difficulty the self test was conducted under | ||||||
|  |   uint32 difficulty = 1; | ||||||
|  |   // The resulting local time of computing the VDF test under the difficulty | ||||||
|  |   int64 difficulty_metric = 2; | ||||||
|  |   // The resulting local time of computing a KZG commitment for a 16 degree | ||||||
|  |   // polynomial | ||||||
|  |   int64 commit_16_metric = 3; | ||||||
|  |   // The resulting local time of computing a KZG commitment for a 128 degree | ||||||
|  |   // polynomial | ||||||
|  |   int64 commit_128_metric = 4; | ||||||
|  |   // The resulting local time of computing a KZG commitment for a 1024 degree | ||||||
|  |   // polynomial | ||||||
|  |   int64 commit_1024_metric = 5; | ||||||
|  |   // The resulting local time of computing a KZG commitment for a 65536 degree | ||||||
|  |   // polynomial | ||||||
|  |   int64 commit_65536_metric = 6; | ||||||
|  |   // The resulting local time of computing a KZG proof for a 16 degree | ||||||
|  |   // polynomial | ||||||
|  |   int64 proof_16_metric = 7; | ||||||
|  |   // The resulting local time of computing a KZG proof for a 128 degree | ||||||
|  |   // polynomial | ||||||
|  |   int64 proof_128_metric = 8; | ||||||
|  |   // The resulting local time of computing a KZG proof for a 1024 degree | ||||||
|  |   // polynomial | ||||||
|  |   int64 proof_1024_metric = 9; | ||||||
|  |   // The resulting local time of computing a KZG proof for a 65536 degree | ||||||
|  |   // polynomial | ||||||
|  |   int64 proof_65536_metric = 10; | ||||||
|  |   // The number of reported accessible cores | ||||||
|  |   uint32 cores = 11; | ||||||
|  |   // The total available memory | ||||||
|  |   bytes memory = 12; | ||||||
|  |   // The total available storage | ||||||
|  |   bytes storage = 13; | ||||||
|  |   // The list of supported capabilities | ||||||
|  |   repeated Capability capabilities = 14; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message ValidationMessage { | ||||||
|  |   bytes validation = 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | service ValidationService { | ||||||
|  |   rpc PerformValidation(ValidationMessage) returns (ValidationMessage); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| service NodeService { | service NodeService { | ||||||
|   rpc GetFrames(GetFramesRequest) returns (FramesResponse); |   rpc GetFrames(GetFramesRequest) returns (FramesResponse); | ||||||
|   rpc GetFrameInfo(GetFrameInfoRequest) returns (FrameInfoResponse); |   rpc GetFrameInfo(GetFrameInfoRequest) returns (FrameInfoResponse); | ||||||
|  | |||||||
| @ -18,6 +18,96 @@ import ( | |||||||
| // Requires gRPC-Go v1.32.0 or later.
 | // Requires gRPC-Go v1.32.0 or later.
 | ||||||
| const _ = grpc.SupportPackageIsVersion7 | const _ = grpc.SupportPackageIsVersion7 | ||||||
| 
 | 
 | ||||||
|  | const ( | ||||||
|  | 	ValidationService_PerformValidation_FullMethodName = "/quilibrium.node.node.pb.ValidationService/PerformValidation" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // ValidationServiceClient is the client API for ValidationService service.
 | ||||||
|  | //
 | ||||||
|  | // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
 | ||||||
|  | type ValidationServiceClient interface { | ||||||
|  | 	PerformValidation(ctx context.Context, in *ValidationMessage, opts ...grpc.CallOption) (*ValidationMessage, error) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type validationServiceClient struct { | ||||||
|  | 	cc grpc.ClientConnInterface | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewValidationServiceClient(cc grpc.ClientConnInterface) ValidationServiceClient { | ||||||
|  | 	return &validationServiceClient{cc} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c *validationServiceClient) PerformValidation(ctx context.Context, in *ValidationMessage, opts ...grpc.CallOption) (*ValidationMessage, error) { | ||||||
|  | 	out := new(ValidationMessage) | ||||||
|  | 	err := c.cc.Invoke(ctx, ValidationService_PerformValidation_FullMethodName, in, out, opts...) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return out, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // ValidationServiceServer is the server API for ValidationService service.
 | ||||||
|  | // All implementations must embed UnimplementedValidationServiceServer
 | ||||||
|  | // for forward compatibility
 | ||||||
|  | type ValidationServiceServer interface { | ||||||
|  | 	PerformValidation(context.Context, *ValidationMessage) (*ValidationMessage, error) | ||||||
|  | 	mustEmbedUnimplementedValidationServiceServer() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // UnimplementedValidationServiceServer must be embedded to have forward compatible implementations.
 | ||||||
|  | type UnimplementedValidationServiceServer struct { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (UnimplementedValidationServiceServer) PerformValidation(context.Context, *ValidationMessage) (*ValidationMessage, error) { | ||||||
|  | 	return nil, status.Errorf(codes.Unimplemented, "method PerformValidation not implemented") | ||||||
|  | } | ||||||
|  | func (UnimplementedValidationServiceServer) mustEmbedUnimplementedValidationServiceServer() {} | ||||||
|  | 
 | ||||||
|  | // UnsafeValidationServiceServer may be embedded to opt out of forward compatibility for this service.
 | ||||||
|  | // Use of this interface is not recommended, as added methods to ValidationServiceServer will
 | ||||||
|  | // result in compilation errors.
 | ||||||
|  | type UnsafeValidationServiceServer interface { | ||||||
|  | 	mustEmbedUnimplementedValidationServiceServer() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func RegisterValidationServiceServer(s grpc.ServiceRegistrar, srv ValidationServiceServer) { | ||||||
|  | 	s.RegisterService(&ValidationService_ServiceDesc, srv) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func _ValidationService_PerformValidation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | ||||||
|  | 	in := new(ValidationMessage) | ||||||
|  | 	if err := dec(in); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	if interceptor == nil { | ||||||
|  | 		return srv.(ValidationServiceServer).PerformValidation(ctx, in) | ||||||
|  | 	} | ||||||
|  | 	info := &grpc.UnaryServerInfo{ | ||||||
|  | 		Server:     srv, | ||||||
|  | 		FullMethod: ValidationService_PerformValidation_FullMethodName, | ||||||
|  | 	} | ||||||
|  | 	handler := func(ctx context.Context, req interface{}) (interface{}, error) { | ||||||
|  | 		return srv.(ValidationServiceServer).PerformValidation(ctx, req.(*ValidationMessage)) | ||||||
|  | 	} | ||||||
|  | 	return interceptor(ctx, in, info, handler) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // ValidationService_ServiceDesc is the grpc.ServiceDesc for ValidationService service.
 | ||||||
|  | // It's only intended for direct use with grpc.RegisterService,
 | ||||||
|  | // and not to be introspected or modified (even as a copy)
 | ||||||
|  | var ValidationService_ServiceDesc = grpc.ServiceDesc{ | ||||||
|  | 	ServiceName: "quilibrium.node.node.pb.ValidationService", | ||||||
|  | 	HandlerType: (*ValidationServiceServer)(nil), | ||||||
|  | 	Methods: []grpc.MethodDesc{ | ||||||
|  | 		{ | ||||||
|  | 			MethodName: "PerformValidation", | ||||||
|  | 			Handler:    _ValidationService_PerformValidation_Handler, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	Streams:  []grpc.StreamDesc{}, | ||||||
|  | 	Metadata: "node.proto", | ||||||
|  | } | ||||||
|  | 
 | ||||||
| const ( | const ( | ||||||
| 	NodeService_GetFrames_FullMethodName      = "/quilibrium.node.node.pb.NodeService/GetFrames" | 	NodeService_GetFrames_FullMethodName      = "/quilibrium.node.node.pb.NodeService/GetFrames" | ||||||
| 	NodeService_GetFrameInfo_FullMethodName   = "/quilibrium.node.node.pb.NodeService/GetFrameInfo" | 	NodeService_GetFrameInfo_FullMethodName   = "/quilibrium.node.node.pb.NodeService/GetFrameInfo" | ||||||
|  | |||||||
| @ -8,6 +8,7 @@ const ( | |||||||
| 	ClockPrefix                          = NamespacePrefix + "clock.pb." | 	ClockPrefix                          = NamespacePrefix + "clock.pb." | ||||||
| 	KeysPrefix                           = NamespacePrefix + "keys.pb." | 	KeysPrefix                           = NamespacePrefix + "keys.pb." | ||||||
| 	CeremonyPrefix                       = NamespacePrefix + "ceremony.pb." | 	CeremonyPrefix                       = NamespacePrefix + "ceremony.pb." | ||||||
|  | 	NodePrefix                           = NamespacePrefix + "node.pb" | ||||||
| 	CeremonyTranscriptType               = CeremonyPrefix + "CeremonyTranscript" | 	CeremonyTranscriptType               = CeremonyPrefix + "CeremonyTranscript" | ||||||
| 	CeremonyLobbyStateType               = CeremonyPrefix + "CeremonyLobbyState" | 	CeremonyLobbyStateType               = CeremonyPrefix + "CeremonyLobbyState" | ||||||
| 	CeremonySeenProverAttestationType    = CeremonyPrefix + "CeremonySeenProverAttestation" | 	CeremonySeenProverAttestationType    = CeremonyPrefix + "CeremonySeenProverAttestation" | ||||||
| @ -54,4 +55,5 @@ const ( | |||||||
| 	BLS48581G1PrivateKeyType             = KeysPrefix + "BLS48581G1PrivateKey" | 	BLS48581G1PrivateKeyType             = KeysPrefix + "BLS48581G1PrivateKey" | ||||||
| 	BLS48581G2PublicKeyType              = KeysPrefix + "BLS48581G2PublicKey" | 	BLS48581G2PublicKeyType              = KeysPrefix + "BLS48581G2PublicKey" | ||||||
| 	BLS48581G2PrivateKeyType             = KeysPrefix + "BLS48581G2PrivateKey" | 	BLS48581G2PrivateKeyType             = KeysPrefix + "BLS48581G2PrivateKey" | ||||||
|  | 	SelfTestReportType                   = NodePrefix + "SelfTestReport" | ||||||
| ) | ) | ||||||
|  | |||||||
| @ -17,7 +17,6 @@ type DataProofStore interface { | |||||||
| 		filter []byte, | 		filter []byte, | ||||||
| 		commitment []byte, | 		commitment []byte, | ||||||
| 		frameNumber uint64, | 		frameNumber uint64, | ||||||
| 		inclusionReassembler func(typeUrl string, data [][]byte) ([]byte, error), |  | ||||||
| 	) ( | 	) ( | ||||||
| 		*protobufs.InclusionAggregateProof, | 		*protobufs.InclusionAggregateProof, | ||||||
| 		error, | 		error, | ||||||
|  | |||||||
							
								
								
									
										17
									
								
								node/utils/selftest_intrinsics_unix.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								node/utils/selftest_intrinsics_unix.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | //go:build !windows
 | ||||||
|  | // +build !windows
 | ||||||
|  | 
 | ||||||
|  | package utils | ||||||
|  | 
 | ||||||
|  | import "golang.org/x/sys/unix" | ||||||
|  | 
 | ||||||
|  | func GetDiskSpace(dir string) uint64 { | ||||||
|  | 	var stat unix.Statfs_t | ||||||
|  | 
 | ||||||
|  | 	err := unix.Statfs(dir, &stat) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return stat.Bavail * uint64(stat.Bsize) | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								node/utils/selftest_intrinsics_windows.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								node/utils/selftest_intrinsics_windows.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | //go:build windows
 | ||||||
|  | // +build windows
 | ||||||
|  | 
 | ||||||
|  | package utils | ||||||
|  | 
 | ||||||
|  | import "golang.org/x/sys/windows" | ||||||
|  | 
 | ||||||
|  | func GetDiskSpace(dir string) uint64 { | ||||||
|  | 	var freeBytesAvailable uint64 | ||||||
|  | 	var totalNumberOfBytes uint64 | ||||||
|  | 	var totalNumberOfFreeBytes uint64 | ||||||
|  | 
 | ||||||
|  | 	err := windows.GetDiskFreeSpaceEx(windows.StringToUTF16Ptr(dir), | ||||||
|  | 		&freeBytesAvailable, &totalNumberOfBytes, &totalNumberOfFreeBytes) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return totalNumberOfBytes | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Cassandra Heart
						Cassandra Heart